В криптографии коллизионная атака на криптографический хэш пытается найти два входа, производящих одинаковое значение хэша, т. е. коллизию хэша . Это отличается от атаки прообраза , где указывается конкретное целевое значение хэша.
Существует два типа атак столкновений:
В более общем плане:
Подобно тому, как симметричные шифры уязвимы для атак методом грубой силы , каждая криптографическая хэш-функция изначально уязвима для коллизий с использованием атаки дня рождения . Из-за проблемы дня рождения эти атаки намного быстрее, чем был бы метод грубой силы. Хэш из n бит может быть взломан за 2 n /2 временных шагов (оценки хэш-функции).
Математически, атака коллизии находит два разных сообщения m1 и m2 , таких что hash(m1) = hash(m2) . В классической атаке коллизии злоумышленник не контролирует содержимое ни одного из сообщений, но они произвольно выбираются алгоритмом.
Более эффективные атаки возможны при использовании криптоанализа для определенных хэш-функций. Когда обнаруживается атака коллизии и оказывается, что она быстрее атаки дня рождения, хэш-функция часто осуждается как «сломанная». Конкуренция хэш-функций NIST была в значительной степени вызвана опубликованными атаками коллизии против двух очень часто используемых хэш-функций, MD5 [1] и SHA-1 . Атаки коллизии против MD5 были усовершенствованы настолько, что по состоянию на 2007 год на обычном компьютере это занимало всего несколько секунд. [2] Коллизии хэшей, созданные таким образом, обычно имеют постоянную длину и в значительной степени неструктурированы, поэтому не могут напрямую применяться для атаки на распространенные форматы документов или протоколы.
Однако возможны обходные пути путем злоупотребления динамическими конструкциями, присутствующими во многих форматах. Таким образом, будут созданы два документа, которые будут максимально похожи, чтобы иметь одинаковое значение хэша. Один документ будет показан уполномоченному лицу для подписания, а затем подпись может быть скопирована в другой файл. Такой вредоносный документ будет содержать два разных сообщения в одном документе, но условно отображать одно или другое посредством незначительных изменений в файле:
Расширением атаки коллизии является атака коллизии выбранного префикса, которая специфична для хэш-функций Меркла–Дамгарда . В этом случае злоумышленник может выбрать два произвольно разных документа, а затем добавить разные вычисленные значения, которые приведут к тому, что все документы будут иметь одинаковое значение хэша. Эта атака обычно сложнее, хэш из n бит может быть взломан за 2 (n/2)+1 временных шагов, но она намного мощнее классической атаки коллизии.
Математически это можно выразить так: если заданы два разных префикса p 1 , p 2 , атака находит два суффикса s 1 и s 2 , такие что hash ( p 1 ∥ s 1 ) = hash ( p 2 ∥ s 2 ) (где ∥ — операция конкатенации ).
Более эффективные атаки также возможны при использовании криптоанализа для определенных хэш-функций. В 2007 году была обнаружена атака с коллизией выбранного префикса против MD5, требующая примерно 2 50 оценок функции MD5. В статье также показаны два сертификата X.509 для разных доменных имен с конфликтующими значениями хэша. Это означает, что центр сертификации может быть запрошен для подписания сертификата для одного домена, а затем этот сертификат (особенно его подпись) может быть использован для создания нового мошеннического сертификата, чтобы выдать себя за другой домен. [5]
Реальная коллизионная атака была опубликована в декабре 2008 года, когда группа исследователей безопасности опубликовала поддельный сертификат подписи X.509 , который можно было использовать для выдачи себя за центр сертификации , используя атаку коллизии префикса против хэш-функции MD5. Это означало, что злоумышленник мог выдать себя за любой защищенный SSL веб-сайт как за посредника , тем самым подрывая проверку сертификата, встроенную в каждый веб-браузер для защиты электронной коммерции . Мошеннический сертификат не мог быть отозван реальными органами, а также мог иметь произвольное поддельное время истечения срока действия. Несмотря на то, что в 2004 году было известно, что MD5 очень слаб, [1] центры сертификации все еще были готовы подписывать сертификаты, проверенные MD5, в декабре 2008 года, [6] и по крайней мере один сертификат подписи кода Microsoft все еще использовал MD5 в мае 2012 года.
Вредоносная программа Flame успешно использовала новую вариацию атаки с коллизией выбранного префикса для подделки подписи кода своих компонентов корневым сертификатом Microsoft, который по-прежнему использовал скомпрометированный алгоритм MD5. [7] [8]
В 2019 году исследователи обнаружили атаку коллизии выбранного префикса против SHA-1 со сложностью вычислений от 2 66,9 до 2 69,4 и стоимостью менее 100 000 долларов США. [9] [10] В 2020 году исследователи снизили сложность атаки коллизии выбранного префикса против SHA-1 до 2 63,4 . [11]
Многие приложения криптографических хэш-функций не полагаются на устойчивость к коллизиям , поэтому атаки коллизий не влияют на их безопасность. Например, HMAC не уязвимы. [12] Чтобы атака была полезной, злоумышленник должен контролировать входные данные хэш-функции.
Поскольку алгоритмы цифровой подписи не могут эффективно подписывать большой объем данных, большинство реализаций используют хэш-функцию для уменьшения («сжатия») объема данных, которые необходимо подписать, до постоянного размера. Схемы цифровой подписи часто становятся уязвимыми для коллизий хэшей, как только базовая хэш-функция практически сломана; такие методы, как рандомизированное (соленое) хэширование, позволят выиграть дополнительное время, требуя более жесткой атаки прообраза . [13]
Обычный сценарий атаки выглядит так:
В 2008 году исследователи использовали атаку коллизии выбранного префикса против MD5 , используя этот сценарий, чтобы создать мошеннический сертификат центра сертификации . Они создали две версии сертификата открытого ключа TLS , одна из которых выглядела легитимной и была представлена для подписи центром сертификации RapidSSL. Вторая версия, которая имела тот же хэш MD5, содержала флаги, которые сигнализируют веб-браузерам о необходимости принять ее как легитимный орган для выдачи произвольных других сертификатов. [14]
Hash flooding (также известный как HashDoS [15] ) — это атака типа «отказ в обслуживании» , которая использует хеш-коллизии для эксплуатации наихудшего случая (линейного зондирования) времени выполнения поиска в хеш-таблицах . [16] Первоначально она была описана в 2003 году. Чтобы выполнить такую атаку, злоумышленник отправляет на сервер несколько фрагментов данных, которые хешируются в одно и то же значение, а затем пытается заставить сервер выполнять медленный поиск. Поскольку основное внимание хеш-функций, используемых в хеш-таблицах, уделялось скорости, а не безопасности, были затронуты большинство основных языков программирования, [17] при этом новые уязвимости этого класса все еще обнаруживаются спустя десятилетие после первоначального представления. [16]
Чтобы предотвратить хэш-флуд, не делая хэш-функцию слишком сложной, вводятся новые ключевые хэш-функции с целью обеспечения безопасности, чтобы коллизии было трудно обнаружить, пока ключ неизвестен. Они могут быть медленнее предыдущих хэшей, но их все равно гораздо проще вычислять, чем криптографические хэши. По состоянию на 2021 год SipHash (2012) Жана-Филиппа Омассона и Дэниела Дж. Бернстайна является наиболее широко используемой хэш-функцией в этом классе. [18] (Неключевые «простые» хэши остаются безопасными для использования, пока хэш-таблица приложения не контролируется извне.)
Можно выполнить аналогичную атаку для заполнения фильтров Блума, используя атаку (частичного) прообраза. [19]
[...] мы можем найти коллизии для MD5 примерно за 2 24,1 сжатий для рекомендуемых IHV, что занимает около 6 секунд на 2,6 ГГц Pentium 4.
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь )Из-за способа использования хэш-функций в конструкции HMAC, методы, использованные в этих недавних атаках, не применимы