2 Kryptografia s tajným kľúčom
2.1 Algoritmy blokových šifier

Blokové šifry transformujú skupiny symbolov otvoreného textu na skupiny symbolov zašifrovaného textu. Takže šifrovanie je realizované blok po bloku otvoreného textu.

Symboly otvoreného textu sa zoskupia po blokoch a šifrovací algoritmus sa aplikuje na každý z nich (za prítomnosti tajného kľúča). Výsledkom šifrovania jedného bloku otvoreného textu je blok zašifrovaného textu o rovnakej veľkosti.

Môže nastať prípad, že veľkosť otvoreného textu nebude celočíselným násobkom veľkosti bloku. V takom prípade je zvyčajne použitá tzv. “padding-scheme” na zaplnenie posledného bloku. V závislosti na prevádzkovom režime šifry však zaplnenie bloku nemusí byť potrebné. Princíp šifrovania a dešifrovania blokovej šifry je zobrazený na nasledujúcom obrázku.

Obr. 2.2 Model blokových šifier

Štruktúra väčšiny blokových šifier pracuje v iteračnom režime. To znamená, že šifrovanie sa vykonáva pomocou viacerých opakovaní jednotlivých procesov. Jedno vystriedanie všetkých procesov sa nazýva runda. Každá runda opakuje sériu operácií za prítomnosti jedinečného kľúča, odvodeného od originálneho vstupného kľúča. Operácie v každej runde zvyčajne pozostávajú zo substitúcie, permutácie a expanzie kľúča. Takéto šifry sa nazývajú Substitučno-permutačné siete (SPN, Stitution-Permutation Networks) alebo Feistelové šifry. Substitúcia je často jedinou nelineárnou časťou mnohých šifier, a preto sa substitučné boxy (S-boxy) vyberajú veľmi starostlivo, aby bola šifra odolná voči prípadným kryptoanalytickým útokom.

Dešifrovanie prebieha obdobným spôsobom. Za prítomnosti rovnakého kľúča, aký bol použitý pri šifrovaní (symetrické šifry) sa rovnaké operácie vykonajú na zašifrovanom texte, ktorý je na začiatku rozdelený opäť do rovnakých blokov. Výsledkom tohto procesu sú bloky dešifrovaného otvoreného textu.

Typické veľkosti blokov otvoreného a zašifrovaného textu sú 64 alebo 125 bitov.

Výhody blokových šifier:

- vysoký rozptyl,
- odolnosť voči neoprávnenému pozmeňovaniu obsahu, zložitosť vkladania symbolov bez detekcie.

Medzi najpoužívanejšie algoritmy blokových šifier patria:

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

Použitie rovnakého kľúča pri šifrovaní rovnakých častí otvoreného textu sa neodporúča. V takom prípade by sa všetky rovnaké bloky otvoreného textu transformovali na všetky rovnaké bloky zašifrovaného textu. Informácia o znalosti opakovania určitých blokov môže pomôcť kryptoanalýze, a preto existujú viaceré metódy ako tomu predísť. Tieto metódy sa nazývajú režimy blokových šifier.

## Režimy blokových šifier

Blokové šifry sa môžu použiť rôznym spôsobom s rozdielnym utajením a vlastnosťami opravy chýb. Výber režimu má vplyv na rýchlosť, bezpečnosť a šírenie chýb daným algoritmom.

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

Tento režim predstavuje základný algoritmus blokovej šifry bez akejkoľvek modifikácie. Správa sa rozdelí do blokov a každý blok otvoreného textu je šifrovaný jednotlivo, nezávisle od ostatných. Neexistuje žiadna závislosť medzi blokmi v dôsledku čoho sa tento režim neodporúča. Použitie tohto režimu prináša niekoľko nevýhod:

- Štruktúra otvoreného textu ostáva odkrytá.
- Citlivosť na útok modifikovaním obsahu: reorganizovanie usporiadania blokov alebo opakovanie niektorých blokov môže spôsobiť zmenu obsahu správy.
- Ľubovoľný zašifrovaný text zašifrovaný rovnakým kľúčom môže byť použitý ako zdrojový materiál pre útočníka.

Klasický príklad nevýhody použitia režimu ECB je šifrovanie rastrového obrázku (napr. s príponou .bmp). Aj napriek použitiu silného, bezpečného algoritmu, algoritmus v režime ECB nedokáže efektívne zastrieť obsah správy.

Obr. 2.3 Šifrovanie rastrového obrázka v režime ECB

Zreťazenie zašifrovaného textu, resp. režim CBC (Cipher Block Chaining)

Režim CBC kombinuje (“zreťazuje”) bloky otvoreného textu s predchádzajúcimi zašifrovanými blokmi. Na to je potrebný inicializačný vektor IV, ktorý sa podrobí operácii s prvým blokom otvoreného textu.

V procese šifrovania sa použije operácia XOR prvého bloku otvoreného textu a IV ešte pred samotným šifrovaním. Výsledok je následne zašifrovaný a výstupom je prvý blok zašifrovaného textu. Pre nasledujúce bloky je inicializačným vektorom zašifrovaný text predchádzajúceho bloku. Výsledkom zreťazenia je, že blok zašifrovaného textu cj závisí od bloku otvoreného textu pj a predchádzajúceho bloku zašifrovaného textu cj-1. Z toho je zrejmé, že blok zašifrovaného textu cj teda závisí od aktuálneho a všetkých predchádzajúcich blokov otvoreného textu.

Obr. 2.4 Šifrovanie a dešifrovanie v režime CBC

Režim CBC odstraňuje nedostatky ECB, ale prináša dve nevýhody:

- Nie je možné paralelne šifrovanie: šifrovanie bloku pj+1 pred alebo počas šifrovania bloku pj, pretože blok cj ešte nie je vytvorený. Na druhej strane, paralelne dešifrovanie je možné. Blok otvoreného textu pj požaduje bloky cj a cj-1.
- Šírenie chyby. Chyba len v jednom bite (jednoduchá chyba) počas prenosu bloku cj sa pri dešifrovaní premietne nielen ako chyba v bloku pj, ale aj ako chyba v pj+1. Na druhej strane chyba vždy ovplyvní len jeden bit v bloku pj+1. Takýto efekt sa nazýva limitované šírenie chyby (limited error-propagation).

Spätná väzba zo zašifrovaného textu, resp. režim CFB (Cipher Feedback)

CFB je režim utajenia, ktorý je vybavený spätnou väzbu po sebe idúcich blokov zašifrovaného textu do vstupných blokov otvoreného textu. Zašifrovaný text sa vytvorí operáciou XOR medzi blokmi spätnej väzby a blokmi otvoreného textu. Dôležitý parameter v tomto režime je také celé číslo s, že platí 1 ≤ s ≤ L, kde L je dĺžka celého bloku.

Prvým vstupným blokom je inicializačný vektor IV. Zjednodušene povedané, proces šifrovania v režime CFB možno brať ako vstup L najmenej významových bitov predchádzajúceho IV spojený s s bitmi predchádzajúceho bloku zašifrovaného textu, ktorý sa následne šifruje. Výsledný zašifrovaný text vzniká operáciou XOR medzi s najvýznamnejšími bitmi bloku po šifrovaní a s bitmi odpovedajúceho bloku otvoreného textu. Tento proces je ilustrovaný na nasledujúcom obrázku.

Obr. 2.5 Šifrovanie v režime CFB

V prípade, že s=1, CFB funguje ako prúdová šifra, ktorá šifruje otvorený text bit po bite.

Použitie režimu CFB v paralelnom šifrovaní je podobné ako to bolo v režime CBC. To znamená, že paralelne šifrovanie možné nie je ale dešifrovanie áno.

