L'articolo di Coda Hale "Come conservare in modo sicuro una password" afferma che:
bcrypt ha sali integrati per prevenire attacchi da tavolo arcobaleno.
Cita questo documento , che afferma che nell'implementazione di OpenBSD di bcrypt
:
OpenBSD genera il sale bcrypt a 128 bit da un flusso di chiavi arcfour (arc4random (3)), seminato con dati casuali che il kernel raccoglie dai tempi dei dispositivi.
Non capisco come possa funzionare. Nella mia concezione di un sale:
- Deve essere diverso per ogni password memorizzata, quindi dovrebbe essere generata una tabella arcobaleno separata per ciascuna
- Deve essere archiviato da qualche parte in modo che sia ripetibile: quando un utente tenta di accedere, prendiamo il loro tentativo di password, ripetiamo la stessa procedura salt-and-hash che abbiamo fatto quando abbiamo archiviato la password originariamente e confrontiamo
Quando sto usando Devise (un gestore di login di Rails) con bcrypt, non c'è colonna salt nel database, quindi sono confuso. Se il sale è casuale e non viene memorizzato da nessuna parte, come possiamo ripetere in modo affidabile il processo di hashing?
In breve, come può bcrypt avere sali integrati ?