Jak funguje správa šifrovacích klíčů (1): generování klíčů, jejich distribuce a uchovávání

8. 2. 2008

Sdílet

Základním úkolem správy klíčů je starat se neustále o jejich ochranu a integritu. Životní cyklus klíče začíná procesem jeho generování a končí ve chvíli, kdy již není zapotřebí a je zničen. Téměř ve všech situacích je klíč dříve nebo později nahrazen nějakým jiným.


Tento text je úryvkem z knihy:
Fred Piper, Sean Murphy: Kryptografie - průvodce pro každého
O knize na stránkách vydavatele

V obecné rovině závisí efektivita kryptografických služeb na množství různých faktorů – například na síle algoritmu, rozličných fyzických prvcích (mimo jiné na omezení přístupu ke klíčovému hardwaru či odolnosti hardwaru proti nabourání) a také právě na správě klíčů. Silné algoritmy jsou používány proto, aby útočník nemohl vypočítat klíč, jejich význam se ovšem výrazně snižuje, pokud si útočník může klíč opatřit jiným způsobem.
Zabezpečení jakéhokoliv kryptografického systému je zcela závislé na zabezpečení klíčů. Ty je tedy zapotřebí chránit po celou dobu jejich životního cyklu. V této kapitole si vysvětlíme, co přesně myslíme termínem správa klíčů, podíváme se na rizika, jimž jsou klíče vystavovány, a probereme si různá praktická řešení těchto problémů. V následujícím textu se budeme často zmiňovat o různých obecných standardech, především těch, jež pro bankovní průmysl vytvořil Americký národní institut standardů (American National Standards Institute, ANSI). Aby bylo schéma správy klíčů efektivní, musí být navrženo velice obezřetně, protože jinak by nemuselo vyhovovat obchodním potřebám a implementačním požadavkům systému. Nikdy nesmí být puštěno ze zřetele, že přespříliš komplikované kryptografické bezpečnostní systémy představují pro organizaci zbytečně velkou zátěž.

Životní cyklus klíče

Základním úkolem správy klíčů je starat se neustále o jejich ochranu a integritu. Životní cyklus klíče začíná procesem jeho generování a končí ve chvíli, kdy již není zapotřebí a je zničen. Téměř ve všech situacích je klíč dříve nebo později nahrazen nějakým jiným. Proto se jedná svým způsobem o uzavřený cyklus, ve kterém je zničení následováno nahrazením novým klíčem. Tento nový klíč ovšem bývá generován, rozeslán a uložen ještě před tím, než je starý klíč znehodnocen. V některých systémech se navíc objevuje potřeba archivování klíčů.
Po celou dobu existence klíče je zapotřebí monitorovat jeho stav, aby bylo možné odhalit potenciální útoky na něj vedené. Většinou se jedná o nějakou formu automatického záznamu o jeho používání, takový záznam však nemá žádný smysl, pokud by jeho výsledky nebyly monitorovány. Význam monitorování se navíc výrazně snižuje, jestliže chybí oprávněná osoba, která může provádět potřebné akce v případě, kdy dojde ke zneužití klíče. Především u velkých systémů je tedy záhodno, aby byli určeni pracovníci, jež budou za ochranu klíčů zodpovědní.
Nyní si probereme každou část životního cyklu klíče. Ačkoliv většina základních principů správy je u všech systémů velice podobná, co se týče správy klíčů, mají asymetrické klíče velice rozdílné požadavky než klíče symetrické. Základním pilířem celé řady prvků správy klíčů u asymetrické kryptografie je založení PKI. My se však v následujícím textu zaměříme především na systémy symetrické a pouze vás případně upozorníme, pokud by v dané situaci byly rozdíly mezi oběma systémy příliš markantní.

Generování klíčů

Generování klíčů bývá často problematické – především u algoritmů s veřejnými klíči, které jsou z matematického pohledu velice složité. U symetrických algoritmů může být klíčem prakticky libovolný řetězec bitů (či v některých případech jiných znaků). Z toho vyplývá, že většina uživatelů symetrických algoritmů si může generovat vlastní klíče. Hlavním problémem je generovat klíče tak, aby byly nepředvídatelné. Mezi oblíbené metody patří různé manuální techniky (např. házení mincí), odvozování od osobních dat (např. PIN) či (pseudo-)náhodné generování čísel.
U asymetrických systémů je situace rozdílná. Generování vysokých prvočísel vyžaduje sofistikované matematické postupy, pro které jsou zapotřebí výkonné výpočetní prostředky. Jak jsme se zmínili v minulé kapitole, uživatelé musejí často důvěřovat externě generovaným klíčům či externě napsanému softwaru. Podíváme-li se na RSA, pak jeho bezpečnost závisí na tom, že útočník nedokáže odvodit modulus N. Pakliže procesem generování vznikne pouze omezené množství prvočísel, pak by tento počet prvočísel mohl vygenerovat i útočník a následně je všechna vyzkoušet při rozkladu na činitele. To je jen jednoduchý příklad toho, jak je u systémů s veřejnými klíči důležité věnovat pozornost správnému generování klíčů.

Distribuce a uchovávání klíčů

