V další sérii článků tohoto seriálu se prakticky podíváme na to, jak chránit data programem GnuPG.
2.9.2004 08:00 | Josef "jose" Kadlec | přečteno 33300×
GnuPG (The GNU Privacy Guard - zkráceně označováno také jako GPG) vzniklo jako kompletní, volně šiřitelná náhrada PGP (Pretty Good Privacy). Oba tyto programy slouží k šifrování dat, elektronickému podepisování, ověřování elektronických podpisů, správě klíčů, apod. GPG je tedy na rozdíl od PGP bezplatný software, který lze používat za podmínek licence GNU GPL. PGP používá patenty IDEA a RSA, které tedy v současné době již neomezují (jejich platnost vypršela v září roku 2000), takže je volně k dispozici i mimo USA a Kanadu. Protože omezení vývoje a používání šifrovacího softwaru, který je například v USA řazen na stejnou úroveň jako zbraně, jsou značně nejasná a v dnešní době se týká politik jednotlivých států, zmínil bych dokument Crypto Law Survey, který veškerá omezení, týkající se šifrování, shrnuje. Ovšem PGP jako freeware obsahuje pouze omezené množství funkcí a to pouze k nekomerčnímu použití.
Tento článek nemá být teoretický, takže nyní již popíši proces vytvoření vlastních klíčů. Začneme příkazem (pozn: následující příkazy nemusíte spouštět jako superuživatel root):
bash-2.05b# gpg --gen-key gpg (GnuPG) 1.2.4; Copyright (C) 2003 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. gpg: /root/.gnupg: adresář vytvořen gpg: vytvořen nový konfigurační soubor `/root/.gnupg/gpg.conf' gpg: VAROVÁNÍ: nastavení z `/root/.gnupg/gpg.conf' \ \nejsou při tomto spuštění zatím aktivní gpg: soubor klíčů (keyring) `/root/.gnupg/secring.gpg' vytvořen gpg: soubor klíčů (keyring) `/root/.gnupg/pubring.gpg' vytvořen Prosím, vyberte druh klíře, který chcete: (1) DSA a ElGamal (implicitní) (2) DSA (pouze pro podpis) (4) RSA (pouze pro podpis) Váš výběr? 1 Pár klíčů DSA bude dlouhý 1024 bitů. Chystám se vytvořit nový pár klíčů ELG-E. minimální velikost klíče je 768 bitů implicitní velikost klíče je 1024 bitů nejvyšší navrhovaná velikost klíče je 2048 bitů Jakou velikost klíče si přejete? (1024) Požadovaná délka klíče je 1024 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) 365 platnost Key skončí Pá 26. srpen 2005, 20:26:14 CEST Je to správně (a/n)? a Aby bylo možné rozpoznat Váš klíč, musíte znát identifikátor uživatele; program jej složí z Vašeho jména a příjmení, komentáře a e-mailu v tomto tvaru: "Magda Prochazkova (student) <magda@domena.cz>" Jméno a příjmení: Josef Kadlec E-mailová adresa: jose@czslug.cz Komentář: geek Zvolil(a) jste tento identifikátor uživatele: "Josef Kadlec (geek) <jose@czslug.cz>" Změnit (J)méno, (K)omentář, (E)-mail, (P)okračovat dál nebo (U)končit program? P Pro ochranu Vašeho tajného klíče musíte zadat heslo. 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: /root/.gnupg/trustdb.gpg: databáze důvěry vytvořena veřejný a tajný klíč byly vytvořeny a podepsány. klíč označen jako absolutní důvěryhodný. pub 1024D/58A764A7 2004-08-26 Josef Kadlec (geek) <jose@czslug.cz> Fingerprint klí??e = AEC9 415B A47B A164 AD69 1539 9674 45AB 58A7 64A7 sub 2048g/EDF65E6B 2004-08-26 [platnost skončí: 2005-08-26]
Pokud je toto vaše první práce s GPG na daném počítači, vytvoří se adresář .gnupg
, kde se budou nacházet potřebné konfigurační soubory.
Po zadání příkazu potvrďte implicitní volbu "DSA a ElGamal (implicitní)", kterou vytvoříte pár klíčů. Dále vyberte velikost klíče. Optimální
bude zvolit 1024 nebo 2048 bitů. Více už by bylo zbytečné a nepohodlné - velikost 2048 je ještě v současné době prakticky neprolomitelná a
větší velikost klíče by šifrování a rozšifrování značně prodlužovala. Dále vybere dobu platnosti klíče - nedoporučuje se nechat dobu platnosti
klíče neomezenou. Dále je nutné vyplnit identifikátory klíče ve formě jména, e-mailové adresy a komentáře. Při následné generaci klíče potřebuje
program náhodné hodnoty - ke zvýšení entropie můžeme přispět například pohybem myši. Nyní máme k dispozici pár klíčů.
Pokud chceme předat veřejný klíč druhé straně, která s ním bude šifrovat data pro nás, je nutné ho nejdříve vyexportovat - nejlépe do souboru:
gpg --export --armor e-mailova_adresa_klice > verejny_klic.pub
Takový klíč je vlastně obyčejný textový soubor.
bash-2.05b# cat jose.pub -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.4 (GNU/Linux) mQGiBEEuK5gRBACcvwFL/ltULhkYII7OSWIjIdvGp5rSJ0QWHyZD1zV7EraAlz7g FfADP1TLjmYMIoMtpbwJ8aoYJa+x6RVpf9O7Cd7wLWl4AR0vKoSiq21Unw/WpHd8 PeXM+SWVdIzLtdj9gBiwopo3N7hVyycVaCJtcLaQ2dKRnbu6xTDMWwNxpwCg2G69 kQU6Dj5jJ53oVE5MZvhCvr0D/ixF41uZPkfM9NcdXZT7naGZIGz8X8RkMS5l22hZ g7VHAuniVRmyA0HVfrChQDyzL6GJq8HvFKCsV40HEjS12w4Uh5x/blkfMaRuOm+A eawOfCGruT+ERjBvWiYJIOhOV482uIUTAn7koeYL2mgr2zoop9EVcbYY6lKjj9TA 81JAA/4ot3wPekLVIBhzscTdTyLLr6tOO8nvn0ahQ/g8ciDlPjkafsVD9Aydu/Yg q6v3Z1dEKh3Utcd9AHF+IDog5BI/eXGxh7WaVWkfkCmOS/5TiWLm7eKQYK+Iupxr D+etdV/ujwgDLVald6IyheGyb+NvOJ4yhKR/RGlP1CyFfTmGZLQkSm9zZWYgS2Fk bGVjIChnZWVrKSA8am9zZUBjenNsdWcuY3o+iGQEExECACQFAkEuK5gCGwMFCQHh M4AGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQlnRFq1inZKfmbgCdHgsLuwiM8m3a hupkNrFHHSXWn30AoLV7zOHGH+2YTGNrWvFNfv/cJ4aOuQINBEEuK6AQCACDPXlG pzwH+dZGcngVQ7jCIZRrX3HkY0Y/jX8suRVaR/xsM41Z5nyCR962XIhTCY5HFz5T S5J84GCyINbwddaM0DdbqcjFHt5sMlamog4aSG93qZVxGe/nxwzXbUHvGhyIez1h V3sUp/8fSVqFkzAUcD3e8EL2gM6b9h/WtI836v3vB6G0OYByOag6a1Lkj2bGDm4N IC7lzrvB0cgSh34VytdPZR3YJwOJIRGogo2yqk7h3sdmnMjde8v48H/qSSZeS4uc 7FmNhfQYsHyifXq1fnq28U+7QoMIAzxKh69axDyU6MRC8WuG+s4QE2ynZiPDjMkB pLye6ZX4sJ17tyPrAAMFB/wL3up1vEKN6V/LJ+Y0nXgeuLrwxZ72wM82U8B7Aws2 6Q8ZYMnhK36rpcsxZ09AsxgpOQiHGkNadyIIvpfzF/MB9j9bavGnNtz+x7P9v58L lC5j6G+8YG0tbvBtbtaLCu/gahUbC92blc05XXGkuwlj3tVkKA80eKRrv7BmDqj6 iEKlZNPHsvWyneP3t89Pc+MkDUKkRgMDS+B2JVTlr8YQ3SwK61SUkEe0r54SpRpL 6EnAZplrHptOTyAJ5LmOpiWLWdsxmMHyT4NiCUwrYDgLR0gSyt2t8of64j05MP6N RWAjc2XFGuMh8cf1mfALlCCz2cftixW8N6RhTaNc/NU3iE8EGBECAA8FAkEuK6AC GwwFCQHhM4AACgkQlnRFq1inZKcqKACfd96y3wvTe+7OSEivey4HGDCtMlIAoLp0 ZJNzoCNyDE5bQA1JLYnTdF3/ =ZPzR -----END PGP PUBLIC KEY BLOCK-----
Po bezpečném předání tohoto souboru druhé straně (uživatelé často vystavují své veřejné klíče na webových stránkách, což nemusí být z hlediska bezpečnosti optimální. Je proto nutné důkladně kontrolovat fingerprinty (viz. dále) takto stahovaných klíčů.), může druhá strana tento soubor (veřejný klíč) importovat:
bash-2.05b# gpg --import popelek.pub gpg: klíč 77099380: veřejný klíč "Jan Popelek <popelek@geocities.com>" importován gpg: Celkový počet zpracovaných klíčů: 1 gpg: importováno: 1
Měli bychom také vyloučit možnost, že někdo klíč změnil po cestě a to pomocí již zmiňovaných fingerprintů (otisků). Pro zobrazení fingerprintu daného klíče zadají obě strany:
bash-2.05b# gpg --fingerprint popelek@geocities.com pub 1024D/77099380 2000-03-22 Jan Popelek <popelek@geocities.com> Fingerprint klíče = 99F9 85C1 B301 ECD4 B3D4 FBD5 A69F 1305 7709 9380 sub 1024g/02F838D6 2000-03-22
Místo e-mailové adresy lze opět použít i jméno vztahující se ke klíči. Poté vhodným způsobem komunikace otisky porovnají. Pokud se shodují, je
vše v pořádku a druhá strana (jakožto příjemce veřejného klíče) by měla klíč uznat pravým a podepsat ho příkazem sign
, který
zadá v interaktivním režimu, který se spustí takto:
bash-2.05b# gpg --edit-key popelek@geocities.com gpg (GnuPG) 1.2.4; Copyright (C) 2003 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. pub 1024D/77099380 vytvořen: 2000-03-22 platnost skončí: nikdy důvěra: -/- sub 1024g/02F838D6 vytvořen: 2000-03-22 platnost skončí: nikdy (1). Jan Popelek <popelek@geocities.com> Příkaz> sign pub 1024D/77099380 vytvořen: 2000-03-22 platnost skončí: nikdy důvěra: -/- Primární fingerprint klíče: 99F9 85C1 B301 ECD4 B3D4 FBD5 A69F 1305 7709 9380 Jan Popelek <popelek@geocities.com> S jakou jistotou jste prověřili, že klíč, který chcete podepsat patří výše uvedené osobě. Pokud neznáte odpověď, zadejte "0". (0) Neodpovím. (implicitně) (1) Nijak jsem to nekontroloval(a). (2) Částečně jsem to ověřil(a). (3) Velmi pečlivě jsem to ověřil(a). Vaš výběr? (pro detailnější informace stiskněte '?'):3 Jste si jistý(á), že chcete podepsat tento klíč svým klíčem: "Josef Kadlec (geek) <jose@czslug.cz>" (58A764A7) Velmi pečlivě jsem ověřil tento klíč. Skutečně podepsat? ano Musíte znát heslo, abyste odemknul(a) tajný klíč pro uživatele: "Josef Kadlec (geek) <jose@czslug.cz>" délka 1024 bit??, typ DSA, klíč 58A764A7, vytvořený 2004-08-26 Příkaz>
Pokud chceme vypsat všechny klíče v interaktivním režimu, použijeme příkaz list
. Může to vypadat např. takto:
Příkaz> list pub 1024D/77099380 vytvořen: 2000-03-22 platnost skončí: nikdy důvěra: -/- sub 1024g/02F838D6 vytvořen: 2000-03-22 platnost skončí: nikdy (1). Jan Popelek <popelek@geocities.com> Příkaz>
Všechny příkazy interaktivního režimu zobrazíte příkazem help
.
Když máte svojí práci v interaktivním režimu hotovou, můžete ho opustit příkazem save
, který uloží provedené změny. Příkaz quit
ukončí tento režim bez uložení těchto změn.
Veřejné klíče lze stahovat i ze serveru, pokud jsou na něm k dispozici:
gpg --keyserver server_s_klici --recv-keys ciselna_hodnota
Klíč nelze stáhnout přímo přes e-mail či jméno vztahující se ke klíči, ale pomocí jakési číselné hodnoty. Tato služba využívá TCP port 11 371.
K těmto účelům lze využít například servery www.keyserver.net
, wwwkeys.pgp.net
či pgp.ai.mit.edu
.
Pokud chceme umístit naše veřejné klíče na takovýto server, uskutečníme to příkazem:
gpg --send-keys e-mailova_adresa_klice --keyserver server_s_klici
Nyní k samotnému šifrování a dešifrování dat. Prosté zašifrování souboru provedeme takto:
gpg -e -r jmeno_klice soubor
Příznak -e
znamená, že soubor bude zašifrován. Příznakem -s
si lze vynutit i podepsání šifrovaného souboru. Příznak -r
definuje klíč, kterým bude soubor zašifrován. Lze zadat jméno nebo e-mail vztahující se ke klíči. Po zašifrování se v aktuálním adresáři
vytvoří soubor s příponou .gpg
, což je výsledný zašifrovaný soubor. Rozšifrování takového souboru provedeme takto:
gpg -d soubor.gpg
Pokud nechceme mít výsledný rozšifrovaný soubor vypsaný na standardním výstupu, lze výstup specifikovat i pomocí příznaku -o
, za kterým
následuje název souboru, kam chceme výsledná data uložit.
Pokud chceme ověřit pravost souboru (například program stažený z Internetu), ke kterému je k dispozici podpis, provedeme to takto:
gpg --verify program.asc program.tgz
kde program.asc
je soubor s podpisem (často má také koncovku .sig
, což je většinou binární podoba podpisu) a program.tgz
samotný program.
Pokud chceme tedy vytvořit soubor s ASCII podobou podpisu bez originálních dat s koncovkou .asc
, provedeme to takto:
gpg -b --armor soubor
Pokud neuvedeme příznak --armor
, vytvoří se binární podoba podpisu s koncovkou .sig
.
Program GPG nám samozřejmě nabízí nesčetně dalších voleb, které nalezneme v dokumentaci.