Passwort-Hashing ist das Speichern von Passwörtern als nicht umkehrbarer Prüfwert statt im Klartext. Beim Anmelden wird der Prüfwert neu berechnet und verglichen; das Passwort selbst steht nirgends in der Datenbank.
- Passwort-Hashing
Das Speichern von Passwörtern als nicht umkehrbarer Prüfwert statt im Klartext.
Beispiel: „Nach dem Einbruch half das Passwort-Hashing: Die Angreifer hatten nur Prüfwerte.“Auch: Zum Verfahren gehört ein Salt, also ein Zufallswert je Passwort, der mit gespeichert wird. Ein zusätzliches Geheimnis außerhalb der Datenbank heißt Pepper.
Abgrenzung zur Verschlüsselung: Die lässt sich mit dem Schlüssel umkehren. Ein Prüfwert ist eine Einbahnstraße, und genau das ist hier erwünscht.
Welches Verfahren beim Passwort-Hashing heute gilt
Argon2id, hilfsweise bcrypt. Argon2 hat 2015 die Password Hashing Competition gewonnen, ist in RFC 9106 beschrieben und steht im Spickzettel des OWASP zur Passwortspeicherung an erster Stelle; empfohlen sind dort mindestens 19 MiB Speicher, zwei Durchgänge und ein Grad an Parallelität. Schnelle Verfahren wie SHA-256 führt dasselbe Dokument ausdrücklich als ungeeignet auf.
Der Grund ist die Geschwindigkeit. Ein schnelles Verfahren erlaubt Milliarden Versuche je Sekunde; ein langsames, das zusätzlich Arbeitsspeicher belegt, macht das Durchprobieren teuer, siehe Brute-Force-Angriff.
Wie Passwort-Hashing in der Praxis aussieht
In PHP sind es zwei Aufrufe, die den Salt und die Parameter selbst verwalten.
// Beim Anlegen speichern
$hash = password_hash($passwort, PASSWORD_ARGON2ID);
// Beim Anmelden prüfen
if (password_verify($eingabe, $hash)) {
// Zugang gewähren
}Wer eine eigene Benutzerverwaltung baut, benutzt diese Funktionen und erfindet nichts Eigenes. Jedes verbreitete Framework bringt dieselbe Mechanik mit, und das Ergebnis enthält Verfahren, Parameter und Salt in einer Zeichenkette.
Was Salt und Pepper dabei tun
Der Salt sorgt dafür, dass zwei gleiche Passwörter verschiedene Prüfwerte ergeben. Damit sind vorberechnete Tabellen wertlos, und ein Angreifer muss jedes Konto einzeln angehen. Der Pepper liegt außerhalb der Datenbank, etwa in der Konfiguration des Servers; wer nur die Datenbank erbeutet, kann die Prüfwerte dann gar nicht nachrechnen.