Úvod do OpenPGP --------------- **OpenPGP** označuje kryptografický protokol v počátcích určený hlavně pro zabezpečení e-mailových zpráv [1]_. Příjemce může ověřit, zda zpráva nebyla změněna během cesty a zda podpisujícím je konkrétní držitel privátního klíče. Zprávy lze zašifrovat pro určeného příjemce (držitele konkrétního privátního klíče). OpenPGP podporuje též šifrování a podepisování datových souborů, tj. je možné šifrovat a ověřovat integritu jakýchkoliv dat. Příkladem může být podepisování balíčků v unixových distribucích či podepisování zápisů (commits) v gitu. Existují i různá pokročilá využití – např. transparentní šifrování konfiguračních souborů s hesly před uložením do veřejného úložiště (git-crypt [2]_). OpenPGP používá asymetrickou kryptografii (kryptografie s veřejným klíčem) s dvojicemi klíčů – veřejný klíč, který může znát kdokoliv, a soukromý klíč, který by měl znát pouze vlastník. Z veřejného klíče nelze reálně odvodit soukromý klíč. Začátky PGP ~~~~~~~~~~~ První verzi šifrovacího programu **Pretty Good Privacy** (**PGP**) napsal Phil Zimmermann roku 1991 pro bezpečnou výměnu zpráv a souborů mezi protijadernými aktivisty přes veřejné sítě, v té době nejčastěji přes BBS (Bulletin board system). O program, který byl pro nekomerční využití byl zdarma včetně zdrojových kódů, byl mezi uživateli zájem. Brzy se rozšířil i na Internet a stal se de-facto standardem v oblasti bezplatných programů pro šifrování a podepisování souborů a elektronické pošty. V roce 1993 byl autor obžalován za nepovolený vývoz zbraní z USA, neboť v té době pro vývoz kryptografických systémů s klíčem delším než 40 bitů byla potřeba licence na export vojenského materiálu. Program PGP používal od začátku klíče s minimální délkou 128 bitů. Autor v roce 1996 spor vyhrál – zdrojový kód nechal vydat jako knihu a poté se odkazoval na první dodatek ústavy USA (svoboda vyznání, tisku, projevu, shromažďování). Tento spor je součástí tzv. **první války o kryptografii**, která skončila v roce 2000 uvolněním pravidel pro vývoz kryptografického software z USA. Po ukončení soudního sporu autor s dalšími založil firmu PGP Inc., která začala připravovat komerční verzi. Díky akvizicím a obchodním transakcím se komerční práva k programu a značce PGP přesouvala mezi různými firmami. PGP, OpenPGP, GnuPG a GPG ~~~~~~~~~~~~~~~~~~~~~~~~~ V roce 1996 vyšlo RFC 1991, které popisuje formát zpráv a souborů pro PGP. V roce 1997 firma PGP Inc. předložila IETF návrh standardu na protokol **OpenPGP**, který v roce 1998 vyšel jako RFC 2440. Protokol prošel aktivním vývoje, v současné době je platné RFC 4880 z roku 2007. Existují dvě hlavní implementace protokolu OpenPGP – první je komerční s názvem PGP. Druhá implementace s názvem **GNU Privacy Guard** (zkratka **GnuPG**, neoficiálně i **GPG**) je pod svobodnou licencí GNU a její vývoj zaštituje organizace GNU Project. Základní řádkový program z této implementace se jmenuje **gpg**. GnuPG je součástí většiny unixových distribucí, existují porty pro MacOS (**GPGtools**\ [3]_) či do Windows (**Gpg4win**\ [4]_). Součástí Gpg4win je též rozšíření do poštovního klienta Outlook od firmy Microsoft. Pomocí rozšíření **Enigmail**\ [5]_ se doplní podpora OpenPGP do poštovního klienta Thunderbird. Na unixových systémech se lze v současnosti setkat se třemi verzemi GnuPG: - Verze 1.4 (Classic) s monolitickou aplikací gpg. - Verze 2.0 (Stable) má oddělenou kryptografickou knihovnu, což umožňuje snazší používání OpenPGP z jiných aplikací. Součástí je textová a grafická aplikace pro dotazování na hesla (tj. lze snadněji používat v grafickém uživatelském prostředí). Další novinkou je podporu standardu S/MIME. - Verze 2.1 (Modern) přidává podporu kryptografie založené na eliptických křivkách. Z hlediska ovládání jsou mezi verzemi minimální rozdíly. Verze 1.4 může být nainstalována společně s verzí 2.0 nebo 2.1. Pro starší verzi se použije příkaz **gpg1**, pro novější **gpg2**. Na kterou verzi odkazuje příkaz **gpg** lze zjistit pomocí přepínače ``--version``: .. code-block:: bash :emphasize-lines: 1 gpg --version gpg (GnuPG) 2.1.17 libgcrypt 1.7.5 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: /home/pavlicek/.gnupg Supported algorithms: Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 Compression: Uncompressed, ZIP, ZLIB, BZIP2 Ve skriptech bude popsána verze 2.1, která bude defaultní v Debianu verze 9. Podrobné informace o programu gpg lze vyčíst z manuálových stránek ``man gpg``. Základní syntaxe je následující: **gpg** [*přepínače*] [*parametry*] Přepínače začínají dvěma pomlčkami, několik jich má i jednopísmennou variantu s jednou pomlčkou. Sémanticky lze z přepínačů vyčlenit příkazy, které označují základní akci, která se má po spuštění gpg provést. Příkladem je ``--help``, ``--version``, ``--sign``, ``--encrypt``, ``--verify`` či ``–edit-key``. Pokud se nezadá žádný přepínač, ale pouze jméno souboru, tak se akce odvodí od typu souboru – zašifrovaný soubor se dešifruje, u podepsaného souboru se zkontroluje podpis. .. [1] V RFC 4880 je napsáno, že pojem OpenPGP označuje kryptografický software založený na PGP a na standardu. Dle převládajícího názoru pojem OpenPGP označuje kryptografický standard a neměl by se používat pro označení programů, viz např. https://help.ubuntu.com/community/GnuPrivacyGuardHowto. .. [2] https://www.agwa.name/projects/git-crypt/ .. [3] https://gpgtools.org/ .. [4] https://www.gpg4win.org/ .. [5] https://www.enigmail.net/index.php/en/ .. |image0| image:: ./media/pgp_image1.png :width: 1.96806in :height: 2.63125in .. |image1| image:: ./media/pgp_image3.png :width: 6.3in :height: 4.38542in .. |image2| image:: ./media/pgp_image5.png :width: 6.3in :height: 4.04167in .. |image3| image:: ./media/pgp_image7.png :width: 6.3in :height: 4.95139in .. |image4| image:: ./media/pgp_image9.png :width: 5.36458in :height: 2.38542in .. |image5| image:: ./media/pgp_image11.png :width: 5.13542in :height: 2.9125in .. |image6| image:: ./media/pgp_image13.png .. |image7| image:: ./media/pgp_image14.png :width: 6.3in :height: 3.45139in .. |image8| image:: ./media/pgp_image16.png :width: 1.67708in :height: 1.63125in .. |image9| image:: ./media/pgp_image18.png :width: 3.72917in :height: 3.09375in .. |image10| image:: ./media/pgp_image20.png :width: 5.25in :height: 4.25in .. |image11| image:: ./media/pgp_image22.emf :width: 5.66944in :height: 3.14167in