Threefish — в криптографії симетричний блоковий криптоалгоритм, розроблений автором Blowfish та Twofish, американським криптографом Брюсом Шнайером 2008 року для використання в хеш-функції Skein і як універсальну заміну наявним блоковим шифрам. Основними принципами розробки шифру були: мінімальне використання пам'яті, необхідна для використання в хеш-функції стійкість до атак, простота реалізації та оптимізація під 64-розрядні процесори.
Структура алгоритму
Threefish має дуже просту структуру і може бути використаний для заміни алгоритмів блочного шифрування, бувши швидким і гнучким шифром, що працюють в довільному режимі шифрування. Threefish S-блоки не використовує, заснований на комбінації інструкцій виключаючого або, складання і циклічного зсуву.
Як і AES, шифр реалізований у вигляді підстановочно-перестановочної мережі на оборотних операціях, не будучи шифром мережі Фейстел.
Алгоритм передбачає використання tweak-значення, свого роду вектора ініціалізації, дозволяючи змінювати таким чином значення виходу, без зміни ключа, що має позитивний ефект як для реалізації нових режимів шифрування, так і на криптостойкости алгоритму.
Як результат думки авторів, що кілька складних раундів часто гірше ніж застосування великого числа простих раундів, алгоритм має нетрадиційно велику кількість раундів - 72 або 80 при датаграмі 1024 біт, проте, за заявою творців, його швидкісні характеристики випереджають AES приблизно вдвічі. Варто зауважити, що через 64-бітної структури шифру, дана заява правдива лише на 64-розрядній архітектурі. Тому, Threefish, як і Skein Skein випереджає вдвічі SHA-512 і входить в п'ятірку найбільш швидких хеш-функцій-кандидатів SHA-3 на 64-бітної архітектури, заснований на ньому, на 32-розрядних процесорах показує значно гірші результати ніж на «рідному» обладнанні.
Ядром шифру є проста функція «MIX», перетворювальна два 64-бітових беззнакових числа, в процесі якої відбувається складання, циклічний зсув (ROL / ROR), і додавання по модулю 2 (XOR).
Нижче представлений код MIX-функції для Threefish-1024Вихідний код Threefish-1024 на мові C та мовою Delphi:
// Константи для циклічного зсуву
int R16 = { {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 = x + x ; rotl = R16 [d% 8] [j]; y = (x << rotl) | (x >> (64 - rotl)); y ^ = y ; }
Процедура розшифрування обернена процедурі зашифрування і містить зворотну функцію DEMIX.
Кожен з 72 раундів Threefish-256 і Threefish-512 має чотири MIX перетворення, Threefish-1024 - вісім звернень до MIX функції.
Безпека
За заявою авторів, алгоритм має більш високий рівень безпеки, ніж AES. Існує атака на 25 з 72 раундів Threefish, в той час як для AES - на 6 з 10. Threefish має показник фактора безпеки 2.9, в свою чергу, AES всього 1.7
Для досягнення повної дифузії, шифру Threefish-256 досить 9 раундів, Threefish-512 - 10 раундів і Threefish-1024 - 11 раундів. Виходячи з цього, 72 і 80 раундів відповідно в середньому, забезпечать кращі результати, ніж існуючі шифри. The Skein Hash Function Family
У той же час, алгоритм має набагато простішу структуру і функцію перетворення, проте виконання 72-80 раундів, на думку дослідників, забезпечує необхідну стійкість. Вживаний розмір ключа від 256 до 1024 біт зводить нанівець можливість повного перебору паролів при так званій атаці грубою силою (brute force attack) на сучасному обладнанні.
Посилання Офіційна сторінка Skein і Threefish Інформація по шифру Threefish Вихідний код алгоритму Threefish-512 на мовах C і Delphi
Див. також
Skein — хеш-функція, заснована на Threefish
Примітки