Вопрос по ruby-on-rails-3, encryption – Перенос старых паролей md5 на пароли bcrypt

16

Я перерабатываю веб-сайт в Rails, используя Devise для аутентификации. Предыдущий веб-сайт работает с базой данных пользователей с паролями md5, и поэтому я хочу перенести эти пароли в шифрование, которое использует Devise. Как мне это решить?

связанные с:Do I have to recompute all hashes if I change the work factor in bcrypt? David Cary
связанные с:Is this password migration strategy secure?. David Cary

Ваш Ответ

4   ответа
2

используя старый пароль, а затем изменить его, например, показать страницу обязательного изменения пароля, которая будет хранить пароль с помощью bcrypt. После ввода нового пароля вы можете отключить / удалить старый пароль в вашей системе.

20

вить несколько идей, что делать на переходном этапе:

Перенесите базу данных на наличие двух «хэшей пароля» столбцы, один из которых содержит существующие старые хэши MD5, а другой - для новых хэшей bcrypt, изначально все они заполнены значением NULL. При следующем входе пользователя в систему вы выполните следующие действия:

1) Проверьте, есть ли уже значение в столбце bcrypt. Если это так, продолжайте с 3., в противном случае с 2.

2) Аутентифицировать пользователя со старым механизмом MD5, используя значение из столбца MD5. В случае успеха дополнительно вычислите новый хеш bcrypt и сохраните его в новом столбце. Готово.

3) Аутентифицировать пользователя, используя значение brypt. Просто игнорируйте значение MD5.

Затем время от времени проверяйте, заполнен ли новый столбец bcrypt. Если это так, откажитесь от столбца MD5 и обновите свое приложение, чтобы использовать только новый механизм.

Но это желаемое за действительное, всегда есть некоторые пользователи, которые не вошли в систему за это время. Отправьте им письмо с сообщением о том, что вы делаете, что это для них лучше, и попросите их войти в систему в ближайшее время.

Через пару недель снова проверьте состояние bcrypt. Если некоторые пароли по-прежнему отсутствуют (их будет :)), вы можете просто сбросить пароли этих пользователей, сгенерировать случайный пароль и сообщить его по почте, как если бы они забыли свои пароли. пароли.

Затем вы можете, наконец, очистить столбец MD5, удалить соответствующий код и обновить приложение, чтобы использовать только новую аутентификацию.

Error: User Rate Limit ExceededDeviseError: User Rate Limit Exceeded Marco Godínez
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
13

Add bcrypt column. Populate bcrypt column by running MD5 hash through bcrypt algorithm. Change login to always use bcrypt column and hashing function that is plain text->md5->bcrypt.

Таким образом, все пароли могут быть перенесены одновременно, а хеши MD5 навсегда удалены. Рассматривая возможность сделать это самостоятельно, я не могу выявить какие-либо недостатки с этой идеей. Любой берущий? Я что-то упускаю из виду?

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededthis reddit threadError: User Rate Limit Exceededplain text -> bcryptError: User Rate Limit ExceededcommentedError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
6

ы будете заставить пользователей входить в систему, используя старую систему, а затем хэшировать пароль, который они дают, используя новый метод. Получив новый хеш, вы можете удалить старый хэш md5.

Похожие вопросы