AES (standard de criptare)

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 7 martie 2021; verificările necesită 20 de modificări .
AES, Rijndael-AES, Rijndael
Creator Vincent Rayman
Yoan Dymen
Creată 1998 _
Dimensiunea cheii 128/192/256 biți
Dimensiunea blocului 128 de biți
Numărul de runde 10/12/14 (depinde de dimensiunea cheii)
Tip de Rețea de substituție-permutare
 Fișiere media la Wikimedia Commons

AES ( Advanced Encryption Standard ; de asemenea Rijndael , [rɛindaːl] -   reindal ) este un algoritm de criptare bloc simetric (dimensiunea blocului 128 biți, cheie 128/192/256 biți), adoptat ca standard de criptare de către guvernul SUA ca urmare a Competiția AES . Acest algoritm a fost bine analizat și este acum utilizat pe scară largă, așa cum a fost cazul predecesorului său DES . Institutul Național de Standarde și Tehnologie din SUA (NIST) a publicat specificația AES pe 26 noiembrie 2001, după o perioadă de cinci ani în care au fost creați și evaluați 15 candidați. Pe 26 mai 2002, AES a fost anunțat ca standard de criptare. Începând cu 2009, AES este unul dintre cei mai folosiți algoritmi de criptare simetrică [1] [2] . Suportul pentru accelerarea AES a fost introdus de Intel în familia de procesoare x86 începând cu Arrandale în 2010 și mai târziu pe procesoarele Sandy Bridge ; AMD lucrează cu Bulldozer din 2011.  

Istoria AES

La 2 ianuarie 1997, NIST își anunță [3] intenția de a selecta un succesor al DES , care este standardul american din 1977 . Pe 2 octombrie 2000 s-a anunțat că câștigătorul concursului a fost algoritmul Rijndael [4] , iar procedura de standardizare a început. Pe 28 februarie 2001, proiectul a fost publicat, iar pe 26 noiembrie 2001, AES a fost acceptat ca FIPS 197. O retrospectivă istorică a competiției poate fi găsită pe site- ul NIST [5] .

Descrierea AES

Definiții și proceduri de ajutor

Definiții
bloc secvența de biți care formează intrarea, ieșirea, starea și cheia rotundă. Blocul poate fi înțeles și ca o secvență de octeți
Cheie de cifrat o cheie criptografică secretă care este utilizată de procedura de extindere a cheilor pentru a produce un set de chei rotunde; poate fi reprezentat ca o matrice dreptunghiulară de octeți având patru rânduri și Nk coloane
Text cifrat ieșirea algoritmului de criptare
extinderea cheii procedura de generare a cheilor rotunde din cheia de cifrat
Cheie rotundă Cheile rotunde sunt obținute din Cheia de cifrare folosind procedura de extindere a cheilor. Ele sunt aplicate statului la criptare și decriptare
Stat rezultat intermediar al criptării, care poate fi reprezentat ca o matrice dreptunghiulară de octeți având 4 rânduri și Nb coloane
cutie S tabel de substituție neliniară utilizat în mai multe transformări de substituție de octeți și în procedura de extindere a cheilor pentru înlocuirea unu-la-unu a unei valori de octet. S-boxul precalculat poate fi văzut mai jos
Nb numărul de coloane (cuvinte de 32 de biți) care alcătuiesc Statul . Pentru AES Nb = 4
Nk numărul de cuvinte pe 32 de biți care alcătuiesc cheia de criptare. Pentru AES Nk = 4, 6 sau 8
Nu. numărul de runde, care este o funcție de Nk și Nb . Pentru AES Nr = 10, 12, 14
Rcon[] o matrice care constă din biții unui cuvânt de 32 de biți și este constantă pentru o rundă dată. Rcon[] precalculat poate fi văzut mai jos

cutie S

sbox = matrice{ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 };

S-box invers pentru procedura InvSubBytes

InvSbox = matrice{ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d };

Rcon[]

