Алгоритм шифрования MD5. Как расшифровать MD5-хэш: простейшие методы

В последние десятилетия проблемы конфиденциальности и безопасности информации становятся все более актуальными. Именно поэтому постоянно предпринимаются попытки с применением самых современных алгоритмов. Одним из таких методов является использование алгоритма хэширования под названием MD5. Как расшифровать MD5-хэш, сейчас и будет рассмотрено. Правда, особо надеяться на получение знаний по взлому паролей или любой другой конфиденциальной информации рассчитывать не стоит ввиду трудности такого процесса и противозаконности.

Что такое MD5-хэш?

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

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

Как расшифровать MD5-хэш: общие принципы

В лучшем случае речь может идти только о подборе искомого содержимого тремя основными методами:

  • использование словаря;
  • применение «радужных таблиц»;
  • метод брута.

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

Использование онлайн-ресурсов

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

Если кодирование начальной информации производилось при помощи средств языка PHP, в некоторых случаях онлайн-сервисы могут использовать комбинацию команд base_64 encode/base_64 decode. В любом случае методика подразумевает только подбор символов, цифр или литер в искомом сочетании путем сравнения с базами данных, в которых хранятся примеры кодированных результатов.

Как самому?

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

  • PasswordPro.
  • John the Ripper.
  • Cain & Abel.
  • «Штирлиц» и др.

Первые две программы предназначены для вычисления простейших комбинаций путем подстановки элементарных сочетаний вроде 1212121.

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

«Штирлиц» - приложение весьма интересное, но оно использует слишком ограниченное число алгоритмов вычислений, среди которых наиболее значимыми являются такие как BtoA, uuencode, base64, xxencode и binhex.

Если уж та то пошло, нужно использовать утилиту брута BarsWF, которая является наиболее быстрой из всех известных и в большинстве случаев может расшифровать MD5-хэш (пароль, если он есть, тоже может быть приведен в искомый вид), оперируя миллиардами вычислений хэша в секунду. Однако даже с применением всех этих программных средств следует учитывать еще и тот момент, что, кроме основного алгоритма, MDA5-кодирование может производиться одновременно и с применением MD4 или IM.

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

Заключение

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


Алгоритм шифрования MD5

Что такое MD5

Этот алгоритм был разработан в 1991 году профессором Рональдом Л. Ривестом. Алгоритм MD5 часто называют алгоритмом шифрования, но на самом деле это утверждение ошибочно. Главным преимуществом MD5 является то, что зашифрованные данные восстановить нельзя. А что это за алгоритм шифрования, который шифрует данные так, что никто их не сможет узнать? MD5 - это хэш-функция. У многих возник вопрос: что же это такое? Остановимся на этом вопросе.

Что такое Хэш-функция

Предположим, у нас есть некоторый набор данных. Для простоты будем рассматривать натуральные числа от 1 до 10 6 . И пусть есть некоторая функция, в которой один параметр - натуральное число от 1 до 10 6 , а возвращаемое значение - натуральное число от 1 до 1000. Нам не важно, что именно делает эта функция, нам важно то, что она каждому натуральному числу от 1 до 10 6 ставит в соответствие другое натуральное число от 1 до 1000. Для примера рассмотрим одну из самых простых функций, выполняющих это действие:

Int hash(long int x){
if (x%1000==0) return 1000;
return (x % 1000);
}

function hash(x:longint):longint;
begin
if (x mod 1000=0) then hash:=1000 else
hash:=x mod 1000;
end;

Это и есть простая хэш-функция. Если мы знаем параметр функции, то однозначно можем сказать, какой будет результат. А если нам известен результат, то можем ли мы узнать однозначно параметр? Конечно, нет. Для числа 234 параметр может быть 234,1234, 2234,3234… Поэтому однозначно восстановить параметр не получится.

Зачем нужен MD5

