31.10 // Хэш-функция Skein и блочный шифр Threefish


К дню "halloween" американский институт стандартов и технологий[link1] закончил приём заявок на конкурс функций SHA-3. В последующие месяцы работы будут отсеяны и объявлены те, которые будут допущены к первому раунду конкурса. По неофициальным заявлениям участников конкурса, NIST скорее всего отвергнет работы любителей по формальным соображениям без полного объективного рассмотрения, чтобы не тратить время на криптоанализ функций, которые всё-равно скорее всего будут взломаны, а сосредоточиться на анализе работ известных авторов (это обычная практика, когда малоизестным авторам предлагается проявить себя в первую очередь в криптоанализе, чтобы после этого кто-то мог обратить внимание и на их собственные разработки).

Интересный кандидат был представлен накануне в работе "The Skein Hash Function Family".
Авторы алгоритма: Нильс Фергюссон, Стефан Лукс, Брюс Шнайер, Дауг Вайтинг, Михир Бэллейр, Тадаёши Коно, Джон Каллас и Джесс Уокер.
Часть из них работала над широко известным алгоритмом Twofish.

Хэш функция Skein представляет собой универсальный криптографический примитив, состоящий из блочного шифра Threefish, который используется в режиме UBI-хэширования (Unique Block Iteration).
UBI-Skein (10 Кб)
Этот блочный шифр имеет крайне простую структуру и может использоваться для замены обычных алгоритмов блочного шифрования в качестве нового быстрого и универсального шифра в любом распространённом режиме шифрования, кроме того разрабатывается версия Threefish со специальным режимом шифрования со встроенной аутентификацией. Авторы отказались от использования тяжеловесного дизайна, S-блоков и сложных операций и использовали простейшую комбинацию инструкций XOR-ADD-Rotation.
MixFunction-Threefish (5 Кб)
Эта конструкция повторяется в течении 72 раундов при размере ключа и блока 256 и 512 бит или 80 раундов для размера ключа и блока 1024 бита.

2-Rounds-Threefish.jpg (12 Кб)

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

4-Round-Threefish (17 Кб)

Максимально необходимый ключ для использования внутри хэш-функции был-бы достаточен и 512-бит, но значение 1024 может быть использовано для защиты с запасом прочности в случае появления атак на шифр.
Шифр представляет собой SP-сеть на обратимых операциях и не является шифром Фейстеля.

Threefish поддерживает вход не только для ключа и открытого текста, но и tweak-значения (аналог вектора инициализации), что позволяет изменять значение выхода, не меняя значения ключа (что позволяет использовать новые режимы шифрования).

Функция хэширования Skein обладает широким набором свойств. При использовании различных переключаемых параметров она может использоваться не только как простая хэш-функция, но и как функция древовидного хэширования (для ускоренной обработки больших объёмов данных), в качестве кода аутентификации сообщений (MAC), или в качестве составной части HMAC, есть поддержка рандомизированного хэширования, специальный режим для использования в цифровых подписях (хэш связывается не только с сообщением, но и с самим публичным ключом), в качестве функции вычисления производных ключей (KDF), в качестве функции вычисления ключа из пароля (PBKDF), в качестве генератора псевдослучайных чисел (PRNG) и в качестве потокового шифра (этот режим отличается от PRNG, так как не требует уничтожения данных о предыдущих использованных внутренних состояниях), режим персонализации (включения адресных форматированных полей для управления криптопреобразованиями).

Кроме того Skein защищена от новых видов специфических атак на хэш-функций – подбор удлинённых сообщений, псевдоколлизии и др.

Раньше обычную хэш-функцию нельзя было использовать напрямую для разных целей, но использование концепции "доказуемой безопасности" и редукционистских аргументов стойкости позволило авторам создать универсальный криптопримитив, укладывающийся в модель случайного оракула, а блочный шифр Threefish – в модель идеального блочного шифра.
Вместо выбора разных схем и стандартов и изучения особеностей их применения, работы и реализации, разработчикам криптоприложений можно использовать Skein с различными параметрами.

Кроме стандартных размеров выхода 128, 160, 224, 256, 384 и 512 бит, Skein позволяет получить значение выхода любой длины (в пределах 264-1 ).

Авторы делают стандартные заявления, что Threefish и Skein не содержат отмычек, так как все константы содержат 512-бит и если бы в них можно было спрятать какой-либо ключ, то это было бы революционным открытием в криптографии (однако ничего не утверждается о возможных слабостях алгоритма перед неизвестными видами криптоанализа, никаких заявлений по поводу того, как такая простая структура может противостоять алгебраическому криптоанализу, кроме как из-за очень большого количества раундов также сделано не было, впрочем подробных работ по криптоанализу также пока не представлено).

В целом хэш-функция Skein на наиболее распространённых процессорах работает в два раза быстрее, чем SHA-512, а блочный шифр Threefish в два раза быстрее, чем AES.

Источник: Schneier.com[link2]

Ссылки
[link1] http://csrc.nist.gov/groups/ST/hash/sha-3/index.html

[link2] http://www.schneier.com/skein.html