Rcon = matrice{ matrice{0x00, 0x00, 0x00, 0x00}, matrice{0x01, 0x00, 0x00, 0x00}, matrice{0x02, 0x00, 0x00, 0x00}, matrice{0x04, 0x00, 0x00, 0x00}, matrice{0x08, 0x00, 0x00, 0x00}, matrice{0x10, 0x00, 0x00, 0x00}, matrice{0x20, 0x00, 0x00, 0x00}, matrice{0x40, 0x00, 0x00, 0x00}, matrice{0x80, 0x00, 0x00, 0x00}, matrice{0x1b, 0x00, 0x00, 0x00}, matrice{0x36, 0x00, 0x00, 0x00} }; Proceduri auxiliare
AddRoundKey() transformare în timpul criptării și criptării inverse, în care Round Key XOR este c State. Lungimea RoundKey este egală cu dimensiunea Statei (adică dacă Nb = 4, atunci lungimea RoundKey este de 128 de biți sau 16 octeți)
InvMixColumns() transformare la decriptare, care este inversul MixColumns()
InvShiftRows() transformare la decriptare, care este inversul lui ShiftRows()
InvSubBytes() transformare la decriptare, care este inversul lui SubBytes()
MixColumns() transformare de criptare care preia toate coloanele de stat și le combină datele (independent una de cealaltă) pentru a obține coloane noi
RotWord() o funcție utilizată în procedura de extindere a tastelor care preia un cuvânt de 4 octeți și îl parcurge în ciclu
ShiftRows() transformări de criptare care procesează statul, schimbând ciclic ultimele trei linii ale statului cu valori diferite
Subocteți() transformări de criptare care procesează statul folosind un tabel de substituție de octeți neliniar (S-box), aplicând-o independent fiecărui octet al statului
Subcuvânt() funcție utilizată în procedura de extindere a tastelor care ia un cuvânt de patru octeți ca intrare și, aplicând o casetă S la fiecare dintre cei patru octeți, produce un cuvânt de ieșire

Criptare

AES este un standard bazat pe algoritmul Rijndael. Pentru AES, lungimea intrării (bloc de date de intrare) și a stării (starea) este constantă și egală cu 128 de biți, iar lungimea cheii de cifrare K este de 128, 192 sau 256 de biți. În același timp, algoritmul original Rijndael permite o lungime a cheii și o dimensiune a blocului de la 128 la 256 de biți cu un pas de 32 de biți. Pentru a desemna lungimile selectate de intrare, State și Cipher Key în cuvinte de 32 de biți, notația Nb = 4 pentru intrare și, respectiv, Nk = 4, 6, 8 pentru Cipher Key, este utilizată pentru diferite lungimi de cheie.

La începutul criptării, intrarea este copiată în matricea State cu regula , pentru și . După aceea, procedura AddRoundKey() este aplicată statului, iar apoi statul trece prin procedura de transformare (rotundă) de 10, 12 sau 14 ori (în funcție de lungimea cheii), ținând cont de faptul că ultima rundă este ușor diferită de cele anterioare. Ca rezultat, după finalizarea ultimei runde de transformare, Statul este copiat în ieșire conform regulii , pentru și .

Transformările separate SubBytes(), ShiftRows(), MixColumns() și AddRoundKey() gestionează starea. Matrice w[] - conține programul cheie.

Cifrare(byte in[4*Nb], byte out[4*Nb], cuvânt w[Nb*(Nr+1)]) ÎNCEPE stare octet[4,Nb] stare = în AddRoundKey(stare, w[0, Nb-1]) pentru runda = 1 pas 1 la Nr-1 Subocteți (stare) ShiftRows(stare) MixColumns(stare) AddRoundKey(stare, w[round*Nb, (round+1)*Nb-1]) sfârşitul pentru Subocteți (stare) ShiftRows(stare) AddRoundKey(stare, w[Nr*Nb, (Nr+1)*Nb-1]) out = stare Sfârşit

Fig1. Pseudocod pentru Cipher

SubBytes()

Procedura SubBytes() procesează fiecare octet de stare în mod independent, efectuând o substituție neliniară de octet folosind un tabel de substituție (S-box). Această operațiune asigură neliniaritatea algoritmului de criptare. Construirea unei S-box constă în doi pași. În primul rând, se ia reciproca câmpului Galois . Pentru toate operațiile din acest domeniu, se folosește un polinom ireductibil . În al doilea rând, pentru fiecare octet b care formează S-box, se aplică următoarea operație:

unde , și unde este i-lea bit al lui b și  este i-lea bit al constantei . Acest lucru oferă protecție împotriva atacurilor bazate pe proprietăți algebrice simple.

ShiftRows()

ShiftRowsfuncționează cu șiruri de stat. Cu această transformare, liniile de stare sunt deplasate ciclic orizontal cu r octeți în funcție de numărul de linie. Pentru rândul zero, r = 0, pentru primul rând, r = 1 B, și așa mai departe. Astfel, fiecare coloană a stării de ieșire după aplicarea procedurii ShiftRowseste formată din octeți din fiecare coloană a stării inițiale. Pentru algoritmul Rijndael, modelul de offset al șirurilor pentru șirurile de 128 și 192 de biți este același. Cu toate acestea, pentru un bloc de 256 de biți, acesta diferă de cele anterioare prin faptul că rândurile 2, 3 și 4 sunt deplasate cu 1, 3 și, respectiv, 4 octeți. Această notă nu se aplică AES, deoarece folosește doar algoritmul Rijndael cu blocuri de 128 de biți, indiferent de dimensiunea cheii.

MixColumns()

Procedura MixColumnsamestecă cei patru octeți ai fiecărei coloane de stat folosind o transformare liniară reversibilă. MixColumnsprocesează stările pe coloane, tratând fiecare dintre ele ca un polinom de gradul trei. Aceste polinoame sunt înmulțite [6] în modulo cu un polinom fix . Împreună cu introduce difuziunea în cifr. ShiftRows MixColumns

AddRoundKey()

AddRoundKey RoundKeySe combină cu statul în fiecare procedură rundă . Pentru fiecare rundă Roundkey se obține din CipherKeyc folosind procedura KeyExpansion; fiecare RoundKey are aceeași dimensiune cu statul. Procedura efectuează un XOR pe biți al fiecărui octet Statecu fiecare octet RoundKey.

Algoritm de procesare a cheilor

Algoritmul de procesare a cheilor constă din două proceduri:

  • Algoritm de generare a cheilor rotunde (algoritm de extindere a cheilor)
  • Algoritm pentru alegerea unei chei rotunde (cheie de iterație)

Algoritm pentru generarea cheilor rotunde

Algoritmul AES, folosind procedura KeyExpansion() și alimentând-o Cipher Key, K, obține cheile pentru toate rundele. Există în total Nb*(Nr + 1) cuvinte: inițial, algoritmul are nevoie de un set de Nb cuvinte, iar fiecare dintre rundele Nr are nevoie de Nb seturi de date cheie. Matricea rezultată de chei pentru runde este notat ca , . Algoritmul KeyExpansion() este prezentat în pseudocodul de mai jos.

Funcția SubWord() preia un cuvânt de intrare de patru octeți și aplică o casetă S fiecăruia dintre cei patru octeți. Ceea ce sa întâmplat este transmis la ieșire. RotWord() ia un cuvânt ca intrare , pe care îl parcurge și îl returnează . Matricea de cuvinte care este constantă pentru această rundă, , conține valorile lui , unde x = {02} și este o putere a lui ( începe de la 1).

Din figură, puteți vedea că primele cuvinte ale cheii extinse sunt umplute cu Cipher Key. În fiecare cuvânt ulterior, , se pune valoarea obținută în timpul operației XOR și , acele XOR ale pozițiilor anterioare și Nk înaintea cuvintelor. Pentru cuvintele a căror poziție este un multiplu al lui Nk, se aplică o transformare la w[i-1] înainte de XOR, urmată de un XOR cu constanta rotundă Rcon[i]. Transformarea de mai sus constă într-o deplasare circulară a octeților dintr-un cuvânt (RotWord()) urmată de o procedură SubWord() - la fel ca și SubBytes(), doar datele de intrare și de ieșire vor avea dimensiunea cuvântului.

Este important de reținut că procedura KeyExpansion() pentru o cheie de cifrat pe 256 de biți este ușor diferită de cea pentru cheile de cifrat pe 128 de biți și 192 de biți. Dacă și este un multiplu de , atunci SubWord() este aplicat înainte de XOR'a.

