Používáme GPG k šifrování a podpisům #1

Autor: Polarkac, dne 09. září 2015

Tagy: Polarkac, GPG, asymetricke, sifrovani, podpisy, OpenPGP, bezpecnost

Toto je první díl seriálu o GPG ve kterém se naučíme šifrovat, dešifrovat a podepisovat zprávy nebo soubory. Také si ukážeme jak distribuovat klíče a jak zvýšit bezpečnost klíčů.

Co je to GPG?

GPG, GnuPG nebo celým názvem GNU Privacy Guard je multiplatformní software určený pro šifrování pomocí (nejen) asymetrické kryptografie. Dostupný je pro Linux, OS X, Windows a mnoho dalších. Kompletní seznam podporovaných systémů můžete najít zde.

Ovládání GPG probíhá zejména pomocí terminálu, ale existuje i řada grafických aplikací, které lze použít. V tomto článku se budeme zabývat pouze ovládáním z terminálu a zároveň si vysvětlíme různé pojmy a způsoby použití. Použitá verze GPG v celém tomto seriálu je 2.1.7.

Co GPG umí?

Mimo šifrování a dešifrování zpráv je GPG schopné vytvářet podpisy. Podpis zajišťuje, že zpráva je napsána držitelem daného klíče a také zprávu validuje. Pokud zprávu někdo upraví, tak se tím podpis stává neplatným. GPG není limitováno pouze na zprávy, můžete takto šifrovat nebo podepisovat i soubory jakéhokoliv typu.

Generování klíčů

Abychom byli schopni šifrovat a dešifrovat zprávy, potřebujeme vygenerovat vlastní klíč. Jelikož se jedná o asymetrickou kryptografii, tak při generování klíče se nám generuje pár klíčů, soukromý a veřejný. Pokud nenapíšu jinak, tak klíčem myslím celý pár, tedy jak soukromý, tak veřejný klíč.

Jak už názvy napovídají, soukromý klíč držíte na bezpečném místě. Soukromým klíčem dešifrujete nebo podepisujete zprávy. Soukromý klíč je nejčastěji chráněn heslem, takže pokud ho někdo získá, nemusí to hned znamenat, že je schopen zprávy dešifrovat nebo podepisovat. Veřejný klíč můžete poslat ostatním nebo zveřejnit na webu. Ti ho následně použijí pro šifrování zpráv určených vám nebo k ověřování vašich podpisů.

Pro generování klíčů existují dva odlišné přepínače.

$ gpg --gen-key
$ gpg --full-gen-key

První varianta vás provede základním vytvoření user ID, bude tedy vyžadovat zadání vašeho jména a emailu. Ostatní hodnoty, jako je třeba délka klíče nebo použité algoritmy, jsou zvoleny automaticky (2048 bitů dlouhý klíč, RSA algoritmus). Před samotným vygenerováním budete vyzváni k zadání hesla, které bude chránit soukromý klíč.

Druhá varianta vás nejprve provede zvolením algoritmů pro klíče. Vychozí hodnota je RSA and RSA, kterou můžete ponechat. Následuje délka klíče. Čím větší délka, tím složitější je prolomení klíče. Nevýhoda je ovšem delší generování a hlavně použití, které je mnohem pomalejší. Pokud nechcete používat GPG na telefonu nebo pomalejším zařízení, klidně zvolte 4096 bitů. V opačném případě zvolte vychozích 2048 bitů. Nyní můžeme nastavit délku platnosti klíče. Ve výchozím stavu klíči nikdy nevyprší platnost a můžete to tak i ponechat. O platnosti klíčů se budu zabývat v jednom z dalších dílů, kde se budeme bavit více o podklíčích. Poté už následuje vytvoření user ID jako u předchozí varianty s rozdílem, že můžeme doplnit i komentář. Opět před samotným generováním klíče se GPG zeptá na heslo.

V obou případech může generování klíče nějakou dobu trvat. Během generování se snažte počítač normálně používat (procházení internetu, hraní hry apod.), čímž pomůžete vytvořit potřebnou entropii (pseudonáhodná data).

Klíčenka

