Какую функцию использовать для хеширования паролей в MySQL? - PullRequest
11 голосов
/ 03 декабря 2008

В моей базе данных mysql есть пользовательская таблица со столбцом пароля. В настоящее время я использую алгоритм MD5 для хеширования пароля пользователя для хранения в базе данных. Теперь мне нравится думать, что я человек совести безопасности. Читая документы MySQL, я заметил, что они не рекомендуют методы хеширования MD5 или SHA / SHA1, но не предлагают альтернативы.

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

Спасибо!

Ответы [ 5 ]

11 голосов
/ 03 декабря 2008

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

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

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

MD5 также очень быстрый алгоритм. Скорость - это враг, когда дело доходит до взлома - чем больше времени требуется для создания хэша, тем больше времени требуется для каждой попытки хакера. Что-то простое, например, хеширование простого текста 100 раз с новой дополнительной солью каждый раз, едва ли будет восприниматься (если вообще) пользователем, входящим на ваш сайт, но это увеличит время, необходимое для взлома пароля тем же 100 раз.

Гораздо более подробно здесь: http://www.codinghorror.com/blog/archives/000953.html

4 голосов
/ 03 декабря 2008

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

SHA1 также считается проще взломать, чем угадывать пароль методом грубой силы.

Я фактически внес патч в MySQL для отображения функций SHA224, SHA256, SHA384 и SHA512 из OpenSSL. Они рекомендованы NIST для хеширования паролей (на самом деле SHA256 и выше).

Мой патч был закончен инженерами MySQL и включен в MySQL 6.0.5 и более поздние, если я помню.

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

Не забудьте также сделать соление !

2 голосов
/ 18 февраля 2016

Этому вопросу 7 лет. За это время мы достигли прогресса в области вычислительной техники, где MD5 и SHA1 теперь легко ломаются современными компьютерами. Этого следует избегать сейчас.

В PHP 5.5 появилось password_hash , которое использует гораздо более безопасный алгоритм bcrypt. Хотя MySQL может шифровать / дешифровать bcrypt, это ужасное решение, потому что вы не только добавляете потенциально большую вычислительную нагрузку на уровень базы данных, но не хэшированный пароль может храниться в ваших журналах

Ни при каких обстоятельствах простой текстовый пароль не должен попадать на MySQL, даже если он находится на уровне запроса. В противном случае вы рискуете записать пароли для регистрации (журнал запросов, общий журнал, медленный журнал запросов и т. Д.). Что ужасно. Так что нет, даже не беспокойтесь ...

1 голос
/ 03 декабря 2008

MD5 и SHA-1 , вероятно, больше не рекомендуются из-за известных атак . Но они все еще обычно , достаточные для большинства случаев использования.

Если вам нужны дополнительные параметры, просто используйте PHP хеш-функции - у вас есть множество вариантов .

0 голосов
/ 17 февраля 2016

Я использую комбинацию . Например SHA1 (MD5 ()) работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...