Хэш-функции на базе блочного шифра. Хэш-функция ГОСТ Р 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))).
Необходимость – обеспечение криптостойкости
Пример.