В конце 2006 г. очередного масштабного успеха в части атак на алгоритм MD5 и его приложения добились Стивенс, Ленстра и де Вегер. В ряде своих работ, вышедших в 2006-2007 гг. (в частности, в работах [1-3]), они предложили методику поиска коллизий для сообщений, префиксы которых имеют различающиеся хэш-значения (коллизия с выбранным префиксом – chosen-prefix collision). В качестве практического примера применения данной методики ее авторы разработали способ конструирования пар сертификатов X.509, принадлежащих различным пользователям и имеющих различающиеся значения открытых ключей, но при этом дающих коллизию.
Во второй и третьей частях статьи мы рассматривали различные варианты «расширения» коллизии MD5, включая предложенный в 2005 г. Ленстрой, Ванг и де Вегером метод конструирования пары сертификатов с различными значениями модулей открытых ключей, но с эквивалентными хэш-значениями. Все эти методы основывались на абстрактной коллизии, например, «двухстороннее расширение»:
MD5(t || x’ || q) = MD5(t || y’ || q),
в основе которого лежала двухблочная коллизия x’ и y’.
Двухблочная коллизия возникала при использовании нестандартного вектора инициализации – MD5(t). Тем не менее, префикс сообщения t был эквивалентен для обоих сообщений, что существенно сужало возможности по практическому использованию коллизий.
Принципиальное отличие коллизий с выбранным префиксом состоит в том, что начальные блоки дающих коллизию сообщений (префиксы) могут быть полностью различными: методика поиска коллизий с выбранным префиксом позволяет для любых сообщений x и y найти такие последовательности q1 и q2, что [1] (см. рис. 1):
MD5(x || q1) = MD5(y || q2.).
Такая коллизия существенно более универсальна и обладает несравнимо большими возможностями по применению на практике.
В [2] методика конструирования коллизии с выбранным префиксом описана подробно; ее основные этапы состоят в следующем (см. рис. 2):
Таким образом, значения q1 и q2 состоят из 96-битовых дополнений и восьми пар блоков, т. е. полный размер каждого из дополнений составляет 4192 битов. Трудоемкость поиска последовательностей q1 и q2 определяется, в основном, трудоемкостью поиска 96-битовых дополнений и составляет 250-252 операций. Авторы атаки предложили также ее вариант с эквивалентной трудоемкостью, в котором не требуется наличие 96-битовых дополнений, но количество пар дополнительных блоков увеличено до 14, что сужает возможности практического применения атаки [2].
Стивенс, Ленстра и де Вегер применили данную методику для создания пары сертификатов X.509 (которая будет рассмотрена далее), для чего ими были применены распределенные вычисления с использованием до 1200 компьютеров в течение 6 месяцев. При этом, в [2] сказано, что этот поиск шел не по оптимальному пути и, с использованием накопленного опыта, аналогичную атаку можно выполнить примерно за 2 месяца при наличии эквивалентных ресурсов.
Рассмотрим способ конструирования пары сертификатов с эквивалентными и верными электронными подписями, но с различными уникальными именами пользователей, основанный на коллизии с выбранным префиксом и подробно описанный в [2] и [3]. Последовательность создания пары сертификатов состоит из следующих шагов (см. рис. 3):
Отметим, что последнее поле является композитным и, помимо собственно имени пользователя, может содержать дополнительную информацию, в частности, об организации, в которой работает пользователь. Авторы атаки при создании первой пары сертификатов по своей методике присвоили им имена «Arjen K. Lenstra» и «Marc Stevens», после чего для обеспечения выравнивания согласно изложенному выше требованию использовали поле организации, записав в него, соответственно, значения «Collisionairs» и «Collision Factory».
Заполненные поля двух сертификатов (до поля «Модуль открытого ключа») представляют собой сообщения-префиксы x и y.
n1 = Sa || Sb || B;
n2 = Sa’ || Sb’ || B,
где:
Структура модулей n1 и n2 приведена на рис. 4.
Коллизия достигается с помощью вычисления пар значений (Sa, Sa’) и (Sb, Sb’), которые согласно описанной выше схеме поиска коллизии с выбранным префиксом представляют собой 4192-битовые последовательности q1 и q2:
q1 = Sa || Sb;
q2 = Sa’ || Sb’.
После данных значений сертификаты могут быть дополнены только эквивалентными последовательностями. Однако, необходимо сформировать корректные значения модулей n1 и n2, для чего выполняется (аналогично описанному в [4] поиску значений b, но с увеличенной размерностью) поиск такого 4000-битового значенияB, которое давало бы в результате два корректных (разлагаемых на произведение больших простых чисел) модуля размером 8192 битов каждый:
n1 = (Sa *24096 + Sb) * 24000 + B;
n2 = (Sa’ *24096 + Sb’) * 24000 + B.
После этого формирование пары сертификатов завершено. Любой из сертификатов может быть обработан алгоритмом хэширования MD5 и подписан; вычисленная для любого из пары сертификатов электронная подпись будет верна и для второго сертификата. При этом сертификаты будут принадлежать различным пользователям, что существенно усилит результативность атаки и позволит, в частности, подделывать подпись владельца парного сертификата. Авторы атаки, однако, отмечали в [2], что им не удалось найти доказуемый эффективный сценарий атаки с использованием такой пары сертификатов, поскольку для ее реализации злоумышленнику требуется контроль над сертификационным центром.
Отметим, что методика является достаточно гибкой и позволяет создавать другие варианты пар сертификатов, например, поля срока действия сертификатов также могут быть заполнены различной информацией – т. е. созданные сертификаты будут обладать различным сроком действия [2].
Наиболее эффектным применение коллизий с выбранным префиксом выглядит именно в части создания пар сертификатов, что не исключает любые другие из описанных ранее возможностей (например, описанные в [5] варианты использования коллизии в качестве переключателя функционала или содержимого программы или документа). Некоторые дополнительные сценарии атак с использованием коллизий с выбранным префиксом описаны, в частности, в [6].
Литература