Алгоритм обработки одного блока сообщения

 

Сообщение обрабатывается блоками по 256 бит справа налево.

     Каждый блок сообщения обрабатывается по следующему алгоритму.

ball1.gif (146 bytes)     Генерация четырех ключей длиной 256 бит каждый.

ball1.gif (146 bytes)     Шифрование 64-битных значений промежуточного хэш-кода H на ключах Ki(i = 1, 2, 3, 4) с использованием алгоритма ГОСТ 28147 в режиме простой замены.

ball1.gif (146 bytes)     Перемешивание результата шифрования.

     Для генерации ключей используются следующие данные:

ball1.gif (146 bytes)     промежуточное значение хэш-кода Н длиной 256 бит;

ball1.gif (146 bytes)     текущий обрабатываемый блок сообщения М длиной 256 бит;

ball1.gif (146 bytes)     параметры - три значения С2, С3 и С4 длиной 256 бит следующего вида: С2 и С4 состоят из одних нулей, а С3 равно

Hesh-gost01.gif (2165 bytes)

де степень обозначает количество повторений 0 или 1.

Используются две формулы, определяющие перестановку и сдвиг.

Перестановка Р битов определяется следующим образом: каждое 256-битное значение рассматривается как последовательность тридцати двух 8-битных значений.

Перестановка Р элементов 256-битной последовательности выполняется по формуле Hesh-gost02.gif (955 bytes), где x - порядковый номер 8-битного значения в исходной последовательности; y - порядковый номер 8-битного значения в результирующей последовательности.

Hesh-gost03.gif (1294 bytes)

Сдвиг А определяется по формуле

A (x) = (x1 znak7.gif (866 bytes)x2) || x4 || x3 || x2

 

Где
xi - соответствующие 64 бита 256-битного значения х,   
|| - обозначает конкатенацию.

Присваиваются следующие начальные значения:

i = 1, U = H, V = M.
W = U znak7.gif (866 bytes)V, K1 = Р (W)

Ключи K2, K3, K4 вычисляются последовательно по следующему алгоритму:

U = A(U) znak7.gif (866 bytes)Сi,
V = A(A(V)),
W = U znak7.gif (866 bytes)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-битных значений. Сдвиг обозначается znak10.gif (857 bytes) и определяется следующим образом:

znak9.gif (853 bytes)16 || znak9.gif (853 bytes)15 || ... || znak9.gif (853 bytes)1 - исходное значение

znak9.gif (853 bytes)1 znak9.gif (853 bytes)2 znak9.gif (853 bytes)3 znak9.gif (853 bytes)4 znak9.gif (853 bytes)13 znak9.gif (853 bytes)16 || znak9.gif (853 bytes)16 || ... || znak9.gif (853 bytes)2 - результирующее значение

Результирующее значение хэш-кода определяется следующим образом:

X (M, H) = Hesh-gost05.gif (73 bytes) (H znak7.gif (866 bytes) znak10.gif (857 bytes)(M znak7.gif (866 bytes)Hesh-gost06.gif (71 bytes) (S)))

де
H - предыдущее значение хэш-кода,   
М - текущий обрабатываемый блок,   
Hesh-gost07.gif (70 bytes) - i-ая степень преобразования znak10.gif (857 bytes).

 

01LEFT.JPG (1550 bytes)01RIGHT.JPG (1552 bytes)

АИСС БКБ, www.orioncom.ru, tel (495) 783-5510