Алгоритм обработки одного блока сообщения
Сообщение обрабатывается блоками по 256 бит
справа налево.
Каждый блок сообщения
обрабатывается по следующему алгоритму.
Генерация четырех ключей длиной 256 бит каждый.
Шифрование 64-битных значений промежуточного хэш-кода H на ключах Ki(i = 1, 2, 3, 4) с использованием алгоритма ГОСТ 28147 в режиме простой замены.
Перемешивание результата шифрования.
Для генерации ключей используются следующие данные:
промежуточное значение хэш-кода Н длиной 256 бит;
текущий обрабатываемый блок сообщения М длиной 256 бит;
параметры - три значения С2, С3 и С4 длиной 256 бит следующего вида: С2 и С4 состоят из одних нулей, а С3 равно
де степень обозначает количество повторений 0
или 1.
Используются две формулы, определяющие
перестановку и сдвиг.
Перестановка Р битов определяется следующим
образом: каждое 256-битное значение
рассматривается как последовательность
тридцати двух 8-битных значений.
Перестановка Р элементов 256-битной
последовательности выполняется по формуле , где x -
порядковый номер 8-битного значения в исходной
последовательности; y - порядковый номер 8-битного
значения в результирующей последовательности.
Сдвиг А определяется по формуле
A (x) = (x1 x2) || x4 || x3 || x2
Где
xi - соответствующие 64 бита
256-битного значения х,
|| - обозначает конкатенацию.
Присваиваются следующие начальные
значения:
i = 1, U = H, V = M.
W = U V, K1 = Р (W)
Ключи K2, K3, K4 вычисляются последовательно по следующему алгоритму:
U = A(U) Сi,
V = A(A(V)),
W = U V,
Ki = Р(W)
Далее выполняется шифрование 64-битных элементов текущего значения хэш-кода Н с ключами K1, K2, K3 и K4. При этом хэш-код Н рассматривается как последовательность 64-битных значений:
H = h4 || h3 || h2 || h1
ыполняется шифрование алгоритмом ГОСТ 28147:
si = Eki [hi]
i = 1, 2, 3, 4
S = s1 || s2 || s3
|| s4
Наконец на заключительном этапе обработки очередного блока выполняется перемешивание полученной последовательности. 256-битное значение рассматривается как последовательность шестнадцати 16-битных значений. Сдвиг обозначается и определяется следующим образом:
16 || 15 || ... || 1 - исходное значение
1 2 3 4 13 16 || 16 || ... || 2 - результирующее значение
Результирующее значение хэш-кода определяется следующим образом:
X (M, H) = (H (M (S)))
де
H - предыдущее значение хэш-кода,
М - текущий обрабатываемый блок,
- i-ая
степень преобразования .
АИСС БКБ, www.orioncom.ru, tel (495) 783-5510