Хотите преобразовать пароль шифрования веб-сайта из SHA1 в SHA256 - PullRequest
8 голосов
/ 07 августа 2011

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

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

thx Адам

Ответы [ 4 ]

12 голосов
/ 07 августа 2011

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

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

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

7 голосов
/ 07 августа 2011

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

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

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

1 голос
/ 18 декабря 2013

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

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

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

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

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

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

1 голос
/ 27 марта 2012

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

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

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

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

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

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

Пароль + соль [sha1] -> hash-sha1 + salt [sha 256] -> hash-sha256

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

...