Какую функцию использовать для хэш-паролей в MySQL?

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

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

Благодаря!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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