Kobra (chiffer)

Kobra
Skapare Christian Schneider,
Skapad 1996 _
publiceras 13 april 1996
Nyckelstorlek 8-576 bitar
Block storlek 128 bitar
Antal omgångar 12
Sorts Feistel nätverk

Cobra är en symmetrisk blockchifferalgoritm (blockstorlek 128 bitar, nyckellängd upp till 576 bitar), utvecklad av den tyske kryptologen Christian Schneider som det första chifferet med strukturen av ett heterogent Feistel-nätverk ( engelska  utökade Feistel-nätverket ).

Struktur

Algoritmen har strukturen av ett heterogent Feistel-nätverk. Detta nätverk, till skillnad från det klassiska, involverar användningen av mer än två subblock. Dessutom använder chifferet flera uppsättningar nyckelberoende substitutionstabeller (S-boxar, av författaren kallade S  -enheter ) och en ytterligare operation för att öka diffusionen.

Cobra är ett chiffer med ett 128-bitars (16-byte) block och en variabel nyckellängd. Algoritmen består av två delar: nyckelexpansionsproceduren och krypteringsproceduren. Nyckeln (upp till 576 bitar lång) expanderar till en 12464 byte array av undernycklar. Kryptering består av en inmatningsoperation, upprepning av rundfunktionen 12 gånger och en utmatningsoperation.

Krypteringsproceduren inkluderar preliminär och efterföljande nyckelblekning.

En omgång av det utökade Feistel-nätverket i det allmänna fallet ser ut så här:

Di = A i-1 C i = D i - 1 XOR F(Di; Ki,c) B i = C i-1 XOR F(Ci; Ki,b) Ai = B i -1 XOR F(B i; Ki,a)



Hur i fallet med Cobra ser ut så här:

A = A XOR W1,1 B=B XOR W1,2 C=C XOR W1,3 D = D XOR W1.4 för r = 1 till 12 D' = A C' = (D XOR F(D';Pr,3;Sc ))>>>1 B' = (C XOR F(C';Pr,2;Sb))>>>1 A' = (B XOR F(B';Pr,1;Sa ))>>>1 A = A' B=B' C = C' D = D' nästa r A = A XOR W2.1 B = B XOR W2.2 C=C XOR W2.3 D=D XOR W2.4

Nyckelexpansionsprocessen genererar 12 P-boxar med tre 32-bitars element vardera, 12 S-boxar med 256 32-bitars element vardera och två W-boxar med fyra element vardera.

F-funktionen är en icke-linjär substitution av ett 32-bitars element. Här är A' = (B XOR F(B';Pr, 1 ;Sa))>>>1, vilket betyder att A' erhålls genom att högerrotera resultatet av modulo 2-addition av variabel B, med utgången F av en funktion som har B', den runda undernyckeln Pr, 1 , det första elementet i S Unit, Sa , som utgång, där r är den aktuella rundan.

Uppslagstabeller

Klassiska chiffer baserade på Feistel-nätverket (till exempel den inhemska krypteringsstandarden GOST 28147-89 ) är starkt beroende av den substitutionstabell som används, som är den icke-linjära delen av algoritmen. Men precis som Blowfish-algoritmen kan uppslagstabeller vara hemliga och nyckelberoende. I det här fallet genereras S-Box-tabellerna av ett nyckelschema, vilket är ett slags kryptografisk PRNG. I detta fall utesluts naturligtvis inte närvaron av svaga nycklar och svaga substitutionstabeller som genereras av dem. Men för att lösa detta problem infördes generering av flera oberoende tabeller och ytterligare en diffusionsoperation. I det här fallet är sannolikheten för en svag nyckel så liten att den kan ignoreras. Detta examensarbete är särskilt sant, och tillvägagångssättet är praktiskt när man använder en hash-funktion som det viktigaste utdatamaterialet.

Implementering

Algoritmen, även om den inte används i stor utsträckning, implementerades i det populära kryptoverktyget Blowfish Advanced 97 av Markus Hahn, som använde sin variant med ett 64-bitars block och en 256-bitars nyckel. Sedan, i nästa utgåva av verktyget - CS-versionen, implementerades en utgåva med ett 128-bitars block och en nyckel upp till 576 bitar.

Se även

Länkar