Однонаправленную хэш-функцию можно построить, используя в качестве функции f (.) симметричный блочный алгоритм. Наиболее очевидный подход состоит в том, чтобы шифровать сообщение M посредством блочного алгоритма в режиме СВС или CFB с помощью фиксированного ключа и некоторого вектора инициализации. Последний блок шифртекста можно рассматривать в качестве хэш-значения сообщения M. При таком подходе не всегда возможно построить безопасную одностороннюю хэш-функцию, но всегда можно получить код аутентификации сообщения КAC.
Более безопасный вариант хэш-функции можно получить, используя блок сообщения в качестве входа, предыдущее значение — в качестве ключа, а текущее хэш-значение — в качестве выхода. Реальные хэш-функции проектируются еще более сложными. Длина блока обычно определяется длиной ключа, а длинахэш-значения совпадает с длиной блока. Поскольку большинство блочных алгоритмов являются 64-битовыми, схемы хэширования проектируют так, чтобы хэш-значение имело длину, равную одинарной или двойной длине блока.
|
|
Если принять, что получаемая хэш-функция корректна, безопасность схемы хэширования базируется на безопасности лежащего в ее основе блочного алгоритма.
Ниже приведены четыре схемы безопасного хэширования, у которых длина хэш-значения равна длине блока.
Hi -1¾¾¾¾¯ ½ ключ ½ Mi ¾®шифратор¾® Å® Hi |¾¾¾¾¾¾¾¾¾ | Hi -1¾¾¾¾¯¾¾¾¾¯ ¯ ½ ключ ½ Mi ¾Å®шифратор ¾Å® Å® Hi |¾¾¾¾¾¾¾¾¾¾¾ |
Hi -1¾¾¾¾¯¾¾¾¾¾¯ ½ ключ ½ Mi ¾®шифратор¾Å® Å® Hi |¾¾¾¾¾¾¾¾ | Hi -1¾¯¾¾¾¯ ½ ключ ½ Mi ¾Å®шифратор ® Å® Hi |¾¾¾¾¾¾¾¾¾ |