Semenov YA (ITEF-MIPT)
Yu. Semenov (ITEP-MIPT)
Biții de date sunt numerotate de la zero, începând cu cea mai veche. AES bază este codurile de reprezentare polinomiale. Deoarece octeți reprezentați după cum urmează: x 6 + x 5 + x + 1.
Algoritmul AES efectuează operații pe matrice bidimensional de bytes numit structurile (statul). Structura este compusă din 4 rânduri de octeți Nb. Nb este lungimea blocului împărțit la 32 (în acest standard Nb = 4). Aceasta permite structurii de etichetare ca sr, c sau s [r, c], unde 0≤r<4 и 0≤с<4..
cod de acces (in), care este o secvență de 16 octeți poate fi scrisă ca:
La implementarea algoritmul AES folosind octet operație plus (modulo 2 = XOR) și multiplicarea. Algoritmul AES este utilizat prin înmulțirea octeți polinomul ireductibil:
m (x) = x + 8 x 4 + x 3 + x + 1
Calcul produs M bytes aici se efectuează în conformitate cu următorul algoritm:
În acest caz, inversul octetul este egal cu:
pentru a se multiplica nibbles (4 biți coduri lungi) folosite polinom ireductibil:
produs Calcularea nibbles M în acest document este după cum urmează:
M reprezintă o d ciuguli. operația de înmulțire pe nibbles- pot fi scrise sub forma de matrice:
După cum sa menționat mai sus lungime a cheii Nk (lungimea măsurată în cuvinte de 32 biți) poate lua valorile 4, 6 sau 8 (pentru AES-128, -192 și -256, respectiv). Numărul de iterații Nr (rotunde), implementat în algoritmul AES, este respectiv 10, 12 și 14.
criptare
La pornirea blocului de date de intrare algoritm de criptare este copiat matrice de stat. După adăugarea la starea inițială de comutare matrice stare este transformată prin funcția de procesare ciclică ori Nr (ultimul ciclu este ușor diferită de cele precedente, vezi. Fig. 19.3). Conversia rezultată este stocată în matrice de ieșire.
Descrierea algoritmului în reprezentare asemănătoare C prezentată în Fig. 1. SubByte de conversie (), ShiftRows (), MixColumns () și AddRoundKey (), starea de procesare matrice. Matricea w [i] este descrisă mai jos.
Cipher (byte în [4 * Nb], octet din [4 * Nb], cuvânt w [Nb * (Nr + 1)])
începe
byte de stat [4, Nb] = starea în
AddRoundKey (stare, w [0, Nb-1])
pentru runda = 1, etapa 1 Nr-1
SubBytes (de stat)
ShiftRows (de stat)
MixColumns (de stat)
AddRoundKey (stare, w [rotund * Nb, (rotund + 1) * Nb-1])
end pentru
SubBytes (de stat)
ShiftRows (de stat)
AddRoundKey (stare, w [Nr * Nb, (Nr + 1) * Nb-1])
out = starea
capăt
Fig. 1. pseudo-cod care implementează procesul de criptare
SubByte Conversie ()
SubByte de conversie () este o permutare neliniar de octeți, care funcționează în mod independent pentru fiecare stat octet și utilizează tabelul de permutare S. Această înlocuire implică două operații:
- Fiecare octet este înlocuit cu un invers multiplicativ (vezi Ec. 3). Byte este convertit în sine.
- Pentru fiecare octet o transformare afină este efectuată în GF câmp (2), definit prin formula
ShiftRows de conversie ()
Transformările ShiftRows () octeți în ultimele trei rânduri de stat sunt în mod ciclic deplasate cu numere diferite de octeți. Primul rând (r = 0) nu este deplasată. ShiftRows () Conversia se realizează după cum urmează:
la 0 în care deplasarea valorii deplasare (r, Nb) depinde de mai multe numere r după cum urmează: shift (1,4) = 1; shift (2,4) = 2; shift (3,4) = 3 MixColumns de conversie () procesează coloana de stat prin coloană, fiecare dintre coloane este un cod de 4 biți. Coloanele sunt considerate ca polinoame peste un câmp de GF (2 august). Coloana este înmulțită cu un polinom fix = x 3 + x 2 + x + x modulo 4 + 1 (a se vedea Eq. 2a). AddRoundKey de transformare () se adaugă la stat iterație cheie (Key Rotundă; bitwise operație XOR). Operația se efectuează pentru fiecare octet al statului. Tastele iterație se calculează pe baza cheii de criptare cu ajutorul cheii procedura (expansiune Key) transformare. Această procedură generează Nb (Nr + 1) cuvinte. Algoritmul necesită cuvinte Nb și fiecare iterație necesită cuvinte Nr Nb. Rezultatul este o matrice liniară de cuvinte de 4 octeți, notată [wi]. unde i este în intervalul de la 0? i KeyExpansion (tasta byte [4 * Nk], cuvânt w [Nb * (Nr + 1)], Nk) Fig. 2. Pseudocodul de punere în aplicare Procedura cheie de transformare Toate procedurile descrise în secțiunea anterioară, sunt reversibile. Scopul decriptare este procesarea unui fișier de date criptate pentru a obține blocul de date originale. proceduri de decriptare includ InvShiftRows () funcția, InvSubBytes (), InvMixColumns () și AddRoundKey (). Pseudo-cod pentru procedura de decodare este prezentată în Fig. 3. InvCipher (byte în [4 * Nb], octet din [4 * Nb], cuvânt w [Nb * (Nr + 1)]) stare byte [4, Nb] end pentru Fig. 3. Procedurile pseudo decriptare Procedura InvShiftRows () este inversul ShiftRows (). Biții din ultimul stat trei rânduri sunt ciclic deplasate cu numere diferite de octeți. Primul rând (r = 0) nu este deplasată. InvSubBytes de conversie () este permutării invers de octeți, în care masa de S este aplicat succesiv fiecărui stat octeți. Acest lucru se realizează datorită afină inverse transforma. InvMixColumns () procedura este inversa MixColumns () (a se vedea., Secțiunea 1.3). Coloanele sunt considerate ca polinoame peste un câmp de GF (2 august). AddRoundKey conversie (), descrisă la punctul 1.4 este reversibil, deoarece acesta conține doar operații XOR. Algoritmul de decriptare (Fig. 3), o secvență de transformări este diferită de ordinea operațiilor criptografice, iar forma tastelor de expansiune pentru criptare și decriptare rămâne neschimbată (Fig. 4). Cu toate acestea, mai multe proprietăți ale algoritmului AES permite formarea unui cod de decriptare echivalent, în care o secvență de operații de transformare rămâne aceeași (cu transformările de înlocuire inversat). EqInvCipher (byte în [4 * Nb], octet din [4 * Nb], cuvânt dw [Nb * (Nr + 1)]) Pentru un program echivalent la sfârșitul programului cheie de decriptare de expansiune adăugat următorul pseudo-cod: pentru i = 0 până la etapa 1 (Nr + 1) * Nb-1 Fig. 4. pseudo-cod pentru demapare echivalent Recent, o versiune nouă a AES-NI (New Instrucțiuni) [2], ceea ce permite optimizarea funcționării algoritmului (mai mic de 50% utilizare CPU). Această versiune poate fi utilizat împreună cu SSL. Intel a dezvoltat un cip care implementează algoritmul (seria X5600). Numărul de clienți, atunci când utilizează versiunea AES-NI poate fi crescută cu 13%.MixColumns de conversie ()
AddRoundKey Conversie ()
Procedura de expansiune cheie
începe
cuvânt temp
i = 0
în timp ce (i 6 și i Mod Nk = 4)
temp = SubWord (temp)
în cazul în care se încheie
w [i] = w [i-Nk] xor temp
i = i + 1
end în timp ce
capăt
capătcopie
începe
starea = în
AddRoundKey (stare, w [Nr * Nb, (Nr + 1) * Nb-1])
pentru rotund = Nr-1 etapa -1 downto 1
InvShiftRows (de stat)
InvSubBytes (de stat)
AddRoundKey (stare, w [rotund * Nb, (rotund + 1) * Nb-1])
InvMixColumns (de stat)
InvShiftRows (de stat)
InvSubBytes (de stat)
AddRoundKey (stare, w [0, Nb-1])
out = starea
capătInvShiftRows de conversie ()
InvSubBytes de conversie ()
InvMixColumns de conversie ()
Demapare AddRoundKey ()
cod de decriptare Echivalent
începe
stare byte [4, Nb]
starea = în
AddRoundKey (stare, dw [Nr * Nb, (Nr + 1) * Nb-1])
pentru rotund = Nr-1 etapa -1 downto 1
InvSubBytes (de stat)
InvShiftRows (de stat)
InvMixColumns (de stat)
AddRoundKey (stare, dw [rotund * Nb, (rotund + 1) * Nb-1])
end pentru
InvSubBytes (de stat)
InvShiftRows (de stat)
AddRoundKey (stare, dw [0, Nb-1])
out = starea
capăt
dw [i] = w [i]
end pentru
pentru runda = 1, etapa 1 Nr-1
InvMixColumns (dw [rotund * Nb, (rotund + 1) * Nb-1])articole similare