Hlavní navigace

GPG: bezpečné předávání souborů

18. 12. 2009
Doba čtení: 5 minut

Sdílet

Hlavní doménou OpenPGP je komunikace a často při komunikaci potřebujeme předat nějaký dokument, nákres nebo jiný důležitý soubor, a když už nejde o komunikaci, můžeme třeba jen ukrýt důležité informace. Proto si dnes ukážeme, jak udržet dokument v tajnosti a navíc bezpečně digitálně podepsaný.

Pro nějakou firemní komunikaci, ať už půjde o více či méně bezpečný kanál („můžeš mu prosím tě odnést tuhle flashku“), je vhodné použít alespoň nějakou formu šifrování. Pomocí programu gpg, můžeme šifrovat jak pro někoho, kdo zná heslo, tak pro někoho jehož klíč máme. Nemusíme tedy nezbytně nutně se shánět po jeho klíči, pokud se s druhou stranou bezpečně dohodneme na heslu. Takovýto postup je bezpečnější než klíče povalující se na různých webových stránkách jejich majitelů. Na druhou stranu, když už máme možnost si někoho takovýmto způsobem ověřit, tak ověření pravosti klíče bude univerzálnější než předání hesla. Každopádně tu možnost je a musíme o ní vědět.

Šifrování souborů se provádí podobně jako šifrování e-mailů. Napsání „gpg -e“ s dalšími parametry, případně nějakým rourami okolo, se spustí šifrování symetrickou šifrou. Pokud místo „-e“, použijeme „-c“, tak u symetrické šifry to končí a my si pouze zvolíme heslo, které se pro symetrické šifrování použije. To by samozřejmě mělo být dostatečně dlouhé a „náhodné“. S parametrem „-e“ budeme data směrovat na nějaký veřejný klíč druhé osoby. V tomto případě se symetrická šifra také použije, ale heslo se náhodně vygeneruje a posléze se veřejným klíčem zašifruje. Krom toho, že tento postup ulehčí diskům, tak i procesoru. Hlavní důvod, proč se data nešifrují nesymetrickou šifrou přímo, je právě rychlost, která je u symetrické několikrát, ne-li několiksetkrát vět­ší.

Je na vás, co si pro komunikaci vyberete, ale je lepší pracovat s veřejnými klíči než vlastnit několik desítek, stovek nebo i tisíce hesel, ke každé komunikaci.

Řádka

Příkazová řádka nám otevírá cestu k oběma popsaným případům a abychom byli opravdu důslední, tak bychom měli přidat navíc ještě podpis, který bude stvrzovat, že dokument je od nás a že se cestou někým nebo něčím nezměnil. Ať už nevinně např. při chybě přenosu nebo více závažně někým.

Začneme jednoduchým šifrováním. Jak už jsme si řekli, tak to se dělá přes parametr -e. K němu je dobré ještě něco málo přidat, např. aby se nám do výstupu nepletly netisknutelné znaky. Začneme tedy jednoduchým příkladem:

$ echo "Tajná zpráva." | gpg -e -a 

Rourou předáváme text programu gpg, který ho podle parametru -e zašifruje a podle parametru -a ho hodí do čitelných znaků. Můžete si zkusit parametr -a oddělat a uvidíte se co se stane. Další možností je přesměrovat výstup rourou ven nebo použít parametr –output a uložit výstup do souboru podobně jako když napíšeme „> soubor.gpg“. Pokud potřebujeme zašifrovat soubor, připíšeme jeho název za zadané parametry.

Dešifrování se provádí podobně a dokonce to je i výchozí chování gpg, takže použití parametru -d, který toto chování reprezentuje, je zbytečné. Vstup a výstup dat je řešen podobně u šifrování.

$ cat zasifrovany_soubor.gpg | gpg
$ gpg zasifrovany_soubor.gpg 

Obě zadání rozšifrují soubor, ale chovají se malinko jinak. Po spuštění budete u obou dotázáni na heslo a v druhém pravděpodobně ještě na název souboru pro rozšifrovaná data. První případ je vhodný, pokud potřebujeme data předat dál rourou nebo použít > pro výstup do souboru. Druhý případ se hodí tam, kde chceme uložit data opět do nějakého souboru.

