Informatik

Passwort-Hashing: Salt, Algorithmen und Login

Passwort-Hashing: Salt, Algorithmen und Login
Passwort-Hashing: Salt, Algorithmen und Login
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

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.

Deine Lernziele

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.

Definition

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.

Beispiel

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.

Teste dich
Frage 1 von 1LeichtWarum sollte eine Anwendung Passwörter nicht verschlüsselt zur späteren Wiederherstellung speichern?
Lösung: Für die Anmeldung genügt ein Vergleich neu berechneter Hashwerte; das Original muss nicht wiederhergestellt werden. — Eine Anmeldung benötigt nur die Prüfung, ob die neue Eingabe zum gespeicherten Ergebnis passt. Deshalb ist eine Einwegverarbeitung geeigneter als eine wiederherstellbare Speicherung.
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.

Definition

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.

Beispiel

Ali und Bea wählen zufällig dasselbe Passwort.

  1. Die Anwendung erzeugt für Ali einen zufälligen Salt.
  2. Für Bea erzeugt sie unabhängig davon einen anderen Salt.
  3. Beide Kombinationen werden gehasht.
  4. Trotz gleicher Passwörter entstehen unterschiedliche gespeicherte Hashes.

Ein Datenbankvergleich verrät deshalb nicht unmittelbar, dass Ali und Bea dasselbe Passwort gewählt haben.

Merke

Ein Salt macht gleiche Passwörter unterscheidbar und erschwert vorberechnete Angriffe. Er macht ein leicht erratbares Passwort jedoch nicht stark.

Teste dich
Frage 1 von 1MittelEine Datenbank speichert bei jedem Konto Hash und Salt. Zwei Konten haben unterschiedliche Hashes. Was lässt sich daraus sicher schließen?
Lösung: Die gespeicherten Hashwerte sind verschieden; ob die ursprünglichen Passwörter gleich waren, ist daraus nicht erkennbar. — Der Salt soll pro Passwort zufällig und individuell sein. Er darf zusammen mit dem Hash gespeichert werden und verhindert, dass gleiche Passwörter automatisch gleiche gespeicherte Werte ergeben.
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.

Definition

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.

Teste dich
Frage 1 von 1MittelEin Entwickler verwendet SHA-256 mit einem individuellen Salt. Welche entscheidende Schwäche bleibt?
Lösung: SHA-256 ist sehr schnell und erlaubt deshalb weiterhin viele Passwortversuche pro Zeit. — Ein Salt schützt vor vorberechneten Tabellen und gleichen Hashes bei gleichen Passwörtern. Für Passwortspeicherung braucht man zusätzlich eine gezielt aufwendige Passwort-Hashfunktion.
Wie funktionieren Registrierung und Login?

Bei einer sicheren Registrierung läuft die Speicherung so ab:

  1. Die Anwendung erhält das Passwort nur für die aktuelle Verarbeitung.
  2. Sie erzeugt einen neuen zufälligen Salt.
  3. Sie verarbeitet Passwort und Salt mit einer geeigneten Passwort-Hashfunktion und festgelegten Kostenparametern.
  4. Sie speichert Hash, Salt, Algorithmus beziehungsweise Format und Parameter.
  5. Das Klartextpasswort wird nicht gespeichert.

Beim Login folgt die Anwendung diesem Ablauf:

  1. Sie liest die gespeicherten Hashdaten des Kontos.
  2. Sie verarbeitet die eingegebene Zeichenfolge mit demselben Salt, Verfahren und denselben Parametern.
  3. Sie vergleicht den neu berechneten Hash mit dem gespeicherten Hash.
  4. Nur bei Übereinstimmung ist die Passwortprüfung erfolgreich.
Beispiel

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.

Teste dich
Frage 1 von 1MittelWelche Daten benötigt das System, um ein Passwort beim Login korrekt zu prüfen?
Lösung: Den gespeicherten Hash, den Salt sowie das verwendete Verfahren und seine Parameter. — Die Anwendung muss exakt dieselbe Hashberechnung wiederholen können. Dafür benötigt sie Salt, Verfahren und Parameter; das Originalpasswort wird nicht benötigt.
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.
Gut zu wissen

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.

Teste dich
Frage 1 von 1SchwerNach einem Datenbankleck werden trotz individueller Salts mehrere schwache Passwörter gefunden. Welche Erklärung passt am besten?
Lösung: Angreifer können für jeden Salt häufige Passwortkandidaten neu berechnen und mit dem jeweiligen Hash vergleichen. — Ein Salt verhindert vorberechnete Massenvergleiche, aber nicht das erneute Testen naheliegender Kandidaten. Eine langsame Passwort-Hashfunktion und starke, einzigartige Passwörter ergänzen diesen Schutz.
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:

  1. Das System erkennt am gespeicherten Format, welches alte Verfahren verwendet wurde.
  2. Es prüft die Anmeldung noch einmal mit diesem Verfahren.
  3. Nach erfolgreicher Prüfung liegt das eingegebene Passwort kurzfristig vor.
  4. Das System erzeugt einen neuen Salt und hasht das Passwort mit dem modernen Verfahren.
  5. 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.

Beispiel

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.

Teste dich
Frage 1 von 1SchwerWarum kann ein Betreiber alte Hashes nicht direkt in moderne Passwort-Hashes umwandeln?
Lösung: Für die neue Hashberechnung wird das ursprüngliche Passwort benötigt, das aus dem alten Hash nicht einfach gewonnen werden kann. — Eine sichere Migration erfolgt beim erfolgreichen Login oder über einen Passwort-Reset. Dann steht das eingegebene Passwort für die neue Berechnung zur Verfügung, ohne dauerhaft gespeichert zu werden.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • 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
Teste dich
Frage 1 von 3LeichtWelche Aussage grenzt Hashing korrekt von Verschlüsselung ab?
Lösung: Hashing dient der erneuten Prüfung einer Eingabe; Verschlüsselung erlaubt mit einem Schlüssel die Wiederherstellung von Daten. — Bei der Passwortprüfung muss das Original nicht wiederhergestellt werden. Deshalb wird ein Hash neu berechnet und verglichen.
Frage 2 von 3MittelZwei Konten verwenden dasselbe Passwort. Wie verhindert das System gleiche gespeicherte Hashes?
Lösung: Es erzeugt für jedes Passwort einen eigenen zufälligen Salt und bezieht ihn in die Berechnung ein. — Individuelle Salts führen selbst bei gleichen Passwörtern zu unterschiedlichen Hashdaten und verhindern direkt wiederverwendbare Vorberechnungen.
Frage 3 von 3SchwerEin Entwurf nutzt individuelle Salts und eine sehr schnelle Hashfunktion. Welche Verbesserung trifft die Ursache des verbleibenden Risikos?
Lösung: Eine geeignete Passwort-Hashfunktion mit anpassbarem Rechen- und gegebenenfalls Speicheraufwand einsetzen. — Gegen massenhaftes Offline-Raten braucht das System neben individuellen Salts eine gezielt aufwendige Passwort-Hashfunktion. Ihre Parameter müssen zur verfügbaren Hardware passen und regelmäßig überprüft werden.

Prüfe deinen Entwurf abschließend mit vier Fragen:

  1. Wird irgendwo ein Klartextpasswort dauerhaft gespeichert oder wiederherstellbar abgelegt?
  2. Erhält jedes neue Passwort einen eigenen zufälligen Salt?
  3. Wird eine geeignete Passwort-Hashfunktion mit dokumentierten, anpassbaren Parametern verwendet?
  4. Kann das System alte Hashformate erkennen und kontrolliert auf das neue Verfahren migrieren?

Passend dazu