STRUMOK

Материал из testwiki
Перейти к навигации Перейти к поиску

Шаблон:Блочный шифр «СТРУМОК» (Шаблон:Lang-en; рус. Ручей; поток; струя) — потоковый симметричный шифр, описанный в национальном стандарте Украины ДСТУ 8845:2019 «Информационные технологии. Криптографическая защита информации. Алгоритм симметричного поточного преобразования»[1]. Стандарт вступил в силу с 1 октября 2019.

В зависимости от длинны секретного ключе имеет два режима работы: «СТРУМОК-256» и «СТРУМОК-512».

СТРУМОК обеспечивает высокую скорость формирования ключевого потока (более 10 Гбит/c).

Схема работы

Схема работы шифра СТРУМОК
Формирование ключевого потока в шифре СТРУМОК

Общая схема работы

В основе алгоритма СТРУМОК лежит идея гаммирования, заключающаяся в «наложении» последовательности, состоящей из случайных чисел, на открытый текст. Генератор псевдослучайных чисел СТРУМОК использует 256-битный вектор инициализации IV и 256-битный или 512-битный секретный ключ K и обеспечивает стойкость с учётом возможного применения квантового криптографического анализа. Криптоалгоритм ориентирован на 64-разрядные вычислительные системы, следовательно размер слова определён равным 64 битам.

Основными структурными компонентами генератора являются регистр сдвига с линейной обратной связью и конечный автомат, в котором выполняется нелинейное преобразование. Входные данные (ключ K и вектор инициализации IV) используются для инициализации переменной состояния Si(i>=0), которая состоит из восемнадцати 64-битных блоков:

  1. 16 ячеек регистра сдвига с линейным обратной связью : si=(s15(i),s14(i),...,s0(i)) ;
  2. два регистра конечного автомата ri=(r1(i),r0(i)) .

Выход представляет собой ключевой поток (гамму), который формируется из 64-битных слов Zi.

Алгоритм

В алгоритме СТРУМОК можно выделить три основные функции:

  1. функция инициализации Init, которая принимает в качестве входных данных ключ K и вектор инициализации IV , и производит начальное значение переменной состояния S0=(s(0),r(0));
  2. функция следующего состояния Next, которая принимает на вход переменную состояния Si=(s(i),r(i)) и производит следующее значение переменной состояния Si+1=(s(i+1),r(i+1));
  3. функция ключевого потока Strm, что принимает на входе переменную состояния Si=(s(i),r(i)) и производит на выходе ключевой поток Zi(64 бита).

Функция инициализации Init

Вход : 256 или 512-битный ключ K, 256-битный вектор инициализации IV.

Выход : начальное значение переменной состояния S0=(s(0),r(0)).

  1. В 16 ячеек регистра сдвига заносится значения, сформированные на основании ключа и вектора инициализации. Таким образом формируется S33=(s(33),r(33).
  2. Выполняются 32 инициирующих такта без генерации ключевого потока(выполнение функции Next в режиме инициализации INIT ): S1=Next32(S33,INIT.
  3. Рассчитывается начальное значение переменной состояния: S0=Next(S1).
  4. Выводится значение S0=(s(0),r(0)).

Функция следующего состояния Next

Вход: Переменная состояния Si=(s(i),r(i)) и режим работы(обычный или режим инициализации).

Выход: Переменная состояния Si+1=(s(i+1),r(i+1)).

  1. Обновляются значения регистров конечного автомата ri+1 .
  2. Обновляется значение 15 ячеек регистра сдвига: sj(i+1)=sj+1(i),j=0,1,...,14.
  3. Обновляется значение 16 ячейки: s15(i+1)=(s0(i)α)(s11(i)α1)s13(i) при работе в обычном режиме и s15(i+1)=FSM(s15(i),r1(i),r2(i))(s0(i)α)(s11(i)α1)s13(i) при режиме инициализации.
  4. Выводится значение Si+1=(s(i+1),r(i+1)).

Функция ключевого потока Strm

Вход: Переменная состояния Si=(s(i),r(i)).

Выход: ключевой поток Zi.

  1. Вычисляется значение Zi=FSM(s15(i),r1(i),r2(i))s0(i) .
  2. Выводится значение Zi .
Функция конечного автомата FSM

Функция конечного автомата FSM используется в функциях Strm и Next.

Вход : три 64-битных строки x1,x2,x3.

Выход : 64-битная строка x.

  1. Вычисляется значение x=(x1+64x2)x3 .
  2. Выводится значение x .
  • +64 обозначает операцию сложения целых чисел по модулю 264 .

Схема работы регистра сдвига

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

Обратная связь в регистре сдвига строится над полем GF(264) полиномом:

f(x)=x16+x13+α1x11+α,

где α является корнем многочлена над полем GF(28):

g(x)=x8+β170x7+β166x6+β2x5+β224x4+β70x3+β2 ,

где β является корнем многочлена над полем GF(2):

p(x)=x8+x4+x3+x2+1 .

Поле GF(28) строится над полем GF(2) полиномом p(x).

Период выходной последовательности регистра сдвига является максимальным и равным 210241.

Сравнение со SNOW 2.0

Генератор ключевого потока СТРУМОК в своей концептуальной схеме подобен SNOW 2.0. Но SNOW 2.0 ориентирован на использование в 32-разрядных вычислительных систем, тогда как СТРУМОК предназначен для использования в более мощных 64-разрядных вычислительных системах. В связи с этим в алгоритме Струмок повышается скорость формирования псевдослучайной последовательности.[2] В алгоритме СТРУМОК увеличены, по сравнению с SNOW2.0, длины секретного ключа и вектора инициализации. Это позволяет надежно применять поточный шифр даже в условиях, когда злоумышленнику доступно применение квантового криптоанализа.[3]

Тестирование направленное на определение случайности двоичных последовательностей NIST показывает, что алгоритм СТРУМОК уступает SNOW 2.0.[4]

Генератор ключевых потоков СТРУМОК позволяет формировать псевдослучайные последовательности со скоростью более 10 Гбит/с(Intel Core i9-7980XE 2.60 GHz and OS Windows® 10 Pro).[5]

Примечания

Шаблон:Примечания

Шаблон:Симметричные криптоалгоритмы