Можно ли расшифровать хеши MD5?

261

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

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

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

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

Джон Бубриски
источник
7
Возврат MD5 также даст несколько паролей.
Carles Company
231
MD5 - алгоритм дайджеста. Думайте об этом как о превращении коровы в стейк. Теперь попробуйте изменить это.
Механическая улитка
5
@ Искусство, насколько я понимаю, да, но только если у вас было ОЧЕНЬ много таких. И даже если вы это сделаете, вы не сможете вернуться, потому что алгоритм намеренно теряет информацию.
Джордан
8
@mechanicalsnail Принимая во внимание эту аналогию, можно сделать полный идеальный клон из ДНК на стейке. :))
Тримиха Валентий
8
@TrimikhaValentius MD5 - это пищеварительный алгоритм. Думайте об этом как есть стейк> пищеварение> выход. Теперь попробуйте изменить это.
user4157124

Ответы:

425

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

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

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

Тем не менее, было обнаружено, что у MD5 есть некоторые слабые стороны, такие, что при некоторой сложной математике можно найти коллизию, не пробуя 2 128 возможных входных строк. И тот факт, что большинство паролей короткие, и люди часто используют общие значения (например, «пароль» или «секретный»), означает, что в некоторых случаях вы можете достаточно разумно угадать чей-то пароль, прибегая к помощи хеша или используя Rainbow. таблица . Это одна из причин, по которой вы всегда должны « солить » хэшированные пароли, чтобы два одинаковых значения при хешировании не хэшировали одно и то же значение.

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

Адам Баткин
источник
22
однако в хэш-пространстве MD5 больше коллизий, чем первоначально предполагалось. Он больше не считается оптимальным как лучший хэш для паролей.
Cheeso
12
Поскольку большинство паролей короче хеша MD5, для каждого хеша обычно используется только один пароль. (И для того, чтобы получить доступ к учетной записи, достаточно найти одно, даже если оно не оригинальное.) Смысл в том, что функция односторонняя, заключается в том, что не существует нескольких разных прообразов, поэтому мы не можем знать, какой из них был исходным. , но действительно трудно найти хотя бы одно исходное значение .
Пауло Эберманн,
2
@Nick: На самом деле RFC1321 прямо говорит: «Алгоритм принимает в качестве входных данных сообщение произвольной длины»
Адам Баткин,
6
@ Олате - я не уверен, что согласен. Учитывая хэш, как правило, невозможно определить (со 100% уверенностью) исходный ввод. Существует (обычно) бесконечное количество входов, которые производят каждый возможный (хешированный) вывод. Я обычно говорил, потому что, если вы знаете (например), что вы ищете строку символов ASCII, и она меньше, скажем, 12 байтов, вероятно, что есть только один вход, который производит данный вывод. Но всегда будут столкновения (бесконечные), и если у вас нет каких-либо внешних ограничений (как в моем примере), вы никогда не узнаете, что правильно
Адам Баткин
2
@ Адам Баткин, ты прав, но я не имею в виду 100% уверенности. Взлом шифра не может быть сделан со 100% уверенностью. Отправитель мог иметь в виду случайный бред, а не английский текст, используя тот же ключ, который расшифровывает другие английские тексты, но вероятность английского очень близка к 100%. Аналогичным образом, при выборе между длинным паролем японского стихотворения UTF-8 и бессмысленными строками вероятность стихотворения составляет около 100%. Это может быть сделано с использованием вероятностей, основанных на фактах, а не заранее выбранных ограничений. Это, очевидно, не может быть сделано в целом, но это все еще весьма полезно.
Олат
154

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

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

MD5 - плохой хеш для паролей:

  • Это быстро, что означает, что если у вас есть «целевой» хеш, дешево попробовать много паролей и посмотреть, сможете ли вы найти тот, который хэширует к этой цели. Соление не помогает в этом сценарии, но помогает подорожать, пытаясь найти пароль, совпадающий с любым из нескольких хэшей, используя разные соли.
  • Я считаю, что у него есть недостатки, которые облегчают поиск коллизий, хотя поиск коллизий в печатном тексте (а не в произвольных двоичных данных) будет, по крайней мере, труднее.

Я не эксперт по безопасности, поэтому не буду давать конкретных рекомендаций, кроме «Не проверяйте собственную систему аутентификации». Найдите одного из уважаемых поставщиков и используйте его. Как разработка, так и внедрение систем безопасности - сложное дело.

