Как невозможно "расшифровать" хэш MD5?

Возможный дубликат:
Каким образом значения хеша MD5 не являются обратимыми?

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

Итак, как это возможно?

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

Ответ 1

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

Вот простой пример: представьте себе алгоритм вычисления хэша 10-значного числа. Алгоритм "возвращает последние 2 цифры". Если я возьму хэш из 8023798734, я получаю 34, но если все, что у вас есть, это 34, у вас не будет возможности сказать, что такое исходный номер, потому что алгоритм хэширования отбросил 8 цифр информации. Он аналогичен MD5, за исключением того, что хеш вычисляется с помощью сложной процедуры, а не просто отрубает часть данных.

Итак, как один хэш может быть лучше другого? С одной стороны, различные алгоритмы хеширования могут быть более или менее устойчивыми к столкновениям (когда два входа дают одинаковый выход). Вероятность столкновения обратно зависит от количества возможных хэш-выходов. Коллизии являются нежелательной особенностью хэшей, потому что, если ваши данные изменяются, вы хотите, чтобы хэш тоже изменился, поэтому одним из способов получить лучший алгоритм хэширования является использование хеша с более возможными выходами. В приведенном выше примере цифр взятие последних 4 цифр вместо двух последних цифр уменьшает вероятность столкновения с данным хешем (технически называемым прообразом) до 1 в 10000 вместо 1 в 100, поэтому более вероятно, что все 10-значные цифры в любом наборе, которые у вас есть, будут иметь разные значения хеширования.

Также существует проблема криптографической безопасности. Если вы хотите использовать хэш, чтобы убедиться, что некоторые данные не подделаны, желательно, чтобы тот, кто делает фальсификацию, не может предсказать, какие входы будут выдавать данный вывод. Если бы они могли, они могли бы изменять входные данные таким образом, чтобы выход (хэш) оставался неизменным. Вернемся к примеру цифр, позвольте сказать, что я отправлю вам номер 1879483129, и критически важно, чтобы это число доходило до вас без изменений. Я могу позвонить вам и сообщить вам хэш номера, который будет 29, но так как алгоритм "последние 2 цифры" не является криптографически безопасным, гнусный хакер может изменить номер в пути до, скажем, 5555555529, и вы бы Не знаю разницы.

Было показано, что MD5 не криптографически защищенSHA-1 также скомпрометирован). Это означает, что можно найти разные входы, которые соответствуют любому заданному выходу. Он по-прежнему является прекрасным алгоритмом для защиты от случайных бит-флип и т.п., но если есть вероятность, что кто-то захочет умышленно испортить ваши данные, вы должны действительно использовать что-то более безопасное, например SHA-256 или выше, возможно как часть схемы HMAC.

Ответ 2

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

Вы можете превратить корову в гамбургер, но вы не можете превратить гамбургер в корову.

Преобразование уменьшает данные, которые существуют, уничтожая его, и что данные не могут быть восстановлены.

Ответ 3

Здесь параллель:

Добавьте возраст всех членов вашей семьи. Сохраняйте только две последние цифры.

Теперь скажите мне, что каждый возраст основан на этом одном числе.

Ответ 4

Подумайте об этом:

У меня есть числовая строка, скажем, "12345678".

У меня есть алгоритм хеширования, он просто возвращает сумму всех одиночных чисел, пусть назовет его f()

so, f ( "12345678" ) = 1 + 2+.. + 8 = 36.

Тогда вопрос:

известно f (x) = 36, можно получить исходное значение x?

Мы не можем, так как f() является алгоритмом, вызывает потерю информации.

MD5 - хэш-алгоритм, подобный f(), но гораздо более сложный.

Ответ 5

Вот простой ответ...

Существует конечное число хеш-значений и бесконечное количество значений хэшируемого, открытого текста.

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

Ответ 6

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

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

Ответ 7

Хмм, не груб, но мне кажется, что все ответы о "меньшей информации, выходящей, чем входить", пропущены.

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

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

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

Ответ 8

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

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

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

Для MD5 размер хэша составляет 128 бит. 128-битное пространство, перефразируя Дугласа Адамса, большое. Действительно большой. Ты просто не поверишь, насколько сильно он очень велик. Количество возможных хэшей составляет 2 128 или 3.40282367 × 10 38. Это 34, за которыми следуют 37 нулей! Если бы вы могли рассчитывать до триллиона за одну секунду, вам все равно понадобилось бы 10 миллиардов миллион, чтобы пересчитать все 128-битные номера.

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

Ответ 9

Рассмотрим следующую функцию: f (x) = xx. Теперь, учитывая, что вы знаете f (x) = 25, что такое x? Ну, ответ может быть 5 или ответ может быть -5. Вы не можете восстановить входные данные в f, потому что существует некоторое значение в диапазоне f, так что более одного элемента домена f сопоставляется с этим значением под f. Следовательно, функция f не обратима. Эта же концепция применима к MD5; есть несколько входов в алгоритм MD5, который, несмотря на то, что он имеет разные входы, дает в результате одно и то же значение хэш-функции. Другими словами, алгоритм MD5, как f (x) = xx, не является взаимно однозначным и, следовательно, не является обратимой функцией.

Однако это не означает, что вы не можете восстановить ввод MD5. Это просто означает, что вы не можете восстановить ввод и MD5 со 100% уверенностью. Чтобы сделать это более конкретным, взглянем еще раз на функцию f (x) = x * x. Теперь, что, если бы я сказал вам, что для любого заданного входа f вероятность его положительного составляет 99%? В этом случае вы можете очень хорошо догадаться, что хеш из 25 исходил от значения 5, а не -5. Это, действительно, то, как люди могут нарушать хеш-функции (включая MD5, который, оказывается, не очень хорошая криптографическая хеш-функция). Когда дело доходит до паролей, есть определенные пароли, которые используются гораздо чаще, чем другие пароли. Все, что вам нужно сделать, это взять MD5 этого пароля и сравнить его с некоторым хэшем, и если они совпадут, то довольно разумно предположить, что он пришел с этого пароля.

Вам также может быть интересно узнать о индивидуальные функции, Инъективные функции, криптографические хэш-функции, MD5, SHA1, и Don ' t Секреты хаша из блога безопасности Benlog.

Ответ 10

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

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

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

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

Не случайно CRC-32 можно вычислить очень быстро, MD5 занимает значительно больше времени, а SHA-1 занимает несколько больше времени. Как модели затрат, так и модели доверия сложны.

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

Ответ 11

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

Ответ 12

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

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

Если в конце концов вы все еще не уверены, попробуйте сами, чтобы отменить шаги MD5 или любую другую криптографическую хеш-функцию; -)

Ответ 13

Энтропия строки увеличивается, так как некоторая информация теряется во время процесса хэширования. Это означает, что для восстановления исходной строки недостаточно информации.