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

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

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

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

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

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

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

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

Обновить:

Не используйте хеширование или 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

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

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

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

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

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

Посмотрите на phpass .

Я заметил много путаницы в том, как правильно обрабатывать хэширование паролей, особенно в stackoverflow. И я видел некоторые ДЕЙСТВИТЕЛЬНО РЕАЛЬНЫЕ рекомендации. Поэтому я написал страницу, которая должна очистить все. Это немного больше, чем использование простого хэша.

Дополнительная информация и исходный код: как правильно обрабатывать пароли

Не стесняйтесь делиться этой ссылкой, когда у кого-то возникает вопрос о хэшировании паролей. Это мой первый пост в stackoverflow, так что извините, если я не делаю это правильно

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

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

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