Репин Максим Михайлович
E-mail: [email protected].
Тел.: 84992494429, факс: 84959331563.
Mikheev Viatcheslav Alexeevich
The deputy director of Joint-Stock Company «Radio Engineering Corporation «VEGA».
E-mail: [email protected].
34, Kutuzov avenue, Moscow, 121170, Russia.
Phone: +74992490585, fax: +74959331563.
Repin Maxim Mixajlovich
E-mail: [email protected].
Phone: +74992494429; fax: +74959331563.
УДК 681.03.245
Л.К. Бабенко, Е.А. Ищукова
ДИФФЕРЕНЦИАЛЬНЫЙ КРИПТОАНАЛИЗ УПРОЩЕННОЙ ФУНКЦИИ
ХЭШИРОВАНИЯ SHA*
Рассмотрены основные подходы к анализу современных функций хэширования с использованием метода дифференциального криптоанализа на примере упрощенных версий функции SHA. Подходы, рассмотренные для анализа функции SHA, могут быть легко использованы для анализа других современных функций хэширования.
Функция хэширования; дифференциальный криптоанализ; разность; вероятность.
L.K. Babenko, E.A. Ischukova DIFFERENTIAL CRYPTANALYSIS OF SHA-LIKE HASH FUNCTIONS
In article highlights of hash functions differential cryptanalysis on an example of algorithm SHA are considered. The technique of carrying out of the differential analysis of SHA hash function and also other hash functions having a similar structure is offered.
Hash function; differential cryptanalysis; difference; probability.
Как известно, криптография призвана решать задачи обеспечения конфиденциальности, целостности, аутентификации, невозможности отказа от авторства, неот-слеживаемости с использованием математических методов. Для решения ряда данных задач используются криптографические функции хэширования (hash-functions) [1]. Хэш-функции - это функции, предназначенные для сжатия произвольного сообщения или набора данных, записанного, как правило, в двоичном алфавите, в некоторую битовую комбинацию фиксированной длины, называемую сверткой. В криптографии хэш-функции применяются для решения двух основных задач:
♦ построения систем контроля целостности данных при их передаче или хранении;
♦ аутентификации данных.
В 1989 г. Р. Меркль (Ralph C. Merkle) и И. Дамгорд (Ivan Damgaard) [1] независимо предложили итеративный принцип построения криптографических функций хэширования. Данный принцип позволяет свести задачу построения хэш-функции на множестве сообщений различной длины к задаче построения отобра-
*
Работа поддержана грантом РФФИ № 09-07-00245-а.
жения, действующего на множестве фиксированной конечной длины. По итеративному принципу построено абсолютное большинство хэш-функций, используемых в настоящее время на практике. Например, хэш-функции MD5, SHA-1, семейство хэш-функций SHA-2, отечественный стандарт на хэш-функцию ГОСТ Р 34.11-94.
В последние годы в научном мире наблюдается повышенный интерес к проектированию и анализу алгоритмов хэширования. Об этом свидетельствует большое количество статей, посвященных хэш-функциям, представляемым на мировых конференциях по криптографии CRYPTO и EUROCRYPT. Авторами этих статей часто являются люди, стоящие у истоков современной криптографии, такие как Эли Бихам (Eli Biham), Ади Шамир (Adi Shamir), Барт Пренил (Bart Preneel), Ларс Кнудсен (Lars R. Knudsen), Рональд Ривест (Ronald L. Rivest), Алекс Бирюков (Alex Biryukov), Орр Дункелман (Orr Dunkelman), Винсент Рижмен (Vincent Rijmen).
Наряду с анализом уже существующих функций хэширования, предлагаются новые, заявляемые авторами как более надежные. Кроме того, предлагаются новые методы анализа, которые, как правило, рассчитаны на довольно широкий класс алгоритмов хэширования. Подтверждением тому служит конкурс на принятие нового стандарта хэширования SHA-3, проводимый Национальным институтом стандартов и технологий США (НИСТ - National Institute of Standards and Technology (NIST)). В 2002 г. в США был принят стандарт Federal Information Processing Standard 180-2 (FIPS 180-2), определявший 5 основных функций хэширования SHA-1, SHA-224, SHA-256, SHA-384 и SHA-512. Появление серии работ японских ученых, направленных на анализ алгоритмов семейства SHA [2-4], позволило усомниться в стойкости данного стандарта. Так, в работе [4] заявлено, что для алгоритма SHA-1 возможно выполнить поиск коллизий. Несмотря на то, что работы [2-4] не содержат полных сведений о методах, предложенных для анализа, и на заявление сотрудника НИСТ Вильяма Бюрра (William E. Burr) о том, что метод поиска коллизий, предложенный в работе [4] до сих пор никем не подтвержден, в ноябре 2007 г. стартовал проект, направленный на поиск и принятие стандарта нового поколения SHA-3. При этом на сайте НИСТ были опубликованы сведения о том, что после 2010 года алгоритм SHA-1 не должен быть использован для электронной цифровой подписи (ЭЦП) и любых других приложений, требующих устойчивости к поиску коллизий (здесь и далее данные взяты с сайта Национального института стандартов и технологий США http://csrc.nist.gov).
На конкурс SHA-3 был представлен 51 алгоритм, о чем было объявлено в декабре 2008 г. В результате первого раунда конкурса, который завершился в июле 2009 г., было отобрано 14 претендентов. В настоящий момент продолжается второй этап конкурса, в результате которого все претенденты должны быть подвергнуты тщательному анализу. В конце 2010 г. будут объявлены финалисты, которые будут исследованы дальше в 2011-2012 гг.
Как и в случаях с алгоритмами шифрования, при криптоаналистических атаках функций хэширования пытаются обнаружить свойства алгоритма, позволяющие уменьшить объем вычислений в сравнении с объемом вычислений при полном переборе вариантов. Стойкость функции хэширования в отношении криптоанализа можно определить в сравнении с объемом усилий, необходимых для перебора всех вариантов. Одним из мощнейших методов анализа функций хэширования является метод дифференциального криптоанализа, который впервые был применен Э. Бихамом и А. Шамиром в начале 90-х годов XX века для анализа алгоритма DES и DES-подобных блочных шифров.
В данной статье авторы предлагают рассмотреть основные подходы, которые используются при анализе современных функций хэширования с использованием метода дифференциального криптоанализа. В качестве объектов анализа рассмотрим алгоритмы семейства SHA, которые являются одними из самых известных и распространенных на сегодняшний день.
Описание алгоритма SHA
В начале работы алгоритма сообщение дополняется с тем, чтобы его длина стала кратной 512 разрядам. При этом используется то же дополнение, что и в алгоритме МБ5: в начале добавляется 1, а затем нули так, чтобы размер полученного сообщения был на 64 разряда меньше числа, кратного 512, а затем к полученному результату добавляется 64-битовое представление размера исходного сообщения (перед дополнением).
Далее инициализируются пять 32-разрядных переменных: А = 0x67452301; В = 0хе&ааЬ89; С = 0х98Ъа^е; Б = 0x10325476; Е = 0хс3а2еШ.
Затем начинается главный цикл обработки алгоритма. В этом цикле алгоритм SHA обрабатывает сообщение блоками размером 512 разрядов, и цикл продолжается, пока не исчерпаются все блоки сообщения.
Сначала пять переменных копируются в другие переменные: А в а, В в Ь, С в с, Б в d и Е в е. Главный цикл состоит из четырех этапов по 20 операций в каждом. Каждая операция представляет собой нелинейную функцию над тремя из а, Ь, с, d и е, а затем выполняет сдвиг и сложение аналогично МБ5. Набор нелинейных функций, используемых в алгоритме SHA, а также набор констант приведены в табл. 1.
Таблица 1
Функции и константы, используемые в алгоритме SHA
Номер раунда i Функция ^ Константа К(1)
Название функции Описание
От 0 до 19 (X л У) V ((-X) л г) 0х5а827999
От 20 до 39 ХОЯ х © у © г 0x6ed9eba1
От 40 до 59 МАТ (X л У) v(х л г) V (У л г) 0х8НЬЬс^
От 60 до 79 ХОЯ х © у © г 0хса62сЫ6
Блок сообщения превращается из 16 32-битовых слов (М(0) по М(15)) в 80 32битовых слов ^(0) по W(79)) с помощью следующего алгоритма:
М(1) = М(1) , для 1 = 0 по 15;
М(1) = (^ь3) © М(1'8) © М(И4) © 1^1"16)) <<< 1, для 1 = 16 по 79. (1)
Следует отметить, что в первой версии функции SHA-0 отсутствовал циклический сдвиг влево на 1 позицию и использовалась следующая формула:
М(1) = М(1-3) © м(1-8) © м(1-14) © м(1-16), для 1 = 16 по 79. (2)
Пусть 1 - это номер операции (от 1 до 80), W(l) представляет собой 1-й подблок расширенного сообщения, W/l) - ]-й бит 1-го подблока сообщения (при этом j=0 означает младший значащий бит, а j=31 - старший значащий бит), а <<<8 - это циклический сдвиг влево на s битов, тогда главный цикл преобразования выглядит следующим образом:
for l = 0 to 79
a( l+1) = (a(l)
b( l+1) = a(l);
c( l+1) = (b(l)
d( l+1) = c(l);
e( l+1) = d(l).
) = (a(l) <<< 5) + f(l)(b(l), c(l), d(l)) + e(l) + W(l) + K(l);
На рис. 1 показана одна операция функции SHA. Сдвиг переменных выполняет ту же функцию, которую в МБ5 выполняет использование в различных местах различных переменных.
ш, к,
Рис. 1. Одна операция функции SHA
После всего этого a, b, c, d и e добавляются к A, B, C, D и E, соответственно, и алгоритм продолжается для следующего блока данных. Окончательным результатом служит объединение A, B, C, D и E.
Анализ функции SHA
Главной задачей при выполнении анализа функций хэширования является поиск коллизий за время меньшее, чем время полного перебора всех возможных вариантов. Таким образом, задача сводится к поиску двух таких сообщений (M(0) ... M(15)) = (W(0) ... W(15)) и (M’(0) ... M’(15)) = (W’(0) ... W’(15)), для которых будет выработано одно и то же хэш-значение (a(80), b(80), c(80), d(80), e(80)) с использованием одних и тех же начальных значений (a(0), b(0), c(0), d(0), e(0)).
Вначале рассмотрим, как будет изменяться разность в случае, если в функции SHA оставить только линейные элементы. Это необходимо для того, чтобы понять структуру функции хэширования, с одной стороны, и изучить критпографические примитивы функции, с другой. В семействе алгоритмов SHA присутствует два источника нелинейности - это функция и операция целочисленного сложения по модулю 232. Поэтому вначале рассмотрим вариант функции SHA, в котором используется формула (2) для выработки подблоков расширенного сообщения (как это сделано в алгоритме SHA-0), операция целочисленного сложения по модулю 232 заменена на операцию сложения по модулю 2 и все функции f(l) используются в режиме XOR (см. табл. 1). В работе [5] вариант такой функции хэширования обозначен как функция SHI1.
Забудем на время о том, что подблоки W вырабатываются в процессе работы функции хэширования. Это, например, справедливо для первых шестнадцати блоков (W(0) ... W(15)), которые берутся из исходного сообщения. Рассмотрим, какое влияние окажет изменение одного бита в блоке W(l) на выработку последующих значений.
Например, изменим значение второго бита в блоке ’^1), то есть обратим значение ”^. Для этого проследим 5 циклов преобразований так, как это сделано в табл. 2.
Таблица 2
Влияние изменения одного бита на выработку последующих значений
№ цикла Преобразование Измененные биты Комментарий
1 а(1+1) = ,^1) © (а(1) <<< 5) © Ь(1) © с(1) © а(1) © е(1) © К(1); я (1+1) а1 Так как изменен бит ”^(1), то изменится значение бита а1(1+1)
Ъ(1+1) = а(1); - Без изменений
с(1+1) = (ь(1) <<< 30); —
а(1+1) = с(1); -
е(1+1) = й(1); —
2 а(1+2) = '^(1+1) © (а(1+1) <<< 5) © ъ(1+1) © с(1+1) © а(1+1) © е(1+1) © К(1+1); а6(1+2) Так как изменен бит а1(1+1), то после сдвига влево на 5 позиций он окажет влияние на 7 бит блока а(1+2), то есть изменится бит а6(1+2)
Ъ(1+2) = а(1+1); Ъ1(1+2) Так как изменен бит а1(1+1), то изменится бит Ь1(1+2)
с(1+2) = (Ь(1+1) <<< 30); — Без изменений
а(1+2) = с(1+1); —
е(1+2) = й(1+!); —
3 а(1+3) = ^(1+2) © (а(1+2) <<< 5) © ъ(1+2) © с(1+2) © а(1+2) © е(1+2) © К(1+2); я (1+3) а1 а„(1+3) Так как изменен бит а6(1+2), то после сдвига влево на 5 позиций он окажет влияние на 12 бит блока а(1+3), то есть изменится бит а11(1+3). Кроме того, так как изменен бит Ь1(1+2), то изменится бит а^+3)
Ь(1+3) = а(1+2); Ьб(1+3) Так как изменен бит а6(1+2), то изменится бит Ь6(1+3)
с(1+3) = (Ь(1+2) <<< 30); „ (1+3) с31 Так как изменен бит Ь1(1+2), то после циклического сдвига влево на 30 позиций он окажет влияние на 32 бит блока с(1+3), то есть изменится бит (1+3) с31
а(1+3) = с(1+2); — Без изменений
е(1+3) = й(1+2); —
4 а(1+4) = ^(1+3) © (а(1+3) <<< 5) © ъ(1+3) © с(1+3) © а(1+3) © е(1+3) © К(1+3); Я (1+4) а16 Я (1+4) а31 Так как изменены биты а1(1+3) и а11(1+3), то после сдвига влево на 5 позиций они окажут влияние соответственно на 7 и 17 биты блока а(1+4), то есть изменятся биты а6(1+4) и а16(1+4). Так как изменен бит Ь6(1+3), то бит а6(1+4) должен быть изменен еще раз. Таким образом, бит а6(1+4) вернется в свое первоначальное значение. Кроме того, так как изменен бит с31(1+3), то изменится бит а31(1+4)
Окончание табл. 2
№ цикла Преобразование Измененные биты Комментарий
го + "сЗ 1 1 + 43 ь1(1+4) ь„(1+4) Так как изменены биты а/^3 и ап(1+3), то изменятся биты Ь/1+4) и Ь11(1+4)
с(1+4) = ^(1+3) <<< 30); г (1+4) с4 Так как изменен бит Ь6(1+3), то после циклического сдвига влево на 30 позиций он окажет влияние на 5 бит блока с(1+4), то есть изменится бит г (1+4) с4
а(1+4) = с(1+3); Н (1+4) азі Так как изменен бит с31(1+3), то изменится бит ^(1+4)
3) 1+ ТЗ 1 1 4) 1+ "Ъ - Без изменений
5 а(1+5) = W(l+4) ® (а(1+4) <<< 5) ® Ь(1+4) © с(1+4) © а(1+4) © е(1+4) © К(1+4); Я (1+5) а1 (1+5) а11 (1+5) а21 (1+5) а31 Так как изменены биты а16(1+4) и а31(1+4), то после сдвига влево на 5 позиций они окажут влияние соответственно на 22 и 5 биты блока а(1+5), то есть изменятся биты а21(1+5) и а4(1+5). Так как изменены биты Ь1(1+4) и Ь11(1+4), то изменятся и биты а1(1+5) и а11(1+5). Так как изменен бит с4(1+4), то бит а4(1+5) должен быть изменен еще раз. Таким образом, бит а4(1+5) вернется в свое первоначальное значение. Кроме того, так как изменен бит ^1(1+4), то изменится бит а31(1+5)
Ь(1+5) = а(1+4); £ І ^ Л Так как изменены биты а16(1+4) и а31(1+4), то изменятся биты Ь16(1+5) и Ь31(1+5)
с(1+5) = (Ь(1+4) <<< 30); (1+5) с9 (1+5) с31 Так как изменены биты Ь1(1+4) и Ь11(1+4), то после циклического сдвига влево на 30 позиций они окажут влияние соответственно на 32 и 10 биты блока с(1+5), то есть изменятся биты с31(1+5) и (1+5) с9
а(1+5) = с(1+4); а4(1+5) Так как изменен бит с4(1+4), то изменится бит ^(1+5)
е(1+5) = й(1+4); Єзі(1+5) Так как изменен бит d31(1+4), то изменится бит е31(1+5)
Для того, чтобы предотвратить последующие изменения битов, необходимо провести коррекцию, изменив биты в блоках W: W6(l+1), ’^(1+2), W31(l+3), W31(l+4) и W31(l+5). Так, изменение бита W6(l+1) позволит оставить неизменным бит а6(1+1), что, в свою очередь, предотвратит изменение битов при дальнейших преобразованиях, которые были представлены в табл. 2. Преобразования битов с проведенной коррекцией представлены в табл. 3.
Таблица 3
Коррекция битов
№ цикла Преобразование Коррекция Измененные биты Комментарий
1 а(і+1) = W(l) © (а(і) <<< 5) © Ь(і) © с(і) © d(l) © е(і) © К(і); аі(і+1) Так как изменен бит то изменится значение бита я (1+1) а1
2 а(і+2) = W(l+1) © (а(і+1) <<< 5) © Ь(і+1) © с(і+1) © ^ © е(і+1) © К(і+1); W6(l+1) Так как должен измениться бит а6(1+1), то после коррекции он останется неизменным
Ь(і+2) = а(і+1); — Ьі(і+2) Так как изменен бит а1(1+1), то изменится бит Ъ1(1+2)
3 а(і+3) = W(l+2) © (а(і+2) <<< 5) © Ь(і+2) © с(і+2) © ^+2) © е(і+2) © К(і+2); Wl(l+2) - Так как изменен бит Ь1(12), то должен измениться бит а1(1+3), однако в результате коррекции этого не происходит
с(і+3) = (Ь(і+2) <<< 30); „ (і+3) с31 Так как изменен бит Ъ1(1+2), то после циклического сдвига влево на 30 позиций он окажет влияние на 32 бит блока с(1+3), то есть изменится бит с31(1+3)
4 а(і+4) = W(l+3) © (а(і+3) <<< 5) © Ь(і+3) © с(і+3) © #+3) © е(і+3) © К(і+3); Wзl(l+3) - Так как изменен бит с31(13), то должен измениться бит а31(1+4), однако в результате коррекции этого не происходит
^+4) = с(і+3); — н (і+4) d31 Так как изменен бит с31(13), то изменится бит ^(1+4)
5 а(і+5) = W(l+4) © (а(і+4) <<< 5) © Ь(і+4) © с(і+4) © #+4) © е(і+4) © К(і+4)- Wзl(l+4) - Так как изменен бит ^/1+4), то должен измениться бит а31(1+5), однако в результате коррекции этого не происходит
Є(і+5) = ^і+4); — Р (і+5) е31 Так как изменен бит d31(1+4), то изменится бит е31(1+5).
6 а(і+6) = W(l+5) © (а(і+5) <<< 5) © Ь(і+5) © с(і+5) © #+5) © е(і+5) © К(і+5); Wзl(l+5) Так как изменен бит е31(15), то должен измениться бит а31(1+6), однако в результате коррекции этого не происходит
Таким образом, из табл. 2 и 3 можно видеть, что изменение битов W6(l+1), W1(l+2), W31(l+3), W31(l+4) позволяет получить два различных преобразования от значений (а(і), Ь(і), с(і), ^і), е(і)) к значениям (а(і+6), Ь(і+6), с(і+6), d(l+6), е(і+6\ что ведет к локальной коллизии. Схематично это изображено на рис. 2.
Коррекция битов
Начальные
состояния
а(і)
Ь(і)
с(і)
а(і)
е(і)
Изменение одного бита
W1(l)
W6(l+1)
а(і+1)
- Ь1(і+1)
Wl(l+2)
а(і+2)
Wз1(l+3)
а(і+з)
Wз1(l+4)
а(і+4)
Wз1(l+5)
а(і+5)
Ь(і+5)
с(і+5)
а(і+5)
е(і+5)
Рис. 2. Получение локальной коллизии
Важно отметить, что преобразования, рассмотренные для бита W1(l), можно рассмотреть для любого бита блока W(l), однако, как отмечается в работе [5] выбор бита W1(l) приводит к наилучшему результату.
Так как рассматриваемая версия функции линейна, то можно сымитировать столько локальных коллизий, сколько необходимо, и получить два различных преобразования от (а(0), Ь(0), с(0), d(0), е(0)) до (а(80), Ь(80), с(80), d(80), е(80)): первое преобразование с использованием исходного сообщения W и второе преобразование с использованием модифицированного сообщения W,. Остается выяснить, как определить такую локальную коллизию, которая бы учитывала тот факт, что подблоки W(l) и W(l),, начиная со значения і=16, вырабатываются в соответствии с формулой (2).
Определить локальную коллизию означает построить вектор т0, состоящий из 80 битов, пронумерованных от 0 до 79, со значением 1 в позиции і, если мы хотим обратить бит W1(l). Однако нельзя обращать биты W1(l) для значений і>75, так как изменения в раунде под номером і не будут скорректированы до раунда номер (і+6), а нам необходимо, чтобы все изменения были скорректированы до 80 раунда.
Пусть (т0(0), ..., т0(79)) будет одним из таких векторов. Исходя из этого, необходимо определить маску изменений для сообщения W. Для того, чтобы провести коррекцию, будем использовать маску L, состоящую из 80 32-разрядных блоков, то есть L = (Ь,(0) ... Ь,(80)). Для получения каждого блока L(i) введем шесть корректирующих масок L0, L1, L2, L3, L4, L5. Для первой корректирующей маски добавим еще пять нулевых блоков с і = -5 по і = -1 и заполним ее следующим образом:
Ь0(і) = 0, для -5 < і < 0;
Ь0к(і) = 0, для 0 < і < 79 и для всех к Ф 1;
Ь01(і) = то(і), для 0 < і < 79.
Для второй корректирующей маски Ь1 добавим еще четыре нулевых блока с і = - 4 по і = -1. Вторая корректирующая маска Ь1 вырабатывается из L0 с помощью циклического сдвига влево на 5 позиций. Сдвиг вытекает из описания преобразований функции SHA, что позволит использовать ее для коррекции бита к=6. Имеем:
Ь1(і) = Ь0(і-1) <<< 5, для -4 < і < 79. (3)
Следующая корректирующая маска Ь2 имеет три дополнительных нулевых блока и вырабатывается из Ь0 без использования циклического сдвига:
Ь2(і) = Ь0(і-2), для -3 < і < 79. (4)
Аналогичным образом из Ь0 получаются корректирующие маски Ь3, Ь4, Ь5, имеющие соответственно два, один и ноль дополнительных нулевых блоков. Маски Ь3, Ь4, Ь5 вырабатываются с помощью циклического сдвига влево на 30 позиций и используются для коррекции бита номер к=31:
Ь3(1) = Ь0(1-3) <<< 30, для -2 < і < 79; (5)
Ь4(1) = Ь0(1-4) <<< 30, для -1 < і < 79; (6)
Ь5(1) = Ь0(1-5) <<< 30, для 0 < і < 79. (7)
Искомая маска L определяется путем сложения по модулю два соответствующих блоков из корректирующих масок L0, L1, L2, L3, L4, L5:
Ь(1) = Ь0(1) ® Ь1(1) ® Ь2(1) © Ь3(1) © Ь4(1) © Ь5(1), для 0 < 1 < 79. (8)
Для того, чтобы более детально понять принцип нахождения маски Ь, рассмотрим нахождение ее первых пяти блоков в случае, если в маске т0 бит т0(0) равен единице, а остальные биты равны нулю, как это сделано в табл. 4. В табл. 4 нумерация блоков начинается со значения і = -5. Первые блоки до значения і = 0 в корректирующих масках L0, L1, L2, L3, L4, L5 заполняются нулями. В блок L0(0) в позицию 1 заносится значение т0(0). Остальные блоки L0 остаются равными 0. В соответствии с формулами (3) - (7) производится заполнение блоков для корректирующих масок L1, L2, L3, L4, L5 и по формуле (8) вычисление маски L. В результате можно видеть, что первый блок Ь(0) задаст обращение бита для W'(0), а блоки Ь(1), Ь(2), Ь(3), Ь(4), Ь(5) позволят провести коррекцию в соответствии со схемой, рассмотренной в табл. 2. Аналогичным образом можно произвести выработку корректирующей маски L для любого вектора т0.
Таблица 4
Построение корректирующей маски L
1 -5 -4 -3 -2 -1 0 1 2 3 4 5
Ь0 0 0 0 0 0 Ь01(0)=1 0 0 0 0 0
Ь1 - 0 0 0 0 0 Ь16(1)=1 0 0 0 0
Ь2 - - 0 0 0 0 0 Ь21(2)=1 0 0 0
Ь3 - - - 0 0 0 0 0 Ь331(3)=1 0 0
Ь4 - - - - 0 0 0 0 0 Ь431(4)=1 0
Ь5 0 0 0 0 0 Ь531(5)=1
Ь Ь/0)=1 Ь6(1)=1 Ь/2)=1 Ь31(3)=1 Ь31(4)=1 Ь31(5)=1
При выборе вектора т0 необходимо помнить о том, что, начиная со значения 1 = 16, блоки W(l) вырабатываются в соответствии с формулой (2). Поэтому необходимо учитывать, что блоки корректирующего вектора L0, начиная с позиции 11, должны удовлетворять условию:
Ь0(1) = Ь0(1-3) © Ь0(1-8) © Ь0(1-14) © Ь0(1-16), для 11 < 1 < 80. (9)
Позиция 11 обусловлена тем фактом, что, начиная с блока W(16), используется функция расширения (2). Следовательно, если в данном блоке необходимо провести коррекцию, то для этого нужно использовать блок корректирующей маски
Ь0(11).
Так как преобразование (2) является полностью линейной операцией, которую можно проводить побитно, то можно представить результат работы данного преобразования в виде 32-х 80-разрядных блоков V = (V1-0-1, ..., V-32-1). Каждый блок V® содержит 80 битов. Если обозначить индексом j номер бита в блоке Vй, то бит Уі(1) будет соответствовать биту ”^®. При этом первые 16 битов (с 0 по 15) в блоке Vй заполняются в соответствии с исходным значением W = (^(0) ... W,(15)), а остальные могут быть получены с использованием формулы (2). Таким образом, до-
вольно легко осуществить перебор возможных значений для блока У-1"1. Из 216 = 65536 возможных заполнений блока V-1" всего 128 вариантов удовлетворяют выражению (9) и содержат 5 нулей в позициях с 75 по 79, и таким образом, позволяют получить маску т0.
С использованием такой маски легко можно получить корректирующий вектор Ь. Зная преобразование (2), легко можно проделать обратные линейные вычисления и определить исходное 512-битовое сообщение ц, из которого получается маска L. Так как в рассматриваемой версии функции хэширования расширение блоков W выполняется с использованием одинаковых преобразований, то ясно, что ц = ^(0), ..., Ь(15)). Для всех входов W = ^(0), ..., W(15)) и W, = W © ц будут получены одинаковые выходные хэш-значения при использовании функции SHI1.
Теперь необходимо изучить появление коллизий при использовании функции в хэш-функциях семейства 8ИЛ. Рассмотрим еще один упрощенный вариант функции 8ИЛ, в котором функция расширения блоков работает в соответствии с преобразованием (2) и функция целочисленного сложения по модулю 232 заменена на операцию XOR, выполняемую над пятью переменными. В работе [5] такая упрощенная версия функции SHA названа SHI2. Проще говоря, функция SHI2 - это функция SШ1 (рассмотренная нами ранее), в которую добавили нелинейную функцию ^ Легко видеть, что в некоторых случаях (см. табл. 1) функция ^ представляет собой линейное преобразование, заключающееся в сложении по модулю два трех операндов. Таким образом, рассмотренная ранее атака может работать. Остается выяснить, в каких случаях данная атака будет работать и какова вероятность успеха.
Для того, чтобы вычислить вероятность успеха, необходимо провести детальный анализ функции :^1), работающей в режимах № и MAJ (см. табл. 1). Так как данные функции работают с 32 битами блока независимо, то необходимо всего лишь изучить, что произойдет при изменении одного бита. Рассмотрим поведение двух функций ^(В®, С(1), Б(1)) и £®(В’(1), С’(1), Б’(1)) в случае, если имеются различия во входных блоках данных функций. Выделим четыре возможных варианта в соответствии с рассмотренной ранее схемой:
1. Входные блоки функций не имеют различий, то есть В(1) = В’(1), С(1) = С’(1), Б(1) = Б,(1).
2. Имеется единственное различие в бите]=1 блока В(1), то есть В’(1) = В(1) © 21.
3. Имеется единственное различие в бите ]=31 блока С(1) или блока Б(1).
4. Имеется два различия в бите ]=31 блоков С(1) и Б(1), то есть С’(1) = С(1) © 231 и Б,(1) = Б(1) © 231.
В первом случае оба варианта функции ^ № и МА1 будут давать одинаковые выходные значения, то есть в любом случае ^(В®, С(1), Б(1)) = :^1)(В,(1), С’(1), Б,(1)), и значит функция ^ оказывает воздействие на входные биты аналогично тому, как это было рассмотрено для функции 1*1), работающей в режиме XOR.
Определим поведение функций для второго возможного варианта. Для этого построим таблицы истинности для функции ^ в режиме № (табл. 5) и в режиме MAJ (табл. 6). В табл. 5 и 6 последние два столбца представляют собой возможные выходные результаты для бита ) = 1 соответственно функций ^(В®, С(1), Б(1)) и ^(В’®, С’(1), Б,(1)). При этом В’(1) = В(1) © 21, С(1) = С’(1), Б(1) = Б’(1). Из них видно, что ^(В(1), С(1), Б(1)) Ф ^1)(В’(1), С’(1), Б’(1)) в том случае, если биты блоков С и D не равны, то есть, если С1(1) Ф Б1(1). И вероятность такого события равна 'А В этом случае выходы функций будут иметь различие в бите ]=1, что будет скорректировано путем добавления бита W1, согласно рассмотренной ранее схеме. Это справедливо как для функции ^ в режиме №, так и для функции ^ в режиме МЛ1.
Таблица 5
Таблица истинности для функции I1® в режиме №, если B’(i) = B(i) © 21
В —В В’ -В’ С Б ВлС=У1 В’лС=У2 (—В)лБ=У3 (—В’)лБ=У4 У1уУ3 У2уУ4
0 1 1 0 0 0 0 0 0 0 0 0
0 1 1 0 0 1 0 0 1 0 1 0
0 1 1 0 1 0 0 1 0 0 0 1
0 1 1 0 1 1 0 1 1 0 1 1
1 0 0 1 0 0 0 0 0 0 0 0
1 0 0 1 0 1 0 0 0 1 0 1
1 0 0 1 1 0 1 0 0 0 1 0
1 0 0 1 1 1 1 0 0 1 1 1
Таблица 6
Таблица истинности для функции в режиме MAJ, если B’(i) = B(i) © 21
В В С Б = < £ В В’лС= У2 ВлБ= У3 В’лБ= У4 СлБ= У5 У1 уУ3= У6 У2уУ4= У7 У6уУ 5 У7уУ 5
0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 1 0 0 0 1 0 0 1 0 1
0 1 1 0 0 1 0 0 0 0 1 0 1
0 1 1 1 0 1 0 1 1 0 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 1 0 0 1 0 1 0
1 0 1 0 1 0 0 0 0 1 0 1 0
1 0 1 1 1 0 1 0 1 1 0 1 1
Рассмотрим третий возможный вариант, согласно которому должно иметься единственное различие в бите ]=31 блока С(1) или блока Б(1).
Построим таблицы истинности для функции ^ в режиме № соответственно для случаев, когда изменяется бит С31(1) (табл. 7) или бит Б31(1) (табл. 8). В случае, если изменен бит С31(1), то выполняются следующие условия: В(1) = В’(1), С’(1) = С(1) © 231, Б(1) = Б’(1). В случае, если изменен бит Б31(1), то выполняются следующие условия: В(1) = В’(1), С(1) = С’(1), Б’(1) = Б(1) © 231. В табл. 7 и 8 последние два столбца представляют собой возможные выходные результаты для бита ) = 31 соответственно функций 1<1)(В(1), С(1), Б(1)) и 1<1)(В,(1), С’(1), Б’(1)). Из них видно, что 1(1)(В(1), С(1), Б(1)) Ф 1<1)(В,(1), С’(1), Б’(1)) в том случае, если бит В31(1) = 1 и при этом меняется бит блока С, то есть С’(1) = С(1) © 231; или если бит В31(1) = 0 и при этом меняется бит блока Б, то есть Б’(1) = Б(1) © 231. Вероятность этих событий равна ‘А Выходы функций будут иметь различие в бите ]=31, что будет скорректировано путем добавления бита W31, согласно рассмотренной ранее схеме.
Таблица 7
Таблица истинности для функции 1® в режиме если С’® = С® © 231
С С’ В —В Б ВлС=У1 ВлС’=У2 (—В)лБ=У3 У1уУ3 У2уУ3
0 1 0 1 0 0 0 0 0 0
0 1 0 1 1 0 0 1 1 1
0 1 1 0 0 0 1 0 0 1
0 1 1 0 1 0 1 0 0 1
1 0 0 1 0 0 0 0 0 0
1 0 0 1 1 0 0 1 1 1
1 0 1 0 0 1 0 0 1 0
1 0 1 0 1 1 0 0 1 0
Таблица 8
Таблица истинности для функции I1® в режиме №, если Б’(|) = Б(|) © 231
Б D’ в ^в с ВлС=У1 (-,в)лБ=У2 Ьв^^з У1уУ3 У2уУ3
0 1 0 1 0 0 0 1 1 1
0 1 0 1 1 0 0 1 1 1
0 1 1 0 0 0 0 0 0 0
0 1 1 0 1 1 0 0 1 0
1 0 0 1 0 0 1 0 0 1
1 0 0 1 1 0 1 0 0 1
1 0 1 0 0 0 0 0 0 0
1 0 1 0 1 1 0 0 1 0
Аналогичным образом построим таблицы истинности для функции ^ в режиме MAJ соответственно для случаев, когда изменяется бит С31(1) (табл. 9) или бит Б31(1) (табл. 10). В случае, если изменен бит С31(1), то выполняются следующие условия: В(1) = В’(1), С’(1) = С(1) © 231, Б(1) = Б’(1). В случае, если изменен бит Б31(1), то выполняются следующие условия: В(1) = В’(1), С(1) = С’(1), Б’(1) = Б(1) © 231. В табл. 9 и 10 последние два столбца представляют собой возможные выходные результаты для бита} = 31 соответственно функций 1®(В(1), С(1), Б(1)) и ^(В’® С’(1), Б’(1)). Из них видно, что ^(В(1), С(1), Б(1)) ф 1®(В’(1), С’(1), Б’(1)) в том случае, если бит В31(1) Ф Б31(1) и при этом меняется бит блока С, то есть С’(1) = С(1) © 231; или если бит В31(1) ф С31(1) 1 и при этом меняется бит блока Б, то есть Б’(1) = Б(1) © 231. Вероятность этих событий также равна 'А Выходы функций будут иметь различие в бите ]=31, что будет скорректировано путем добавления бита W31, согласно рассмотренной ранее схеме.
Таблица 9
Таблица истинности для функции I1® в режиме MAJ, если С’(|) = С(|) © 231
Вл С=У1 л о = Y 2 в в лБ=У3 и ^ У II Б л С’ лБ=У5 У1у УЗуУ4 У2у УЗуУ5
0 0 0 0 0 0 0
0 0 0 0 1 0 1
0 1 0 0 0 0 1
0 1 1 0 1 1 1
0 0 0 0 0 0 0
0 0 0 1 0 1 0
1 0 0 0 0 1 0
1 0 1 1 0 1 1
Таблица 10
Таблица истинности для функции в режиме MAJ, если D’(|) = Б(|) © 231
Б D’ в с влС=У1 влБ=У2 BлD’=Y3 СлБ=У4 CлD’=Y5 У1уУ2уУ4 У1уУЗуУ5
0 1 0 0 0 0 0 0 0 0 0
0 1 0 1 0 0 0 0 1 0 1
0 1 1 0 0 0 1 0 0 0 1
0 1 1 1 1 0 1 0 1 1 1
1 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 1 0 1 0
1 0 1 0 0 1 0 0 0 1 0
1 0 1 1 1 1 0 1 0 1 1
Наконец рассмотрим четвертый вариант, согласно которому должно иметься два различия в бите ]=31 блоков С(1) и Б(1), то есть С’(1) = С(1) © 231 и Б’(1) = Б(1) © 231. Построим таблицы истинности для функции 1(1) в режиме № (табл. 11) и для функции 1(1) в режиме МАТ (табл. 12). При этом выполняются следующие условия:
В(1) = В’(1), С’(1) = С(1) © 231, D’(l) = Б(1) © 231. Из табл. 11 видно, что функция 1(1) в ре-
жиме № никогда не даст на выходе два одинаковых бита при соответствующих начальных условиях, то есть вероятность того, что 1®(Б(і), С(і), Б(і)) Ф 1(і)(Б’(і), С’(і), Б’(і)) всегда равна единице. Так как во входных значениях имеется двойное различие в бите ]=31, то в результате сложения по модулю два эти различия будут компенсировать друг друга. Таким образом, для корректной работы необходимо, чтобы на выходе функций І(і) различий не было, что невозможно в соответствии с таблицей истинности. Поэтому в первых 19 раундах необходимо использовать такие корректирующие маски, которые не допустят поступление на вход функции 1® значений С(і) и Б(і), имеющих одновременное различие в бите ]=31. Из табл. 12 видно, что 1®(Б®, С(і), Б(і)) = 1®(Б’(і), С’(і), Б’(і)) в том случае, если бит С3і(і) не равен биту Б31(і) (С31(і) Ф Б31(і)). Вероятность такого события равна ‘А
Таблица іі
Таблица истинности для функции І*'* в режиме если С’(0 = С('* ® 231 и D’(') = Б"* ® 231
Б ^Б С С’ Б Б’ БлС=У1 ЬБ)лБ=У2 БлС’=У3 ЬБ’)лБ’=У4 У1 уУ2 У3уУ4
0 1 0 1 0 1 0 0 0 1 0 1
0 1 0 1 1 0 0 1 0 0 1 0
1 0 0 1 0 1 0 0 1 0 0 1
1 0 0 1 1 0 0 0 1 0 0 1
0 1 1 0 0 1 0 0 0 1 0 1
0 1 1 0 1 0 0 1 0 0 1 0
1 0 1 0 0 1 1 0 0 0 1 0
1 0 1 0 1 0 1 0 0 0 1 0
Таблица 12
Таблица истинности для функции I1® в режиме MAJ, если С’(0 = С(0 © 231 и D’(i) = Б(0 © 231
Б С С Б Б II < £ Б БлС’ = У2 БлБ= У3 BлD’ = У4 СлБ= У5 С^’ = У6 У1уУ3у У5 У2уУ4у У6
0 0 1 0 1 0 0 0 0 0 1 0 1
0 0 1 1 0 0 0 0 0 0 0 0 0
1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 1 0 0 1 1 0 0 0 1 1
0 1 0 0 1 0 0 0 0 0 0 0 0
0 1 0 1 0 0 0 0 0 1 0 1 0
1 1 0 0 1 1 0 0 1 0 0 1 1
1 1 0 1 0 1 0 1 0 1 0 1 0
Основываясь на проведенном анализе функций 1®, выберем начальный вектор т0 такой, чтобы до раунда і=16 не встречалось двух измененных битов, стоящих рядом. Начиная с раунда і=16, такие изменения могут присутствовать, так как в данном случае одновременные изменения в битах С31(і) и Б31(і) произойдут не раньше раунда і=20, в котором используется функция 1® в режиме XOR. При этом необходимо помнить, что значения вектора т0 должны удовлетворять выражению (9). В качестве такого вектора используем:
т0 = (0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,14,1,1,
0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,04,0,0,
04,0,0,0,1,0,0,1,0,04,0,0444,044,
0,0,1,1,0,0,0,044444,0,0,0,0,0,0,0).
Согласно оговоренным условиям, вектор т0 не содержит двух единиц, стоящих рядом в первых 16 позициях, а содержит пять нулей в последних позициях. Воспользовавшись формулами (3) - (8), легко можно получить корректирующий вектор L. Блоки вектора L представлены в табл. 13 в 7 столбце. Для того, чтобы
определить вероятность получения коллизии при использовании выбранного вектора т0, рассмотрим, какие значения будут поступать на вход функции 1® в каждом раунде преобразования. При этом для функции 1®, работающей в режимах № и МЛІ, будем использовать соответственно обозначения №(С) и MAJ(С), где С может принимать значения от 1 до 4 и указывает на номер одного из четырех рассмотренных вариантов различий во входных данных функции 1(і). В табл. 13 представлено изменение значений разностей для значений Л, В, С, Б и Е каждого раунда преобразования с тем, чтобы определить различия во входах функции 1(і). При этом опущены раунды номер 0, 1, 12, 13, 34, 78 и 79, в которых значения переменных Л(і), Б(і), С(і), Б(і), Е(і) и Ь(і) равны нулю.
Таблица 13
Определение вероятности получения коллизии при использовании выбранного вектора т0
№ А Б С Б Е ь !■) р
2 00000000 00000000 00000000 00000000 00000000 00000002 Щ1) 1
3 00000002 00000000 00000000 00000000 00000000 00000040 №(1) 1
4 00000000 00000002 00000000 00000000 00000000 00000002 №(2) А
5 00000000 00000000 80000000 00000000 00000000 80000000 №(3) А
6 00000000 00000000 00000000 80000000 00000000 80000002 №(3) А
7 00000002 00000000 00000000 00000000 80000000 80000040 Щ1) 1
8 00000000 00000002 00000000 00000000 00000000 00000002 №(2) А
9 00000000 00000000 80000000 00000000 00000000 80000000 №(3) А
10 00000000 00000000 00000000 80000000 00000000 80000000 №(3) А
11 00000000 00000000 00000000 00000000 80000000 80000000 №(1) 1
14 00000000 00000000 00000000 00000000 00000000 00000002 Щ1) 1
15 00000002 00000000 00000000 00000000 00000000 00000040 №(1) 1
16 00000000 00000002 00000000 00000000 00000000 00000000 №(2) А
17 00000002 00000000 80000000 00000000 00000000 80000042 №(3) А
18 00000002 00000002 00000000 80000000 00000000 80000040 №(2,3) ‘У
19 00000002 00000002 80000000 00000000 80000000 00000040 №(2,3) Ул
20 00000002 00000002 80000000 80000000 00000000 00000042 хоя 1
21 00000000 00000002 80000000 80000000 80000000 80000000 хоя 1
22 00000002 00000000 80000000 80000000 80000000 80000042 хоя 1
23 00000002 00000002 00000000 80000000 80000000 00000042 хоя 1
24 00000000 00000002 80000000 00000000 80000000 00000002 хоя 1
25 00000000 00000000 80000000 80000000 00000000 00000000 хоя 1
26 00000000 00000000 00000000 80000000 80000000 00000002 хоя 1
27 00000002 00000000 00000000 00000000 80000000 80000042 хоя 1
28 00000002 00000002 00000000 00000000 00000000 00000040 хоя 1
29 00000002 00000002 80000000 00000000 00000000 80000042 хоя 1
30 00000000 00000002 80000000 80000000 00000000 00000002 хоя 1
31 00000000 00000000 80000000 80000000 80000000 80000000 хоя 1
32 00000000 00000000 00000000 80000000 80000000 00000000 хоя 1
33 00000000 00000000 00000000 00000000 80000000 80000000 хоя 1
35 00000000 00000000 00000000 00000000 00000000 00000002 хоя 1
36 00000002 00000000 00000000 00000000 00000000 00000040 хоя 1
37 00000000 00000002 00000000 00000000 00000000 00000000 хоя 1
38 00000002 00000000 80000000 00000000 00000000 80000040 хоя 1
39 00000000 00000002 00000000 80000000 00000000 80000002 хоя 1
40 00000000 00000000 80000000 00000000 80000000 00000000 МАД3) А
41 00000000 00000000 00000000 80000000 00000000 80000002 МАД3) А
42 00000002 00000000 00000000 00000000 80000000 80000040 МАД1) 1
43 00000000 00000002 00000000 00000000 00000000 00000002 МА(2) А
44 00000000 00000000 80000000 00000000 00000000 80000000 МАД3) А
45 00000000 00000000 00000000 80000000 00000000 80000002 МАД3) А
46 00000002 00000000 00000000 00000000 80000000 80000040 МАД1) 1
47 00000000 00000002 00000000 00000000 00000000 00000002 МА(2) А
48 00000000 00000000 80000000 00000000 00000000 80000002 МАД3) А
Окончание табл. 13
49 00000002 00000000 00000000 80000000 00000000 80000040 МАД3) А
50 00000000 00000002 00000000 00000000 80000000 80000002 ма(2) А
51 00000000 00000000 80000000 00000000 00000000 80000002 МАД3) А
52 00000002 00000000 00000000 80000000 00000000 80000040 МАД3) А
53 00000000 00000002 00000000 00000000 80000000 80000002 ма(2) А
54 00000000 00000000 80000000 00000000 00000000 80000002 МАД3) А
55 00000002 00000000 00000000 80000000 00000000 80000042 МАД3) А
56 00000002 00000002 00000000 00000000 80000000 80000040 ма(2) А
57 00000002 00000002 80000000 00000000 00000000 80000042 МА(2,3) У
58 00000000 00000002 80000000 80000000 00000000 00000000 МА(2,4) У
59 00000002 00000000 80000000 80000000 80000000 80000042 ма;(4) А
60 00000002 00000002 00000000 80000000 80000000 00000042 хоя 1
61 00000000 00000002 80000000 00000000 80000000 00000002 хоя 1
62 00000000 00000000 80000000 80000000 00000000 00000002 хоя 1
63 00000002 00000000 00000000 80000000 80000000 00000042 хоя 1
64 00000002 00000002 00000000 00000000 80000000 80000042 хоя 1
65 00000000 00000002 80000000 00000000 00000000 80000002 хоя 1
66 00000000 00000000 80000000 80000000 00000000 00000000 хоя 1
67 00000000 00000000 00000000 80000000 80000000 00000000 хоя 1
68 00000000 00000000 00000000 00000000 80000000 80000002 хоя 1
69 00000002 00000000 00000000 00000000 00000000 00000042 хоя 1
70 00000002 00000002 00000000 00000000 00000000 00000040 хоя 1
71 00000002 00000002 80000000 00000000 00000000 80000040 хоя 1
72 00000002 00000002 80000000 80000000 00000000 00000040 хоя 1
73 00000002 00000002 80000000 80000000 80000000 80000042 хоя 1
74 00000000 00000002 80000000 80000000 80000000 80000002 хоя 1
75 00000000 00000000 80000000 80000000 80000000 80000000 хоя 1
76 00000000 00000000 00000000 80000000 80000000 00000000 хоя 1
77 00000000 00000000 00000000 00000000 80000000 80000000 хоя 1
Итоговая вероятность: 2-32
Таким образом, исходя из данных табл. 13, можно сделать вывод о том, что при использовании вектора т0 мы можем найти коллизию для функции SHI2 с вероятностью р = 2-32. В работе [5] предлагается следующий подход к поиску двух сообщений W и ”^, для которых будет выработано одно и то же хэш-значение. Так как входное сообщение используется без изменений в первых раундах функции хэширования, то возможно разделить поиск сообщений на два этапа. Сначала необходимо найти первые 15 блоков сообщения W: ’^0) ... ”^14) таких, чтобы при использовании парного сообщения W’ = W © Ь функция 1® имела различия в тех же позициях, в которых имелись различия у входных параметров функции. Согласно табл. 13 вероятность такого события равна 2-3, следовательно, поиск не составит труда.
После того, как первые 15 блоков сообщения W будут найдены, необходимо перебрать достаточно много возможных значений для блока W(15) (естественно это число должно быть гораздо меньше 232, обычно около 10000 значений) с тем, чтобы оставшиеся раунды для сообщений W и W' выполнялись в соответствии с табл. 13. Согласно табл. 13, вероятность для нахождения такого сообщения W(15) равна 2-26. Так как первая часть поиска можно проделать один раз, после чего подобрать множество значений W(15), то можно сказать, что сложность анализа равна 226.
Пример двух сообщений W и W’, найденных в соответствии с вектором т0, удовлетворяющих данным табл. 13 и выдающих одинаковое хэш-значение 13341224 21а3е1с9 b667d2b2 2890013Ь 56013са9 при использовании функции SHI2, приведен в табл. 14.
Таблица 14
Пример двух сообщений W и W’, выдающих одинаковое хэш-значение
і W W, Ь і W W, Ь
0 (1,а6191Ь0) 1а6191Ь0 00000000 8 2270іаьа 2270fdbf 00000002
1 3с4а331с 3с4а331с 00000000 9 2а8090А0 aa8090f0 80000000
2 Ш28еа2 Ш28еа0 00000002 10 4b12fd98 cb12fd98 80000000
3 403Ь7609 403Ь7649 00000040 11 473сс7а1 с73сс7а1 80000000
4 062ес496 062ес494 00000002 12 002831а9 002831а9 00000000
5 48611са8 с8611са8 80000000 13 50fe1535 50fe1535 00000000
6 583401Ьс а83401Ъе 80000002 14 61ac0d3d 61ac0d3f 00000002
7 399879М Ь9987990 80000040 15 126700ес 126700ас 00000040
Нам осталось рассмотреть еще одно криптографическое преобразование, входящее в состав функции хэширования SHA-0, А именно: целочисленное сложение по модулю 232. Сложность данной операции заключается в том, что разница в битах сообщений может привести к возникновению переноса, а следовательно число ненулевых битов разности может возрасти после применения данной операции. Если суметь предотвратить возникновение переноса, то дальнейший анализ можно будет провести по рассмотренным ранее схемам. На первый взгляд может показаться, что любой ненулевой бит разности может привести к возникновению переноса. Однако необходимо вспомнить, что при изменении бита необходи-
(1+4)
мо провести коррекцию в битах ’31(1+3) ’31(1+4) ’31(1' '7, то есть значение корректирующей разности будет иметь единицу в самом старшем бите, а все остальные биты разности будут равны нулю. В работах [6, 7] нами были рассмотрены свойства операции целочисленного сложения по модулю 2П и выявлены ее основные свойства, которые сводятся к следующему:
1. Любое значение входной разности может отобразиться само в себя, то есть остаться неизменным. Вероятность такого отображения определяется следующим образом:
1
р = — , если входная разность Двх < 2П 2к
Р =
1
к-1
если входная разность Двх > 2П
(10)
(11)
где к - число ненулевых позиций входной разности;
2. Для входной разности, равной Двх=0, на выходе преобразования будет значение выходной разности Двых = 0 с вероятностью р=1.
3. Для входной разности Двх = 2П-1 на выходе преобразования будет значение выходной разности Двых = 2П-1 с вероятностью р=1.
Таким образом, использование корректирующих разностей для блоков W;
(1+3)
»азом, испо^хьзование корректиру ющих разностей для блоков и 31
’31(1+4) ’31(1+4) будет соответствовать третьему пункту правил преобразования разностей при целочисленном сложении, а значит, не будет оказывать влияния на изменение итоговой разности.
Предположим, что изначально бит И1(1) равен 0, а бит И’1(1) равен 1. Если при операции целочисленного сложения не возникнет переноса и разность останется неизмененной (что в соответствии с первым пунктом правил произойдет с вероятностью 1/2), тогда бит а1(1+1) будет равен 0, и соответственно бит а'1(1+1) будет равен 1.
Рассматривая вычисление блока а
(1+2)
можно увидеть, что бит И6(1+1) должен быть
равен 1 (и соответственно бит И’6(1+1) должен быть равен 0) для того, чтобы при
целочисленном сложении не возникло переноса и разность осталась неизменной. Если данное условие будет выполнено, то коррекция всегда будет проходить без возникновения переноса. Самым сложным моментом является коррекция при вычислении значения a(l+3). Для этого, как и раньше, примем, что бит Wi(l+2) равен 1, а бит W’1(l2) равен 0. В этом случае коррекция пройдет хорошо в том случае, если бит i=1 в выходном значении функции f® будет равен биту b1(l2) (или биту a1(l1), так как они равны). Для этого необходимо, чтобы биты i=31 блоков с(1+2) и d(l2) были равны друг другу (с31(1+2) = d31 ®2)), что может случиться с вероятностью А.
В работе [5] отмечается, что если в блоке сообщения происходит изменение битов от 0 к 1, то оно должно быть скорректировано соответствующим изменением битов от 1 к 0. И наоборот, если происходит изменение битов от 1 к 0, то оно должно быть скорректировано соответствующим изменением битов от 0.
В работе [5] представлен пример построения вектора m0 и нахождения двух сообщений W и W', вырабатывающих одинаковые хэш-значения с использованием функции SHI3. Функция SHI3 представляет собой вариант функции SHI1, рассмотренной нами ранее, в котором элементы складываются не по модулю два, а по модулю 232, как это и должно быть в функции SHA.
Мы рассмотрели основные приемы дифференциального криптоанализа применительно к криптографическим примитивам, входящим в состав функций хэширования семейства SHA. Следующим этапом является проецирование данных приемов и способов на действительные функции хэширования SHA.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Основы: функции хэширования [Электронный ресурс], 03.06.2009. - http://www.cryptofaq.ru, свободный.
2. Xiaoyun Wang, Hongbo Yu., Yiqun Lisa Yin, Efficient Collision Search Attacks on SHA-0 [Электронный ресурс]. - http://citeseerx.ist.psu.edu, свободный.
3. XiaoyunWang, Hongbo Yu., How to BreakMD5 and Other Hash Functions [Электронный ресурс]. - http://citeseerx.ist.psu.edu, свободный.
4. XiaoyunWang, Yiqun Lisa Yin, Hongbo Yu., Finding Collisions in the Full SHA-1 [Электронный ресурс]. - http://people.csail.mit.edu/yiqun/pub.htm, свободный.
5. Florent Chabaund, Antoine Joux, Differential Collisions of SHA-0 [Электронный ресурс]. - 19 June, 2000. - http://fchabaud.free.fr /English/Publications/, свободный.
6. Бабенко Л.К. Ищукова Е.А. Применение рекурсивного алгоритма поиска в Б-деревьях для дифференциального криптоанализа алгоритма шифрования ГОСТ 28147-89 // Материалы IX Международной научно-практической конференции «Информационная безопасность». Часть 2. - Таганрог; Изд-во: ТТИ ЮФУ, 2007. - С. 92-97.
7. Babenko L., Ischukova E. Differential Analysis GOST Encryption Algorithm // Proceedings of the 3rd Internaternational Conference of Security of Information and Networks (SIN 2010), ACM, New York, 2010. - Р.149-157.
Бабенко Людмила Климентьевна
Технологический институт федерального государственного автономного образовательного учреждения высшего профессионального образования «Южный федеральный университет» в г. Таганроге.
E-mail: [email protected].
347928, г. Таганрог, ул. Чехова, 2, корпус "И".
Тел.: 88634312018.
Ищукова Евгения Александровна
E-mail: [email protected].
Тел.: 88634371905.
Babenko Lyudmila Klimentevna
Taganrog Institute of Technology - Federal State-Owned Autonomy Educational Establishment of Higher Vocational Education “Southern Federal University”.
E-mail: [email protected].
Block “I”, 2, Chehov street, Taganrog, 347928, Russia.
Phone: +78634312018.
Ischukova Evgeniya Aleksandrovna
E-mail: [email protected].
Phone: +78634371905.
УДК 004.421.4
Л.К. Бабенко, И.Д. Сидоров, А.С. Кириллов
УСКОРЕНИЕ ВЫЧИСЛЕНИЙ ДИСКРЕТНОГО ЛОГАРИФМА С ПОМОЩЬЮ ТЕХНОЛОГИИ CUDA
Рассматриваются возможности дальнейшего ускорения реализации дискретного логарифмирования. Анализируется возможность применения технологии CUDA для ускорения вычислений на различных этапах. Рассматривается эффективная реализация необходимых арифметических операций. Приведены графики, построенные по результатам проведенных экспериментов.
Криптоанализ; дискретное логарифмирование; технология CUDA; параллельное программирование; вычислительно сложные задачи.
L.K. Babenko, I.D. Sidorov, A.S. Kirillov
SPEEDING UP DISCRETE LOG COMPUTATIONS USING CUDA
TECHNOLOGY
Different possibilities for further discrete log performance increase are considered. The capabilities of CUDA technology for speeding up different parts of computation process are analyzed. Here we represent effective implementation of needful arithmetic operations. Some graphic materials illustrate results of experiments.
Cryptanalysis; discrete log problem; CUDA technology; parallel programming; computation intensive tasks.
Введение. Постановка задачи. В настоящее время широко распространены алгоритмы шифрования и цифровой подписи (такие, как Эль-Гамаль, DSA, ГОСТ), стойкость которых основана на сложности решения задачи дискретного логарифмирования в мультипликативной группе числового поля и в группе точек эллиптической кривой над конечным полем. Для произвольной циклической группы G эта задача формулируется следующим образом: по известным a, b £ G найти такой
логарифм х, что ab = X .
Особенностью данной задачи является быстрый рост времени выполнения при увеличении размера задачи. Авторами был разработан ряд эффективных параллельных алгоритмов, предназначенных для ускорения решения задачи дискет-ного логарифмирования в различных группах с помощью распределённых многопроцессорных вычислений. Алгоритмы, предназначенные для мультипликативной группы числового поля, рассматриваются в работах [1,2], а алгоритмы для группы точек эллиптической кривой - в работе [3].