Джон Скит
источник
2
Да, есть и другие методы, но вам нужно понять, что сказал Джон выше: «Вы не должны посылать им по электронной почте их пароль - это конфиденциальная информация, которая может остаться конфиденциальной». - на самом низком уровне электронные письма могут быть перехвачены, а конфиденциальная информация может быть получена. Пароль должен оставаться максимально безопасным - обычно сохраняя его в виде хэша только в базе данных.
Даниэль Май
3
А также тот факт, что если пароль можно изменить, это означает, что любой, кто получает доступ к вашей базе данных, может получить пароли пользователей. Не очень хорошая идея Односторонние пароли должны быть нормой; сохраняйте реальный пароль (даже зашифрованный) только в том случае, если это абсолютно необходимо (например, для аутентификации в другой системе, в которой нет ничего на основе токенов).
Джон Скит
1
Я видел меры по защите от спама, когда веб-сервер получателя запрещает входящую почту, просто чтобы подождать, пока почтовый сервер отправителя повторится (спам-боты обычно пробуют только один раз). Это может легко превысить ваш 10-минутный тайм-аут.
sisve
1
@ravisoni: Это нахождение на значении , которое имеет тот же самый хэш, предположительно с помощью грубой силы или таблиц поиска. Там нет никакой гарантии, что это оригинальное значение открытого текста.
Джон Скит
5
@ravisoni: Что вы подразумеваете под «прямо» здесь? Если пароль неизвестен, вы не можете знать, является ли раскрытый пароль оригинальным или нет. Но дело в том, что один из способов, например MD5, по определению теряет информацию. Тот факт , что такие сайты , как это можно придумать в согласующем пароле просто хорошее свидетельство MD5 является плохим алгоритмом использовать по соображениям безопасности.
Джон Скит
52

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

Но это не значит, что это

  • Жизнеспособный
    или
  • Безопасный

Вы не хотите «переворачивать» хеш MD5 . Используя методы, изложенные ниже, вам никогда не понадобится. «Реверсивный» MD5 фактически считается вредоносным - некоторые веб-сайты предлагают возможность «взломать» и взломать MD5-хэши - но все они представляют собой огромные базы данных, содержащие словарные слова, ранее введенные пароли и другие слова. Существует очень малая вероятность того, что хеш MD5 будет вам нужен. И если вы солили хеш MD5 - это тоже не сработает! :)


Должны работать логины с хешированием MD5 : во

время регистрации:
пользователь создает пароль -> хеширование пароля с использованием MD5 -> хеш, хранящийся в базе данных

Во время входа в систему:
пользователь вводит имя пользователя и пароль -> (Имя пользователя проверено). Пароль хэшируется с помощью MD5 -> Хэш сравнивается с сохраненным хэшем в базе данных.

Когда требуется «Потерянный пароль»:

2 варианта:

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

или

  • Пользователю отправляется ссылка для изменения его пароля (с дополнительной проверкой, если у вас есть секретный вопрос / и т.д.), а затем новый пароль хэшируется и заменяется старым паролем в базе данных.
Даниэль Мэй
источник
1
У меня есть несколько щупалец. Радужные столы не являются грубой силой. На самом деле существуют программы и сайты, которые используют грубые (очень простые) пароли из нескольких символов (обычно они просто зацикливаются на несколько часов или дней, и вы можете заполнить хэш и надеяться, что он появится в цикле). И, к сожалению, учитывая отсутствие качества многих паролей, вероятность того, что один из них всплывет, не является «очень малой вероятностью».
Мартен Бодьюс
32

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

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

