Pretty Good Privacy -=-=-=-=-=-=-=-=-=-=- Only great masters of style can succeed in being obtuse. -- Oscar Wilde Most UNIX programmers are great masters of style. -- The Unnamed Usenetter Petr Kolář, 10.března 1998 Přestože Internet byl vytvořen na zakázku amerického ministerstva obrany, patřilo zabezpečení přepravovaných souborů, zpráv a hesel proti zneužití cizími osobami k dosti opomíjeným otázkám. Pomocí klasických protokolů, jako jsou telnet, FTP, SMTP, POP, HTTP a další, jsou informace včetně hesel přepravovány většinou nezašifrovaně a s velmi omezenými možnostmi, jak ověřit jejich pravost. Přitom odposlouchávání provozu v sítích je principiálně možné a o tom, nakolik je využíváno, kolují děsivé fámy. O mnoho lepší není ani zabezpečení souborů uložených v počítačích --- i když víceuživatelské systémy poskytují ochranu souborů, ve většině systémů včetně téměř všech odrůd UNIXu má správce počítače neomezený přístup ke všemu. Se stále širším používáním sítí a s komercializací Internetu začalo být zabezpečení přenášených i uložených dat nezbytností. Stále více počítačů je připojeno k Internetu, který je používán k osobní i firemní korespondenci jako doplněk či náhrada telefonu a faxu. Po síti se přenášejí i tak citlivá data jako příkazy k platbám, čísla účtů a kreditních karet. V roce 1991 byl v USA navržen zákon, podle kterého mohou být vyráběna pouze taková šifrovací zařízení, která umožní vládě USA (při splnění podmínek daných dalšími zákony) dešifrování zpráv. Zároveň byla zahájena výroba čipů Clipper, ve kterých jsou zabudovány "tajné dveře", které toto dešifrování umožňují. Každá zpráva zašifrovaná (jinak údajně velmi kvalitní šifrou) čipem Clipper totiž obsahuje použitý klíč. Tento klíč je (samozřejmě) zašifrován klíčem daného čipu, který je uložen rozdělený na dvě části u dvou nezávislých organizací. Vláda USA může na základě soudního rozhodnutí získat komponenty klíče konkrétního čipu a s jejich pomocí dešifrovat všechny zprávy zašifrované tímto čipem. Návrh zákona vyvolal obrovskou kampaň proti zasahování státu do soukromí jednotlivce vedenou pod heslem "jestliže se soukromí postaví mimo zákon, pak pouze ti, co stojí mimo zákon, budou mít soukromí". Jedním z produktů této kampaně bylo vytvoření programu PGP (Pretty Good Privacy, v překladu něco jako "dost slušné soukromí"), který zpřístupňuje silné šifrování a autentizaci informací každému. Klasické šifrování a šifrování s veřejným klíčem "Bezpečnost" nejstarších "šifer" byla založena na tom, že algoritmus šifrování i dešifrování byl udržován v tajnosti. "Šifrování" často spočívalo pouze ve zvláštním způsobu zápisu jednotlivých znaků či slov zprávy, proto se nejednalo o šifrování v pravém slova smyslu, ale o pouhé kódování. O skutečném šifrování lze mluvit až u postupů, u nichž zašifrovaný výstup závisí nejen na obsahu vstupního souboru (nazývaného otevřený text), ale také na parametru nazývaném klíč. Pokud se pro šifrování i dešifrování používá stejný klíč, musí být udržován v tajnosti a proto mluvíme o šifrování s tajným klíčem nebo o symetrickém kryptosystému. Nevýhodou tohoto systému je fakt, že tajný klíč musí mít odesílatel i příjemce zprávy. Díky tomu, že šifrovaný výstup závisí na tajném klíči, mohou být algoritmy šifrování a dešifrování zveřejněny. Jejich trvalé utajování je prakticky nemožné a pokud jsou skutečně kvalitní, jejich znalost při dešifrování zpráv (pokud se nepodařilo získat klíč nebo pokud není proveditelné vyzkoušet všechny možné klíče) příliš nepomůže. Pokud některé firmy přesvědčují zákazníky o tom, že jejich šifra je bezpečná, protože je tajná (někdy je tento přístup nazýván "security by obscurity"), bývá to často způsobeno tím, že šifra je ve skutečnosti velmi slabá a proto musí být tajná. Kvalitní šifra je taková, která je delší dobu známá, používaná, a přesto odolává pokusům o luštění a zlomení. Problémy s nutností udržovat klíč v tajnosti a zároveň zajistit, aby byl k dispozici odesílateli i příjemci zpráv, odstraňují asymetrické kryptosystémy, které používají pro šifrování a dešifrování dvojici různých klíčů. Existence těchto metod je založena na algoritmech, které na základě jednoho nebo více náhodných vstupních parametrů, jež se po výpočtu zapomenou, spočítají dvojici klíčů. Ovšem i při znalosti algoritmu a jednoho z klíčů je zjištění druhého klíče daleko mimo možnosti současné výpočetní techniky. Každý z uživatelů asymetrického kryptosystému tak má dvojici klíčů, z nichž jeden (soukromý klíč) udržuje v tajnosti a druhý zveřejní. Proto se tento způsob šifrování také nazývá šifrování s veřejným klíčem. Díky tomu, že je možné šifrovat libovolným klíčem z dvojice a dešifrovat druhým, existují dva způsoby použití: Zprávu zašifrovat použitím cizího veřejného klíče. Tím se zajistí utajení zprávy, protože ji může dešifrovat pouze vlastník příslušného soukromého klíče. Zprávu šifrovat použitím vlastního soukromého klíče. Tím se utajení nezajistí, protože pro dešifrování zprávy se používá klíč, který je veřejně přístupný. Dosáhne se však autentizace --- zpráva po dešifrování určitým veřejným klíčem dává smysl právě tehdy, když ji zašifroval vlastník odpovídajícího soukromého klíče. Protože v tomto případě není cílem utajení zprávy, je možné místo zašifrování připojit ke zprávě pouze (soukromým klíčem) zašifrovaný kontrolní součet textu zprávy, tak zvaný digitální podpis. Kdokoli může spočítat kontrolní součet zprávy a porovnat jej s dešifrovaným podpisem. Jestliže kontrolní součet závisí na obsahu zprávy tak nepředvídatelným způsobem, že není možné zprávu upravit aniž by se součet změnil, pak souhlas kontrolních součtů zaručuje, že zprávu skutečně podepisoval člověk, který vlastní příslušný soukromý klíč, a že od té doby nebyla zpráva změněna. S použitím asymetrického kryptosystému lze přes nezabezpečený komunikační kanál provádět i další zdánlivě nemožné věci (viz CHIP 1995/08). Program PGP PGP je program pro šifrování a autentizaci textových i binárních souborů. Byl vytvořen Philipem Zimmermannem v roce 1991. Autorovi vynesl PGP soudní řízení a díky zákazu vývozu bezpečných šifrovacích technologií z USA je nadále vyvíjen ve dvou kompatibilních řadách, jedné pro USA, druhé pro zbytek světa. Stal se neoficiálním standardem pro šifrování a autentizaci e-poštovních a newsových zpráv. Je k dispozici ftp://ftp.ifi.uio.no/pub/pgp/ ve zdrojovém i binárním tvaru pro všechny běžné platformy --- MS DOS, OS/2, UNIXy, VMS, Macintosh, Amiga, Atari ST. Nejnovější verzí na počátku roku 1998 je PGP 5.5, ovšem díky nevyjasněným otázkám kompatibility, licencí, apod., je zatím doporučována verze 2.6.3i. PGP šifruje vlastní zprávu nebo soubor rychlou symetrickou šifrou IDEA s náhodně vygenerovaným tajným klíčem. Použitý klíč je zašifrován asymetrickou šifrou RSA a uložen do výsledného souboru. Tím se získají výhody šifrování s tajným klíčem při rychlosti šifrování tajným klíčem. Pro vytváření digitálních podpisů je použit algoritmus MD-5. Úvodní nastavení Pokud nevyhovuje implicitní umístění souborů s klíči, konfiguračního souboru config.txt a další souborů v adresáři /.pgp, je třeba před použitím PGP nastavit proměnnou prostředí PGPPATH na cestu k adresáři, kde budou tyto soubory. Proměnnou PGPPATH bude třeba obvykle nastavit v jiných systémech než je UNIX, stejně jako proměnnou TZ, která musí obsahovat správnou časovou zónu (v České republice stačí hodnota -1 pro zimní a -2 pro letní čas). Vytvoření vlastní dvojice klíčů Pro práci s PGP je nutné nejdříve vygenerovat svoji vlastní dvojici klíčů: pgp -kg Program PGP se zeptá na počet bitů klíče (v současnosti je doporučována délka 1024 bitů), vaši identifikaci -- jméno, příjmení a něco, co zajistí jednoznačnost (nejlépe e-mailová adresa -- bývá zvykem ji psát mezi <>; pokud ji nemáte, pak například telefonní číslo), pak se zeptá na heslo (pass phrase), které zabraňuje, aby cizí osoba, která se dostane k vašemu počítači, mohla používat váš soukromý klíč, a na závěr vás požádá o mačkání kláves a vygeneruje dvojici klíčů podle časových intervalů, které uplynou mezi stisky kláves a podle stisknutých kláves. Přístupové heslo si musíte pamatovat. Neexistuje způsob, jak zapomenuté přístupové heslo zjistit! Soukromý klíč udržujte v tajnosti, veřejný v textové formě (získané příkazem pgp -kxa) zveřejněte (uložte jej do souboru .plan, aby jej bylo možné zjistit službou finger, umístěte jej na svou WWW stránku, umístěte jej na server PGP klíčů http://wwwkeys.pgp.net nebo http://www.pgp.cz/pgpnet/, rozešlete jej svým partnerům e-poštou, apod.). Soukromé klíče jsou uloženy v souboru .pgp/secring.pgp, veřejné v /.pgp/pubring.pgp. Šifrování souboru Pro zašifrování souboru musí být použit veřejný klíč osoby, která bude soubor dešifrovat: pgp -e soubor ID_adresáta pgp -ea soubor ID_adresáta Jako ID_adresáta stačí uvést libovolný podřetězec identifikace adresáta. První příkaz vytvoří binární soubor a uloží jej do souboru soubor.pgp, druhý vytvoří textový soubor (který je možné poslat například e-poštou) a uloží jej do souboru soubor.asc. Výstup v textovém tvaru můžete také vyžádat uvedením řádku armor=on v souboru config.txt. Součástí šifrování je i komprimace -- binární soubor, který vznikne zašifrovaním bývá kratší než původní soubor. Pokud se šifruje textový soubor, který má být přenesen na systém, který používá odlišné znaky pro konec řádku, je třeba do voleb doplnit písmeno t. Parametrem -m požádáme, aby soubor nebyl při pozdějším dešifrování ukládán na disk, ale pouze zobrazován; účelem volby je zabránit tomu, aby nezkušený příjemce zanechal rozšifrovaný soubor někde na disku, nikoli aby zkušený uživatel nemohl zprávu uložit do souboru. Soubor je také možné příkazem pgp -c soubor pouze zašifrovat (pro uložení na disku) symetrickou šifrou IDEA. Podepsání souboru Příkazy pgp -s soubor [ -u váš_ID ] pgp -st soubor [ -u váš_ID ] pgp -sa soubor [ -u váš_ID ] pgp -sta soubor [ -u váš_ID ] podepíšou soubor vaším soukromým klíčem. Je-li uvedena volba -a, bude výsledný soubor textový se jménem soubor.asc, jinak bude binární se jménem soubor.pgp. Parametr -u váš_ID se použije, máte-li více soukromých klíčů. Volba -t oznamuje, že vstupní soubor je textový a že znaky konce řádků mají být konvertovány podle zvyklostí příslušného systému. Pouze poslední z příkazů vyprodukuje čitelný soubor s podpisem. Příkazy pro zašifrování a podepsání je možné spojit: pgp -es[t][a] soubor ID_adresáta [-u váš_ID] Ve všech předchozích případech je možné pomocí parametru -o soubor stanovit jiné jméno výstupního souboru (není-li jméno s příponou, doplní se .pgp nebo .asc). Dešifrování a ověření podpisu K dešifrování, případně autentizaci souboru nebo došlé zprávy slouží jediný příkaz: \begin{verbatim} pgp zpráva -o výstup \end{verbatim} Program PGP sám rozpozná, jaké operace má provést. Podepisování binárních souborů PGP umožňuje podepisovat binární soubory tak, že soubor zůstane nezměněn, a podpis se uloží do zvláštního souboru: pgp -bs soubor pgp -bsa soubor V prvním případě se uloží binární podpis do souboru soubor.sig, ve druhém textový do souboru soubor.asc. Autentizace souboru se provede takto: pgp soubor.asc soubor pgp soubor.pgp soubor Práce s klíči Jako nutné zlo s sebou PGP přináší potřebu práce s klíči. Příkazy pgp -k pgp -kv [ ID ] vypíší po řadě nápovědu pro práci s klíči a seznam klíčů (jejichž identifikace obsahuje řetězec ID) obsažených ve vašem souboru veřejných klíčů. Pro výměnu klíčů jsou potřeba příkazy, které umožní vypsání klíče do souboru a načtení klíče ze souboru. Vypsání zajistí jeden z příkazů pgp -kx ID soubor pgp -kxa ID soubor První příkaz zkopíruje klíč jehož identifikátor obsahuje řetězec ID ze souboru veřejných klíčů a uloží jej do binárního souboru soubor.pgp, druhý zkopíruje klíč do textového souboru soubor.asc. Klíč samozřejmě v souboru veřejných klíčů zůstává. Přidání klíčů do souboru veřejných klíčů zajistí příkaz pgp -ka soubor Zadaný soubor obsahující jeden nebo více veřejných klíčů, může být textový i binární. V nesymetrických kryptosystémech je sice možné předávat veřejné klíče po nezabezpečeném komunikačním kanálu, je však nezbytně nutné zabránit zcizení vašeho soukromého klíče, ale také zaručit pravost klíčů! Pokud byste chtěli komunikovat s osobou B a osoba C by vám poskytla svůj klíč, který by vydávala za klíč osoby B, bude moci C luštit vaše zprávy pro B. Protože ne vždy je možné získat veřejný klíč přímo od jeho majitele a o klíči získaném ze sítě nemůžeme mít nikdy stoprocentní jistotu, že není podvržený, PGP umožňuje vypsání "otisku klíče" -- šestnáctibytové hodnoty zapsané v šestnáctkové soustavě, který je možné přidat do podpisu v e-poště, vytisknout na vizitku nebo ověřit telefonicky: pgp -kvc ID Kromě toho existuje mechanismus podepisování klíčů, který umožňuje, aby kdokoli, kdo bezpečně (tj. pokud možno při osobním kontaktu) získal něčí klíč, podepsal tento klíč umístěný ve svém souboru veřejných klíčů příkazem pgp -ks ID Pokud získáte klíče podepsané někým, komu důvěřujete, že podepisuje pouze ověřené klíče, můžete tyto klíče považovat za pravé. Vypuštění klíče se zadaným ID ze souboru veřejných a případně i soukromých klíčů provede příkaz: pgp -kr ID Neprovádějte tento příkaz na vlastní klíč (uložený v souboru soukromých klíčů), pokud jej chcete ještě někdy použít! Jestliže dojde k prozrazení vašeho soukromého klíče, je nutné příkazem pgp -kd váš_ID vygenerovat potvrzení, že klíč se zadaným ID je neplatný. Potvrzení je třeba rozeslat lidem, kteří mají váš veřejný klíč, aby si jej přidali do svého souboru veřejných klíčů pomocí pgp -ka, a tím váš klíč zneplatnili. Základní informace o PGP naleznete na adrese http://www.pgp.cz. výheň