Хотите преобразовать шифрование пароля веб-сайта из SHA1 в SHA256

просто ищу некоторые рекомендации. У меня есть сайт с примерно 2500 пользователей - небольшой, но растущий. Я построил его с использованием шифрования SHA1 на паролях. С тех пор я прочитал, что SHA1 небезопасен и хотел бы изменить, чтобы сказать SHA256 с солью.

есть ли у кого-нибудь советы о том, как сделать такой переход? Было бы здорово, если бы я мог расшифровать пароли и просто повторно хэшировать их, но он не кажется способным.

thx Адам!--1-->

4 ответов


обычный способ сделать это таков:

  1. сделайте столбец хэш-пароля больше, чтобы разместить хэш sha256, и добавьте столбец "соль"
  2. сначала установите поле соли в значение NULL и настройте код проверки пароля так, чтобы нулевая соль означала sha1, а ненулевая-sha256
  3. после того, как sha1-use успешно вошел в систему, повторно хэшировать пароль к sha256 с солью и обновить базу данных.

с течением времени, пользователи будут мигрируйте в sha256 сами по себе; единственная проблема-пользователи, которые входят только очень спорадически или вообще не входят. Для них вы можете отправить напоминание по электронной почте или даже пригрозить закрыть свою учетную запись, если они не войдут в систему до дня X (не указывайте фактическую причину...)


чтобы уточнить, SHA-это алгоритм хеширования, который (как правило) является улицей с односторонним движением. Вы не можете расшифровать хэши, что является своего рода силой их использования для аутентификации паролей. Вы на правильном пути с переходом к соленому гашишу, и вот как я бы это сделал.

единственный способ получить пароли-это позволить пользователю ввести его самостоятельно. Когда пользователи заходят на ваш сайт и входят в систему, обновляйте пароли один за другим. В вашем методе аутентификации я бы выполнил хэш, который вы делаете сейчас, и сравните его с тем, что находится в существующем поле (ничего нового здесь). Предполагая, что он соответствует, продолжайте солить / повторно хэшировать с помощью SHA256 и обновите поле пароля в базе данных. Если вы хотите, сохраните немного в таблице пользователей, отслеживая, какие пользователи были обновлены.

Я делаю много предположений, но именно так я решил танец хэш-алгоритма в прошлом. Удачи!


У меня есть еще одно предложение немедленно перенести хэш пароля с SHA1 на SHA256, не дожидаясь, пока пользователь снова посетит сайт, чтобы перефразировать пароль. Изменение будет однократной миграцией хэша пароля и изменением функции проверки входа в систему.

предположим, что ваш хэш пароля генерируется с помощью функции: password + salt [Sha1]-> Hash-sha1

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

Hash-sha1 + salt [Sha256]-> Hash-sha256 (соль используется для увеличения сложности ввода.)

в зависимости от приемлемого значения вашей функции sha256 вы можете рассмотреть возможность кодирования хэша-sha1 в base64 для печати ascii.

для вашей функции проверки входа в систему пароль должен быть хэширован с помощью следующего алгоритма:

пароль + соль [sha1] - > хэш-sha1 + соль [sha 256]- > хэш-sha256

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


переход на SHA256 вряд ли сделает ваш сайт более безопасным.

SHA1 и SH512 являются дайджест сообщения, они никогда предназначен для функций хэширования паролей (или вывода ключей). (Хотя дайджест сообщений может быть использован в качестве строительного блока для KDF, например, в PBKDF2 с HMAC-SHA1.)

функция хэширования паролей должна защищать от атак словаря и радужных таблиц.

В настоящее время единственный стандарт (как в санкционировано NIST) функция хэширования паролей или вывода ключей-PBKDF2. Лучший выбор, если использование стандарта не требуется, - это bcrypt и более новый scrypt. Википедия имеет страницы для всех трех функций:

страница в https://crackstation.net/hashing-security.htm содержит подробное обсуждение безопасности паролей.

Это, как говорится, tdhammers предлагает хорошие советы о том, как справиться с миграцией.