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

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

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

Спасибо!

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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

Не забудьте сделать salting, тоже!

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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