Хэш-функции на базе блочного шифра. Хэш-функция ГОСТ Р 34.11-94

При построении функции сжатия на основе блочного шифра возникают следующие проблемы.

1.Блочный шифр является только частично однонаправленной функцией сжатия, имеющей два входа (ключ и открытый текст) и один выход – шифртекст, так как при известных шифртексте и ключе можно найти открытый текст, используя расшифрование. Поэтому для построения функции сжатия на базе блочного шифра нужны дополнительные преобразования (см. пример на рис3.4.).

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

 

Российский стандарт ГОСТ Р 34.11-94 «Информационные технологии. Криптографическая защита информации. Функция хэширования» определяет алгоритм и процедуру вычисления хэш-функции для любых последовательностей двоичных символов, применяемых в криптографических методах обработки и защиты информации, в том числе для использования совместно с российским стандартом электронной цифровой подписи ГОСТ Р 34.10-2001 и базируется на блочном алгоритме шифрования ГОСТ 28147-89.

Входными параметрами являются:

М – исходное сообщение произвольной длины;

Н0 – стартовый вектор хэширования (несекретный 256-разрядный двоичный вектор, обычно константа для конкретной сети абонентов).

Результат - хэш-образ длиной 256 бит.

Логика выполнения ГОСТ Р.43.11-94.

Функция сжатия Ні = f (Мi, Нi-1) (оба операнда Мі и Ні-1 являются 256-битовыми величинами) определяется следующим образом (см. рис.3.5):

1. Генерируются 4 ключа шифрования Кj, j = 1...4, путем линейного смешивания Мі, Ні-1 и некоторых констант Сj.

2. Каждый ключ Кj, используют для шифрования 64-битовых подслов hі слова Нi-1 в режиме простой замены: Si = EKj(hj).

Результирующая последовательность S4, S3, S2, S1 длиной 256 бит запоминается во временной переменной S.

3. Значение Ні является сложной, хотя и линейной функцией смешивания S, Мi, и Нi-1.

При вычислении окончательного хэш-значения сообщения М учитываются значения трех связанных между собой переменных:

Нn - хэш-значение последнего блока сообщения;

Z - значение контрольной суммы, получаемой при сложении по модулю 2 всех блоков сообщения;

L - длина сообщения.

Эти три переменные и дополненный последний блок М' сообщения объединяются в окончательное хэш-значение следующим образом:

Н = f (Z Å М', f (L, f(М', Нn))).

Необходимость – обеспечение криптостойкости

Пример.