algoritm de criptare aes

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:

  1. Fiecare octet este înlocuit cu un invers multiplicativ (vezi Ec. 3). Byte este convertit în sine.
  2. 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 ()

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 Conversie ()

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.

Procedura de expansiune cheie

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)
î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ăt

Fig. 2. Pseudocodul de punere în aplicare Procedura cheie de transformare

copie

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)])
începe

stare byte [4, Nb]
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)

end pentru
InvShiftRows (de stat)
InvSubBytes (de stat)
AddRoundKey (stare, w [0, Nb-1])
out = starea
capăt

Fig. 3. Procedurile pseudo decriptare

InvShiftRows de conversie ()

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 ()

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 de conversie ()

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).

Demapare AddRoundKey ()

AddRoundKey conversie (), descrisă la punctul 1.4 este reversibil, deoarece acesta conține doar operații XOR.

cod de decriptare Echivalent

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)])
î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

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
dw [i] = w [i]
end pentru
pentru runda = 1, etapa 1 Nr-1
InvMixColumns (dw [rotund * Nb, (rotund + 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%.

articole similare