Použití kryptografie (šifrování) může vyřešit většinu problémů ve všech oblastech počítačové bezpečnosti. Stále však existují případy, ve kterých samotné šifrování žádnou bezpečnost nezajistí. Také je dobré si uvědomit, že existují různé druhy šifer, přičemž každá je vhodná pro jiné použití.
Kryptografie je věda zabývající se šifrováním, tedy utajováním informací. Naproti tomu kryptoanalýza se zabývá luštěním šifer. Zastřešujícím pojmem pro oba dva obory je kryptologie.
Potřeba utajovat určité informace je pravděpodobně stará jak lidstvo samo. Nicméně o kryptologii můžeme hovořit až v případě, kdy všichni zúčastnění používají stejný vyjadřovací prostředek (např. písmo). Proto řadíme rozvoj těchto znalostí do starověku. Kvalita šifrování roste nejen spolu s novými teoretickými poznatky, ale i s technickým pokrokem. A s každým krokem kryptologie postoupí o krok i kryptoanalýza. Zpočátku byly využívány metody více materiální (mechanické), které byly postupně doplňovány a nahrazovány spíše logickými (matematickými) operacemi, jejichž masivní využití podpořila právě výpočetní technika. Na druhou stranu nelze opomenout ani fakt, že vznik mnohých komponent výpočetní techniky si vyžádala právě kryptologie.
Na úvod je třeba vysvětlit několik základních pojmů, které budu dále používat:
- Šifrovací algoritmus je funkce sestavená na matematickém základě a provádí samotné šifrování a dešifrování dat.
- Šifrovací klíč říká šifrovacímu algoritmu jak má data (de)šifrovat, podobá se počítačovým heslům, avšak neporovnává se zadaná hodnota s očekávanou, nýbrž se přímo používá a vždy tedy dostaneme nějaký výsledek, jehož správnost závisí právě na zadaném klíči.
- Délka klíče ovlivňuje, kromě jiného, časovou náročnost při útoku hrubou silou – což je kryptoanalytická metoda, kdy postupně zkoušíme všechny možné hodnoty, kterých klíč může nabývat.
- Nešifrovaný text bude informace, kterou chceme zašifrovat
- Zašifrovaný text bude informace po zašifrování
Dalším důležitým pojmem je síla šifry. Čím silnější šifru použijeme, tím větší je třeba vynaložit úsilí na její prolomení. Je vědeckou prací kryptologů analyzovat různé algoritmy a posuzovat jejich sílu. Pro obyčejného uživatele, nelibujícího si v matematických důkazech, není tato oblast nijak lákavá a musí se spolehnout na tvrzení odborníků. Nezkušeným není taktéž doporučováno vyvíjet vlastní kryptografické algoritmy. Na druhou stranu i použití té nejsilnější šifry se jemně míjí účinkem, pokud klíč k jejímu dešifrování máme napsán na papírku přilepeným na monitor. Proto nelze šifrování samo o sobě považovat za dostatečné, ale vždy na něj hledět jako na součást celku.
Kryptografické metody lze dělit podle několika hledisek, zmíním jen ty nejdůležitější. Jako první bych uvedl rozdělení na jednosměrné a obousměrné. Přičemž u obousměrné šifry jsme schopni při znalosti správného klíče dešifrovat výsledek a získat tak opět originál. Zatímco u jednosměrné tento zpětný proces provést nelze (a obvykle se ani nepoužívá žádný klíč). Ačkoli se na první pohled jednosměrné šifry mohou zdát nevyužitelné, své uplatnění mají. Nejčastěji slouží k ukládání hesel, čímž se zabrání jejich odhalení i po zpřístupnění jejich uložené verze, ale zároveň zůstává možnost ověření hesla zadaného uživatelem – zadanou hodnotu stačí zakódovat a porovnat s uloženou variantou. Obdobou jednosměrných algoritmů jsou výtahy zpráv a digitální podpisy. Obousměrné šifry používáme všude tam, kde chceme mít možnost zpřístupnit původní text – ale jen vybrané skupině lidí, znajících příslušný klíč.
Jiným možným způsobem rozdělení algoritmů je na šifrování s privátním klíčem (zvaném též symetrické či se symetrickým klíčem), na šifrování s veřejným klíčem (zvaném též asymetrické či s asymetrickým klíčem) a na šifrování hybridní.
Šifrování s privátním klíčem se vyznačuje existencí jediného klíče, který používáme jak pro zašifrování zprávy, tak i pro její dešifrování. Tyto algoritmy bývají relativně rychlé, ale jejich použití je omezeno na případy, kdy účastníci znají daný klíč předem.
Naproti tomu asymetrické šifrování používá klíče dva – privátní a veřejný. Cokoli zašifrováno jedním klíčem, lze dešifrovat pouze druhým klíčem a naopak. Velkou výhodou tohoto přístupu je, že jeden z klíčů (třeba ten který jsme označili jako veřejný) můžeme dát k dipozici komukoliv (tedy zveřejnit ho). Kdokoli nám pak chce napsat tajnou zprávu, použije k jejímu zašifrování tento veřejný klíč. Ani on sám, ani žádný jiný vlastník našeho veřejného klíče ji nebude schopen dešifrovat. Toho bude schopen pouze držitel druhého páru – privátního klíče, jímž bychom v ideálním případě měli být pouze my. Chceme-li poté adresátovi poslat odpověď, nemůžeme ji zašifrovat svým privátním klíčem, neboť by ji byl schopen dešifrovat kdokoli, ale musíme použít příslušný veřejný klíč. Šifrování pomocí privátního klíče se používá v případě, kdy zpráva není tajná, ale jde nám o její autentičnost – bude nepopiratelné, že pochází od nás. K tomuto účelu se ale více hodí digitální podpisy, o kterých se zmíním později.
Hybridní šifrování je kombinací obou výše zmíněných a nachází největší uplatnění v dočasné komunikaci aplikací typu klient/server. Pomalé asymetrické algoritmy se použijí k výměně náhodně vygenerovaného klíče sezení, který slouží ke kódování další komunikace pomocí symetrických šifer.
Kromě právě uvedeného způsobu kódování komunikace po výměně klíče sezení, se šifrování s privátním klíčem používá jako ochrana lokálně uložených dat před nepovolaným návštěvníkem. Pokud máme uložena nechráněná data, může je získat kdokoli s fyzickým přístupem k našemu počítači. Fyzická ochrana má svá omezení a lze ji s vynaložením příslušného úsilí překonat. Jsou-li data chráněna ještě kryptologií, bezpečnost tím významně zvýšíme. Stejný bezpečnostní problém představují zálohy, které se většinou nacházejí na malém přenosném médiu ideálním pro krádež. S použitím šifrování je ovšem spojeno riziko ztráty dat, zapomeneme-li potřebný klíč.
Naproti tomu šifrování s veřejným klíčem má o něco širší použití. Ačkoli bychom ho mohli využít i pro kódování lokálních dat, je to nepraktické kvůli potřebě dvou různých klíčů a náročnosti algoritmů. Oddělenost klíčů je přínosem pro komunikaci subjektů, jež se předem na tajném klíči neměli možnost dohodnout. Problémům spojených s tímto tématem se budu věnovat později, nejprve je nutné zmínit dvě další důležité oblasti kryptologie: výtahy zpráv a digitální podpisy.
VÝTAHY ZPRÁV
Součástí kryptologie jsou i tzv. výtahy zpráv (message digest) označované i jako kryptografické hash kódy. Nejvýstižnějším názvem je však kryptografický kontrolní součet. Jak jsem se již zmínil, jedná se o jednosměrné algoritmy – z výsledku nejsme schopni obnovit originál. Další jejich významnou vlastností je délka výsledného kódu – je stále stejná a poměrně krátká (např. 128 bitů). Z logiky věci vyplývá, že pro minimálně jeden výtah bude existovat více původních dokumentů. Je zde patrna analogie k obyčejným kontrolním součtům (jako např. CRC). Ty však bývají výrazně kratší (často 16 bitů) a je snadné sestavit zdrojový dokument, který vyhovuje danému kontrolnímu součtu, což u kryptografických kontrolních součtů možné není. Dokonce lze předpokládat, že za celou historii lidstva nevzniknou dva dokumenty, které by měli stejný 128bitový výtah.
V předchozím odstavci jsem uváděl ideální vlastnosti hashovací funkce vhodné pro výtah zprávy, neznamená to tedy, že by byly samozřejmostí. Proto raději zopakuji, o které vlastnosti u dobré kryptologické hashovací funkce usilujeme:
- ze vstupu proměnné délky vytváří malou hodnotu
- ze stejného vstupu vytváří vždy stejný výstup
- každé výsledné hodnotě by mělo odpovídat více vstupních kombinací
- algoritmus by neměl být snadno odvoditelný či invertovatelný
- malá změna na vstupu má za následek velké změny ve výstupu
Výtahy zpráv se zabývám ze dvou důvodů. Zaprvé jsou důležitou součástí digitálních podpisů. Zadruhé zajišťují kontrolu integrity, která je v otázce bezpečnosti velmi významná. Vytvoříme-li nějaký dokument (obecně jakýkoli soubor) a poté si uložíme i jeho výtah, můžeme později zkontrolovat zda aktuální verze našeho souboru nebyla změněna. Při použití dobré hashovací funkce by případný narušitel neměl být schopen zajistit, aby výtah upravené verze byl stejný jako neupravené. Pokud ale zná použitou funkci, je schopen vygenerovat výtah nový, proto je nutné, aby původní výtah originálního dokumentu nebyl uložen spolu s dokumentem. Digitální podpisy sice řeší tento problém o něco lépe, ale zato složitěji, proto se lze často setkat se samotnými výtahy. Jako příklad bych uvedl internetový server. Jeho správce musí počítat s možným průnikem a je pro něj tedy důležité mít nástroj pro snadnou kontrolu, zda nedošlo ke změně významných souborů. Pokud si výtahy důležitých souborů pořídí před připojením serveru do sítě a uloží na vyjímatelné medium (včetně programu pro jejich kontrolu), získá nejen možnost kontroly, ale i výhodu, že případný pachatel pravděpodobně nepozná jakou kontrolu provádíte a jak před ní utajit své nekalé aktivity.
Z různých ftp serverů si můžeme kromě samotných programů stáhnout i soubor s jejich kontrolními součty. Je ale dobré si uvědomit, že pokud by se někomu podařilo umístit na něčí server svou upravenou verzi příslušného programu, může tam umístit i její výtah. Zrovna tak pokud bude schopen změnit stahovaný soubor cestou, bude jistě schopen změnit i jeho stahovaný kontrolní součet. Proto nelze uveřejňování kontrolních výtahů spolu s dokumentem považovat za zvýšení bezpečnosti. Lepší variantou je získání výtahu z jiného zdroje.
DIGITÁLNÍ PODPISY
Ačkoli i s digitálními podpisy jsou jisté starosti, řeší mnoho výše uvedených problémů a přinášejí několik dalších zlepšení. Digitální podpis je nejčastěji výtah zprávy zašifrovaný privátním klíčem autora daného dokumentu a je distribuován spolu s ním. Máme-li příslušný veřejný klíč, jsme schopni dešifrovat zakódovaný výtah zprávy a porovnat ho s výtahem, který vytvoříme z obdrženého dokumentu. Digitální podpis nám zajišťuje tři důležité funkce:
- integritu
- autentifikaci (víme kdo zprávu podepsal)
- nepopiratelnost (autor nemůže v budoucnu zapřít, že zprávu podepsal)
Mohli bychom samozřejmě použít privátní klíč k zakódování celé zprávy, ale byla by to náročná operace, která u rozsáhlých souborů může trvat velmi dlouho. Krom toho, abychom zajistili výše uvedené vlastnosti, museli bychom stejně spočítat výtah zprávy a ten zašifrovat spolu s dokumentem. Proto je v každém případě výhodnější zašifrovat pouze příslušný výtah. Zpráva (soubor) bude čitelná (použitelný) i v případě, že nemáme příslušné nástroje pro ověření její pravosti – znamená to sice podstoupit jisté riziko, ale můžeme se sami rozhodnout. Za předpokladu, že máme potřebné programové vybavení, je poslední nutnou součástí veřejný klíč. Na první pohled nepředstavuje jejich získání velký problém, neboť jsou ze své podstaty veřejné. Distribuce veřejných klíčů je ve skutečnosti složitější.
PŘÍKLADY ŠIFROVACÍCH ALGORITMŮ
Mezi algoritmy používající pouze privátní klíč patří např. DES a jeho vylepšené verze dvojitý či trojitý DES, IDEA, Skipjack, Blowfish, Twofish, CAST5 a další.
Algoritmy používají veřejný klíč jsou náročné nejen na čas, ale i na vymyšlení, a neexistuje jich proto velké množství. Nejrozšířenější je bezpochyby RSA. Dalším známým je ElGamal. Existuje také algoritmus zvaný DSA, který byl vyvinut pro digitální podpisy, ale lze upravit pro potřeby šifrování. Jako poslední bych zmínil Diffie-Hellman, který je pro změnu zaměřen na výměnu kryptografických klíčů.
Pro vytváření kryptografických kontrolních součtů se používají např: MD2, MD5, SHA, HAVAL, SNEFRU, RIPEMD160 a jiné.
Na konec pojednání o šifrovacích algoritmech bych upozornil, že již poměrně dávno byla dokázána existence nepřekonatelné symetrické šifry, která se dokonce sestává pouze z jediné matematické operace a to XOR (exclusive or). Nevýhodou tohoto algoritmu je skutečnost, že pro zajištění zmíněné nepřekonatelnosti je třeba použít náhodný klíč o stejné délce jako původní zpráva a tento klíč nesmí být použit více než jednou.
Příště se podíváme na problematiku distribuce klíčů a certifikační autority.