Trivium (шифр)

Матеріал з testwiki
Перейти до навігації Перейти до пошуку
Структура шифру Trivium

Triviumсиметричний алгоритм синхронного потокового шифрування, орієнтований, в першу чергу, на апаратну реалізацію з гнучкою рівновагою між швидкістю роботи і кількістю елементів, що має також можливість досить ефективної програмної реалізації.

Шифр був представлений в грудні 2008 року як частина портфоліо європейського проекту eSTREAM, за профілем 2 (апаратно-орієнтовані шифри). Авторами шифру є Крістоф Де Канньєр і Барт Пренел.

Даний потоковий шифр генерує аж до 264 біт вихідного потоку з 80 біт ключа і 80 біт IV (вектора ініціалізації). Це — найпростіший шифр проекту eSTREAM, який показує відмінні результати по криптостійкості.

Trivium включений в стандарт ISO/IEC 29192-3 як легкий потоковий шифр.

Опис

Початковий стан Trivium являє собою 3 зсувних регістри сумарної довжини в 288 біт. Кожен такт відбувається зміна бітів в регістрах зсуву шляхом нелінійної комбінації прямого і зворотного зв'язку. Для ініціалізації шифру ключ K і ініціалізувалися вектор IV записуються в 2 з 3х регістрів і відбувається виконання алгоритму протягом 4х288 = 1152 раз, що гарантує залежність кожного біта початкового стану від кожного біта ключа і кожного біта ініціалізувального вектора.

Після проходження стадії ініціалізації кожен такт генерується новий член ключового потоку Z, який проходить процедуру XOR з наступним членом тексту. Процедура розшифровки відбувається в зворотному порядку — кожен член шифротексту проходить процедуру XOR з кожним членом ключового потоку Z.[1]

Алгоритм

Потокові шифри

Trivium генерує послідовність Z, так званий ключовий потік, довгою аж до N264 біт. Для шифрування повідомлення необхідно провести операцію XOR від повідомлення і ключового потоку. Розшифровка проводиться аналогічним чином виконується операція XOR від шифротексту і ключового потоку.

Ініціалізація

Алгоритм ініціалізується завантаженням 80 бітного ключа і 80 бітного ініціалізуючого вектора в 288 бітний початковий стан. Ініціалізація може бути описана наступним псевдокодом.

(s1,s2,...,s93)(K1,...,K80,0,...,0)
(s94,s95,...,s177)(IV1,...,IV80,0,...,0)
(s178,s179,...,s288)(0,...0,1,1,1)
for i=1 to 4288 do
t1s66+s91s92+s93+s171
t2s162+s175s176+s177+s264
t3s243+s286s287+s288+s69
(s1,s2,...,s93)(t3,s1,...,s92)
(s94,s95,...,s177)(t1,s94,...,s176)
(s178,s179,...,s288)(t2,s178,...,s287)
end for

Процедура ініціалізації гарантує те, що кожен біт початкового стану залежить від кожного біта ключа і кожного біта не ініціалізуючого вектора. Даний ефект досягається вже після 2х повних проходів (2 * 288 виконань циклу). Ще 2 проходи призначені для ускладнення бітових взаємозв'язків. Для прикладу перші 128 байт ключового потоку Z, отриманого від нульового ключа і ініціалізуючого вектора, мають приблизно однакову кількість рівномірно розподілених 1 і 0. Навіть при найпростіших і однакових ключах алгоритм Trivium видає послідовність чисел, близьку до випадкової.

Шаблон:Hider hiding

Робота алгоритму

Генератор потоку використовує 15 біт з 288битного початкового стану для зміни 3х біт стану та обчислення 1 біта ключового потоку zi. В результаті роботи алгоритму може бути отримано до N264 біт ключового потоку. Алгоритм може бути описаний наступним псевдокодом.

for i=1 to N do
t1s66+s93
t2s162+s177
t3s243+s288
zit1+t2+t3
t1s66+s91s92+s93+s171
t2s162+s175s176+s177+s264
t3s243+s286s287+s288+s69
(s1,s2,...,s93)(t3,s1,...,s92)
(s94,s95,...,s177)(t1,s94,...,s176)
(s178,s179,...,s288)(t2,s178,...,s287)
end for

В даному псевдокоді всі обчислення проводяться за модулем 2. Тобто операції додавання і множення є операціями XOR і AND.

Період

