Trivium (шифр)

Trivium (шифр)
Структура шифра Trivium

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

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

Данный потоковый шифр генерирует вплоть до 2^{64} бит выходного потока из 80 бит ключа и 80 бит IV (вектора инициализации). Это — самый простой шифр проекта eSTREAМ, который показывает отличные результаты по криптоустойчивости.

Содержание

Описание

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

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

Алгоритм

Потоковые шифры

Trivium генерирует последовательность Z, так называемый ключевой поток, длинной вплоть до N\le 2^{64} бит. Для шифровки сообщения необходимо провести операцию XOR от сообщения и ключевого потока. Расшифровка производится аналогичным образом, выполняется операция XOR от шифротекста и ключевого потока.

Инициализация

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

(s_1, s_2,..., s_{93}) \leftarrow (K_1,..., K_{80}, 0,..., 0)
(s_{94}, s_{95},..., s_{177}) \leftarrow (IV_1,..., IV_{80}, 0,..., 0)
(s_{178}, s_{179},..., s_{288}) \leftarrow (0,...0, 1, 1, 1)
\mbox{for}\ i = 1\ \mbox{to}\ 4\cdot 288\ \mbox{do}
 t_1 \leftarrow s_{66} + s_{91}\cdot s_{92}+ s_{93}+s_{171}
 t_2 \leftarrow s_{162} + s_{175}\cdot s_{176}+ s_{177} + s_{264}
 t_3 \leftarrow s_{243}+ s_{286}\cdot s_{287} + s_{288}+ s_{69}
 
(s_1, s_2,..., s_{93})\leftarrow (t_3, s_1,..., s_{92})
(s_{94}, s_{95},..., s_{177})\leftarrow (t_1, s_{94},..., s_{176})
(s_{178}, s_{179},..., s_{288}) \leftarrow (t_2, s_{178},..., s_{287})
\mbox{end for}

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

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

Генератор потока использует 15 бит из 288битного начального состояния для изменения 3х бит состояния и вычисления 1 бита ключевого потока z_i. В результате работы алгоритма может быть получено до N\le 2^{64} бит ключевого потока. Алгоритм может быть описан следующим псевдокодом.

\mbox{for}\ i=1\ \mbox{to}\ N\ \mbox{do}
t_1\leftarrow s_{66}+s_{93}
t_2\leftarrow s_{162}+s_{177}
t_3\leftarrow s_{243}+s_{288}
 
z_i\leftarrow t_1+t_2+t_3
 
 t_1 \leftarrow s_{66} + s_{91}\cdot s_{92}+ s_{93}+s_{171}
 t_2 \leftarrow s_{162} + s_{175}\cdot s_{176}+ s_{177} + s_{264}
 t_3 \leftarrow s_{243}+ s_{286}\cdot s_{287} + s_{288}+ s_{69}
 
(s_1, s_2,..., s_{93})\leftarrow (t_3, s_1,..., s_{92})
(s_{94}, s_{95},..., s_{177})\leftarrow (t_1, s_{94},..., s_{176})
(s_{178}, s_{179},..., s_{288}) \leftarrow (t_2, s_{178},..., s_{287})
\mbox{end for}

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

Период

Период ключевого потока сложно определить, из-за нелинейного характера изменений начального состояния. Даже если открыть все триггеры AND, что приведет к полностью линейной схеме, можно показать, что любая пара ключа и инициализирующего вектора приведет к генерации ключевого потока с периодом порядка 2^{96-3}-1 (что уже превосходит требуемую длину ключевого потока 2^{64}).

Если же предположить, что Trivium начинает генерировать случайный ключевой поток, после небольшого количества итераций, то все сгенерированные последовательности, длинной до 2^{288} будут равновероятны. А также вероятность того, что пара ключ/инициализирующий вектор сгенерируют ключевой поток с периодом меньше, чем 2^{80} будет порядка 2^{-208}.[2]

Производительность

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

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

Защищенность

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

В данный момент не известно никаких методов атаки на данный алгоритм, которые были бы эффективнее последовательного перебора (или брутфорса (англ. brute force)). Сложность проведения данной атаки зависит от длины сообщения и составляет порядка 2^{120}.

Существуют исследования методов атак (например кубическая атака[3]), которые близки по эффективности к перебору. Кроме того, существует метод атаки, позволяющий восстановить K из IV и ключевого потока. Сложность данной атаки равна 2^{135} и незначительно уменьшается при увеличении количества инициализирующих векторов, использовавшихся с одним ключом. Возможны также атаки с исследованием псевдослучайной последовательности ключевого потока с целью нахождения закономерностей и предсказания последующих бит потока, но данные атаки требуют решения сложных нелинейных уравнений. Наименьшая полученная сложность такой атаки составляет 2^{164} [4][5]

Методы исследования

Практически все достижения в области взлома Trivium представляют собой попытки применить атаки, удачно проведенные на усеченных версиях алгоритма.[1] Зачастую, в качестве исследуемого используется версия алгоритма Bivium, в котором используется всего 2 сдвиговых регистра суммарной длины 192 бита.[1]

Ссылки

Примечания



Wikimedia Foundation. 2010.

Нужно решить контрольную?

Полезное


Смотреть что такое "Trivium (шифр)" в других словарях:

  • Блочный шифр — Общая схема работы блочного шифра Блочный шифр  разновидность симметричного шифра …   Википедия

  • Поточный шифр — это симметричный шифр, в котором каждый символ открытого текста преобразуется в символ шифрованного текста в зависимости не только от используемого ключа, но и от его расположения в потоке открытого текста. Поточный шифр реализует другой подход к …   Википедия

  • Present (шифр) — У этого термина существуют и другие значения, см. Present. Present Опубликован: CHES в 2007; Размер ключа: 80 бит (Present 80), 128 бит (Present 128) Размер блока: 64 бит Число раундов: 31 Тип: SP сеть …   Википедия

  • A3 (шифр) — A3  алгоритм, используемый в процессе аутентификации в глобальном цифровом стандарте для мобильной сотовой связи GSM. A3 является, таким образом, элементом системы обеспечения конфиденциальности разговора в GSM наряду с алгоритмами A5 и A8.… …   Википедия

  • A8 (шифр) — A8  алгоритм формирования ключа шифрования, который впоследствии используется для обеспечения конфиденциальности передаваемой по радиоканалу информации в стандарте мобильной сотовой связи GSM. A8 является одним из алгоритмов обеспечения… …   Википедия

  • Cobra (шифр) — Cobra Создатель: Кристиан Шнайдер, Создан …   Википедия

  • Dragon (шифр) — У этого термина существуют и другие значения, см. Dragon. Dragon  поточный шифр, впервые представленный[1] на ежегодной международной конференции ICISC в 2003 году. В апреле 2005 года, он был отправлен на конкурс eStream, целью которого было …   Википедия

  • HPC (шифр) — У этого термина существуют и другие значения, см. HPC. Содержание 1 Общая структура 2 Структура раунда HPC Medium[1][2] …   Википедия

  • SC2000 (шифр) — Эту статью следует викифицировать. Пожалуйста, оформите её согласно правилам оформления статей …   Википедия

  • eSTREAM — eSTREAM  проект по выявлению новых поточных шифров, пригодных для широкого применения, организованный ЕС. Был начат после взлома всех 6 шифров, предложенных в проекте NESSIE. Условия приёма алгоритмов впервые были опубликованы в… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»