Калина (шифр)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Державний стандарт України
Калина (шифр)
Калина (шифр)
Позначення ДСТУ 7624:2014
Назва Інформаційні технології. Криптографічний захист інформації. Алгоритм симетричного блокового перетворення
Інформаційні дані
Розробники Приватне акціонерне товариство «Інститут інформаційних технологій»
Внесено Мінекономрозвитку України
Введено в дію наказ від 29 грудня 2014 р. № 1484
Чинний від 1 липня 2015 року
Статус Чинний[1]
Останні зміни ІПС №1-03-2016
Пов'язані стандарти ДСТУ 7564:2014, ДСТУ 4145-2002, ДСТУ ГОСТ 28147:2009
Кількість сторінок 228
База нормативних документів

«Калина» (англ. Kalyna) — блочний симетричний шифр описаний у національному стандарті України ДСТУ 7624:2014 «Інформаційні технології. Криптографічний захист інформації. Алгоритм симетричного блокового перетворення». Стандарт набрав чинності з 1 липня 2015 року наказом Мінекономрозвитку від 2 грудня 2014 року №1484.[2] .

Стандарт ДСТУ 7624:2014 розроблено у співпраці Держспецзв'язку та провідних українських науковців і враховує досвід та результати проведення міжнародних і відкритого національного конкурсу криптографічних алгоритмів[3][4][5]. Він призначений для поступової заміни міждержавного стандарту ДСТУ ГОСТ 28147:2009[6].

Згідно чинного наказу Мінцифри від 30 вересня 2020 року №140/614[7] після 1 січня 2022 року разом з функцією гешування Купина є обов'язковим для використання при накладанні та перевірці електронного цифрового підпису за ДСТУ 4145-2002 замість криптографічного перетворення за ДСТУ ГОСТ 28147:2009.

Режими роботи та їх позначення[ред. | ред. код]

У стандарті описані наступні режими роботи криптографічного алгоритму, їх позначення та послуги безпеки, які забезпечує відповідний режим:

# Назва режиму Позначення Послуга безпеки
1 Проста заміна (базове перетворення) ЕСВ Конфіденційність
2 Гамування CTR Конфіденційність
3 Гамування зі зворотним зв'язком за шифротекстом CFB Конфіденційність
4 Вироблення імітовставки СМАС Цілісність
5 Зчеплення шифроблоків CBC Конфіденційність
6 Гамування зі зворотним зв'язком за шифрогамою OFB Конфіденційність
7 Вибіркове гамування із прискореним виробленням імітовставки GCM, GMAC Конфіденційність і цілісність (GCM), тільки цілісність (GMAC)
8 Вироблення імітовставки і гамування CCM Цілісність і конфіденційність
9 Індексована заміна XTS Конфіденційність
10 Захист ключових даних KW Конфіденційність і цілісність

Режим роботи криптографічного алгоритму, позначають так: «Калина-I/k-позначення режиму-параметри режиму» (для деяких режимів параметрів немає), де I - розмір блока базового перетворення, k - довжина ключа. Наприклад, «Калина-256/512-ССМ-32,128» визначає використання базового перетворення з роз­міром блока 256 бітів, довжиною ключа 512 бітів, застосування у режимі вироблення імітовставки і гамування, довжина конфіденційної (та відкритої) частини повідомлення завжди менше ніж 232 байтів, довжина імітовставки дорівнює 128 бітів. Режим простої заміни збігається з базовим перетворенням, тому крім позначення «Калина-I/k-ЕСВ» можна використовувати позначення «Калина-I/k».

Алгоритм[ред. | ред. код]

Стан шифру[ред. | ред. код]

Стан шифру описується матрицею 8 x елементів скінченного розширеного двійкового поля , сформованого незвідним поліномом . Кількість раундів та кількість рядків у матриці стану наведені у таблиці: [8]

# Розмір блоку (I) Розмір ключа (k) Кількість раундів (v) Рядків у матриці стану (с)
1 128 128 10 2
2 256 14
3 256 256 14 4
4 512 18
5 512 512 18 8

Зашифрування[ред. | ред. код]

Перетворення зашифрування описується як

Перетворення η(Kv)[ред. | ред. код]

Перетворення  — це додавання до матриці стану раундового ключа за модулем . При додаванні використовується порядок little endian.

Перетворення πl'[ред. | ред. код]

Перетворення  — це заміна байтів у матриці стану

Підстановка π0[ред. | ред. код]

