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 видає послідовність чисел, близьку до випадкової.
0000000 e0 fb 26 bf 59 58 1b 05 7a 51 4e 2e 9f 23 7f c9 0000010 32 56 16 03 07 19 2d cf a8 e7 0f 79 b2 a1 cd e9 0000020 52 f7 03 92 68 02 38 b7 4c 2b 75 1a a2 9a 9a 59 0000030 55 28 98 49 74 6e 59 80 80 03 4c 1a a5 b5 f2 d4 0000040 34 69 bb 86 ca 52 15 b3 ae 80 12 69 73 55 9a 31 0000050 b2 6c 0e f5 16 40 20 d6 30 7f 4e 3f 48 16 dc 24 0000060 25 5c ad c4 10 a1 c9 1b bb e8 01 4e dc fc 2e 27 0000070 9e fa ae 02 a2 48 05 b2 2e fb f4 4f 27 76 56 27 0000080 3e 5e b7 06 4e e6 4a 57 7b ad a2 3a 1c 52 ff 48 0000090 f3 92 f8 87 ff 98 aa 87 e6 bf f6 19 38 3c ff 19 00000a0 3f 0a a5 fd 01 ec d0 d8 fa f0 fa 87 09 a1 4e ee 00000b0 63 29 9f 9b 31 ef 95 a5 c7 76 19 8d c7 e0 df 55 00000c0 1b 0f 50 e9 b8 91 85 ea 06 7b d5 2a ad 2b 77 f4 00000d0 ac 84 9b 6d 3f 2e a9 85 99 d7 04 95 02 33 fd f0 00000e0 b7 f8 5b 6e b7 c8 f0 b4 46 aa 20 cd a0 dd dd 4f
Як можна помітити, після 4х циклів ініціалізації одиниці, записані в комірки , і вплинули на всі інші біти початкового стану, і, таким чином, навіть при найпростіших і однакових ключах кожен байт повідомлення буде змінений в результаті роботи алгоритму шифрування.
Генератор потоку використовує 15 біт з 288битного початкового стану для зміни 3х біт стану та обчислення 1 біта ключового потоку . В результаті роботи алгоритму може бути отримано до біт ключового потоку. Алгоритм може бути описаний наступним псевдокодом.
В даному псевдокоді всі обчислення проводяться за модулем 2. Тобто операції додавання і множення є операціями XOR і AND.
Період ключового потоку складно визначити, за нелінійного характеру змін початкового стану. Навіть якщо відкрити всі тригери AND, що призведе до повністю лінійною схемою, можна показати, що будь-яка пара ключа і ініціалізуючого вектора приведе до генерації ключового потоку з періодом порядку (що вже перевершує необхідну довжину ключового потоку ).
Якщо ж припустити, що Trivium починає генерувати випадковий ключовий потік, після невеликої кількості ітерацій, то всі згенеровані послідовності, довжиною до будуть рівноймовірні. А також ймовірність того, що пара ключ/ініціалізувалися вектор згенерують ключовий потік з періодом менше, ніж буде порядку [2].
Модифікації даного шифру відрізняються кількістю регістрів зсуву і їх довжинами.
Шифр Univium складається з одного регістра зсуву, для кодування необхідний тільки ключ довжиною, що не перевищує довжину регістра.[1]
Разом з Trivium його автори запропонували шифр Bivium, в якому реалізовані тільки 2 зсувних регістра сумарної довжини 177 біт. Процес ініціалізації аналогічний Trivium. Кожен такт змінюються 2 біти стану і формується новий біт ключового потоку. По генерації ключового потоку Z розрізняють 2 версії: Bivium-A і Bivium-B(Bivium). У Bivium-A реалізована пряма залежність нового члена Z від зміненого стану біта , на відміну від неї в Bivium-B (Bivium) .[3]
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 біта.
- Trivium на сторінці проекту eSTREAM [Архівовано 23 вересня 2015 у Wayback Machine.]
- Опис алгоритму на сторінці проекту eSTREAM [Архівовано 20 вересня 2015 у Wayback Machine.]
- Принципи побудови потокових шифрів [Архівовано 26 травня 2011 у Wayback Machine.]
- ↑ а б Yun Tian, Gongliang Chen, Jianhua Li (2009). On the Design of Trivium (PDF). eprint.iacr.org (англ.). Архів оригіналу (PDF) за 25 вересня 2018. Процитовано 23 квітня 2018.
- ↑ Christophe De Cannière, Bart Preneel. Trivium Specifications (PDF). ecrypt.eu.org (англ.). Архів оригіналу (PDF) за 20 жовтня 2016. Процитовано 23 квітня 2018. [Архівовано 2016-10-20 у Wayback Machine.]
- ↑ 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=
(довідка) - ↑ 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.
- ↑ Itai Dinur, Adi Shamir. Cube Attacks on Tweakable Black Box Polynomials (PDF). eprint.iacr.org (англ.). Архів оригіналу (PDF) за 17 травня 2017. Процитовано 23 квітня 2018.
- ↑ Key differentiation attacks on stream ciphers (PDF). eprint.iacr.org (англ.). Архів оригіналу (PDF) за 26 серпня 2016. Процитовано 23 квітня 2018.
- ↑ Alexander Maximov, Alex Biryukov. Two Trivial Attacks on Trivium (PDF). eprint.iacr.org (англ.). Архів оригіналу (PDF) за 30 липня 2016. Процитовано 23 квітня 2018.