Artykuł Cody Hale „Jak bezpiecznie przechowywać hasło” twierdzi, że:
bcrypt ma wbudowane sole, aby zapobiec atakom na tęczowy stół.
Cytuje ten artykuł , który mówi, że w implementacji OpenBSD bcrypt
:
OpenBSD generuje 128-bitową sól bcrypt ze strumienia klucza arcfour (arc4random (3)), zaszczepionego losowymi danymi zbieranymi przez jądro z taktowania urządzenia.
Nie rozumiem, jak to może działać. W mojej koncepcji soli:
- Musi być inny dla każdego przechowywanego hasła, aby dla każdego trzeba było wygenerować osobną tęczową tabelę
- Musi być gdzieś przechowywany, aby był powtarzalny: gdy użytkownik próbuje się zalogować, podejmujemy próbę podania hasła, powtarzamy tę samą procedurę „salt and and hash”, którą wykonaliśmy, kiedy pierwotnie zapisaliśmy jego hasło, i porównujemy
Kiedy używam Devise (menedżera logowania do Railsów) z bcryptem, w bazie danych nie ma kolumny soli, więc jestem zdezorientowany. Jeśli sól jest losowa i nigdzie nie jest przechowywana, jak możemy w wiarygodny sposób powtórzyć proces mieszania?
Krótko mówiąc, w jaki sposób bcrypt może mieć wbudowane sole ?