Der Artikel von Coda Hale "Wie man ein Passwort sicher speichert" behauptet das:
bcrypt hat Salts eingebaut, um Rainbow-Table-Angriffe zu verhindern.
Er zitiert dieses Papier die besagt, dass in OpenBSDs Implementierung von bcrypt
:
OpenBSD generiert das 128-Bit bcrypt-Salz aus einem arcfour (arc4random(3)) Schlüsselstrom, der mit Zufallsdaten geimpft wird, die der Kernel aus den Geräte-Timings sammelt.
Ich verstehe nicht, wie das funktionieren kann. In meiner Vorstellung von einem Salz:
- Sie muss für jedes gespeicherte Passwort unterschiedlich sein, so dass für jedes Passwort eine eigene Regenbogentabelle erstellt werden muss.
- Es muss irgendwo gespeichert werden, damit es wiederholbar ist: Wenn ein Benutzer versucht, sich anzumelden, nehmen wir seinen Passwortversuch, wiederholen dasselbe Salt-and-Hash-Verfahren, das wir bei der ursprünglichen Speicherung des Passworts verwendet haben, und vergleichen
Wenn ich Devise (ein Rails-Login-Manager) mit bcrypt verwende, gibt es keine Salt-Spalte in der Datenbank, also bin ich verwirrt. Wenn das Salz zufällig ist und nirgendwo gespeichert ist, wie können wir den Hashing-Prozess zuverlässig wiederholen?
Kurz gesagt, wie kann bcrypt integrierte Salze haben ?