Интернет магазин китайских планшетных компьютеров



Компьютеры - Whirlpool (криптография) - Описание

30 марта 2011


Оглавление:
1. Whirlpool (криптография)
2. Описание
3. Криптостойкость
4. Применение



Введение

В данной статье описывается последняя версия Whirlpool. В отличие от первой версии S-box  определен, а диффузная матрица заменена на новую после доклада Taizo Shirai  и Kyoji Shibutani .

Whirlpool состоит из повторного применения функции сжатия , основой которой является специальный 512-битный блочный шифр W с 512-битным ключом.

Используемые обозначения и операции

В алгоритме используются операции в поле Галуа \ GF по модулю неприводимого многочлена \ p_8 = x^8 + x^4 + x^3 + x^2 + 1.

Многочлены для краткости записываются в шестнадцатеричном представлении. Например, запись \ 11D_x означает \ p_8.


  • Символом \circ обозначается оператор композиции . Выражение f \circ g означает композицию функций \ g и \ f.
Для обозначения композиции последовательности функций f_m, f_{m+1},...,f_{n-1}, f_n, m \leq n используется символ \bigcirc_m^{r=n}:
\bigcirc_m^{r=n} f_r \equiv f_n \circ f_{n-1} \circ \dots \circ f_{m+1} \circ f_m.


  • M_{m \times n} — множество матриц m \times n над \ GF.


  • \ cir — циркулянтная матрица  m \times m, первая строка которой состоит из элементов \ a_0, a_1, . . . , a_{m-1}, то есть:

cir \equiv
\begin{bmatrix}
a_0     & a_1    & \dots  & a_{m-1}  \\
a_{m-1} & a_0    & \dots  & a_{m-2}  \\
\vdots  & \vdots & \ddots & \vdots   \\
a_1     & a_2    & \dots  & a_0      \\
\end{bmatrix},
или просто \ cir = c \Leftrightarrow c_{ij} = a_{ mod m}, 0 \leq i,j \leq m-1.

Формат данных

Как уже говорилось выше, Whirlpool построена на специальном блочном шифре W, который работает с 512-битными данными.

В преобразованиях промежуточный результат вычисления хеша называется хеш-состоянием или просто состоянием. При вычислениях состояние обычно представляется матрицей состояния. Для Whirlpool это матрица в M_{8 \times 8}. Следовательно, 512-битные блоки данных должны быть преобразованы в этот формат перед дальнейшими вычислениями. Это достигается введением функции \ \mu:

\mu: GF^{64} \to M_{8 \times 8}, \qquad \mu = b \Leftrightarrow b_{ij} = a_{8i+j}, 0 \leq i,j \leq 7.

Проще говоря, заполнение матрицы состояния данными происходит построчно. При этом каждый байт матрицы представляет собой соответствующий многочлен в \ GF.

Преобразования

Нелинейное преобразование γ

Функция \gamma: M_{8 \times 8} \to M_{8 \times 8} состоит из параллельного применения блока подстановки) S: GF \to GF, x \to S ко всем байтам матрицы состояния:

\gamma=b \Leftrightarrow b_{ij} = S, 0 \leq i,j \leq 7.

Блок подстановки описывается следующей таблицей замен:

Таблица 1. Блок подстановки
00x 01x 02x 03x 04x 05x 06x 07x 08x 09x 0Ax 0Bx 0cx 0dx 0Ex 0Fx

00x

18x 23x c6x E8x 87x B8x 01x 4Fx 36x A6x d2x F5x 79x 6Fx 91x 52x

10x

60x Bcx 9Bx 8Ex A3x 0cx 7Bx 35x 1dx E0x d7x c2x 2Ex 4Bx FEx 57x

20x

15x 77x 37x E5x 9Fx F0x 4Ax dAx 58x c9x 29x 0Ax B1x A0x 6Bx 85x

30x

Bdx 5dx 10x F4x cBx 3Ex 05x 67x E4x 27x 41x 8Bx A7x 7dx 95x d8x

40x

FBx EEx 7cx 66x ddx 17x 47x 9Ex cAx 2dx BFx 07x Adx 5Ax 83x 33x

50x

