Чем плох md5(md5($pass)) для пароля?

BCRYPT - 0.12169909
ARGON2I - 0.46269512
md5(md5($pass)) - 0.00000405
  • Вопрос задан
  • 2416 просмотров
Решения вопроса 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Иногда смотришь на вопрос и не понимаешь, о чем он.
Судя по вопросу и цифрам в нем, автор и так уже осведомлен о правильных способах хэширования и должен уже знать ответ на свой вопрос.

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

Возможно, непонимание происходит оттого, что существует не один, а несколько векторов атаки на пароль.
  1. Поиск хэша по "радужным таблицам" (rainbow tables): огромным базам данных, где собираются заранее посчитанные хэши для любых возможных строк.
  2. Метод грубой силы (bruteforce): перебирать все комбинации символов и применять к ним хэширующую функцию до тех пор, пока она не вернёт искомый хэш.
  3. Поиск по словарю. Похож на брутфорс, но перебор не всех возможных значений, а всего нескольких тысяч самых популярных паролей, типа "123", "password" и пр.
phpfaq.ru/tech/hashing

И только одного элемента недостаточно, а нужны все в комплексе:
- Хэширующая функция должна иметь большую вычислительную сложность, чтобы усложнить подбор перебором. по этой причине md5() не подходит
- Хэш должен быть посолен уникальной солью, чтобы нельзя было, затратив 1 раз кучу вычислительных усилий, заранее построить хэши для любых комбинаций символов. По этой причине фарш без соли - деньги на ветер.
- Пароль не должен быть слишком простым, иначе даже медленный перебор его раскроет. Этот момент тоже надо учитывать
Ответ написан
Комментировать
@galaxy
1. Нет соли
2. Слишком быстрый
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
profesor08
@profesor08 Куратор тега PHP
Хеш короткий и возможно уже все посчитаны. Есть онлайн сервисы по подбору пароля по его хешу. Так что проще пароль хранить в открытом виде, md5 защищенности не прибавит.
Ответ написан
Adamos
@Adamos
Вопрос: почему не использовать тот хэш, который быстрее - это же оптимизация?
Ответ: да потому, что это оптимизация взлома!
Ответ написан
@danSamara
По каким критериям оцениваем?

1. По скорости - лучший.
2. По криптостойкости - худший.
3. По коллизиям - один из худших.
4. По соли - критерий неприменим.

1. Когда важна скорость, и не важны прочие критерии, например при подсчёте контрольных сумм - MD5, наверное, один из лучших. Хэшировать пароли тоже можно - например кратко живущие длинные токены с большой вариативностью - никто в здравом уме не будет подбирать хэш для 20 символов, срок жизни которых - 5-10 минут. Хотя я бы и для токенов использовал что-то другое - тот же sha, от греха подальше )

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

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

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

Войдите, чтобы написать ответ

Похожие вопросы