Хобрук: Ваш путь к мастерству в программировании

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

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

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

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

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


  • Нет, словари есть как ты говоришь, а вот MD5 расшифровать нет 06.08.2009
  • вот несколько статей о конфликтах MD5 и вот и Генератор столкновений MD5 от Патрика Стаха на CodePad на основе Статья Сяоюнь Ван и Хунбо Юя: Как нарушить работу MD5 и других хеш-функций Вот визуализация на [MD5 Co 06.08.2009
  • MD5 - это односторонняя хеш-функция. Извините! 24.09.2009
  • Возврат MD5 также приведет к появлению нескольких паролей. 24.09.2009
  • Однако коллизии MD5 на самом деле не актуальны для хранения паролей. 04.09.2011
  • По теме: stackoverflow.com/questions/2717950/ 19.03.2012
  • MD5 - алгоритм дайджеста. Думайте об этом как о превращении коровы в стейк. А теперь попробуйте это исправить. 08.01.2013
  • Интересно, а что, если я знаю исходное значение перед хешем, например abcdefg, а также имею значение после хеша и добавляю соль, например, FFEA56E6F4 (например, ..). Можно ли выяснить алгоритм хеширования? 01.07.2013
  • @Arst насколько я понимаю, да, но только если у вас их было МНОГО. И даже если бы вы это сделали, вы не смогли бы пойти в обратном направлении, потому что алгоритм целенаправленно теряет информацию. 14.08.2013
  • @mechanicalsnail, учитывая эту аналогию, можно сделать полный идеальный клон из ДНК на стейке. :)) 11.03.2015
  • @TrimikhaValentius MD5 - это пищеварительный алгоритм. Думайте об этом как о съесть стейк ›пищеварение› результат. А теперь попробуйте это исправить. 17.11.2017
  • Привет, Джон, ты придешь сегодня вечером? 30.04.2021

Ответы:


1

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

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

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

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

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

