Linux E X P R E S

Facebook

Komunikujeme a ukládáme data bezpečně s PGP/GPG (3) – šifrování a podepisování

zamek.png

Minule jsme generovali klíče, dnes se podíváme na jejich použití k šifrování, dešifrování, podepisování a kontrole podpisu.


Šifrování dat

Šifrovat data můžeme pro sebe nebo pro jiné uživatele. Šifrujeme-li pro sebe, je to jednoduché, protože příslušný veřejný klíč máme přímo k dispozici. Často ale potřebujeme zašifrovat data tak, aby je mohl dešifrovat někdo jiný – k tomu je ale třeba získat jeho veřejný klíč.

V minulém díle jste se už mohli něco málo dočíst, jak to udělat. V zásadě jsou dvě možnosti – buď se klíč předá bezpečnou cestou (například z ruky do ruky), nebo se předá libovolným způsobem (zveřejněním na webu, e-mailem, instant messagingem…) a bezpečnou cestou se ověří jen jeho otisk. Ten můžete například nadiktovat do telefonu nebo poslat v SMS.

Zmíněné komunikační kanály sice nejsou stoprocentně bezpečné (hlavně SMS), ale v praxi často postačují. Zásah do takové komunikace není zrovna snadný a zejména by ho musel provést tentýž útočník, který by pozměnil samotný klíč.

Klíč tedy máme, naimportujeme ho do úložiště (viz minulý díl) a můžeme ho začít používat k šifrování:

gpg -e -r uzivatel@nejakadomena_neco soubor.txt
gpg -e soubor.txt
gpg -e -o soubor.gpg soubor.txt

První příkaz zašifruje soubor s názvem soubor.txt klíčem uživatele uzivatel@nejakadomena_neco. Zašifrovaný soubor bude mít původní název s přidanou příponou gpg. Druhý příkaz se chová stejně, ovšem na uživatele se zeptá. A konečně třetí příkaz uloží zašifrovaná data do určeného souboru, místo aby název vytvořil automaticky.

Lze uvést více uživatelů (příjemců), pro něž se mají data zašifrovat, ať už přímo v příkazové řádce nebo při interaktivním zadávání. Výsledný soubor bude obsahovat všechny šifrované exempláře.

Potřebujete-li šifrovat více souborů, nestačí je bohužel zadat jako parametry přímo, musí se na to jít trochu jinak:

gpg -e -r uzivatel@nejakadomena_neco --multifile soubor.txt soubor2.txt soubor3.txt
gpg -e -r uzivatel@nejakadomena_neco --multifile *.txt

Celé to zafunguje, jako kdyby se příkazy spouštěly pro každý soubor zvlášť. První řádek ukazuje přímé zadání jednotlivých souborů, druhý pak použití „wildcards“ pro hromadné zašifrování.

GPG nikdy nepřepisuje soubory bez ptaní. Pokud odmítnete přepsání, zeptá se na název nového souboru.

Pokud chcete poslat zašifrovaný soubor přímo v těle e-mailové zprávy nebo třeba přes nějaký instant messaging, je potřeba ho mít v textové formě. To se – podobně jako u klíčů – zajistí převodem Base64 a ohraničením. I příslušný parametr je tu stejný:

gpg -e -a -r uzivatel@nejakadomena_neco soubor.txt

Při automatickém generování názvu výstupního souboru (kdy není určen explicitně) bude mít soubor příponu asc, nikoli gpg jako při uložení v binární podobě.

Výše uvedené příkazy mají jedno společné – do šifrovaných dat se uloží identifikátor klíče. Pak lze při dešifrování přímo vybrat vhodný klíč z úložiště. Současně může ale tento identifikátor číst kdokoli, kde se k datům dostane. Sice nedešifruje jejich obsah, může se ale dozvědět, pro koho jsou šifrována. To někdy nevadí, někdy však ano.

gpg -e -R uzivatel@nejakadomena_neco soubor.txt

Proto lze místo malého „r“ použít velké a GPG identifikátor klíče do dat neuloží. Výběr klíče pro dešifrování je tedy ztížen (je potřeba případně vyzkoušet více klíčů), ovšem dešifrování jako takové samozřejmě nijak omezeno není (program vyzkouší všechny klíče v úložišti, pokud se nezadá explicitně, který použít).



Dešifrování dat

Proces dešifrování je velmi podobný šifrování. Je k němu pochopitelně potřeba soukromý (tajný) klíč uživatele, pro kterého byla data zašifrována.

