Threefish
Threefish | |
---|---|
Создатель | Группа специалистов во главе с Брюсом Шнайером |
Создан | 2008 г. |
Опубликован | 2008 г. |
Размер ключа | 256/512/1024 бит |
Размер блока | 256/512/1024 бит |
Число раундов | 72 (80 при ключе 1024 бит) |
Тип | Подстановочно-перестановочная сеть |
Threefish — в криптографии симметричный блочный криптоалгоритм, разработанный группой специалистов во главе с автором Blowfish и Twofish, американским криптографом Брюсом Шнайером в 2008 году для использования в хеш-функции Skein и в качестве универсальной замены существующим блочным шифрам. Основными принципами разработки шифра были: минимальное использование памяти, необходимая для использования в хеш-функции устойчивость к атакам, простота реализации и оптимизация под 64-разрядные процессоры.
Структура алгоритма
[править | править код]Threefish имеет очень простую структуру и может быть использован для замены алгоритмов блочного шифрования, будучи быстрым и гибким шифром, работающим в произвольном режиме шифрования. Threefish S-блоки не использует, основан на комбинации инструкций исключающего или, сложения и циклического сдвига.
Как и AES, шифр реализован в виде подстановочно-перестановочной сети на обратимых операциях, не являясь шифром сети Фейстеля.
Алгоритм предусматривает использование tweak-значения, своего рода вектора инициализации, позволяя изменять таким образом значение выхода, без изменения ключа, что имеет положительный эффект как для реализации новых режимов шифрования, так и на криптостойкости алгоритма.
Как результат мнения авторов, что несколько сложных раундов зачастую хуже применения большого числа простых раундов, алгоритм имеет нетрадиционно большое число раундов — 72 или 80 при ключе 1024 бит, однако, по заявлению создателей, его скоростные характеристики опережают AES примерно в два раза. Стоит заметить, что по причине 64-битной структуры шифра, данное заявление имеет место лишь на 64-разрядной архитектуре. Поэтому Threefish, как и Skein[1], основанный на нём, на 32-разрядных процессорах показывает значительно худшие результаты, чем на «родном» оборудовании.
Ядром шифра является простая функция «MIX», преобразующая два 64-битных беззнаковых числа, в процессе которой происходит сложение, циклический сдвиг (ROL/ROR), и сложение по модулю 2 (XOR).
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Skein_Mix_Function.png/180px-Skein_Mix_Function.png)
Определения
[править | править код]Threefish[2] является блочным алгоритмом симметричного шифрования с дополнительным параметром настройки (tweak-значение). Размер блока данных, с которым работает алгоритм — 256, 512 или 1024 бит. Длина ключа равна выбранному размеру блока. Размер tweak-значения для любого из размеров блока — 128 бит.
Определим функцию шифрования , где:
- — ключ шифрования, строка длиной 32, 64, или 128 байт (256, 512, или 1024 бит).
- — tweak-значение, строка длиной 16 байт (128 бит).
- — открытый текст для шифрования, строка длиной равной размеру блока.
Для обработки блока данные представляются в виде массива 64-битных слов (целых чисел от до ). Определим как число 64-битных слов в ключе (и в блоке), тогда:
- Ключ шифрования
- Tweak-значение
- Открытый текст
Количество раундов, для алгоритма Threefish определяется следующим образом:
Длина ключа/блока | ||
---|---|---|
256 бит | 4 | 72 |
512 бит | 8 | 72 |
1024 бит | 16 | 80 |
Расписание ключей
[править | править код]Алгоритм использует раундовых ключей. Дополним основной ключ и tweak-значение двумя 64-битными словами:
- , где
Определим подключ как .
Все операции сложения выполняются по модулю .
Где
Функция MIX
[править | править код]Нелинейная функция смешивания и перестановки принимает на вход два аргумента и возвращает
:
Где — оператор побитового циклического сдвига влево, а константа определяется из таблицы:
4 | 8 | 16 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
0 | 14 | 16 | 46 | 36 | 19 | 37 | 24 | 13 | 8 | 47 | 8 | 17 | 22 | 37 |
1 | 52 | 57 | 33 | 27 | 14 | 42 | 38 | 19 | 10 | 55 | 49 | 18 | 23 | 52 |
2 | 23 | 40 | 17 | 49 | 36 | 39 | 33 | 4 | 51 | 13 | 34 | 41 | 59 | 17 |
3 | 5 | 37 | 44 | 9 | 54 | 56 | 5 | 20 | 48 | 41 | 47 | 28 | 16 | 25 |
4 | 25 | 33 | 39 | 30 | 34 | 24 | 41 | 9 | 37 | 31 | 12 | 47 | 44 | 30 |
5 | 46 | 12 | 13 | 50 | 10 | 17 | 16 | 34 | 56 | 51 | 4 | 53 | 42 | 41 |
6 | 58 | 22 | 25 | 29 | 39 | 43 | 31 | 44 | 47 | 46 | 19 | 42 | 44 | 25 |
7 | 32 | 32 | 8 | 35 | 56 | 22 | 9 | 48 | 35 | 52 | 23 | 31 | 37 | 20 |
Зашифрование
[править | править код]Обозначим внутреннее состояние алгоритма
для раунда .
Начальное внутреннее состояние .
Каждый раунд состоит из нескольких этапов. На первом этапе раунда к внутреннему состоянию добавляется раундовый ключ как указанно ниже:
- , если
- , если
На следующем этапе раунда используется нелинейная функция :
- , для
Следующее внутреннее состояние определяется как:
- , для
Функция перестановки 64-битных слов определена в таблице ниже:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4 | 0 | 3 | 2 | 1 | ||||||||||||
8 | 2 | 1 | 4 | 7 | 6 | 5 | 0 | 3 | ||||||||
16 | 0 | 9 | 2 | 13 | 6 | 11 | 4 | 15 | 10 | 7 | 12 | 3 | 14 | 5 | 8 | 1 |
После выполнения всех раундов выходом алгоритма является шифротекст :
- , для
Расшифрование
[править | править код]Для алгоритма Threefish процедура расшифрования обратна процедуре шифрования. Раундовые ключи используются в обратном порядке, и каждый раунд состоит из обратных операций. Вместо функции используется функция , которая выполняет операции вычитания по модулю и побитовый циклический сдвиг вправо. Этапы каждого раунда расшифрования также выполняются в обратном порядке.
Безопасность
[править | править код]По заявлению авторов, алгоритм имеет более высокий уровень безопасности, чем AES. Существует атака на 25 из 72 раундов Threefish, в то время как для AES — на 6 из 10. Threefish имеет показатель фактора безопасности 2,9, в свою очередь, AES - всего 1,7[3]
Для достижения полной диффузии шифру Threefish-256 достаточно 9 раундов, Threefish-512 — 10 раундов и Threefish-1024 — 11 раундов. Исходя из этого, 72 и 80 раундов, соответственно, в среднем, обеспечат лучшие результаты, чем существующие шифры.[4]
В то же время алгоритм имеет гораздо более простую структуру и функцию преобразования, однако выполнение 72-80 раундов, по мнению исследователей, обеспечивает необходимую стойкость. Применяемый размер ключа от 256 до 1024 бит сводит на нет возможность полного перебора паролей при так называемой атаке грубой силой (brute force attack) на современном оборудовании.
Ссылки
[править | править код]- Официальная страница Skein и Threefish (англ.)
- Информация по шифру Threefish
- Исходный код алгоритма Threefish-512 на языках C и Delphi
- Официальная спецификация алгоритмов Skein и Threefish (англ.)
См. также
[править | править код]Skein — хеш-функция, основанная на Threefish
Примечания
[править | править код]- ↑ Skein опережает в два раза SHA-512 и входит в пятерку наиболее быстрых хеш-функций -кандидатов SHA-3 на 64-битной архитектуре
- ↑ Официальная спецификация алгоритмов Skein и Threefish (англ.)
- ↑ Информация по шифру в статье «The Skein Hash Function» . Дата обращения: 4 августа 2016. Архивировано 16 августа 2016 года.
- ↑ [The Skein Hash Function Family (англ.) . Дата обращения: 15 декабря 2008. Архивировано из оригинала 15 января 2009 года. The Skein Hash Function Family (англ.)]