Cobra | |
---|---|
Creator | Christian Schneider, |
Creată | 1996 _ |
publicat | 13 aprilie 1996 |
Dimensiunea cheii | 8-576 biți |
Dimensiunea blocului | 128 de biți |
Numărul de runde | 12 |
Tip de | Rețeaua Feistel |
Cobra este un algoritm de cifru bloc simetric (dimensiunea blocului 128 de biți, lungimea cheii de până la 576 de biți), dezvoltat de criptologul german Christian Schneider ca primul cifr cu structura unei rețele Feistel eterogene ( rețeaua Feistel extinsă în engleză ).
Algoritmul are structura unei rețele Feistel eterogene. Această rețea, spre deosebire de cea clasică, presupune utilizarea a mai mult de două subblocuri. În plus, cifrul folosește mai multe seturi de tabele de substituție dependente de cheie (S-box, la care autorul face referire ca S - units ) și o operație suplimentară pentru a crește difuzia.
Cobra este un cifr cu un bloc de 128 de biți (16 octeți) și o lungime variabilă a cheii. Algoritmul constă din două părți: procedura de extindere a cheii și procedura de criptare. Cheia (cu lungimea de până la 576 de biți) se extinde la o matrice de subchei de 12464 de octeți. Criptarea constă dintr-o operație de intrare, repetarea funcției rotunde de 12 ori și o operație de ieșire.
Procedura de criptare include albirea preliminară și ulterioară a cheilor.
O rundă a rețelei extinse Feistel în cazul general arată astfel:
D i = A i-1
C i = D i-1 XOR F(D i; Ki, c)
B i = C i-1 XOR F(C i; Ki, b)
A i = B i-1 XOR F(B i; Ki,a)
Ce arată astfel în cazul Cobra:
A = A XOR W1,1 B=B XOR W1,2 C=C XOR W1,3 D = D XOR W1.4 pentru r = 1 până la 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' următorul r A = A XOR W2.1 B = B XOR W2.2 C=C XOR W2.3 D=D XOR W2.4Procesul de extindere a cheilor generează 12 P-Box-uri cu trei elemente pe 32 de biți fiecare, 12 S-Box-uri cu 256 elemente pe 32 de biți fiecare și două W-Box-uri cu patru elemente fiecare.
Funcția F este o substituție neliniară a unui element de 32 de biți. Aici A' = (B XOR F(B';Pr, 1 ;Sa))>>>1, ceea ce înseamnă că A' se obține prin rotirea la dreapta a rezultatului adunării modulo 2 a variabilei B, cu ieșirea F a unui funcţie care are B', subcheia rotundă Pr, 1 , primul element al S Unit, Sa , ca ieşire, unde r este runda curentă.
Cifrurile clasice bazate pe rețeaua Feistel (de exemplu, standardul intern de criptare GOST 28147-89 ) sunt foarte dependente de tabelul de substituție utilizat, care este partea neliniară a algoritmului. Dar, ca și algoritmul Blowfish , tabelele de căutare pot fi secrete și dependente de cheie. În acest caz, tabelele S-Box sunt generate de un program cheie, care este un fel de PRNG criptografic. În acest caz, desigur, prezența cheilor slabe și a tabelelor de substituție slabe generate de acestea nu este exclusă. Cu toate acestea, pentru a rezolva această problemă, au fost introduse generarea mai multor tabele independente și o operație suplimentară de difuzie. În acest caz, probabilitatea unei chei slabe este atât de mică încât poate fi ignorată. Această teză este mai ales adevărată, iar abordarea este practică atunci când se utilizează o funcție hash ca material cheie de ieșire.
Algoritmul, deși nu este utilizat pe scară largă, a fost implementat în popularul utilitar criptografic Blowfish Advanced 97 de către Markus Hahn, care a folosit varianta sa cu un bloc de 64 de biți și o cheie de 256 de biți. Apoi, în următoarea ediție a utilitarului - versiunea CS, a fost implementată o ediție cu un bloc de 128 de biți și o cheie de până la 576 de biți.
Criptosisteme simetrice | |
---|---|
Cifruri în flux | |
Rețeaua Feistel | |
Rețeaua SP | |
Alte |