Для функции из примера, если известен результат, можно легко найти параметр, для которого будет такой же результат. А вот для функции MD5 это сделать не так-то просто. Т.е. если у нас есть только результат функции MD5, то мы не сможем найти параметр, для которого функция выдаст этот же результат (речь даже не идет про однозначное восстановление параметра). MD5 используют для хранения паролей. Приведу пример, когда хранение паролей в открытом виде опасно. Возьмем сайт "Дистанционное обучение" (сайт). На этом сайте проходят городские олимпиады школьников по информатике, ежедневно обучаются сотни школьников и студентов. Во многих школах доступа в Интернет нет, и школьникам необходимо пользоваться услугами сайта либо дома, либо не в своей школе. Поэтому сайт начали устанавливать в самих школах. Т.е. обучение происходит не на самом сайте, а на его копии, установленной в школе. Проблема в том, что вместе с сайтом школа получала пароли всех пользователей (в том числе и администраторов), и этими паролями любой мог воспользоваться для "администрирования" самого сайта. Было два способа решить эту проблему:

1. Перед созданием копии сайта, которая будет перенесена в школу, удалять все пароли.
2. Зашифровать все пароли так, чтобы никто не смог расшифровать их обратно.

Был выбран второй способ. Сейчас пароли хранятся в зашифрованном виде (при помощи MD5). После того, как пользователь введет свой пароль, от пароля вычисляется хэш-функция MD5. Результат сравнивается со значением, хранящимся в базе. Если значения равны, то пароль верен. Еще MD5 можно использовать в качестве контрольной суммы. Предположим, необходимо куда-то скопировать файл. Причем нет никаких гарантий, что файл будет доставлен без повреждений. Перед отправкой можно посчитать MD5 от содержимого файла и передать результат вместе с файлом. Затем посчитать MD5 от принятого файла и сравнить два результата. Если результаты различные, то это означает, что файл или результат был испорчен при передаче. Последнее время MD5 стали использовать интернет-казино. Перед тем, как сделать ставку, игрок получает хэш от результата игры. Когда ставка сделана, игрок получает результат игры (например, выпало число 26). Посчитав от результата хэш-функцию, можно убедиться, что казино сгенерировало это число до того, как игрок сделал ставку. Но не стоит думать, что выиграть в этом казино очень просто. Весь секрет в том что, вероятность выигрыша подобрана таким образом, что игрок почти всегда будет в проигрыше. Пример такого казино: сайт

Как работает MD5

Теперь посмотрим, как именно работает MD5. Для обработки MD5 получает некоторую строку. Эта строка преобразуется в последовательность из нулей и единиц. Как это делается? У каждого символа есть свой номер. Эти номера можно записать в двоичной системе счисления. Получается, каждый символ можно записать как последовательность нулей и единиц. Если этим воспользоваться, получим из строки последовательность из нулей и единиц. Пусть q будет длина получившейся последовательности (ровно 64 бита, возможно, с незначащими нулями). К получившейся последовательности приписывается 1. В результате длина последовательности увеличивается на 1. Затем к последовательности приписываются нули, пока длина не станет по модулю 512 равна 448 (length mod 512=448). Далее к последовательности дописываются младшие 32 бита числа q, а затем - старшие. Длина последовательности становится кратной 512. Полученную последовательность назовем S. Для подсчета результата используются четыре двойных слова (32 бита). Эти двойные слова инициализируются следующими шестнадцатеричными значениями, где первым следует самый младший байт:

A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10
Также для подсчета результата используются следующие функции:
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z) = XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))

X,Y,Z - это двойные слова. Результаты функций, также двойные слова. Для подсчета используется еще одна функция (назовем ее W). Она хитро обрабатывает данные и возвращает результат (подробно ее описывать не буду, т.к. она выполняет серию простых преобразований). Обработка данных происходит с использованием функций F, G, H, I.

На рисунке схематически изображена функция. Слева - входные данные, справа - выходные.

Все необходимые функции и обозначения рассмотрены. Теперь рассмотрим, как происходит просчет результата:
1. Запоминаем первые 512 бит последовательности S.
2. Удаляем первые 512 бит последовательности S (можно обойтись и без удаления, но тогда на первом шаге надо брать не первые 512, а
следующие 512 бит).
3. Вызываем функцию W. Параметры A,B,C,D - это текущие значения соответствующих двойных слов. Параметр T - это запомненные 512 бит.
4. Прибавляем к A A0.
5. B=B+B0.
6. C=C+C0.
7. D=D+D0.
8. Если длина последовательности 0, выходим.
9. Переходим к шагу 1.

После выполнения этого алгоритма A,B,C,D - это результат (его длина будет 128 бит). Часто можно видеть результат MD5 как последовательность из 32 символов 0..f. Это то же самое, только результат записан не в двоичной системе счисления, а в шестнадцатеричной.