Standardně najdete všechny klíče ve svém domovském adresáři ve složce .gnupg. Najdete zde, mimo jiných, soubory secring.pgp (klíčenka pro soukromé klíče) a pubring.gpg (klíčenka pro veřejné klíče). Další soubory, které stojí za zmínku jsou třeba trustdb.gpg (databáze důvěry) nebo gpg.conf (nastavení GPG).

Pro vypsání seznamu klíčů v klíčence slouží přepínač

$ gpg --list-keys
/home/polarkac/.gnupg/pubring.gpg
---------------------------------
pub   rsa4096/0F0BF266 2014-07-01
uid         [ultimate] Lukáš Pohlreich <pohlreichlukas@gmail.com>
sub   rsa4096/C91CC29C 2015-06-22 [expires: 2016-06-21]
sub   rsa4096/43795422 2015-06-22 [expires: 2016-06-21]

Podklíče a otisk

Ve výstupu výše máme několik zajímavých informací. Řádek začínající pub značí hlavní veřejný klíč (master key). Dále zde máme rsa4096 což označuje použitý RSA algoritmus s délkou klíče 4096 bitů. Za lomítkem je otisk klíče, který slouží k snadné identifikace klíče. Poslední položka je datum vytvoření klíče. Na dalším řádku, řádek začínající uid, je user ID. Zobrazují se zde vyplněné informace o uživateli, tedy jméno a email. Poslední dva řádky, řádky začínající sub, jsou pro nás teď nejzajímavější, protože se jedná o tzv. podklíče (subkey). Podklíče jsou vázané na hlavní klíč a mají specifické využití. V případě volby RSA and RSA se nám vygeneroval podklíč, kterým můžeme šifrovat a dešifrovat. Nic jiného s ním dělat nemůžeme. Hlavní klíč slouží k podpisům a certifikátům. Informace o podklíčích jsou totožné (algoritmus, délka...). V mém případě se zobrazuje u podklíčů i datum, kdy vyprší jejich platnost.

Jak už bylo řečeno, tak otisk klíče slouží k jeho identifikace. Při operacích s GPG uvádíme otisk hlavního klíče. Můžeme zadat otisk podklíče, ale GPG v takovém případě vyhledá hlavní klíč a použije správný podklíč, případně hlavní klíč. Otisk, který se zobrazuje v seznamu klíčů, je krátký otisk. Pro zobrazení celého otisku použijte přepínač

$ gpg --fingerprint
pub   rsa4096/0F0BF266 2014-07-01
      Key fingerprint = E3F4 1984 AA6B DBDA 5EA4  5939 315B 1E4D 0F0B F266
uid         [ultimate] Lukáš Pohlreich <pohlreichlukas@gmail.com>
sub   rsa4096/C91CC29C 2015-06-22 [expires: 2016-06-21]
sub   rsa4096/43795422 2015-06-22 [expires: 2016-06-21]

Zobrazil se nový řádek Key fingerprint, který obsahuje celý otisk hlavního klíče. Až se naučíte importovat klíče do své klíčenky, tak důležitým prvkem je ověření, že obdržený klíč je správný. Takové ověření dělejte vždy proti celému otisku, nikoliv proti zkrácené verzi otisku. O ověřování importovaných klíčů si povíme v dalším díle.

V případě, že máte klíčů více, je můžete filtrovat podle identifikátoru, abyste si zobrazili pouze konkrétní klíč. Identifikátorem může být například část emailové adresy, část jména nebo část už zmíněného otisku.

$ gpg --fingerprint pohlreich
$ gpg --fingerprint 0F0BF266
$ gpg --list-keys pohlreich
$ gpg --list-keys 0F0BF266

Co dál?

Pokud chceme, aby nám někdo poslal šifrovanou zprávu, musíme mu poslat veřejný klíč. Naučíme se tedy, jak veřejný klíč exportovat, abychom ho mohli někomu odeslat. Také si ukážeme, jak importovat do klíčenky cizí klíč, a zašifrujeme si první zprávu.

Komentáře

Přidávat komentáře můžou pouze přihlášení uživatelé.