63x 02x AAx 71x c8x 19x 49x d9x F2x E3x 5Bx 88x 9Ax 26x 32x B0x

60x

E9x 0Fx d5x 80x BEx cdx 34x 48x FFx 7Ax 90x 5Fx 20x 68x 1Ax AEx

70x

B4x 54x 93x 22x 64x F1x 73x 12x 40x 08x c3x Ecx dBx A1x 8dx 3dx

80x

97x 00x cFx 2Bx 76x 82x d6x 1Bx B5x AFx 6Ax 50x 45x F3x 30x EFx

90x

3Fx 55x A2x EAx 65x BAx 2Fx c0x dEx 1cx Fdx 4dx 92x 75x 06x 8Ax

A0x

B2x E6x 0Ex 1Fx 62x d4x A8x 96x F9x c5x 25x 59x 84x 72x 39x 4cx

B0x

5Ex 78x 38x 8cx d1x A5x E2x 61x B3x 21x 9cx 1Ex 43x c7x Fcx 04x

c0x

51x 99x 6dx 0dx FAx dFx 7Ex 24x 3Bx ABx cEx 11x 8Fx 4Ex B7x EBx

d0x

3cx 81x 94x F7x B9x 13x 2cx d3x E7x 6Ex c4x 03x 56x 44x 7Fx A9x

E0x

2Ax BBx c1x 53x dcx 0Bx 9dx 6cx 31x 74x F6x 46x Acx 89x 14x E1x

F0x

16x 3Ax 69x 09x 70x B6x d0x Edx ccx 42x 98x A4x 28x 5cx F8x 86x

Циклическая перестановка π

Перестановка \pi: M_{8 \times 8} \to M_{8 \times 8} циклически сдвигает каждый столбец матрицы состояния так, что столбец j сдвигается вниз на j позиций:

\pi=b \Leftrightarrow b_{ij} = a_{ mod 8, j}, 0 \leq i,j \leq 7.

Задача данного преобразования — перемешать байты строк матрицы состояния между собой.

Линейная диффузия θ

Линейная диффузия \theta: M_{8 \times 8} \to M_{8 \times 8} — это линейное преобразование, матрицей которого является MDS матрица  \ C = cir, то есть:



C = cir =
\begin{bmatrix}
01_x & 01_x & 04_x & 01_x & 08_x & 05_x & 02_x & 09_x \\
09_x & 01_x & 01_x & 04_x & 01_x & 08_x & 05_x & 02_x \\
02_x & 09_x & 01_x & 01_x & 04_x & 01_x & 08_x & 05_x \\
05_x & 02_x & 09_x & 01_x & 01_x & 04_x & 01_x & 08_x \\
08_x & 05_x & 02_x & 09_x & 01_x & 01_x & 04_x & 01_x \\
01_x & 08_x & 05_x & 02_x & 09_x & 01_x & 01_x & 04_x \\
04_x & 01_x & 08_x & 05_x & 02_x & 09_x & 01_x & 01_x \\
01_x & 04_x & 01_x & 08_x & 05_x & 02_x & 09_x & 01_x \\
\end{bmatrix},
так что
\theta=b \Leftrightarrow b = a \cdot C.

Другими словами, матрица состояния умножается справа на матрицу \ C. Напомним, что операции сложения и умножения элементов матриц производятся в \ GF.


MDS матрица  — это такая матрица над конечным полем \ K, что если взять её в качестве матрицы линейного преобразования \ f=x из пространства \ K^n в пространство \ K^m, то любые два вектора из пространства \ K^{n+m} вида \) будут иметь как минимум \ m+1 различий в компонентах. То есть набор векторов вида \) образует код, обладающий свойством максимальной разнесённости. Таким кодом является, например, код Рида-Соломона.


В Whirlpool свойство максимальной разнесённости MDS матрицы  означает, что общее количество меняющихся байт вектора \ x и вектора \ f=x не меньше \ 8+1=9. Другими словами, любое изменение только одного байта \ x приводит к изменению всех 8 байтов \ f. В этом и состоит задача линейной диффузии .

