В течение 2010-2011 годов был разработан новый алгоритм бес- ключевого хэширования, получивший название «Стрибог» в честь языческого божества восточных славян, бога стремительного ветра, разносящего и распределяющего блага между людьми.
В 2012 году данный алгоритм был принят в качестве нового стандарта Российской Федерации ГОСТ Р 34.11-2012. Основные отличия нового алгоритма от предыдущего заключаются в следующем.
- 1. Функция позволяет вычислять код целостности длины либо п = 512 бит, либо п = 256, используя при этом единый алгоритм.
- 2. Размер обрабатываемого блока входного сообщения увеличен вдвое, то есть b — 512.
- 3. В основе одношаговой функции сжатия лежит блочный шифр с длиной блока 512 бит, построенный на основе SP- сети, см. раздел 7.5.
- 4. Начальное значение ho зафиксированно и принимает различные значения для кодов целостности длины 256 или 512 бит.
Вместе с тем функция «Стрибог» имеет общие черты с предыдущим алгоритмом хэширования, а именно:
- 1. в одношаговой функции сжатия / используется процедура развертки ключей; ключи, как и раньше, зависят от значений блоков входного сообщения;
- 2. завершающее преобразование д использует длину хэшируемого сообщения, а также контрольную сумму по модулю 2°12 значений блоков входного сообщения.
Опишем функцию «Стрибог» более подробно. Для этого рассмотрим перестановку т Е <s(,i, действующую="" на="" множестве="" f:]<sup="">12 следующим образом:</s(,i,>
и задаваемую вектором
Рассмотрим подстановку 7г : F§ F®, задающую нелинейное биективное отображение множества F<> в себя и определяемую равенством
Также определим линейное отображение I : F®4 —> F|4, представляющее собой умножение вектора у Е F^4 на двоичную матрицу В = (,btj) € GLM(2):
Ниже мы приводим точное значение матрицы В, взятое нами из текста стандарта ГОСТР Р 34.11-2012. В каждой строке записано 4 строки матрицы В, при этом в строке с номером г, г = 0,, 15, записаны строки матрицы В с номерами 4г + j, j — 0,..., 3 в следующем порядке (слева направо): 4г, 4г + 1, 4г + 2, 4г + 3.
Введенные нами перестановка т, подстановка 7г и линейное преобразование I используются в алгоритме «Стрибог» для определения следующих преобразований над векторами длины 512 бит:
где XI,...,ж64 е Fl, уъ ? ? •, у& е Ff4.
Кроме того, мы определим величины s,aj € Z2si2, j — l,...,г, представляющие собой различные контрольные суммы входного сообщения а = «111... ||аг:
Теперь мы можем определить одношаговую функцию сжатия, представляющую собой вариант функции Миягучи-Принеля, примененный к некоторому блочному шифру Е(к,а):
где величина <т, определена равенством (8.6).
Для описания блочного шифра, используемого внутри функции /, нам надо определить алгоритм развертки ключа к и алгоритм зашифрования Е(к,а).
Алгоритм развертки ключа к заключается в определении значений fci,...,&1з € F212 в соответствии со следующими равенствами:
где С2,...,схз € F212 — фиксированные константы, значения которых могут быть найдены в тексте стандарта ГОСТ Р 34.11-2012.
Алгоритм зашифрования Е(к, а) состоит из двенадцати одинаковых раундов R(k, а) : F25i2 х F212 —> F212 и завершающего преобразования W(k,a) : F25i2 х F212 —> F212, определяемых равенствами
Легко видеть, что раупдовое преобразование R используется и в алгоритме развертки ключа. Суммируя, мы можем записать алгоритм зашифрования в виде
Для полного описания бесключевой функции хэширования «Стрибог», определим завершающее преобразование д:
где s и аг определены равенствами (8.5) и (8.6) соответственно, а вектор а* определен равенством
Таким образом, бесключевая функция хэширования «Стрибог» определяется равенством (8.2), в котором одношаговая функция / удовлетворяет равенству (8.7), а завершающее преобразование д удовлетворяет равенству (8.8).
Описанная нами функция позволяет вырабатывать код целостности длиной 512 бит. Для того чтобы выработать код целостности длины 256 бит, необходимо выработать код длины 512 бит, а потом взять его старшие 256 разрядов, то есть
где hi G F2, г = 1,...,512.