Перейти до вмісту

Trivium (шифр)

Матеріал з Вікіпедії — вільної енциклопедії.
Структура шифру Trivium

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

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

Даний потоковий шифр генерує аж до біт вихідного потоку з 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, так званий ключовий потік, довгою аж до біт. Для шифрування повідомлення необхідно провести операцію XOR від повідомлення і ключового потоку. Розшифровка проводиться аналогічним чином виконується операція XOR від шифротексту і ключового потоку.

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

[ред. | ред. код]

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

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

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

[ред. | ред. код]

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

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

Період

[ред. | ред. код]

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

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

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

[ред. | ред. код]

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

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

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

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

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

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

[ред. | ред. код]

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

Посилання

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. а б Yun Tian, Gongliang Chen, Jianhua Li (2009). On the Design of Trivium (PDF). eprint.iacr.org (англ.). Архів оригіналу (PDF) за 25 вересня 2018. Процитовано 23 квітня 2018.
  2. Christophe De Cannière, Bart Preneel. Trivium Specifications (PDF). ecrypt.eu.org (англ.). Архів оригіналу (PDF) за 20 жовтня 2016. Процитовано 23 квітня 2018. [Архівовано 2016-10-20 у Wayback Machine.]
  3. https://web.archive.org/web/20180614000259/https://link.springer.com/chapter/10.1007%2F978-3-540-77360-3_3. Архів оригіналу за 14 червня 2018. Процитовано 23 квітня 2018. {{cite web}}: Пропущений або порожній |title= (довідка)
  4. Antonio Castro Lechtaler, Marcelo Cipriano, Edith García, Julio Liporace, Ariel Maiorano, Eduardo Malvacio,. Model Design for a Reduced Variant of a Trivium Type Stream Cipher (PDF). wp.iese.edu.ar (англ.). Архів оригіналу (PDF) за 12 березня 2017. Процитовано 23 квітня 2018.
  5. Itai Dinur, Adi Shamir. Cube Attacks on Tweakable Black Box Polynomials (PDF). eprint.iacr.org (англ.). Архів оригіналу (PDF) за 17 травня 2017. Процитовано 23 квітня 2018.
  6. Key differentiation attacks on stream ciphers (PDF). eprint.iacr.org (англ.). Архів оригіналу (PDF) за 26 серпня 2016. Процитовано 23 квітня 2018.
  7. Alexander Maximov, Alex Biryukov. Two Trivial Attacks on Trivium (PDF). eprint.iacr.org (англ.). Архів оригіналу (PDF) за 30 липня 2016. Процитовано 23 квітня 2018.