Generování klíčů
V podstatě nic nelze s GPG dělat bez klíčů. Abychom mohli šifrovat a ověřovat podpis, potřebujeme veřejný klíč, pro dešifrování a podepisování klíč tajný (soukromý). Veřejný a tajný klíč tvoří nedílně spjatou dvojici (keypair).
Tyto klíče je potřeba odněkud získat. Možností bývá víc, začneme tou nejjednodušší, tedy vygenerováním na počítači, kde se budou používat. Ke generován spustíme následující příkaz:
gpg --gen-key
Program se nejdřív zeptá na algoritmy, které se mají použít. Nyní jsou v nabídce dvě kombinace algoritmů použitelných pro šifrování i podepisování a dva algoritmy jen pro podepisování. Názory na volbu algoritmů jsou různé, výchozí volbou je ta první (RSA pro šifrování i podepisování) a lze ji ponechat.
Další dotaz směřuje na délku klíče. RSA může mít klíč dlouhý 1024 až 4096 bitů. Phil Zimmermann, tvůrce PGP, doporučuje klíč dlouhý aspoň 3072 bitů, přestože prolomen zatím nebyl ani ten nejkratší. Delší klíč se nejen déle generuje, ale i jeho následné použití je pomalejší (a to podstatně výrazněji, než odpovídá poměru délky klíčů). Výchozí hodnotou je 2048 bitů, opět ji můžete ponechat.
Poté se aplikace ptá na časovou platnost klíče. Výchozí je neomezená, někdy se ale může hodit platnost omezit (i když reálný efekt je malý, protože lze s hodinami na počítači manipulovat). Dále je potřeba postupně zadat jméno a příjmení, komentář a e-mailovou adresu. Tyto údaje společně vytvoří identifikátor uživatele. Jako poslední se zadává heslo, které by mělo vyhovovat obecným zásadám pro volbu bezpečného hesla.
Po zadání všech údajů se bude generovat klíč, což může podle rychlosti stroje trvat sekundy až hodiny. Záleží na tom, kolik entropie (pseudonáhodných dat) je systém schopen poskytnout. Čím více bude počítač využívat, tím více entropie budou různé komponenty generovat a tedy tím rychleji se klíč vygeneruje.
Úložiště klíčů
Vygenerované klíče se ukládají do úložiště, které je standardně v adresáři .gnupg pod domovským adresářem uživatel. Jsou tam i další soubory, pro klíče jsou ale důležité tzv. keyrings (česky doslova „kroužky na klíče“). Ty jsou dva – pro veřejné a tajné klíče (secring.pgp
, resp. pubring.pgp
). Tyto soubory je dobré bezpečně zálohovat, ztráta klíčů může být velmi nepříjemná.
Export a import klíčů
Pro přenos klíčů je potřeba je vyexportovat z původního úložiště a pak naimportovat do cílového. Nejčastěji se přenášejí veřejné klíče, typicky pro šíření protistranám komunikace. Výjimečně je ale potřeba přenést i tajný klíč, obvykle při práci na více počítačích.
Seznam klíčů v úložišti
Pro získání přehledu o uložených klíčích si můžeme vypsat jejich seznam:
gpg -k gpg --list-key gpg --list-public-keys
Všechny uvedené příkazy jsou téměř ekvivalentní (je mezi nimi rozdíl jen v případě, že se použijí další parametry) a vypíší seznam veřejných klíčů. Výsledkem může být něco jako toto:
/home/luk/.gnupg/pubring.gpg
------------------------
pub 2048R/18CEFEA4 2015-05-20
uid Lukáš Jelínek (test) <bflm@psvzabcd>
sub 2048R/95612B1C 2015-05-20
První řádek říká, z jakého „kroužku“ byly klíče vypsány (zde je samozřejmě pouze jeden klíč). Ve druhém řádku označení „pub“ říká, že jde o veřejný klíč, následuje délka a algoritmus (2048 bitů, RSA), identifikátor klíče a datum vygenerování. Třetí řádek identifikuje uživatele (v závorce je uveden komentář, viz výše). Poslední je podklíč (subkey) klíče, lišící se označením „sub“ a jiným identifikátorem.
V GPG to funguje tak, že klíč může mít více podklíčů a ty jde v případě potřeby revokovat (zneplatňovat) nezávisle na hlavním klíči. Při generování klíče se pak vždy vygeneruje jeden podklíč, který slouží pro šifrovací účely, zatímco hlavní klíč slouží k účelům podpisovým.
Podobně vypíšeme i klíče tajné:
gpg -K gpg --list-secret-keys
Pokud všechny klíče v úložišti vznikly generováním, budou oba seznamy obsahovat totéž. Rozdíl bude jen v tom, že soubor bude secring.gpg
, míst „pub“ bude „sec“ a místo „sub“ bude „ssb“. Lze vypisovat i jen některé klíče:
gpg -k 18CEFEA4 gpg -k Lukáš
Filtrování funguje jak podle identifikátoru klíče, tak podle identifikátoru uživatele (i částečného, například jen příjmení nebo i jeho části).
Export klíčů
Můžeme exportovat jeden či více klíčů, případně všechny klíče. Je to jednoduché:
gpg --export 18CEFEA4 > klic.pub gpg --output klic.pub --export lukas@ gpg --export > vsechno.pub
První řádek exportuje veřejný klíč podle jeho identifikátoru. Klíč se exportuje na standardní výstup, zde je přesměrován do souboru. Druhý řádek exportuje podle části e-mailové adresy uživatele (resp. jeho celkového identifikátoru). Místo přesměrování se ukládá do určeného souboru (program se před přepsáním souboru zeptá). Poslední příkaz vyexportuje všechny veřejné klíče.
Výstupem jsou binární data, což obecně nemusí vadit. Takto ale nelze klíč jednoduše poslat e-mailem, musí se vložit jako příloha. Rychlejší a pohodlnější může být, ho poslat přímo v těle zprávy, to ale v této podobě nejde. Musí se na to jít trochu jinak:
gpg -a --export 18CEFEA4 > klic.pub
Přidáním přepínače -a (nebo --armor) se klíč uloží zakódovaný algoritmem Base64 a obalený identifikací, o jaký typ dat jde. Pak s ním lze nakládat jako s textem. Při exportu tajných klíčů by se postupovalo stejně jako u veřejných, jen se místo --export
použije --export-secret-keys
.
Import klíčů
Obdržíme-li od někoho (důvěryhodnou cestou) veřejné klíče, naimportujeme je do úložiště k použití. Je to obdobné jako při exportu:
gpg --import klic.pub
Místo identifikace klíčů se zadává cesta k souboru, v němž je jeden čí více klíčů. Nezáleží na tom, zda jsou klíče v binární nebo zakódované (Base64) podobě, program to automaticky rozpozná.
Další manipulace s klíči
S klíči v úložišti lze provádět různé další úkony. Jejich celá řada, nyní se podíváme jen na dva z nich (další přijdou na řadu v budoucnu). První z nich je vypsání otisků (fingerprintů):
gpg --fingerprint gpg --fingerprint EA2A1FAC
Funguje to úplně stejně jako --list-keys
, jen to do výpisu přidá ještě otisk každého klíče. K čemu je to dobré? Pokud se pošle klíč běžným e-mailem nebo se zveřejní na webu přístupném nešifrovaným protokolem HTTP, může data teoreticky někdo pozměnit. Proto lze podle otisku (předaného jiným kanálem, například telefonem, SMS apod.) ověřit, zda jsou data klíče původní.
Co v případě, že z nějakých důvodů už klíč v úložišti nechceme mít (myšleno vůbec, ne ho tam mít zneplatněný)? To lze snadno zajistit:
gpg --delete-key EA2A1FAC gpg --delete-secret-key lukas@ gpg --delete-secret-and-public-key EA2A1FAC
První příkaz smaže veřejný klíč podle identifikátoru (tajný ponechá), druhý smaže jen tajný klíč (podle části identifikace uživatele), třetí oba klíče. Program se na smazání vždy zeptá. Smazání všech klíčů najednou není možné.
Šifrování, dešifrování, podepisování…
To by bylo pro dnešek vše, příště se posuneme k tomu nejdůležitějšímu – tedy k použití GPG na šifrování a dešifrování dat a na podepisování a kontrolu podpisu.