Есть ли какая-то разница между md5 и sha1 в этой ситуации? - PullRequest
3 голосов
/ 31 мая 2010

Известно, что

1.    if   ( md5(a)   == md5(b)   )
2.    then ( md5(a.z) == md5(b.z) )
3.    but  ( md5(z.a) != md5(z.b) )

, где точки объединяют строки.

РЕДАКТИРОВАТЬ ---

Здесь вы можете найти a и b:
http://www.mscs.dal.ca/~selinger/md5collision/

Проверьте эти ссылки:
hexpaste.com / qzNCBRYb / 1 - это a.md5(a)."kutykurutty"
hexpaste.com / mSXMl13A / 1 - это b.md5(b)."kutykurutty"

Они используют один и тот же хэш md5, но они разные.Но вы можете назвать эти строки a' и b', потому что они имеют одинаковые значения md5.

--- EDIT

Что происходит во втором ряду, еслимы изменим все md5 на sha1 ?Итак:

1.    if   ( sha1(c)   == sha1(d)   )
2.    then ( sha1(c.z) ?= sha1(d.z) )

Я не смог найти две разные строки с одинаковыми sha1 , поэтому я спрашиваю об этом.Есть ли еще какие-нибудь интересные «правила» о sha1 ?

Ответы [ 4 ]

1 голос
/ 15 июня 2010

SHA1 будет вести себя точно так же, как MD5 в этом сценарии.

Единственные две ссылки, которые я нашел, следующие:

  1. http://www.iaik.tugraz.at/content/research/krypto/sha1/MeaningfulCollisions.php
  2. http://www.schneier.com/blog/archives/2005/02/sha1_broken.html#c1654 (См. Комментарий Дэвида Шварца)

с веб-сайта IAIK -

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

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

1 голос
/ 31 мая 2010

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

В настоящее время считается, что SHA-1 криптографически безопасен, что означает, что никто не придумал способ генерирования коллизий SHA-1. Это не значит, что он действительно безопасен и генерация коллизий невозможна - возможно, существует еще не обнаруженная уязвимость. Даже если существует уязвимость, маловероятно, что одни и те же строки будут одновременно образовывать коллизию как MD5, так и SHA-1.

0 голосов
/ 15 июня 2010

Ваш пример неверен по моему мнению. Позвольте мне показать вам, почему:

md5(a) == md5(b)

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

a = b

Когда вы теперь объедините обе строки со строкой z, у вас будет a.z = b.z и их md5-хэши будут одинаковыми, потому что они имеют одинаковый ввод строки

md5(a.z) == md5(b.z)

и хэш md5 в третий раз будет равен, в то время как оба строковых ввода одинаковы

md5(z.a) == md5(z.b)

И это верно для md5 и любого другого алгоритма хеширования, хотя они должны быть детерминированными и не иметь побочных эффектов.


Так что ваш пример будет иметь смысл только тогда, когда z - это специальная строка, которая приведет к столкновению. И поэтому поведение md5 и sha1 будет точно таким же: Добавленная строка столкновения приведет к столкновению, но с префиксом будут разные хэши (но есть действительно очень малая вероятность того, что вы найдете строку столкновения, которая будет предварительно добавлена ​​и добавит результат при столкновении, но ни одного примера пока не найдено в действительности) Вы только не нашли другую строку с тем же sha1, потому что столкновения труднее найти, как объяснили люди до меня.

0 голосов
/ 15 июня 2010

Sha1 не так легко взломать, как md5, но они нашли некоторые уязвимости в нем еще в '05, я считаю.

...