In Coda Hales Artikel "So speichern Sie ein Passwort sicher" heißt es:
In bcrypt sind Salze eingebaut, um Regenbogentischangriffe zu verhindern.
Er zitiert dieses Papier , das besagt, dass in der OpenBSD-Implementierung von bcrypt
:
OpenBSD generiert das 128-Bit-bcrypt-Salt aus einem arcfour-Schlüsselstrom (arc4random (3)), der mit zufälligen Daten versehen ist, die der Kernel aus Geräte-Timings sammelt.
Ich verstehe nicht, wie das funktionieren kann. In meiner Vorstellung von einem Salz:
- Es muss für jedes gespeicherte Passwort unterschiedlich sein, damit für jedes eine separate Regenbogentabelle generiert werden muss
- Es muss irgendwo gespeichert werden, damit es wiederholbar ist: Wenn ein Benutzer versucht, sich anzumelden, versuchen wir es mit seinem Kennwort, wiederholen den gleichen Salt-and-Hash-Vorgang wie bei der ursprünglichen Speicherung seines Kennworts und vergleichen
Wenn ich Devise (einen Rails-Anmeldemanager) mit bcrypt verwende, befindet sich keine Salzspalte in der Datenbank, daher bin ich verwirrt. Wenn das Salz zufällig ist und nirgendwo gelagert wird, wie können wir den Hashing-Prozess zuverlässig wiederholen?
Kurz gesagt, wie kann bcrypt eingebaute Salze haben ?