ГОСТ Р 34.11-2012

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Криптографическая
хеш-функция
Название

Стрибог

Разработчики

ФСБ России,
ОАО «ИнфоТеКС»

Опубликован

2012

Стандарты

ГОСТ Р 34.11-2012, RFC 6986

Размер хеша

256 или 512 бит

Число раундов

12

Тип

хеш-функция

ГОСТ Р 34.11-2012 «Информационная технология. Криптографическая защита информации. Функция хэширования» — действующий российский криптографический стандарт, определяющий алгоритм и процедуру вычисления хеш-функции. Разработан Центром защиты информации и специальной связи ФСБ России с участием ОАО «ИнфоТеКС» и введенный в действие 1 января 2013 года.

Размер хеша — 256 или 512 бит; размер блока входных данных — 512 бит.

Стандарт определяет алгоритм и процедуру вычисления хеш-функции для последовательности символов. Этот стандарт разработан и введён в качестве замены устаревшему стандарту ГОСТ Р 34.11-94:

Необходимость разработки <…> вызвана потребностью в создании хеш-функции, соответствующей современным требованиям к криптографической стойкости и требованиям стандарта ГОСТ Р 34.10-2012 на электронную цифровую подпись.

— Текст стандарта. Введение.

Название хеш-функции — «Стрибог», по имени славянского божества, — часто используется вместо официального названия стандарта, хотя в его тексте явно не упоминается (см. ниже).

Концепции построения хеш-функции «Стрибог»[править | править вики-текст]

В соответствии с требованиями высказанными на конференции РусКрипто-2010, в работе, посвящённой новой хеш-функции[1]:

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

В той же работе вводятся «универсальные» требования, касающиеся трудоемкости атак на хеш-функцию:

Задача Сложность
построение прообраза 2n
построение коллизии 2n/2
построение второго прообраза 2n/(длина сообщения)
удлинение прообраза 2n

Сравнение ГОСТ Р 34.11-2012 и ГОСТ Р 34.11-94[править | править вики-текст]

  • В ГОСТ Р 34.11-2012 размер блоков сообщения и внутреннего состояния хеш-функции составляет 512 бит против 256 бит в ГОСТ Р 34.11-94.
  • Новый стандарт определяет две функции хеширования с длинами хеш-кода 256 и 512 бит, в то время как в старом стандарте длина хеш-кода может быть только 256 бит. Возможность вариации выходного хеша может быть полезна в случае встроенных реализаций с ограниченными ресурсами или наличия каких-то дополнительных требований в области криптографии.
  • Основное отличие современной хеш-функции от старой — функция сжатия. В ГОСТ Р 34.11-2012 используется функции сжатия, в основе которой лежат три преобразования: нелинейное биективное преобразование (обозначается S), перестановка байт (обозначается P), линейное преобразование (обозначается L). В ГОСТ Р 34.11-94 используется функция сжатия, основанная на симметричном блочном шифре ГОСТ Р 28147-89, также эта функция использует операции перемешивания.
  • При вычислении новой хеш-функции, если размер сообщения не кратен размеру обрабатываемого блока (для современного стандарта — 512 бит, для старого стандарта — 256 бит), то такой блок дополняется вектором (00 … 01). При вычислении старой хеш-функции неполный блок дополняется значением (00 … 0). Считается[кем?], что дополнение (00 … 01) лучше, чем (00 … 0), с криптографической точки зрения.
  • Еще одно отличие состоит в том, что стандарт ГОСТ Р 34.11-94 не определял значение инициализационного вектора, в то время как в стандарте ГОСТ Р 34.11-2012 значение инициализационного вектора фиксировано и определено в стандарте: для хеш-функции с размером выходного хеша 512 бит это вектор (00 … 0), для хеш-функции с размером выходного хеш-кода 256 бит — (000000010 … 100000001) (все байты равны 1).

Функция сжатия[править | править вики-текст]

В хеш-функции важным элементом является функция сжатия. В ГОСТ Р 34.11-2012 функция сжатия основана на конструкции Миагучи-Пренеля (Miyaguchi-Preneel). Ниже приведена схема конструкции Миагучи-Пренеля: h, m — вектора поступающие на вход функции сжатия; g(h, m) — результат функции сжатия; E — блочный шифр с длиной блока и ключа 512 бит. В качестве блочного шифра в хеш-функции ГОСТ Р 34.11-2012 взят XSPL-шифр. Этот шифр состоит из следующих преобразований:

  • сложение по модулю 2;
  • преобразование замены или подстановки. Обозначается S-преобразование;
  • преобразование перестановки. Обозначается P-преобразование;
  • линейное преобразование. Обозначается L-преобразование.