KeyExpansion (tasta octet[4 * Nk], cuvânt w[Nb * (Nr+1)], Nk) ÎNCEPE temp cuvânt i = 0; în timp ce (i < Nk) w[i] = cuvânt(cheie[4*i], cheie[4*i+1], cheie[4*i+2], cheie[4*i+3]) i = i + 1 sfârşitul în timp ce i = Nk în timp ce(i < Nb * (Nr+1)) temp = w[i - 1] dacă (i mod Nk = 0) temp = SubWord(RotWord(temp)) xor Rcon[i / Nk] altfel dacă (Nk > 6 și i mod Nk = 4) temp = SubCuvânt(temp) sfârşitul dacă w[i] = w[i - Nk] xor temp i = i + 1 sfârşitul în timp ce Sfârşit

Pseudocod pentru extinderea cheii

Decriptare

InvCipher(byte in[4 * Nb], byte out[4 * Nb], cuvânt w[Nb * (Nr+1)]) ÎNCEPE stare octet[4, Nb] stare = în AddRoundKey(stare, w[Nr * Nb, Nb * (Nr+1) - 1]) pentru rundă = Nr - 1 pas -1 în jos la 1 InvShiftRows(stare) InvSubBytes(stare) AddRoundKey(stare, w[Nb * rotund, Nb * (rotunzi+1) - 1]) InvMixColumns(stare) sfârşitul pentru InvShiftRows(stare) InvSubBytes(stare) AddRoundKey(stare, w[0, Nb - 1]) out = stare Sfârşit

Pseudocod pentru Cifrare inversă

Algoritmul de selecție a tastelor rotunde

La fiecare iterație , cheia rotundă pentru operația AddRoundKey este selectată din matrice , începând de la element la .

Variante ale algoritmului

Pe baza algoritmului Rijndael care stă la baza AES, sunt implementați criptoalgoritmi alternativi. Printre cei mai faimoși se numără participanții la competiția Nessie : Anubis despre involuții, scrisă de Vincent Rayman și o versiune îmbunătățită a cifrului - Grand Cru de Johan Borst.

Securitate

În iunie 2003, Agenția de Securitate Națională a SUA a stabilit că AES era suficient de puternic pentru a fi utilizat pentru a proteja informațiile clasificate .  Până la nivelul SECRET se permitea folosirea cheilor de 128 de biți, pentru nivelul TOP SECRET erau necesare chei de 192 și 256 de biți [7] .

Atacul XSL

