GnuPG je kompletní implementací OpenPGP standardu RFC4880. GnuPG (GPG) umožňuje šifrovat a podepisovat data a datovou komunikaci, obsahuje sofistikovanou správu kryptografických klíčů a systém veřejných adresářů tyto klíče shromažďující a distribuující. GPG také poskytuje podporu pro S/MIME a SSH. Na rozdíl od služby/sítě TOR není GnuPG primárně určeno pro poskytnutí anonymity, ale k zabezpečení soukromí.Tyto nástroje jsou nejčastěji využívány pro digitální podepisování zdrojových kódů a softwarových balíčků distribucí GNU/Linux. Každý, kdo s linuxem pracoval, se s GPG alespoň náznakem setkal.
Do podvědomí široké veřejnosti se však dostal zejména díky nejznámějšímu whistleblowerovi Edwardu Snowdenovi, který tento systém používá pro komunikaci s médii a uveřejňování informací.
V jednoduchosti je využíván systém symetrického šifrování, kde je použito soukromého (privátního) klíče pro podepisování a dešifrování přijatých dat, a veřejného klíče umožňujícího (soukromým klíčem) podepsaná data ověřit, případně pro příjemce data zašifrovat (pro dešifrování je nutný soukromý klíč). Těchto vlastností se často používalo a používá pro komunikaci pomocí emailu, kdy nebyly dostupné implementace SSL/TLS.
Nástroje GPG jsou dostupné prakticky ve všech moderních distribucích GNU/Linux. Pro Windows existuje implementace Gpg4win. Veškeré funkce a příkazy jsou vzájemně kompatibilní.
Jak je uvedeno výše, předpokladem pro fungování je existence soukromého a veřejného klíče (nebo také, klíč má soukromou a veřejnou část). Soukromý klíč nesmí být za žádných okolností sdělen další osobě. V takovém případě by mohlo dojít ke kompromitaci. Pro zmírnění tohoto nebezpečí je soukromý klíč chráněn heslem. Oproti tomu u veřejného klíče je výhodné jeho distribuci na veřejná místa. V takovém případě může prakticky každý ověřovat platnost zpráv, případně zprávy pro držitele soukromého klíče šifrovat. Veřejný klíč je možné ze soukromého jednoduchým způsobem získat. Opačně, tedy z veřejného získat soukromý, možné není. Klíče je možné generovat za pomocí rozličných algoritmů a bitových délek. Algoritmus a délka klíče určují náročnost na možné prolomení, ale také na výpočetní výkon a množství entropie při šifrování a podepisování zpráv.
Vygenerování klíčů
Generování GPG klíčů je možné pomocí příkazové řádky, případně grafickými nástroji (Kleopatra – součástí Gpg4win). Pokud nejsme s GPG dostatečně seznámeni, určitě použijeme některé z grafických rozhraní. Eliminujeme tím množství chyb.
Dle uvážení můžeme generovat např. klíč pouze pro podpis. Délka klíče zcela vyhovuje přednastavená 2048 bitů, algoritmus RSA.
Generování z příkazového řádku:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
[jmeno@linux ~]# gpg --full-gen-key gpg (GnuPG) 2.1.9; Copyright (C) 2015 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Prosím, vyberte druh klíče, který chcete: (1) RSA a RSA (implicitní) (2) DSA a Elgamal (3) DSA (pouze pro podpis) (4) RSA (pouze pro podpis) Váš výběr? 1 klíč RSA může mít délku v intervalu 1024 až 4096 bitů. Jakou délku klíče si přejete? (2048) 2048 Požadovaná délka klíče je 2048 bitů. Prosím určete, jak dlouho by klíč měl platit. 0 = doba platnosti klíče není omezena = doba platnosti klíče skončí za n dní w = doba platnosti klíče skončí za n týdnů m = doba platnosti klíče skončí za n měsíců y = doba platnosti klíče skončí za n let Klíč je platný pro? (0) Platnost klíče nikdy neskončí Je to správně (a/N)? a GnuPG potřebuje sestrojit uživatelské ID, aby bylo možné rozpoznat váš klíč. Jméno a příjmení: Jmeno Prijmeni E-mailová adresa: jmeno.prijmeni@domena.sub Komentář: Zvolil(a) jste tento identifikátor uživatele: „Jmeno Prijmeni <jmeno.prijmeni@domena.sub>“ Změnit (J)méno, (K)omentář, (E)-mail, (P)okračovat dál nebo (U)končit program? p Musíme vytvořit mnoho náhodných bajtů. Během vytváření můžete provádět nějakou jinou práci na počítači (psát na klávesnici, pohybovat myší, používat disky); díky tomu má generátor lepší šanci získat dostatek entropie. ┌─────────────────────────────────────────────────┐ │ Pro ochranu svého nového klíče, │ │ prosím, zadejte heslo │ │ │ │ Heslo: ________________________________________ │ │ │ │ <Zrušit> │ └─────────────────────────────────────────────────┘ Musíme vytvořit mnoho náhodných bajtů. Během vytváření můžete provádět nějakou jinou práci na počítači (psát na klávesnici, pohybovat myší, používat disky); díky tomu má generátor lepší šanci získat dostatek entropie. gpg: klíč A2E3422C označen jako absolutně důvěryhodný. gpg: adresář „/home/jmeno/.gnupg/openpgp-revocs.d“ vytvořen veřejný a tajný klíč byly vytvořeny a podepsány. gpg: kontroluji databázi důvěry gpg: požadováno 3 částečné důvěry a 1 úplné důvěry, model PGP gpg: hloubka: 0 platných: 1 podepsaných: 0 důvěra: 0-, 0q, 0n, 0m, 0f, 1u pub rsa4096/A2E3422C 2015-11-21 Otisk klíče = B7E3 87E6 FE4A BB03 3E0B DDF3 82BA DF3E 4DAE 97BE uid [ absolutní ] Jmeno Prijmeni <jmeno.prijmeni@domena.sub> sub rsa4096/00E4BA2A 2015-11-21 |
Generování za pomoci aplikace Kleopatra:
Důležitým výstupním parametrem je otisk klíče (fingerprint). Ten je pro každý soukromý klíč jedinečný a umožňuje jeho kontrolu. Někteří uživatelé jej uvádějí např. na vizitkách.
Takto vygenerované klíče je vhodné zálohovat.
Zálohování klíče
Zálohování, nebo také export, klíče je důležitým krokem. Exportovaný soukromý klíč můžeme importovat na další zařízení (smartphone, notebook) nebo uložit na bezpečném místě pro potřeby pozdější obnovy. V případě jeho ztráty je vhodné, pokud jsme veřejnou část umístili do některého z repositářů na internetu, zneplatnit (revokovat). Tím dáme najevo, že je klíč z nějakého důvodu zrušen. Každý, kdo veškeré klíče automaticky na internetu ověřuje, je o této zkutečnosti informován.
Export je možné opět provádět z příkazové řádky nebo v grafické aplikaci.
Exportování soukromého klíče:
1 |
[jmeno@linux ~]# gpg --export-secret-keys --armor --output private.asc |
Exportování veřejného klíče:
1 |
[jmeno@linux ~]# gpg --export --armor --output public.asc |
Exportování míry důvěryhodnosti:
1 |
[jmeno@linux ~]# gpg --export-ownertrust --output otrust.txt |
Míra důvěryhodnosti označuje, jak tomuto klíči důvěřujeme. Naše vlastní klíče mají nastavenu důvěru „ultimate“. Tuto důvěru můžeme pro každý klíč měnit.
Veřejné klíče můžeme také exportovat na některý z veřejných serverů (parametr --send-keys key IDs
).
Import klíče
Import klíče je jednoduchou záležitostí. Po zadání příkazu nástroj čeká na vložení klíče. Zadávání ukončíme vložením ^D (Ctrl+D).
1 |
[jmeno@linux ~]# gpg --import |
Importovat můžeme jak soukromé, tak veřejné klíče. Pro import soukromého klíče ale použijeme heslo, které jsme zadali při jeho vytváření.
Import důvěryhodnosti:
1 |
[jmeno@linux ~]# gpg --import-ownertrust |
Grafická aplikace umožňuje stejné vlastnosti.
Pokud importujeme veřejný klíč, můžeme to provést z některého z veřejných serverů. To samozřejmě platí pouze v případě, že je na takovém serveru umístěn.
Jeho vyhledání provedeme na základě jeho ID nebo otisku. Ve většině implementací GPG je důležité před ID nebo otisk zadat znaky „0x“:
1 2 3 4 5 |
[nekdo@linux ~]# gpg --search-keys 0xA2E3422C gpg: data source: http://poseidon.muc.drweb-av.de:11371 (1) Jmeno Prijmeni <jmeno.prijmeni@domena.sub> 2048 bit RSA key A2E3422C, vytvořen: 2015-11-21 Keys 1-1 of 1 for "0xA2E3422C". Vložte číslo (čísla), „N“ pro další, nebo „Q“ pro konec > |
Podpis a ověření datových zpráv
Podpis zpráv je jeden z nejčastějších úkonů. Jeho provedení je následující:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[nekdo@linux ~]# gpg --sign --armor Nějaký text ^D -----BEGIN PGP MESSAGE----- Version: GnuPG v2 owEBRAK7/ZANAwAIAWMJGhIYVLh9AcsUYgBWUJlSTsSbamFrw70gdGV4dAqJAhwE AAEIAAYFAlZQmVkACgkQYwkaEhhUuH1aHQ//cKqiAQxlcGsojUNhhUbiguzK0j8g ZVkF2tP6PqonJpLIx1x1RnqN7TQ47EqfhMNMfHOGg6PvqCZT68OiWFWIZR6M3d84 fIMokQ8ipMvEhhSVrGjRnFu13ZyxoTIQFis+b+TbCli/rvaN411eRxkyQZP7LX4N juOGMt4+F3MsJBs9J5DvGEeByQMambB/AcaDsnkyyFDn8cCnCaW3iTi0D8E2sWRI i10vaw117O7Ao58Q7TaxRSM4r73onedAceGtokAX63KwJN1zpayFMi2HcSvZ1aFa OlvuDm/eR3ShxXI5aM0osHUioa/xpQEFC6WPB/KQKC1b8GKq7Xe6jH9ctOuQ/niY BRivBzRTBP5nOU1ePUbY4uJdG4UsrkGmCndNDV52Dnlbt8cWTryk2VYmUUG7REti vZNf8P3XCk/I77unJKT4S+6zZLCJkOR0nH4VTWIzCVLt0nShCHqbkeb66ScD0T05 oc/bTDGuVA14mfdJk+wnYMyOndjp3sLkbem4c6bci+WVPa6Kyny3bcPqnl73Qfh8 fSBocd2XDcxF1KitpX9OS2dZ76ZFZ9rgl9dhZFgTM7DH2dPDYiVTlqYGtpn0svbP 8PLfo7PwMioqzviGztNLPToNMjK2g3XBRHyZk/nEz6DDtbum4YrxLkpWoSoPFkXH lOzY2HpsNfir0+Q= =mfl6 -----END PGP MESSAGE----- |
Pro ověření slouží parametr --verify
. Důležitým předpokladem je, že veřejný klíč podepsané osoby musíme mít nejdříve naimportován.
Zašifrování a dešifrování datové zprávy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
[nekdo@linux ~]# gpg --encrypt --armor Nespecifikoval jste identifikátor uživatele (user ID). Můžete použít "-r" Aktuální příjemci: Napište identifikátor uživatele (user ID). Ukončete prázdným řádkem: 1854B87D gpg: C7C07B28: Nic nenaznačuje tomu, že tento klíč patří uvedenému uživateli sub rsa4096/C7C07B28 2015-11-21 Zdenek Brichacek Otisk primárního klíče: EFCB 3447 B755 1FD5 E757 0984 6309 1A12 1854 B87D Otisk podklíče: 51A8 8BC0 FFBA A76E 49C5 6D07 B2D7 CC3A C7C0 7B28 NENÍ jisté, zda tento klíč patří osobě, jejíž jméno je uvedeno v uživatelském ID. Pokud *skutečně* víte, co děláte, můžete na následující otázku odpovědět ano Použít přesto tento klíč? (a/N) a Aktuální příjemci: rsa4096/C7C07B28 2015-11-21 "Zdenek Brichacek " Napište identifikátor uživatele (user ID). Ukončete prázdným řádkem: Nějaký text ^D -----BEGIN PGP MESSAGE----- Version: GnuPG v2 hQIMA7LXzDrHwHsoAQ//bYA4hdKZeTf7eNhvOwKicHSXEJUb9UrV1zCu9oH7UKWU IolFUommAEEn+mhBK873CWKaOcbiH2K/9KuZbxtDaMizuyhaE9MQczRystzvGUAs PvUD4dx50PTZUNFf97/fuLib/YJ/nN0gFooEthHOHY23bBtozLb0Yde8LGAvxNRe ayhGS7B9lnpLLufv7fBp2eF6n7XZUeTgSOWGAD4Z2Udkj/0jshEGFVfRDi7fm9/8 4vcE/9SBmfBr7DIxTqj4A7Sz9JwaIDJJ+rt45SSUoQebEI14ueU/AhHkd5DtpFa+ Ofi8/PUo05iqoO9oAIQthwWG4RTV+So1xk74vHRJb3ZouUEobeWZSCqgJWPDI7J5 kp4+5G1sBKhOCKuWKWDXRFSs9zRxUK+LHv2k1JYLbAyVst3Z5iNMpd7ZazfpsRY1 tJxYCcsyTdF0LGKVTeKXzW6nileg+BhQI3KfB82dOLMLSxXRcL1rRx5+BoqySzYI a6Ukzg6nqMf1CSflfruIGZQQxdstwwkn5x6a3qTGds4QVdwxDeusBo8dDM1JkwR0 bIWS7AnFLINT2vMXkfYLuD9P9ggQPTri0ol10KoJH4jDGv0AVz+gd5wFFgZP9FfM 0MdvgYu7GOqZ9sPtuImQelg8/aJbFSApbd4vK0Yv1jb+0ZAtBauEUKKiOakzqSLS SgECPKgh4GynfD8V9CEMVSWBhpLYe3yfUR5HfQCm4lj+YG1EicprXh9wQ51TZzOE IFAMz+GubSAxkZzjuY4Q4DEOKAGoB8s3sc/a =tl3x -----END PGP MESSAGE----- |
Text mezi řádky —–BEGIN PGP MESSAGE—– a —–END PGP MESSAGE—– obsahuje šifrovanou zprávu.
Pro šifrování musíme mít veřejný klíč osoby, pro kerou je zpráva určena.
Dešifrování provedeme s použitím parametru --verify
. Je však důležité, abychom vlastnili příslušný soukromý klíč.
Spolupráce s dalšími nástroji
GPG umožňuje spolupráci s dalšími nástroji, kde se stará o automatické podepisování/ověřování a šifrování/dešifrování všech zpráv. Pokud například používáme komunikační nástroj Pidgin, máme k dispozici modul Pidgin-GPG. Pro Microsoft Outlook můžeme použít např. OutlookPrivacyPlugin. Některé emailové a komunikační programy mají podporu GPG přímo integrovánu.
GPG používá také řada nástrojů pro správu verzí, jako například GIT. Bez něho bychom si v dnešní době asi těžko představili vývoj jádra Linux.
Závěr
GPG se pro komunikaci používá zejména v různých komunitách. Byť je OpenPGP standardem, jeho používání v běžné praxi naráží na mnoho úskalí, kde k tomu stěžejnímu patří nutnost existence šifrovacích klíčů a alespoň základní znalost jejich ochrany. Pokud ale chceme, aby byla naše komunikace opravdu soukromá, je GPG jedna z nejlepších možností, jak toho dosáhnout.
Co naplat, i já využívám možností skýtající GPG a i přes to, že dnes nejrozšířenějším standardem je použití SSL/TLS.
GPG Key-ID: 1854B87D
GPG Fingerprint: EFCB3447B7551FD5E757098463091A121854B87D
Související
Přístup k místním síťovým službám přes anonymní síť TOR
Množství entropie v GNU/Linux