Період ключового потоку складно визначити, за нелінійного характеру змін початкового стану. Навіть якщо відкрити всі тригери AND, що призведе до повністю лінійною схемою, можна показати, що будь-яка пара ключа і ініціалізуючого вектора приведе до генерації ключового потоку з періодом порядку 29631 (що вже перевершує необхідну довжину ключового потоку 264).

Якщо ж припустити, що Trivium починає генерувати випадковий ключовий потік, після невеликої кількості ітерацій, то всі згенеровані послідовності, довжиною до 2288 будуть рівноймовірні. А також ймовірність того, що пара ключ/ініціалізувалися вектор згенерують ключовий потік з періодом менше, ніж 280 буде порядку 2208[2].

Шифри сімейства Trivium

Модифікації даного шифру відрізняються кількістю регістрів зсуву і їх довжинами.

Univium

Шифр Univium складається з одного регістра зсуву, для кодування необхідний тільки ключ довжиною, що не перевищує довжину регістра.[1]

Bivium

Разом з Trivium його автори запропонували шифр Bivium, в якому реалізовані тільки 2 зсувних регістра сумарної довжини 177 біт. Процес ініціалізації аналогічний Trivium. Кожен такт змінюються 2 біти стану і формується новий біт ключового потоку. По генерації ключового потоку Z розрізняють 2 версії: Bivium-A і Bivium-B(Bivium). У Bivium-A реалізована пряма залежність нового члена Z від зміненого стану біта zit1, на відміну від неї в Bivium-B (Bivium) zit1+t2.[3]

Trivium-toy і Bivium-toy

Toy-версії були отримані шляхом зменшення довжин регістрів, що дозволило знизити обчислювальну складність алгоритму, при цьому зберігаючи всі математичні властивості. Довжина кожного регістра скорочувалася в 3 рази, причому Bivium-toy також складалася лише з двох регістрів.

Кожна модифікація шифру Trivium створена для спрощення його математичного опису, що має більше навчальну мету, ніж мету застосувати їх у засобах захисту інформації.[4]

Продуктивність

Стандартна апаратна реалізація алгоритму вимагає наявності 3488 логічних елементів і виробляє 1 біт ключового потоку за 1 такт. Але, так як кожний новий стан біта не змінюється принаймні протягом 64 раундів, то ще 64 стану можуть бути згенеровані паралельно при збільшенні кількості логічних елементів до 5504. Також можливі різні варіації продуктивності в залежності від кількості використаних елементів.

Програмна інтерпретація даного алгоритму також досить ефективна. Реалізація Trivium на мові C на процесорі AthlonXP 1600+ дозволяє отримати швидкість шифрування понад 2,4 Мбіт/с

Захищеність

На відміну від ранніх потокових шифрів, як наприклад RC4, алгоритм Trivium, крім закритого ключа (K) також має ініціалізуючий вектор (IV), який є відкритим ключем. Застосування IV дозволяє проводити безліч незалежних сеансів шифрування/розшифрування використовуючи всього лише 1 ключ і кілька ініціалізуючих векторів (по одному для кожного сеансу). Також можна використовувати кілька ініціалізуючих векторів для одного сеансу, використовуючи для кожного нового повідомлення новий IV

В даний момент не відомо жодних методів атаки на даний алгоритм, які були б ефективніше послідовного перебору (або брутфорса (Шаблон:Lang-en)). Складність проведення даної атаки залежить від довжини повідомлення і становить близько 2120.

Існують дослідження методів атак (наприклад кубічна атака[5]), які близькі по ефективності до перебору. Крім того, існує метод атаки, що дозволяє відновити K з IV і ключового потоку. Складність даної атаки дорівнює 2135 і незначно зменшується при збільшенні кількості инициализирующих векторів, що використовувалися з одним ключем. Можливі також атаки з дослідженням псевдовипадковою послідовності ключового потоку з метою знаходження закономірностей і передбачення подальших біт потоку, але дані атаки вимагають вирішення складних нелінійних рівнянь. Найменша отримана складність такої атаки становить 2164[6][7]

Методи дослідження

Практично всі досягнення в області злому Trivium являють собою спроби застосувати атаки, вдало проведені на усічених версіях алгоритму. Найчастіше, досліджуваним використовується версія алгоритму Bivium, в якому використовується лише 2 зсувних регістра сумарної довжини 192 біта.

Посилання

Примітки

Шаблон:Reflist