Hlavní navigace

GnuPG: práce s klíči v řádce

20. 11. 2009
Doba čtení: 9 minut

Sdílet

V minulém díle seriálu o šifrování jsme si osvětlili, proč bychom měli používat software GPG. Dnes si ukážeme, jak pracovat s šifrovacími klíči na příkazové řádce. To se může hodit třeba ve skriptech, ale pro nás to bude důležité hlavně proto, že si lépe zažijeme a vysvětlíme, co vlastně s GPG děláme.

Hned na začátku se sluší zmínit, že způsoby používané v dalších řádcích není nutné nezbytně znát pro práci s GPG. Naopak, pokud rádi klikáte a příkazová řádka je pro vás jen ikonka v menu, tak vás bude zajímat spíše článek plánovaný na příští týden, který se bude věnovat Seahorse, klikacímu programu pro práci s klíči.

Použití GPG v řádce se hodí všude tam, kde není k dispozici X Server nebo potřebujeme šifrovat či podepisovat soubory ve skriptech. Dobrým příkladem je třeba podepisování v nějakém fakturačním systému nebo podepisování automaticky odesílaných zpráv či souborů. Ani toho si ale dnes neužijeme, protože nás bude zajímat hlavně, co dělat s klíčem, jehož důvěra byla nějakým způsobem narušena, a také jak předat klíče svému okolí, a to všechno pomocí řádkové utility gpg.

 Vytváření, mazání a revokace klíčů

A teď již k samotnému gpg. Na konci minulého dílu jsme si ukázali, jak vytvořit nový pár klíčů. Pro úplnost si to uvedeme i zde v poněkud kratší formě:

$ gpg --gen-key 

Po odentrování se vás gpg zeptá na několik jednoduchých otázek a klíč je na světě. Tady ale proces vytváření klíče nekončí. Po uveřejnění prvního dílu mi přišel e-mail od uživatele, který se obával, že se mu soukromá část klíče dostala tam kam neměla. I když je chráněna heslem, může se stát, že by se toho nějaký útočník mohl chytit a pokusit se heslo rozlousknout. V takovém případě bychom měli mít vždy po ruce tzv. revokační certifikát.

Každý klíč má určitou dobu platnosti. Po této době již není platný a je potřeba vytvořit. Co když se nám ale povede soukromý klíč nahrát někam na veřejné místo nebo nám jednoduše ukradnou USB flashku, kde byl klíč nešťastnou náhodou umístěn? Revokační certifikát se postará o to, aby byla platnost vašeho páru klíčů zrušena i přes to, že nebyla dosažena doba jeho životnosti. I když to v GPG nazýváme revokační certifikát, tak se jedná o normální veřejný klíč podepsaný vaším soukromým klíčem, který v sobě nese informaci o revokaci.

$ gpg --gen-revoke muj@email.cz

sec  1024D/E7B4BB0E 2009-11-12 Testovací Jedinec <muj@email.cz>

Vytvořit pro tento klíč revokační certifikát? (a/N) a
Prosím vyberte důvod revokace:
  0 = Důvod nebyl specifikován
  1 = Klíč byl zkompromitován
  2 = Klíč je nahrazen
  3 = Klíč se již nepoužívá
  Q = Zrušit
(Pravděpodobně zda chcete vybrat 1)
Vaše rozhodnutí? 1
Můžete vložit další popis. Ukončete prázdným řádkem:
> Muj detailnejsi popis problemu
>
Důvod revokace: Klíč byl zkompromitován
Muj detailnejsi popis problemu
Je důvod revokace vybrán správně? (a/N) a

Musíte znát heslo, abyste odemknul(a) tajný klíč pro
uživatele: "Testovací Jedinec <muj@email.cz>"
délka 1024 bitů, typ DSA, klíč E7B4BB0E, vytvořený 2009-11-12

[...]

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: A revocation certificate should follow

iGcEIBECACcFAksFgLYgHQJNdWogZGV0YWlsbmVqc2kgcG9waXMgcHJvYmxlbXUA
CgkQ1ASKe+e0uw7iRQCdGMIlJ1aUDFKs9vYAdIJqjCKEerYAnj73wPr+5adPSkcM
o87MnpAIQ1DJ
=dM9i
-----END PGP PUBLIC KEY BLOCK----- 

Takto vytvořený klíč si zkopírujeme např. do souboru revok.key a můžeme ho i naimportovat k našim veřejným klíčům, i na klíčové servery. O těch se budeme bavit v další části.

$ gpg --import revok.key
gpg: klíč E7B4BB0E: "Testovací Jedinec <muj@email.cz>" revokační certifikát importován
gpg: Celkový počet zpracovaných klíčů: 1
gpg:    nové revokace klíčů: 1
gpg: požadováno 3 částečné důvěry a 1 úplné důvěry, model PGP
gpg: hloubka: 0  platných:   2  podepsaných:   8  důvěra: 0-, 0q, 0n, 0m, 0f, 2u
gpg: hloubka: 1  platných:   8  podepsaných:   0  důvěra: 2-, 0q, 0n, 6m, 0f, 0u
gpg: další kontrola databáze důvěry v 2011-02-16 

