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