A8 43 5F 06 6B 75 6C 59 71 DF 87 95 17 F0 D8 09
6D F3 1D CB C9 4D 2C AF 79 E0 97 FD 6F 4B 45 39
3E DD A3 4F B4 B6 9A 0E 1F BF 15 E1 49 D2 93 C6
92 72 9E 61 D1 63 FA EE F4 19 D5 AD 58 A4 BB A1
DC F2 83 37 42 E4 7A 32 9C CC AB 4A 8F 6E 04 27
2E E7 E2 5A 96 16 23 2B C2 65 66 0F BC A9 47 41
34 48 FC B7 6A 88 A5 53 86 F9 5B DB 38 7B C3 1E
22 33 24 28 36 C7 B2 3B 8E 77 BA F5 14 9F 08 55
9B 4C FE 60 5C DA 18 46 CD 7D 21 B0 3F 1B 89 FF
EB 84 69 3A 9D D7 D3 70 67 40 B5 DE 5D 30 91 B1
78 11 01 E5 00 68 98 A0 C5 02 A6 74 2D 0B A2 76
B3 BE CE BD AE E9 8A 31 1C EC F1 99 94 AA F6 26
2F EF E8 8C 35 03 D4 7F FB 05 C1 5E 90 20 3D 82
F7 EA 0A 0D 7E F8 50 1A C4 07 57 B8 3C 62 E3 C8
AC 52 64 10 D0 D9 13 0C 12 29 51 B9 CF D6 73 8D
81 54 C0 ED 4E 44 A7 2A 85 25 E6 CA 7C 8B 56 80

Підстановка π1[ред. | ред. код]

CE BB EB 92 EA CB 13 C1 E9 3A D6 B2 D2 90 17 F8
42 15 56 B4 65 1C 88 43 C5 5C 36 BA F5 57 67 8D
31 F6 64 58 9E F4 22 AA 75 0F 02 B1 DF 6D 73 4D
7C 26 2E F7 08 5D 44 3E 9F 14 C8 AE 54 10 D8 BC
1A 6B 69 F3 BD 33 AB FA D1 9B 68 4E 16 95 91 EE
4C 63 8E 5B CC 3C 19 A1 81 49 7B D9 6F 37 60 CA
E7 2B 48 FD 96 45 FC 41 12 0D 79 E5 89 8C E3 20
30 DC B7 6C 4A B5 3F 97 D4 62 2D 06 A4 A5 83 5F
2A DA C9 00 7E A2 55 BF 11 D5 9C CF 0E 0A 3D 51
7D 93 1B FE C4 47 09 86 0B 8F 9D 6A 07 B9 B0 98
18 32 71 4B EF 3B 70 A0 E4 40 FF C3 A9 E6 78 F9
8B 46 80 1E 38 E1 B8 A8 E0 0C 23 76 1D 25 24 05
F1 6E 94 28 9A 84 E8 A3 4F 77 D3 85 E2 52 F2 82
50 7A 2F 74 53 B3 61 AF 39 35 DE CD 1F 99 AC AD
72 2C DD D0 87 BE 5E A6 EC 04 C6 03 34 FB DB 59
B6 C2 01 F0 5A ED A7 66 21 7F 8A 27 C7 C0 29 D7

Підстановка π2[ред. | ред. код]

93 D9 9A B5 98 22 45 FC BA 6A DF 02 9F DC 51 59
4A 17 2B C2 94 F4 BB A3 62 E4 71 D4 CD 70 16 E1
49 3C C0 D8 5C 9B AD 85 53 A1 7A C8 2D E0 D1 72
A6 2C C4 E3 76 78 B7 B4 09 3B 0E 41 4C DE B2 90
25 A5 D7 03 11 00 C3 2E 92 EF 4E 12 9D 7D CB 35
10 D5 4F 9E 4D A9 55 C6 D0 7B 18 97 D3 36 E6 48
56 81 8F 77 CC 9C B9 E2 AC B8 2F 15 A4 7C DA 38
1E 0B 05 D6 14 6E 6C 7E 66 FD B1 E5 60 AF 5E 33
87 C9 F0 5D 6D 3F 88 8D C7 F7 1D E9 EC ED 80 29
27 CF 99 A8 50 0F 37 24 28 30 95 D2 3E 5B 40 83
B3 69 57 1F 07 1C 8A BC 20 EB CE 8E AB EE 31 A2
73 F9 CA 3A 1A FB 0D C1 FE FA F2 6F BD 96 DD 43
52 B6 08 F3 AE BE 19 89 32 26 B0 EA 4B 64 84 82
6B F5 79 BF 01 5F 75 63 1B 23 3D 68 2A 65 E8 91
F6 FF 13 58 F1 47 0A 7F C5 A7 E7 61 5A 06 46 44
42 04 A0 DB 39 86 54 AA 8C 34 21 8B F8 0C 74 67

