Почему хэш-значения MD5 необратимы? - PullRequest
87 голосов
/ 01 декабря 2008

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

Если на моем сервере, в PHP я выдаю:

md5("stackoverflow.com") = "d0cc85b26f2ceb8714b978e07def4f6e"

Когда вы запускаете эту же строку через функцию MD5, вы получаете тот же результат при установке PHP. Процесс используется для получения некоторого значения из некоторого начального значения.

Не означает ли это, что есть какой-то способ деконструировать происходящее и обратить вспять хэш-значение?

Что в этих функциях делает невозможным отслеживание полученных строк?

Ответы [ 16 ]

1 голос
/ 03 декабря 2008

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

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

0 голосов
/ 15 февраля 2017

Лучший способ понять, что означают все наиболее проголосовавшие ответы, - на самом деле попытаться изменить алгоритм MD5. Я помню, что несколько лет назад я пытался вернуть алгоритм MD5crypt не для того, чтобы восстановить исходное сообщение, потому что это явно невозможно, а просто для того, чтобы сгенерировать сообщение, которое выдает тот же хеш, что и исходный хеш. Это, по крайней мере теоретически, дало бы мне возможность войти в систему на устройстве Linux, которое хранило пароль user: в файле / etc / passwd, используя сгенерированное сообщение (пароль) вместо использования исходного. Поскольку оба сообщения будут иметь одинаковый результирующий хэш, система распознает мой пароль (сгенерированный из исходного хэша) как действительный. Это не сработало вообще. Через несколько недель, если я правильно помню, использование соли в первоначальном сообщении убило меня. Мне нужно было создать не только правильное начальное сообщение, но и соленое правильное начальное сообщение, чего я никогда не мог сделать. Но знания, которые я получил от этого эксперимента, были хороши.

0 голосов
/ 24 сентября 2014

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

  • Хешируйте пароль по своему выбору и помещайте результаты в таблицу паролей, если он / она имеет права на запись / редактирование таблицы.
  • Создание хэшированных значений общих паролей и проверка наличия аналогичных хешированных значений в таблице паролей.

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

0 голосов
/ 20 февраля 2013

f (x) = 1 необратимо. Хеш-функции не являются необратимыми.

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

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

Однако это игнорирует, что разумный открытый текст, полученный из семени password, намного, гораздо более вероятен, чем другой, произведенный из семени Wsg5Nm^bkI4EgxUOhpAjTmTjO0F!VkWvysS6EEMsIJiTZcvsh@WI$IH$TYqiWvK!%&Ue&nk55ak%BX%9!NnG%32ftud%YkBO$U6o, в той степени, в которой любой, кто утверждает, что второе было возможностью, будет смеяться.

Точно так же, если вы пытаетесь выбрать между двумя потенциальными паролями password и Wsg5Nm^bkI4EgxUO, это не так сложно сделать, как некоторые математики заставили бы вас поверить.

0 голосов
/ 30 мая 2009

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

Например, попробуйте следующий хеш-код на http://gdataonline.com/seekhash.php, чтобы узнать, какой текст я использовал для вычисления хеша

aea23489ce3aa9b6406ebb28e0cda430
0 голосов
/ 01 декабря 2008

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

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

дополнительная информация о MD5: она уязвима для столкновений. недавно прочитал эту статью, http://www.win.tue.nl/hashclash/Nostradamus/

открывает исходный код для реализации крипто-хеша (MD5 и SHA), который можно найти в коде Mozilla. (библиотека freebl).

...