Можно ли расшифровать хеши MD5? - PullRequest
240 голосов
/ 06 августа 2009

Кто-то сказал мне, что он видел программные системы, которые:

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

Это возможно? Я думал, что было невозможно / невозможно расшифровать хеши MD5.

Я знаю, что есть словари MD5, но есть ли алгоритм расшифровки?

Ответы [ 24 ]

6 голосов
/ 24 сентября 2009

См. Все другие ответы здесь о том, как и почему это необратимо и почему вы бы не захотели.

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

Кроме того, это не будет работать для соленых хэшей. Соление рекомендуется многими экспертами по безопасности.

4 голосов
/ 24 сентября 2009

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

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

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

3 голосов
/ 06 августа 2009

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

Нельзя хэшировать хеш MD5.

2 голосов
/ 14 сентября 2016

Да, именно то, что вы просите, возможно. Невозможно «расшифровать» пароль MD5 без помощи, но можно повторно зашифровать пароль MD5 в другой алгоритм, но не все сразу.

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

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

(NB: семь лет спустя, ну, надеюсь, кто-то найдет это полезным)

2 голосов
/ 22 марта 2010

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

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

  • если сообщение хешируется с использованием сообщения SALT
  • если сообщение является хешем более одного раза

Например, вот один расшифровщик MD5 онлайн-инструмент.

2 голосов
/ 06 февраля 2010

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

это единственный путь, не заходя в криптоанализ.

1 голос
/ 19 сентября 2018

Нет, отменить хеш-функцию, такую ​​как MD5, невозможно: если задано выходное хеш-значение, невозможно найти входное сообщение, если не известно достаточно информации о входном сообщении.

Расшифровка не является функцией, которая определена для хэш-функции; шифрование и дешифрование являются функциями шифра , такого как AES в режиме CBC; хэш-функции не шифруют и не дешифруют . Хеш-функции используются для дайджеста входного сообщения. Как видно из названия, обратный алгоритм невозможен по замыслу .


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

Как правило, также можно угадывать пароли, используя атаки методом грубой силы или (расширенного) словаря, сравнивать базы данных или пытаться найти хэши паролей в так называемых радужных таблицах. Если совпадение найдено, то с вычислительной точки зрения определено, что входные данные были найдены. Хеш-функции также защищены от столкновений: обнаружение X', так что H(X') = H(X) задано H(X). Таким образом, если найден X, то с вычислительной точки зрения он действительно является входным сообщением. В противном случае вы бы все-таки совершили атаку столкновением. Радужные таблицы могут быть использованы для ускорения атак, и есть специальные интернет-ресурсы, которые помогут вам найти пароль с конкретным хешем.

Конечно, можно повторно использовать значение хеша H(X) для проверки паролей, которые были сгенерированы в других системах. Единственное, что должна сделать принимающая система - это сохранить результат детерминированной функции F, которая принимает H(X) в качестве входных данных. Когда X дается системе, тогда H(X) и, следовательно, F могут быть пересчитаны и результаты могут быть сравнены. Другими словами, не требуется , чтобы расшифровать значение хеш-функции, чтобы просто проверить , что пароль правильный, и вы все равно можете сохранить хэш как другое значение.


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

Хэши паролей также содержат рабочий коэффициент (иногда настраиваемый с использованием счетчика итераций ), который может значительно замедлить атаки, которые пытаются найти пароль с учетом значения соли и хеша. Это важно, так как база данных с солями и хэш-значениями может быть украдена. Наконец, хэш пароля также может быть hard-hard , так что для его вычисления требуется значительный объем памяти. Это делает невозможным использование специального оборудования (GPU, ASIC, FPGA и т. Д.), Чтобы злоумышленник мог ускорить поиск. Другие входные данные или параметры конфигурации, такие как перец или степень распараллеливания, также могут быть доступны для хэша пароля.

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

Обычно используемые хэши паролей: bcrypt , scrypt и PBKDF2 . Существует также Argon2 в различных формах, который является победителем недавнего конкурса хэширования паролей. Здесь, на CrackStation - хорошее сообщение в блоге о правильной защите паролем.


Возможно, злоумышленники не смогут выполнить вычисление хэша, чтобы убедиться, что пароль правильный. Для этого перец может быть использован в качестве ввода хэша пароля. Альтернативно, значение хеш-функции, конечно, может быть зашифровано с использованием шифра, такого как AES, и режима работы, такого как CBC или GCM. Однако для этого требуется хранение секрета / ключа независимо и с более высокими требованиями к доступу, чем хэш пароля.

1 голос
/ 04 января 2016

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

Попробуйте онлайн:

MD5 Расшифровать

md5online

md5decrypter

1 голос
/ 23 ноября 2013

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

  1. Брутфорсинг : Все алгоритмы компьютерной безопасности страдают Брутфорсинг . Основываясь на этой идее, в современном графическом процессоре используется идея параллельного программирования, с помощью которого он может вернуть простой текст, массово используя его с помощью любого графического процессора. Этот инструмент hashcat выполняет эту работу. В прошлый раз, когда я проверял версию cuda , я смог перебрать 7-значный символ длиной в течение шести минут.
  2. Интернет-поиск : просто скопируйте и вставьте хеш в Google и посмотрите, сможете ли вы найти соответствующий открытый текст там. Это не решение, когда вы что-то тестируете, но это определенно стоит попробовать. Некоторые веб-сайты поддерживают хэш почти для всех слов в словаре.
1 голос
/ 24 сентября 2009

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

...