Это не официальный сайт wikipedia.org 01.01.2023

HAIFA — Википедия

HAIFA (англ. HAsh Iterative FrAmework) — итеративный метод построения криптографичеких хеш-функций, являющийся усовершенствованием классической структуры Меркла — Дамгора.

Был предложен в 2007 году в целях повышения устойчивости ко многим атакам и поддержки возможности получать хеш-суммы различных длин. На основе алгоритма были разработаны такие хеш-функции, как BLAKE[1] и SHAvite-3[2].

ИсторияПравить

Создателями алгоритма являются Эли Бихам и Ор Дункельман — израильские криптографы из Хайфского университета. Бихам — ученик Ади Шамира, разработавшего большое количество новых криптографических алгоритмов, в том числе взлома существующих; Дункельман — коллега Шамира по одному из проектов, а в дальнейшем продолжил свои исследования самостоятельно[3].

Структура Меркла — Дамгора долгое время считалась устойчивой к атаке на нахождение второго прообраза, пока в 1999 году профессор Принстонского университета Ричард Дин не доказал, что это предположение неверно для длинных сообщений, если при данной функции сжатия возможно легко находить фиксированные точки последовательности. Также на структуру Меркла — Дамгора могла быть успешно произведена атака множественный коллизий и хэрдинг-атака (атака по известному префиксу)[4][5].

АлгоритмПравить

Структура Меркла — Дамгора представляет собой следующий алгоритм:

 
Структура Меркла — Дамгора

Есть сообщение M  , разбитое на несколько частей: M 1 , M 2 . . . M k  . Есть некоторое начальное значение — I V   и некоторая функция C  , которая подсчитывает промежуточное представление хеш-функции H   определённым образом[5]:

h 0 = I V  

Далее итеративно:

h i = C ( h i 1 , M i )  
H ( M ) = h k  

В основу нового алгоритма HAIFA легло добавление количества захешированных бит и некоторого случайного значения. Вместо обычной функции сжатия, которую теперь можно обозначить следующим образом[4]:

{ 0 , 1 } m c × { 0 , 1 } n { 0 , 1 } m c  , где m c   — размер h  , n   — размер блока, m = m c   (чаще всего выходной размер совпадает с размером h)

используется:

{ 0 , 1 } m c × { 0 , 1 } n × { 0 , 1 } b × { 0 , 1 } s { 0 , 1 } m c  , где b , s   — длины количества бит и соли,

внутреннее же представление подсчитывается (в соответствии с введенными выше обозначениями):

h i = C ( h i 1 , M i , b i t s , s a l t )   , где
b i t s   — количество бит, захешированных к этому времени.

Чтобы захешировать сообщение, нужно выполнить следующие шаги:

  1. Дополнить сообщение M   в соответствии с нижеописанной схемой.
  2. Подсчитать начальное значение I V m   для внутренней ячейки размера m в соответствии с алгоритмом, описанным ниже.
  3. Пройти по всем блокам дополненного сообщения, вычисляя на каждом шаге значение функции сжатия h i   от текущего блока M i  , h i 1   и теперь уже добавляя соль и b i t s   в качестве аргументов. Если к сообщению добавляется дополнительный блок (в самый конец), то для этого блока выставляем значение b i t s   равное нулю.
  4. Обрезать последнее, выходное, значение функции, если необходимо[4].

Дополнение сообщенияПравить

