«Кузнечик» (англ. Kuznyechik [ 1] или англ. Kuznechik [ 2] [ 3] ) — симметричный алгоритм блочного шифрования с размером блока 128 бит и длиной ключа 256 бит, использующий для генерации раундовых ключей SP-сеть .
Данный шифр утверждён (наряду с блочным шифром «Магма» ) в качестве стандарта в ГОСТ Р 34.12-2015 «Информационная технология. Криптографическая защита информации. Блочные шифры» приказом от 19 июня 2015 года № 749-ст[ 4] . Стандарт вступил в действие с 1 января 2016 года[ 5] . Шифр разработан Центром защиты информации и специальной связи ФСБ России с участием АО «Информационные технологии и коммуникационные системы» (АО «ИнфоТеКС» ). Внесён Техническим комитетом по стандартизации ТК 26 «Криптографическая защита информации»[ 6] [ 7] .
Протоколом № 54 от 29 ноября 2018 года , на основе ГОСТ Р 34.12-2015 , Межгосударственным советом по метрологии, стандартизации и сертификации был принят межгосударственный стандарт ГОСТ 34.12-2018 . Приказом Федерального агентства по техническому регулированию и метрологии от 4 декабря 2018 года № 1061-ст стандарт ГОСТ 34.12-2018 введен в действие в качестве национального стандарта Российской Федерации с 1 июня 2019 года .
F {\displaystyle \mathbb {F} } — поле Галуа G F ( 2 8 ) {\displaystyle GF(2^{8})} по модулю неприводимого многочлена x 8 + x 7 + x 6 + x + 1 {\displaystyle x^{8}+x^{7}+x^{6}+x+1} .
B i n 8 : Z p → V 8 {\displaystyle Bin_{8}:\mathbb {Z} _{p}\rightarrow V_{8}} — биективное отображение, ставящее в соответствие элементу кольца Z p {\displaystyle \mathbb {Z} _{p}} ( p = 2 8 {\displaystyle p=2^{8}} ) его двоичное представление.
B i n 8 − 1 : V 8 → Z p {\displaystyle {Bin_{8}}^{-1}:V_{8}\rightarrow \mathbb {Z} _{p}} — отображение, обратное к B i n 8 {\displaystyle Bin_{8}} .
δ : V 8 → F {\displaystyle \delta :V_{8}\rightarrow \mathbb {F} } — биективное отображение, ставящее в соответствие двоичной строке элемент поля F {\displaystyle \mathbb {F} } .
δ − 1 : F → V 8 {\displaystyle \delta ^{-1}:\mathbb {F} \rightarrow V_{8}} — отображение, обратное к δ {\displaystyle \delta }
Для шифрования, расшифрования и генерации ключа используются следующие функции:
A d d 2 [ k ] ( a ) = k ⊕ a {\displaystyle Add_{2}[k](a)=k\oplus a} , где k {\displaystyle k} , a {\displaystyle a} — двоичные строки вида a = a 15 | | {\displaystyle a=a_{15}||} … | | a 0 {\displaystyle ||a_{0}} ( | | {\displaystyle ||} — символ конкатенации строк).
N ( a ) = S ( a 15 ) | | {\displaystyle N(a)=S(a_{15})||} … | | S ( a 0 ) . N − 1 ( a ) {\displaystyle ||S(a_{0}).~~N^{-1}(a)} — обратное к N ( a ) {\displaystyle N(a)} преобразование.
G ( a ) = γ ( a 15 , {\displaystyle G(a)=\gamma (a_{15},} … , a 0 ) | | a 15 | | {\displaystyle ,a_{0})||a_{15}||} … | | a 1 . {\displaystyle ||a_{1}.}
G − 1 ( a ) {\displaystyle G^{-1}(a)} — обратное к G ( a ) {\displaystyle G(a)} преобразование, причём G − 1 ( a ) = a 14 | | a 13 | | {\displaystyle G^{-1}(a)=a_{14}||a_{13}||} … | | a 0 | | γ ( a 14 , a 13 , {\displaystyle ||a_{0}||\gamma (a_{14},a_{13},} … , a 0 , a 15 ) . {\displaystyle ,a_{0},a_{15}).}
H ( a ) = G 16 ( a ) {\displaystyle H(a)=G^{16}(a)} , где G 16 {\displaystyle G^{16}} — композиция преобразований G 15 {\displaystyle G^{15}} и G {\displaystyle G} и т. д.
F [ k ] ( a 1 , a 0 ) = ( H N A d d 2 [ k ] ( a 1 ) ⊕ a 0 , a 1 ) . {\displaystyle F[k](a_{1},a_{0})=(HNAdd_{2}[k](a_{1})\oplus a_{0},a_{1}).}
Нелинейное преобразование задается подстановкой S = Bin8 S' Bin8 −1 .
Значения подстановки S' заданы в виде массива S' = (S'(0), S'(1), …, S'(255)) :
S ′ = ( 252 , 238 , 221 , 17 , 207 , 110 , 49 , 22 , 251 , 196 , 250 , 218 , 35 , 197 , 4 , 77 , 233 , {\displaystyle S'=(252,238,221,17,207,110,49,22,251,196,250,218,35,197,4,77,233,} 119 , 240 , 219 , 147 , 46 , 153 , 186 , 23 , 54 , 241 , 187 , 20 , 205 , 95 , 193 , 249 , 24 , 101 , {\displaystyle 119,240,219,147,46,153,186,23,54,241,187,20,205,95,193,249,24,101,} 90 , 226 , 92 , 239 , 33 , 129 , 28 , 60 , 66 , 139 , 1 , 142 , 79 , 5 , 132 , 2 , 174 , 227 , 106 , 143 , {\displaystyle 90,226,92,239,33,129,28,60,66,139,1,142,79,5,132,2,174,227,106,143,} 160 , 6 , 11 , 237 , 152 , 127 , 212 , 211 , 31 , 235 , 52 , 44 , 81 , 234 , 200 , 72 , 171 , 242 , 42 , {\displaystyle 160,6,11,237,152,127,212,211,31,235,52,44,81,234,200,72,171,242,42,} 104 , 162 , 253 , 58 , 206 , 204 , 181 , 112 , 14 , 86 , 8 , 12 , 118 , 18 , 191 , 114 , 19 , 71 , 156 , {\displaystyle 104,162,253,58,206,204,181,112,14,86,8,12,118,18,191,114,19,71,156,} 183 , 93 , 135 , 21 , 161 , 150 , 41 , 16 , 123 , 154 , 199 , 243 , 145 , 120 , 111 , 157 , 158 , 178 , {\displaystyle 183,93,135,21,161,150,41,16,123,154,199,243,145,120,111,157,158,178,} 177 , 50 , 117 , 25 , 61 , 255 , 53 , 138 , 126 , 109 , 84 , 198 , 128 , 195 , 189 , 13 , 87 , 223 , {\displaystyle 177,50,117,25,61,255,53,138,126,109,84,198,128,195,189,13,87,223,} 245 , 36 , 169 , 62 , 168 , 67 , 201 , 215 , 121 , 214 , 246 , 124 , 34 , 185 , 3 , 224 , 15 , 236 , {\displaystyle 245,36,169,62,168,67,201,215,121,214,246,124,34,185,3,224,15,236,} 222 , 122 , 148 , 176 , 188 , 220 , 232 , 40 , 80 , 78 , 51 , 10 , 74 , 167 , 151 , 96 , 115 , 30 , 0 , {\displaystyle 222,122,148,176,188,220,232,40,80,78,51,10,74,167,151,96,115,30,0,} 98 , 68 , 26 , 184 , 56 , 130 , 100 , 159 , 38 , 65 , 173 , 69 , 70 , 146 , 39 , 94 , 85 , 47 , 140 , 163 , {\displaystyle 98,68,26,184,56,130,100,159,38,65,173,69,70,146,39,94,85,47,140,163,} 165 , 125 , 105 , 213 , 149 , 59 , 7 , 88 , 179 , 64 , 134 , 172 , 29 , 247 , 48 , 55 , 107 , 228 , 136 , {\displaystyle 165,125,105,213,149,59,7,88,179,64,134,172,29,247,48,55,107,228,136,} 217 , 231 , 137 , 225 , 27 , 131 , 73 , 76 , 63 , 248 , 254 , 141 , 83 , 170 , 144 , 202 , 216 , 133 , {\displaystyle 217,231,137,225,27,131,73,76,63,248,254,141,83,170,144,202,216,133,} 97 , 32 , 113 , 103 , 164 , 45 , 43 , 9 , 91 , 203 , 155 , 37 , 208 , 190 , 229 , 108 , 82 , 89 , 166 , {\displaystyle 97,32,113,103,164,45,43,9,91,203,155,37,208,190,229,108,82,89,166,} 116 , 210 , 230 , 244 , 180 , 192 , 209 , 102 , 175 , 194 , 57 , 75 , 99 , 182 ) . {\displaystyle 116,210,230,244,180,192,209,102,175,194,57,75,99,182).}
Задаётся отображением γ {\displaystyle \gamma } :
γ ( a 15 , {\displaystyle \gamma (a_{15},} … , a 0 ) = δ − 1 ( 148 ∗ δ ( a 15 ) + 32 ∗ δ ( a 14 ) + 133 ∗ δ ( a 13 ) + 16 ∗ δ ( a 12 ) + {\displaystyle ,a_{0})=\delta ^{-1}~(148*\delta (a_{15})+32*\delta (a_{14})+133*\delta (a_{13})+16*\delta (a_{12})+} 194 ∗ δ ( a 11 ) + 192 ∗ δ ( a 10 ) + 1 ∗ δ ( a 9 ) + 251 ∗ δ ( a 8 ) + 1 ∗ δ ( a 7 ) + 192 ∗ δ ( a 6 ) + {\displaystyle 194*\delta (a_{11})+192*\delta (a_{10})+1*\delta (a_{9})+251*\delta (a_{8})+1*\delta (a_{7})+192*\delta (a_{6})+} 194 ∗ δ ( a 5 ) + 16 ∗ δ ( a 4 ) + 133 ∗ δ ( a 3 ) + 32 ∗ δ ( a 2 ) + 148 ∗ δ ( a 1 ) + 1 ∗ δ ( a 0 ) ) , {\displaystyle 194*\delta (a_{5})+16*\delta (a_{4})+133*\delta (a_{3})+32*\delta (a_{2})+148*\delta (a_{1})+1*\delta (a_{0})),}
где операции сложения и умножения осуществляются в поле F {\displaystyle \mathbb {F} } .
Алгоритм генерации ключа использует итерационные константы C i = H ( B i n 128 ( i ) ) {\displaystyle C_{i}=H(Bin_{128}(i))} , i=1,2,…32. Задается общий ключ K = k 255 | | {\displaystyle K=k_{255}||} … | | k 0 {\displaystyle ||k_{0}} .
Вычисляются итерационные ключи
K 1 = k 255 | | {\displaystyle K_{1}=k_{255}||} … | | k 128 {\displaystyle ||k_{128}}
K 2 = k 127 | | {\displaystyle K_{2}=k_{127}||} … | | k 0 {\displaystyle ||k_{0}}
( K 2 i + 1 , K 2 i + 2 ) = F [ C 8 ( i − 1 ) + 8 ] {\displaystyle (K_{2i+1},K_{2i+2})=F[C_{8(i-1)+8}]} … F [ C 8 ( i − 1 ) + 1 ] ( K 2 i − 1 , K 2 i ) , i = 1 , 2 , 3 , 4. {\displaystyle F[C_{8(i-1)+1}](K_{2i-1},K_{2i}),i=1,2,3,4.}
E ( a ) = A d d 2 [ K 10 ] H N A d d 2 [ K 9 ] {\displaystyle E(a)=Add_{2}[K_{10}]HNAdd_{2}[K_{9}]} … H N A d d 2 [ K 2 ] H N A d d 2 [ K 1 ] ( a ) , {\displaystyle HNAdd_{2}[K_{2}]HNAdd_{2}[K_{1}](a),} где a — строка размером 128 бит.
D ( a ) = A d d 2 [ K 1 ] N − 1 H − 1 A d d 2 [ K 2 ] {\displaystyle D(a)=Add_{2}[K_{1}]N^{-1}H^{-1}Add_{2}[K_{2}]} … N − 1 H − 1 A d d 2 [ K 9 ] N − 1 H − 1 A d d 2 [ K 10 ] ( a ) . {\displaystyle N^{-1}H^{-1}Add_{2}[K_{9}]N^{-1}H^{-1}Add_{2}[K_{10}](a).}
Строка «a» задается в шестнадцатеричном виде и имеет размер 16 байт, причём каждый байт задается двумя шестнадцатеричными числами.
Таблица соответствия строк в двоичном и в шестнадцатеричном виде:
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 2 3 4 5 6 7 8 9 a b c d e f
N ( 00112233445566778899 a a b b c c d d e e f f ) = f c 7765 a e e a o c 9 a 7 e e 8 d 7387 d 88 d 86 c b 6 {\displaystyle N(00112233445566778899aabbccddeeff)=fc7765aeeaoc9a7ee8d7387d88d86cb6}
G ( 00000000000000000000000000000100 ) = 94000000000000000000000000000001 {\displaystyle G(00000000000000000000000000000100)=94000000000000000000000000000001}
G ( 94000000000000000000000000000001 ) = a 5940000000000000000000000000000 {\displaystyle G(94000000000000000000000000000001)=a5940000000000000000000000000000}
G ( a 5940000000000000000000000000000 ) = 64 a 59400000000000000000000000000 {\displaystyle G(a5940000000000000000000000000000)=64a59400000000000000000000000000}
G ( 64 a 59400000000000000000000000000 ) = 0 d 64 a 594000000000000000000000000 {\displaystyle G(64a59400000000000000000000000000)=0d64a594000000000000000000000000}
H ( 64 a 59400000000000000000000000000 ) = d 456584 d d 0 e 3 e 84 c c 3166 e 4 b 7 f a 2890 d {\displaystyle H(64a59400000000000000000000000000)=d456584dd0e3e84cc3166e4b7fa2890d}
K = 8899 a a b b c c d d e e f f 0011223344556677 f e d c b a 98765432100123456789 a b c d e f . {\displaystyle K=8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef.}
K 1 = 8899 a a b b c c d d e e f f 0011223344556677 , {\displaystyle K_{1}=8899aabbccddeeff0011223344556677,}
K 2 = f e d c b a 98765432100123456789 a b c d e f . {\displaystyle K_{2}=fedcba98765432100123456789abcdef.}
C 1 = 6 e a 276726 c 487 a b 85 d 27 b d 10 d d 849401 , {\displaystyle C_{1}=6ea276726c487ab85d27bd10dd849401,}
A d d 2 [ C 1 ] ( K 1 ) = e 63 b d c c 9 a 09594475 d 369 f 2399 d 1 f 276 , {\displaystyle Add_{2}[C_{1}](K_{1})=e63bdcc9a09594475d369f2399d1f276,}
N A d d 2 [ C 1 [ ( K 1 ) = 0998 c a 37 a 7947 a a b b 78 f 4 a 5 a e 81 b 748 a , {\displaystyle NAdd_{2}[C_{1}[(K_{1})=0998ca37a7947aabb78f4a5ae81b748a,}
H N A d d 2 [ C 1 ] ( K 1 ) = 3 d 0940999 d b 75 d 6 a 9257071 d 5 e 6144 a 6 , {\displaystyle HNAdd_{2}[C_{1}](K_{1})=3d0940999db75d6a9257071d5e6144a6,}
F [ C 1 ] ( K 1 , K 2 ) = ( H N A d d 2 [ C 1 ] ( K 1 ) ⊕ K 2 , K 1 ) = ( c 3 d 5 f a 01 e b e 36 f 7 a 9374427 a d 7 c a 8949 , 8899 a a b b c c d d e e f f 0011223344556677 ) . {\displaystyle F[C_{1}](K_{1},K_{2})=(HNAdd_{2}[C_{1}](K_{1})\oplus K_{2},K_{1})=(c3d5fa01ebe36f7a9374427ad7ca8949,8899aabbccddeeff0011223344556677).}
C 2 = d c 87 e c e 4 d 890 f 4 b 3 b a 4 e b 92079 c b e b 02 , {\displaystyle C_{2}=dc87ece4d890f4b3ba4eb92079cbeb02,}
F [ C 2 ] F [ C 1 ] ( K 1 , K 2 ) = ( 37777748 e 56453377 d 5 e 262 d 90903 f 87 , c 3 d 5 f a 01 e b e 36 f 7 a 9374427 a d 7 c a 8949 ) . {\displaystyle F[C_{2}]F[C_{1}](K_{1},K_{2})=(37777748e56453377d5e262d90903f87,c3d5fa01ebe36f7a9374427ad7ca8949).}
C 3 = b 2259 a 96 b 4 d 88 e 0 b e 7690430 a 44 f 7 f 03 , {\displaystyle C_{3}=b2259a96b4d88e0be7690430a44f7f03,}
F [ C 3 ] F [ C 2 ] F [ C 1 ] ( K 1 , K 2 ) = ( f 9 e a e 5 f 29 b 2815 e 31 f 11 a c 5 d 9 c 29 f b 01 , 37777748 e 56453377 d 5 e 262 d 90903 f 87 ) . {\displaystyle F[C_{3}]F[C_{2}]F[C_{1}](K_{1},K_{2})=(f9eae5f29b2815e31f11ac5d9c29fb01,37777748e56453377d5e262d90903f87).}
C 4 = 7 b c d 1 b 0 b 73 e 32 b a 5 b 79 c b 140 f 2551504 , {\displaystyle C_{4}=7bcd1b0b73e32ba5b79cb140f2551504,}
F [ C 4 ] F [ C 3 ] F [ C 2 ] F [ C 1 ] ( K 1 , K 2 ) = ( e 980089683 d 00 d 4 b e 37 d d 3434699 b 98 f , f 9 e a e 5 f 29 b 2815 e 31 f 11 a c 5 d 9 c 29 f b 01 ) . {\displaystyle F[C_{4}]F[C_{3}]F[C_{2}]F[C_{1}](K_{1},K_{2})=(e980089683d00d4be37dd3434699b98f,f9eae5f29b2815e31f11ac5d9c29fb01).}
C 5 = 156 f 6 d 791 f a b 511 d e a b b 0 c 502 f d 18105 , {\displaystyle C_{5}=156f6d791fab511deabb0c502fd18105,}
F [ C 5 ] F [ C 4 ] F [ C 3 ] F [ C 2 ] F [ C 1 ] ( K 1 , K 2 ) = ( b 7 b d 70 a c e a 4460714 f 4 e b e 13835 c f 004 , e 980089683 d 00 d 4 b e 37 d d 3434699 b 98 f ) . {\displaystyle F[C_{5}]F[C_{4}]F[C_{3}]F[C_{2}]F[C_{1}](K_{1},K_{2})=(b7bd70acea4460714f4ebe13835cf004,e980089683d00d4be37dd3434699b98f).}
C 6 = a 74 a f 7 e f a b 73 d f 160 d d 208608 b 9 e f e 06 , {\displaystyle C_{6}=a74af7efab73df160dd208608b9efe06,}
F [ C 6 ] F [ C 5 ] F [ C 4 ] F [ C 3 ] F [ C 2 ] F [ C 1 ] ( K 1 , K 2 ) = ( 1 a 46 e a 1 c f 6 c c d 236467287 d f 93 f d f 974 , b 7 b d 70 a c e a 4460714 f 4 e b e 13835 c f 004 ) . {\displaystyle F[C_{6}]F[C_{5}]F[C_{4}]F[C_{3}]F[C_{2}]F[C_{1}](K_{1},K_{2})=(1a46ea1cf6ccd236467287df93fdf974,b7bd70acea4460714f4ebe13835cf004).}
C 7 = c 9 e 8819 d c 73 b a 5 a e 50 f 5 b 570561 a 6 a 07 , {\displaystyle C_{7}=c9e8819dc73ba5ae50f5b570561a6a07,}
F [ C 7 ] F [ C 6 ] F [ C 5 ] F [ C 4 ] F [ C 3 ] F [ C 2 ] F [ C 1 ] ( K 1 , K 2 ) = ( 3 d 4553 d 8 e 9 c f e c 6815 e b a d c 40 a 9 f f d 04 , 1 a 46 e a 1 c f 6 c c d 236467287 d f 93 f d f 974 ) . {\displaystyle F[C_{7}]F[C_{6}]F[C_{5}]F[C_{4}]F[C_{3}]F[C_{2}]F[C_{1}](K_{1},K_{2})=(3d4553d8e9cfec6815ebadc40a9ffd04,1a46ea1cf6ccd236467287df93fdf974).}
C 8 = f 6593616 e 6055689 a d f b a 18027 a a 2 a 08 , {\displaystyle C_{8}=f6593616e6055689adfba18027aa2a08,}
( K 3 , K 4 ) = F [ C 8 ] F [ C 7 ] {\displaystyle (K_{3},K_{4})=F[C_{8}]F[C_{7}]} … F [ C 2 ] F [ C 1 ] ( K 1 , K 2 ) = ( d b 31485315694343228 d 6 a e f 8 c c 78 c 44 , 3 d 4553 d 8 e 9 c f e c 6815 e b a d c 40 a 9 f f d 04 ) . {\displaystyle F[C_{2}]F[C_{1}](K_{1},K_{2})=(db31485315694343228d6aef8cc78c44,3d4553d8e9cfec6815ebadc40a9ffd04).}
В итоге получаем итерационные ключи:
K 1 = 8899 a a b b c c d d e e f f 0011223344556677 , {\displaystyle K_{1}=8899aabbccddeeff0011223344556677,}
K 2 = f e d c b a 98765432100123456789 a b c d e f , {\displaystyle K_{2}=fedcba98765432100123456789abcdef,}
K 3 = d b 31485315694343228 d 6 a e f 8 c c 78 c 44 , {\displaystyle K_{3}=db31485315694343228d6aef8cc78c44,}
K 4 = 3 d 4553 d 8 e 9 c f e c 6815 e b a d c 40 a 9 f f d 04 , {\displaystyle K_{4}=3d4553d8e9cfec6815ebadc40a9ffd04,}
K 5 = 57646468 c 44 a 5 e 28 d 3 e 59246 f 429 f 1 a c , {\displaystyle K_{5}=57646468c44a5e28d3e59246f429f1ac,}
K 6 = b d 079435165 c 6432 b 532 e 82834 d a 581 b , {\displaystyle K_{6}=bd079435165c6432b532e82834da581b,}
K 7 = 51 e 640757 e 8745 d e 705727265 a 0098 b 1 , {\displaystyle K_{7}=51e640757e8745de705727265a0098b1,}
K 8 = 5 a 7925017 b 9 f d d 3 e d 72 a 91 a 22286 f 984 , {\displaystyle K_{8}=5a7925017b9fdd3ed72a91a22286f984,}
K 9 = b b 44 e 25378 c 73123 a 5 f 32 f 73 c d b 6 e 517 , {\displaystyle K_{9}=bb44e25378c73123a5f32f73cdb6e517,}
K 10 = 72 e 9 d d 7416 b c f 45 b 755 d b a a 88 e 4 a 4043. {\displaystyle K_{10}=72e9dd7416bcf45b755dbaa88e4a4043.}
Этот раздел статьи
ещё не написан .
Здесь может располагаться отдельный раздел. Помогите Википедии, написав его. (8 января 2018 )
Открытый текст a = 1122334455667700 f f e e d d c c b b a a 9988 , {\displaystyle a=1122334455667700ffeeddccbbaa9988,}
Ожидается, что новый блочный шифр «Кузнечик» будет устойчив ко всем видам атак на блочные шифры .
На конференции «CRYPTO 2015» Алекс Бирюков, Лео Перрин и Алексей Удовенко представили доклад, в котором говорится о том, что несмотря на утверждения разработчиков, значения S-блока шифра Кузнечик и хеш-функции Стрибог не являются (псевдо)случайными числами, а сгенерированы на основе скрытого алгоритма, который им удалось восстановить методами обратного проектирования [ 9] . Позднее Лео Перрин и Алексей Удовенко опубликовали два альтернативных алгоритма генерации S-блока и доказали его связь с S-блоком белорусского шифра BelT [ 10] . В этом исследовании авторы также утверждают, что, хотя причины использования такой структуры остаются неясны, использование скрытых алгоритмов для генерации S-блоков противоречит принципу отсутствия козыря в рукаве , который мог бы служить доказательством отсутствия специально заложенных уязвимостей в дизайне алгоритма.
Riham AlTawy и Amr M. Youssef описали атаку «встречи посередине » на 5 раундов шифра Кузнечик, имеющую вычислительную сложность 2140 и требующую 2153 памяти и 2113 данных[ 11] .