Вход Регистрация
Метод хеширования MD5 устарел (оценка: 3)
Многие из Вас знают, что есть такое алгоритм шифрования MD5. Практически все используют его для хеширования паролей пользователей. Но перейдем немного к истории.
Message Digest 5 (Он же MD5) был разработан неким Рональдом Линном Ривестом, в далеком 1991 году. На основе данного алгоритма был построен приемник MD5 - SHA-2. Хеш MD5 имеет размер в 128 бит и стандарт RFC 1321.
Уже в 1996 году Ганс Доббертин, сообщил о коллизиях в системе хеширования MD5. Из-за небольшой длинны хеша (128 бит или 16 байт) хеш не способен выдержать атаку типа "День рождения" или как еще ее называют "birthday-attack", принцип данной атаки заключается на парадоксе дней рождения, но мы уже отклонились от темы. Про парадокс можете почитать ТУТ. В 2004 году, проект "MD5CRK" смог вычислить уязвимости в алгоритме.
Почему MD5 устарел и небезопасен?
Ответ на этот вопрос лежит выше. Как и говорится в исторической хронике, алгоритм MD5 был скомпрометирован еще в 2004 году. На сегодняшний день, автор данного алгоритма сам призывает не использовать его алгоритм, а вместо MD5 использовать более устойчивые алгоритмы, такие как: SHA-512, Blowfish. Объясняет это он следующим: Цитата (не дословная): "Прогресс не стоит на месте, с каждым годом появляются новые технологии. На сегодняшний день алгоритм MD5 является не безопасным, поскольку на сегодняшний день компьютеры способны перебирать 1 миллион возможных комбинаций в секунду, и это не предел...".
Альтернативные алгоритмы. Их применение.
Поскольку мы имеем место быть PHP порталом, буду приводить примеры на языке PHP, и так приступим.
Я рассмотрю метод криптования Blowfish, польколку именно его я использую в большинстве своих проектов.
Самый простой способ, но не столь безопасный это использование следующего варианта:
Код (+/-)

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

Теперь рассмотрим более серьезный вариант.
К примеру у нас есть таблица:
MySQL запрос (+/-)

Теперь напишем функции для работы с паролями:
Код функций (+/-)


Пример использования при регистрации:
Код (+/-)


И авторизация:
Код (+/-)


Почему именно Blowfish?
Алгоритм Blowfish при работе занимает больше процессорного времени, за счет этого делает подбор долгим и неэффективным по сравнению связки MD5+соль. При этом Blowfish довольно устойчив к коллизиям, и пока что еще не было обнаружено уязвимостей в алгоритме. Данный алгоритм используется в php фреймворке Laravel.
Явный показатель разницы затраченного процессорного времени на подбор:
  1. $b = microtime(true);
  2. $pswd = 'test';
  3. for ($i = 0; $i < 1000; $i++) {
  4. $pswd = md5($pswd);
  5. }
  6. $t = round((microtime(true) - $b), 6);
  7.  
  8. echo 'md5(1000 iters): '.$t.PHP_EOL;
  9. //md5(1000 iters): 0.000318 sec
  10.  
  11. $b = microtime(true);
  12. $salt = md5(uniqid('some_prefix', true));
  13. $salt = substr(strtr(base64_encode($salt), '+', '.'), 0, 22);
  14. $pswd= crypt('test', '$2a$08$' . $salt);
  15. $t = round((microtime(true) - $b), 6);
  16. echo 'blowfish: '.$t.PHP_EOL;
  17. //blowfish: 0.016532 sec

На криптование слова test, MD5 за 1000 прогонов потратил 0.000318 sec. В то время как на криптование этого же слова только 1 раз, Blowfish потратил 0.016532 sec.
Заключение
Исходя из всего изложенного, лично мое мнение, что перейти с MD5 на blowfish будет не так уж и плохо, да вы немного потеряете в производительности, но не настолько много, что бы жертвовать безопасностью только ради скорости работы. Лично мое кредо - "Безопасность превыше всего", а уже Вам выбирать стоит ли использовать данный алгоритм или остаться на старом, добром MD5
Автор: * UndeX / 21.12.2016 в 09:59
Просмотров: 493
ТОП блогов | поиск | все блоги
Онлайн: 2
Реклама