Jak uchovávání klíčů, tak i jejich distribuce jsou velice důležité. Narážíme při nich na shodné problémy a také jejich řešení bývají podobná, takže si je probereme společně.
Silný algoritmus potřebujeme proto, abychom útočníkovi znemožnili klíč vypočítat. To by však celé bylo zbytečné, jestliže by útočník mohl klíče někde v systému snadno najít. Bezpečné uchovávání klíčů ve valné většině případů tedy zahrnuje i potřebu nějaké formy fyzické ochrany. Klíče mohou být například uchovávány pouze na místech s přísnou kontrolou přístupu. V takovém případě je ochrana klíčů závislá jen a pouze na stupni efektivity takovéto kontroly. Klíče lze případně uchovávat výhradně v různých zařízeních, jako jsou bezpečnostní karty. Poté zde narážíme hned na dva různé stupně ochrany. Za prvé – vlastník takovéto karty je zodpovědný za to, že se zařízení nedostane do nepovolaných rukou. Za druhé – karta může být zabezpečena proti nabourání, takže i když se jí někdo zmocní, bude pro něj velice obtížné z ní klíč získat.
Základní pravidlo pro ochranu klíčů říká, že by se jejich otevřená podoba neměla v celém systému pokud možno nikdy objevovat, ledaže by byly dostatečně fyzicky chráněny. Není-li fyzická ochrana k dispozici, měly by být buď zašifrovány pomocí jiných klíčů, nebo alespoň rozděleny do dvou a více částí. Toto pravidlo vzniklo v dobách, kdy většina šifrování probíhala hardwarově. Přesto je i dnes uchovávání klíčů v zařízeních odolných proti nabourání považováno za bezpečnější než softwarová ochrana. Koncepcí ochrany klíčů pomocí zašifrování jinými klíči vzniká tzv. hierarchie klíčů, kdy každý klíč slouží k zajištění klíče na úrovni pod ním. Hierarchie klíčů je velice důležitá a věnovat se jí budeme později v této kapitole. Pro daný okamžik pouze poznamenáme, že není možné vytvořit systém, ve kterém je každý klíč chráněn nějakým jiným, protože na vrcholu pyramidy zcela logicky musí stát klíč nechráněný. Tento hlavní klíč by měl být generován a rozesílán v komponované formě. Jednotlivé komponenty by měly být distribuovány a do šifrovacího zařízení instalovány samostatně. Má-li být koncepce komponovaných klíčů použitelná, neměl by mít kdokoliv přístup ke všem součástem v jejich nezašifrované podobě.

Nyní se zaměříme na to, jak by měly být komponenty vytvářeny, aby neposkytovaly žádné vodítko o klíči jako takovém. Představme si, že chceme mít dvě složky, jejichž spojením nám vznikne klíč K. Poněkud naivním způsobem by bylo použít první polovinu K jako první část K1 a druhou polovinu jako K2. Pokud by tomu tak bylo a někdo by se zmocnil složky K1, stačilo by mu ke zjištění celého klíče K vyzkoušet všechny zbývající možnosti pro druhou část K2. Jestliže by tedy například klíč K byl 64bitový řetězec, bylo by možné jej odhalit pomocí 2 na 32 pokusů, což je v porovnání s původními 2 na 64 možnostmi při útoku hrubou silou zcela zanedbatelné množství. Mnohem lepším řešením je vygenerovat dvě složky K1 a K2 o stejné velikosti jako K, přičemž klíč K by byl výsledkem binárního součtu K1 a K2 (K = K1 ⊕ K2). Vzhledem k tomu, že K a K2 mají stejnou délku, získání části K1 nijak hledání klíče K neurychlí, a ani hledání K2 není snazší než vyhledávání celého K.
Sofistikovanějším přístupem je použití konceptu kryptografického schématu sdílení tajemství. V tomto případě existuje určité množství hodnot (tzv. podílů), přičemž klíč vznikne jejich kombinací nebo spojením jen některých z nich. Můžeme mít třeba sedm podílů, přičemž navrhujeme systém tak, že skládá klíč z jakýchkoliv čtyř podílů, přičemž jakékoliv tři neposkytnou vůbec žádnou informaci vedoucí k odhalení klíče. Tím se jednak dostáváme na pole sdílené zodpovědnosti za bezpečnost a jednak nám to v případě potřeby obnovení klíče částečně snižuje závislost na jediné osobě.
Pro správu klíčů stejně jako pro mnoho ostatních dalších aspektů kryptografie platí, že je mnohem složitější ji zajistit u komunikačních systémů než u prostých uložených dat. Jestliže uživatel pouze chrání své vlastní informace, nemusí se žádnou distribucí klíčů zatěžovat. Je-li ovšem zapotřebí mít zabezpečený komunikační kanál, je distribuce klíčů často nezbytná. Rozsah problémů s ní spojených přitom závisí na počtu koncových stanic, jež mají být na zabezpečený kanál napojeny. Pokud jsou jenom dvě, pak mluvíme o tzv. spojení bod–bod. Existuje-li více komunikačních stanic než dvě, pak řešení problémů s distribucí klíčů záleží jak na konkrétní aplikaci, tak na prostředí tvořeném terminály. Mohou zde nastat dvě krajní situace. Jedna se nazývá „hvězdicová soustava“, jež se skládá z centrální stanice a množství terminálů, jež musejí být schopny chráněné komunikace s centrální stanicí. Druhou variantou je spojení typu každý s každým, ve kterém musí mít každý terminál zabezpečenou přímou linku ke každé další stanici.
U systémů s veřejnými klíči je situace odlišná. Velká část zdejší problematiky se týká soukromých klíčů, protože ty je zapotřebí – podobně jako symetrické klíče – uchovávat v tajnosti. Veřejné klíče jsou oproti tomu distribuovány v certifikátech.

Tento text je úryvkem z knihy:
Fred Piper, Sean Murphy: Kryptografie - průvodce pro každého
O knize na stránkách vydavatele



Pokračování: Dohoda na klíči, jeho používání a likvidace