Was ist ein Salt beim Passwort-Hashing, warum wird er verwendet und was ist ein Pepper?
Kurzantwort
Ein Salt ist ein einzigartiger Zufallswert, der pro Benutzer erzeugt und vor dem Hashing mit dem Passwort kombiniert wird. Er sorgt dafür, dass identische Passwörter unterschiedliche Hashes ergeben, und macht vorberechnete Angriffe wie Rainbow Tables nutzlos, da der Angreifer pro Salt eine eigene Tabelle bräuchte. Salts werden neben dem Hash gespeichert. Ein Pepper ist ein zusätzlicher geheimer Wert, für alle Benutzer gleich, getrennt aufbewahrt (z. B. in der App-Konfiguration oder einem HSM), sodass ein Datenbankleck allein nicht genügt.
Diese Frage trennt Kandidaten, die die Begriffe kennen, von jenen, die verstehen, welchen Angriff jede Verteidigung stoppt. Salting und Peppering zielen auf unterschiedliche Bedrohungen, und dies präzise zu sagen, bringt den Punkt.
Wovor ein Salt schützt
Ohne Salt hasht dasselbe Passwort stets zum selben Wert. Daraus folgen zwei Konsequenzen. Erstens können Angreifer Rainbow Tables vorberechnen – riesige Nachschlagetabellen von Hash zu Passwort – und jeden ungesalzenen Hash per Nachschlagen knacken. Zweitens enthüllen zwei Benutzer mit demselben Passwort durch ihre identischen Hashes diese Tatsache in einer geleakten Datenbank.
Ein Salt ist ein einzigartiger Zufallswert, der pro Benutzer erzeugt und vor dem Hashing in das Passwort gemischt wird. Nun ergeben identische Passwörter unterschiedliche Hashes, sodass eine vorberechnete Tabelle wertlos ist – ein Angreifer bräuchte pro Salt eine frische Tabelle, was die Ökonomie völlig zunichtemacht. Der Salt ist nicht geheim; er wird direkt neben dem Hash gespeichert, und das ist in Ordnung, denn seine Aufgabe ist es, jeden Hash einzigartig zu machen, nicht verborgen zu sein.
Was ein Salt nicht leistet
Salting verlangsamt einen Brute-Force-Angriff gegen einen einzelnen gezielten Hash nicht nennenswert – der Angreifer bezieht den bekannten Salt beim Raten einfach ein. Deshalb muss Salting mit einer langsamen Hashfunktion kombiniert werden (bcrypt, scrypt, Argon2). Der Salt stoppt die Massen-Vorberechnung; der Arbeitsfaktor stoppt das schnelle Raten.
Was ein Pepper hinzufügt
Ein Pepper ist ein zusätzlicher geheimer Wert, der während des Hashings eingemischt wird, aber anders als der Salt ist er für alle Benutzer gleich und wird getrennt von der Datenbank gespeichert – in der App-Konfiguration, einer Umgebungsvariablen oder idealerweise einem Hardware-Sicherheitsmodul. Der Zweck ist Verteidigung in der Tiefe: Leakt nur die Passwortdatenbank, fehlt dem Angreifer der Pepper, und er kann seine Versuche nicht offline verifizieren. Es hilft nur, wenn er wirklich von den Hashes getrennt gehalten wird.
Worauf Interviewer achten
Die Einzigartigkeit pro Benutzer, die Logik von Rainbow Table und identischem Hash, die Tatsache, dass Salts öffentlich sein dürfen, während Pepper geheim und getrennt sein müssen, und die Einschränkung, dass Salting allein gezielte Brute Force nicht stoppt.
Wahrscheinliche Anschlussfragen
- Warum ist es sicher, den Salt neben dem Hash zu speichern, aber nicht den Pepper?
- Verlangsamt Salting einen gezielten Brute-Force-Angriff gegen einen einzelnen Benutzer?
- Warum müssen Salts pro Benutzer einzigartig sein statt eines globalen Salts?