Čekejte prosím...textová verze
Krypta.cz - Magazín o informační bezpečnosti
Pro jednodušší pochopení stačí vědět, že pro digitální podpisy se používá tzv. asymetrická kryptografie, která pracuje s dvěma klíči – s tajným a veřejným. Ty jsou na sobě matematicky závislé, nicméně se jeden z druhého nedá žádným způsobem odvodit či vypočítat. Tajný klíč pečlivě střeží jeho majitel, neboť je určen k podepisování dokumentů a dešifrování zpráv. Veřejný je naopak možné libovolně šířit – pomocí něho vám někdo zprávu zašifruje nebo váš podpis ověří.
Jakmile jedou publikujeme elektronický podpis k nějakému dokumentu, dáváme tím komukoliv, kdo vlastní náš veřejný klíč, možnosti si ověřit jeho pravost. Například vedle nových verzí programů či balíků se na internetu často objevují soubory s OpenPGP podpisy, které zaručují, že software není nějakým způsobem podvrhnutý. Speciálně u produktů, u kterých se požaduje jakási úroveň bezpečnosti, jsou digitální podpisy neocenitelnou pomůckou.
Někdy ale může být kontraproduktivní, pokud si podpis může ověřit skutečně každý. Představte si situaci, kdy zaměstnanec firmy odešle důkazy o nekalých praktikách společnosti do tisku. Hodilo by se mu nějak dokázat jejich pravost, ovšem klasický elektronický podpis použít nemůže - může si ho ověřit kdokoliv ho dostane do ruky. Okamžitě by ho pak prozradil.
Nepřenositelné podpisy
Pro tyto účely bylo vyvinuto několik protokolů, které si kladou za cíl toto vyřešit. Jejich přesná matematika přesahuje rámec tohoto článku, ovšem základní myšlenka spočívá v další interakci obou stran po obdržení podpisu. Alice, která dokument podepsala, obdrží od Boba náhodné číslo, provede s ním a se svým tajným klíčem několik operací a výsledek odešle Bobovi. Hodnotu, kterou Bob očekává, může Alice spočítat jen v případě, že je podpis na ověřovaném dokumentu pravý.
Princip nepřenositelnosti tedy je, že Bob, sám právě ujištěn o pravosti podpisu, nemůže tuto skutečnost dokázat nikomu třetímu. Jemněji bychom tyto protokoly mohli rozdělit na tzv. Undeniable signatures (nepopiratelné podpisy) a Entrusted undeniable signatures (důvěrně nepopiratelné). Liší se ve skutečnosti, že v prvním z nich nemůže Alice falešně odepřít autorství podpisu. Pokud je donucena (například soudem), musí ho jednoznačně potvrdit nebo vyvrátit. To je v tomto případě ale paradoxně škoda - dává to nějaké vyšší autoritě možnost dohledání se pravdy. Druhý typ protokolů toto řeší přes třetí důvěryhodnou stranu a Alice tak má na výběr, zda dokáže platnost svého podpisu nebo ho zapře a nikdo nic nepozná.
Pokročilé protokoly umožňují Alici pověřit jakoukoliv další osobu ("Designated confirmer") potvrzováním pravosti svého podpisu, aniž jí dává možnost podepisovat jménem Alice cokoliv dalšího. V tomto případě tak matematika v druhém kole "ověřování" nepočítá pochopitelně s Aliciným tajným klíčem.
Ještě dále posouvá celou situaci problém tzv. mezipodpisů ("proxy signatures"), kdy jeden člověk může dát oprávnění jinému podepisovat jeho jménem bez předání tajného klíče. Například šéf firmy v případě dlouhodobé nepřítomnosti, nemoci apod. může pověřit svého prvního náměstka, který pak může podepsat i takové firemní dokumenty, které vyžadují podpis šéfa. Takovéto mezipodpisy mají několik vlastností. Předně jsou rozlišitelné od podpisů normálních, dále vytvořit platný mezipodpis může jen pověřená osoba, mezi-status jejího podpisu je nepopiratelný (tj. skutečný šéfův vytvořit podpis nemůže), pouze pověřovatel si může z mezipodpisů zjistit identitu "mezipodpisovatele" a další.
Skupinové podpisy
Myšlenku skupinových podpisů poprvé nastínil kryptograf David Chaum. Popisuje takovýto problém : " Máme jisté oddělení firmy, které sdílí jednu tiskárnu. Při každém tisku je potřeba ověřit, že osoba, která tisk zadala, skutečně patří do daného oddělení. Na druhou stranu ale požadujeme soukromí a tak nechceme, aby ostatní měli přehled o tom, co kdo tiskne. Ovšem v případě nadměrného používání je třeba identitu zjistit.".
Problém je tedy jasný. Jednotliví členové svoje žádosti podepisují jménem skupiny. Příjemce tak ověří jejich příslušnost, ovšem nedohledá se jejich identity. Vedle toho existuje další strana, která, v případě podezření na neoprávněné jednání, má možnost podpis "otevřít" a na skutečného odesílatele ukázat.
Jak na to? Především důvěryhodná strana, která bude v případě podezření "udávat" nepoctivého člena skupiny, vygeneruje pro každého z nich seznam několika (desítek a více) párů veřejných a tajných klíčů, přičemž pečlivě uschová záznamy o tom, který byl přidělen komu. Pokud vygeneruje X dvojic pro každého z Y členů, rozdá celkem X*Y párů. Pak vezme všechny seznamy dohromady, přehází pořadí dvojic (vlastní páry budou vedle sebe zachovány) a výsledný seznam dvojic předá tomu, kdo bude kontrolovat příslušnost jedinců ke skupině.
Nyní jeden z členů podepíše dokument jedním ze svých (!) tajných klíčů. Příjemce si vyhledá korespondující klíč veřejný a ověří pravost. jelikož je jeho seznam (všech klíčů) v náhodném pořadí, nemůže zjistit přesnou identitu, ví jen že žadatel patří do oprávněné skupiny. To totiž může jen důvěryhodná strana - její seznam je ještě původně rozdělen podle jednotlivých členů. A v případě podezření na neoprávněné aktivity prostě vyhledá komu tento klíč patří.
Obdobně funguje více protokolů pro skupinové podpisy. Tento má opět nevýhodu v nutnosti třetí strany, ta má navíc ještě neomezenou moc - zná tajné klíče všech účastníků a tím pádem může podvrhnout jakýkoliv podpis.
Fail-stop signatures
Zajímavou změnu ve standardním pojetí asymetrické kryptografie navrhli kryptografové Pfitzman a Waidner. Jejich cílem bylo maximálním možným způsobem znemožnit případný brute-force, pokud by ho byl výpočetní výkon jedné ze stran schopen.
Princip je jednoduchý. Jeden veřejný klíč bude odpovídat více klíčům privátním. Důsledek je zřejmý – i když prostým zkoušením všech možností z veřejného klíče dopočítáme jeho tajný protějšek, tak nám nikdo nezaručí, že jsme se strefili do toho, který náš protivník skutečně vlastní. Čím máme k dispozicí více (podepsaných) zpráv, tím můžeme hledanou množinu zpřesňovat a svoje naděje na úspěch zvětšovat, ovšem matematika se postará o to, že pravděpodobnost náhodné trefy se bude stále blížit nule.
Na druhou stranu má tento algoritmus za následek další důkaz nepopiratelnosti podpisu – ze stejného důvodu nemůže Alice svůj vlastní zapřít. Padělatel totiž nemá šanci Alicin skutečný privátní klíč nalézt.
Dodejme, že toto opatření Alici nikterak neřeší problém fyzického zcizení klíče.
Slepé podpisy
Bruce Schneier ve své knize "Applied Cryptography" říká : "Jednou ze základních vlastností podpisů je fakt, že každý vidí, co podepisuje. To je výborné, pokud ovšem nechceme pravý opak.".
Skutečně, jak záhy uvidíme, mohou nastat situace, kdy je nežádoucí, aby jedinec, který dokument podepisuje, věděl co v něm stojí. Napadají mě ihned například nějaké notářské služby.
Některé matematické algoritmy, které se používají pro digitální podpisy, mají zajímavé vlastnosti. Tak například můžeme na otevřeném textu M provést nějakou funkci f(M,k), kde k je tajný parametr, nechat k této nové hodnotě vygenerovat podpis P a nyní hodnota f-1(P) představuje platný podpis pro M. Funkce f() může být typicky násobení (resp. dělení). Celý proces tak bude probíhat tak, že text vynásobíme parametrem k (tzv. "blinding factor"), výsledek si necháme podepsat a nyní obě části vydělíme k a podpis platí. Pokud se divíte a myslíte si, že toto není možné tak znova upozorňuji, že to možné je proto, protože jsme tuto možnost na začátku odstavce definovali. Skutečně, některé algoritmy takové vlastnosti mají ale pravda, samozřejmě ne pro jakoukoliv f().
To jsou tzv. kompletně slepé podpisy, které, jak asi tušíte, velké užitečné hodnoty nenabývají. Daleko zajímavější je ale situace, kdy potřebujeme jednak zakrýt jen část dokumentu, a jednak podpisující musí mít jistotu, že skryté místo nabývá jen některých hodnot. Opět ze Schneiera cituji příklad : " Informační služba chce vyslat svého agenta do cizí země a potřebuje k tomu souhlas nějakého velícího důstojníka, který ovšem o jménu konkrétní osoby nesmí být informován.". Jak na to? Je to až překvapivě jednoduché. Použijeme pravděpodobnost. Například na celnici také nekontrolují zavazadla každému cestujícímu, ale, řekněme, každému dvacátému. Pochytají tím pochopitelně méně pašeráků. Pokud jich chtějí zatknout víc, zvýší četnost kontrol. Pokud méně tak naopak.
Obdobně to udělají v naší imaginární zpravodajské službě. Ze všech agentů vyberou řekněme polovinu kandidátů, a vytvoří pro každého "pověřovací" dokument. Tyto se budou lišit akorát ve jménu agenta, který bude do akce poslán. Všechny je zašifrují různými (tajnými) klíči (kolik dokumentů tolik klíčů) a seznam ukáží veliteli. Ten náhodně vybere jeden a všechny ostatní nařídí dešifrovat. Zbylý podepíše a je to.
Počet vybraných agentů z celkového množství a počet vybraných dokumentů jasně určuje pravděpodobnost úspěšného podvodu, kdy by velitel byl podepsal cokoliv jiného než pověřovací rozkaz agentovi. V čím více dokumentech se jednotka o podvod pokusí, tím spíče bude odhalena, naopak při menším počtu se podvod spíše nepovede. Riziko tak lze nasazením techniky snížit na minimum.