Преобразования используемые в новой хеш-функции должны быть хорошо изучены. Поэтому в блочном шифре E используются преобразования X, S, P, L, которые хорошо изучены.

Важным параметром блочного шифра является то, как выбирается ключ, который будет использовать на каждом раунде. В блочном шифре, используемом в ГОСТ Р 34.11-2012, ключи , , … , для каждого из 13 раундов генерируются с помощью самой функции шифрования.

, , … ,  — итерационные константы, которые являются 512 битовыми векторам. Их значения указаны в соответствующем разделе стандарта.

Описание[править | править вики-текст]

В основу хеш-функции положена итерационная конструкция Меркла-Дамгарда с использованием MD-усиления. Под MD-усилением понимается дополнение неполного блока при вычислении хеш-функции до полного путём добавления вектора (0 … 01) такой длины, чтобы получился полный блок. Из дополнительных элементов нужно отметить следующие:

  • завершающее преобразование, которое заключается в том, что функция сжатия применяется к контрольной сумме всех блоков сообщения по модулю 2512;
  • при вычислении хеш-кода на каждой итерации применяются разные функции сжатия. Можно сказать, что функция сжатия зависит от номера итерации.

Описанные выше решения позволяют противостоять многим известным атакам.

Кратко описание хеш-функции ГОСТ Р 34.11-2012 можно представить следующим образом. На вход хеш-функции подается сообщение произвольного размера. Далее сообщение разбивается на блоки по 512 бит, если размер сообщения не кратен 512, то оно дополняется необходимым количеством бит. Потом итерационно используется функции сжатия, в результате действия которой обновляется внутреннее состояние хеш-функции. Также вычисляется контрольная сумма блоков и число обработанных бит. Когда обработаны все блоки исходного сообщения, производятся еще два вычисления, которые завершают вычисление хеш-функции:

  • обработка функцией сжатия блока с общей длиной сообщения.
  • обработка функцией сжатия блока с контрольной суммой.

В работе Александра Казимирова и Валентины Казимировой[2] приведена графическая иллюстрация вычисления хеш-функции.

Анализ[править | править вики-текст]

Криптостойкость[править | править вики-текст]

Криптоанализ старого стандарта выявил некоторые его слабые стороны с теоретической точки зрения. Так в одной из работ[3], посвящённых криптоанализу ГОСТ Р 34.11-94, было выявлено, что сложность алгоритма построения прообраза оценивается в 2192 вычислений функций сжатия, коллизии 2105, что меньше «универсальных» оценок, которые для ГОСТ Р 34.11-94 равны 2256 и 2128. Хотя по состоянию на 2013 год нет большого числа работ, посвящённых криптостойкости новой хеш-функции, исходя из конструкции новой хеш-функции, можно сделать некоторые выводы о её криптостойкости и предположить[источник не указан 387 дней], что её криптостойкость будет выше, чем у ГОСТ Р 34.11-94:

  • в разделе «Описание» из схемы видно, что все блоки сообщения суммируются по модулю 2512 и уже результат суммирования всех блоков подается на вход завершающего этапа (stage3). Благодаря тому, что здесь суммирование — это не побитовое сложение, получается защита от следующих атак:
  • построение мультиколлизий;
  • удлинение прообраза;
  • дифференциальный криптоанализ;
  • в функции сжатия используется конструкция Миагучи-Пренели, это обеспечивает защиту от атаки, основанную на фиксированных точках, так как для конструкции Миагучи-Пренели не найдено способов (легких) для поиска фиксированных точек;
  • на каждой итерации при вычислении хеш-кода используются различные константы. Это затрудняет атаки на основе связанных и разностных связанных ключей, атаки скольжения и отражения.

В 2013 году на сайте «Cryptology ePrint Archive: Listing for 2013» было опубликовано две статьи, посвящённых криптоанализу новой хеш-функции. В статье «Rebound attack on Stribog»[4] исследуется устойчивость хеш-функции по отношению к атаке, называемой «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»[5] рассматривается стойкость хеш-функции (с уменьшенным количеством раундов) по отношению к интегральному криптоанализу. Авторами при исследовании функции сжатия удалось найти дифференциал за 4 раунда при вычислении в прямом направлении и за 3,5 раунда при вычислении в обратном направлении. Также было выяснено, что атака нахождения дифференциала на хеш-функцию с числом раундов 6 и 7 требует 264 и 2120 среднераундовых значений, соответственно.

Для изучения криптостойкости новой хеш-функции компания «ИнфоТеКС» в ноябре 2013 года объявила о старте конкурса[6]; он завершился в мае 2015 года[7]. Победителем стала работа «The Usage of Counter Revisited: Second-Preimage Attack on New Russian Standardized Hash Function», в которой авторы представили атаку нахождения второго прообраза для хеш-функции «Стрибог-512», требующую 2266 вызовов функции сжатия для сообщений длиннее 2259 блоков[8].

