Разница между 1.38 и текущей версией КриптографическаяХэшФункцияWhirlpool.
@@ -1,28 +1,43 @@
--Криптогафическая хэш-функция Whirlpool
-	Whirlpool : криптографическая хэш-функция, разработанная Винсентом Риджменом (Vincent Rijmen) и Пауло Баретто (Paolo Barreto). Впервые опубликована в ноябре 2000 года. Осуществляет хэширование входного сообщения с длиной до $$2 sup {256}$$ бит. Ообрена европейской организацией NESSIE (New European Schemes for Signature, Integrity and Encryption - Новые европейские схемы подписей, целостности и шифрования)
-
-Whirlpool использует структуру Меркля-Дамгарда и  одностороннюю функцию сжатия Миагучи-Пренеля
-для формирования 512-блока зашифрованого текста $$W$$. Поскольку внутренний блок шифрования $$W$$ работает с 512-битными входными сообщениями, то исходное сообщение необходимо разбить на блоки по 512 бит. При этом последний блок, который содержит конец сообщения, может оказаться неполным.
-
+= Криптогафическая хэш-функция Whirlpool
+	В данной статье описана общая структура криптографической хеш-функции Whirlpool и основные процедуры для хеширования данных .
+Приведены  результаты криптоанализа Whirlpool, позволяющие сделать вывод о дальнейшем развитии хеш-функций.
+
+'''Ключевые слова''': хеш-функции,  cхема Миагучи-Пренеля, функция раунда , криптоанализ Whirlpool
+
+-1. Введение
+'''Хеширование''' : преобразование исходного информационного массива произвольной длины в битовую строку фиксированной длины.
+
+'''Криптографическая хеш-функция''' : хеш-функция, являющаяся криптографически стойкой, то есть удовлетворяющая ряду требований, специфичных для криптографических приложений.
+Функции хеширования могут применяться в качестве криптографических генераторов псевдослучайных чисел для создания нескольких ключей на основе одного секретного ключа. Криптографические хеш-функции используют для защиты информации от несанкционированного доступа. Также хеш-функции применяют в базах данных для хранения паролей и оганизации хеш-таблиц.
+
+'''Whirlpool''' [1] : криптографическая хеш-функция, разработанная Винсентом Риджменом (Vincent Rijmen) и Пауло Баретто (Paolo Barreto). Впервые опубликована в ноябре 2000 года. Осуществляет хеширование входного сообщения с длиной до $$2 sup 256$$  бит. Одобрена европейской организацией NESSIE (New European Schemes for Signature, Integrity and Encryption, Новые европейские схемы подписей, целостности и шифрования).
+Основой для хеш-функций может быть блочный шифр с симметричными ключами. Для Whirlpool функцией сжатия является блочный шифр AES.
+
+-2. Структура Whirlpool
+--2.1. Дополнение сообщения
+Входное сообщение разбивается на 512-битовые блоки $$M sub 1$$,  $$M sub 2$$,  $$M sub 1$$, если длина блока $$M sub k$$ < 512 бит, блок  $$M sub k$$  дополянется до 512 бит.
+Результатом дополнения сообщения ''M'' является сообщение $$M  prime$$, длина $$M  prime$$ кратна 512 бит. Пусть L -  длина сообщения M. Для того, чтобы получить $$M  prime$$, необходимо сделать 3 операции:
+1) К концу сообщения M приписать бит «1»; 
+2) Приписать x битов «0», чтобы длина полученной строки L+1+ x была кратна 256 нечетное число раз;
+3) Приписать 256-битное представление числа L.
 Для решения данной проблемы в Whirlpool используется дополнение входного сообщения. Результатом дополнения сообщения $$M$$ является сообщение $$M  prime$$, длина которого кратна 512 бит. Пусть $$L$$ — длина исходного сообщения. Для того, чтобы получить $$M  prime$$, необходимо сделать 3 операции:
 	1 К концу сообщения $$M$$ приписать бит «1» ; 
 	1 Приписать x битов «0» так, чтобы длина полученной строки $$L+1+x$$ была кратна 256 нечетное число раз;
 	1  Приписать 256-битное представление числа $$L$$.
 