Po importu klíče bude náš klíč ve výpisu vypadat takto:

$ gpg --list-keys
[...]
pub   1024D/E7B4BB0E 2009-11-12 [revokován: 2009-11-19]
uid                  Testovací Jedinec <muj@email.cz>
[...] 

Parametr --list-keys vypíše všechny naimportované veřejné klíče, které v gpg máte. Aplikace, které pracují s GPG, ke klíčům přistupují přes jednotné API. To znamená, že když klíč naimportujete v jedné aplikaci, budete ho mít k dispozici i v druhé. Revokace je u konce a jen co se tento klíč dostane dále, ať už přes klíčový server nebo ho pošlete svým kolegům a přátelům, nemusíte se bát, že by ho někdo mohl zneužít.

Oproti jiným více centrickým řešením se musí revokační certifikát v OpenPGP rozšířit k uživatelům relativně nespolehlivou cestou. Nespolehlivou ve smyslu, že se nemusí v rozumném čase dostat všude, kam to potřebujete. Nezapomeňte také zvážit vytvoření certifikátu hned po vygenerování veřejného a soukromého klíče. Pokud soukromý klíč omylem smažete, nebudete schopni vytvořit revokační certifikát a jeho platnost bude omezená nastavenou dobou platnosti.

Pokud se vám klíč již nebude líbit a víte, že ho nebudete potřebovat (opravdu si to promyslete), tak aby se vám nepletl, je vhodné ho smazat.

$ gpg --delete-secret-keys muj@email.cz
gpg (GnuPG) 1.4.9; Copyright (C) 2008 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.


sec  1024D/E7B4BB0E 2009-11-12 Testovací Jedinec <muj@email.cz>

Smazat tento klíč ze souboru klíčů? (a/N) a
Toto je tajný klíč! - opravdu smazat? (a/N) a 

Nezapomeňte, že po smazání soukromého klíče zůstává v systému pořád veřejný. Ten je také nutné smazat.

$ gpg --delete-keys muj@email.cz
gpg (GnuPG) 1.4.9; Copyright (C) 2008 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.


pub  1024D/E7B4BB0E 2009-11-12 Testovací Jedinec <muj@email.cz>

Smazat tento klíč ze souboru klíčů? (a/N) a 

Smazáním soukromého klíče si odříznete cestu k dokumentům, které byly zašifrovány jeho veřejným klíčem.

 Podepisování klíčů

V minulém díle jsme mluvili o věrohodnosti klíčů. Pokud má veřejný klíč vašeho přítele podpis dalších vašich přátel, máte větší jistotu, že se jedná opravdu o věrohodný klíč a můžete ho bez problémů používat. Seznam podpisů ve všech naimportovaných klíčů včetně vašeho klíče zjistíte pomocí:

$ gpg --list-sigs 

I u několika klíčů je seznam obrovský, zvlášť pokud tam máte klíč nějakého vývojáře. Podpisy od lidí, od kterých nemáte klíč a kterým nevěříte, vás budou těžko zajímat. Proto je lepší si vypsat pouze podpisy lidí, které znáte.

$ gpg  --check-sigs 

Pomocí volby --check-sigs programu gpg, vyfiltruje všechny podpisy lidí, jejichž klíče nemáte.

Abychom měli nějaké věrohodné klíče, musíme jim dát důvěru naším podpisem. To se jednoduše udělá buď přes:

$ gpg --sign-key jeho@email.cz 

Nebo při úpravě klíče pomocí:

$ gpg --edit jeho@email.cz 

Úprava se provádí tak, že dostaneme příkazovou řádku, na které budeme moci upravit parametry vybraného klíče, který uvedeme jako parametr. Nejjednodušší je začít otazníkem, který když odentrujeme, dostaneme nápovědu. To samé se stane, když napíšeme help. Je to jednoduchá cesta jak změnit více parametrů klíče bez jeho opakovaného identifikování. Jelikož je všechno dnes již přeložené do češtiny, tak nemá smysl se všemi volbami zabývat.

Důležité je nepřehlédnout nastavění důvěryhodnosti klíče (volba trust), o kterém jsme mluvili již v minulém díle. Můžeme nastavit různé úrovně důvěryhodnosti od „nedůvěřuji“ po „absolutní důvěru“. Po podpisu klíče vaším klíčem jde o druhou informaci o tom, že klíči důvěřujete.

Abychom si to shrnuli. Když vám váš kolega pošle svůj veřejný klíč, tak ten už může obsahovat podpisy vašich ostatních kolegů. Podle toho se můžete rozhodnout, jestli je klíč platný nebo ne. Pomoci by vám v tom měl fingerprint klíče:

$ gpg --fingerprint muj@email.cz
[...]
      Fingerprint klíče = DE4A E65C 9EAA 009A 5560  F528 0507 EF38 C55A 0172
[...] 

Po ověření, že tomu tak je, můžete jeho klíče podepsat přes gpg --sign-key a nastavit jeho důvěryhodnost pomocí gpg --edit a volby trust. Tím by měla být výměna klíčů u konce a můžete bez obav podepisovat šifrovat dokumenty.