bdonlan
источник
1
Я бы добавил, что поиск другого значения, которое хэширует тот же вывод, называется «столкновением». Это наиболее распространенный метод взлома MD5-хеш-систем.
Николь
5
@Renesis, поиск данных, которые хэшируют до ранее известного значения, на самом деле называется «прообразом», и это намного, намного сложнее, чем просто столкновение. На MD5 пока не было продемонстрировано ни одной атаки с прообразом, но были использованы столкновения.
bdonlan
Смысл хеш-функций (когда они используются для хранения паролей) не в том, что есть много возможных паролей, которые дают одинаковый хеш (есть, но большинство из них длиннее самого хеша), но трудно найти даже один из них (которого было бы достаточно для доступа к системе). И да, из-за радужных таблиц вы не используете несоленые хэши. И из-за небольшого пространства для паролей вы будете использовать медленный хеш (например, bcrypt или scrypt) вместо быстрого (например, MD5 / SHA - * / ....)
Paŭlo Ebermann
1
Чтобы быть технически, вы не можете выполнить MD5 с уверенностью, потому что оборудование может работать со сбоями. Таким же образом, вы не сможете быть уверены, что пароль был, passwordа не все другие бесконечные входы, которые производят тот же хэш, но все они выглядят довольно случайными, но вы можете быть достаточно близко.
Олат
Конечно, применяется принцип «голубиных отверстий», но в вычислительном отношении невозможно найти второй вход, который хэширует до определенного значения, например, хеш-код над обычным паролем. Если вы найдете X, который хэширует данный H (X), то вы можете быть уверены, что X является правильным вводом. Это делает весь первый раздел этого ответа и большинство остальных неверными.
Мартен Бодьюс
13

Невозможно, по крайней мере, в разумные сроки.

Этот способ часто используется для сброса пароля. То есть вы даете им новый (случайный) пароль и отправляете его по электронной почте.

Мэтью Гровс
источник
5
Если бы хэш не был засолен, вы бы удивились, как часто все, что нужно, это поиск в Google хэшированных значений ...
Майкл Боргвардт,
1
Не очень практично для системы поиска паролей, хотя, даже несоленой :)
Мэтью Гроувс
12

Вы не можете восстановить пароль md5. (На любом языке)

Но вы можете:

дать пользователю новый.

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

Nettogrof
источник
1
Nix идея радужного стола. Если вы солите - и так и должно быть - тогда это не сработает.
Стивен Судит
1
@StevenSudit Если они все еще используют MD5 для хеширования паролей вместо хеширования надежных паролей, то вы не можете предположить, что они используют соль. Может быть, они делают, возможно, нет.
Maarten Bodewes
10

Нет, он, должно быть, запутался в словарях MD5.

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

Роберт Грайнер
источник
8

Расшифровка (непосредственно получение простого текста из хешированного значения алгоритмическим способом), нет.

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

Синан Тайфур
источник
7

MD5 - это алгоритм хеширования, вы не можете вернуть значение хеш-функции.

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

Светлозар Ангелов
источник
7

Нет простого способа сделать это. Это своего рода точка хеширования пароля. :)

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

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

Билл Ящерица
источник
6

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

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

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

Дина
источник
Некорректное . Если совпадение найдено, то наверняка это будет исходный пароль. Если бы это было не так, то было бы возможно генерировать коллизии с учетом любого H (X), где X - это сообщение без предопределенной структуры, определенной противником. В вычислительном отношении невозможно найти такое столкновение для криптографической безопасной хеш-функции, даже если это сломанная хеш-функция, такая как MD5.
Мартен Бодьюз
@MaartenBodewes: «Если совпадение найдено, то наверняка это будет оригинальный пароль». Я не могу понять, как это так, если мы предполагаем неограниченную длину паролей. Я бы сказал, что весьма вероятно, что это будет оригинальный пароль, но это не обязательно . Тот факт, что существует больше возможных паролей, чем хэшей MD5, означает, что должно быть возможно наличие двух паролей с одинаковым хешем. То, что такие столкновения невозможно найти в вычислительном отношении , не означает, что они не существуют. Или я тебя неправильно понял?
Джон Скит
@JonSkeet Если в вычислительном отношении невозможно найти столкновение специально, то найти его случайно так же маловероятно или хуже. Из-за ограниченного пространства вывода MD5 и проблемы дня рождения вероятность того, что вы обнаружите коллизию, составляет около 1 на 2 ^ 64 (то есть около половины выходного пространства) - и это после сопоставления примерно 2 ^ 64 хешей. И это даже не учитывает, что сообщение, вероятно, должно быть небольшим и иметь определенный формат, чтобы считаться паролем. Большинство паролей имеют энтропию значительно ниже 2 ^ 64 бит.
Maarten Bodewes
1
@MaartenBodewes: Но есть большая разница между «астрономически маловероятным» и «невозможным». Ваше утверждение о том, что будучи уверен , что это правильный пароль слишком сильна, ИМО. Это предполагает математическую уверенность, которой нет.
Джон Скит
Вы также можете угадать 2 ^ 128-битный ключ AES за один раз. Это "просто" крайне маловероятно. Криптография опирается на такие шансы. Практически, если вы найдете входящее сообщение / пароль, это будет именно то, что вы искали. То, что теоретически возможно найти другое входное сообщение, приятно, но для этого вопроса в StackOverflow нет необходимости его рассматривать. И радужные таблицы заполнены только возможными паролями. Они не будут содержать достаточно данных, чтобы иметь возможность даже столкновения (они либо неосознанно перезаписывают отображение, либо станут знаменитыми).
Мартен Бодьюс
4

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

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

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

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

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