Взлом MD5

В Интернете можно найти много программ, которые обещают найти строку, для которой алгоритм MD5 выдаст заданный результат. Эти программы действительно работают. Ранее отмечалось, что восстановить параметр невозможно. Как же работают эти программы? Они перебирают все возможные строки, применяют к ним алгоритм MD5, а затем сравнивают с образцом. Если значения совпали, это означает, что программа нашла необходимую строку. Но у этих программ есть маленький недостаток. Предположим, известно, что программе придется перебрать все слова длиной в 8 символов, состоящих из маленьких и больших латинских букв. Сколько времени это займет? Сколько всего таких слов? На первом месте может стоять любой из 26*2=52 символов. На 2, 3, 4, 5, 6, 7 и 8 - тоже 52. Значит, всего таких слов будет: 52*52*52*52*52*52*52*52=52 8 =53*10 12 . А если используются не только латинские буквы? То это еще больше. Перебор всех вариантов на обычном персональном компьютере займет очень много времени. В Интернете можно найти сайты, которые по введенному хэшу выдают строку, для которой будет точно такой же хэш. Эти сайты используют базу данных с заранее просчитанными хэшами. Но в базах хранятся не все хэшы, а только самые используемые. Вот один из таких сайтов.

  • бесплатность доступа
  • размер словаря
  • поддерживаемые типы хэшей
  • наличие детального криптоанализа (например с помощью Rainbow-таблиц)
    Обновлено 29.03.2013
  1. cmd5.ru

    cmd5.ru один из старейших сервисов для расшифровки хэшей, существует с 2006 года. Преимущества сервиса:

    • уникальная база данных, по объему не имеющая себе равных – 4800 миллиарда записей;
    • огромное количество поддерживаемых типов хэшей для перебора;
    • возможность групповой обработки хэшей;
    • наличие программного клиента для доступа к сервису.

    Помимо бесплатного доступа к сервису, имеется расширенный платный пакет услуг. Стоит ли платить за расшифровку? Однозначно да, особенно в случаях, когда ни один другой сервис не может взломать ваш пароль, либо вы занимаетесь расшифровкой хэшей на постоянной основе, тем более, что тарифы довольно демократичные. По своему опыту могу сказать, что это самый эффективный сервис, поэтому он занимает почетное первое место.

    типы хэшей:

    • md5(md5($pass))
    • sha256
    • mysql
    • mysql5
    • md5($pass.$salt);Joomla
    • md5($salt.$pass);osCommerce
    • md5(md5($pass).$salt);Vbulletin;IceBB;Discuz
    • md5(md5($salt).$pass)
    • md5($salt.$pass.$salt);TBDev
    • md5($salt.md5($pass))
    • md5(md5($pass).md5($salt))
    • md5(md5($salt).md5($pass));ipb;mybb
    • sha1($salt.$pass)
    • sha1(lower($username).$pass);SMF
    • sha1(upper($username).’:’.upper($pass));ManGOS
    • sha1($username.’:’.$pass)
    • sha1(salt.pass.’UltimateArena’)
    • MD5(Unix);phpBB3;WordPress
    • Des(unix)
    • mssql
    • md5(unicode)
    • serv-u
    • radmin v2.x
  2. c0llision.net
    free | 295G | md5 md5(md5()) ntlm lm pwdump | distributed network

    c0llision.net – отличный бесплатный сервис, основанный на большой сети по распределенному перебору md5, lm и ntlm хешей. Проект бурно развивается, что не может не радовать. Для добавления хешей в очередь предпочтительней использовать IRC, хотя и имеется веб-интерфейс.

  3. crackstation.net
    free | 190G | LM NTLM md2 md4 md5 md5(md5) md5-half sha1 sha1(sha1_bin()) sha224 sha256 sha384 sha512 ripeMD160 whirlpool MySQL 4.1+ | dic

    В описании сервиса заявлено, что база данных включает все слова из Википедии, а также все общедоступные словари, которые автору удалось найти в интернете. Используемый сервисом словарь доступен для скачивания. Кроме того, работает twitter-бот @plzcrack .

  4. md5.darkbyte.ru
    free | 329M + 48G | md5 | dic

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

  5. tmto.org
    free | 36G | md5 lm ntlm sha1 | rainbow tables

    После продолжительного оффлайна проект TMTO (Time-Memory Trade Off Cracking) вновь стал доступен. База стала еще больше, появились новые алгоритмы, сервис остался бесплатным, как и прежде. Радует высокая скорость расшифровки благодаря постоянному росту кластера. За один раз можно отправить неограниченное количество хэшей для расшифровки.

  6. hashcracking.ru
    free & auth | 3M | md5 mysql mysql5 sha1 | dic rainbow tables

    hashcracking.ru по-прежнему в строю, позволяет проводить поиск mysql и mysql5 паролей, брутить по маске, есть возможность перебора по словарю с указанием salt.

  7. www.md5decrypter.co.uk
    free | 8,7G | md5 | dic

    Неплохой бесплатный сервис с приличной базой. За один раз можно отправить на обработку 12 md5-хэшей. Среди минусов можно отметить, что используется лишь проверка по словарю из найденных паролей.

