Salt la conţinutul principal

Algortimi criptografici simetrici

La baza cifrelor algoritmului cheii simetrice, dintre cele care folosesc pentru criptare o cheie simplă, secretă, se află figurile elementare transpunerea și substituția. [4]

Figurile de transpunere realizează o permutare a caracterelor textului clar. Cheia de criptare este perechea K = (d, f), unde d reprezintă lungimea blocurilor succesive de caractere care vor fi criptate conform permutării f. Decriptarea se obține prin efectuarea permutării inverse.

Schemele de cifrare de substituție înlocuiesc fiecare caracter din alfabetul de mesaje A cu un caracter din alfabetul criptogramei C.

Dacă atunci, unde funcția de substituție f  reprezintă cheia algoritmului. Forma sa este: .

Tehnicile tradiționale de codare se bazează pe cunoștințele expeditorului și ale destinatarului asupra cheii de criptare. Expeditorul codifică mesajul cu un anumit sistem de codificare utilizând cheia secretă de criptare, iar destinatarul decodează acele informații folosind aceeași cheie secretă. Niciun alt utilizator nu trebuie să cunoască cheia de codare / decodare.

Există două tipuri de codificare simetrică: criptare la nivel de flux și criptare la nivel de bloc. Criptarea la nivel de biți constă în codificarea fiecărui bit de informații, în timp ce la nivelul blocului se codifică simultan un anumit număr de biți de mesaj (de exemplu 64 de biți), numiți bloc. Codificarea simetrică este mai rapidă decât codarea asimetrică. Un număr de algoritmi simetrici pot fi implementați în hardware. În acest fel, un algoritm devine mai rapid în funcțiune.

Există două tipuri de algoritmi de criptare simetrică:

1. Blocați algoritmii. Lungimile setate de biți sunt criptate în blocuri de date electronice cu ajutorul unei chei secrete specifice. Pe măsură ce datele sunt criptate, sistemul păstrează datele în memorie în timp ce așteaptă blocuri complete.

2. Flux algoritmi. Datele sunt criptate pe măsură ce sunt transmise în loc să fie păstrate în memoria sistemului.

Câteva exemple de algoritmi de criptare simetrică includ:

· AES (Advanced Encryption Standard)

· DES (Standard de criptare date)

· IDEA (Algoritmul internațional de criptare a datelor)

· Blowfish (înlocuire pentru DES sau IDEA)

· RC4 (Rivest Cipher 4)

· RC5 (Rivest Cipher 5)

· RC6 (Rivest Cipher 6)

AES, DES, IDEA, Blowfish, RC5 și RC6 sunt cifre bloc. RC4 este un flux de cifrare.

Cel mai frecvent utilizat algoritm simetric este Advanced Encryption Standard (AES), care a fost inițial cunoscut sub numele de Rijndael. Acesta este standardul stabilit de Institutul Național de Standarde și Tehnologie din SUA în 2001 pentru criptarea datelor electronice anunțat în FIPS PUB 197 din SUA [1]. Acest standard înlocuiește DES, care a fost utilizat din 1977. În cadrul NIST, cifrul AES are o dimensiune de bloc de 128 biți, dar poate avea trei lungimi de cheie diferite, așa cum se arată cu AES-128, AES-192 și AES-256.

 

Criptografia simetrică are, de asemenea, unele dezavantaje, cum ar fi:

- Nu asigură autentificarea expeditorului. Această lacună de securitate nu permite verificarea electronică a anumitor tranzacții;

- Transmiterea cheii secrete între corespondenți trebuie efectuată pe canale foarte sigure.

- Atunci când sunt utilizate între utilizatorii de rețea, este necesar un număr mare de chei secrete pentru a comunica între doi utilizatori.

AES

Unul dintre algoritmii de criptare simetrică mai populari și adoptați pe scară largă care ar putea fi întâlniți în zilele noastre este Advanced Encryption Standard (AES). Se găsește de cel puțin șase ori mai rapid decât triplul DES.

A fost nevoie de o înlocuire pentru DES deoarece dimensiunea cheii sale era prea mică. Odată cu creșterea puterii de calcul, a fost considerat vulnerabil împotriva atacurilor exhaustive de căutare cheie. Triple DES a fost conceput pentru a depăși acest dezavantaj, dar a fost găsit lent.

Caracteristicile AES sunt:

· Cifrare bloc simetric cu cheie simetrică

· Date pe 128 de biți, taste 128/192/256-biți

· Mai puternic și mai rapid decât Triple-DES

· Furnizați specificații complete și detalii de proiectare

· Software implementabil în C și Java

 AES este o schemă iterativă. Se bazează pe „rețea de substituție – permutare”. Cuprinde o serie de operații legate, dintre care unele implică înlocuirea intrărilor cu ieșiri specifice (substituții), iar altele implică amestecarea de biți în jur (permutări).