06.08.2009
  • однако в хэш-пространстве MD5 больше конфликтов, чем первоначально предполагалось. Он больше не считается оптимальным хешем для паролей. 06.08.2009
  • Вот почему NIST проводит соревнование, чтобы определить замену алгоритмам SHA-1 и SHA-2, каждый из которых более безопасен, чем MD5. MD5 не следует использовать в новых критически важных для безопасности приложениях. Не ясно, безопасен ли SHA-1. SHA-2 рекомендуется до тех пор, пока не станет доступен SHA-3. 07.08.2009
  • Поскольку большинство паролей короче хэша MD5, обычно для каждого хэша используется только один пароль. (И найти один, даже если он не исходный, достаточно для доступа к учетной записи.) Смысл односторонней функции не в том, что существует несколько разных прообразов, поэтому мы не можем знать, какой из них был исходное, но действительно сложно найти даже одно исходное значение. 04.09.2011
  • В MD5 не существует бесконечного количества входов - входные сообщения ограничены 2 ^ 64 битами. 05.09.2011
  • @Nick: На самом деле, RFC1321 явно говорит: алгоритм принимает в качестве входных данных сообщение произвольной длины. 05.09.2011
  • К сожалению, вы правы - 64-битное представление b (длина сообщения до добавления битов заполнения) добавляется к результату предыдущего шага. В том маловероятном случае, когда b больше 2 ^ 64, используются только младшие 64 бита b. Там тоже неплохая преуменьшение. 06.09.2011
  • Этот ответ на самом деле частично неверен. Хотя password и CPfvwl#qr*w4*96C@&@xj$T2ZggJC% и бесконечное количество других входных данных могут давать один и тот же хэш, у нас нет нулевых способов определения оригинала, как предполагает ответ. Этот вид очевидного теста (и, для его автоматизации, тестирования, чтобы увидеть, соответствует ли открытый текст кандидата статистике ожидаемых открытых текстов) используется все время для определения того, был ли уже взломан обычный шифротекст или нет. 20.02.2013
  • @Olathe - Я не уверен, что согласен. Учитывая хэш, обычно невозможно определить (со 100% уверенностью) исходный ввод. Существует (обычно) бесконечное количество входов, которые производят все возможные (хешированные) выходные данные. Я сказал в целом, потому что, если вы знаете (например), что ищете строку символов ASCII, и она меньше, скажем, 12 байт, вероятно, есть только один ввод, который производит заданный результат. Но всегда будут столкновения (бесконечные), и если у вас нет какого-либо внешнего ограничения (как в моем примере), вы никогда не узнаете, что правильно 20.02.2013
  • @ Адам Баткин, ты прав, но я не имею в виду стопроцентную уверенность. Взломать шифр нельзя со 100% уверенностью. Отправитель мог иметь в виду случайную тарабарщину, а не английский открытый текст, используя тот же ключ, который расшифровывает другие английские открытые тексты, но вероятность английского очень близка к 100%. Точно так же, выбирая между длинным паролем японской поэмы UTF-8 и бессмысленными строками, вероятность стихотворения близка к 100%. Это может быть сделано с использованием постфактум вероятностей, а не заранее выбранных ограничений. Очевидно, что это невозможно сделать в целом, но все же весьма полезно. 26.04.2013
  • Недостаточно просто солить пароли, чтобы сделать их безопасными, вместо этого следует использовать хэш пароля (который, конечно, включает использование достаточно большой соли), такой как bcrypt. 19.09.2018

  • 2

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

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

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

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

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

    24.09.2009
  • Спасибо за ответ, есть ли другой способ сохранить пароли, которые можно было бы изменить в будущем. 24.09.2009
  • Да, есть и другие методы, но вы должны понимать, что сказал Джон выше: «не следует отправлять им пароль по электронной почте - это конфиденциальная информация, которая может оставаться конфиденциальной». - на самом низком уровне электронные письма могут быть перехвачены, а конфиденциальная информация может быть получена. Пароль должен оставаться максимально безопасным, обычно сохраняя его как хэш только в базе данных. 24.09.2009
  • А также тот факт, что если пароль может быть изменен, это означает, что любой, кто получает доступ к вашей базе данных, может получить доступ к паролям пользователей. Не хорошая идея. Односторонние пароли должны быть нормой; сохраняйте только настоящий пароль (даже в зашифрованном виде), если вы абсолютно должны (например, для аутентификации в другой системе, в которой нет ничего, основанного на токенах). 24.09.2009
  • 24 часа - это много времени. Я бы сократил это до 10 минут или около того. Этого будет достаточно, даже если вам сначала нужно войти в свою учетную запись электронной почты. 24.09.2009
  • @Gumbo: А когда бы ты запустил таймер? Предоставление только 10 минут не учитывает задержки сервера, что, если электронное письмо не было отправлено мгновенно? 24.09.2009
  • Я видел меры защиты от спама, когда веб-сервер получателя отклоняет входящую почту только для того, чтобы дождаться, пока почтовый сервер отправителя повторит попытку (спам-боты обычно пытаются только один раз). Это может легко превысить ваш 10-минутный тайм-аут. 24.09.2009
  • @Gumbo делает его одноразовым более важным, чем сроки. Если в середине находится мужчина или кто-то, у кого есть доступ к электронной почте пользователя, это простая гонка без преимущества ни для одной из сторон. Мы должны предполагать, что проигрываем - следующая лучшая вещь - это сразу понять, что что-то не так, потому что одноразовый пароль уже был использован. 24.09.2009
  • Это напоминает мне историю, которую я слышал о парне, который никогда не беспокоился о паролях, он просто заставил системы восстановления генерировать новый каждый раз, когда ему нужно было войти в систему. 24.09.2009
  • @ravisoni: это поиск значения a с таким же хешем, предположительно, с помощью грубой силы или таблиц поиска. Нет никакой гарантии, что это исходное значение открытого текста. 12.01.2013
  • @JonSkeet, но я всегда использую этот сайт для получения любых неизвестных значений пароля, и это всегда правильно ... 12.01.2013
  • @ravisoni: Что ты имеешь в виду, говоря прямо здесь? Если пароль неизвестен, вы не можете узнать, является ли раскрытый исходный пароль или нет. Но дело в том, что односторонние хэши вроде MD5 по определению теряют информацию. Тот факт, что такие сайты могут предлагать совпадающий пароль, является просто хорошим доказательством того, что алгоритм MD5 плохой для использования по соображениям безопасности. 12.01.2013
  • @KiranRS: Что ж, в некоторых случаях найдется значение a с таким же хешем. Это не означает, что это тот, который использовался изначально, и во многих случаях он ничего не найдет. (Со страницы: Наша база данных содержит более 15 186 881 уникальных хэшей MD5. Это действительно не так много.) 26.03.2015

  • 3

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

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

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

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


    Логины с хешированием MD5 должны работать следующим образом:

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

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

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

    2 варианта:

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

    или

    • Пользователю отправляется ссылка для изменения своего пароля (с дополнительной проверкой, есть ли у вас секретный вопрос и т. Д.), А затем новый пароль хешируется и заменяется старым паролем в базе данных.
    24.09.2009
  • У меня есть несколько придирок. Радужные таблицы - это не брутфорс. На самом деле существуют программы и сайты, которые используют (очень простые) пароли из нескольких символов (обычно они просто зацикливаются на несколько часов или дней, и вы можете ввести хеш и надеяться, что он появится в цикле). И, к сожалению, учитывая низкое качество многих паролей, вероятность того, что один появится, не так уж и мала. 19.09.2018
  • Я должен заметить: реверсирование MD5 не является злонамеренным по своей природе. То, как вы используете эту способность, определяет злой умысел или добрые намерения. Если бы кто-нибудь придумал, как это исправить, и поделился бы этим с миром, он мог бы выиграть Нобелевскую премию или что-то в этом роде. НИКОГДА не бойтесь пытаться перепроектировать НИЧЕГО, если это то, что вы хотите сделать. Так все мы поправляемся. Но если вы обнаружите обратную сторону MD5, а затем используете ее для личной выгоды, тогда да, вы злонамерены. 16.11.2020

  • 4

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

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

    06.08.2009
  • Я бы добавил, что обнаружение другого значения, хеширующего тот же результат, называется коллизией. Это наиболее распространенный метод взлома систем с хешированием MD5. 06.08.2009
  • @Renesis, на самом деле, поиск данных, которые хешируются до ранее известного значения, называется прообразом, и это намного, намного сложнее, чем просто коллизия. Атака прообраза против MD5 еще не была продемонстрирована, но использовались атаки столкновения. 07.08.2009
  • Суть хеш-функций (когда они используются для хранения паролей) не в том, что существует множество возможных паролей, которые дают один и тот же хеш (есть, но большинство из них длиннее, чем сам хеш), а в том, что их трудно найти даже один из них (которого хватило бы для доступа к системе). И да, из-за радужных таблиц вы не используете несоленые хеши. А из-за небольшого пространства для пароля вы будете использовать медленный хэш (например, bcrypt или scrypt) вместо быстрого (например, MD5 / SHA - * / ....) 04.09.2011
  • Говоря техническим языком, вы не можете точно выполнить MD5, потому что оборудование могло работать со сбоями. Точно так же вы не можете быть уверены, что пароль был password, а не все другие бесконечные входные данные, которые производят один и тот же хэш, но все выглядят довольно случайными, но вы можете быть достаточно близкими. 20.02.2013
  • Принцип «ящика», конечно, применим, но по-прежнему вычислительно невыполнимо найти второй вход, хэширующий до определенного значения, например хеш вместо обычного пароля. Если вы найдете X, который хеширует заданный H (X), вы можете быть уверены, что X - правильный ввод. Это делает весь первый раздел этого ответа и большую часть остальных неверными. 19.09.2018

  • 5

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

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

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

  • 6

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

    Но ты можешь:

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

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

    24.09.2009
  • Избавьтесь от идеи радужного стола. Если солить - а надо - то все равно ничего не получится. 24.09.2009
  • @StevenSudit. Если они все еще используют MD5 для хеширования паролей вместо использования надежного хеша паролей, тогда вы не можете предполагать, что они используют соль. Может быть, да, возможно, нет. 19.09.2018

  • 7

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

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

    06.08.2009

    8

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

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

    06.08.2009

    9

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

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

    24.09.2009

    10

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

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

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

    24.09.2009

    11

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

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

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

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

  • 12

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

    Вы не можете удалить хэш MD5.

    06.08.2009
  • По замыслу, все хэши одинаковой длины страдают от коллизий. Это неизбежно при ограничении данных переменной длины. MD5 считается устаревшим из-за его частоты столкновений, а не из-за факта столкновения. 06.08.2009
  • MD5 считается сломанным из-за доказанной возможности построения конфликтующих входов. 07.08.2009

  • 13

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

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

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

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

  • 14

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

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

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

    Например, вот онлайн-инструмент MD5 decrypter.

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

  • 15

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

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

    06.02.2010

    16

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

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

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

    (NB: семь лет спустя, ну, надеюсь, кому-то это пригодится)

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

  • 17

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

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


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

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

    Конечно, можно повторно использовать хеш-значение 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. Однако для этого требуется хранение секрета / ключа независимо и с более высокими требованиями к доступу, чем хэш пароля.

    18.09.2018

    18

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

    06.08.2009
  • я видел этот веб-сайт, который меняет md5 на исходный текст: md5.gromweb.com. Тогда как это возможно? 20.04.2015
  • @ samach321 - Просто: у них есть БД хешированных строк. Все, что вы вводите в их поле преобразования строки в хэш-код MD5, добавляется в базу данных. Попробуйте получить хеш MD5 из другого источника и введите его. Если это не что-то, что есть в их БД, вы не получите результата. 20.04.2015
  • Между прочим, это называется «Радужный стол». Из Википедии: Радужная таблица - это предварительно вычисленная таблица для кэширования вывода криптографических хеш-функций, обычно для взлома хешей паролей. 08.08.2020
  • @JordanArseno - я знаю. Это эффективная структура данных для этой задачи, но, в конце концов, это все еще своего рода (очень специфическая) база данных. 09.08.2020

  • 19

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

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

  • 20

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

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

    Расшифровка MD5

    md5online

    md5decrypter

    04.01.2016
  • Ага, но это уже вопрос накрывается, так как во фразе я знаю, что словари есть. Поэтому простое указание на словари не считается ответом. 19.09.2018

  • 21

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

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

  • 22

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

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

    04.03.2019

    23

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

    12.11.2016

    24

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

    05.07.2018
  • Нет, MD5 - это не шифрование, даже не одностороннее шифрование (что вообще не имеет смысла). 19.09.2018
  • Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

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

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

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.