Kuznyechik

Aus testwiki
Version vom 14. Juni 2023, 20:02 Uhr von imported>PerfektesChaos (tk k)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Kuznyechik (Vorlage:RuS, wortwörtlich: „Grashüpfer“) ist eine symmetrische Blockchiffre. Sie hat eine Blockgröße von 128-Bit und eine Schlüssellänge von 256-Bit. Die Chiffre ist im nationalen Standard von Russland GOST R 34.12-2015[1] und auch in RFC 7801[2] definiert.

Der Name der Chiffre kommt aus dem Russischen vom Grashüpfer, wobei der Standard explizit erwähnt, dass der englische Name Kuznyechik ist. Die Entwickler sagten, dass sie dem Trend für schwer auszusprechende Namen für solche Algorithmen wie Rijndael und Keccak folgen wollen.

Der Standard GOST R 34.12-2015 definiert die neue Chiffre als Zusatz zur alten GOST-Blockchiffre.[3]

Kuznyechik basiert auf dem Substitutions-Permutations-Netzwerk, wobei die Key-Schedule das Feistelnetzwerk verwendet.

Designation

𝔽Endlicher Körper GF(28) x8+x7+x6+x+1.

Bin8:pV8p (p=28)

Bin81:V8pBin8.

δ:V8𝔽𝔽.

δ1:𝔽V8δ

Beschreibung

Verschlüsselung, Entschlüsselung und Generierung des Schlüssels wurden wie folgt definiert:

Sei Add2[k](a)=ka mit k, a binären Strings der Form a=a15|| ||a0 (), wobei || die Stringkonkatenation darstellt.

N(a)=S(a15)||||S(a0).N1(a) ist eine gekehrte Transformation von N(a).

G(a)=δ(a15,,a0)||a15||||a1.

G1(a) — gekehrte Transformation von G(a) , G1(a)=a14||a13||||a0||δ(a14,a13,,a0,a15).

H(a)=G16(a), wo G16 — Komposition der Transformationen von G15 und G etc.

F[k](a1,a0)=(HNAdd2[k](a1)a0,a1).

Die nichtlineare Transformation

Die nichtlineare Transformation ist gegeben, indem folgendes substituiert wird:

S = Bin8 S' Bin8−1.

Werte der Substitution S' sind gegeben als Array 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, 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, 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,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, 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, 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, 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, 116,210,230,244,180,192,209,102,175,194,57,75,99,182).

Linear transformation

γ: γ(a15,,a0)=δ1(148*δ(a15)+32*δ(a14)+133*δ(a13)+16*δ(a12)+ 194*δ(a11)+192*δ(a10)+1*δ(a9)+251*δ(a8)+1*δ(a7)+192*δ(a6)+ 194*δ(a5)+16*δ(a4)+133*δ(a3)+32*δ(a2)+148*δ(a1)+1*δ(a0)),

Operationen von Additionen und Multiplikationen werden im Feld 𝔽 ausgeführt.

Schlüsselgenerierung

Der Schlüsselgenerierungs-Algorithmus verwendet die iterative Konstante t Ci=H(Bin128(i)), i=1,2,…32 und setzt die geteilten Schlüssel als: K=k255||||k0.

Iterierte Schlüssel

K1=k255||||k128

K2=k127||||k0

(K2i+1,K2i+2)=F[C8(i1)+8]F[C8(i1)+1](K2i+1,K2i),i=1,2,3,4.

Verschlüsselungsalgorithmus

E(a)=Add2[K10]HNAdd2[K9]HNAdd2[K2]HNAdd2[K1](a), wo a — 128-bit String.

Entschlüsselungsalgorithmus

D(a)=Add2[K1]H1N1Add2[K2]H1N1Add2[K9]H1N1Add2[K10](a).

Adaption

Die Verschlüsselungssoftware VeraCrypt unterstützt Kuznyechik als einen der möglichen Verschlüsselungsalgorithmen.[4]

Einzelnachweise