Whirlpool – является хэш-функцией, устойчивой к коллизиям, оперирует с блоками по 512 бит и генерирует 512-битный хеш результат. Whirlpool состоит из итеративной функции сжатия, основанной на 512-и битном блочном шифре, который выполняется за 10 циклов.
Whirlpool построен по схеме хеширования Миагучи-Принеля:
,
,
,
где -
вектор инициализации,
– блок данных,
- блочный шифр,
-
функция сжатия..
Внутренний блочный шифр использует ключевую матрицу
для шифрования матрицы состояния. Блочный
шифр оперирует с 512-битными блоками и имеет 512-битный ключ. Вычисляется 10
циклов, на каждом из которых вызывается функция сжатия
,
а на 11-ом цикле происходит аффинное добавление ключа
.
,
где –
ключи, полученные после развертывания ключа,
– число
циклов, по умолчанию равно 10.
Вход и выход функции.
Состояние хэш-функции
описывается матрицей . Для формирования матрицы из
512-и битного блока данных используется функция
.
Если , то
,
где –
-ый байт блока данных,
– элемент матрицы
.
Функция .
состоит в замене каждого байта в матрице состояния
на
байт, полученный из блока подстановки
.
,
где ,
– элементы матрицы
.
Таблица подстановки построена из более мелкой 4-х битной
таблицы подстановки и определена в последней спецификации алгоритма.
Циклическая
перестановка . Перестановка
независимо циклически сдвигает каждый
столбец матрицы
так, что в итоге
-тый столбец сдвигается вниз на
позиций.
.
Цель такого преобразования рассеять байты каждого ряда по всем рядам.
Линейное рассеивание . Линейное
рассеивание
- это функция линейного отображения
, основанная на коде MDS с матрицей генерации
, где
,
т.о. .
Цель рассеивания – перемешать все байты каждого рядка матрицы.
Добавление ключа . Аффинное добавление ключа состоит в побитовом сложении
матрицы
с ключевой матрицей
.
.
Цикловые константы . Цикловая константа для цикла номер
будет
матрица
определенная как:
,
.
Цикловая функция . На
-том цикле алгоритма цикловая
функция выполняет последовательное отображение
и
использует ключевую матрицу
.
,
где –
операция последовательного выполнения функций.
Развертывание ключа. Это процедура получения из 512-и
битного ключа последовательности из десяти
512-и битных цикловых ключей
.
,
.
Дополнение и усиление.
Перед вычислением
хеша сообщения длинны
его
дополняют одним единичным битом и нулевыми битами для достижения длинны
кратной 256. Затем сообщение разбивают на
блоков
.
Вычисление
хеш-значения. Хеш-значение
определено как выход функции сжатия, преобразованный
из матрицы обратно в последовательность байт.
.
В таблицах 4 и 5 представлены характеристики, свойства и аналитические результаты оценки быстродействия алгоритма Whirlpool в сравнении с другими известными алгоритмами [11].
Из анализа этих таблиц следует, что Whirlpool уступает многим алгоритмам по быстродействию, но одним из главных преимуществ алгоритма Whirlpool остается размер хеш кода, равный 512 битам.
Таблица 4 Характеристики функций хеширования.
Название примитива |
Размер слова (bits) |
Размер подключей (bits) |
Размер вспомогательной таблицы (bits£bits) |
Число сдвигов/ перестановок + умножений |
XOR, ADD, MULT (bit size) |
AND, OR, NOT |
Общее число логических операций (8-bit) |
Общее число умножений (8-bit) |
Размер кода (kB) |
Whirlpool |
8 |
5120 |
1280(8x64) |
1188 |
1175(64bit) |
1268(64bit) |
19544 |
0 |
65 |
SHA-1 |
32 |
0/224 (32bit) |
312 (32bit), 325 (32bit) |
100(32bit) |
2948 |
0 |
|||
SHA-2/256 |
32 |
96 (32bit)/ 576 (32bit) |
640 (32bit), 600 (32bit) |
384(32bit) |
6496 |
0 |
|||
SHA-2/384 SHA-2/512 |
64 |
128 (64bit)/ 736 (64bit) |
816 (64bit), 760 (64bit) |
480(64bit) |
16448 |
0 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.