Moderní kryptografické metody
Labyrint šifer v ráji počítačů
Rozvoj počítačů, internetu, elektronické pošty a mobilních telefonů, ale i narůstající ochrana dat uvnitř organizací či začleňování bezpečnostních funkcí do operačních systémů, to vše přináší stále nové aplikace kryptografických technik. Vznikají nové protokoly a standardy a mnohdy ještě nezažité pojmy jsou už brány jako samozřejmost. V právě začínajícím volném seriálu se proto budeme věnovat jak klíčovým pojmům, tak nejpoužívanějším technikám a standardům. Zaměříme se přitom zejména na moderní metody a internetovou kryptografii.

Nejprve si osvěžíme základní pojmy a principy z oblasti šifrování. Definice sice budeme uvádět bez nadbytečných formalismů, ale tak, aby bylo rozumět podstatě. Pro zájemce bude k dispozici dost literatury a dalších odkazů na zdroje, kde naleznou přesné matematické formulace, věty a důkazy. Mimochodem, v současné době existuje už několik desítek základních učebnic, příruček a knih, které se zabývají kryptografickými metodami – a přesto co autor, to jiná definice i u zcela základního pojmu. Kryptografie se totiž neustále rozvíjí, a tak dále vznikají nové metody i pojmy, zatímco některé “staré" se dostávají do nových souvislostí. 

Algoritmy a klíče
Šifrovací algoritmus je transformace, která převádí otevřený text (otevřená data, plaintext) na šifrový text (zašifrovaná data, ciphertext) a naopak. Šifrovací algoritmus se tedy skládá ze dvou transformací: zašifrování a odšifrování. Při zašifrování je příslušná transformace řízena (parametrizována) klíčem pro zašifrování a při odšifrování pak klíčem pro odšifrování. U symetrických šifer jsou tyto klíče odvoditelné jeden z druhého (prakticky vždy jsou oba klíče totožné), zatímco u asymetrických šifer z jednoho klíče nelze zjistit druhý – je to výpočetně neproveditelné.
Kódování a šifrování
Šifrování se často zaměňuje s pojmem kódování. Není divu, kódování je také proces převodu informace z jedné formy do druhé. Kódování k tomu ale nepoužívá žádnou utajovanou informaci – proces zakódování a dekódování je zcela veřejný a může ho provést každý; typickým příkladem jsou kódy ASCII, Latin 2 apod. U šifrovacího algoritmu ale vždy existuje “něco tajného” – i když u asymetrických šifer (viz dále) si můžeme dovolit, aby jeden z klíčů byl veřejný. Ostatně, kdyby nic tajného v šifrovacím algoritmu nebylo, zašifrovat a odšifrovat data by mohl kdokoliv a smysl těchto operací by se zcela vytratil. 
Symetrické šifrovací algoritmy
Jestliže klíč pro zašifrování je stejný jako klíč pro odšifrování (obecněji: pokud jeden můžeme odvodit z druhého), hovoříme o symetrickém šifrovacím algoritmu. Klasické symetrické algoritmy vidíte v tabulce 1.
 Asymetrické šifrovací algoritmy