Pod minulým dílem seriálu se rozproudila diskuse, zda se v souvislosti s klíčem pro dešifrování (a podepisování) má hovořit o klíči soukromém nebo tajném. Dokumentace GPG používá důsledně termín „secret key“, tedy tajný klíč. Na druhou stranu mnozí kryptologové, podobně jako třeba specifikace některých standardů (např. PKCS#11) tento typ označuje jako „private key“, čili soukromý klíč, zatímco „secret key“ používají v případě symetrického šifrování.

Samotné dešifrování je snadné:

gpg -d soubor.txt.gpg
gpg -d soubor.txt.asc -o soubor2.txt
gpg -d --multifile soubor.txt.gpg soubor2.txt.gpg soubor3.txt.gpg

První příkaz dešifruje zadaný soubor, při dešifrování se zeptá na heslo klíči. Pozor, dešifrovaná data budou odeslána na standardní výstup, nikoli do souboru! Druhý příkaz uloží data do určeného souboru. Vstupem je zašifrovaný soubor v textové formě, GPG ho zpracuje transparentně (pozná sám, o který formát jde). Poslední příkaz dešifruje více souborů najednou, dešifrovaná data jsou uložena do souborů s názvy bez přípon označujících zašifrování. Pokud přípona gpg nebo asc chybí, dešifrování selže.

Podepisování dat

Podepsání dat zajistí, že si příjemce může ověřit jak identitu odesílatele (autora) dat, tak i jejich neporušenost. Podepisování lze použít samostatně nebo kombinovat se šifrováním. Pro podepisování se používá soukromý (tajný) klíč odesílatele, příjemce pak k ověření použije jeho veřejný klíč (který musí získat tak, jako kdyby chtěl pro odesílatele šifrovat – tedy bezpečným způsobem).

Podepisování se velmi podobá šifrování:

gpg -s -u autor@nejakadomena_neco soubor.txt
gpg -s -a -u autor@nejakadomena_neco -o soubor2.asc soubor.txt
gpg -s soubor.txt

První příkaz podepíše soubor pro uvedeného autora (GPG si vyžádá heslo ke klíči), uloží ho do souboru s přidanou příponou gpg. Druhý příkaz udělá totéž, ovšem použije textový výstupní formát a zadaný výstupní soubor. A konečně třetí příkaz funguje jako první, použije však výchozí klíč (buď definovaný v konfiguraci nebo první v pořadí v úložišti).

Problém uvedeného postupu spočívá v tom, že výsledný soubor není bez dalšího zpracování přímo použitelný k normální práci, podpis je zabudován přímo do něj. Je-li to nežádoucí, lze podpis uložit samostatně a příjemci pak předat či poslat oba soubory.

gpg -b -u autor@nejakadomena_neco soubor.txt

Postupuje se úplně stejně jako předtím, jen se změní parametr příkazové řádky (použije se „b“ místo „s“; vždy jsou samozřejmě možné i dlouhé tvary parametrů, které najdete v manuálu). GPG vytvoří soubor s podpisem, k názvu původního souboru přidá příponu sig.

Potřebujete-li soubor podepsat i zašifrovat, zkombinují se příslušné parametry dohromady:

gpg -s -e -u autor@nejakadomena_neco -r uzivatel@nejakadomena_neco soubor.txt

Kontrola podpisu

Ověření podpisu je ještě snazší než jeho vytvoření. Stačí GPG „předhodit“ podepsaný soubor:

gpg soubor.txt.gpg
gpg soubor.txt.sig
gpg --verify soubor.txt.gpg

První řádek ověří podpis a vyextrahuje původní soubor (ponese název soubor.txt). Druhý řádek pouze ověří samostatný podpis, k čemuž potřebuje nejen uvedený podpisový soubor, ale také původní soubor. Poslední řádek jen ověřuje podpis, původní soubor neextrahuje.

Potřebujeme-li ověřit podpis a dešifrovat zašifrovaný soubor, je to úplně stejné. Rozdíl bude jen v tom, že si GPG vyžádá heslo k tajnému (soukromému) klíči. Dešifruje pak zašifrovaná data a ověří podpis.

Speciality

Příští díl bude poslední, který bude věnován ovládání z příkazové řádky. Dostaneme se k některým specialitám, které s používáním GPG souvisejí.

Diskuze (3) Nahoru