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