Jestliže z klíče pro zašifrování nelze odvodit klíč pro odšifrování, nebo naopak (přesněji: je to výpočetně neproveditelné), hovoříme o asymetrickém šifrovacím algoritmu. Tyto algoritmy bývají také nazývány šifrovací algoritmy s veřejným klíčem, protože jeden z klíčů je veřejný; ten druhý, k němu párový, se pak jmenuje klíč tajný (privátní, soukromý). 
Pro utajení dat se používá klasický model: veřejným klíčem se zašifrovává, tajným klíčem se odšifrovává. Tak funguje zašifrování dat zejména pro přenos – odesílatel zašifruje data, která chce odeslat, veřejným klíčem příjemce. Výhodou je, že tento klíč je skutečně veřejně k dispozici, a tak každý může příjemci poslat něco zašifrovaného, aniž by potřeboval cokoli jiného. Příjemce pak data odšifruje svým tajným klíčem. Kouzlo utajení spočívá v tom, že nikdo jiný operaci odšifrování udělat nemůže, protože k tomu by už musel mít příjemcův tajný klíč. 
Při podpisu dat naopak signatář při tvorbě podpisu používá svůj tajný klíč (vystupuje ve formě “podpisového" klíče) a jistým způsobem ho “slučuje" s podepisovanými daty. Výsledkem je tzv. digitální podpis, který může kdokoliv ověřit – použije k tomu veřejný klíč signatáře. Poznamenejme ještě, že v klasickém asymetrickém modelu, jakkoli to na první pohled vypadá podivně, se tajný (podepisovací) klíč používá při podepisování ve spojení s operací odšifrování (přestože při podpisu vlastně nejde o zašifrovaná data) a veřejný klíč (ověřovací) ve spojení s operací zašifrování – tedy stejně jako při šifrování dat. 
Později ale vznikly speciální asymetrické algoritmy pro digitální podpis, které nepoužívají klasické operace zašifrování a odšifrování, ale operace podepsání a verifikace. Liší se od předchozích v tom, že pro tyto operace používají různé matematické metody. Zatímco tedy v klasickém případě byla operace zašifrování i odšifrování totožnou matematickou funkcí zpracovávající jednou veřejný a podruhé tajný klíč, v těchto nových algoritmech se používají dvě různé matematické funkce. Výsledkem operace podepsání pak jsou data, výsledkem operace ověření je odpověď ANO/NE. 
Vznikly ještě další algoritmy, přesněji kryptografické protokoly, které definují vzájemnou činnost dvou nebo více stran (odtud označení protokol) k dosažení nějakého cíle. Využívají technik podobných asymetrickým algoritmům a mají různé účely (viz tab. 2). Nejpoužívanější je protokol umožňující dohodu nebo ustavení společného klíče zúčastněných stran pro přenosy dat přes komunikační kanál – nazýváme ho algoritmus pro výměnu klíčů. Protokoly ovšem existují nejen na bázi asymetrických, ale i symetrických šifer.

Kryptologie
Kryptologie je věda, která se zabývá šifrováním v celé šíři. Skládá se z kryptografie, vědy o tvorbě šifer, a z kryptoanalýzy, vědy o jejich luštění. Kryptografie kromě symetrických a asymetrických šifrovacích algoritmů studuje kryptografické nástroje, jako jsou generátory náhodných čísel, hašovací funkce, digitální podpisy, kryptografické protokoly apod. Kryptoanalýza se zabývá nejen přímým luštěním, tj. hledáním klíčů nebo otevřených textů ze šifrových zpráv, ale v poslední době zejména odhalováním teoretických slabin šifer. Cílem je najít metody, které, i když nevedou přímo k otevřenému textu, ukazují, že šifra není tak silná, jak by měla teoreticky být. Takovým výsledkem může být třeba zjištění, že k útoku na šifru hrubou silou není zapotřebí 256 klíčů, ale jen 255 (například vlastnost komplementárnosti u DES), nalezení  slabých nebo ekvivalentních klíčů, krátkých cyklů apod. 

Blokové a proudové šifry
I když následující informace platí pro symetrické i asymetrické šifry, většinou se pojmy blokové a proudové šifry spojují se symetrickými algoritmy. U asymetrických šifer se totiž vždy implicitně předpokládá, že se jedná o blokovou šifru. 
Blokové šifry
Blokové šifry zpracovávají více znaků otevřeného textu najednou. V současné době je to téměř výhradně blok 64 bitů, zatímco po přijetí standardu AES (viz tab. 1) to bude blok 128 bitů. V základním režimu činnosti bloková šifra zašifruje celý tento blok a vznikne tak stejně dlouhý blok šifrového textu. (Jistě je možné, aby šifrový blok byl delší, ale nepoužívá se to.) Protože se vlastně jedná o jakousi záměnu bloku za blok, nazývá se tento základní režim “elektronická kódová kniha" (ECB, Electronic Code Book). Vidíte, a už jsme zase u kódování! Jenže v tomto případě je kódová kniha pěkně dlouhá. Má 264 nebo 2128 položek typu “otevřený blok – zašifrovaný blok" a je “vygenerována" tajným šifrovacím klíčem. Označíme-li šifrovací klíč K, otevřený text OT a šifrový text ŠT, pak zašifrování a odšifrování formálně zapisujeme jako ŠT = EK(OT) a OT = DK(ŠT); písmena E a D pocházejí z anglického encrypt a decrypt. Situaci znázorňuje obrázek 2. 
Proudové šifry
Pokud chceme zašifrovat jen několik bitů či bajtů otevřeného textu, nebo v případech, kdy jsou data získávána jako proud bitů a je potřeba je okamžitě šifrovat, používají se proudové šifry. Nejpoužívanější proudové šifrovací algoritmy používají tzv. heslo (running key, key stream), které je s otevřeným textem sloučeno nějakou jednoduchou operací bit po bitu nebo bajt po bajtu (nejčastěji je to operace XOR).

Kvalita šifer
Proudové i blokové šifrovací algoritmy mají tu výhodu, že k šifrování velkých objemů dat nepotřebují nijak dlouhý klíč. Musí ale zajistit, aby bez znalosti tohoto klíče nebylo možné luštit otevřený text. To na kvalitní šifrovací algoritmy klade vysoké nároky. Například u blokové šifry každý bit šifrového textu musí složitě záviset na každém bitu šifrovacího klíče a každém bitu otevřeného textu; navíc změna jediného z těchto bitů musí vést k nepredikovatelné změně v šifrovém textu apod. Vzhledem k pokrokům v oblasti kryptografie a kryptoanalýzy v posledních 30 letech jsou však už známy osvědčené postupy, jak tvořit kvalitní algoritmy, a hodně jich bylo také navrženo a je používáno. V současné době se proto dřívější problém výběru kvalitního šifrovacího algoritmu přesouvá spíše k otázce jeho všeobecného používání z důvodu kompatibility, tj. na výběr standardu. 
Požadavky na kvalitní šifrovací algoritmus
Návrh by měl pocházet od zkušených odborníků (nejlépe od týmu kryptografů a kryptoanalytiků s praktickými zkušenostmi).
Známé požadované teoretické kryptografické vlastnosti: 
statistické – vzájemná nekorelovanost otevřeného textu, šifrového textu a klíče, ...
analytické – konfuze, difuze, úplnost, lavinovitost, ...
Odolnost proti všem známým kryptoanalytickým útokům. Předpokládá se, že případný útočník dokonale zná šifrovací algoritmus a jeho cílem je například otevřený text nebo šifrovací klíč. 
Dostatečně dlouhý klíč.

Zveřejňování šifrovacích algoritmů
Z teoretického hlediska se zásadně uvažuje, že případný útočník šifrovací algoritmus zná. Je to nezbytný předpoklad, protože pokud se útočník na nějaký systém zaměří, s určitými náklady dokáže popis algoritmu vždy získat. Při návrhu algoritmů se proto s tím, že luštitel zná algoritmus, počítá jako se samozřejmostí. 
V posledních letech se veřejnost algoritmu prosazuje v oblastech, kde jsou šifry široce veřejně používány (např. internetové prohlížeče apod.) – to je určitě správná tendence. Světová kryptografická veřejnost také očekává, že brzo bude možné používat bezpečný šifrovací algoritmus (viz AES) i v komerčních produktech, jako je právě komunikace na internetu nebo bankovní aplikace (což umožní zrušené embargo na vývoz amerického softwaru se silnou kryptografií). 
Naproti tomu v uzavřených komunitách, jako jsou ozbrojené síly nebo vnitřní systémy bank a podobně, může být situace jiná. Utajování informací o algoritmech a jiných bezpečnostních opatřeních má za cíl znesnadnit případnému útočníkovi jeho činnost a zabránit útoku všemi možnými prostředky (jaký bankovní sejf banka používá, si také nechává pro sebe...). U ozbrojených sil je tomu podobně – ani zde se nezveřejňuje nic, co není nezbytně nutné. V těchto případech je tedy utajení algoritmu určitě na místě. 
Tolik snad jako obecný úvod do problematiky. Nyní už přejdeme ke konkrétním algoritmům a chviličku se zastavíme u těch nejrozšířenějších internetových.
RC2
Algoritmus RC2 byl publikován jako Internet Draft (RFC 2268) v roce 1977. Podobně jako DES a CAST je to 64bitová bloková šifra. Délku klíče lze volit v rozsahu 1 až 128 bajtů, nejčastěji se používá v délce 128 bitů (americké verze) a 40 bitů (exportní verze – doufejme, že už to nebude platit dlouho). Je široce používán na internetu, je například obsažen ve standardech  S/MIME ver. 3.0 a SSL 3.1.  Algoritmus navrhl R. Rivest pro společnost RSA.
RC4
Algoritmus RC4 je proudová šifra opět z dílny R. Rivesta. RC4 nebyl dodnes oficiálně publikován – přesto je jednou z nejčastějších proudových šifer na internetu. Popis byl zveřejněn neznámým hackerem v roce 1994, který disassembloval jeho kód z jednoho programu. Díky tomu je také algoritmus předmětem veřejných diskusí a výzkumu. Je obsažen v S/MIME ver. 3.0 i SSL ver. 3.0. Vedle DES je nejpoužívanějším algoritmem na internetu. Umožňuje volit délku klíče až 256 bajtů, nejpoužívanější je opět v délce 40 nebo 128 bitů. Je trochu anomální v tom, že nevyužívá techniku inicializačního vektoru, a proto se na každou zprávu musí generovat nový náhodný šifrovací klíč. Ten se pak komunikujícímu protějšku musí předat jinou bezpečnou cestou, například prostřednictvím asymetrického systému. O obou technikách si řekneme příště.
TripleDES
TripleDES je zkratka pro algoritmus, který využívá DES (viz tab. 1) jako stavební prvek, a to třikrát za sebou. Vzhledem k tomu zde vystupují tři klíče K1, K2 a K3, které mohou být různé. Nejčastěji se ale používá varianta známá jako “EDE", a to se dvěma nebo třemi různými klíči. V prvním případě je vztah pro šifrování ŠT = EK1(DK2(EK1(OT))), v druhém ŠT = EK3(DK2(EK1(OT))). Přestože šifra DES už byla prolomena, TripleDES je považována (až na drobné teoretické nedostatky, jako je vlastnost komplementárnosti a slabé klíče) za spolehlivou a bezpečnou, i když pomalou šifru. Tam, kde menší rychlost není na závadu, je TripleDES v současné době bezpečným a oficiálním standardem. O tom, že bude ještě nějakou dobu aktuální, svědčí i právě nyní vyvinutý korejský “high-tech" čip, šifrující rychlostí až 240 Mb/s! Obsahuje dva algoritmy – TripleDES a SEED.
CAST
Algoritmus CAST je velmi populární blokovou šifrou. Byl publikován na internetu jako RFC 2144 v květnu 1997 a jako freeware ho začalo používat mnoho firem ve svých produktech (včetně Microsoftu). Je tzv. Feistelovou šifrou a pracuje v rundách. Používá 40- až 128bitový klíč; při klíči do 80 bitů (včetně) se použije 12 rund, jinak 16 rund. Komerční produkty většinou podporují 80- a 128bitové klíče. V Kanadě byl CAST schválen pro ochranu dat ve státním sektoru až do stupně “vyhrazené". Je to zcela ojedinělý případ, kdy byl nějaký veřejný algoritmus schválen pro ochranu utajovaných dat (i když nejnižšího stupně). Připomeňme, že algoritmy DES a GOST jsou sice také oficiálními standardy (americkým a ruským), ale pro ochranu pouze “senzitivních", nikoli utajovaných dat.
Vlastimil Klíma (v.klima@decros.cz)