AES își efectuează toate calculele pe octeți, mai degrabă decât pe biți. Prin urmare, AES tratează cei 128 de biți ai unui bloc cu text simplu ca 16 octeți. Acești 16 octeți sunt aranjați în patru coloane și patru rânduri pentru procesare ca matrice -

Numărul de runde în AES sunt variabile și depind de lungimea tastei. AES folosește 10 runde pentru tastele de 128 biți, 12 runde pentru tastele de 192 biți și 14 runde pentru tastele de 256 biți. Fiecare dintre aceste runde folosește o tasta rotundă diferită de 128 de biți, care este calculată din tasta AES originală.

Schema structurii AES este ilustrată în figura 2:


Figura 2. Schema algoritmului AES


Procesul de criptare

Aici, ne limităm la descrierea unei runde tipice de criptare AES. Fiecare rundă cuprinde patru subprocese, după cum urmează: AddRoundKey, SubBytes, ShiftRows și MixColumns [1].

  

Pseudo Codul pentru cifrul AES este:

Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])

begin

byte state[4,Nb]

state = in AddRoundKey(state, w[0, Nb-1])  // See Sec. 5.1.4

for round = 1 step 1 to Nr–1

SubBytes(state)  

ShiftRows(state)

MixColumns(state)

AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])

 end for

SubBytes(state)

ShiftRows(state)

AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])

out = state

end

unde :
Byte Substitution (SubBytes)
Cei 16 octeți de intrare sunt înlocuiți prin căutarea unui tabel fix (S-box) dat în proiectare. Rezultatul este într-o matrice de patru rânduri și patru coloane.
Shiftrows

Fiecare dintre cele patru rânduri ale matricei este deplasat spre stânga. Orice intrări care „cad” sunt reintroduse în partea dreaptă a rândului. Tura se efectuează după cum urmează:

    • Primul rând nu este deplasat.
    • Al doilea rând este deplasat cu o poziție (octet) la stânga.
    • Al treilea rând este deplasat cu două poziții spre stânga.
    • Al patrulea rând este deplasat cu trei poziții spre stânga.
    • Rezultatul este o nouă matrice formată din aceleași 16 octeți, dar schimbată una față de cealaltă.

MixColumns

Fiecare coloană de patru octeți este acum transformată folosind o funcție matematică specială. Această funcție ia ca intrare cei patru octeți ai unei coloane și produce patru octeți complet noi, care înlocuiesc coloana originală. Rezultatul este o altă matrice nouă formată din 16 octeți noi. Trebuie remarcat faptul că acest pas nu este efectuat în ultima rundă.

Addroundkey

Cei 16 octeți ai matricei sunt acum considerați ca 128 de biți și sunt XORed la cei 128 de biți ai tastei rotunde. Dacă aceasta este ultima rundă, atunci rezultatul este textul cifrat. În caz contrar, cei 128 de biți rezultați sunt interpretați ca 16 octeți și începem o altă rundă similară.

Decryption Process

Procesul de decriptare a unui text cifrat AES este similar procesului de criptare în ordine inversă. Fiecare rundă constă din cele patru procese efectuate în ordine inversă:

      • Add round key
      • Mix columns
      • Shift rows
      • Byte substitution
Deoarece subprocesele din fiecare rundă sunt inversate, algoritmii de criptare și decriptare trebuie implementați separat, deși sunt foarte strâns legați, după cum urmează:
InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])

begin

byte state[4,Nb]

state = in

AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])

for round = Nr-1 step -1 downto 1

InvShiftRows(state)

InvSubBytes(state)

AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])

InvMixColumns(state)

end for

InvShiftRows(state)

InvSubBytes(state)

AddRoundKey(state, w[0, Nb-1])

out = state

end

 

În criptografia actuală, AES este larg adoptat și susținut atât în hardware, cât și în software. În plus, AES are o flexibilitate încorporată a lungimii cheii, care permite un anumit grad de „verificare a viitorului împotriva progresului în capacitatea de a efectua căutări de chei exhaustive. Cu toate acestea, la fel ca și pentru DES, securitatea AES este asigurată numai dacă este implementată corect și se folosește un bun management al cheilor.

AES are trei lungimi cheie diferite. Principala diferență este numărul de runde prin care trec datele în procesul de criptare, respectiv 10, 12 și 14. În esență, 192 de biți și 256 de biți oferă o marjă de securitate mai mare decât 128 de biți.

În peisajul tehnologic actual, AES pe 128 de biți este suficient pentru cele mai multe scopuri practice. Datele extrem de sensibile manipulate de cei cu un nivel de amenințare extrem ar trebui probabil procesate fie cu AES de 192, fie cu 256 de biți.


[1] https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf


Ultima modificare: Thursday, 8 July 2021, 12:47