Как лучше всего безопасно хранить пароли (хэши)

Многие веб-сайты в наши дни взломаны, а хэши паролей украдены. Даже крупные веб-сайты, такие как LinkedIn, не хранят свои пароли в безопасности (только md5).

Теперь мой вопрос, что является достаточно безопасным способом хеширования пароля?

В настоящее время я использую это:

sha512(sha512(sha512(password) + salt));

Это достаточно безопасно?


person VDVLeon    schedule 21.06.2012    source источник
comment
Это действительно должен быть новый вопрос?stackoverflow.com/search?q=best+password+store   -  person Cheekysoft    schedule 21.06.2012


Ответы (5)


hash_hmac('sha512', $data , $key);

было бы замечательно. Лучше использовать как минимум 60 символов для $key в качестве соли.

person Farahmand    schedule 21.06.2012

Трудно сказать, какой из них лучше, но беспроигрышный вариант — алгоритм BCrypt.

BCrypt — не лучший алгоритм; однако его достаточно для подавляющего большинства случаев использования, и его так же легко реализовать, если не проще, чем базовый метод хэш-и-соли. Что отличает BCrypt, так это то, что вместо более типичного алгоритма SHA-* он использует алгоритм Blowfish, преимущество которого заключается в том, что он намного медленнее при параллельном выполнении. Поскольку пользователи входят в систему по одному, злоумышленникам, которые будут тестировать множество паролей, будет намного сложнее обойти алгоритм.

Подробнее здесь: http://davismj.me/blog/bcrypt/

person Matthew James Davis    schedule 28.01.2016

Да, это более чем безопасно. Лично я думаю, что последний вызов sha512 бесполезен, но я знаю, что мнения расходятся.

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

person Denys Séguret    schedule 21.06.2012

Это зависит от вашей соли. Вы создаете уникальную соль для каждого пользователя? Соль не является константой, если каждый пароль хэшируется одной и той же солью, вы тратите свое время.

Я бы порекомендовал использовать bcrypt вместо подхода sha512/salt, его гораздо сложнее взломать: http://krebsonsecurity.com/2012/06/how-companies-can-beef-up-password-security/

person MagicWishMonkey    schedule 21.06.2012

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

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

person intense    schedule 21.06.2012