Nick Ryan
Softwarový inženýr
Produkt PGP je snad nejvíce znám pro své schopnosti šifrování elektronické pošty. Zatímco dříve byl koncept šifrování veřejným klíčem pro mnohé težko srozumitelný, dnes není výjimkou PGP "otisk prstu" (fingerprint) na vizitce. S pomocí PGP je dnes možné přenášet informace v prakticky jakékoli podobě přes jakýkoli typ sítě s úplnou bezpečností.
Soukromí komunikace je však pouze částí celku. Nemá valného smyslu šifrovat vaše emailové zprávy, když zároveň necháváte vaše důvěrné soubory na vašem počítači nechráněné. Ačkoli samotné PGP se dá použít i pro šifrování jednotlivých souborů, není přiliš pohodlné ručně šifrovat a dešifrovat dokumenty, které používáte často. PGPdisk, který je součástí PGP od verze 6.0, poskytuje jednoduchý způsob pro zabezpečení vašich dat.
Jak PGPdisk pracuje
Podobně jako je tomu u tradičního produktu PGP, koncept PGPdisku může být napoprvé pro pochopení obtížný. PGPdisk vytváří virtuální šifrovanou jednotku jakékoli pevné délky, v níž lze uložit libovolné množství souborů. Většina lidí ví, že soubory na jejich počítači jsou ukládány na pevný disk. Operační systém počítače však nemusí vidět každý pevný disk jako jedinou schránku.
Ve skutečnosti vidí pevný disk jako jednu nebo více jednotek, z nichž každá je logicky oddělena. Jednotka je jednoduše název pro kus paměťového prostoru, který pak může sloužit pro uchovávání souborů, a jeden pevný disk může obsahovat více než jednu jednotku. Na počítači s Microsoft Windows jsou jednotky označovány písmeny od A do Z, zatímco na Macintoshi mohou mít libovolné jméno. Některé druhy jednotek, jako např. ZIP diskety, se na počítači mohou objevovat a mizet. To se děje procesem, který má název "připojení" a "odpojení" jednotky.
Uživatel může připojovat nebo odpojovat jednotky PGPdisku, nebo také "PGP-disky", podle své vůle, pouze vložením fráze hesla. Zvláštním aspektem je to, že jednotka PGPdisku není ve skutečnosti paměťovou oblastí plnou souborů, ale jediným souborem uloženým na jiné jednotce. To je možné, protože jednotky jsou pouhé abstrakce, jejichž implementace závisí pouze na příslušném softwaru. Vlastní implementace je transparentní jak pro operačním systém, tak pro uživatele, a výsledkem je dojem, že PGP-disk je jednotka jako každá jiná. To ji činí velmi jednoduchou pro používání. Když chce uživatel založit zašifrovanou jendotku o velikosti 100MB, PGP disk vytvoří soubor této velikosti. Aby mohl být použit, musí uživatel požádat PGPdisk o připojení příslušné jednotky, vložit frázi hesla a jednotka se objeví na jeho počítači jako každá jiná jednotka, např. jako disk C:. Šifrování a dešifrování probíhá transparentně na pozadí.
PGP-disky jsou velmi bezpečné. Data v souborech PGPdisku jsou vždy uložena v šifrované podobě, i když je PGP-disk právě připojen. Data jsou zabezpečena i v případě, že počítač je vypnut nebo havaruje. To je také ve skutečnosti nejdůležitější vlastnost PGPdisku: data jsou zašifrována, pokud se právě nepoužívají.
Samotný program PGPdisk nemá přehled o datech uložených na svých jednotkách. Souborový systém (filesystem), ovládaný operačním systémem, je odpovědný za nakládání se všemi požadavky na práci se soubory i adresáři (nověji složkami) každého PGP-disku. Překládá tyto operace na čtení a zápisy jednotlivých bloků (nebo "sektorů") dat, které se pak předávají jednotce. PGP-disk proto není systémem souborů, je to skutečně pouze jednotka. Když uživatel vytvoří jednotku PGPdisku, dostane příležitost naformátovat ji jako libovolný systém souborů dostupný v operačním systému. I když to neumožňuje používat PGP-disky napříč platformami, poskytuje alespoň maximální kompatibilitu pro velké množství aplikací.
Pohled dovnitř PGPdisku
PGP-disk je soubor, s nímž se nakládá jako s posloupností bloků o velikosti 512 bytů, z nichž se skládá jednotka. Bloky na začátku a konci souboru se používají pro aministrativní data jako alokační tabulka souborů (FAT), zatímco prostřední část souboru (datová oblast) uchovává zašifrovaný obraz samotné PGP-disk jednotky. PGPdisk uspokojuje požadavky na čtení a zápis bloků od operačního systému jejich mapováním na čtení a zápisy z a do datové oblasti a provádí "za běhu" šifrování a dešifrování podle potřeby. Jak je popsáno výše, PGPdisk nezná infromace o souborech uložených na nepřipojeném PGP-disku. To proto, že pro PGP-disk může být použit libovolný systém souborů. PGPdisk ani nepotřebuje vědět, jakým způsobem ukládá systém souborů data na disk.
Rezervované bloky na začátku a konci souboru PGP-disku slouží k ukládání propojeného seznamu hlavičkových struktur, jejichž primární funkcí je ukládat kryptografická data. PGPdisk využívá 128bitové verze symetrického algoritmu CAST pro šifrování a dešifrování. Když je PGP-disk založen, nasbírá od uživatele náhodná data a vytvoří z nich jedinečný 128bitový CAST klíč a 64 bitů "soli". "Solení" znamená proces kombinování jakéhokoli čísla s frází hesla v době vytváření CAST klíče, aby byly znemožněny slovníkové útoky. Uživatel vloží frázi hesla, která se stane "hlavní frází hesla" pro tento PGP-disk. (Jediný PGP-disk má jednu hlavní frázi hesla a až sedm alternativních frází hesla a navíc neomezené množství PGP veřejných klíčů.) PGPdisk pak založí jednotku a datová oblast je vynulována a zašifrována CAST klíčem.
Fráze hesla PGP-disku
Normálně mají šifrovací klíče pouze jednu frázi hesla. PGPdisk však povoluje více frází hesla, které pak slouží k přístupu k jedinému CAST klíči. Je to zajištěno uložením separátních zašifrovaných kopií klíče pro každou frázi hesla. Při přidání nové fráze hesla je uživatel vyzván nejprve k zadání hlavní fráze hesla PGP-disku. Tato fráze hesla se použije k získání CAST klíče PGP-disku a poté má uživatel příležitost přidat další frázi hesla. PGPdisk provede kontrolní součet SHA-1 algoritmem a "osolí" novou frázi hesla. Výsledkem je CAST klíč, kterým se zašifruje hlavní CAST klíč PGP-disku. Tato zašifrovaná kopie je nakonec uložena v hlavičce PGP-disku.
V případě fráze hesla veřejného klíče je uživatel požádán o určení veřejného klíče, který má být připojen k PGP-disku. S využitím funkcí PGPsdk (šifrovacích knihoven, které jsou součástí všech PGP produktů) pak PGPdisk zašifruje CAST klíč PGP-disku uvedeným veřejným klíčem a výsledek uloží v nové hlavičce, spolu s identifikačním číslem veřejného klíče. Podobným způsobem PGP šifruje emailové zprávy.
Jak je PGP-disk připojen
Pro připojení PGP-disku je nutné, aby uživatel vložil frázi hesla. Fráze hesla je nejdříve kontrolována proti hlavní frázi hesla a všem alternativním frázím hesla. Pokud s některou souhlasí, klíč se použije k dešifrování zašifrovaného CAST klíče PGP-disku, a PGP-disk je připojen.
Pokud vložená fráze hesla nesouhlasí s žádnou frází hesla PGP-disku, je srovnána s veřejnými klíči PGP-disku. Pro každou hlavičku veřejného klíče použije PGPdisk služeb knihovny PGPsdk ke zjištění, zda vložená fráze hesla dekóduje privátní klíč, který odpovídá veřejnému klíči, jehož identifikátor je v hlavičce. (Pokud pár veřejný/privátní klíč není v aktuálním okruhu klíčů, tento proces skončí chybou a uživatel je varován.) Zašifrovaný CAST klíč PGP-disku je pak dešifrován s pomocí tohoto privátního klíče.
V souboru PGP-disku jsou všechny hlavní i alternativní fráze hesla uloženy v jediné struktuře nazývané primární hlavička PGP-disku (primary PGPdisk file header). Tato struktura obsahuje informace o verzi, "sůl" a další administrativní data. Obsahuje také dříve zmíněné struktury klíčů pro fráze hesla, jednu pro hlavní frázi hesla a dálší až pro sedm alternativních frází hesla. Tato primární hlavička je uložena v prvním bloku souboru a záložní kopie, zvaná alternativní hlavička (alternate header), je uložena v posledním bloku souboru. Navíc, fráze hesla veřejných klíčů se ukládají do separátních hlaviček zvaných hlavičky veřejných klíčů PGP-disku (PGPdisk public key headers). Každá má velikost jednoho nebo více bloků, což závisí na velikosti zašifrovaných dat (ta se mění s velikostí veřejného klíče). Tyto hlavičky jsou uloženy v propojeném seznamu se začátkem za primární hlavičkou PGP-disku. V závislosti na počtu rezervovaných bloků na začátku souboru PGP-disku mohou být další hlavičky veřejných klíčů uloženy na konec souboru, pokud se vyčerpá prostor na začátku.
Formát hlaviček PGP-disku je dostatečně flexibilní, aby umožnil šifrování jinými 128bitovými symetrickými algoritmy než CAST. Žádná taková šifra však není v současné době podporována.
PGPdisk se také do značné míry snaží zajistit, aby veškerá citlivá data klíčů a frází hesla byla uložena v bezpečných vyrovnávacích pamětech. Tyto vyrovnávací paměti jsou uzamčeny, aby nemohly být odloženy do odkládacího souboru na disku, a před uvolněním jsou vždy vymazány. Navíc se všemi vstupními údaji od uživatele se nakládá tak, že žádná kopie fráze hesla se nezkopíruje v žádném případě na žádné místo v paměti, ani během vkládání. I když je stále možné získání fráze hesla s pomocí programu pro monitorování úderů na klávesnici, jde o potenciální problém všech bezpečnostních produktů na jakékoli platformě. Stoprocentní ochrana proti takovým programům je prakticky nemožná, protože podobný monitorovací program může být vložen do některé z mnoha úrovní operačního systému.
PGPdisk a Microsoft Windows
Srdce PGPdisku leží v ovladači PGPdisku. Ovladač je software, který je prováděn na vyšší privilegované úrovni než běžný kód aplikace. Proo implementaci operací jako připojení a odpojení diskových jednotek ve Windows je nutné napsat ovladač.
Ve Windows 98 a NT je rozdíl mezi kódem běžícím v uživatelském režimu a v režimu jádra. Uživatelský režim se znamená spustitelné programy, které používají Win32 aplikační rozhraní (API), jako např. aplikace PGPdisk a dynamická knihovna PGPdisk shell extension. Tyto komponenty mohou běžet beze změny pod oběma operačními systémy. V režimu jádra běží ovladače, které dovolují provádět úkony související s přístupem k hardwaru a implementací systému souborů. Windows 98 a NT mají úplně jiné aplikační rozhraní (API) pro ovladače, takže jsme museli napsat dvě různé verze PGPdisku, jednu pro každý z obou operačních systémů. Zde se budu soustředit na ovladač pro NT, který je pokročilejší koncepčně i prakticky. Primární úkol ovladače PGPdisku je nabídnout obraz jednotky PGP-disku operačnímu systému. To zahrnuje vytváření a rušení písmenných označení disků a provádění vstupně výstupní operací. Ovladač také zajišťuje několik sekundárních funkcí, např. zamykání vyrovnávacích pamětí a zachytávání pohybů myši a úderů na klávesnici.
Když si uživatel přeje připojit PGP-disk, aplikace PGPdisk odpovídá za vyžádání fráze hesla a dešifrování CAST klíče PGP-disku. Pak předá ovladačí PGPdisku klíč, cestu k souboru připojovaného PGP-disku a uživatelem preferované písmeno pro označení disku. Ovladač pak zavolá systémové služby, které vytvoří nový objekt odpovídající diskové jednotce, a spojí jej s písmenným označením. Jednotka však ještě není připravena k práci. Musí na ní totiž být nejdříve připraven systém souborů. Tuto úlohu provádí operační systém, který se ptá každého nainstalovaného ovladače systému souborů, zda rozeznává tuto PGP-diskovou jednotku. Každý ovladač čte první sektor PGP-disku, který obsahuje značku pro identifikaci systému souborů, kterým byla jednotka naformátována. Pokud ovladač tuto značku pozná, prohlásí PGP-disk za svůj vlastní a umožní na něm pracovat se soubory a adresáři (složkami). Při odpojení PGP-disku zajistí nejpreve ovladač PGPdisku, že žádný ze souborů na příslušné jednotce není právě používán. Pokusí se zamknout celou jednotku pro výhradní přístup, a pokud se pokus o zamknutí nepovede, požádá PGPdisk uživatele zavřít každou aplikaci, která by mohla využívat souborů na jednotce. Jakmile je jednotka úspěšně uzamknuta, ovladač požádá systém o oddělení propojení mezi jednotkou PGP-disku a jejím písmenným označením.
Ovladač však dělá mnohem více než pouhé připojování a odpojování PGP-disků. Obsluhuje také všechny požadavky na vstupně výstupní operace pro své jednotky s využitím separátních "vláken" (threads) běžících v režimu jádra, jednoho pro každý připojený PGP-disk. Obdržený požadavek je uložen do fronty "vlákna" odpovídajícího PGP-disku. V případě čtení a zápisu je tato operace provedena a za běhu jsou data dešifrována a šifrována podle potřeby.
Je málo známo, že ovladače ve Windows 98 i NT mohou otevírat soubory stejně jako každá jiná aplikace. Díky jedinečné povaze prostředí jádra je nutné dávat pozor, aby nedošlo k uváznutí. Dokud se dodržují všechna pravidla a používají se správné synchronizační mechanismy, vše pracuje téměř bez povšimnutí. Firma Microsoft pravděpodobně nikdy nepředpokládala, že jednotky a soubory se budou používat tímto způsobem, ale také toto používání neznemožnila.
Obecně je vhodné provádět v režimu jádra co nejméně operací. Důvodem je, že když dojde k problému nebo havárii v režimu jádra, je velmi pravděpodobné, že to zbortí celý systém, ať už v podobě "zatuhnutí" nebo modré obrazovky. Havárie v uživatelském režimu má naproti tomu za následek přinejhorším ztrátu aktuální aplikace. Proto ne zcela zásadní funkce, jako např. kontrola hlaviček PGP-disku, jsou prováděny aplikací, ne ovladačem. Takové chování vynutíme nejlépe tak, že ovaldač a aplikace sdílejí co nejméně funkčního kódu. Do kódu v uživatelském režimu lze pak svobodně přidávat cokoli, zatímco kód v jádře zůstává co nejútlejší.
Ovladač se stará také o dvě další funkce. Již jsem se zmínil, že PGPdisk se stará o udržování citlivých údajů o klíčích a frázích hesla zamčených ve vyrovnávacích pamětech. Obvykle Win32 aplikace nemůže říct systému o alokování zamčené paměti pro sebe. Ovladač však může zamčít v paměti libovolný rozsah stránek. Aplikace PGPdisk volá poměrně často ovladač proto, aby ho požádala o uzamknutí bezpečných vyrovnávacích pamětí a o jejich odemknutí před tím, než jsou uvolněny.
Ovladač kromě toho zachytává vstup z myši a klávesnice. To je nutné proto, aby mohly být všechny PGP-disky odpojeny po jisté době, po kterou nebyla ze strany uživatele zaznamenána žádná aktivita. Bohužel není pro tuto vlastnost žídná podpora pro Win32 aplikace, takže tento úkol musí být ponechán na ovladači. Zachytávání je velmi jednoduché, protože jde pouze o vynulování časových stopek pokaždé, když je zaznamenán úhoz na klávesnici nebo pohyb či stisknutí myši. Není pořizován žádný záznam o tom, co uživatel píše nebo dělá. Vzpomeňte si na výše uvedené komentáře o tom, jak je jednoduché monitorovat údery na klávesnici bez toho, že by o tom uživatel věděl. Toto je demonstrace, jak jednoduše lze vniknout do systému na velmi nízké úrovni.
Jak můžete vidět, PGPdisk je složitá aplikace, která poskytuje vysokou úroveň bezpečí v jednoduché, snadno použitelné a pohodlné podobě. Pokud máte zájem o bližší pohled na PGPdisk, vyzýváme vás k pročtení zdrojového kódu, který necháváme tisknout kvůli kryptografické kontrole veřejností. Zdrojový kód PGPdisku je součástí zdrojového kódu pro PGP 6.0 a pozdější verze. Podrobnější informace o tom, kde získat zdrojové kódy PGP, se dozvíte na poslední straně tohoto vydání časopisu The Zimmermann Telegram.