AES

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Peršokti į: navigaciją, paiešką

AES (angl. Advanced Encryption Standard – pažangus šifravimo standartas) – šifravimo algoritmas, 2001 metais JAV paskelbtas standartu. Dar vadinamas Rijndael algoritmu, jo autoriai yra Joan Daemen ir Vincent Rijmen. Rijndael yra blokinis simetrinis algoritmas. Šifravimo raktai gali būti 128, 192, arba 256 bitų ilgio, o blokų ilgis gali būti 128, 192 arba 256 bitų.

Etapų raktų sudarymas[taisyti | redaguoti kodą]

Etapo rakto sudarymas iš šifro rakto susideda iš dviejų pagrindinių dalių: rakto plėtimas ir etapo rakto pasirinkimas.

Etapų raktų sudarymo procesas:

  • Žymėjimai:

Nb – Bloko ilgis.
Nk – Šifro rakto stulpelių skaičius.
Nr – Etapų skaičius

  • Etapo konstanta Rcon[i] yra nepriklausoma nuo Nk ir yra apibrėžta taip:

Rcon[i] = (RC[i],00,00,00)
kur RC[i]:
RC[1] = 01
RC[i] = 02 * RC[i-1] = 2^{i-1}

  • SubByte(W) – funkcija, naudodama gautą 4-baitų žodį ir Rijndeal S-box, suskaičiuoja ir grąžina 4-baitų žodį.
  • RotByte(W) - funkcija grąžina žodį, kurio baitai yra cikliškai perstatyti, jei gautas žodis buvo (a, b, c, d), tai grąžinamas rezultatas bus (b, c, d, a).
  • Šifro raktas yra išplečiamas iki išplėstinio rakto.
  • Etapo raktas yra gaunamas iš išplėstinio rakto tokiu būdu: pirmas Etapo Raktas sudarytas iš pirmų Nb žodžių, antrasis iš sekančių Nb žodžių, ir t. t.
  • Išplėstinis Raktas yra 4-baitų žodžių masyvas ir žymimas W, W yra Nb*(Nr+1) ilgio. Pirmi Nk žodžiai yra tiesiog Šifro Raktas. Visi kiti žodžiai yra apibrėžti besikartojančiu skaičiavimu. Rakto išplėtimo funkcija priklauso nuo Nk.

kai Nk<6:

KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+1)])
{
for(i = 0; i < Nk; i++)
W[i] = (Key[4*i], Key[4*i+1], Key[4*i+2], Key[4*i+3]);
for(i = Nk; i < Nb * (Nr + 1); i++)
{
temp = W[i – 1];
if (i % Nk == 0)
temp = SubByte(RotByte(temp)) XOR Rcon[i / Nk];
W[i] = W[i – Nk] XOR temp;
}
}

Pirmieji Nk žodžių yra užpildyti šifro raktu. Kiekvienas tolimesnis žodis W[i] yra lygus prieš tai buvusio žodžio W[i–1] ir Nk pozicijų anksčiau buvusio žodžio W[ i-Nk ] XOR sumai. Kai indeksas i dalinasi iš Nk i mod Nk = 0 prieš atliekant operacija XOR, žodžiui W[i – 1]> įvykdoma funkcija RotByte, gautam rezultatui įvykdoma SubByte, dar pridedama Etapo konstanta Rcon[i/Nk], ir po šių veiksmų gauta reikšmė sudedama XOR su žodžio W[ i-Nk ] .
Skirtumas tarp atvejo kai Nk<=6 ir kai Nk>6, kuomet Nk>6, kai indeksas i-4 dalinasi iš Nk (i-4) mod Nk = 0, atliekam SubByte operaciją žodžiui W[ i-1 ]

Šifravimas[taisyti | redaguoti kodą]

  • Visas pradinis tekstas padalijamas į vienodo ilgio blokus, kurių ilgiai gali būti 128, 192, 256 bitų, atitinkamai 4x4, 4x6, 4x8 matricos, kurių elementas a_{ij},  i in (0,3),  j in (0 , Nb-1)yra 8 bitų žodis, ir kiekvienam blokui atskirai atliekami skaičiavimai.
  • SubByte

kiekvienas baitas X=[x_0,x_1,x_2,x_3,x_4,x_5,x_6,x_7] pakeičiamas Y, Y=[y_0,y_1,y_2,y_3,y_4,y_5,y_6,y_7]. Kuris yra skaičiuojamas taip: 
\begin{bmatrix} 
y_0 \\ y_1 \\ y_2 \\ y_3 \\ y_4 \\ y_5 \\ y_6 \\ y_7

\end{bmatrix}
=
\begin{bmatrix}
   1 & 0 & 0 & 0 & 1 & 1 & 1 & 1
\\ 1 & 1 & 0 & 0 & 0 & 1 & 1 & 1
\\ 1 & 1 & 1 & 0 & 0 & 0 & 1 & 1
\\ 1 & 1 & 1 & 1 & 0 & 0 & 0 & 1
\\ 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0
\\ 0 & 1 & 1 & 1 & 1 & 1 & 0 & 0
\\ 0 & 0 & 1 & 1 & 1 & 1 & 1 & 0
\\ 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1
\end{bmatrix}
*
\begin{bmatrix}
x_0 \\ x_1 \\ x_2 \\ x_3 \\ x_4 \\ x_5 \\ x_6 \\ x_7
\end{bmatrix}
+
\begin{bmatrix}
1 \\ 1 \\ 0 \\ 0 \\0 \\1 \\1 \\0
\end{bmatrix}

  • ShiftRows

Eilutės pastumiamos cikliškai, nulinė eilutė nekeičiama, pirmoji eilutė pastumiama per viena baitą į kairę, antroje eilutėje per du, trečioje per tris baitus.

  • MixColumns

Kiekvienas stulpelis A=[a_0, a_1, a_2, a_3] padauginamas iš matricos. 
\begin{bmatrix}
b_0\\b_1\\b_2\\b_3
\end{bmatrix}
=
\begin{bmatrix}
   02& 03& 01& 01 
\\ 01& 02& 03& 01 
\\ 01& 01& 02& 03 
\\ 03& 01& 01& 02
\end{bmatrix}
*
\begin{bmatrix}
a_0 \\ a_1 \\ a_2 \\ a_3
\end{bmatrix}
Gautą rezultatas padedamas atgal.

  • AddRoundKey

Sudedama bloko matrica su etapo rakto (Round key) matrica.
Šios operacijos kartojamos dešimt kartų, tik dešimta kartą neatliekama stulpelių maišymo operacija (MixColumns).