В HAIFA сообщение M   дополняется единицей, необходимым количеством нулей, длиной сообщения в битах и размером выходного блока h  . Т.е добавляем последовательность (количество нулей в данном случае должно быть таким, чтобы N 1 + N 0 N ( M l e n g t h + H s i z e ) m o d N  [4] , где N 1  , N 0   — количество единиц и нулей, N   — размер блока:

1 + 0..0 + b i t s + m c  

Хеширование сообщения, дополненного размером выходного блока, избавляет от проблемы нахождения коллизий, так как если два сообщения M 1   и M 2   хешируются с размерами блока l 1   и l 2   , то от коллизий спасает именно последний блок. В свою очередь, добавлением b i t s   = 0 в самом последнем блоке, создаётся сигнал для обозначения последнего и дополняющего блока[4].

Возможность дополнения исходного сообщения в данном алгоритме позволяет обрезать захешированное, тем самым изменяя размер конечного хеша[4].

Длина хешаПравить

Часто на практике требуются различные длины итогового хеша (как, например, сделано для SHA-256, у которого существуют две урезанные версии), поэтому в данной структуре также была реализована возможность варьировать его длину с помощью специального алгоритма (чтобы сохранить стойкость к атаке на второй прообраз, нельзя использовать очевидное решение взятия m   бит из итогового хеша).

  1. I V   — начальное значение
  2. m   — желательная длина выхода
  3. Считаем преобразованное начальное значение : I V m = C ( I V , m , 0 , 0 )  
  4. Таким образом получаем m   «зашитое» в первые r   бит, за которыми следуют 1 и нули.
  5. После того, как посчитался последний блок, итоговым значением являются m   бит последнего значения функции сжатия цепочки[4].

Стойкость алгоритмаПравить

Доказательство того, что HAIFA устойчив к коллизиям, если функция сжатия устойчива к коллизиям, проводится аналогично доказательству для Меркла — Дамгора[4].

Количество захешированных бит значительно затрудняет поиск и использование фиксированных точек. Даже найдя такие h i   и M i   , для которых выполняется h i = C ( h i , M i , b i t s , s a l t )  , нельзя бесконечно размножать эти значения в данном алгоритме, потому что количество битов будет все время меняться[4].

Соль ( s a l t  ), как и b i t s  , тоже вносит свой вклад в стойкость алгоритма[4]:

  1. Дает возможность устанавливать безопасность хеш-функций в теоретической модели.
  2. Заставляет атаки, базирующиеся на предварительных расчетах, переносить все свои вычисления в онлайн-режим, так как значение соли неизвестно заранее.
  3. Повышает безопасность электронных подписей (так как каждый раз приходится учитывать то, что есть некоторое случайное значение).

Ниже приведены оценки стойкости HAIFA к различным типам атак.

Атаки, основанные на фиксированных точкахПравить

В атаке на второй прообраз ищется такое значение M   , для которого H ( M ) = h i = H ( M i )  , то есть хеш от M   равен какому-либо промежуточному значению в итерациях, и далее соединить часть оставшегося сообщения M   (находящуюся справа от M i  ) с нашим угаданным M  . Однако алгоритм был признан устойчивым к этой атаке, так как в усовершенствованном варианте в конец сообщения дописывался его размер. Ричард Дин же в своей работе указал совершенно новый способ атаки, основанный на предположении о том, что для данной функции C   легко найти фиксированные точки (по определению фиксированная точка — та, для которой выполняется соотношение h = C ( h , M i )  ). В его алгоритме недостающая длина сообщения восполнялась добавлением множества фиксированных точек, то есть мы могли достаточным количеством повторений значения h   дополнить нашу длину до нужной.

В данном случае HAIFA защищает от атаки, основанной на фиксированных точках, так как наличие соли и поля, содержащего количество захешированных бит сводит к минимуму вероятность появления повторения значений сжимающей функции[4].

Атака множественных коллизийПравить

Для множественных коллизий французский криптограф Антуан Жу[en] описал возможность нахождения 2 t   сообщений, имеющих один и тот же хеш. Его работа базируется на факте, что возможно найти t   таких одноблочных коллизий, в которых C ( h i 1 , M i ) = C ( h i 1 , M i )  , и далее конструировать различные сообщения, всего 2 t   вариантов, выбирая на каждом из t   шагов либо сообщение M i  , либо M i   .

 
Составление сообщения с помощью множественных коллизий

HAIFA, несмотря на сложную структуру, не гарантирует нулевой вероятности удачного прохождения атаки на множественные коллизии. После вышеописанных модификаций, сделанных над алгоритмом Меркла — Дамгора, сложность нахождения коллизий для каждого блока не изменилась, но так как появилось случайное подмешанное значение, атакующий не может заранее перебирать варианты этих коллизий, не зная случайного значения. Расчеты переходят в онлайн-режим[4].

Хэрдинг-атакаПравить

Хэрдинг-атака основана на том, что атакующий пытается найти такой суффикс по заданному префиксу, который будет давать нужное значение хеша.

  1. Изначально строится дерево из различных 2 t   внутренних значений, ищутся сообщения Mj, которые приводят к коллизиям среди этих состояний. То есть в узлах дерева находятся различные значения h  , на ребрах — значения M j  .
  2. Строим коллизии по вновь полученным значениям h   (с предыдущего уровня дерева) до тех пор, пока не дойдем до конечного значения H  .
  3. Затем атакующий получает информацию о префиксе.
  4. Получив эту информацию, он пытается подобрать связующее сообщение между эти префиксом и желаемым суффиксом. Связующее сообщение должно удовлетворять условию, что значение сжимающей функции от него равен одному из внутренних значений h   на первом уровне дерева. Далее суффикс строится обычным проходом по дереву (так как на его ребрах уже находятся сообщения, которые приведут к необходимому результату). Ключевым моментом является возможность производить предварительные вычисления, в онлайн-режиме останется подобрать только нужное промежуточное значение h   и M  .

Доказано, что на HAIFA невозможно провести первую фазу хэрдинг-атаки (построение дерева решений), пока неизвестно значение соли. То есть тот brute-force, который излагался выше, уже провести нельзя. Условие успешного отражения атаки — длина подмешиваемого сообщения, если желаемая сложность атаки ставится на уровне O ( 2 m )  , должна быть не менее m c 2   символов. Если этого правила не придерживаться, то возможны некоторые предварительные расчеты, приводящие к взлому алгоритма. Если значение соли все же было найдено, то потребуется некоторое время для поиска нужного места в сообщении в силу наличия поля b i t s  [4].

Сложность атак на алгоритмы Меркла — Дамгора и HAIFAПравить

Тип атаки Идеальная хеш-функция MD HAIFA

(фиксированное значение

соли)

HAIFA

(с различными значениями соли)

Атака на первый прообраз[en]

( k < 2 s   целей)

2 m c   2 m c   2 m c   2 m c  
Атака на один из первых прообразов 2 m c / k   2 m c / k   2 m c / k   2 m c  
Атака на второй прообраз

( k   блоков)[9][10]

2 m c   2 m c / k   2 m c   2 m c  
Атака на один из вторых прообразов

( k   блоков, k < 2 s   сообщений)

2 m c / k   2 m c / k   2 m c / k   2 m c  
Коллизии 2 m c / 2   2 m c / 2   2 m c / 2   2 m c / 2  
Множественные коллизии

( k   — количество коллизий)[9]

2 m c ( k 1 ) / k   l o g 2 k 2 m c / 2   l o g 2 k 2 m c / 2   l o g 2 k 2 m c / 2  
Herding[11][12] - Offline: 2 m c / 2 + t / 2  

Online: 2 m c t  

Offline: 2 m c / 2 + t / 2  

Online: 2 m c t  

Offline: 2 m c / 2 + t / 2 + s  

Online: 2 m c t  

ПриложенияПравить

HAIFA, по мнению разработчиков, может являться основой для множества криптографических алгоритмов, так как представляет cобой новую усовершенствованную базовую конструкцию. Доказано, что с её использованием могут быть разработаны функции рандомизированного хеширования[13], обёрнутая функция Меркла — Дамгора (англ. Enveloped Merkle-Damgard, RMC[14][15], ширококонвейрного хеша[16].

Ширококонвейерный хешПравить

Получить конструкцию ширококонвейерного (англ. wild-pipe) хеша с помощью HAIFA достаточно легко; в самом алгоритме для повышения сложности длина внутренних блоков была сделана в два раза больше, чем длина конечного блока (поэтому есть две функции сжатия C   и C  ). Можно непосредственно вывести формулу для широконвейерного хеша, с учётом того, что находить в HAIFA последний блок тривиально, так как b i t s   там выставлены ноль[4].

 
Пример ширококонвейерного

Формула для перевода из HAIFA в ширококонвейрный хеш:

C H A I F A ( h i 1 , M i , b i t s , s ) = { C ( C ( I V 2 , h i 1 | | f i x p a d ( M i ) ) ) , if   last block C ( h i 1 , M i ) ,   otherwise  

где C : { 0 , 1 } m c × { 0 , 1 } n { 0 , 1 } m c  

C : { 0 , 1 } m c { 0 , 1 } m  

I V 2   — второй вектор инициализации[16].

Прикладное значениеПравить

Способ, предложенный учёными в HAIFA, имеет важное прикладное значение для реализации алгоритмов электронной подписи: с введением количества бит и соли стало сложнее добавлять префиксы и суффиксы к сообщению (herd attack), а следовательно подменять сообщения для подписи[8].

ПримечанияПравить

  1. Jean-Philippe Aumasson, Luca Henzen, Willi Meier, Raphael C.-W. Phan. SHA-3 proposal BLAKE (англ.) // SHA-3 Conference. — 2010. — 16 декабря. — С. 8—15. Архивировано 16 апреля 2016 года.
  2. Eli Biham, Orr Dunkelman. The SHAvite-3 Hash Function (англ.) // Encrypt II. — 2009. — С. 8—17. Архивировано 25 декабря 2016 года.
  3. Eli Biham. Publications  (неопр.). The list of authors' publications (since 1991). Дата обращения: 17 ноября 2016. Архивировано 31 марта 2016 года.
  4. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Eli Biham, Orr Dunkelman. A Framework for Iterative Hash Functions —HAIFA (англ.) // ePrint. — 2007. — С. 6—12. Архивировано 17 августа 2016 года.
  5. 1 2 Jean-Sebastien Coron, Yevgeniy Dodis, Cecile Malinaud, Prashant Puniya. Merkle Damgard Revisited: how to Construct a hash Function (A new Design Criteria for Hash-Functions) (англ.) // NIST. — С. 3—6. Архивировано 7 ноября 2016 года.
  6. Gregory Bard. The Fixed-Point Attack  (неопр.). The explanation of fixed-point attack. ResearchGate (январь 2009). Дата обращения: 3 ноября 2016. Архивировано 4 ноября 2016 года.
  7. Antoine Joux. Multicollisions in iterated hash functions. Application to cascaded constructions (англ.) // Iacr. — 2004. — Август. Архивировано 13 мая 2016 года.
  8. 1 2 Orr Dunkelman, Bart Preneel. Generalizing the Herding Attack to Concatenated Hashing Schemes (англ.) // IAIK. — 2007. — С. 6—7. Архивировано 4 ноября 2016 года.
  9. 1 2 Kelsey J., Schneier B. Second Preimages on n-Bit Hash Functions for Much Less than 2ⁿ Work (англ.) // Advances in Cryptology — EUROCRYPT 2005: 24th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Aarhus, Denmark, May 22-26, 2005. Proceedings / R. CramerSpringer Science+Business Media, 2005. — P. 474—490. — 578 p. — ISBN 978-3-540-25910-7doi:10.1007/11426639_28
  10. Charles Bouillaguet, Pierre-Alain Fouque. Practical Hash Functions Constructions Resistant to Generic Second Preimage Attacks Beyond the Birthday Bound (англ.) // PSL. — 2011. — С. 2. Архивировано 30 августа 2017 года.
  11. Simon R. Blackburn. On the Complexity of the Herding Attack and Some Related Attacks on Hash Functions (англ.) // ePrint. — 2010. — С. 3. Архивировано 26 августа 2016 года.
  12. Elena Andreeva, Charles Bouillaguet, Orr Dunkelman, and John Kelsey. Herding, Second Preimage and Trojan Message Attacks Beyond Merkle-Damgard (англ.) // NIST. — С. 5, 10, 14. Архивировано 21 ноября 2016 года.
  13. Halevi S., Krawczyk H. Strengthening Digital Signatures Via Randomized Hashing (англ.) // Advances in Cryptology — CRYPTO 2006: 26th Annual International Cryptology Conference, Santa Barbara, California, USA, August 20-24, 2006, Proceedings / C. DworkBerlin, Heidelberg, New York, NY, London [etc.]: Springer Science+Business Media, 2006. — P. 41—59. — 622 p. — (Lecture Notes in Computer Science; Vol. 4117) — ISBN 978-3-540-37432-9 — ISSN 0302-9743; 1611-3349doi:10.1007/11818175_3
  14. Itai Dinur. New Attacks on the Concatenation and XOR Hash Combiners // ePrint. — 2016. Архивировано 9 сентября 2016 года.
  15. Elena Andreeva, Gregory Neven, Bart Preneel, Thomas Shrimpton. Seven-Properties-Preserving Iterated Hashing: The RMC Construction (англ.) // ePrint. — 2007. — С. 10—14. Архивировано 25 августа 2016 года.
  16. 1 2 Dustin Moody. Indifferentiability Security of the Fast Wide Pipe Hash: Breaking the Birthday Barrier (англ.) // ePrint. — 2011. Архивировано 6 августа 2016 года.

ЛитератураПравить

СсылкиПравить