přejít na obsah přejít na navigaci

Linux E X P R E S, Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů

Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů

zamek.png

Po minulém úvodu do problematiky je tady první praktická část. Podíváme se na to základní, tedy na nástroje GPG spouštěné z příkazové řádky, a to konkrétně na práci s klíči.


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@psvz_abcd>
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.

Nahoru

Příspěvky

Tomáš Crhonek Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
Tomáš Crhonek 25. 05. 2015, 14:26:06
Odpovědět  Odkaz 
"podepisování klíč tajný (soukromý)"

Výraz "tajný klíč" se používá pro klíč u symetrické kryptografie (kde je jen jeden klíč). U asymetrické kryptografie se používají pojmy: veřejný a soukromý klíč.
Lukáš Jelínek Re: Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
Lukáš Jelínek 25. 05. 2015, 14:43:49
Odpovědět  Odkaz 
To by mě zajímalo, kde je to takto definováno. Podle mě nikde a oba pojmy se používají synonymně (v různých vědeckých pracích apod.). Především ale přímo dokumentace GnuPG pracuje s označením "secret key" a nikoli "private key".
Tomáš Crhonek Re: Re: Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
Tomáš Crhonek 25. 05. 2015, 15:00:39
Odpovědět  Odkaz 
Kryptografie, alespoň ta česká, alespoň ta na crypto-world.info (Klíma, Rosa, Vondruška, Pinkava) to rozlišují tak jak jsem popsal. Možná je to jejich vlastní konvence. Mě na toto upozornil Pavel Vodruška. Ale dává mi smysl to rozlišovat zejména v textech, kde se kombinuje jak symetrická, tak asymetrická kryptografie (a je nutno pojmenovat celkem 3 klíče: tajný, veřejný, soukromý).
Re: Re: Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
Jaroslav Imrich 26. 05. 2015, 21:13:04
Odpovědět  Odkaz 
Napr. v PKCS#11 v2.20 kapitola 6.4: "The key may be a public key, a private key, or a secret key; each of these types of keys has subtypes for use in specific mechanisms."
Re: Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
Ivan Matus 1. 11. 2015, 19:05:38
Odpovědět  Odkaz 
Dobry den, aka je vseobecna prax pri ochrane private key. Z hladiska bezpecnosti je "vhodne" ulozit / archivovat v iCloud?
Dakujem
Lukáš Jelínek Re: Re: Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
Lukáš Jelínek 1. 11. 2015, 22:49:53
Odpovědět  Odkaz 
Dobrý den,
soukromý klíč by člověk "neměl vydat z ruky", neměl by ho tedy ani uložit do cloudu. Úplně optimální je, mít ho jen na hardwarových prostředcích (kartách, klíčenkách apod.), ze kterých ho nelze dostat ven. Práce s HW prostředky je ale poněkud složitější a ponechávám ji do pozdější fáze seriálu. I pokud se klíč ponechá v souboru, je lepší ho mít na nějaké flešce (lépe na několika; jedna se nechá pro používání a ty ostatní poslouží jako záloha, každá by měla být uložena na jiném bezpečném místě) a tu vložit do počítače až před použitím. Ponechání klíče na disku počítače je riskantnější.
Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
Ondřej Surý 27. 05. 2015, 07:18:40
Odpovědět  Odkaz 
Současná praxe pro "bezpečně" doporučuje vygenerovat k hlavnímu klíči subkeys, které se budou aktivně používat a hlavní "master" key odložit na bezpečné místo. Stejně tak v článku chybí informace o vygenerování revocation key, který má také přijít na bezpečné místo (ale pokud možno jiné než úložiště pro master key).

Stejně tak se dnes doporučuje nastavit všem klíčům expiration na rok až dva. Expiration se dá kdykoli změnit, a v případě, že by Vám klíč někdo ukradl, tak je to poměrně slušná "damage control", protože ten klíč časem vyšumí.

A nedomnívám se, že by tohle měla být "vyšší dívčí", ale naopak by to mělo být v základech práce s klíči. Tj. osobně bych doporučoval před článkem o používání zařadit díl o current best practice.