Как уже упоминалось выше, MDS матрица  в последней версии Whirlpool была изменена благодаря статье Taizo Shirai  и Kyoji Shibutani . Они проанализировали MDS матрицу  второй версии Whirlpool и указали на возможность повышения устойчивости Whirlpool к дифференциальному криптоанализу. Также они предложили 224 кандидата на место новой MDS матрицы . Из этого списка авторы Whirlpool выбрали вариант, наиболее легко реализуемый в аппаратном обеспечении.

Добавление ключа σ

Функция добавления ключа \sigma: M_{8 \times 8} \to M_{8 \times 8} представляет собой побитовое сложение матриц состояния \ a и ключа  k \in M_{8 \times 8}:

\sigma=b \Leftrightarrow b_{i,j} = a_{i,j} \oplus k_{i,j}, 0 \leq i,j \leq 7.

Константы раунда c

В каждом раунде \ r, r > 0 используется матрица констант c^r \in M_{8 \times 8} такая, что:

c_{0j}^r \equiv S, \qquad 0 \leq j \leq 7,
c_{ij}^r \equiv 0, \qquad \qquad \qquad \qquad 1 \leq i \leq 7, 0 \leq j \leq 7.

Отсюда видно, что первая строка матрицы c является результатом применения блока подстановки S к байтовым числам , 0 \leq j \leq 7.

Остальные 7 строк — нулевые.

Функция раунда ρ

Для каждого раунда \ r функция раунда — это составное преобразование \rho: M_{8 \times 8} \to M_{8 \times 8}, параметром k которого является матрица ключа  k \in M_{8 \times 8}. Описывается функция раунда следующим образом:

\rho \equiv \sigma \circ \theta \circ \pi \circ \gamma.

Расширение ключа

Для каждого раунда \ r, 0 \leq r \leq R необходим 512-битный ключ шифрования. Для решения данной проблемы во многих алгоритмах вводится так называемая процедура расширения ключа. В Whirlpool расширение ключа реализуется следующим образом:

\ K^0 = K,
\ K^r = \rho, r > 0.

Таким образом, из известного ключа K производится необходимая последовательность K,...,K ключей для каждого раунда блочного шифра W.

Блочный шифр W

Специальный 512-битный блочный шифр W: M_{8 \times 8} \to M_{8 \times 8} в качестве параметра использует 512-битный ключ K и выполняет следующую последовательность преобразований:

W = \left \circ \sigma,

где ключи K,...,K порождены описанной выше процедурой расширения ключа. В хеш-функции Whirlpool число раундов R = 10.

Дополнение входного сообщения

Whirlpool, как и любая другая хеш-функция, должна осуществлять хеширование сообщения произвольной длины. Поскольку внутренний блок шифрования W работает с 512-битными входными сообщениями, то исходное сообщение необходимо разбить на блоки по 512 бит. При этом последний блок, который содержит конец сообщения, может оказаться не полным.

Для решения данной задачи Whirlpool использует алгоритм Меркле-Дамгаарда  дополнения входного сообщения. Результатом дополнения сообщения M является сообщение M', длина которого кратна 512. Пусть L — длина исходного сообщения. Тогда M' получается в несколько шагов:

  1. К концу сообщения M приписать бит «1».
  2. Приписать x битов «0» так, чтобы длина полученной строки L + 1 + x была кратна 256 нечетное число раз.
  3. Наконец, приписать 256-битное представление числа L.

Дополненное сообщение M' записывается в виде

M' = \overbrace{M}^{L} \| 1 \| \overbrace{0 \dots 0}^{x} \| \overbrace{L}^{256}

и разбивается на 512-битные блоки для дальнейшей обработки.

Функция сжатия

Функция сжатия Whirlpool

В Whirlpool применяется схема хеширования Miyaguchi-Preneel .

\ t блоков m_i, 1 \leq i \leq t дополненного сообщения M' последовательно шифруются блочным шифром W:


\ \eta_i = \mu,
\ H_0 = \mu,
H_i = W\oplus H_{i-1}\oplus \eta_i, 1 \leq i \leq t,

где IV) — 512-битная строка, заполненная "0".

Вычисление хеша

Дайджестом для сообщения M является выходное значение Ht функции сжатия, преобразованное обратно в 512-битную строку:

Whirlpool \equiv \mu^{-1}.


Просмотров: 4869


<<< Skein
ГОСТ Р 34.11-94 >>>