Підстановка π3[ред. | ред. код]

68 8D CA 4D 73 4B 4E 2A D4 52 26 B3 54 1E 19 1F
22 03 46 3D 2D 4A 53 83 13 8A B7 D5 25 79 F5 BD
58 2F 0D 02 ED 51 9E 11 F2 3E 55 5E D1 16 3C 66
70 5D F3 45 40 CC E8 94 56 08 CE 1A 3A D2 E1 DF
B5 38 6E 0E E5 F4 F9 86 E9 4F D6 85 23 CF 32 99
31 14 AE EE C8 48 D3 30 A1 92 41 B1 18 C4 2C 71
72 44 15 FD 37 BE 5F AA 9B 88 D8 AB 89 9C FA 60
EA BC 62 0C 24 A6 A8 EC 67 20 DB 7C 28 DD AC 5B
34 7E 10 F1 7B 8F 63 A0 05 9A 43 77 21 BF 27 09
C3 9F B6 D7 29 C2 EB C0 A4 8B 8C 1D FB FF C1 B2
97 2E F8 65 F6 75 07 04 49 33 E4 D9 B9 D0 42 C7
6C 90 00 8E 6F 50 01 C5 DA 47 3F CD 69 A2 E2 7A
A7 C6 93 0F 0A 06 E6 2B 96 A3 1C AF 6A 12 84 39
E7 B0 82 F7 FE 9D 87 5C 81 35 DE B4 A5 FC 80 EF
CB BB 6B 76 BA 5A 7D 78 0B 95 E3 AD 74 98 3B 36
64 6D DC F0 59 A9 4C 17 7F 91 B8 C9 57 1B E0 61

Стандартом передбачено можливість використання інших S-блоків у окремих застосуваннях, що є спільною рисою з алгоритмом шифрування, визначеним ДСТУ ГОСТ 28147:2009.

Перетворення τ[ред. | ред. код]

Перетворення  — це перестановка елементів у матриці (циклічний зсув вправо). matrix . Кількість зсунутих елементів залежить від номера рядка та розміру блоку . Кількість зсунутих елементів обчислюється за формулою .

Перетворення ψ[ред. | ред. код]

Перетворення  — це лінійне перетворення елементів матриці стану над скінченним полем

Перетворення κ(Kυ)[ред. | ред. код]

Перетворення  — це додавання до матриці стану раундового ключа за модулем 2, також відоме як побітове виключне «або» (XOR).

Розшифрування[ред. | ред. код]

Перетворення розшифрування описується як

Перетворення , , , є оберненими перетвореннями до перетворень , , , відповідно.

Розгортання ключів[ред. | ред. код]

Розгортання ключів відбувається у 2 етапи:

  • обчислення з ключа шифрування проміжного ключа ;
  • обчислення з проміжного ключа раундових ключів.

Проміжний ключ має той же розмір, що і блок даних 8 x .

Обчислення проміжного ключа виконується перетворенням .

Якщо розмір блока і розмір ключа шифрування однакові, то . Якщо ж розмір ключа шифрування вдвічі більший, ніж розмір блока, то .

Як аргумент для перетворення використовується l-бітне представлення значення виразу з порядком бітів little-endian.

Обчислення раундових ключів з парними індексами () виконується перетворенням .

Перетворення описані вище. Перетворення .

Вхідними даними для перетворення є значення , де  — ключ шифрування, якщо розмір ключа дорівнює розміру блока.

Якщо ж розмір ключа шифрування більший розміру блоку, то вхідними даними для перетворення є , для та , для

Обчислення раундових ключів з непарними індексами () виконується за формулою .

Принципи проектування[ред. | ред. код]

Шифр спроектовано на основі SP-мережі. Як лінійне перетворення використана MDS-матриця. Як нелінійні елементи використані чотири випадкові блоки підстановок. Використане пре- та пост- забілювання шляхом складання з раундовими ключами за модулем .

Використання[ред. | ред. код]

Kalyna-reference [Архівовано 11 червня 2018 у Wayback Machine.] — код референсної реалізаціі на C

