Алгоритм обработки одного блока сообщения
Сообщение обрабатывается блоками по 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