Криптостойкость Whirlpool

Хеш-функция H считается криптографически стойкой, если она удовлетворяет трём основным требованиям, на которых основано большинство применений хеш-функций в криптографии: необратимость, стойкость к коллизиям первого рода и стойкость к коллизиям второго рода.

Пусть hn - произвольная n-битная подстрока 512-битного хеша Whirlpool.

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

1. Генерация коллизии требует порядка 2n / 2 вычислений хеша WHIRLPOOL (стойкость к коллизиям второго рода).

2. Для заданной hn поиск такого сообщения M, что H(M) = hn, потребует порядка 2n вычислений хеша WHIRLPOOL (необратимость).

3. Для заданного сообщения M обнаружение другого сообщения N, для которого H(N) = H(M), потребует порядка 2n вычислений хеша WHIRLPOOL (стойкость к коллизиям первого рода).

4. Невозможно обнаружить систематические корреляции между любой линейной комбинацией входных бит и любой линейной комбинацией бит хеша или предсказать, какие биты хеша изменят свое значение при изменении определенных входных бит (стойкость к линейному криптоанализу и дифференциальному криптоанализу).

К данному заявлению авторы Whirlpool добавили примечание:

Эти утверждения вытекают из значительного запаса прочности относительно всех известных атак. Тем не менее, мы понимаем, что невозможно сделать не спекулятивные утверждения о неизвестных вещах.

Таблица 1.2. Результаты криптоанализа хеш-функций Whirlpool и Grшstl по методу The Rebound Attack

Хеш-функция

Число раундов

Сложность

Требуемый объём памяти

Тип коллизии

Whirlpool

4.5 / 10

2120

216

коллизия

5.5 / 10

2120

216

полусвободная коллизия

7.5 / 10

2128

216

полусвободная почти коллизия

Grшstl-256

6 / 10

2120

270

полусвободная коллизия

Авторы исследования использовали следующие понятия и термины:

1.  - вектор инициализации

2.  - сообщение, подлежащее хешированию

3.  - хеш-функция

4. функция сжатия

Типы коллизий:

1. коллизия:

1.1. - фиксирован

2. почти коллизия:

2.1. - фиксирован

2.2. небольшое число бит хешей и различны

3. полусвободная коллизия:

4. свободная коллизия:

Применение Whirlpool

Whirlpool - свободно распространяемая хеш-функция. Поэтому она находит широкое применение в открытом программном обеспечении. Здесь перечислены некоторые примеры использования Whirlpool:

1. Jacksum - свободно распространяемая утилита для вычисления контрольных сумм.

2. Crypto++ - свободно распространяемая C++ библиотека классов криптографических примитивов.

3. TrueCrypt - программа для шифрования «на лету».

4. FreeOTFE - это свободная бесплатная программа с открытым кодом, предназначенная для шифрования «на лету». Выпускается для операционных систем Windows и Windows Mobile (FreeOTFE4PDA).

5. DarkCrypt - свободно распространяемая крипто- и стеганографическая утилита в виде плагина для Total Commander.

Для удобства 512 бит (64 байта) хеша Whirlpool часто представляются в виде 128-значного шестнадцатеричного числа.

Как говорилось выше, алгоритм потерпел два изменения с момента выпуска в 2000 году. Ниже приведены примеры хешей, вычисленных по ASCII тексту панграммы «The quick brown fox jumps over the lazy dog» для всех трех версий Whirlpool:

Whirlpool-0("The quick brown fox jumps over the lazy dog") =

4F8F5CB531E3D49A61CF417CD133792CCFA501FD8DA53EE368FED20E5FE0248C

3A0B64F98A6533CEE1DA614C3A8DDEC791FF05FEE6D971D57C1348320F4EB42D

Whirlpool-T("The quick brown fox jumps over the lazy dog") =

3CCF8252D8BBB258460D9AA999C06EE38E67CB546CFFCF48E91F700F6FC7C183

AC8CC3D3096DD30A35B01F4620A1E3A20D79CD5168544D9E1B7CDF49970E87F1

Whirlpool("The quick brown fox jumps over the lazy dog") =

B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F

D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35

Даже небольшое изменение исходного текста сообщения (в данном случае подменяется одна буква: символ «d» заменяется на символ «e») приводит к полному изменению хеша:

Whirlpool-0("The quick brown fox jumps over the lazy eog") =

228FBF76B2A93469D4B25929836A12B7D7F2A0803E43DABA0C7FC38BC11C8F2A

9416BBCF8AB8392EB2AB7BCB565A64AC50C26179164B26084A253CAF2E012676

Whirlpool-T("The quick brown fox jumps over the lazy eog") =

C8C15D2A0E0DE6E6885E8A7D9B8A9139746DA299AD50158F5FA9EECDDEF744F9

1B8B83C617080D77CB4247B1E964C2959C507AB2DB0F1F3BF3E3B299CA00CAE3

Whirlpool("The quick brown fox jumps over the lazy eog") =

C27BA124205F72E6847F3E19834F925CC666D0974167AF915BB462420ED40CC5

0900D85A1F923219D832357750492D5C143011A76988344C2635E69D06F2D38C

Добавление символов в строку, конкатенация строк и другие изменения также влияют на результат.

Примеры хешей для «нулевой» строки:

Whirlpool-0("") =

B3E1AB6EAF640A34F784593F2074416ACCD3B8E62C620175FCA0997B1BA23473

39AA0D79E754C308209EA36811DFA40C1C32F1A2B9004725D987D3635165D3C8

Whirlpool-T("") =

470F0409ABAA446E49667D4EBE12A14387CEDBD10DD17B8243CAD550A089DC0F

EEA7AA40F6C2AAAB71C6EBD076E43C7CFCA0AD32567897DCB5969861049A0F5A

Whirlpool("") =

19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7

3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3

Таблица 1.3. Примеры в программировании

Среда исполнения

Код

Результат

PHP 5.0

echo hash( 'whirlpool', 'test' );

b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f

8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6

Ruby

puts Whirlpool.calc_hex('test')

b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f

8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6

Вывод: Достоинством алгоритма хеширования Whirlpool является то что для него пока не нашли коллизий. Недостатком этого алгоритма является сложность реализации.

 
< Пред   СОДЕРЖАНИЕ   Скачать   След >