Spre deosebire de majoritatea altor cifruri, AES are o descriere matematică simplă. Acest lucru l-a îngrijorat , printre alții, pe Niels Ferguson , care a remarcat în lucrarea sa că securitatea unui cifr se bazează pe o nouă presupunere netestată cu privire la complexitatea rezolvării anumitor tipuri de ecuații ( în engleză  „Securitatea Rijndael depinde de o nouă și netestată presupunere de duritate : este imposibil din punct de vedere computațional să se rezolve ecuații de acest tip" ) [8] [9] , precum și Bruce Schneier, care a scris într-o carte comună cu Niels:

Avem o singură critică la adresa AES: nu prea avem încredere în securitatea sa. Ceea ce ne îngrijorează cel mai mult în legătură cu AES este structura sa algebrică simplă... Niciun alt cifru bloc nu are o reprezentare algebrică atât de simplă. Nu avem idee dacă acest lucru duce la un atac sau nu, dar neștiind acest lucru este un motiv suficient pentru a fi sceptici cu privire la utilizarea AES.

Text original  (engleză)[ arataascunde] Avem o critică la adresa AES: nu prea avem încredere în securitate... Ceea ce ne preocupă cel mai mult la AES este structura sa algebrică simplă... Niciun alt cifr bloc pe care îl cunoaștem nu are o reprezentare algebrică atât de simplă. Nu avem idee dacă acest lucru duce la un atac sau nu, dar necunoașterea este un motiv suficient pentru a fi sceptici cu privire la utilizarea AES. - Niels Ferguson , Bruce Schneier Criptografie practică - 2003 - pp. 56-57

Nicolas Courtois și Josef  Pieprzyk au publicatun articol în 2002 în care au descris un atac teoretic pe care l-au numit atacul XSL ( eXtended Sparse Linearization ), care ar putea permite spargerea cifrurilor AES și Serpent [10] [11] . Cu toate acestea, rezultatele muncii nu au fost acceptate de toată lumea în mod optimist:   

Cred că există o eroare în opera lui Courtois-Pepshik. Au supraestimat numărul de ecuații liniar independente. Ca urmare, ei nu au suficiente ecuații liniare pentru a rezolva sistemul, iar metoda [specificată] nu poate sparge Rijndael. Are ceva merit și merită explorat, dar nu pirata Rijndael în forma sa actuală.

Text original  (engleză)[ arataascunde] Cred că lucrarea Courtois-Pieprzyk este defectuoasă. Ele depășesc numărul de ecuații liniar independente. Rezultatul este că nu au, de fapt, suficiente ecuații liniare pentru a rezolva sistemul, iar metoda nu îl rupe pe Rijndael... Metoda are un oarecare merit și merită investigată, dar nu îl rupe pe Rijndael așa cum este. — Don Coppersmith , comentariu la postarea de blog de Bruce Schneier

Pe pagina dedicată discuției despre concursul NESSIE , la sfârșitul anului 2002, unul dintre autorii cifrului, Vincent Rayman, afirma că atacul XSL este doar un vis ( engleză  The XSL attack is not an attack. It is a dream. ) (acest punct de vedere a fost repetat ulterior în 2004 la a patra conferință AES de la Bonn ). La aceasta, Courtois a răspuns că acest vis ar putea deveni un coșmar pentru autorul cărții AES ( English  It may also be a very bad dream and transform into a nightmare ) [12] (joc de cuvinte: visul se traduce atât ca vis , cât și ca un vis . Coșmar se traduce prin coșmar, coșmar ).

În 2003, Sean Murphy și Matt Robshaw au publicat o  lucrare în care ( presupunând că rezultatele lui Courtois și Pepshik sunt corecte) justificau posibilitatea de a ataca algoritmul AES, reducând numărul de operațiuni de cracare de la 2128 la 2100 . Cu toate acestea, la a 4-a conferință AES , Ilia Toli și Alberto Zanoni au arătat că munca lui Murphy și Robshaw a fost incorectă [ 13] . Mai târziu, în 2007, Chu-Wee Lim și Khoongming Khoo au arătat, de asemenea, că acest atac nu poate funcționa așa cum este descris [14 ] .    

Atacul pe canal lateral

Atacurile pe canale laterale nu sunt legate de caracteristicile matematice ale cifrului, dar folosesc anumite caracteristici de implementare ale sistemelor care folosesc aceste cifruri pentru a dezvălui date parțial sau complet secrete, inclusiv cheia. Există mai multe atacuri similare asupra sistemelor care utilizează algoritmul AES.

În aprilie 2005, Daniel J. Bernstein a  publicat o lucrare care descrie un atac care folosește informații despre timpul de execuție al fiecărei operațiuni de criptare pentru a sparge [15] . Acest atac a necesitat peste 200 de milioane de texte cifrate alese pentru a găsi cheia [16] .

În octombrie 2005, Doug Arne Osvik, Adi Shamir și Eran Trumer au prezentat o lucrare care descrie mai multe atacuri care folosesc timpul pentru a găsi o cheie. Unul dintre atacurile prezentate a obținut cheia după 800 de operațiuni de criptare. Atacul a necesitat ca criptoanalistul să poată rula programe pe același sistem în care a fost efectuată criptarea [17] .

În decembrie 2009, a fost publicată o lucrare în care utilizarea analizei diferenţiale a erorilor ( ing.  Differential Fault Analysis ), creată artificial în matricea de stări la a 8-a rundă de criptare, a făcut posibilă recuperarea cheii în 2 32 de operaţii [18] ] .

Vezi și

