Threefish
Threefish — в криптографії симетричний блоковий криптоалгоритм, розроблений автором Blowfish та Twofish, американським криптографом Брюсом Шнайером 2008 року для використання в хеш-функції Skein і як універсальну заміну наявним блоковим шифрам. Основними принципами розробки шифру були: мінімальне використання пам'яті, необхідна для використання в хеш-функції стійкість до атак, простота реалізації та оптимізація під 64-розрядні процесори.
Алгоритм блокового шифрування | |
---|---|
Назва: | Threefish |
Розробник: | Брюс Шнайєр |
Створений: | 2008 р. |
Опублікований: | 2008 р. |
Розмір ключа: | 256/512/1024 біт |
Розмір блоку: | 256/512/1024 біт |
Число раундів: | 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]:
<syntaxhighlight lang="C">
// Константи для циклічного зсуву
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];
}
</Source>
Процедура розшифрування обернена процедурі зашифрування і містить зворотну функцію 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
Примітки
- Skein випереджає вдвічі SHA-512 і входить в п'ятірку найбільш швидких хеш-функцій-кандидатів SHA-3 на 64-бітної архітектури
- Вихідний код Threefish-1024 на мові C та мовою Delphi
- Інформація по шифру в статті "The Skein Hash Function "
- The Skein Hash Function Family(англ.)