Coda Hale article "Как безопасно хранить пароль" утверждает, что:
bcrypt имеет встроенные соли, чтобы предотвратить атаки радужного стола.
Он цитирует эту статью, в которой говорится, что в реализации OpenBSD bcrypt
:
OpenBSD генерирует 128-битную соль bcrypt из arcfour (arc4random (3)) ключевой поток, засеянный случайными данными, ядро собирает из таймингов устройства.
Я не понимаю, как это может работать. В моей концепции соли:
- Для каждого сохраненного пароля он должен быть различным, поэтому для каждого необходимо создать отдельную таблицу радуги.
- Его нужно хранить где-то так, чтобы он повторялся: когда пользователь пытается войти в систему, мы предпринимаем попытку пароля, повторяем ту же самую соль-и-хэш-процедуру, которую мы сделали, когда мы изначально сохранили их пароль, и сравните
Когда я использую Devise (менеджер входа Rails) с bcrypt, в базе данных нет столбца солей, поэтому я запутался. Если соль случайна и не хранится нигде, как мы можем достоверно повторить процесс хеширования?
Короче говоря, как может bcrypt иметь встроенные соли?