Práce s klíčovými servery

Výměna klíčů nemusí být nutně realizována fyzickým předáváním. Elektronické předávání přes e-mail je o to napadnutelnější. Proto GPG přichází s tzv. klíčovými servery, kam si uživatelé nahrají svoje veřejné klíče a ty jsou k dispozici všem. Pokud jde o běžně používané klíčové servery, tak si se mezi sebou synchronizují. Změna na jednom se tedy během pár hodin objeví i na druhém. Klíčový server si můžete vytvořit i doma.

Pohodlnost tohoto řešení spočívá v tom, že stačí zadat jméno, případně e-mail a klíčový server vám vydá potřebný veřejný klíč. Ten si můžete naimportovat a k sobě a využívat ho při komunikaci. Nepohodlné předávání přes web nebo e-mail tak odpadá.

Operace, které můžeme proti klíčovému serveru provádět, jsou:

  • Hledání klíčů
  • Odesílání klíčů
  • Přijímání klíčů
  • Aktualizace klíčů

Nejběžnější operací bude hledání, takže s ní začneme. Pokusíme se najít můj veřejný klíč.

$ gpg --search-keys Adam Štrauch
gpg: vyhledávám "Adam Štrauch" na hkp serveru keys.gnupg.net
(1) Adam Štrauch <cx@initd.cz>
    Adam Štrauch <cx@dev-it.org>
    Adam Štrauch <creckx@gmail.com>
    Adam Štrauch <adam.strauch@iinfo.cz>
      1024 bit DSA key C55A0172, vytvořen: 2009-10-12
Keys 1-1 of 1 for "Adam Štrauch".  Vložte číslo (čísla), 'N' pro další nebo 'Q' pro konec> 1
gpg: požaduji klíč C55A0172 ze hkp server keys.gnupg.net
gpg: klíč C55A0172: "Adam Štrauch <cx@initd.cz>" beze změn
gpg: Celkový počet zpracovaných klíčů: 1
gpg:              beze změn: 1 

Klíč se podle zadaných klíčových slov vyhledá a nabídne se rovnou možnost importu klíče. Jelikož byl klíč už v mém systém přítomen, tak se neprovedla žádná změna. Často se může stát, že budeme potřebovat klíč aktualizovat. To můžeme udělat opět přes hledání, resp. volbu --search-keys, a nebo si v seznamu veřejných klíčů ( --list-keys) najdeme ID klíče a použijeme --recv-keys. V mém případě je to C55A0172. V seznamu uvidíme řetězec s lomítkem. Část před lomítkem značí typ klíče a za lomítkem je to samotné ID. Aktualizujeme tedy klíč:

$ gpg --recv-keys C55A0172 

Pokud znáte přímo ID klíče, je možné ho tímto způsobem i naimportovat.

Poslední co si ukážeme je odesílání klíčů. Odesílat můžete jak svůj klíč, tak klíče jiných. Já opět zůstanu u svého a odešlu ho na klíčový server:

$ gpg --send-keys C55A0172
gpg: posílám klíč C55A0172 na hkp server keys.gnupg.ne 

Možná jste si všimli, že parametry končí na slovo „keys“. To naznačuje, že je možné odeslat či přijmout více klíčů najednou, třeba takhle:

$ gpg --send-keys C55A0172 86E0E2CC 

Klíčový server a další parametry GnuPG včetně nastavení výchozího klíče najdeme v konfiguračním souboru ~/.gnupg/gpg.conf.

 Export klíčů

I když je práce s klíčovými server pohodlná, občas se bez exportu klíčů neobejdeme. Potřebujeme exportovat veřejný klíč, abychom ho mohli odeslat ostatním třeba tím e-mailem nebo jako IM zprávu. To provedeme pomocí volby  --export:

$ gpg -a --export cx@initd.cz
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.9 (GNU/Linux)
[...]
-----END PGP PUBLIC KEY BLOCK----- 

Volba -a řekne gpg, aby nám dal výstup do tisknutelných znaků, bez něj dostaneme na výstupu jen rozsypaný čaj. Klíč můžeme buď zkopírovat kam potřebujeme nebo použít přesměrování do souboru:

$ gpg -a --export cx@initd.cz > my.key 

Pak nám nic nebrání ho odeslat. Import druhá strana povede takto:

CS24_early

$ gpg --import my.key 

Nebo:

$ cat my.key | gpg --import 

Závěr

Dnešní díl byl zaměřen hlavně na práci s klíči. S použitím klíčů se setkáme už příští týden, kdy si ukážeme již zmíněný Seahorse a integraci GPG do desktopového prostředí GNOME. V dalším díle se vrátíme do příkazové řádky a začneme konečně podepisovat a šifrovat všemi možnými i nemožnými způsoby. Za tři týdny nás čeká to nejdůležitější, a to je integrace do všech dnes používaných linuxových i nelinuxových e-mailových klientů.

Odkazy

Byl pro vás článek přínosný?

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.