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 bloko ilgis 128 bitų.

Etapų raktų sudarymas

redaguoti

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:

 
kur  
 
 

  • 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   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   yra lygus prieš tai buvusio žodžio W[i–1] ir Nk pozicijų anksčiau buvusio žodžio   XOR sumai. Kai indeksas i dalinasi iš Nk   prieš atliekant operacija XOR, žodžiui W[i – 1]> įvykdoma funkcija RotByte, gautam rezultatui įvykdoma SubByte, dar pridedama Etapo konstanta  , ir po šių veiksmų gauta reikšmė sudedama XOR su žodžio   .
Skirtumas tarp atvejo kai   ir kai  , kuomet  , kai indeksas   dalinasi iš Nk  , atliekam SubByte operaciją žodžiui  

Šifravimas

redaguoti
  • Visas pradinis tekstas padalijamas į vienodo ilgio blokus, kurių ilgiai gali būti 128, 192, 256 bitų, atitinkamai 4x4, 4x6, 4x8 matricos, kurių elementas  yra 8 bitų žodis, ir kiekvienam blokui atskirai atliekami skaičiavimai.
  • SubByte

kiekvienas baitas   pakeičiamas Y, . Kuris yra skaičiuojamas taip:  

  • 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   padauginamas iš matricos.  
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).