HAIFA (англ. HAsh Iterative FrAmework) — итеративный метод построения криптографичеких хеш-функций, являющийся усовершенствованием классической структуры Мекрла — Дамгора.
Был предложен в 2007 году в целях повышения устойчивость ко многим атакам и поддержки возможности получать хеш-суммы различных длин. На основе алгоритма были разработаны такие хеш-функции, как BLAKE[1] и SHAvite-3[2].
Создателями алгоритма являются Эли Бихам и Ор Дункельман — израильские криптографы из Хайфского университета. Бихам — ученик Ади Шамира, разработавшего большое количество новых криптографических алгоритмов, в том числе взлома существующих; Дункельман — коллега Шамира по одному из проектов, а в дальнейшем продолжил свои исследования самостоятельно[3].
Структура Меркла — Дамгора долгое время считалась устойчивой к атаке на нахождение второго прообраза, пока в 1999 году профессор Принстонского университета Ричард Дин не доказал, что это предположение неверно для длинных сообщений, если при данной функции сжатия возможно легко находить фиксированные точки последовательности. Также на структуру Меркла — Дамгора могла быть успешно произведена атака множественный коллизий и хэрдинг-атака (атака по известному префиксу)[4][5].
Структура Меркла — Дамгора представляет собой следующий алгоритм:
Есть сообщение , разбитое на несколько частей: . Есть некоторое начальное значение — и некоторая функция , которая подсчитывает промежуточное представление хеш-функции определённым образом[5]:
Далее итеративно:
В основу нового алгоритма HAIFA легло добавление количества захешированных бит и некоторого случайного значения. Вместо обычной функции сжатия, которую теперь можно обозначить следующим образом[4]:
используется:
внутреннее же представление подсчитывается (в соответствии с введенными выше обозначениями):
Чтобы захешировать сообщение, нужно выполнить следующие шаги:
В HAIFA сообщение дополняется единицей, необходимым количеством нулей, длиной сообщения в битах и размером выходного блока . Т.е добавляем последовательность (количество нулей в данном случае должно быть таким, чтобы [4] , где , — количество единиц и нулей, — размер блока:
Хеширование сообщения, дополненного размером выходного блока, избавляет от проблемы нахождения коллизий, так как если два сообщения и хешируются с размерами блока и , то от коллизий спасает именно последний блок. В свою очередь, добавлением = 0 в самом последнем блоке, создаётся сигнал для обозначения последнего и дополняющего блока[4].
Возможность дополнения исходного сообщения в данном алгоритме позволяет обрезать захешированное, тем самым изменяя размер конечного хеша[4].
Часто на практике требуются различные длины итогового хеша (как, например, сделано для SHA-256, у которого существуют две урезанные версии), поэтому в данной структуре также была реализована возможность варьировать его длину с помощью специального алгоритма (чтобы сохранить стойкость к атаке на второй прообраз, нельзя использовать очевидное решение взятия бит из итогового хеша).
Доказательство того, что HAIFA устойчив к коллизиям, если функция сжатия устойчива к коллизиям, проводится аналогично доказательству для Меркла — Дамгора[4].
Количество захешированных бит значительно затрудняет поиск и использование фиксированных точек. Даже найдя такие и , для которых выполняется , нельзя бесконечно размножать эти значения в данном алгоритме, потому что количество битов будет все время меняться[4].
Соль ( ), как и , тоже вносит свой вклад в стойкость алгоритма[4]:
Ниже приведены оценки стойкости HAIFA к различным типам атак.
В атаке на второй прообраз ищется такое значение , для которого , то есть хеш от равен какому-либо промежуточному значению в итерациях, и далее соединить часть оставшегося сообщения (находящуюся справа от ) с нашим угаданным . Однако алгоритм был признан устойчивым к этой атаке, так как в усовершенствованном варианте в конец сообщения дописывался его размер. Ричард Дин же в своей работе указал совершенно новый способ атаки, основанный на предположении о том, что для данной функции легко найти фиксированные точки (по определению фиксированная точка — та, для которой выполняется соотношение ). В его алгоритме недостающая длина сообщения восполнялась добавлением множества фиксированных точек, то есть мы могли достаточным количеством повторений значения дополнить нашу длину до нужной.
В данном случае HAIFA защищает от атаки, основанной на фиксированных точках, так как наличие соли и поля, содержащего количество захешированных бит сводит к минимуму вероятность появления повторения значений сжимающей функции[4].
Для множественных коллизий французский криптограф Антуан Жу[en] описал возможность нахождения сообщений, имеющих один и тот же хеш. Его работа базируется на факте, что возможно найти таких одноблочных коллизий, в которых , и далее конструировать различные сообщения, всего вариантов, выбирая на каждом из шагов либо сообщение , либо .
HAIFA, несмотря на сложную структуру, не гарантирует нулевой вероятности удачного прохождения атаки на множественные коллизии. После вышеописанных модификаций, сделанных над алгоритмом Меркла — Дамгора, сложность нахождения коллизий для каждого блока не изменилась, но так как появилось случайное подмешанное значение, атакующий не может заранее перебирать варианты этих коллизий, не зная случайного значения. Расчеты переходят в онлайн режим[4].
Хэрдинг атака основана на том, что атакующий пытается найти такой суффикс по заданному префиксу, который будет давать нужное значение хеша.
Доказано, что на HAIFA невозможно провести первую фазу хэрдинг атаки (построение дерева решений), пока неизвестно значение соли. То есть тот brute-force, который излагался выше, уже провести нельзя. Условие успешного отражения атаки — длина подмешиваемого сообщения, если желаемая сложность атаки ставится на уровне , должна быть не менее символов. Если этого правила не придерживаться, то возможны некоторые предварительные расчеты, приводящие к взлому алгоритма. Если значение соли все же было найдено, то потребуется некоторое время для поиска нужного места в сообщении в силу наличия поля [4].
Тип атаки | Идеальная хеш-функция | MD | HAIFA
(фиксированное значение соли) |
HAIFA
(с различными значениями соли) |
---|---|---|---|---|
Атака на первый прообраз[en]
( целей) |
||||
Атака на один из первых прообразов | ||||
Атака на второй прообраз | ||||
Атака на один из вторых прообразов
( блоков, сообщений) |
||||
Коллизии | ||||
Множественные коллизии
( — количество коллизий)[9] |
||||
Herding[11][12] | - | Offline:
Online: |
Offline:
Online: |
Offline:
Online: |
HAIFA, по мнению разработчиков, может являться основой для множества криптографических алгоритмов, так как представляет cобой новую усовершенствованную базовую конструкцию. Доказано, что с её использованием могут быть разработаны функции рандомизированного хеширования[13], обёрнутая функция Меркла — Дамгора (англ. Enveloped Merkle-Damgard, RMC[14][15], ширококонвейрного хеша[16].
Получить конструкцию ширококонвейерного (англ. wild-pipe) хеша с помощью HAIFA достаточно легко; в самом алгоритме для повышения сложности длина внутренних блоков была сделана в два раза больше, чем длина конечного блока (поэтому есть две функции сжатия и ). Можно непосредственно вывести формулу для широконвейерного хеша, с учётом того, что находить в HAIFA последний блок тривиально, так как там выставлены ноль[4].
Формула для перевода из HAIFA в ширококонвейрный хеш:
где
— второй вектор инициализации[16].
Способ, предложенный учёными в HAIFA, имеет важное прикладное значение для реализации алгоритмов электронной подписи: с введением количества бит и соли стало сложнее добавлять префиксы и суффиксы к сообщению (herd attack), а следовательно подменять сообщения для подписи[8].
Эта статья входит в число добротных статей русскоязычного раздела Википедии. |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .