Cobra (cifre)

Cobra
Skaber Christian Schneider,
Oprettet 1996 _
offentliggjort 13. april 1996
Nøglestørrelse 8-576 bit
Blokstørrelse 128 bit
Antal runder 12
Type Feistel netværk

Cobra er en symmetrisk blokchifferalgoritme (blokstørrelse 128 bit, nøglelængde op til 576 bit), udviklet af den tyske kryptolog Christian Schneider som den første chiffer med strukturen af ​​et heterogent Feistel-netværk ( engelsk  udvidet Feistel-netværk ).

Struktur

Algoritmen har strukturen som et heterogent Feistel-netværk. Dette netværk involverer, i modsætning til det klassiske, brugen af ​​mere end to underblokke. Derudover bruger chifferen adskillige sæt nøgleafhængige substitutionstabeller (S-bokse, af forfatteren omtalt som S -  enheder ) og en yderligere operation for at øge diffusionen.

Cobra er en chiffer med en 128-bit (16-byte) blok og en variabel nøglelængde. Algoritmen består af to dele: nøgleudvidelsesproceduren og krypteringsproceduren. Nøglen (op til 576 bit lang) udvides til en 12464 byte række af undernøgler. Kryptering består af en inputoperation, gentagelse af rundefunktionen 12 gange og en outputoperation.

Krypteringsproceduren omfatter foreløbig og efterfølgende nøgleblegning.

En runde af det udvidede Feistel-netværk i det generelle tilfælde ser således ud:

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)



Hvad i tilfældet med Cobra ser sådan ud:

A = A XOR W1,1 B=B XOR W1,2 C=C XOR W1,3 D = D XOR W1.4 for r = 1 til 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æste r A = A XOR W2.1 B = B XOR W2.2 C=C XOR W2.3 D=D XOR W2.4

Nøgleudvidelsesprocessen genererer 12 P-bokse med tre 32-bit-elementer hver, 12 S-Boxe med hver 256 32-bit-elementer og to W-Boxe med hver fire elementer.

F-funktionen er en ikke-lineær substitution af et 32 ​​bit element. Her er A' = (B XOR F(B';Pr, 1 ;Sa))>>>1, hvilket betyder, at A' opnås ved at højrerotere resultatet af modulo 2-addition af variabel B, med output F af en funktion, der har B', den runde undernøgle Pr, 1 , det første element af S Unit, S a , som output, hvor r er den aktuelle runde.

Opslagstabeller

Klassiske cifre baseret på Feistel-netværket (for eksempel den indenlandske krypteringsstandard GOST 28147-89 ) er meget afhængige af den anvendte substitutionstabel, som er den ikke-lineære del af algoritmen. Men ligesom Blowfish-algoritmen kan opslagstabeller være hemmelige og nøgleafhængige. I dette tilfælde genereres S-Box-tabellerne af et nøgleskema, som er en slags kryptografisk PRNG. I dette tilfælde er tilstedeværelsen af ​​svage nøgler og svage substitutionstabeller, der genereres af dem, naturligvis ikke udelukket. Men for at løse dette problem blev generering af flere uafhængige tabeller og en yderligere diffusionsoperation indført. I dette tilfælde er sandsynligheden for en svag nøgle så lille, at den kan ignoreres. Dette speciale er især sandt, og tilgangen er praktisk, når man bruger en hash-funktion som det vigtigste outputmateriale.

Implementering

Algoritmen, selvom den ikke er meget udbredt, blev implementeret i det populære Blowfish Advanced 97 kryptoværktøj af Markus Hahn, som brugte sin variant med en 64-bit blok og en 256-bit nøgle. Derefter, i den næste udgave af værktøjet - CS-versionen, blev en udgave med en 128-bit blok og en nøgle op til 576 bit implementeret.

Se også

Links