-Полученная строка разбивается на 512-битовые блоки $$M sub 1$$, $$M sub 2$$, $$M sub t$$, которые используются для генерации последовательности хэш-значений $$H sub 1$$, $$H sub 2$$, $$H sub t$$
-($$H sub 0$$ - строка из 512 «0» бит). Для вычисления $$H sub i$$, $$W$$  шифрует $$M sub i$$, используя в качестве ключа $$H sub {i-1}$$, и выполняет $$XOR$$ между $$H sub {i-1}$$ и $$M sub i$$. Значением хэш-функции является $$H sub t$$. 
+--2.2. Схема Миагучи-Пренеля
+Whirlpool использует структуру Меркля-Дамгарда[2] и  одностороннюю функцию сжатия Миагучи-Пренеля[2] (рис. 1) для формирования 512-блока зашифрованого текста W. 
+После дополнения входное сообщение разбивается на 512-битовые блоки $$M sub 1$$, $$M sub 2$$, $$M sub t$$, которые используются для генерации последовательности хэш-значений $$H sub 1$$, $$H sub 2$$, $$H sub t$$ ($$H sub 0$$ - строка из 512 «0» бит). Для вычисления $$H sub i$$, $$W$$  шифрует $$M sub i$$, используя в качестве ключа $$H sub {i-1}$$, и выполняет $$XOR$$ между $$H sub {i-1}$$ и $$M sub i$$. Значением хэш-функции является $$H sub k$$. 
 
-http://www.larc.usp.br/~pbarreto/MiyaguchiPreneel.gif
 
---Раунды
+--2.3. Параметры алгоритма
+Входным потоком для алгоритма Whirlpool является последовательность произвольной длины, выходным потоком является последовательность 512 бит. Ключ хеширования для алгоритма Whirlpool - последовательность из 512 бит. Алгоритм состоит из 10 раундов. На каждом раунде используется функция раунда.
 
-Шифр Whirlpool использует 10 раундов. Размер блока и размер ключа - 512 бит. Ключом для $$i$$ 
-раунда является $$K sub i$$.
+--2.4 Функция раунда
 
-http://www.intuit.ru/EDI/18_11_15_6/1447798956-19904/tutorial/577/objects/2/files/02_13.gif 
--- Функция раунда
+512 бит входного блока группируются в 64 байта $$a sub 0 .. a sub 63$$. Затем эти байты записываются
 
-512 бит входного блока группируются в 64 байта $$a sub 0 .. a sub 63$$. Затем эти байты записываются в матрицу размером 8 * 8
+в матрицу размером 8 * 8:
 
 %EQ
 
@@ -40,32 +55,88 @@
 right | .
 %EN
 
-Вдальнейшем нам придется работать в конечном поле $$GF(2 sup 8 )$$. Элементы $$GF(2 sup 8 )$$ это байты, они могут складываться с помощью операции XOR. Модель конечного поля $$GF(2 sup 8 )$$ зависит от выбора неприводимого многочлена степени 8. Для алгоритма Whirlpool этим многочленом является $$ X sup 8 + X sup 4 + X sup 3 + X sup 2 + 1$$.
+В дальнейшем нам придется работать в конечном поле $$GF(2 sup 8 )$$. Элементы $$GF(2 sup 8 )$$ это байты, они могут складываться с помощью операции XOR. Модель конечного поля $$GF(2 sup 8 )$$ зависит от выбора неприводимого многочлена степени 8. Для Whirlpool этим многочленом является $$ X sup 8 + X sup 4 + X sup 3 + X sup 2 + 1$$.
 
 Процедуры, входящие в функцию раунда: 
 
-1) сдвиг столбцов матрицы состояния на различную величину (ShiftColumns); 
-2) перемешивание данных каждого столбца матрицы состояния (SubBytes);
-3) умножение каждой строки  матрицы состояния на фиксированный многочлен в $$GF(2 sup 8 )$$(MixRows); 
-4) сложение ключа раунда с матрицей состояния (AddRoundKey). 
+	1 сдвиг столбцов матрицы состояния на различную величину (ShiftColumns); 
+	1 перемешивание данных каждого столбца матрицы состояния (SubBytes);
+	1 умножение каждого столбец матрицы состояния на матрицу констант в $$GF(2 sup 8 )$$(MixRows); 
+	1 сложение ключа раунда с матрицей состояния (AddRoundKey). 
 