Вы не можете снять хеш с MD5.

Нед Бэтчелдер
источник
3
По своей конструкции все хэши одинаковой длины страдают от коллизий. Это неизбежно при ограничении данных переменной длины. MD5 считается устаревшим по скорости столкновений, а не по факту столкновений.
Джонатан Лоновски
MD5 считается сломанным из-за доказанной возможности создания входных данных, которые сталкиваются.
Нед Бэтчелдер
3

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

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

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

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

davitz38
источник
Радужные таблицы - не словарные атаки - бесполезны, если используется соль. Хеширование более одного раза - без соли - по-прежнему позволяет использовать радужные таблицы, хотя найти уже существующий в Интернете, безусловно, менее вероятно.
Мартен Бодьюс
2

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

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

Беркай
источник
2

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

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

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

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

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

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

Vilx-
источник
я видел этот сайт, который переворачивает md5 в исходный текст: md5.gromweb.com . Как это возможно тогда?
Самак
2
@ samach321 - Легко: у них есть БД хэшированных строк. Все, что вы вводите в поле «Преобразовать строку в хэш MD5», добавляется в БД. Попробуйте получить хэш MD5 из другого источника и введите его. Если это не то, что находится в их БД, вы не получите результат.
Vilx-
1

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

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

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

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

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

md5online

md5decrypter

Гириш Патидар
источник
Да, но это уже охвачено вопросом, как в фразе «Я знаю, что есть словари». Поэтому просто указание на словари не считается ответом.
Мартен Бодьюс
1

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

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

Нет, отменить хеш-функцию, такую ​​как 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 (функция получения ключа на основе пароля). Такая функция определяет, как использовать соль вместе с хешем. Таким образом, идентичные хэши не будут генерироваться для идентичных паролей (от других пользователей или из других баз данных). По этой причине хэши паролей также не позволяют использовать радужные таблицы, пока соль достаточно велика и правильно рандомизирована.

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

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

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


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

Мартен Бодевес
источник
0

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

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

Аджанян Прадип
источник
-1

Пока невозможно ввести хеш-пароль в алгоритм и вернуть пароль в виде простого текста, потому что хеширование - это односторонняя вещь. Но то, что люди сделали, - это сгенерировали хеш-коды и сохранили их в большой таблице, чтобы при вводе определенного хеш-кода он проверял таблицу на соответствие паролю и возвращал этот пароль вам. Примером сайта, который делает это, является http://www.md5online.org/ . Современная система хранения паролей противостоит этому с помощью алгоритма посола, так что при вводе одного и того же пароля в поле пароля во время регистрации генерируются разные хэши.

oziomajnr
источник
-1

Нет, вы не можете расшифровать / перевернуть md5, так как это односторонняя хеш-функция, пока вы не найдете обширные уязвимости в MD5. Другой способ заключается в том, что некоторые веб-сайты имеют большой набор паролей базы данных, поэтому вы можете попробовать в сети декодировать вашу хеш-строку MD5 или SHA1. Я пробовал веб-сайт, такой как http://www.mycodemyway.com/encrypt-and-decrypt/md5, и он отлично работает для меня, но это полностью зависит от вашего хэша, если этот хеш хранится в этой базе данных, тогда вы можете получить фактическую строку ,

Рафи Ахмад
источник
1
Нет, MD5 - это не шифрование, даже не одностороннее шифрование (что не имеет смысла в первую очередь).
Maarten Bodewes
@MaartenBodewes Это моя ошибка, это не функция шифрования, а хеш-функция. Спасибо.
Рафи Ахмад