To samé platí 2048 velikost klíče - doporučená velikost u RSA klíče je 4096, louskání jde rychle dopředu a GPG klíče mají dlouhou životnost. To by nejlépe chtělo doplnit už v tomto článku. Plus informaci o tom, že DSA1024 a cokoli menšího než oněch RSA2048 nebrat a ani nepodepisovat.

A poslední věc, seznam používaných algoritmů upravit tak, aby nejprve používal silnější a pak slabší:

# when multiple digests are supported by all recipients, choose the strongest one:
personal-digest-preferences SHA512 SHA384 SHA256 SHA224

# preferences chosen for new keys should prioritize stronger algorithms:
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
Lukáš Jelínek Re: Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
Lukáš Jelínek 27. 05. 2015, 13:44:58
Odpovědět  Odkaz 
Děkuji za doplnění. Jinak seriál má být v první řadě pro začátečníky a mírně pokročilé, proto je nechci hned na počátku "lekat" věcmi, jako jsou úprava konfigurace. Podklíče a revokační klíče jsem plánoval na později. Current best practice by to určitě chtělo, ale rozhodně ne v této fázi. Opravdu mi nejde o to, nahrnout na čtenáře hned na začátku tunu informací, které mají sice smysl, ale mohou ho od používání GPG odradit právě kvůli té složitosti, kvůli které to dnes málokdo z běžných uživatelů používá.
Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
guest 28. 05. 2015, 23:29:36
Odpovědět  Odkaz 
Zajimavy serial, hodi se mi k tomu z minuleho roku na
http://arstechnica.com/information-technology/2014/02/how-to-run-your-own-e-mail-server-with-your-own-domain-part-1/

Souhlasim s prispevkem #Ondřej Surý, pouzivat tu nejsilnejsi velikost klice i na ukor rychlosti :)

Enigmail v nejaktualnejsi verzi funguje pouze s gpg2, ale nezajimal jsem se proc jestli by jste mohl zminit ze jsou dve verze a jejich rozdil v nekterym z pristich dilu. Predem diky.
Lukáš Jelínek Re: Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
Lukáš Jelínek 29. 05. 2015, 00:26:25
Odpovědět  Odkaz 
Na Enigmail samozřejmě také dojde ;-)
Re: Re: Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
Debian4Ever 30. 05. 2015, 11:27:40
Odpovědět  Odkaz 
A ve finale, mohl bys Lukasi nastinit jedno reseni pro ty "socky" :-D, ktere GnuPG/OpenPGP nepouzivaji, reseni, kdy muze de facto kazdy poslat spravu adresatu, ktery vlastni GnuPG/OpenPGP klic, pomoci rozhrani:
https://encrypt.to
A jako bonus pak ukazat, jak toto rozhrani si muze implementovat kazdy na svem webhostingu pro sve navstevniky ;-)
Diky.
Komunikujeme a ukládáme data bezpečně s PGP/GPG (2) – generování a import/export klíčů
davkol 29. 05. 2015, 20:31:55
Odpovědět  Odkaz 
Článek hezký, o tom žádná, ale který „začátečník nebo mírně pokročilý“ bude tohle martýrium podstupovat – a proč by to měl dělat?

Pokud jde o data, 7-Zip umí vytvářet šifrované archivy tak snadno, že to zvládne i moje babička.

V případě e-mailu… Třípísmenkoví šmíráci stále uvidí metadata; uživatel přijde o komfort moderního webmailu a musí se starat o uložení klíčů; v neposlední řadě, s kým vlastně komunikovat, když i protistrana musí absolvovat tu hrůzu s nastavováním, o výměně klíčů nemluvě? Nevšiml jsem si, že by aspoň instituce plošně aspoň podepisovaly zprávy.

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Lukáš Jelínek

Lukáš Jelínek

Dlouholetý člen autorského týmu LinuxEXPRESu a OpenOffice.cz. Vystudoval FEL ČVUT v oboru Výpočetní technika. Žije v Kutné Hoře, podniká v oblasti IT a zároveň pracuje v týmu projektu Turris. Ve volném čase rád fotografuje, natáčí a stříhá video, občas se věnuje powerkitingu a na prahu čtyřicítky začal hrát tenis.


  • Distribuce: Debian, Kubuntu, Linux Mint
  • Grafické prostředí: KDE

| proč linux | blog