Я провел предварительное исследование в области дайджестов сообщений. В частности, коллизионные атаки криптографических хэш-функций, таких как MD5 и SHA-1, такие как Пример PostScript и дубликат сертификата X.509.
Из того, что я могу сказать в случае атаки postscript, определенные данные были сгенерированы и встроены в заголовок файла postscript (который игнорируется во время рендеринга), что привело внутреннее состояние md5 к такому состоянию, что измененная формулировка документа приведет к окончательному значению MD, эквивалентному исходному файлу postscript. В X.509 использовался аналогичный подход, когда данные вводились в разделы сертификата с комментариями / пробелами.
Хорошо, вот мой вопрос, и я не могу найти никого, кто задает этот вопрос:
Почему длина ТОЛЬКО потребляемых данных не добавляется в качестве последнего блока к вычислению MD?
В случае X.509 - Почему пробелы и комментарии учитываются как часть MD?
Разве простого процесса, такого как один из следующих, не будет достаточно, чтобы разрешить предлагаемые атаки на коллизию:
- MD (M + | M |) = xyz
- MD (M + | M | + | M | * magicseed_0 + ... + | M | * magicseed_n) = xyz
где :
- М: это сообщение
- | M | : размер сообщения
- MD: функция дайджеста сообщения (например: md5, sha, whirlpool и т. Д.)
- xyz: это пара значений фактического профиля сообщения для сообщения M и | M |. ‹M, | M |›
- magicseed_ {i}: набор случайных значений, сгенерированных с помощью seed на основе внутреннего состояния до добавления размера.
Этот метод должен работать, так как на сегодняшний день все подобные атаки столкновения основываются на добавлении дополнительных данных в исходное сообщение.
Короче говоря, уровень сложности, связанный с генерацией сообщения о столкновении, такой, что:
- Он не только генерирует одинаковые MD
- Но также понятен / разборчив / совместим
- и того же размера, что и исходное сообщение,
чрезвычайно сложно, если не почти невозможно. Обсуждался ли когда-нибудь этот подход? Любые ссылки на статьи и т. Д. Были бы хороши.
Дополнительный вопрос: какова нижняя граница коллизий сообщений общей длины для хэш-функции H, выбранной случайным образом из U, где U - это набор универсальных хеш-функций?
Это 1 / N (где N равно 2 ^ (| M |)) или больше? Если он больше, это означает, что существует более 1 сообщения длиной N, которое будет отображаться в одно и то же значение MD для данного H.
Если это так, насколько практично найти эти другие сообщения? bruteforce будет O (2 ^ N), есть ли метод временной сложности меньше, чем bruteforce?