Демонстрация/пример столкновения SHA1

Этот вопрос похож на этот, но он ссылается только на демки столкновения MD5.

Существуют ли какие-либо фактические пары столкновений SHA1 известных сообщений до сих пор?

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

Выполнение некоторых поисковых запросов Google только показало ошеломительные столкновения MD5/SHA0 и некоторые намеки на подход к созданию SHA1-коллизий, но я не мог получить какие-либо примеры.

Ответ 1

Первое известное столкновение теперь опубликовано в https://shattered.it/

Ответ 2

По состоянию на 23 февраля 2017 года этот ответ больше не является точным.

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

Пока неизвестно, что произошло с SHA-1. Прямо сейчас:

  • Есть несколько столкновений по сокращенным версиям SHA-1 с менее чем 80 раундами стандартного SHA-1.
  • Был описан алгоритм, который должен получить SHA-1-столкновение с вычислительным усилием, примерно эквивалентным 2 63 вызовам SHA-1 на небольшие сообщения; что намного лучше, чем общие алгоритмы (в среднем требующие 2 80 invocations), но которые все еще довольно велики и этот алгоритм еще не запущен.

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

Теоретические атаки основаны на некоторых предположениях, которые могут оказаться слегка ложными; например, атака на MD5 на самом деле немного быстрее, чем ожидалось (в какой-то момент есть свойство, которое должно быть выполнено с теоретической вероятностью 2 -28 но на практике это больше похоже на 2 -27.7 т.е. атака на 20% быстрее, чем прогнозировалось). По-прежнему считается, что теоретическая атака верна и сложность "довольно точная".

Ответ 3

Блог безопасности Google описывает первый публичный, преднамеренный конфликт SHA-1 здесь: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

Прямые ссылки на 2 PDF файла с тем же SHA-1 (с сайта посвященного этому обнаружению):

Опять же, Марк Стивенс участвовал вместе с CWI Amsterdam и некоторыми сотрудниками Google, но на этот раз для полномасштабного SHA-1 на двух построенных PDF файлах.

Стивенс также отмечает, что из-за SHA-1 Merkle- Damgård construction, оба двух PDF файла могут быть расширены (добавлены) с теми же произвольными данными, что и для хэширования более длинных версий для одного и того же дайджеста.

Google, по всей видимости, опубликует сопутствующий исходный код через 90 дней (23 февраля 2017 года), дав поставщикам системного ПО некоторое время обновлять свои материалы.

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

Линус Торвальдс опубликовал выражение о git, отметив, что они будут переноситься на новые хэши совместимым способом, но это потребуется время.

Кстати, "разрушенная" демонстрация столкновения не влияет на git (без изменений), потому что она использует SHA-1 следующим образом:

sha1("blob " + <size in octets as text> + "\0" + <contents>)

Вы можете получить хэш git с помощью git hash-object <file path>, даже если файл не находится в git.

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

- ПРЕДЫДУЩАЯ... -

A 76-раундное столкновение было найдено Марк Стивенс.

Криптограф Жан-Филипп Аумассон, соавтор BLAKE и SipHash и инициатором Конкурс хищения пароля (PHC), догадывается о столкновении SHA-1 в полном объеме 80 раундов будет найдено к 2020 году.

Согласно текущие исследования Марка Стивенса и др. опубликованном в октябре 2015 г.,

... мы оцениваем стоимость столкновений SHA-1 сегодня (т.е. падение 2015) между 75K $и 120K $ арендуя облачные вычисления Amazon EC2 в течение нескольких месяцев. Напротив, эксперт по вопросам безопасности Брюс Шнайер ранее Стоимость столкновения SHA-1 составит ~ 173 тыс. Долл. США к 2018 году.

Они также описывают атаку столкновения для функции сжатия SHA-1.

Ответ 4

Существует пример в столкновении с поиском на SHA1 от Wang, Yin and Yu, с 2005 года, но только для ослабления, 58 -ограниченная версия SHA-1. (Полный, официальный SHA-1 выполняет 80 раундов.)

3 A collision example for 58-step SHA1

         h₁ = compress(h₀,M₀) = compress(h₀,M'₀)
 _____________________________________________________
   h₀:  67452301 efcdab89 98badcfe 10325476 c3d2e1f0
 _____________________________________________________
   M₀:  132b5ab6 a115775f 5bfddd6b 4dc470eb
        0637938a 6cceb733 0c86a386 68080139
        534047a4 a42fc29a 06085121 a3131f73
        ad5da5cf 13375402 40bdc7c2 d5a839e2
 _____________________________________________________
   M'₀: 332b5ab6 c115776d 3bfddd28 6dc470ab
        e63793c8 0cceb731 8c86a387 68080119
        534047a7 e42fc2c8 46085161 43131f21
        0d5da5cf 93375442 60bdc7c3 f5a83982
 _____________________________________________________
   h₁:  9768e739 b662af82 a0137d3e 918747cf c8ceb7d4
 _____________________________________________________

Table 2: A collision of SHA1 reduced to 58 steps. The two
messages that collide are M₀ and M'₀. Note that padding
rules were not applied to the messages. 

Ответ 5

Не точно столкновение SHA1, но есть столкновение PBKDF2-HMAC-SHA1 код аутентификации дайджеста.

Например, PBKDF2 (SHA1, пароль, соль, итерации, dkLen) двух паролей plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd и eBkXQTfuBqp\'cTcar&g*, солей hunter2, 4 итераций, обеспечивают одинаковое значение (35d1c8f259129dc800ec8e073bb68f995424619c для dkLen 20).

На самом деле тривиально найти такие столкновения для строк длиной более 64 байтов.

Другой пример столкновения (Python3):

>>> import hashlib, binascii
>>> def pbkdf2sha1hex(x, salt, iters):
...     h = hashlib.pbkdf2_hmac('sha1', x, salt, iters)
...     return binascii.hexlify(h)
>>> pbkdf2sha1hex(b'http://stackoverflow.com/info/3475648/sha1-collision-demo-example/31136714', b'NaCl', 1000000)
b'20177527e04e05d5e7b448c1ab2b872f86831d0b'
>>> pbkdf2sha1hex(b'\x8c\xbf8\x94\xbc\xf4\xbe\x90xT,r\xbc\x03\xd1\xed\xd9\xea\xfb\x9f', b'NaCl', 1000000)
b'20177527e04e05d5e7b448c1ab2b872f86831d0b'

Обратите внимание, что одна и та же "проблема" относится к PBKDF2-HMAC-SHA256:

>>> h1 = pbkdf2_hmac('sha256', b'http://stackoverflow.com/info/3475648/sha1-collision-demo-example/31136714', b'NaCl', 1000000)
b"\xcf\xc5\xee\x15=\r\x0b\x0e\x89r\x9b\xe1\xb7'+\xa4'o\x98kn++u\x12\xec\xd9\xec\xea\xebL\xb7"
>>> h2 = pbkdf2_hmac('sha256', b'.\x83\xb0D\x93D\x9f\x162\xf3\xd4x\xb6\x1a\x9f-\x1f\xdb\xdc\xa4\x8f\xb3\x95Y5\xea\x99*\x97\x00V\x81', b'NaCl', 1000000)
>>> h1 == h2
True

Все происходит, потому что из определения PBKDF2 для длинных строк оно хранится:
PBKDF2(hashalgo, s, ...) == PBKDF2(hashalgo, hashalgo(s), ...).

Дополнительная информация, например. здесь: https://mathiasbynens.be/notes/pbkdf2-hmac