Державний стандарт України СТРУМОК (шифр) Позначення ДСТУ 8845:2019 Назва Інформаційні технології. Криптографічний захист інформації. Алгоритм симетричного потокового перетворення Тип стандарту Державний стандарт України Розробники Технічний комітет стандартизації «Інформаційні технології» (ТК 20), Приватне акціонерне товариство «Інститут інформаційних технологій» (ПАТ «ІІТ») Внесено Державне підприємство «Український науково-дослідний і навчальний центр проблем стандартизації, сертифікації та якості» (ДП «УкрНДНЦ») Введено в дію наказ від 02 квітня 2019 р. № 85 Чинний від 1 жовтня 2019 рокуСтатус Чинний[ 1] Пов'язані стандарти ДСТУ 7564:2014 , ДСТУ 7624:2014 , ДСТУ 4145-2002 , ДСТУ ГОСТ 28147:2009 Кількість сторінок 54 База нормативних документів
«СТРУМОК » (англ. STRUMOK ) — потоковий симетричний шифр описаний у національному стандарті України ДСТУ 8845:2019 «Інформаційні технології. Криптографічний захист інформації. Алгоритм симетричного потокового перетворення». Стандарт набрав чинності з 1 жовтня 2019 року наказом ДП «УкрНДНЦ» від 2 квітня 2019 року № 85[ 2] .
Залежно від довжини секретного ключа має два режими роботи: «СТРУМОК-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-бітних блоків:
16 комірок регістру зсуву з лінійним зворотним зв'язком :
s
i
=
(
s
15
(
i
)
,
s
14
(
i
)
,
.
.
.
,
s
0
(
i
)
)
{\displaystyle s_{i}=(s_{15}^{(i)},s_{14}^{(i)},...,s_{0}^{(i)})}
;
два регістри скінченного автомата
r
i
=
(
r
1
(
i
)
,
r
0
(
i
)
)
{\displaystyle r_{i}=(r_{1}^{(i)},r_{0}^{(i)})}
.
Вихід являє собою гаму , яка формується з 64-бітових слів
Z
i
{\displaystyle Z_{i}}
.
Алгоритм
В алгоритмі СТРУМОК можна виділити три основні функції:
функція ініціалізації
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)})}
;
функція наступного стану
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)})}
;
функція вироблення гами
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)})}
.
У 16 осередків регістру зсуву заноситься значення, сформовані на підставі ключа та вектора ініціалізації. Таким чином формується
S
−
33
=
(
s
(
−
33
)
,
r
(
−
33
)
)
{\displaystyle S_{-33}=(s^{(-33)},r^{(-33)})}
.
Виконуються 32 такта ініціалізації без генерації гами (виконання функції Next в режимі ініціалізації INIT ):
S
−
1
=
N
e
x
t
32
(
S
−
33
,
I
N
I
T
)
{\displaystyle S_{-1}=Next^{32}(S_{-33},INIT)}
.
Розраховується початкове значення змінної стану:
S
0
=
N
e
x
t
(
S
−
1
)
{\displaystyle S_{0}=Next(S_{-1})}
.
Виводиться значення
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)})}
.
Оновлюються значення регістрів скінченного автомата
r
i
+
1
{\displaystyle r_{i+1}}
.
Оновлюється значення 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.}
Оновлюється значення 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)}}
за режиму ініціалізації.
Виводиться значення
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}}
.
Обчислюється значення
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)}}
.
Виводиться значення
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}
.
Обчислюється значення
x
=
(
x
1
+
64
x
2
)
⨁
x
3
{\displaystyle x=(x_{1}+_{64}x_{2})\bigoplus x_{3}}
.
Виводиться значення
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-розрядних обчислювальних системах. У зв'язку з цим в алгоритмі СТРУМОК підвищується швидкість формування псевдовипадкової послідовності[ 3] . В алгоритмі СТРУМОК збільшені, порівняно з SNOW2.0, довжини секретного ключа і вектора ініціалізації. Це дозволяє надійно застосовувати потоковий шифр навіть за умов, коли зловмиснику доступне застосування квантового криптоаналізу [ 4] .
Тестування випадковості двійкових послідовностей NIST (інші мови) показує, що алгоритм СТРУМОК поступається SNOW 2.0[ 5] .
СТРУМОК дозволяє формувати псевдовипадкові послідовності зі швидкістю більше 10 Гбіт/с (Intel Core i9-7980XE 2.60 GHz and OS Windows® 10 Pro)[ 6] .
Див. також
Примітки
↑ ДСТУ 8845:2019 в Каталозі НД України
↑ Про прийняття та скасування національних стандартів, прийняття змін до національних стандартів, скасування міждержавного стандарту . Архів оригіналу за 28 грудня 2019. Процитовано 28 грудня 2019 .
↑ 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.
↑ О.О. КУЗНЕЦОВ, І.Д. ГОРБЕНКО, Ю.І. ГОРБЕНКО, А.М. ОЛЕКСІЙЧУК. МАТЕМАТИЧНА СТРУКТУРА ПОТОКОВОГО ШИФРУ СТРУМОК // Харківський національний університет імені В.Н. Каразіна. — 2018. — 6 червня.
↑ 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.
↑ Ivan Gorbenko, Yurii Gorbenko, Vladyslav Tymchenko, Olena Kachko. TESTING THE SPEED OF MODERN STREAM CIPHERS // Kharkiv national university of Radio Electronics. — 2018. — 6 червня. — ISSN 2519-2310 .
Посилання