Содержание
Криптогафическая хэш-функция Whirlpool
- Whirlpool
- криптографическая хэш-функция, разработанная Vincent Rijmen и Paulo S. L. M. Barreto . Впервые опубликована в ноябре 2000 года. Осуществляет хэширование входного сообщения с длиной до бит.
Whirlpool использует структуру Меркля-Дамгарда и одностороннюю функцию сжатия Миагучи-Пренеля для формирования 512-блока зашифрованого текста . Поскольку внутренний блок шифрования работает с 512-битными входными сообщениями, то исходное сообщение необходимо разбить на блоки по 512 бит. При этом последний блок, который содержит конец сообщения, может оказаться неполным.
Для решения данной задачи в Whirlpool используется дополнение входного сообщения. Результатом дополнения сообщения является сообщение , длина которого кратна 512. Пусть — длина исходного сообщения. Для того, чтобы получить , необходимо сделать 3 операции:
- К концу сообщения приписать бит «1» ;
- Приписать x битов «0» так, чтобы длина полученной строки была кратна 256 нечетное число раз;
- Приписать 256-битное представление числа .
Полученная строка разбивается на 512-битовые блоки , , , которые используются для генерации последовательности хэш-значений , , . - строка из 512 «0» битов. Для вычисления , шифрует , используя в качестве ключа , и выполняет между и . Значением хэш-функции является .
Раунды
Шифр Whirlpool использует 10 раундов. Размер блока и размер ключа - 512 бит. Ключом для
раунда является .
Функция раунда
512 бит входного блока группируются в 64 байта . Затем эти байты записываются в матрицу размером 8 * 8
Вдальнейшем нам придется работать в конечном поле . Элементы это байты, они могут складываться с помощью операции XOR. Модель конечного поля зависит от выбора неприводимого многочлена степени 8. Для алгоритма Whirlpool этим многочленом является .
Процедуры, входящие в функцию раунда:
1) сдвиг столбцов матрицы состояния на различную величину (ShiftColumns?); 2) перемешивание данных каждого столбца матрицы состояния (SubBytes?); 3) умножение каждой строки матрицы состояния на фиксированный многочлен в (MixRows?); 4) сложение ключа раунда с матрицей состояния (AddRoundKey?).
SubBytes?
Процедура SubBytes? обеспечивает нелинейное преобразование. Байт представляют в виде двух шестнадцатеричных цифр. Левая цифра определяет строку, а правая - столбец таблицы подстановки. Две шестнадцатеричных цифры в пересечении строки и столбца - новый байт.
В преобразовании SubBytes? матрица состояний обрабатывается как матрица байтов 8 * 8. В процессе каждый байт преобразуется независимо; мы имеем 64 различных преобразования.
Ниже приведена таблица подстановки (S-блок) для преобразования подбайтов. Например, два байта, и , которые отличаются только одним битом , преобразованы к и $88 sub 16$$, которые отличаются пятью битами.
0 / 2 3 4 5 6 7 8 9 A B C D E F
0 18 23 C6 E8 87 B8 01 4F 36 A6 D2 F5 79 6F 91 52
1 16 BC 9B 8E A3 0C 7B 35 1D E0 D7 C2 2E 4B FE 57
2 15 77 37 E5 9F F0 4A CA 58 C9 29 0A B1 A0 6B 85
3 BD 5D 10 14 CB 3E 05 67 E4 27 41 8B A7 7D 95 C8
4 FB EF 7C 66 DD 17 47 9E CA 2D BF 07 AD 5A 83 33
5 63 02 AA 71 C8 19 49 C9 F2 E3 5B 88 9A 26 32 BO
6 E9 OF D5 80 BE CD 34 48 FF 7A 90 5F 20 68 1A AE
7 B4 54 93 2'2 64 F1 73 12 40 08 C3 EC DB A1 8D 3D
8 97 00 CF :B 76 82 D6 1B B5 AF 6A 50 45 F3 30 EF
9 3F 55 A2 EA 65 BA 2F CO DE 1C FD 4D 92 75 06 8A
A B2 E6 OE F 62 D4 A8 96 F9 C5 25 59 84 72 39 4C
B 5E 7S 38 8C C1 A5 E2 61 B3 21 9C 1E 43 C7 FC 04
C 51 99 6D 0D FA DF 7E 24 3B AB CE 11 8F 4E B7 EB
D 3C S1 94 '-7 9B 13 2C D3 E7 6E C4 03 56 44 7E A9
E 2A BB C1 53 DC OB 9D 6C 31 74 F6 46 AC 89 14 E1
F 16 3A 69 09 70 B6 CO ED CC 42 98 A4 28 5C F8 86
КатегорияКриптография