STRUMOK

СТРУМОК
Создатель Olexandr Kuznetsov, Mariya Lutsenko, Dmytro Ivanenko, ПАТ «Інститут інформаційних технологій»
Создан 2016
Стандарты ДСТУ 8845:2019
Размер ключа 256, 512 бит
Тип Потоковый шифр

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

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

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

Схема работы

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

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

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

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

  1. 16 ячеек регистра сдвига с линейным обратной связью : s i = ( s 15 ( i ) , s 14 ( i ) , . . . , s 0 ( i ) ) {\displaystyle s_{i}=(s_{15}^{(i)},s_{14}^{(i)},...,s_{0}^{(i)})}  ;
  2. два регистра конечного автомата r i = ( r 1 ( i ) , r 0 ( i ) ) {\displaystyle r_{i}=(r_{1}^{(i)},r_{0}^{(i)})} .

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

Алгоритм

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

  1. функция инициализации I n i t {\displaystyle Init} , которая принимает в качестве входных данных ключ K {\displaystyle K} и вектор инициализации I V {\displaystyle IV} , и производит начальное значение переменной состояния S 0 = ( s ( 0 ) , r ( 0 ) ) {\displaystyle S_{0}=(s^{(0)},r^{(0)})} ;
  2. функция следующего состояния N e x t {\displaystyle Next} , которая принимает на вход переменную состояния S i = ( s ( i ) , r ( i ) ) {\displaystyle S_{i}=(s^{(i)},r^{(i)})} и производит следующее значение переменной состояния S i + 1 = ( s ( i + 1 ) , r ( i + 1 ) ) {\displaystyle S_{i+1}=(s^{(i+1)},r^{(i+1)})} ;
  3. функция ключевого потока S t r m {\displaystyle Strm} , что принимает на входе переменную состояния S i = ( s ( i ) , r ( i ) ) {\displaystyle S_{i}=(s^{(i)},r^{(i)})} и производит на выходе ключевой поток Z i {\displaystyle Z_{i}} (64 бита).

Функция инициализации I n i t {\displaystyle Init}

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

