Threefish — вкриптографії симетричний блоковий криптоалгоритм, розроблений автором Blowfish та Twofish, американським криптографомБрюсом Шнайером 2008 року для використання в хеш-функції Skein і як універсальну заміну наявним блоковим шифрам. Основними принципами розробки шифру були: мінімальне використання пам'яті, необхідна для використання в хеш-функції стійкість до атак, простота реалізації та оптимізація під 64-розрядні процесори.

Threefish
Розробники Брюс Шнайєр
Уперше оприлюднений 2008 р.
Раундів 72 (80 при ключі 1024 біт)
Тип SP-мережа

Структура алгоритму ред.

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

Примітки ред.

  1. Skein випереджає вдвічі SHA-512 і входить в п'ятірку найбільш швидких хеш-функцій-кандидатів SHA-3 на 64-бітної архітектури
  2. Вихідний код Threefish-1024 на мові C [Архівовано 5 березня 2016 у Wayback Machine.] та мовою Delphi
  3. Інформація по шифру в статті "The Skein Hash Function ". Архів оригіналу за 2 липня 2012. Процитовано 16 червня 2012.
  4. The Skein Hash Function Family [Архівовано 15 січня 2009 у Wayback Machine.](англ.)