Passwort-Hashing: Salt, Algorithmen und Login
Beim Passwort-Hashing speichert eine Anwendung nicht das Passwort selbst. Sie berechnet mit einem individuellen Salt und einer geeigneten langsamen Passwort-Hashfunktion einen Prüfwert. Beim Login wird die Berechnung wiederholt und das Ergebnis verglichen.
So erschwert ein Datenbankleck den unmittelbaren Missbrauch. Es verhindert aber nicht, dass Angreifer mögliche Passwörter systematisch ausprobieren.
Hake ab, was du schon kannst — und komm am Ende hierher zurück!
Was wird anstelle des Passworts gespeichert?
Eine Hashfunktion bildet eine Eingabe auf einen Hashwert fester Länge ab. Für die Passwortspeicherung soll aus dem Hash das ursprüngliche Passwort praktisch nicht zurückgewonnen werden können.
Passwort-Hashing
Passwort-Hashing ist die Einwegverarbeitung eines Passworts zur späteren Überprüfung. Gespeichert werden der berechnete Hash sowie die für die erneute Berechnung benötigten Angaben – nicht das Klartextpasswort.
Hashing und Verschlüsselung erfüllen unterschiedliche Aufgaben:
- Verschlüsselung ist umkehrbar: Mit dem passenden Schlüssel lassen sich die Daten wiederherstellen.
- Hashing ist nicht zur Wiederherstellung gedacht: Eine neue Eingabe wird verarbeitet und mit dem gespeicherten Ergebnis verglichen.
Dass ein Hash nicht entschlüsselt wird, bedeutet nicht, dass das Passwort unangreifbar ist. Nach einem Datenbankdiebstahl können Angreifer Kandidaten hashen und nach einer Übereinstimmung suchen. Das ist ein Offline-Angriff, weil dafür keine weiteren Anfragen an den Anmeldeserver nötig sind.
Nora legt ein Passwort fest. Die Anwendung verarbeitet es und speichert nur die für die spätere Prüfung benötigten Hashdaten. Beim nächsten Login verarbeitet sie Noras Eingabe erneut. Stimmen beide Ergebnisse überein, gilt das eingegebene Passwort als passend.
Die Anwendung muss Noras ursprüngliches Passwort dafür weder speichern noch wiederherstellen.
Warum braucht jedes Passwort einen Salt?
Ohne Zusatzwert erzeugen identische Passwörter beim gleichen Verfahren identische Hashes. Ein Datenbankleck würde dadurch sofort zeigen, welche Konten vermutlich dasselbe Passwort verwenden.
Salt
Ein Salt ist ein zufälliger, für jedes Passwort neu erzeugter Wert. Er geht zusammen mit dem Passwort in die Hashberechnung ein und wird neben dem Hash gespeichert.
Der Salt muss nicht geheim sein. Seine Aufgabe ist die Einzigartigkeit: Selbst wenn zwei Personen dasselbe Passwort wählen, führen unterschiedliche Salts zu unterschiedlichen gespeicherten Hashes.
Vorberechnete Tabellen mit bekannten Passwort-Hash-Paaren werden dadurch weitgehend unbrauchbar. Angreifer müssen jeden Kandidaten für jeden Salt neu berechnen.
Ali und Bea wählen zufällig dasselbe Passwort.
- Die Anwendung erzeugt für Ali einen zufälligen Salt.
- Für Bea erzeugt sie unabhängig davon einen anderen Salt.
- Beide Kombinationen werden gehasht.
- Trotz gleicher Passwörter entstehen unterschiedliche gespeicherte Hashes.
Ein Datenbankvergleich verrät deshalb nicht unmittelbar, dass Ali und Bea dasselbe Passwort gewählt haben.
Ein Salt macht gleiche Passwörter unterscheidbar und erschwert vorberechnete Angriffe. Er macht ein leicht erratbares Passwort jedoch nicht stark.
Warum muss die Berechnung absichtlich aufwendig sein?
Allgemeine Hashfunktionen wie MD5, SHA-1 oder SHA-256 sind auf schnelle Berechnungen ausgelegt. Genau diese Geschwindigkeit ist bei Passwörtern ein Nachteil: Angreifer können sehr viele Kandidaten in kurzer Zeit testen. MD5 und SHA-1 sind zudem kryptografisch gebrochen und für Passwortspeicherung ungeeignet.
Passwort-Hashfunktionen wie bcrypt, scrypt und Argon2 wurden für diesen Zweck entwickelt. Sie erhöhen den Rechenaufwand; scrypt und Argon2 können zusätzlich viel Speicher beanspruchen. Das verteuert besonders massenhaft parallele Versuche mit Spezialhardware.
Work Factor
Der Work Factor ist ein einstellbarer Kostenparameter einer Passwort-Hashfunktion. Ein höherer Wert macht jede einzelne Berechnung aufwendiger und verringert dadurch die Zahl möglicher Rateversuche pro Zeit.
Die Einstellung muss zwei Ziele ausgleichen:
- Ein legitimer Login soll noch in angemessener Zeit möglich sein.
- Massenhaftes Ausprobieren soll möglichst teuer werden.
Mit steigender Rechenleistung sollte der Betreiber die Parameter prüfen und bei Bedarf anheben. Salt und Work Factor erfüllen dabei verschiedene Aufgaben: Der Salt verhindert wiederverwendbare Vorberechnungen, der Work Factor verteuert jede neue Berechnung.
Wie funktionieren Registrierung und Login?
Bei einer sicheren Registrierung läuft die Speicherung so ab:
- Die Anwendung erhält das Passwort nur für die aktuelle Verarbeitung.
- Sie erzeugt einen neuen zufälligen Salt.
- Sie verarbeitet Passwort und Salt mit einer geeigneten Passwort-Hashfunktion und festgelegten Kostenparametern.
- Sie speichert Hash, Salt, Algorithmus beziehungsweise Format und Parameter.
- Das Klartextpasswort wird nicht gespeichert.
Beim Login folgt die Anwendung diesem Ablauf:
- Sie liest die gespeicherten Hashdaten des Kontos.
- Sie verarbeitet die eingegebene Zeichenfolge mit demselben Salt, Verfahren und denselben Parametern.
- Sie vergleicht den neu berechneten Hash mit dem gespeicherten Hash.
- Nur bei Übereinstimmung ist die Passwortprüfung erfolgreich.
Ein System speichert zu einem Konto den Salt, den Hash und die verwendeten Parameter. Beim Login wird kein gespeichertes Passwort entschlüsselt. Stattdessen berechnet das System aus der neuen Eingabe erneut einen Hash.
Eine minimale Änderung der Eingabe soll einen deutlich anderen Hash ergeben. Deshalb scheitert die Prüfung bereits bei einem falschen Zeichen.
Welche Angriffe und Entwurfsfehler bleiben möglich?
Passwort-Hashing begrenzt den Schaden eines Datenbanklecks, löst aber nicht jedes Sicherheitsproblem.
- Bei einem Wörterbuchangriff probieren Angreifer häufige Wörter und bekannte Passwörter aus.
- Beim Brute-Force-Angriff werden systematisch viele mögliche Zeichenfolgen getestet.
- Beim Credential Stuffing werden gestohlene Zugangsdaten bei anderen Diensten ausprobiert.
- Beim Password Spraying wird ein häufiges Passwort gegen viele Konten getestet.
Schwache oder wiederverwendete Passwörter bleiben daher gefährlich. Salt und Work Factor bremsen Angriffe, ersetzen aber keine starken, einzigartigen Passwörter.
Typische Entwurfsfehler sind:
- Klartextpasswörter speichern;
- denselben Salt für viele Konten verwenden;
- MD5, SHA-1 oder eine schnelle allgemeine Hashfunktion allein einsetzen;
- Kostenparameter dauerhaft unverändert lassen;
- glauben, Hashing schütze auch während Eingabe und Übertragung;
- Passwort-Hashing mit Transportverschlüsselung verwechseln.
Passwort-Hashing schützt gespeicherte Anmeldedaten. Die sichere Übertragung zum Server ist eine andere Aufgabe und benötigt zusätzlich Transportverschlüsselung. Keine der beiden Maßnahmen ersetzt die andere.
Wie lässt sich ein altes Verfahren migrieren?
Bestehende Systeme können alte Hashes nicht einfach in neue Hashes umrechnen, denn das ursprüngliche Passwort ist nicht bekannt. Eine schrittweise Migration nutzt deshalb den nächsten erfolgreichen Login:
- Das System erkennt am gespeicherten Format, welches alte Verfahren verwendet wurde.
- Es prüft die Anmeldung noch einmal mit diesem Verfahren.
- Nach erfolgreicher Prüfung liegt das eingegebene Passwort kurzfristig vor.
- Das System erzeugt einen neuen Salt und hasht das Passwort mit dem modernen Verfahren.
- Es ersetzt die alten Hashdaten durch die neuen Angaben.
Konten ohne erfolgreichen Login können über einen Passwort-Reset umgestellt werden. Während der Übergangszeit muss das System die Formate eindeutig unterscheiden und die alte Methode nur so lange wie nötig unterstützen.
Eine Anwendung besitzt noch Konten mit SHA-1-Hashes. Neue Passwörter verarbeitet sie bereits mit einer geeigneten Passwort-Hashfunktion.
Meldet sich ein bestehender Nutzer erfolgreich an, prüft die Anwendung zunächst den alten Hash. Unmittelbar danach speichert sie dasselbe eingegebene Passwort mit neuem Salt und modernem Verfahren. Beim nächsten Login ist nur noch die neue Prüfung nötig.
Karteikasten
Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.
Alles auf einen Blick
- Passwort-Hashing
- speichert Hash statt Klartextpasswort
- kombiniert jedes Passwort mit individuellem Salt
- nutzt eine absichtlich aufwendige Passwort-Hashfunktion
- speichert Salt, Hash, Verfahren und Parameter
- prüft Logins durch erneute Berechnung
- erschwert vorberechnete und massenhafte Versuche
- ersetzt weder starke Passwörter noch Transportverschlüsselung
- ermöglicht schrittweise Migration beim erfolgreichen Login
Abschluss-Check
Prüfe deinen Entwurf abschließend mit vier Fragen:
- Wird irgendwo ein Klartextpasswort dauerhaft gespeichert oder wiederherstellbar abgelegt?
- Erhält jedes neue Passwort einen eigenen zufälligen Salt?
- Wird eine geeignete Passwort-Hashfunktion mit dokumentierten, anpassbaren Parametern verwendet?
- Kann das System alte Hashformate erkennen und kontrolliert auf das neue Verfahren migrieren?
Mit Google fortfahren