Алгоритм шифрования Trivium представляет собой поточный шифр, т. е. при работе этого алгоритма генерируется псевдослучайная последовательность битов, которая, складываясь побитно по модулю 2 с соответствующими битами шифруемого текста, образует его шифр-текст.
Структура Trivium представляет собой три сдвиговых регистра общей длиной 288 бит с нелинейной комбинацией прямой и обратной связи, которые совместно формируют псевдослучайную последовательность (бегущий ключ) длиной вплоть до 2м бит. При каждом такте выполнения алгоритма происходит сдвиг вправо на один бит в каждом из битовых регистров, а на выходе генерируется один бит бегущего ключа. Шифрование сообщения производится путем выполнения операции сложения по модулю 2 бит сообщения с соответствующими битами бегущего ключа. Расшифрование выполняется путем сложения по модулю 2 бит шифра сообщения с соответствующими битами бегущего ключа.
На рис. 101 представлен общий вид алгоритма Trivium. Числами представлена позиция бита в регистрах, операция означает умножение, а операция (c)сложение по модулю 2.
Для начального заполнения регистров Trivium используются два источника: секретный ключ К и управляющий вектор IV. Размеры ключа и управляющего вектора составляют 80 бит.
Первый регистр алгоритма Trivium имеет длину 93 бита, второй — 84 бита, третий — 111 бит.
Рис. 101. Алгоритм шифрования Trivium.
Перед генерацией псевдослучайной последовательности Z, необходимо произвести процедуру инициализации, заключающуюся в том, что вначале регистры Trivium заполняются битами из секретного ключа К и управляющего вектора IV. Поле этой процедуры происходит выполнение четырех циклов длиной в 288*4 тактов алгоритма Trivium, без генерации выходной последовательности Z. Последняя процедура необходима для того, чтобы каждый бит начального состояния регистров зависел от каждого бита вектора IV и ключа К. На самом деле это достигается при выполнении двух полных циклов (288*2 такта), остальные два цикла необходимы для усложнения взаимосвязей битов регистра.
В целом ход работы Trivium нс слишком изменяется по отношению к процессу инициализации. Единственным отличием является то, что теперь на каждом такте выполнения алгоритма генерируется один бит последовательности Z, который представляет собой сумму по модулю 2 шести битов регистров (по два с каждого регистра). Номера битов, участвующие в генерации Z (как видно из рис. 101), соответствуют значениям 66, 93, 162,177,243,288.