15.02.15 89.8K

Бывает, что забудешь код от входной двери, и стоишь, ждешь того, у кого память лучше твоей. Хотя самая лучшая память у ученых. Они еще помнят те времена, когда им за новые знания пятки каленым железом прижигали. Иначе бы они не придумали такую страшную штуку, как расшифровка MD5 . А до этого они умудрились ее еще и зашифровать!

Что такое MD5?

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

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

Область применения хеш-кодов:

  • Создание электронных подписей;
  • Хранение паролей в базах данных систем безопасности;
  • В рамках современной криптографии для создания уникальных ключей онлайн;
  • Проверка подлинности и целостности элементов файловой системы ПК.

MD5 как стандарт хеширования был разработан в 1991 году для создания уникального хеш-кода от заданного значения с последующей проверкой его подлинности.

Утилита md5sum, предназначенная для хеширования данных заданного файла по алгоритму MD5, возвращает строку. Она состоит из 32 чисел в шестнадцатеричной системе исчисления (016f8e458c8f89ef75fa7a78265a0025).

То есть хеш, полученный от функции, работа которой основана на этом алгоритме, выдает строку в 16 байт (128) бит. И эта строка включает в себя 16 шестнадцатеричных чисел. При этом изменение хотя бы одного ее символа приведет к последующему бесповоротному изменению значений всех остальных битов строки:

Проблемы надежности MD5

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

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

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

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

Область применения алгоритма хеширования:

  • Проверка целостности файлов, полученных через интернет – многие инсталляционные пакеты программ снабжены хеш-кодом. Во время активации приложения его значение сравнивается со значением, расположенным в базе данных разработчика;
  • Поиск в файловой системе продублированных файлов – каждый из файлов снабжен своим хеш-кодом. Специальное приложение сканирует файловую систему компьютера, сравнивая между собой хеши всех элементов. При обнаружении совпадения утилита оповещает об этом пользователя или удаляет дубликат. Одной из подобных программ является Duplifinder :

  • Для хеширования паролей – в семействе операционных систем UNIX каждый пользователь системы имеет свой уникальный пароль, для защиты которого используется хеширование на основе MD5 . Некоторые системы на основе Linux также пользуются этим методом шифрования паролей.

Обзор средств для декодирования хеш-кода MD5

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

Удобнее всего использовать специализированные ресурсы, предоставляющие возможность сделать это online :

  • md5.web-max.ca – данный сервис обладает простым и понятным интерфейсом. Для получения декодированного значения нужно ввести хеш и заполнить поле проверочной капчи:

  • md5decrypter.com – аналогичный сервис;
  • msurf.ru – данный ресурс имеет простой русскоязычный интерфейс. Его функционал позволяет не только расшифровывать значения хеш-кодов, но и создавать их:


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

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

Создание хеша MD5 является односторонним процессом. Поэтому не подразумевает обратного декодирования первоначального значения.

Основы безопасности при использовании MD5

Этот стандарт кодирования является одним из самых распространенных методов защиты данных не только в прикладном, но и в веб-программировании. Поэтому не будет лишним обезопасить свой md5 hash от намеренного взлома.

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

Во многих языках программирования для этого используются специальные классы и функции. Не являются исключением из правил и серверные языки программирования.

Создать хеш-код MD5 в php можно с помощью нескольких функций:

  • md5() – в качестве одного из параметров принимает значение «соли »;
  • crypt() – в отличие от предыдущей эта функция полностью автоматизирует весь процесс, в том числе и генерирование значения соли.