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, доступный для самостоятельного шифрования и дешифрования.