Note

  1. Laboratorul lui Cekanov. Intel Core i5 (Clarkdale): Analiza accelerării hardware de criptare AES . THG (19 ianuarie 2010). - „cel mai popular standard pentru criptarea simetrică în lumea IT”. Consultat la 14 noiembrie 2010. Arhivat din original pe 26 februarie 2012.
  2. Biryukov, Alex și Hovratovici, Dmitri. Criptanaliză cu chei înrudite ale AES-192 și AES-256 complet  (engleză)  // Progrese în criptologie - ASIACRYPT 2009. - Springer Berlin / Heidelberg, 2009. - Vol. 5912 . - P. 1-18 . - doi : 10.1007/978-3-642-10366-7_1 . Arhivat din original pe 18 decembrie 2010.
  3. Copie arhivată (link nu este disponibil) . Consultat la 7 decembrie 2006. Arhivat din original pe 6 noiembrie 2006. 
  4. Pagina de eroare NIST arhivată 28 septembrie 2010.
  5. Bounce to index.html Arhivat 17 iulie 2014.
  6. http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf Arhivat 7 aprilie 2015 la Wayback Machine „5.1.3 MixColumns() Transformation .. Coloanele sunt considerate ca polinoame peste GF( 2^8) și înmulțit modulo x^4 + 1 cu un polinom fix a(x), dat de a(x) = {03}x³ + {01}x² + {01}x + {02}."
  7. ↑ Politica națională privind utilizarea standardului avansat de criptare (AES) pentru a proteja sistemele naționale de securitate și informațiile de securitate națională  . Comisia pentru Sisteme Naţionale de Securitate (iunie 2003). Data accesului: 27 octombrie 2010. Arhivat din original la 19 februarie 2012.
  8. James McLaughlin. Controversa XSL // Un studiu al tehnicilor de criptoanaliza cu coduri bloc . - imprimare. - York: Universitatea din York, 2009.  (link inaccesibil)
  9. Niels Ferguson, Richard Schroeppel și Doug Whiting. O reprezentare algebrică simplă a lui Rijndael  //  Selected Areas in Cryptography, Proc. SAC 2001, Note de curs în Informatică #2259. - Springer Verlag, 2001. - P. 103-111 . Arhivat din original pe 16 ianuarie 2016.
  10. Bruce Schneier. Buletin informativ Crypto-Gram  . Schneier despre securitate (15 septembrie 2002). Data accesului: 27 octombrie 2010. Arhivat din original la 19 februarie 2012.
  11. Nicolas Courtois, Josef Pieprzyk. Cryptanalysis of Block Ciphers with Overdefined Systems of Equations  //  Advances in Cryptology - ASIACRYPT 2002 A 8-a Conferință Internațională privind Aplicarea Teoriei Criptologiei și Securitatea Informației Queenstown, Noua Zeelandă, 1-5 decembrie 2002 Proceedings. Note de curs în informatică (2501). - Springer, 2002. - P. 267-287 . - doi : 10.1007/3-540-36178-2 . Arhivat 26 octombrie 2020.
  12. Forumul de discuții NESSIE
  13. Ilia Toli, Alberto Zanoni. O interpretare algebrică a AES-128   // Proc . a Conferinței AES. - 2005. - Vol. 2005 . - P. 84-97 . - doi : 10.1007/11506447_8 .  (link indisponibil)
  14. Chu-wee Lim, Khoongming Khoo. O analiză a XSL aplicată la BES  //  Criptare rapidă a software-ului. - Heidelberg: Springer Berlin / Heidelberg, 2007. - Vol. 4593 . - P. 242-253 . - doi : 10.1007/978-3-540-74619-5_16 .  (link indisponibil)
  15. Daniel J. Bernstein. Atacurile cu sincronizarea cache-ului asupra  AES . - 2004. Arhivat la 17 septembrie 2008.
  16. Bruce Schneier. AES Timing  Attack . Schneier despre securitate (17 mai 2005). Data accesului: 27 octombrie 2010. Arhivat din original la 19 februarie 2012.
  17. Dag Arne Osvik; Adi Shamir și Eran Tromer. Atacuri în cache și contramăsuri: cazul AES  // Subiecte în criptologie - CT-RSA 2006, The Cryptographers' Track la Conferința RSA. - Springer-Verlag, 2005. - P. 1-20. Arhivat 25 noiembrie 2020.
  18. Dhiman Saha, Debdeep Mukhopadhyay, Dipanwita Roy Chowdhury. Un atac de eroare în diagonală asupra standardului avansat de criptare   // Arhiva Cryptology ePrint . - 2009. Arhivat la 6 august 2020.

Literatură

Link -uri