AES
Advanced Encryption Standard (zkráceně AES) je symetrická bloková šifra, která pracuje s 128 bitovými bloky dat. Funguje na principu transformace vstupních bloků pevné délky (128 bitů) na zašifrované výstupní bloky stejné délky pomocí série kryptografických operací a tajného klíče.
Blokové schéma šifrování AES

Rozdělení otevřeného textu na bloky
Protože je AES bloková šifra, je potřeba vstupní text rozdělit na bloky o předepsané velikosti 128 bitů. Uvažujme otevřený text o délce \(n\) bitů. Takový text se rozdělí na bloky po 128 bitech (16 bajtech). Pokud poslední blok má méně než 128 bitů, poté je doplněn daty tak, aby měl také délku 128 bitů.
PKCS#7 Padding
Tato metoda přidává k datům bajty, přičemž hodnota každého přidaného bajtu odpovídá počtu přidaných bajtů.
Odstranění výplně při dešifrování
Odstranění výplně probíhá tak, že se přečte poslední bajt a postupně se odebírají bajty se stejnou hodnotou, dokud se nenarazí na rozdílný bajt.
Příklad výplně
Pokud je například potřeba přidat 5 bajtů, každý z nich bude mít hodnotu 0x05 (v binární podobě 0000 0101). I když je délka zprávy již násobkem délky bloku, přidá se celý nový blok s hodnotami odpovídajícími délce doplnění. Po dešifrování se doplnění odstraní na základě hodnoty posledního bajtu.

ISO/IEC 9797-1 Padding
Tato metoda, též známá jako OneAndZeroes Padding, doplní jeden bajt s hodnotou 0x80 (v binární podobě 1000 0000), následovaný nulovými bajty (0x00) až do dosažení délky bloku.
Odstranění výplně při dešifrování
Odstranění výplně probíhá tak, že se v bloku po dešifrování odebere poslední jednička (trailing one)
Key Schedule algoritmus
Na počátku šifrování jsou pomocí key schedule algoritmu odvozeny šifrovací podklíče pro jednotlivá kola šifrování. Počet šifrovacích kol, a tím pádem i počet potřebných klíčů, závisí na použité délce původního klíče. Uvažujme klíč o bitové délce \(N_K\), poté se optimální počet kol pro šifrování vypočítá následujícím způsobem:
Klíč je rozdělen na 4bajtová (32 bitová) slova, přičemž každý šifrovací klíč je vygenerován pomocí tří operací:
- RotWord, neboli cyklický posun o jeden bajt doleva
- SubWord, neboli S-Box substituce na každý bajt slova
- Rcon, neboli přidání konstanty pro každé kolo
RotWord
RotWord funkce provede na slovech klíče cyklický posun o jeden bajt doleva.

SubWord (SubByte)
SubWord (a nebo SubByte) používá Rijndaelovu S-box substici, která předpočítá matici, ze které se vyhledávají bajty k nahrazení. K výpočtu, resp. inicializaci této matice, se používá konečné těleso \(Z_2 \mod {x^8 + x^4 + x^3 + x + 1}\).

RCON
RCON funkce pomocí operace XOR přičte ke stávajícím slovům klíče ještě speciální konstantu (round constant, zkráceno na rcon), která se spočítá jako
kde \(i\) je index daného kola, \(<<\) je cyklický bitový posun vlevo a \(24\) je o kolik bitů se má \(2^{i-1}\) posunout vlevo. Fintou v tomto výpočtu je to, že probíhá nad \(Z_2\) tělesem.
Rekurzivní definice
Výpočet lze také realizovat rekurzivní funkcí, kdy je definována následovně:
Předpočítání RCON
RCON hodnoty jsou závislé pouze na počtu kol, a proto je lze předpočítat.
| index | rcon (hex) | rcon (bin) |
|---|---|---|
| 1 | 0x01 | 0000 0001 |
| 2 | 0x02 | 0000 0010 |
| 3 | 0x04 | 0000 0100 |
| 4 | 0x08 | 0000 1000 |
| 5 | 0x10 | 0001 0000 |
| 6 | 0x20 | 0010 0000 |
| 7 | 0x40 | 0100 0000 |
| 8 | 0x80 | 1000 0000 |
| 9 | 0x1B | 0001 1011 |
| 10 | 0x36 | 0011 0110 |
Průběh šifrovacího kola
Při počáteční transformaci se vstupní blok dat pomocí operace XOR spojí s prvním podklíčem. AES považuje každý blok za matici uspořádanou ve sloupcích. Pro každou takovouto matici se v jednom kole provedou následující operace:
- Sub Bytes - V každý byte je nahrazen jiným bytem podle vyhledávací tabulky.
- Shift Rows - Pro každý řádek je proveden posun vlevo. Každý řádek je posunut o \(n - 1\) míst doleva, tzn. že první řádek je ponechán, druhý je posunut o jeden prvek doleva, třetí o dva, ...
- Mix Columns - Každý sloupec je vynásoben předem danou maticí. V posledním kole se neprovádí.
- Add Round Keys - Výsledek předchozích operací je spojen s klíčem pomocí operace XOR.