Pokiaľ ide o šírenie chýb, tak jednoduchá chyba v bloku zašifrovaného textu spôsobí chybu v prislúchajúcom bloku dešifrovaného textu ale aj chyby v nasledujúcich dešifrovaných blokoch. Ich počet závisí od počtu bitov spätnej väzby a IV.

Spätná väzba z výstupu, resp. režim OFB (Output Feedback Mode)

Šifra pracujúca v režime OFB pracuje nasledujúcim spôsobom:

Prvým vstupným blokom je inicializačný vektor (IV). Zodpovedajúci vstupný blok je šifrovaný, pričom určitý počet MSB (Most Significant Bits) bitov s zašifrovaného bloku sa použije dvoma spôsobmi: ako LSB bity nasledujúceho vstupného bloku a ako sčítanec operácie XOR s s bitmi bloku otvoreného textu. Takto sa vytvorí výsledný blok zašifrovaného textu.

OFB je v podstate určitá forma prúdovej šifry. Princíp režimu OFB je ilustrovaný na nasledujúcom obrázku.

Obr. 2.6 Šifrovanie v režime OFB

Je zrejmé, že v tomto režime sa chyby nešíria. Chybne prenesený bit cj ovplyvní len zodpovedajúci bit dešifrovaného textu pj.

Hlavnou výhodou tohto režimu je:

Ak poznáme IV, je možné vopred vypočítať výstupné bloky ešte pred poznaním otvoreného textu (alebo zašifrovaného textu pri dešifrovaní).

Nevýhody sú nasledovné:

Šifrovanie ani dešifrovanie nie je možné v paralelnom režime, pretože každý vstupný blok šifrovania závisí od predchádzajúceho zašifrovaného bloku.

Keďže neexistuje šírenie chýb, útočník môže riadiť zmeny vykonané na otvorenom texte a pritom vyhodnocovať zmeny zašifrovaného textu.

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

Tento režim je založený na šifrovaní množiny vstupných blokov nazývaných čítače. Výsledné bloky zašifrovaného textu sa získajú vykonaním operácie XOR medzi výstupnými blokmi po šifrovaní a blokmi otvoreného textu. Vo všeobecnosti platí, že počiatočné hodnoty čítačov sú odvodené aplikovaním prírastkovej funkcie. Zvyčajne je čítač rozdelený do dvoch častí: číslo správy a číslo bloku v rámci správy. Je pritom nevyhnutné, aby sa hodnota čítača nikdy neopakovala pri použití rovnakého kľúča. Režim CTR je zobrazený na nasledujúcom obrázku.

Obr. 2.7 Šifrovanie v režime CTR

Chyby sa v tomto režime, podobne ako v režime OFB nešíria. Ak sa hodnota bitu v danom bloku vplyvom prenosu zmení, po dešifrovaní to spôsobí len jednoduchú chybu na rovnakom mieste v zodpovedajúcom bloku.

Hlavné výhody režimu CTR:

Je možné paralelne šifrovanie aj dešifrovanie. Neexistuje žiadne prepojenie medzi jednotlivými procesmi.

Predspracovanie je možné, tzn. že funkcia šifrovania sa môže vykonať bez prítomnosti otvoreného textu (podobne pri dešifrovaní).

Hlavná nevýhoda:

Podobne ako pri režime OFB, útočník môže vykonávať kontrolované zmeny otvoreného textu.

Vyhodnotenie

Režim CBC je najvhodnejší pre šifrovanie bežných súborov alebo paketov. Ak je požadovaná vysoká rýchlosť šifrovania, najlepšou voľbou je režim CTR. V prípade, že chceme zamedziť šíreniu chýb a uvažujeme zašumený prenosový kanál, dobrou voľbou bude OFB režim. A nakoniec, ak počítame s hrozbou mazacieho útoku, použijeme režim CFB a s=8 alebo s=1.