Šifrování a podepisování datové komunikace s pomocí GnuPG

logo-gnupg-light-purple-bg
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:

[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:

[jmeno@linux ~]# gpg --export-secret-keys --armor --output private.asc

Exportování veřejného klíče:

[jmeno@linux ~]# gpg --export --armor --output public.asc

Exportování míry důvěryhodnosti:

[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).

[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:

[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“:

[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í:

[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

[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—–—–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

Leave a Reply