2 Kryptografie s tajným klíčem
2.1 Algoritmy blokových šifier

Blokové šifry transformují skupinu symbolů otevřeného textu na skupiny symbolů zašifrovaného textu. Takže jde o šifrování realizované blok po bloku otevřeného textu.

Symboly otevřeného textu se seskupí do bloků a šifrovací algoritmus se aplikuje na každý z nich (za přítomnosti tajného klíče). Výsledkem šifrování jednoho bloku otevřeného textu je blok zašifrovaného textu o stejné velikosti.

Může nastat případ, že velikost otevřeného textu nebude celočíselným násobkem velikosti bloku. V takovém případě se obvykle používá tzv. “padding-scheme” pro zaplnění posledního bloku. V závislosti na provozním režimu šifry nemusí být zaplnění bloku potřeba. Princip šifrování a dešifrování blokové šifry je zobrazen na následujícím obrázku.

Obr. 2.2 Model blokových šifer

Většina blokových šifer pracuje v iteračním režimu. To znamená, že šifrování se vykonává pomocí více opakování jednotlivých procesů. Jedno vystřídání všech procesů se nazývá runda. Každá runda opakuje sérii operací za přítomnosti jedinečného klíče, odvozeného z originálního vstupního klíče. Operace v každé rundě obvykle sestávají z: substituce, permutace a expanze klíče. Takovéto šifry se nazývají Substitučně-permutační sítě (SPN, Substitution-Permutation Networks) nebo Feistelovy šifry. Substituce je často jedinou nelineární částí mnoha šifer, a proto se substituční boxy (S-boxy) vybírají velmi starostlivě, aby byla šifra odolná proti případným kryptoanalytickým útokům.

Dešifrování probíhá obdobným způsobem. Za přítomnosti stejného klíče, který byl použit při šifrování (symetrické šifry) se stejné operace vykonají na zašifrovaném textu, který je na začátku rozdělen opět do stejných bloků. Výsledkem tohoto procesu jsou bloky dešifrovaného otevřeného textu.

Typické velkosti bloků otevřeného a zašifrovaného textu jsou 64 nebo 128 bitů.

Výhody blokových šifer:

- vysoký rozptyl,
- odolnost vůči neoprávněnému pozměňování obsahu: složitost vkládání symbolů bez detekce.

Mezi nejpoužívanější algoritmy blokových šifer patří:

- Data Encryption Standard (DES),
- Advanced Encryption Standard (AES).

Použití stejného klíče při šifrování stejných částí otevřeného textu se nedoporučuje. V takovém případě by se všechny stejné bloky otevřeného textu transformovaly na všechny stejné bloky zašifrovaného textu. Informace o znalosti opakování určitých bloků může dopomoci kryptoanalýze, a proto existují víceré metody jako tomu předejít. Tyto metody se nazývají režimy blokových šifer.

## Režimy blokových šifer

Blokové šifry se mohou použít různým způsobem s rozdílným utajením a vlastnostmi opravy chyb. Výběr režimu má vliv na rychlost, bezpečnost a šíření chyb daným algoritmem.

Elektronická kódová kniha, resp. režim ECB (Electronic Code Book)

Tento režim představuje základní algoritmus blokové šifry bez jakékoli modifikace. Zpráva se rozdělí do bloků a každý blok otevřeného textu je šifrován jednotlivě, nezávisle na ostatních. Tedy neexistuje žádná závislost mezi bloky, v důsledku čeho se tento režim nedoporučuje. Použití tohoto režimu přináší několik nevýhod:

- Struktura otevřeného textu zůstává odkrytá.
- Citlivost na útok modifikováním obsahu: reorganizování uspořádání bloků nebo opakování některých bloků může způsobit změnu obsahu zprávy.
- Libovolný zašifrovaný text zašifrovaný stejným klíčem může být použit jako zdrojový materiál pro útočníka.

Klasický příklad nevýhody použití režimu ECB je šifrování rastrového obrázku (např. s příponou .bmp). I přes použití silného, bezpečného algoritmu, algoritmus v režimu ECB nedokáže efektivně zastínit obsah zprávy.

Obr. 2.3 Šifrování rastrového obrázku v režimu ECB

Zřetězení zašifrovaného textu, resp. režim CBC (Cipher Block Chaining)

Režim CBC kombinuje (“řetězí”) bloky otevřeného textu s předcházejícími zašifrovanými bloky. Na to je potřeba inicializační vektor IV, který se podrobí operaci s prvním blokem otevřeného textu.

V procesu šifrování se použije operace XOR prvního bloku otevřeného textu a IV ještě před samotným šifrováním. Výsledek je následně zašifrován a výstupem je první blok zašifrovaného textu. Pro následující bloky je inicializačním vektorem zašifrovaný text předcházejícího bloku. Výsledkem zřetězení je, že blok zašifrovaného textu cj je závislý na bloku otevřeného textu pj a předcházejícího bloku zašifrovaného textu cj-1. Z toho je zřejmé, že blok zašifrovaného textu cj teda závisí na aktuálním a všech předcházejících blocích otevřeného textu.

Obr. 2.4 Šifrování a dešifrování v režimu CBC

Režim CBC odstraňuje nedostatky ECB, ale přináší dvě nevýhody:

- Není možné paralelní šifrování: šifrování bloku pj+1 před nebo během šifrování bloku pj, protože blok cj ještě není vytvořen. Na druhé straně, paralelní dešifrování možné je; blok otevřeného textu pj požaduje bloky cj a cj-1.
- Šíření chyby. Chyba jen v jednom bitu (jednoduchá chyba) se během přenosu bloku cj při dešifrování promítne nejen jako chyba v bloku pj, ale i jako chyba v pj+1. Na druhé straně chyba vždy ovlivní jen jeden bit v bloku pj+1. Tento efekt se nazývá limitované šíření chyby (limited error-propagation).

Zpětná vazba ze zašifrovaného textu, resp. režim CFB (Cipher Feedback)

CFB je režim utajení, který je vybaven zpětnou vazbou po sobě jdoucích bloků zašifrovaného textu do vstupních bloků otevřeného textu. Zašifrovaný text se vytvoří operací XOR mezi bloky zpětné vazby a bloky otevřeného textu. Důležitým parametrem v tomto režimu je také celé číslo s, pro které platí 1 ≤ s ≤ L, kde L je délka celého bloku.

Prvním vstupním blokem je inicializační vektor IV. Jednoduše řečeno, proces šifrování v režimu CFB je možno brát jako vstup L nejméně významných bitů předcházejícího IV spojený s s bity předcházejícího bloku zašifrovaného textu, který se následně šifruje. Výsledný zašifrovaný text vzniká operací XOR mezi s nejvýznamnějšími bity bloku po šifrování a s bity odpovídajícího bloku otevřeného textu. Tento proces je zobrazen na následujícím obrázku.

Obr. 2.5 Šifrování v režimu CFB

V případě, že s=1, CFB funguje jako proudová šifra, která šifruje otevřený text bit po bitu.

Použití režimu CFB v paralelním šifrování je podobné jako to bylo v režimu CBC. To znamená, že paralelní šifrování možné není, přičemž dešifrování ano.

Pokud jde o šíření chyb, jednoduchá chyba v bloku zašifrovaného textu způsobí chybu v příslušném bloku dešifrovaného textu, ale i chyby v následujících dešifrovaných blocích. Jejich počet závisí na počtu bitů zpětné vazby a IV.

Zpětná vazba z výstupu, resp. režim OFB (Output Feedback Mode)

Šifra v režimu OFB pracuje následujícím způsobem:

Prvním vstupním blokem je inicializační vektor (IV). Odpovídající vstupní blok je šifrován, přičemž určitý počet MSB (Most Significant Bits) bitů s zašifrovaného bloku se použije dvěma způsoby: jako LSB bity následujícího vstupního bloku a jako sčítanec operace XOR s s bity bloku otevřeného textu. Takto se vytvoří výsledný blok zašifrovaného textu.

OFB je v podstatě určitá forma proudové šifry. Princip režimu OFB je zobrazen na následujícím obrázku.

Obr. 2.6 Šifrování v režimu OFB

Je zřejmé, že v tomto režimu se chyby nešíří. Chybně přenesený bit cj ovlivní jen odpovídající bit dešifrovaného textu pj.

Hlavní výhodou tohoto režimu je:

Známe-li IV, je možno předem vypočítat výstupní bloky ještě před poznáním otevřeného textu (nebo zašifrovaného textu při dešifrování).

Nevýhody jsou následující:

Ani šifrování ani dešifrování není možné v paralelním režimu, protože každý vstupní blok závisí na předcházejícím zašifrovaném bloku.

Vzhledem k tomu, že neexistuje šíření chyb, může útočník řídit změny vykonané na otevřeném textu a přitom vyhodnocovat změny zašifrovaného textu.

Čítačový režim, resp. režim CTR (Counter Mode)

Tento režim je založen na šifrování množiny vstupních bloků nazývaných čítače. Výsledné bloky zašifrovaného textu se získají vykonáním operace XOR mezi výstupními bloky po šifrování a bloky otevřeného textu. Ve všeobecnosti platí, že po inicializaci čítače jsou následující hodnoty čítače odvozeny aplikováním přírůstkové funkce. Obvykle je čítač rozdělen do dvou částí: číslo zprávy a číslo bloku v rámci zprávy. Je přitom nevyhnutelné, aby se hodnota čítače nikdy neopakovala při použití stejného klíče. Režim CTR je zobrazen na následujícím obrázku.

Obr. 2.7 Šifrování v režimu CTR

Chyby se v tomto režimu, podobně jako v režimu OFB nešíří. Jestliže se hodnota bitu v daném bloku vlivem přenosu změní, po dešifrování to způsobí jen jednoduchou chybu na stejném místě v zodpovídajícím bloku.

Hlavní výhody režimu CTR:

Je možné paralelní šifrování i dešifrování. Neexistuje žádné propojení mezi jednotlivými procesy.

Předzpracování není možné, funkce šifrování se může vykonat bez přítomnosti otevřeného textu (podobně při dešifrování).

Hlavní nevýhoda:

Podobně jako u režimu OFB může útočník vykonávat kontrolované změny otevřeného textu.

Vyhodnocení

Režim CBC je nejvhodnější pro šifrování běžných souborů nebo paketů. Je-li požadována vysoká rychlost šifrování, je nejlepší volbou režim CTR. V případě, že chceme zamezit šíření chyb a uvažujeme zašuměný přenosový kanál, dobrou volbou bude OFB režim. A nakonec, počítáme-li s hrozbou mazacího útoku, použijeme režim CFB a s=8 nebo s=1.