Содержание
Криптогафическая хэш-функция Whirlpool
В данной статье описана общая структура криптографической хеш-функции Whirlpool и основные процедуры для хеширования данных . Приведены результаты криптоанализа Whirlpool, позволяющие сделать вывод о дальнейшем развитии хеш-функций.Ключевые слова: хеш-функции, cхема Миагучи-Пренеля, функция раунда , криптоанализ Whirlpool
1. Введение
Хеширование : преобразование исходного информационного массива произвольной длины в битовую строку фиксированной длины.
Криптографическая хеш-функция : хеш-функция, являющаяся криптографически стойкой, то есть удовлетворяющая ряду требований, специфичных для криптографических приложений. Функции хеширования могут применяться в качестве криптографических генераторов псевдослучайных чисел для создания нескольких ключей на основе одного секретного ключа. Криптографические хеш-функции используют для защиты информации от несанкционированного доступа. Также хеш-функции применяют в базах данных для хранения паролей и оганизации хеш-таблиц.
Whirlpool [1] : криптографическая хеш-функция, разработанная Винсентом Риджменом (Vincent Rijmen) и Пауло Баретто (Paolo Barreto). Впервые опубликована в ноябре 2000 года. Осуществляет хеширование входного сообщения с длиной до бит. Одобрена европейской организацией NESSIE (New European Schemes for Signature, Integrity and Encryption, Новые европейские схемы подписей, целостности и шифрования). Основой для хеш-функций может быть блочный шифр с симметричными ключами. Для Whirlpool функцией сжатия является блочный шифр AES.
2. Структура Whirlpool
2.1. Дополнение сообщения
Входное сообщение разбивается на 512-битовые блоки , , , если длина блока < 512 бит, блок дополянется до 512 бит. Результатом дополнения сообщения M является сообщение , длина кратна 512 бит. Пусть L - длина сообщения M. Для того, чтобы получить , необходимо сделать 3 операции: 1) К концу сообщения M приписать бит «1»; 2) Приписать x битов «0», чтобы длина полученной строки L+1+ x была кратна 256 нечетное число раз; 3) Приписать 256-битное представление числа L. Для решения данной проблемы в Whirlpool используется дополнение входного сообщения. Результатом дополнения сообщения является сообщение , длина которого кратна 512 бит. Пусть — длина исходного сообщения. Для того, чтобы получить , необходимо сделать 3 операции:
- К концу сообщения приписать бит «1» ;
- Приписать x битов «0» так, чтобы длина полученной строки была кратна 256 нечетное число раз;
- Приписать 256-битное представление числа .
2.2. Схема Миагучи-Пренеля
Whirlpool использует структуру Меркля-Дамгарда[2] и одностороннюю функцию сжатия Миагучи-Пренеля[2] (рис. 1) для формирования 512-блока зашифрованого текста W. После дополнения входное сообщение разбивается на 512-битовые блоки , , , которые используются для генерации последовательности хэш-значений , , ( - строка из 512 «0» бит). Для вычисления , шифрует , используя в качестве ключа , и выполняет между и . Значением хэш-функции является .
https://www.dropbox.com/home/1?preview=Miyaguchi-Preneel.bmp
2.3. Параметры алгоритма
Входным потоком для алгоритма Whirlpool является последовательность произвольной длины, выходным потоком является последовательность 512 бит. Ключ хеширования для алгоритма Whirlpool - последовательность из 512 бит. Алгоритм состоит из 10 раундов. На каждом раунде используется функция раунда.
2.4 Функция раунда
512 бит входного блока группируются в 64 байта . Затем эти байты записываются
в матрицу размером 8 * 8:
В дальнейшем нам придется работать в конечном поле . Элементы это байты, они могут складываться с помощью операции XOR. Модель конечного поля зависит от выбора неприводимого многочлена степени 8. Для Whirlpool этим многочленом является .
Процедуры, входящие в функцию раунда:
- сдвиг столбцов матрицы состояния на различную величину (ShiftColumns?);
- перемешивание данных каждого столбца матрицы состояния (SubBytes?);
- умножение каждого столбец матрицы состояния на матрицу констант в (MixRows?);
- сложение ключа раунда с матрицей состояния (AddRoundKey?).
ShiftColumns?
Процедура ShiftColumns? (рис. 3) обеспечивает сдвиг столбцов матрицы состояния на различную величину. Столбец j сдвигается на j байт (Столбец 0 не изменяется, столбец 7 сдвигается на 7 байт.) В результате в матрице состояния записаны новые 8 байт.
SubBytes?
Процедура SubBytes? (рис. 4) обеспечивает нелинейную замену байт матрицы состояния с помощью таблицы (S-Box). Байт представляют в виде двух шестнадцатеричных цифр. Левая цифра определяет строку, а правая- столбец таблицы подстановки. Две шестнадцатеричные цифры на пересечении строки и столбца определяют новый байт. Например, два байта, 5A16 и 5B16, которые отличаются только одним битом, преобразованы к и , которые отличаются пятью битами. Таблица S-Box приведена в приложениии 1
Таблица может быть вычислена алгебраически, используя поле с неприводимым полиномом . - миниблоки вычисляют степень, равную шестнадцатеричному значению входа; - миниблок использует псевдослучайный генератор чисел.
Каждая шестнадцатеричная цифра в байте передается миниблок ( и ).
Результаты блока и складываются с помощью XOR, и передаются на миниблок .
Чтобы получить старшие 4 бита результата, выполняется XOR между выходами миниблоков и .
Чтобы получить младшие 4 бита результата, выполняется XOR между выходами миниблоков и .
2.4.3. MixRows?
Процедура MixRows? - матричное преобразование, где байты интерпретируются как полиномы с коэффициентами в . Каждая строка матрицы состояния перемножается с фиксированным многочленом с(x) в . Для Whirlpool этим многочленом является .
2.4.4. AddRoundKey?
В преобразовании AddRoundKey? байт матрицы состояния складывается в поле с соответствующим байтом матрицы состояний ключей раунда. Результат - новый байт в новой матрице состояний.
https://www.dropbox.com/home/1?preview=AddRoundKey_Whirlpool.bmp
2.4.5. Константы раунда
Каждая константа раунда является матрицей 8 x 8, где только первая строка имеет значения, отличные от нуля. Остальная часть входов содержит все нули. Значения для первой строки в каждой матрице констант могут быть вычислены, используя преобразование SubBytes?. Другими словами, использует первые восемь входов в таблице преобразования SubBytes?; использует вторые восемь входов, и т. д.
2.4.6 Расширение ключа
Для каждого раунда необходим 512-битный ключ шифрования. Для решения данной проблемы во многих алгоритмах вводится так называемая процедура расширения ключа. В Whirlpool расширение ключа реализуется следующим образом:
где - ключ раунда, - константа раунда, а - функция раунда;
Таким образом, из известного ключа производится необходимая последовательность ключей для каждого раунда блочного шифра .
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. Список литературы
- Vincent Rijmen, Paolo Barreto. "The WHIRLPOOL Hashing Function"- Scopus Tecnologia S. A, San Paulo, Brazil, 2000,
- Schneier Bruce, Ferguson Niels, "Practical cryptography"- Inc, Wiley Publishing, pp 432 ,2003.
- Taizo Shirai, Kyoji Shibutani. "On the diffusion matrix employed in the Whirlpool hashing function",- NESSIE public report, 2003
- Florian Mendel, Christian Rechberger, Martin Schlaffer, Soren S. Thomsen. "The Rebound Attack: Cryptanalysis of Reduced Whirlpool and Grostl"- Unpublished manuscript, 2009.