Passwörter werden grundsätzlich nicht im Klartext gespeichert. Dies soll verhindern, dass im Falle einer Systemkompromittierung alle auf dem System verwalteten Passwörter eingesehen werden können. Passwörter werden gehasht und nur der Hashwert wird gespeichert.
Beim Passwort-Hashing wird das Passwort in eine Zeichenfolge umgewandelt. Der Hashwert kann nicht in den ursprünglichen Text zurückverwandelt werden
Wie genau funktioniert Passwort-Hashing?
Wenn sich ein Benutzer auf einer Webseite anmeldet, die Passwort-Hashing verwendet, geschieht Folgendes
- Der Benutzer wählt ein Passwort und gibt es bei der Registrierung ein.
- Bei der Neuerstellung des Passworts wird daraus ein Hash-Wert erzeugt, z. B. nach dem Hash-Algorithmus SHA-1, d. h., das Passwort wird auf eine spezielle Art und Weise verschlüsselt, so dass es aus dem Hash-Wert nicht mehr rekonstruiert werden kann. Hash-Algorithmen sind Einweg-Algorithmen. Das Passwort
IbiWgugiMaG
hat den Hashwert:34 27 CD E8 EC F9 45 61 98 89 F7 DA 95 CO B9 B1
. - Der Hash-Wert wird in einer Datenbank zusammen mit anderen Benutzerinformationen wie dem Benutzernamen gespeichert.
- Will sich der Benutzer anmelden, gibt er seinen Benutzernamen und sein Passwort ein.
- Das eingegebene Passwort wird erneut durch den Hash-Algorithmus geleitet und der so erzeugte Hash-Wert wird mit dem in der Datenbank hinterlegten Hash-Wert verglichen.
- Stimmen beide Werte überein, wird der Zugang gewährt, andernfalls wird der Benutzer abgewiesen und aufgefordert, es erneut zu versuchen.
Eigenschaften einer guten Hash-Funktion
Eine gute Hashfunktion hat einige Eigenschaften, die sie sicher und zuverlässig machen:
- Geschwindigkeit: Eine gute Hash-Funktion ist schnell, damit sie in Echtzeitanwendungen eingesetzt werden zu können..
- Kollisionsresistenz: Eine gute Hash-Funktion weist möglichst wenige Kollisionen auf, so dass unterschiedliche Eingaben möglichst unterschiedliche Hashwerte erzeugen.
- Einwegfunktion: Es muss unmöglich sein, aus dem Hashwert das ursprüngliche Passwort zu errechnen.
Es gibt viele sichere Passwort-Hashing-Algorithmen, die verwendet werden können. Einige bekannte Beispiele sind: bcrypt, PBKDF2, scrypt und Argon2.
Gesalzene und gepfefferte Passwörter
Gesalzene Passwörter sind Passwörter, die vor dem Hashing mit einem Zufallswert, dem sogenannten „Salt“, versehen werden. Dadurch unterscheiden sich die Hashwerte von Passwörtern, die den gleichen Text enthalten. Ohne Salt sind alle Passwörter, die den gleichen Text enthalten, gleich und können mit Hilfe von Rainbow-Tables oder anderen Methoden entschlüsselt werden.
Gepfefferte Passwörter sind eine Erweiterung der gesalzenen Passwörter. Sie fügen dem Salt-Wert einen weiteren Wert hinzu, der als „Pepper“ bezeichnet wird. Der Pepper-Wert wird nicht gespeichert, sondern in der Anwendung selbst verwaltet.
Gesalzene und gepfefferte Passwörter sind wirksame Methoden zum Schutz von Passwörtern, insbesondere wenn sie in Verbindung mit einem sicheren Hash-Algorithmus verwendet werden. Sie erschweren es Angreifern erheblich, Passwörter zu entschlüsseln.
Sicherheit von Passwort-Hashing
Passwort-Hashing ist eine gute Methode, um Passwörter sicher zu speichern, aber nicht hundertprozentig sicher. Mit Hilfe von Rainbow-Tables, Brute-Force-Angriffen oder Side-Channel-Angriffen können Angreifer an die Hashwerte von Passwörtern gelangen:
Rainbow-Tables
Rainbow-Tables sind vorgefertigte Tabellen, die alle möglichen Hash-Werte für eine Reihe von Passwörtern enthalten. Wenn ein Angreifer in den Besitz der Hash-Werte von Passwörtern gelangt, kann er diese mit Hilfe von Rainbow-Tables zurückverfolgen.
Brute-Force-Angriffe
Bei einem Brute-Force-Angriff werden alle möglichen Zeichenkombinationen durchprobiert, gehasht und dann auf Übereinstimmung mit dem hinterlegten Hash-Wert geprüft. Wenn die Passwörter nicht stark genug sind, können Brute-Force-Angriffe erfolgreich sein.
Side-Channel-Angriffe
Side-Channel-Angriffe sind Angriffe, bei denen ein Angreifer versucht, Informationen aus dem System zu extrahieren, indem er die Hardware oder Software des Systems überwacht. Dies kann zur Aufdeckung von Passwort-Hash-Werten führen.
Fazit / Zusammenfassung
Passwort-Hashing ist eine wichtige Maßnahme, um Passwörter sicher zu speichern. Der Hash-Algorithmus ist eine einseitige Funktion, d.h. es ist nicht möglich, das ursprüngliche Passwort aus dem Hash-Wert zurückzurechnen.
Zusätzlich besteht die Möglichkeit, Passwörter zu salzen. Dadurch ist es selbst bei einem erfolgreichen Angriff auf die Passwort-Hashes nicht so einfach, die ursprünglichen Passwörter zu ermitteln.
Mit Brute-Force-, Dictionary- und Side-Channel-Attacken lassen sich Passwort-Hashes angreifen. Um den Passwortdiebstahl zu erschweren, wählt man ein sehr langes Passwort.