Розробники | Брюс Шнайєр |
---|---|
Уперше оприлюднений | 2008 р. |
Раундів | 72 (80 при ключі 1024 біт) |
Тип | SP-мережа |
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).
Нижче представлений код MIX-функції для Threefish-1024[2]:
// Константи для циклічного зсуву
int R16 [8] [8] =
{
{55, 43, 37, 40, 16, 22, 38, 12},
{25, 25, 46, 13, 14, 13, 52, 57},
{33, 8, 18, 57, 21, 12, 32, 54},
{34, 43, 25, 60, 44, 9, 59, 34},
{28, 7, 47, 48, 51, 9, 35, 41},
{17, 6, 18, 25, 43, 42, 40, 15},
{58, 7, 32, 45, 19, 18, 2, 56},
{47, 49, 27, 58, 37, 48, 53, 56},
};
// D - раунд, j - індекс в таблиці циклічного зсуву
void mix (int j, int d)
{
usigned long long rotl;
y [0] = x [0] + x [1];
rotl = R16 [d% 8] [j];
y [1] = (x [1] << rotl) | (x [1] >> (64 - rotl));
y [1] ^ = y [0];
}
Процедура розшифрування обернена процедурі зашифрування і містить зворотну функцію DEMIX.
Кожен з 72 раундів Threefish-256 і Threefish-512 має чотири MIX перетворення, Threefish-1024 - вісім звернень до MIX функції.
За заявою авторів, алгоритм має більш високий рівень безпеки, ніж 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 [Архівовано 12 липня 2012 у Wayback Machine.] (англ.)
- Інформація по шифру Threefish [Архівовано 14 лютого 2016 у Wayback Machine.]
- Вихідний код алгоритму Threefish-512 на мовах C і Delphi
- Skein — хеш-функція, заснована на Threefish
- ↑ Skein випереджає вдвічі SHA-512 і входить в п'ятірку найбільш швидких хеш-функцій-кандидатів SHA-3 на 64-бітної архітектури
- ↑ Вихідний код Threefish-1024 на мові C [Архівовано 5 березня 2016 у Wayback Machine.] та мовою Delphi
- ↑ Інформація по шифру в статті "The Skein Hash Function ". Архів оригіналу за 2 липня 2012. Процитовано 16 червня 2012.
- ↑ The Skein Hash Function Family [Архівовано 15 січня 2009 у Wayback Machine.](англ.)