cppcrypto [Архівовано 12 червня 2017 у Wayback Machine.] — Бібліотека з відкритим вихідним кодом на C++

cryptonite [Архівовано 13 червня 2018 у Wayback Machine.] — бібліотека криптографічних перетворень від ПриватБанку з відкритим програмним кодом на C, має експертний висновок UA.14360570.00001-01 90 01-1 за результатами державної експертизи у галузі КЗІ [Архівовано 3 серпня 2020 у Wayback Machine.]

Криптостійкість[ред. | ред. код]

Було виявлено деякі атаки на скорочені варіанти шифру, але вони не є практичними[9][10][11].

Примітки[ред. | ред. код]

  1. ДСТУ 7624:2014 в Каталозі НД України
  2. Про прийняття нормативних документів України та пробних національних стандартів України, гармонізованих з міжнародними нормативними документами, міжнародного та європейських стандартів як національних стандартів України, затвердження національних стандартів України, скасування національних стандартів України та міждержавних стандартів в Україні. Архів оригіналу за 5 травня 2019. Процитовано 5 травня 2019.
  3. Горбенко, I.Д.; Тоцький, О.С.; Казьміна, С.В. (2007). Перспективний блоковий шифр “Калина” – основні положення та специфікація. Прикладна радіоелектроніка (укр.). АН ПРЭ. 6 (2): С.195-208. Архів оригіналу за 6 травня 2021. Процитовано 22 серпня 2020. {{cite journal}}: |pages= має зайвий текст (довідка)
  4. Оголошення про проведення відкритого конкурсу симетричних блокових криптографічних алгоритмів. Архів оригіналу за 5 травня 2019. Процитовано 5 травня 2019.
  5. Oliynykov, Roman; Gorbenko, Ivan; Dolgov, Viktor; Ruzhentsev, Victor (2010). Results of Ukrainian national public cryptographic competition. Tatra Mountains Mathematical Publications (англ.). Sciendo. 47 (1): 99—113. doi:10.2478/v10127-010-0033-6. Архів оригіналу за 2 червня 2018. Процитовано 22 серпня 2020.
  6. Держспецзв’язку впроваджує нові стандарти криптографічного захисту інформації. Архів оригіналу за 5 травня 2019. Процитовано 5 травня 2019.
  7. Наказ № 140/614 від 30.09.2020 "Про встановлення вимог до технічних засобів, процесів їх створення, використання та функціонування у складі інформаційно-телекомунікаційних систем під час надання кваліфікованих електронних довірчих послуг". zakon.rada.gov.ua (укр.). Міністерство цифрової трансформації України. 30 вересня 2020. Архів оригіналу за 2 червня 2021. Процитовано 4 січня 2021.
  8. Oliynykov, Roman; Gorbenko, Ivan; Kazymyrov, Oleksandr; Ruzhentsev, Victor; Kuznetsov, Oleksandr; Gorbenko, Yurii; Dyrda, Oleksandr; Dolgov, Viktor; Pushkaryov, Andrii; Mordvinov, Ruslan; Kaidalov, Dmytro (2015). A New Encryption Standard of Ukraine: The Kalyna Block Cipher (PDF). IACR Cryptol (англ.). ePrint Archive. Архів оригіналу (PDF) за 16 липня 2017. Процитовано 28 березня 2017.
  9. Chang, Akshima; Chang, Donghoon; Ghosh, Mohona; Goel, Aarushi; Sanadhya, Somitra Kumar (2015). Single Key Recovery Attacks on 9-round Kalyna-128/256 and Kalyna-256/512 (PDF). IACR Cryptol (англ.). ePrint Archive. Архів оригіналу (PDF) за 13 січня 2022. Процитовано 22 серпня 2020.
  10. AlTawy, Riham; Abdelkhalek, Riham; Youssef, Amr M. (2016). A Meet-in-the-Middle Attack on Reduced-Round Kalyna-b/2b. IEICE Transactions on Information and Systems (англ.). E99.D (4): 1246—1250. doi:10.1587/transinf.2015EDL8174. Архів оригіналу (PDF) за 7 червня 2018. Процитовано 22 серпня 2020.
  11. Lin, Li; Wu, Wenling (2016). Improved Meet-in-the-Middle Attacks on Reduced-Round Kalyna-128/256 and Kalyna-256/512 (PDF). IACR Cryptol (англ.). ePrint Archive. Архів оригіналу (PDF) за 20 січня 2022. Процитовано 22 серпня 2020.

Див. також[ред. | ред. код]