Další ukázka se bude věnovat symetrické šifře.

$ echo "Tajná zpráva." | gpg -c -a 

Použití je prakticky stejné jako u šifrování pro veřejný klíč, pouze parametr -e nahradíme parametrem -c. Po spuštění budeme dotázání na heslo, které poté sdělíme bezpečnou cestou druhé straně, které pak můžeme nebezpečnou cestou poslat zašifrovaná data.

Rozšifrování se opět provádí buď s gpg bez parametru nebo s „gpg -d“.

Jelikož se u obou případů používá symetrická šifra, možná dostanete chuť nahradit aktuálně nastavený algoritmus jiným algoritmem. Podporované šifrovací algoritmy zjistíme zadáním:

$ gpg --version
[...]
Šifra: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
[...] 

V mém případě se jako výchozí používá CAST5, ale to se dá změnit např. parametrem –personal-cipher-preferences.

$ echo "Tajná zpráva." | gpg -c -a --personal-cipher-preferences AES256 

Všechny podobně odesílané soubory ještě můžeme opatřit naším podpisem, takže vždy budeme vědět že je dokument pravý a nezměněný.

$ echo "Tajná zpráva." | gpg -c -a -s 

O jeho pravosti se příjemce dozví při rozšifrování automaticky.

Pro úplnost ještě uvedu samotné podepisování souborů bez jejich šifrování. K tomu se používá parametr -s, většinou doplněný opět parametrem -a, který z podpisu udělá čitelný „čaj“. Podpisem stvrzujeme pravost souboru a také tím zaručíme, že se po cestě nějak nezměnil. Je tak ve většině případů dostatečným zabezpečením. Ne všechna data jsou tajná, ale téměř žádná by neměla být měněna bez vědomí autora.

$ gpg -s -a soubor.txt 

Po spuštění budeme dotázání na heslo k soukromému klíči a nakonec dostaneme nový soubor s příponou .asc, případně .gpg pokud vynecháme parametr -a. Ten pak můžeme použít na ověření.

$ gpg --verify soubor.txt.asc 

Případně i bez parametru.

$ gpg soubor.txt.asc 

Součástí nového souboru je v tomto případě i obsah toho starého. Pokud nám stačí jen podpis bez dat, použijeme parametr -b.

$ gpg -s -a -b soubor.txt 

Podpis si pak můžeme ověřit stejným způsobem. Nakonec uvedu příklady správného a porušeného souboru.

Věrohodný podpis:

gpg: Podpis vytvořen Čt 17. prosinec 2009, 10:47:19 CET pomocí klíče DSA s ID uživatele C55A0172
gpg: Dobrý podpis od "Adam Štrauch <cx@initd.cz>"
gpg:                 alias "Adam Štrauch <adam.strauch@iinfo.cz>"
gpg:                 alias "Adam Štrauch <creckx@gmail.com>"
gpg:                 alias "[jpeg image of size 5173]"
gpg:                 alias "Adam Štrauch <cx@dev-it.org>" 

Nevěrohodný podpis, poškozený nebo jinak změněný původní soubor či podpis:

ict ve školství 24

gpg: Podpis vytvořen Čt 17. prosinec 2009, 10:47:19 CET pomocí klíče DSA s ID uživatele C55A0172
gpg: ŠPATNÝ podpis od "Adam Štrauch <cx@initd.cz>" 

 Závěr

Šifrování souborů asi nebude nejčastějším použitím GnuPG, ale je dobré ho znát nebo alespoň vědět kde najít návod pro případ, že se použití naskytne. S lidmi, kteří odmítají mít vlastní klíč, můžete použít symetrické šifrování. Častěji možná použijete podepisování.

V příštím díle se podíváme na grafické utilitky a pluginy do různých programů, které umí všechno to co jsme si popsali na jeden až dva kliky. Tohle byl poslední letošní díl o GnuPG, protože na následující dva pátky připadá svátek. Doufám, že nezapomenete podepsat vánoční přání…

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ů.