хэширования на принимающей стороне и сравнением с дайджестом, полученным на
передающей стороне.
Еще одной особенностью хэш-функций является то, что они не допускают
обратного преобразования – получить исходное сообщения по его дайджесту
невозможно. Поэтому их называют еще односторонними функциями шифрования.
Хэш-функции строятся по итеративной схеме, когда исходное сообщение
разбивается на блоки определенного размера, и над ними выполняются ряд
преобразований с использованием как обратимых, так и необратимых операций. Как
правило, в состав хэширующего преобразования включается сжимающая функция,
поскольку его выход зачастую по размеру меньше блока, подаваемого на вход. На
вход каждого цикла хэширования подается выход предыдущего цикла, а также
очередной блок сообщения. Таким образом, на каждом цикле выход хэш-функции h
i
представляет собой хэш первых i блоков.
Если вспомнить, насколько рандомизируют входное сообщение блочные
шифры, можно в качестве функции хэш-преобразования использовать какой-нибудь
блочный шифр. То, что блочные шифры являются обратимыми преобразованиями,
не противоречит свойствам хэш-функции, поскольку блочный шифр необратим по
ключу шифрования, и, если в качестве ключа шифрования использовать выход
предыдущего шага хэш-преобразования, а в качестве шифруемого сообщения
очередной блок сообщения (или наоборот), то можно получить хэш-функцию с
хорошими криптографическими характеристиками. Такой подход использован,
например, в российском стандарте хэширования – ГОСТ Р 34.11-94. Эта хэш-
функция формирует 256-битное выходное значение, используя в качестве
преобразующей операции блочный шифр ГОСТ 28147-89 (рис.2.17). Функция
хэширования H получает на вход хэш, полученный на предыдущем шаге (значение
h
0
произвольное начальное число), а также очередной блок сообщения m
i
. Ее
внутренняя структура представлена на рис.2.18. Здесь в блоке шифрующего
преобразования для модификации h
i
в s
i
используется блочный шифр ГОСТ 28147-
89. Перемешивающее преобразование представляет собой модифицированную
перестановку Фейштеля. Для последнего блока m
N
(N – общее количество блоков
сообщения) выполняется набивка до размера 256 бит с добавлением истинной
52