можно ли найти хэш md5 пароля без фактического наличия исходного пароля

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

-Если что-то неясно, просто напишите мне в комментариях, и я все исправлю.


person crazy_angel    schedule 01.06.2017    source источник
comment
это никак не связано с python, так как вы не показываете никакого кода. И да, непонятно. найти хэш md5? куда?   -  person Jean-François Fabre    schedule 01.06.2017


Ответы (1)


Вы правы в том, что вы можете подобрать хэш md5, чтобы получить исходный пароль, при условии, что исходный пароль и метод грубой силы пытаются хешировать одно и то же значение. Чтобы компенсировать это, системы паролей часто используют так называемую «соль», чтобы значительно усложнить задачу. (См. также: Что такое SALT и как его использовать? )

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

Первоначально алгоритмы хеширования были разработаны для получения некоторых входных данных и манипулирования ими, чтобы выходные данные алгоритма можно было использовать в качестве индекса в таблице значений. Цель состоит в том, чтобы иметь хэш 1:1 (в идеале это очень быстро, надеюсь, за постоянное время). Это означает, что при заданном входном значении x y = hash(x) должно быть таким, чтобы ТОЛЬКО x хешировалось до y. Другими словами, y1 = hash(x1) = hash(x) тогда и только тогда, когда x1 = x.

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

Одним из следствий этого является то, что если hash(x) изменяется значительно при изменении одного бита (как в случае hash(x+0x000001)), то это делает функцию сравнения намного быстрее (поскольку вы действительно только необходимо проверить биты более высокого порядка, чтобы определить, являются ли два объекта одинаковыми в среднем случае. Это означает, что вы не можете легко вычислить хэш последовательных элементов, просто перебирая хэши (т. функция hash(x) без предварительного наличия x).

person jwir3    schedule 01.06.2017