На конференции Crypto-2015 Алекс Бирюков, Лео Перрин и Алексей Удовенко представили доклад, в котором говорится о том, что значения S-блока шифра «Кузнечик» и хеш-функции Стрибог не являются (псевдо)случайными числами, а сгенерированы на основе скрытого алгоритма, который докладчикам удалось восстановить методами обратного проектирования[9][10].

Быстродействие[править | править вики-текст]

На сайте, посвящённом VI Международной конференции «Параллельные вычисления и задачи управления» (PACO’2012) представлена статья П. А. Лебедева «Сравнение старого и нового стандартов РФ на криптографическую хэш-функцию на ЦП и графических процессорах NVIDIA», в которой проводится сравнение быстродействия семейства криптографических хеш-функций ГОСТ Р 34.11-94 и ГОСТ Р 34.11-2012 на процессорах архитектуры x86_64 и видеокартах NVIDIA с поддержкой технологии CUDA[11].

Для сравнения быстродействия на процессоре архитектуры x86_64 были взяты 4 разных реализации хеш-функций:

  • реализация ГОСТ Р 34.11-1994 из криптографического пакета OpenSSL (версия 1.0.1c) с открытым исходным кодом. В этой реализации нет алгоритмических и программных оптимизаций;
  • реализация ГОСТ Р 34.11-1994 в программе RHash (версия 1.2.9). В этой реализации есть алгоритмические и программные оптимизации, в том числе ассемблерные оптимизации;
  • реализация ГОСТ Р 34.11-2012, написанная Александром Казимировым[12];
  • реализации ГОСТ Р 34.11-1994 и ГОСТ Р 34.11-2012, написанные П. А. Лебедевым.

Использовался процессор Intel Core i7-920 CPU, разогнанный до 2,67 ГГц. Результаты производительности:

ГОСТ Р 34.11-1994 ГОСТ Р 34.11-2012
Реализация № МБ/с Тактов/байт МБ/с Тактов/байт
1 18 143 - -
2 49 52 - -
3 - - 38 67
4 64 40 94 27

Сравнение быстродействия старого и нового стандартов хеш-функций на GPU проводилось между реализациями П. А. Лебедева. Использовалась видеокарта NVIDIA GTX 580. Результаты производительности (8192 потока данных по 16 КБ):

ГОСТ Р 34.11-1994 ГОСТ Р 34.11-2012
МБ/с Тактов/байт МБ/с Тактов/байт
1697 - 608 -

На основании этих результатов сделан вывод, что хеш-функция ГОСТ Р 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 байт из примера 2. На ЭВМ архитектуры x86 используется метод Little endian, и подобное число в памяти будет представлено в «перевёрнутом» виде. Если преобразовать этот массив байт в текст по правилам кодировки Windows-1251, то получится: «Се ветри, Стрибожи внуци, веютъ с моря стрелами на храбрыя плъкы Игоревы», что является немного изменённой строчкой из Слова о полку Игореве.

Примечания[править | править вики-текст]

  1. Матюхин Д. В., Шишкин В. А., Рудский В. И. Перспективный алгоритм хеширования // Доклад на конференции РусКрипто’2010,2010.
  2. http://eprint.iacr.org/2013/556.pdf
  3. «F. Mendel, N. Pramstaller, C. Rechberger, M. Kontak, J. Szmidt» CRYPTO 2008
  4. Riham AlTawy, Aleksandar Kircanski and Amr M. Youssef. Rebound attacks on Stribog (2013).
  5. Riham AlTawy and Amr M. Youssef. Integral Distinguishers for Reduced-round Stribog (2013).
  6. http://www.streebog.info/ Открытый конкурс по исследованию функции
  7. http://www.streebog.info/news/opredeleny-pobediteli-konkursa-po-issledovaniyu-khesh-funktsii-stribog/ Определены победители конкурса по исследованию хеш-функции «Стрибог»
  8. Jian Guo, Jérémy Jean, Gaëtan Leurent, Thomas Peyrin, Lei Wang. The Usage of Counter Revisited: Second-Preimage Attack on New Russian Standardized Hash Function (2014).
  9. Alex Biryukov, Léo Perrin, Aleksei Udovenko. The Secret Structure of the S-Box of Streebog, Kuznechik and Stribob (2015).
  10. Alex Biryukov, Léo Perrin, Aleksei Udovenko. Reverse Engineering the S-Box of Streebog, Kuznechik and Stribob (2015).
  11. [1]
  12. GitHub - okazymyrov/stribog

Ссылки[править | править вики-текст]