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).
Ссылка на скачивание - внизу страницы.