Vlastnictví cizích veřejných klíčů je rozhodující v mnoha situacích, z nichž bych vzpomenul kontrolu digitálních podpisů, šifrování zpráv, šifrování komunikace. Jak jsem se již několikrát zmínil, algoritmy pro šifrování s veřejným klíčem jsou časově náročné a používají se tedy většinou jen pro výměnu náhodného klíče sezení, který se použije v nějaké silné symetrické šifře. Problém s veřejnými klíči však stále zůstává. Dokonce vzniká další nezanedbatelný problém (který však jen zmíním), a tím je onen náhodný klíč – jde o to, aby byl doopravdy náhodný.
Vzorová komunikace mezi dvěma subjekty A a B by mohla vypadat asi takto (subjekt může být jak fyzická osoba, tak počítač – server poskytující služby):
- A>B Ahoj, tady máš můj veřejný klíč
- B>A Nazdar, tady je můj
- A>B {zpráva šifrovaná veřejným klíčem B}
- B>A {zpráva šifrovaná veřejným klíčem A}
Nejprve dojde k výměně klíčů a poté se vše šifruje klíčem adresáta. Je to významné zvýšení bezpečnosti oproti nešifrované komunikaci. Pokud se někde na cestě mezi A a B nachází cizí agent X, který pouze komunikaci pozoruje, vidí samá nesmyslná (šifrovaná) data a nebude schopen je dešifrovat ani v případě, že zachytil úvodní výměnu klíčů, neboť k dešifrování je potřeba privátního klíče. Náhodného pozorovatele by to jistě odradilo, ale odhodlaného agenta?
Tento mechanismus má dvě hlavní slabiny. Agent X se může stát prostředníkem v komunikaci popř. se rovnou vydávat za jeden ze subjektů. Bude-li X předávat zprávy mezi A a B, může si na počátku zapamatovat vysílaný klíč a místo něj poslat svůj vlastní. Potom pro něj není problém zprávu dekódovat, neboť on je vlastníkem příslušného privátního klíče. Krom přečtení důvěrných informací je schopen zprávu zašifrovat uloženým veřejným klíčem a poslat původnímu adresátovi. Proto si komunikující subjekty nebudou vědomi odposlouchávání, což je tedy horší výsledek než kdyby komunikovali otevřeně. Případně bude-li X tvrdit, že je např. B, neexistuje v tomto modelu způsob, jak to ověřit.
Prozkoumáme-li oba dva problémy, zjistíme, že vše závisí na obdržení správného veřejného klíče subjektu, se kterým chceme doopravdy komunikovat. Nejjistější je jeho fyzické získání přímo od dané osoby (v případě serveru pak od jeho poskytovatele). To však postrádá ono kouzlo komunikačních technologií a hlavně to v mnoha případech není realizovatelné.
Pro zajištění autentičnosti byli přece vymyšleny digitální podpisy. Nemůžeme ovšem chtít, aby si vlastník sám podepsal veřejný klíč, neboť ho nemáme jak zkontrolovat. Proto ho musí podepsat někdo, jehož veřejný klíč už máme. Komunikuje-li spolu parta přátel, je reálné, že někteří si vymění své klíče fyzicky a ostatní budou vyžadovat s příslušným podpisem, který jsou schopni zkontrolovat. Chceme-li ale navázat bezpečné spojení s někým neznámým, je velmi nepravděpodobné, že máme společného přítele. Za tímto účelem vznikly Certifikační autority (CA). Bude-li CA dostatečně známý subjekt, splní onu úlohu společného přítele.
Možná to vypadá geniálně, ale některé problémy stále přetrvávají. Nejprve potřebujeme vůbec získat veřejný klíč dané autority. A jsme téměř tam, kde jsme byli. Zde již schopnosti veškeré počítačové techniky končí a je třeba využít jiných metod. Z jakéhokoli získaného klíče, jsme schopni spočítat jeho otisk (fingerprint), což není nic jiného než kryptografický kontrolní součet, tedy jedinečná to hodnota. A tento otisk musíme porovnat s originálem (celý klíč je příliš dlouhý na nějaké porovnávání). U známé certifikační autority se očekává, že otisky jejího klíče byly uveřejněny v nějaké knize či jinak nedigitálně uveřejněny. Další možností je podle telefonního seznamu najít číslo na vlastníka a otisk ověřit telefonicky.
Pokud telefonicky (nebo podobně) ověříme veřejný klíč subjektu, se kterým chceme přímo komunikovat, další problémy nenastávají. Máme-li pouze ověřen klíč, kterým někdo podepsal cizí veřejný klíč, je zde stále problém k zamyšlení. Co víme jistě je, že jistý subjekt (ať již CA nebo kdokoli jiný), říkejme mu C, podepsal klíč, který o sobě tvrdí že patří např. subjektu B. Co kdyby X přišel za C a řekl, že je B a že chce podepsat svůj klíč? Vše tedy záleží na zodpovědnosti C. Myslíme-li si, že C je zodpovědný (důvěřujeme mu), pak tedy věříme, že máme veřejný klíč subjektu B (což ale nic nevypovídá o zodpovědnosti B, C se jen zaručil, o pravosti jeho klíče). Pokud ale C podepíše, cokoliv mu kdo podstrčí (či za úplatu) – a máme-li toto podezření, nemůžeme předloženému klíči věřit.
Ještě bych doplnil, že podepsanému veřejnému klíči spolu s dalšími identifikačními údaji se říká certifikát a vydává se obvykle na dobu určitou. Certifikáty tedy hrají v bezpečné komunikaci důležitou roli, nelze však zapomínat, že jsou založeny na důvěře, kterou máme k dané autoritě, jež je vystavila.
S přihlédnutím ke zmíněným vylepšením lze původní příklad vzorové komunikace vylepšit. Možností je několik, uvedu část úvodní autentifikace, která se požívá při navazování komunikace se serverem.
- A>B Ahoj, rád bych si popovídal s B
- B>A Já jsem B, tady je můj certifikát
- A>B Certifikát je v pořádku, ale dokaž že je tvůj
- B>A Hele A, já jsem doopravdy B. (Podpis)
- A>B Tak jo, tady máš náš tajný ZašifrovánoVeřejnýmKlíčemB(klíč sezení).
- B>A ZašifrovánoKlíčemSezení(zpráva+její výtah)
Veškerá další komunikace může probíhat soukromě, šifrovaná symetrickým algoritmem za použití vyměněného klíče. Kóduje se nejen zpráva samotná, ale i její kontrolní součet, aby nemohlo dojít k podvržení náhodných dat (přestože klíč sezení nikdo nezná, stále nám může podvrhnout náhodná data, která po dekódování naším klíčem dají jiná náhodná data, u kterých však nebude souhlasit kontrolní součet a zjistíme tedy, že jsme obdrželi porušenou zprávu)
PŘÍKLADY CA
Certifikační autoritou se může stát kdokoli, jde jen o to mít důvěru ostatních. Spousta větších společností, které mají co do činění s počítači, vystupuje taktéž jako CA. Nejvíce příkladů najdeme pochopitelně v USA. V jiných zemích je třeba déle pátrat, abychom nějakou objevili a ta bude stejně nejpravděpodobněji působit pouze lokálně.
Nejznámější je patrně VeriSign, Inc. . Z dalších jen namátkově uvedu GTE CyberTrust, Thawte a AT&T. Budeme-li chtít využít služeb českých autorit, nemáme mnoho na výběr. Podařilo se mi objevit pouze dvě.1.CA (http://www.ica.cz) je provozována firmou PVT. Druhou by snad mohla být firma InWay, o které se mi ale nepodařilo získat mnoho informací (viz http://www.inway.cz/inway/tzca.html)
Některé zajímavé internetové prameny
http://home.netscape.com/security/techbriefs/ssl.html
http://developer.netscape.com/tech/security/ssl/howitworks.html
http://akat.civ.cvut.cz/pechy/School/CertificatesAndAuthorities/
http://www.ica.cz/
http://www.fortify.net/
http://www.distributed.net/pressroom/press-des-iii.html
http://www.eff.org/pub/Privacy/Crypto_misc/DESCracker/
HTML/19980716_eff_des_faq.html
Dokumentace k programům