-http://www.intuit.ru/EDI/18_11_15_6/1447798956-19904/tutorial/577/objects/2/files/02_15.gif
+---ShiftColumns
+
+Процедура ShiftColumns (рис. 3) обеспечивает сдвиг столбцов матрицы состояния на различную величину. Столбец  j сдвигается  на j байт (Столбец 0 не изменяется, столбец  7 сдвигается на 7 байт.) В результате в матрице состояния записаны новые 8 байт.
 
----SubBytes
 
-Процедура SubBytes обеспечивает нелинейное преобразование. Байт представляют в виде двух шестнадцатеричных цифр. Левая цифра определяет строку, а правая - столбец таблицы подстановки. Две шестнадцатеричных цифры в пересечении строки и столбца - новый байт.
 
-http://www.intuit.ru/EDI/18_11_15_6/1447798956-19904/tutorial/577/objects/2/files/02_16.gif
+---SubBytes
+
+Процедура SubBytes (рис. 4) обеспечивает нелинейную замену байт матрицы состояния с помощью таблицы (S-Box). Байт представляют в виде двух шестнадцатеричных цифр. Левая цифра определяет строку, а правая- столбец таблицы подстановки. Две шестнадцатеричные цифры на пересечении строки и столбца определяют новый байт. Например, два байта, 5A16 и 5B16,  которые отличаются только одним битом, преобразованы  к  $$5B sub 16$$ и $$88 sub 16$$,  которые отличаются пятью битами. Таблица S-Box приведена в приложениии 1
 
-В преобразовании SubBytes матрица состояний обрабатывается как матрица байтов 8 * 8. В процессе каждый байт преобразуется независимо; мы имеем 64 различных преобразования.
 
-Ниже приведена таблица подстановки (S-блок) для преобразования подбайтов. Например, два байта, $$5A sub 16$$ и $$5B sub 16$$, которые отличаются только одним битом , преобразованы к $$5B sub 16$$ и $88 sub 16$$, которые отличаются пятью битами.
+Таблица может быть вычислена алгебраически, используя поле  $$GF(2 sup 4 )$$ с неприводимым полиномом $$(x sup 4 + x + 1)$$. $$E$$ - миниблоки вычисляют степень, равную шестнадцатеричному значению входа; $$R$$ - миниблок использует псевдослучайный генератор чисел.
 
-Таблица может быть вычислена алгебраически, используя поле  $$GF(2 sup 4)$$ с неприводимым полиномом $$(x sup 4 + x + 1)$$. Каждая шестнадцатеричная цифра в байте вводится в миниблок ( $$E$$ и $$E sup -1$$ ). Результаты передаются в другой миниблок R. E - блоки вычисляют степень, равную шестнадцатеричному значению входа; R -миниблок использует псевдослучайный генератор чисел.
+Каждая шестнадцатеричная цифра в байте передается миниблок ( $$E$$ и $$E sup -1$$ ).
 
 http://www.larc.usp.br/~pbarreto/whirlbox.gif
 
