Skein

Skein алгоритм

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

Одна из известных криптовалют, которые добываются на алгоритме Skein через майнинг является DigiByte (DGB).

Содержание

Обзор Skein

Skein была одной из пяти финалистов в конкурсе хэш-функций NIST, но в 2012 году в финале победителем был выбран алгоритм Keccak, наиболее продуктивный и нечувствительный к уязвимостям SHA-2. Имя Skein ссылается к функции Skein, которая переплетает входные сигналы подобно мотку пряжи, используя дополнительную систему аргументов с низкими накладными расходами для обеспечения гибкости. Алгоритм Skein был предан общественному достоянию.

Threefish Block в Skein

Threefish является конфигурируемым блок-шифром, определенным для 256, 512, и 1024 битовых блоков и произвольных выходных размеров. Авторы утверждают, что 6,1 циклов на байт для любого выходного размера на Intel Core 2 Duo в 64-разрядном режиме.

Шифр реализован в виде сетевой перестановки. Ядро Threefish основано на функции MIX, которая преобразует 2 64-битных слова, используя одно дополнение, вращение константой и XOR. Режим цепочки UBI объединяет входное значение цепочки с входной строкой произвольной длины и создает выход фиксированного размера.

Он использует 72 раундов для 256-битного и 512-битного шифров, и 80 раундов для 1024-битного шифра. Между раундами происходит перестановка слов, и каждые четыре раунда добавляется ключ, за счет чего возникает нелинейность.

Нелинейность Threefish приходит полностью от деятельностей добавлению сочетаний и XOR. Функция не использует S-коробки, она оптимизирована для 64-разрядных процессоров, а в официальном документе алгоритма Skein определены дополнительные функции, такие как рандомизированное хэширование, параллелизуемое хэширование дерева, потоковый шифр, персонализация и функция формирования ключа.

UBI

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

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

Криптоанализ алгоритма Skein

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

Number of rounds Time Memory Type of cryptanalysis
8 1 511-битная псевдоколлизия
16 26 459-битная псевдоколлизия
17 224 434-битная псевдоколлизия
17 28,6 Признак связанных ключей
21 23.4 Признак связанных ключей
21 Связанный-ключевой дифференциал
25  ? Восстановление ключа связанного ключа (предположение)
25 2416.6 Восстановление связанных ключей
26 2507.8 Восстановление связанных ключей
32 2312 271 Бумеранг восстановления связанного ключа
34 2398 Бумеранг восстановления связанного ключа
35 2478 Бумеранг-разветвитель связанного ключа

В октябре 2010 года была опубликована атака, сочетающая ротационный криптоанализ с отскоком. Атака находит вращательные столкновения для 53 из 72 раундов в Threefish-256 и в 57 из 72 раундов в Threefish-512. Это также влияет на хэш-функцию Skein.

Команда Skein изменила константу расписания ключа хэш-функции для 3-го раунда конкурса NIST, чтобы сделать эту атаку менее эффективной, хотя они уверены, что хэш все равно будет безопасным без этих настроек.

Монеты Skein

Название монеты Тип подтверждения
Bitcoin Planet (BTPL) Proof-of-work/Proof-of-stake
Numus (NMS) Proof-of-work/Proof-of-stake
Skeincoin (SKC) N/A
BashCoin (BASHC) Proof-of-work/Proof-of-stake
Lizus Payment (LIZ) Proof-of-work/Proof-of-stake
DigiByte-Skein (DGB) Proof-of-work
Myriad-Skein (XMY) Proof-of-work
Aurora Coin Skein (AUR) Proof-of-work/Proof-of-stake
Unitus-Skein (UIS) Proof-of-work

Версии Skein

Существуют реализации Skein для трех вариантов значения внутреннего состояния: 256, 512 и 1024 бит. Основным вариантом считается Skein-512, который можно смело использовать для всех криптографических приложений в обозримом будущем. 1024-разрядная версия еще более безопасна и работает в два раза быстрее в существующих аппаратных реализациях. Skein-256 является лучшим вариантом для использования в устройствах с низким объемом памяти (например, смарт-карты), так как он требует только 100 байт оперативной памяти, в отличие от Skein-512, который требует 200 байт. Из-за Threefish алгоритм Skein быстрее на 64-битных процессорах устройств. В таблице ниже приводится сравнение производительности алгоритмов Skein и SHA. В таблице показана скорость (в циклах на байт) реализации языка C на 64-разрядном процессоре.

Алгоритм/Длина сообщения (Байт) 1 10 100 1000 10000 100000
Skein-256 774 77 16,6 9,8 9,2 9,2
Skein-512 1086 110 15,6 7,3 6,6 6,5
Skein-1024 3295 330 33,2 14,2 12,3 12,3
SHA-1 677 74,2 14,0 10,4 10,0 10,0
SHA-224 1379 143,1 27,4 20,7 20,1 20,0
SHA-256 1405 145,7 77,6 20,7 20,1 20,0
SHA-384 1821 187,3 19,6 13,7 13,4 13,3
SHA-512 1899 192,5 20,6 13,8 13,4 13,3

Как видно из таблицы, Skein работает в два раза быстрее SHA-512.

Примеры хэшей в Skein

Хэш-значения пустой строки.

Skein-256-256("") 0x c8877087da56e072870daa843f176e9453115929094c3a40c463a196c29bf7ba Skein-512-256("") 0x 39ccc4554a8b31853b9de7a1fe638a24cce6b35a55f2431009e18780335d2621 Skein-512-512("") 0x bc5b4c50925519c290cc634277ae3d6257212395cba733bbad37a4af0fa06af41fca7903d06564fea7a2d3730dbdb80c1f85562dfcc070334ea4d1d9e72cba7a 

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

Skein-512-256("") 0x b3250457e05d3060b1a4bbc1428bc75a3f525ca389aeab96cfa34638d96e492a Skein-512-256(".") 0x 41e829d7fca71c7d7154ed8fc8a069f274dd664ae0ed29d365d919f4e575eebb Skein-512-512("") 0x 94c2ae036dba8783d0b3f7d6cc111ff810702f5c77707999be7e1c9486ff238a7044de734293147359b4ac7e1d09cd247c351d69826b78dcddd951f0ef912713 Skein-512-512(".") 0x 658223cb3d69b5e76e3588ca63feffba0dc2ead38a95d0650564f2a39da8e83fbb42c9d6ad9e03fbfde8a25a880357d457dbd6f74cbcb5e728979577dbce5436 

Skein в Python

PySkein – это модуль расширения для Python, реализующий алгоритм хэширования Skein. В конечном счете, не будучи выбранным победителем этого конкурса, Skein все же может быть полезен в качестве альтернативного алгоритма хэширования, предлагая гибкие режимы хэширования с различными параметрами. PySkein предоставляет все возможности Skein через интерфейс Pythonic и выпускается как свободное программное обеспечение под стандартной общественной лицензией GNU. Его основные моменты:

  • Простой интерфейс после хэш-алгоритмов в стандартной библиотеке Python (например, hashlib.sha1 или hashlib.и SHA256);
  • Все особенности спецификации Skein (гибкие размеры дайджеста, поколение MAC, хэширование деревьев и др.);
  • Высокая производительность благодаря оптимизированной реализации C (7.1 циклов / байт для последовательного хэширования и 4.2 цикла / байт для хэширования деревьев на двух ядрах, измеренных на Athlon 64 X2);
  • Threefish, настраиваемый блочный шифр, используемый в Skein, доступный для самостоятельного шифрования и дешифрования.

См. также на BitcoinWiki

Ссылки