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.
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] .
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} };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 |
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şitFig1. 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.
Algoritmul de procesare a cheilor constă din două proceduri:
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şitPseudocod pentru extinderea cheii
Pseudocod pentru Cifrare inversă
La fiecare iterație , cheia rotundă pentru operația AddRoundKey este selectată din matrice , începând de la element la .
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.
Î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] .
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-57Nicolas 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 SchneierPe 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 ] .
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] ] .
Dicționare și enciclopedii |
---|
Criptosisteme simetrice | |
---|---|
Cifruri în flux | |
Rețeaua Feistel | |
Rețeaua SP | |
Alte |