+https://pp.vk.me/c629513/v629513801/35a33/M6vKZJWmejs.jpg
+
+https://pp.vk.me/c629513/v629513801/35a2c/ZEF5oYLqsd8.jpg
+
+Результаты блока $$E$$ и $$E sup -1$$ складываются с помощью XOR, и передаются на миниблок $$R$$.
+
+https://pp.vk.me/c629513/v629513801/35a25/KKuhcgQWD7A.jpg
+
+Чтобы получить старшие 4 бита результата, выполняется XOR между выходами миниблоков $$E$$ и $$R$$.
+
+Чтобы получить младшие 4 бита результата, выполняется XOR между выходами миниблоков $$E sup -1$$  и $$R$$.
+
+https://photos-1.dropbox.com/t/2/AABNAuRS6-Ft-p8G6td7PdMYBfYBz156FSSMScm0i-dK_w/12/544189381/jpeg/32x32/1/_/1/2/sbox_generate.bmp/EJeZwq0EGBsgAigC/e537EAFtAAI5Lm0pAwqqZ7rWI1ZNqdxDR3uYzmytJCc?size=1024x768&size_mode=3
+
+---2.4.3. MixRows
+
+Процедура MixRows - матричное преобразование, где байты интерпретируются как полиномы с коэффициентами в $$GF(2 sup 8 )$$.  Каждая строка матрицы состояния перемножается с фиксированным многочленом с(x) в $$GF(2 sup 8 )$$.  Для Whirlpool этим многочленом является 
+$$ X sup 8 + X sup 4 + X sup 3 + X sup 2 + 1$$.
+
+
+---2.4.4. AddRoundKey
+
+
+В преобразовании AddRoundKey байт матрицы состояния складывается в поле $$GF(2 sup 8 )$$ с соответствующим байтом матрицы состояний ключей раунда. Результат - новый байт в новой матрице состояний.
+
+---2.4.5. Константы раунда
+Каждая константа раунда $$RC sup r$$ является матрицей 8 x 8, где только первая строка имеет значения, отличные от нуля. Остальная часть входов содержит все нули. Значения для первой строки в каждой матрице констант могут быть вычислены, используя преобразование SubBytes. Другими словами, $$RC sup 1$$ использует первые восемь входов в таблице преобразования SubBytes; $$RC sup 2$$ использует вторые восемь входов, и т. д.
+
+--2.4.6 Расширение ключа 
+
+Для каждого раунда $$r , 0<= r <= 10$$ необходим 512-битный ключ шифрования. Для решения данной проблемы во многих алгоритмах вводится так называемая процедура расширения ключа. В Whirlpool расширение ключа реализуется следующим образом:
+
+$$K sup 0 = K$$
+
+$$K sup r = p[RC sup r ] * K sup {r - 1}, r >= 0$$
+
+где $$K sup r$$ - ключ раунда, $$RC sup r$$ - константа раунда, а $$p[]$$ - функция раунда;
+
+Таким образом, из известного ключа $$K$$ производится необходимая последовательность $$K sup 0 ...,K sup 10$$ ключей для каждого раунда блочного шифра $$W$$.
+
+---3. Криптостойкость
+
+В 2004 году Taizo Shirai и Kyoji Shibutani обнаружили дефект в диффузных матрицах Whirlpool[2], в последствии он был  исправлен. 
+В 2009 году был опубликован новый способ атаки на хеш-функции- The Rebound Attack[3]. Удалось сгенерировать коллизию для 4,5 раундoв Whirlpool со сложностью 2120. Однако, данная атака не сильно повлияла на криптостойкость Whirlpool, сложность вычислений оказалась достаточно высока.
+На сегодняшний день  хеш-функция Whirlpool  устойчива ко всем видам криптоанализа. 
+
+-4. Заключение
+
+Не смотря хорошую криптографическую стойкость, хеш-функция Whirlpool мало изучена. Она базируется на устойчивой схеме Миагучи-Пренеля, в качестве функции сжатия использует шифр, основанный на  AES. Кроме того, размер дайджеста сообщения 512 бит, поэтому Whirlpool является очень сильной функцией криптографического хеширования. Однако для ее повсеместного использования необходимо провести серьезные исследования.
+
+-5. Список литературы
 
+	1 Vincent Rijmen, Paolo Barreto. "The WHIRLPOOL Hashing Function"- Scopus Tecnologia S. A, San Paulo, Brazil, 2000, 
+	1 Schneier Bruce, Ferguson Niels, "Practical cryptography"- Inc, Wiley Publishing, pp 432 ,2003.
+	1 Taizo Shirai, Kyoji Shibutani. "On the diffusion matrix employed in the Whirlpool hashing function",- NESSIE public report, 2003
+	1 Florian Mendel, Christian Rechberger, Martin Schlaffer, Soren S. Thomsen.	 "The Rebound Attack: Cryptanalysis of Reduced Whirlpool and Grostl"- Unpublished manuscript, 2009.
 
 
 #КатегорияКриптография