Назначение или использование MD5

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


person Siddiqui    schedule 15.04.2010    source источник
comment
Я вообще не поклонник ответов по ссылкам, но: en.wikipedia.org/wiki/Cryptographic_hash_function #Applications   -  person Frank Farmer    schedule 15.04.2010
comment
Если сложить два числа x и y, получится результат. Невозможно определить, что это были за x и y, просто взглянув на результат. И все же дополнение полезно.   -  person Daniel Earwicker    schedule 15.04.2010
comment
тогда может быть вероятность, что мы добавим 5 + 2 или 4 + 3. В обоих случаях ответ будет одинаковым, но x и y разные.   -  person Siddiqui    schedule 15.04.2010
comment
Пример Дэниела, вероятно, был выбран, чтобы сказать, что полезность не может быть определена по тому факту, что алгоритм не имеет обратной функции. Алгоритм хеширования по определению должен давать разные результаты для разных входных данных. Конечно, коллизии существуют, но они должны быть редкими, иначе алгоритм хеширования неэффективен.   -  person ereOn    schedule 15.04.2010
comment
да .. но все же .. добавление полезно.   -  person Rosdi Kasim    schedule 15.04.2010


Ответы (6)


Например, для хранения данных сохраните в базе данных.

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

Например:

password = 123  
md5(123) === "202cb962ac59075b964b07152d234b70"

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

person Robert    schedule 15.04.2010
comment
+1. Однако обратите внимание, что при хранении паролей следует добавить дополнительный случайный префикс при вычислении хэша и сохранить его вместе с хешем. Таким образом, пользователи, выбирающие плохие пароли, не пострадают от конфликтов хеширования. Это широко известно как соль. Например, если два пользователя выбирают секретный пароль в качестве пароля, хеш-код будет таким же. Взломщик, имеющий доступ к набору паролей, может искать эти общие хэши и, таким образом, обнаруживать пароль, который их породил. Соль делает крайне маловероятным, что один и тот же пароль будет давать один и тот же хэш для разных пользователей. - person Marcelo Cantos; 15.04.2010
comment
См. Также этот другой вопрос: stackoverflow.com / questions / 536584 / - person Georg Schölly; 15.04.2010
comment
Имейте в виду, что пароли не следует хранить в виде одного хеша MD5 (или любого другого хеша), поскольку операции с одним хешем слишком быстры, чтобы легко противостоять грубому форсированию: chargen.matasano.com/chargen/ 2007/9/7 / - person Josh Kelley; 01.06.2010

Расшифровываемый файл обладает тем свойством, что его размер всегда не меньше размера исходного файла, а хэш намного меньше.

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

Существует множество причин не хранить файл в зашифрованном виде или в виде обычного текста:

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

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

person Georg Schölly    schedule 15.04.2010
comment
+1. Вы уверены в том, что заявление по крайней мере такое же масштабное? Разве мы не можем представить алгоритм шифрования, использующий что-то вроде метода сжатия? (Я говорю не о шифровании и сжатии, а о гипотетическом алгоритме, который может производить меньшие зашифрованные данные). Просто интересуюсь. - person ereOn; 15.04.2010
comment
Чтобы получить значимое сжатие, вам нужно сначала сжать данные, а затем зашифровать их. (Почему? Потому что хорошо зашифрованные данные по сути случайны, а сжатие зависит от шаблонов в данных, поэтому оно не работает со случайными данными.) В этом случае зашифрованные данные представляют собой сжатую форму исходных данных и утверждения Георга. что размер зашифрованных данных должен быть не меньше размера зашифрованных данных (которые, помните, теперь представляют собой сжатую форму). - person Dave Sherohman; 15.04.2010
comment
@ereOn: Это будет алгоритм сжатия. Но представьте, что у вас уже есть сжатые входные данные, в этом случае вы не можете сжать их еще больше. (Если бы это было возможно, вы могли бы сжимать данные бесконечно.) - person Georg Schölly; 15.04.2010
comment
Да, это имеет смысл. Спасибо вам обоим ;) - person ereOn; 15.04.2010
comment
Фактически не существует такой вещи, как обратимая функция сжатия - в среднем, вывод каждой обратимой функции также по крайней мере такой же большой, как исходный файл. Алгоритм сжатия на самом деле является алгоритмом расширения с некоторыми интересными случаями сбоя :) - person caf; 15.04.2010
comment
@caf: Это определение недавно почему-то появилось на comp.lang.c. Было ли это оригинально у вас? - person Keith Thompson; 21.06.2016
comment
@KeithThompson: Нет, я перефразировал то, что слышал много лет назад. Боюсь, я мало что помню об первоисточнике - возможно, он был на comp.compression? - person caf; 22.06.2016

  • Он позволяет вам определить, совпадают ли данные, которые у вас есть (например, введенный пароль), с некоторыми другими данными, которые являются секретными (например, правильный пароль), не требуя доступа к секретным данным. Другими словами, его можно использовать, чтобы определить, "является ли этот введенный пользователем пароль правильным?" сохраняя при этом правильный пароль в секрете. (Обратите внимание, что существуют более сильные методы хеширования, которые в наши дни следует использовать вместо md5 для этой цели, такие как sha * и bcrypt. С современным оборудованием довольно легко перебросить миллионы паролей в секунду в хэш md5, пока вы не найдите тот, который соответствует правильному паролю.)

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

person Dave Sherohman    schedule 15.04.2010

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

person sharptooth    schedule 15.04.2010
comment
Хорошие хеш-функции, такие как MD5, кажутся мне немного устаревшими. - person Georg Schölly; 15.04.2010
comment
@Georg: MD5 был взломан, поэтому его не следует использовать в сценариях, когда кто-то захочет подорвать его. В остальном все еще хорошо. - person sharptooth; 15.04.2010
comment
Не совсем. DSP (например, графические процессоры вашей видеокарты) могут мгновенно перебрать md5, потому что его слишком просто вычислить. Код в bvernoux.free.fr/md5/index.php, например, утверждает, что обрабатывает 200 миллионов хэшей md5 в секунду на обычном потребительском оборудовании (GeForce 8800GT и Core2Duo E6750 с использованием одного ядра). Его настолько легко подобрать перебором, что больше нет смысла проводить алгоритмические атаки против него. - person Dave Sherohman; 15.04.2010
comment
@ Дэйв Шерохман: Не знал об этом. Тем не менее, это не мешает использовать MD5 в сценариях, когда его некому подорвать. - person sharptooth; 15.04.2010
comment
@sharptooth: Если некому его подорвать, значит, вы недостаточно параноик;) - person Piskvor left the building; 18.08.2010
comment
@Piskvor: Серьезно, я не имел в виду случаи, когда защищенные данные настолько бесполезны, что никто не хочет их взламывать. Я имел в виду сценарии, в которых нет злоумышленника - например, этот stackoverflow.com/questions/862346/ - person sharptooth; 18.08.2010
comment
@sharptooth: Понятно. Я лично выбрал бы SHA-256 - не намного медленнее; но я думаю, что MD5 там будет достаточно. - person Piskvor left the building; 18.08.2010

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

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

person Community    schedule 01.06.2010

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

У этих функций есть три свойства безопасности: 1) кому-то трудно обнаружить фактическое сообщение, когда оно имеет только h (m). 2) Для сообщения m и его хеш-функции трудно найти другое сообщение с таким же хеш-значением. 3) Наконец, трудно найти разным сообщениям m1, m2 с одинаковым значением хеш-функции.

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

person thrylos    schedule 11.10.2012