Сколько времени мой пароль должен посолить быть, и действительно ли SHA-256 достаточно хорош?

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

Вот мой план: у Каждого пользователя есть их собственная уникальная соль 12 случайных символов (#/¤ и и т.д.), сохраненный в пользовательской таблице. Соль хеширована (использование SHA-256) наряду с паролем на регистрации и перехеширована на входе в систему.

Как это звучит Вам? Что-нибудь я могу улучшиться? Я должен пойти для SHA-512 и более длинной соли, или являюсь этим достаточно?

11
задан Brighid McDonnell 6 December 2011 в 20:03
поделиться

5 ответов

Ваши предложенные 12 байтов должны быть достаточной длиной для соли. Для этого потребуется словарная атака для подготовки 2 96 баз данных хешированных паролей. Когда-нибудь это может оказаться тривиальной операцией для взломщика, но мы все еще далеки от этого.

NIST рекомендует SHA256 как имеющий достаточную стойкость хеширования для паролей, по крайней мере, на данный момент.

Если вы хотите изучить еще более надежные методы защиты паролей, изучите методы усиления ключей, такие как PBKDF2 , или адаптивное хеширование с помощью Bcrypt . Но они не имеют прямой поддержки в SQL. Вам нужно будет выполнить хеширование кода приложения, а затем опубликовать хеш-дайджест в своей базе данных.

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

17
ответ дан 3 December 2019 в 05:11
поделиться

Вероятно, этого достаточно для вашего варианта использования.

Однако его можно улучшить следующим образом:

  1. Увеличить размер соли.

  2. Соль не должна ограничиваться небольшим подмножеством символов

  3. Повторить хеширование, скажем, 1000 раз (усиление ключа)

Взгляните на phpass .

3
ответ дан 3 December 2019 в 05:11
поделиться

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

Вы можете использовать Whirlpool, применив хэш-функцию PHP. (Обратите внимание, однако, что для hash () требуется PHP 5.1.2 или выше.)

-1
ответ дан 3 December 2019 в 05:11
поделиться

Вашего нынешнего подхода достаточно.

-2
ответ дан 3 December 2019 в 05:11
поделиться

Обновление:

Не используйте хэширование или HMAC. Используйте bcrypt или scrypt. См. http://codahale.com/how-to-safely-store-a-password/

Оригинал:

Не используйте просто хэширование. Используйте HMAC. (И избегайте делать собственное хэширование или крипто, если есть библиотека, так как библиотеки выигрывают от вклада экспертов)

Ссылки:

  1. http://rdist.root.org/2009/10/29/stop-using-unsafe-keyed-hashes-use-hmac/
  2. http://us2.php.net/manual/en/function.hash-hmac.php
4
ответ дан 3 December 2019 в 05:11
поделиться
Другие вопросы по тегам:

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