AES

AES ( – 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 

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

Kriptografija