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

Матеріал з testwiki
Перейти до навігації Перейти до пошуку

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

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

Згідно чинного наказу Мінцифри від 30 вересня 2020 року №140/614[6] після 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 c елементів скінченного розширеного двійкового поля GF(28), сформованого незвідним поліномом x8+x4+x3+x2+1. Кількість раундів та кількість рядків у матриці стану наведені у таблиці: [7]

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

Зашифрування

Перетворення зашифрування Tl,k(K) описується як

Tl,k(K)=ηl(Kt)ψlτlπlν=1t1(κ(Kν)ψlτlπl)ηl(K0)

Перетворення η(Kv)

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

Перетворення πl'

Перетворення π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 G=(gi,j). Кількість зсунутих елементів залежить від номера рядка i{0,1,...,7} та розміру блоку l{128,256,512}. Кількість зсунутих елементів обчислюється за формулою (il)512.

Перетворення ψ

Перетворення ψ — це лінійне перетворення елементів матриці стану над скінченним полем x8+x4+x3+x2+1

Перетворення κ(Kυ)

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

Розшифрування

Перетворення розшифрування Ul,k(K) описується як

Ul,k(K)=1ηl(K0)ν=t11(1πl1τl1ψl1κ(Kν))1πl1τl1ψl1ηl(Kt)

Перетворення 1πl, 1τl, 1ψl, 1ηl(Kν) є оберненими перетвореннями до перетворень πl, τl, ψl, ηl(Kν) відповідно.

Розгортання ключів

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

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

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

Обчислення проміжного ключа виконується перетворенням Θ(K)=ψlτlπlηl(Kα)ψlτlπlηl(Kω)ψlτlπlηl(Kα).

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

Як аргумент для перетворення Θ(K) використовується l-бітне представлення значення виразу (l+k+64)/64 з порядком бітів little-endian.

Обчислення раундових ключів з парними індексами (i{0,2,...,t}) виконується перетворенням Ξ(K,Kα,i)=ηϕi(Kσ)ψlπlκl(Kσ)ψlτlπlηϕi(Kσ).

Перетворення ηl,ψl,πl,κl описані вище. Перетворення ϕi(Kσ)=ηl(Kσ)((0x00010001...0001)(i/2)).

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

Якщо ж розмір ключа шифрування більший розміру блоку, то вхідними даними для перетворення Θ(K) є Kα(16i), для i{0,4,8...} та Kω(64i4), для i{2,6,10...}

Обчислення раундових ключів з непарними індексами (i{1,3,...}) виконується за формулою Ki=(Ki1(3I424)).

Принципи проектування

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

Використання

Kalyna-reference Шаблон:Webarchive — код референсної реалізаціі на C

cppcrypto Шаблон:Webarchive — Бібліотека з відкритим вихідним кодом на C++

cryptonite Шаблон:Webarchive — бібліотека криптографічних перетворень від ПриватБанку з відкритим програмним кодом на C, має експертний висновок UA.14360570.00001-01 90 01-1 за результатами державної експертизи у галузі КЗІ Шаблон:Webarchive

Криптостійкість

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

Примітки

Шаблон:Reflist

Див. також

Шаблон:Блочні алгоритми шифрування