Стрибог (хеш-функция)
«Стрибог» (англ. STREEBOG[1]) — криптографический алгоритм вычисления хеш-функции с размером блока входных данных 512 бит и размером хеш-кода 256 или 512 бит. Описывается в ГОСТ 34.11-2018 «Информационная технология. Криптографическая защита информации. Функция хэширования» — действующем межгосударственном криптографическом стандарте. Разработан Центром защиты информации и специальной связи ФСБ России с участием ОАО «ИнфоТеКС» на основе национального стандарта Российской Федерации ГОСТ Р 34.11-2012 и введен в действие с 1 июня 2019 года приказом Росстандарта № 1060-ст от 4 декабря 2018 года. Стандарт ГОСТ Р 34.11-2012 разработан и введён в качестве замены устаревшему стандарту ГОСТ Р 34.11-94:
Название хеш-функции — «Стрибог», по имени славянского божества, — часто используется вместо официального названия стандарта, хотя в его тексте явно не упоминается (см. ниже). Концепции построения хэш-функции «Стрибог»В соответствии с требованиями, высказанными на конференции РусКрипто-2010, в работе, посвящённой новой хеш-функции[2]:
В той же работе вводятся «универсальные» требования, касающиеся трудоемкости атак на хеш-функцию:
Сравнение ГОСТ Р 34.11-2012 и ГОСТ Р 34.11-94
Функция сжатияВ хеш-функции важным элементом является функция сжатия. В ГОСТ Р 34.11-2012 функция сжатия основана на конструкции Миагути — Пренеля. Схема конструкции Миагути — Пренеля: h, m — вектора, поступающие на вход функции сжатия; g(h, m) — результат функции сжатия; E — блочный шифр с длиной блока и ключа 512 бит. В качестве блочного шифра в хеш-функции ГОСТ Р 34.11-2012 взят XSPL-шифр. Этот шифр состоит из следующих преобразований:
Преобразования, используемые в новой хеш-функции, должны быть хорошо изучены. Поэтому в блочном шифре E используются преобразования X, S, P, L, которые хорошо изучены. Важным параметром блочного шифра является то, как выбирается ключ, который будет использовать на каждом раунде. В блочном шифре, используемом в ГОСТ Р 34.11-2012, ключи , , … , для каждого из 13 раундов генерируются с помощью самой функции шифрования. , , … , — итерационные константы, которые являются 512 битовыми векторам. Их значения указаны в соответствующем разделе стандарта. ОписаниеВ основу хеш-функции положена итерационная конструкция Меркла — Дамгора с использованием MD-усиления. Под MD-усилением понимается дополнение неполного блока при вычислении хеш-функции до полного путём добавления вектора (0 … 01) такой длины, чтобы получился полный блок. Из дополнительных элементов нужно отметить следующие:
Описанные выше решения позволяют противостоять многим известным атакам. Кратко описание хеш-функции ГОСТ Р 34.11-2012 можно представить следующим образом. На вход хеш-функции подается сообщение произвольного размера. Далее сообщение разбивается на блоки по 512 бит, если размер сообщения не кратен 512, то оно дополняется необходимым количеством бит. Потом итерационно используется функция сжатия, в результате действия которой обновляется внутреннее состояние хеш-функции. Также вычисляется контрольная сумма блоков и число обработанных бит. Когда обработаны все блоки исходного сообщения, производятся ещё два вычисления, которые завершают вычисление хеш-функции:
В работе Александра Казимирова и Валентины Казимировой[5] приведена графическая иллюстрация вычисления хеш-функции. АнализКриптостойкостьКриптоанализ старого стандарта выявил некоторые его слабые стороны с теоретической точки зрения. Так в одной из работ[6], посвящённых криптоанализу ГОСТ Р 34.11-94, было выявлено, что сложность алгоритма построения прообраза оценивается в 2192 вычислений функций сжатия, коллизии 2105, что меньше «универсальных» оценок, которые для ГОСТ Р 34.11-94 равны 2256 и 2128. Хотя по состоянию на 2013 год нет большого числа работ, посвящённых криптостойкости новой хеш-функции, исходя из конструкции новой хеш-функции, можно сделать некоторые выводы о её криптостойкости и предположить[источник не указан 3249 дней], что её криптостойкость будет выше, чем у ГОСТ Р 34.11-94:
В 2013 году на сайте «Cryptology ePrint Archive: Listing for 2013» было опубликовано две статьи, посвящённых криптоанализу новой хеш-функции. В статье «Rebound attack on Stribog»[7] исследуется устойчивость хеш-функции по отношению к атаке, называемой «The Rebound attack»; в основе этой атаки лежит «rotation cryptanalysis» и дифференциальный криптоанализ. Криптоаналитики при поиске уязвимостей использовали метод, называемый «free-start». Это означает, что при вычислении хеш-кода фиксируется некоторое состояние хеш-функции и дальше вычисления могут идти как в сторону вычисления хеш-кода, так и в сторону вычисления сообщения. Криптоаналитики сумели добиться коллизии за 5 раундов и была получена так называемая «near collision» (это означает, что были найдены два сообщения, хеш-коды которых отличны в малом количестве бит) при использовании 7,75 раунда. Также было установлено, что схема, по которой выбираются ключи для каждого раунда, добавляет устойчивости функции сжатия. Однако было показано, что коллизия возможна за 7,75 раунда, а «near collision» — за 8,75 и 9,75, соответственно. В статье «Integral Distinguishers for Reduced-round Stribog»[8] рассматривается стойкость хеш-функции (с уменьшенным количеством раундов) по отношению к интегральному криптоанализу. Авторами при исследовании функции сжатия удалось найти дифференциал за 4 раунда при вычислении в прямом направлении и за 3,5 раунда при вычислении в обратном направлении. Также было выяснено, что атака нахождения дифференциала на хеш-функцию с числом раундов 6 и 7 требует 264 и 2120 среднераундовых значений, соответственно. Для изучения криптостойкости новой хеш-функции компания «ИнфоТеКС» в ноябре 2013 года объявила о старте конкурса[9]; он завершился в мае 2015 года[10]. Победителем стала работа «The Usage of Counter Revisited: Second-Preimage Attack on New Russian Standardized Hash Function», в которой авторы представили атаку нахождения второго прообраза для хеш-функции «Стрибог-512», требующую 2266 вызовов функции сжатия для сообщений длиннее 2259 блоков[11]. На конференции Crypto-2015 Алекс Бирюков, Лео Перрин и Алексей Удовенко представили доклад, в котором говорится о том, что значения S-блока шифра «Кузнечик» и хеш-функции Стрибог не являются (псевдо)случайными числами, а сгенерированы на основе скрытого алгоритма, который докладчикам удалось восстановить методами обратного проектирования[12][13]. 29 января 2019 года была опубликовано исследование «Partitions in the S-Box of Streebog and Kuznyechik»[14], которое опровергает заявление авторов о случайном выборе параметров таблиц замен в алгоритмах Стрибог и Кузнечик[15]. БыстродействиеНа сайте, посвящённом VI Международной конференции «Параллельные вычисления и задачи управления» (PACO’2012), представлена статья П. А. Лебедева «Сравнение старого и нового стандартов РФ на криптографическую хеш-функцию на ЦП и графических процессорах NVIDIA», в которой проводится сравнение быстродействия семейства криптографических хеш-функций ГОСТ Р 34.11-94 и ГОСТ Р 34.11-2012 на процессорах архитектуры x86_64 и видеокартах NVIDIA с поддержкой технологии CUDA[16]. Для сравнения быстродействия на процессоре архитектуры x86_64 были взяты 4 разных реализации хеш-функций:
Использовался процессор Intel Core i7-920 CPU на базовой частоте 2,67 ГГц. Результаты производительности:
Сравнение быстродействия старого и нового стандартов хеш-функций на GPU проводилось между реализациями П. А. Лебедева. Использовалась видеокарта NVIDIA GTX 580. Результаты производительности (8192 потока данных по 16 КБ):
На основании этих результатов сделан вывод, что хеш-функция ГОСТ Р 34.11-2012 может быть в два раза быстрее хеш-функции ГОСТ Р 34.11-94 на современных процессорах, но медленнее на графических картах и системах с ограниченными ресурсами. Такие результаты производительности можно объяснить тем, что при вычислении новой хеш-функции используются только сложения по модулю 2 и инструкции пересылки данных. Старая хеш-функции содержит много инструкций перемешивания, которые не лучшим образом отображаются на набор команд ЦП. Но увеличенный размер состояний и таблиц подстановки хеш-функции ГОСТ Р 34.11-2012 делает её медленней на высокопараллельных вычислительных средствах, таких как графические процессоры. Также исследование производительности новой хеш-функции было проведено её разработчиками на 64-битном процессоре Intel Xeon E5335 2 ГГц. Использовалось одно ядро. Производительность хеш-функции ГОСТ Р 34.11-2012 составила 51 такт процессора на 1 байт хешируемых данных (примерно 40 MБ/с). Полученный результат на 20 % лучше, чем у старой хеш-функции ГОСТ Р 34.11-94. Интересные фактыВ конце текста стандарта приведены примеры пошагового вычисления хеша для нескольких исходных значений. Одно из таких значений — шестнадцатеричное число M2 длины 576 бит (72 байта) из примера 2:
На ЭВМ архитектуры x86 используется порядок байт от младшего к старшему, и подобное число в памяти будет представлено в «перевёрнутом» виде. Если преобразовать этот массив байт в текст в кодировке Windows-1251, то получится немного изменённая строчка из Слова о полку Игореве:
В ответ на критическую статью «Watch your Constants: Malicious Streebog»[18] комитет ТК26 выпустил заметку «Об алгоритме выработки констант функции хэширования „Стрибог“» [19] [20] в которой пояснено, что константы раундовых ключей строились как преобразование входных строк с помощью «Стрибог»-подобной хэш функции. Если преобразовать эти входные строки в текст в кодировке Windows-1251, то получатся имена авторов стандарта:
ПрименениеАлгоритм используется в реализации ДЭГ на выборах президента России.[21] Примечания
Ссылки
|
Portal di Ensiklopedia Dunia