Выход : начальное значение переменной состояния S 0 = ( s ( 0 ) , r ( 0 ) ) {\displaystyle S_{0}=(s^{(0)},r^{(0)})} .

  1. В 16 ячеек регистра сдвига заносится значения, сформированные на основании ключа и вектора инициализации. Таким образом формируется S 33 = ( s ( 33 ) , r ( 33 ) {\displaystyle S_{-33}=(s^{(-33)},r^{(-33)}} .
  2. Выполняются 32 инициирующих такта без генерации ключевого потока(выполнение функции Next в режиме инициализации INIT ): S 1 = N e x t 32 ( S 33 , I N I T {\displaystyle S_{-1}=Next^{32}(S_{-33},INIT} .
  3. Рассчитывается начальное значение переменной состояния: S 0 = N e x t ( S 1 ) {\displaystyle S_{0}=Next(S_{-1})} .
  4. Выводится значение S 0 = ( s ( 0 ) , r ( 0 ) ) {\displaystyle S_{0}=(s^{(0)},r^{(0)})} .

Функция следующего состояния N e x t {\displaystyle Next}

Вход: Переменная состояния S i = ( s ( i ) , r ( i ) ) {\displaystyle S_{i}=(s^{(i)},r^{(i)})} и режим работы(обычный или режим инициализации).

Выход: Переменная состояния S i + 1 = ( s ( i + 1 ) , r ( i + 1 ) ) {\displaystyle S_{i+1}=(s^{(i+1)},r^{(i+1)})} .

  1. Обновляются значения регистров конечного автомата r i + 1 {\displaystyle r_{i+1}} .
  2. Обновляется значение 15 ячеек регистра сдвига: s j ( i + 1 ) = s j + 1 ( i ) , j = 0 , 1 , . . . , 14. {\displaystyle s_{j}^{(i+1)}=s_{j+1}^{(i)},j=0,1,...,14.}
  3. Обновляется значение 16 ячейки: s 15 ( i + 1 ) = ( s 0 ( i ) α ) ( s 11 ( i ) α 1 ) s 13 ( i ) {\displaystyle s_{15}^{(i+1)}=(s_{0}^{(i)}\bigotimes \alpha )\bigoplus (s_{11}^{(i)}\bigotimes \alpha ^{-1})\bigoplus s_{13}^{(i)}} при работе в обычном режиме и s 15 ( i + 1 ) = F S M ( s 15 ( i ) , r 1 ( i ) , r 2 ( i ) ) ( s 0 ( i ) α ) ( s 11 ( i ) α 1 ) s 13 ( i ) {\displaystyle s_{15}^{(i+1)}=FSM(s_{15}^{(i)},r_{1}^{(i)},r_{2}^{(i)})\bigoplus (s_{0}^{(i)}\bigotimes \alpha )\bigoplus (s_{11}^{(i)}\bigotimes \alpha ^{-1})\bigoplus s_{13}^{(i)}} при режиме инициализации.
  4. Выводится значение S i + 1 = ( s ( i + 1 ) , r ( i + 1 ) ) {\displaystyle S_{i+1}=(s^{(i+1)},r^{(i+1)})} .

Функция ключевого потока S t r m {\displaystyle Strm}

Вход: Переменная состояния S i = ( s ( i ) , r ( i ) ) {\displaystyle S_{i}=(s^{(i)},r^{(i)})} .

Выход: ключевой поток Z i {\displaystyle Z_{i}} .

  1. Вычисляется значение Z i = F S M ( s 15 ( i ) , r 1 ( i ) , r 2 ( i ) ) s 0 ( i ) {\displaystyle Z_{i}=FSM(s_{15}^{(i)},r_{1}^{(i)},r_{2}^{(i)})\bigoplus s_{0}^{(i)}} .
  2. Выводится значение Z i {\displaystyle Z_{i}} .
Функция конечного автомата F S M {\displaystyle FSM}

Функция конечного автомата F S M {\displaystyle FSM} используется в функциях S t r m {\displaystyle Strm} и N e x t {\displaystyle Next} .

Вход : три 64-битных строки x 1 , x 2 , x 3 {\displaystyle x_{1},x_{2},x_{3}} .

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

  1. Вычисляется значение x = ( x 1 + 64 x 2 ) x 3 {\displaystyle x=(x_{1}+_{64}x_{2})\bigoplus x_{3}} .
  2. Выводится значение x {\displaystyle x} .
  • + 64 {\displaystyle +_{64}} обозначает операцию сложения целых чисел по модулю 264 .

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

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

Обратная связь в регистре сдвига строится над полем G F ( 2 64 ) {\displaystyle GF(2^{64})} полиномом:

f ( x ) = x 16 + x 13 + α 1 x 11 + α , {\displaystyle f(x)=x^{16}+x^{13}+\alpha ^{-1}x^{11}+\alpha ,}

где α {\displaystyle \alpha } является корнем многочлена над полем G F ( 2 8 ) {\displaystyle GF(2^{8})} :

g ( x ) = x 8 + β 170 x 7 + β 166 x 6 + β 2 x 5 + β 224 x 4 + β 70 x 3 + β 2 {\displaystyle g(x)=x^{8}+\beta ^{170}x^{7}+\beta ^{166}x^{6}+\beta ^{2}x^{5}+\beta ^{224}x^{4}+\beta ^{70}x^{3}+\beta ^{2}} ,

где β {\displaystyle \beta } является корнем многочлена над полем G F ( 2 ) {\displaystyle GF(2)} :

p ( x ) = x 8 + x 4 + x 3 + x 2 + 1 {\displaystyle p(x)=x^{8}+x^{4}+x^{3}+x^{2}+1} .

Поле G F ( 2 8 ) {\displaystyle GF(2^{8})} строится над полем G F ( 2 ) {\displaystyle GF(2)} полиномом p ( x ) {\displaystyle p(x)} .

Период выходной последовательности регистра сдвига является максимальным и равным 2 1024 1 {\displaystyle 2^{1024}-1} .

Сравнение со 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]

Примечания

  1. ДСТУ 8845:2019 Информационные технологии. Криптографическая защита информации. Алгоритм симметричного поточного преобразования.
  2. Olexandr Kuznetsov, Mariya Lutsenko, Dmytro Ivanenko. Strumok Stream Cipher: Spesification and Basic Properties // Department Information and communication systems security, V. N. Karazin Kharkiv National University, Kharkiv, Ukraine.
  3. О.О. КУЗНЕЦОВ, І.Д. ГОРБЕНКО, Ю.І. ГОРБЕНКО, А.М. ОЛЕКСІЙЧУК. МАТЕМАТИЧНА СТРУКТУРА ПОТОКОВОГО ШИФРУ СТРУМОК (укр.) // Харківський національний університет імені В.Н. Каразіна. — 2018.
  4. Oleksii Nariezhnii, Egor Eremin, Vladislav Frolenko, Kyrylo Chernov, Tetiana Kuznetsova, Yevhen Demenko. STATISTICAL PROPERTIES OF MODERN STREAM CIPHERS // V. N. Karazin Kharkiv National University. — ISSN 2519-2310. Архивировано 14 июля 2020 года.
  5. Ivan Gorbenko, Yurii Gorbenko, Vladyslav Tymchenko, Olena Kachko. TESTING THE SPEED OF MODERN STREAM CIPHERS // Kharkiv national university of Radio Electronics. — 2018. — ISSN 2519-2310.
Перейти к шаблону «Симметричные криптосистемы»
Потоковые шифры
Сеть Фейстеля
SP-сеть
Другие