Лучшие практики:самый безопасный способ хранения паролей в таблице?[закрыто]

StackOverflow https://stackoverflow.com/questions/1592608

Вопрос

Я использую PHP.Раньше я использовал встроенную функцию mysql password() для хранения паролей.Мне сказали, что password () больше не является безопасным.Какой был бы наилучший метод хранения паролей в PHP?это MD5?

Это было полезно?

Решение

Обновленный Ответ 2016:

Победитель конкурса ПМСП (Соревнование по хэшированию паролей) было Аргон2.Хеширование паролей с помощью Argon2 является лучшей практикой по состоянию на 2016 год.

PHC проводился с 2013 по 2015 год как открытый конкурс — тот же процесс, что и конкурсы NIST по AES и SHA-3, и наиболее эффективный способ разработки криптостандарта.Мы получили 24 кандидата, включая множество отличных разработок, и выбрали одного победителя - Argon2, алгоритм, разработанный Алексом Бирюковым, Даниэлем Дину и Дмитрием Ховратовичем из Университета Люксембурга.

Мы рекомендуем вам использовать Argon2, а не устаревшие алгоритмы.

Тот самый эталонная реализация доступна на GitHub.

Обновленный Ответ 2012:

Первоначальный ответ, который я дал ниже, когда-то считался лучшей практикой.Однако достижения в технологии хэш-вычислений сделали эти схемы уязвимыми.В дальнейшем единственными безопасными схемами хэширования паролей являются итеративные хэши, такие как bcrypt - шифрование и PBKDF2.Полное обсуждение см. Анализ Джеффа Этвуда.

Оригинальный ответ 2009:

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

Имейте в виду, что если вы храните пароли таким образом, вы будете не иметь возможность восстановить утерянный пароль пользователя.Они смогут только сбросить пароли.Это потому, что вы будете использовать односторонний хэш.Но это ограничение, как правило, стоит того, чтобы пойти на компромисс в пользу более безопасной системы хранения паролей.Даже если ваша база данных скомпрометирована, пароли ваших пользователей все равно будет чрезвычайно сложно и, вероятно, непрактично восстановить потенциальному злоумышленнику.

Другие советы

Вам нужно солить пароль.

vBulletin неплохо справляется с хранением паролей.md5(md5(пароль) + соль);

Чтобы поспорить с другим ответом, VBulletin ужасно справляется с хешированием паролей.Их соль имеет длину всего 3 символа, что лишь незначительно увеличивает безопасность вашего приложения.

Проверить http://www.openwall.com/phpass/ .Они отлично справляются с использованием длинного хеша, уникального для каждого пароля, и тысячи раз пропускают пароль через md5.Это одна из лучших систем хеширования для PHP.

Если вы можете избежать хранения пароля пользователя, это лучший вариант, по моему мнению.Используйте OpenId (например, Stackoverflow) для аутентификации пользователя.Или живая аутентификация (http://dev.live.com/liveid/).Если вам действительно необходимо самостоятельно аутентифицировать пользователей;делай то, что говорит Асаф в своем ответе.:)

Соль и гашиш.

Обычно мы используем случайное руководство в качестве соли, а затем SHA512 для хеширования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top