|_ Penguin _|
O serveru
Sponzoři
Síň slávy
Backendy, PDA, text
Přidat k oblíbeným
Sidebar: Mozilla, Opera
Domovské stránky
Pošta
Kalendář
Tučňáci
Czech HOWTO
Překladatelské stránky
Návody (HOWTO)
Zátah na hackery
Novinky o debianu
Security announce
Názory
Software
Odkazy CZ/SK
Odkazy US
Noviny  Časopisy
Knihy
|_ Hosted Sites _|
CB.penguin.cz
CVS server
ListServer
Unix versus NT
GRAD
UTX
OWSKiller
PUK - klub uživatelů Penguina
Scriptová Banka
Linux na slabých strojích
|_ Vyhledávání _|
|_ Novinky _|
Nejnovější komentáře:
Diskuse RSS

Jan: Doporučení
Erik: Internet a jeho využití
Georgiy: Нужен срочно товар оп
Georgiy: Нужен срочно товар оп
Sleep_Walker: moje zkusenosti
Logout: Dotykáč

Nejčtenější v uplynulých 30 dnech:

Nejkomentovanější v uplynulých 30 dnech:

 

Připojeno k GTS
Logo serveru Penguin
 
MULTIFUNKČNÍ TISKÁRNY

  Zpět na Novinky
GnuPg
hondza (12.04.2004 03:00:02, 23844/22)


O pgp toho jiz bylo napsano dost. Kolik lidi jej ale opravdu pouziva pro podepisovani sve emailove komunikace? Malo. Je tedy potreba je vzdelavat, pojdme tedy primo na vec.


Obsah


Co to?

Ahoj! Následující článek se týká programu GnuPG (GNU Privacy Guard). GnuPG (dále jen GPG) je skvělý GNU program na hybridní šifrování, odpovídající standardu OpenPGP. Je to vlastně free open-source program podobných vlastností jako PGP (Pretty Good Privacy), ale IMHO lepší.

Ještě před popisem GPG je třeba trochu objasnit určité základní pojmy v šifrování. Doufám, že následující odstavce nejsou jen prázdné plky.

Hašovací algoritmy

Hašování je jednocestné šifrování: můžu tedy zašifrovat, ale dešifrovat už nikoli. Už vás slyším, jak se ptáte: "K čemu to?". Inu, ne vždy potřebujete zašifrovaná data zpět, ne vždy se to hodí. Hašovací algoritmy prostě z plaintextu udělají haš, tedy takový téměř jednoznačný popis.

Používá se to například pro hesla v linuxu (soubor /etc/shadow). Tam se ukládají hesla v hašované formě. Když se vás systém zeptá na heslo, vytvoří se jeho haš a ta se následně porovná s haší, co je v /etc/shadow. To je docela šikovné kvůli tomu, že i když někdo ví haš vašeho hesla, neví vaše heslo (které může být v mnoha ohledech cennější...).

Haše se také používají k vytváření sumů souborů (např. stáhnete nějaký .iso soubor velký 700 MiB a chcete vědět, jestli se stáhl celý v pořádku. Vystavovatel oněch .iso souborů má obvykle soubor obsahující sumy těchto souborů (obvykle soubot md5sums.txt ap.). Na vás je jen, abyste si vytvořili haše stáhnutých souborů a porovnali s vystavovanými. Pokud jsou stejné, jsou stáhnuté soubory v pořádku. Nebo použijete md5sum a ten to udělá za vás :->.

/* Jen menší poznámka: haš MD5 už není nejnovější a je jen 128bitová (neplést s bitovostí symetrických šifer), což v dnešní době není moc. Dnes se spíš doporučují haše se 160 nebo více (256, 384, 512) bity - například SHA1, RIPEMD-160, SHA256, SHA384, SHA512. */

Symetrické šifrování

Symetrické (konvenční) šifrování je "to normální" šifrování, které si každý dokáže normálně představit. Prostě se vezmou nešifrovaná data (plaintext), vezme se klíč/heslo (to se ale většinou ještě předtím zhašuje, aby funkci lépe chutnalo) a pomocí nějakých "zázračných" algoritmů (jako DES, AES, blowfish, twofish...) se to dovede do stavu šifrovaného (ciphertext).

Celá bezpečnost závisí jen na hesle a kvalitě použitého algoritmu. Pokud tedy znám heslo nebo umím cracknout daný algoritmus (jaká to náhoda), dokážu plaintext získat.

Dnes se standardně používají 128bitové symetrické šifry a pokládají se za bezpečné. Někdo (nechtějte ode mě vědět kdo) kdysi prohlásil, že na rozluštění jediné zprávy zašifrované 128bitovou šifrou nebude stačit křemík celého vesmíru. Já nevím, mně by stačilo, kdyby to vydrželo takových 20 let, pak už stejně asi budou má supertajná data k ničemu.

Výhoda symetrického šifrování je v tom, že je celkem dost rychlé (dokonce se vyrábějí hardwarové karty do PC a pak je to šifrování fakt móóóóc rychlé).

Tři pro mě nejznámější programy umožňující symetrické šifrování: mcrypt, GnuPG, OpenSSL (to je sice primárně na něco trochu jiného, ale umí i samostatné symetrické šifrování - a to dokonce nejrychleji, jsou tam šílené optimalizace v assembleru).

Asymetrické šifrování

Asymetrické šifrování na to šlo trošku jinak. Základem jsou dva různé klíče: jedním šifruji a kontroluji podpisy, druhým dešifruji a podpisy vytvářím.

Tím prvním je veřejný klíč, který je, už podle názvu, veřejný, a tím pádem je šikovné ho umisťovat na své homepage; kdyby vám nějací paranoiou posedlí lidé (toho jsem schopný i já ;->) chtěli poslat dopis, mohou použít váš klíč. Veřejným klíčem se tedy šifruje a kontroluje podpis (podpis viz dále). Tento nemusíte nikde schovávat, neměl by útočníkovi bažícím po vašich datech nijak při crackování ciphertextu pomoci.

Druhý klíč je soukromý. Ten si naopak hlídejte jako koule v trenkách. Tímto klíčem se vytváří podpisy a dešifruje. Soukromý klíč se nesmí dostat do nepovolaných rukou (tady ta analogie s koulem[ia] ;->). Pokud by se tomu tak stalo, stálo by mezi útočníkem a plaintextem jen heslo pro váš klíč (tj. nejslabší článek řetězu).

Takže se jmenuju Igor a chci se dopisovat se strýčkem Ivanem (samozřejmě to jsou extradůležitá a supertajná data, jako že kamarádka Ira má narozeniny a tak...). Oba musí mít vytvořený klíč. Ivan pošle Igorovi svůj veřejný (!) klíč a ten mu na oplátku pošle ten svůj. Je důležité, aby se přenos klíčů udál nějakým bezpečným způsobem (hrozí totiž metoda man-in-the-middle, kde by útočník sledoval komunikaci a při výměně klíčů podstrčil ty své "pravé"...).

Teď, když chce Igor Ivanovi napsat dopis, tak ho napíše, zašifruje Ivanovým veřejným klíčem (popřípadě ještě podepíše svým soukromým klíčem, aby potvrdil autenticitu) a pošle ho. Ivanovi dopis dojde, rozšifruje ho svým soukromým klíčem (popřípadě ještě Igorovým veřejným klíčem ověří podpis, pokud ho Igor vytvořil) a je to. Ivan už tedy ví, že Ira má zítra narozeniny ;->.

Fingerprint?

Co to sem cpu? Něco okolo daktiloskopie? Ne-e! Fingerprint (otisk prstu) v GPG se naprosto netýká prstů jako takových, ale unikátnosti. Každý klíč (respektive keypair) má svou jednoznačnou identifikaci, tzv. fingerprint. Znamená to, že by žádné dva klíče na světě neměly nikdy mít stejný fingerprint. Neměly by mít - to neznamená nemůžou mít! Jelikož fingerprint je číslo o pevné velikosti (pevný počet bitů), je tudíž shora omezen.

Podle fingerprintu byste měli být schopni ověřit unikátnost klíče. Například Igor pošle Ivanovi klíč. Potom mu zatelefonuje a nadiktuje fingerprint svého klíče. Ivan jeho hlas pozná a zjistí, že udávaný fingerprint a fingerprint přijatého klíče souhlasí. Komunikace tedy může začít.

Co ten podpis?

V předešlém textu jsem se několikrát jemně otřel o termín podepsat zprávu. Co to je? To jako napsat tam svoje jméno. NE! Elektronickým podpisem si můžu ověřit, že zprávu (data), kterou podepsal Igor, opravdu napsal Igor (nebo někdo, kdo má přístup k Igorovu soukromému klíči a zná heslo; nebo někdo, komu se podařilo položit asymetrické šifrování na kolena). Podpis je vlastně otisk zprávy (haš), který je nějakým fatálním způsobem "zašifrovaný" soukromým klíčem a dá se dešifrovat klíčem veřejným. Je to prostě nějaká fakt extrémní matematika, a protože já matice moc nehovím, nebudu to objasňovat (nevím to...). Důležité je, že to funguje.

Co je tedy GPG?

GnuPG je hybridní systém pro šifrování a elektronický podpis. Hybridní proto, že využívá výhod obou druhů šifrování. Ze symetrického se bere rychlost, z asymetrického oddělení na veřejný a soukromý klíč.

GPG vzniklo jako free (free jako freedom) alternativa k programu PGP, který není možno zdarma používat pro komerční účely. PGP vzniklo někdy kolem roku 1991 jako program Philla Zimmermanna, který si chtěl soukromě dopisovat se svými přáteli. Tehdy to byl ještě dosový program, u kterého byly dostupné zdrojáky. Postupně rostli nové verze, až PGP zkomerčnělo. Tedy bylo volně (tj. zdarma) k dispozici pro nekomerční účely, pro ty komerční se muselo platit.

To se pravděpodobně nelíbilo Werneru Kochovi. Tak začal v roce 1998 pracovat na GPG. Teď z toho je jeden z předních GNU programů a pracuje na něm celkem dost lidí (a má i české locales...). Za svojí historii v sobě GPG nemělo nějak moc kritických chyb, nyní se dá říct, že je to dost stabilní a ověřený program (alespoň z mého pohledu).

GPG je command-line program - a to je dobře! Že se vám to nelíbí? Nevím proč, jedině pomocí komandlajny můžete GPG dokonale ovládat. Na jeho opšny se dá celkem rychle zvyknout a po několika dnech je budete psát po paměti... Ale pro nenapravitelné klikaře snad už existují i klikací rozhraní pro GPG, ale já o nich nic nevím - jsem věrný konzoli.

Existuje jistý standard jménem OpenPGP, který popisuje, co by každý OpenPGP compliant program měl obsahovat, umět... GPG ho skoro do puntíku dodržuje (ba co víc, dokonce rozšiřuje...). Ten puntík by mohla být švýcarská (symetrická) šifra IDEA, která není pro komerční použití volně dostupná, tudíž jí GPL program jako GPG samozřejmě nemůže obsahovat. Existují ale moduly k GPG, které IDEU přidávají. Já jí nikdy nepoužil.

/* Podobný problém byl kdysi s asymetrickým algoritmem RSA, který podléhal patentu. Ten ale 2000-09-20 vypršel (2000-09-06 ho ale firma RSA Data Security dala veřejnosti jako public domain). */

GPG podporuje vytváření DH klíčů stejně jako RSA klíčů. DH klíčů je ale na veřejnosti o dost víc. Ze symetrických šifer nabízí tyto: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, DUMMY. Umí pracovat s následujícími hašovacími algoritmy: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512 a zvládá tři druhy komprese (komprese vlastně dva...): NONE, ZIP, ZLIB. V blízké budoucnosti přibude ještě podpora BZIP2 komprese (ve verzi 1.2.4 je testovací). DUMMY šifra nešifruje, což se může hodit pro developery, kteří potřebují odladit část programu (nebo pro mě, protože se v takových věcech rád šťourám).

Jedeme

Takže teď předpokládám, že jste si obstarali nějakou ne obstarožní verzi GPG a nainstalovali ji (bývá ve většině linuxových distribucí a je dostupná pro většinu free unixů jako OpenBSD, FreeBSD a dokonce je verze i pro win32 - docela se divím, že si s verzí pro winy někdo dává práci...).

Teď je potřeba vytvořit si svůj pár klíčů (keypair). Napište:

----------------------------------------
gpg --gen-key
----------------------------------------

Následně si s vámi bude program povídat (novější verze programu při správně nastavených locales dokonce česky!) o tom, jaký druh klíče chcete (doporučuji 1), dále bude chtít vědět požadovanou délku klíče (doporučuji 2048, víc snad ani není potřeba). Teď už nastává otázka na zamyšlení: délka platnosti klíče. Je to na vás. Pokud si myslíte, že vám tento hlavní klíč vydrží fakt dlouho, dejte neomezeně (tj. 0), jinak si můžete vybrat délku trvání.

Po potvrzení a zadání jména klíče, emailové adresy a případně komentáře už bude chtít program heslo. Dobře si heslo rozmyslete. Pokud by se někdo dostal k vašemu soukr. klíči, chrání vás před únikem dat už jen a právě toto heslo. Takže mu věnujte extrémní pozornost (heslo k soukromému klíči se dá i potom změnit). Po potvrzení hesla se už začne keypair generovat. Pro generování klíče je potřeba entropie, není tedy na škodu sběrači náhodných dat trochu pomoct lehkým laskáním klávesnice něžnými údery do kláves :->.

Takže, teď mají Igor i Ivan vytvořené klíče. Teď musí Igor vyexportovat svůj klíč a poslat ho Ivanovi.

----------------------------------------
gpg --export -a igor > igor_key.asc 
----------------------------------------

Tento příkaz vytvořil textový soubor igor_key.asc, který obsahuje Igorův klíč. Teď ho musí Igor poslat Ivanovi (a Ivan samozřejmě musí udělat to samé).

Takže, Igor se dostal k soubor ivan_key.asc, těď potřebuje klíč naimportovat.

----------------------------------------
gpg --import ivan_key.asc
----------------------------------------

Klíč byl naimportován. Teď není na škodu dát klíči určitou důvěru. GPG se řídí systémem zvaným web of trust (česky pavučina důvěry). V praxi to znamená, že šifrovat by se mělo klíčem, který má alespoň částečnou důvěru (marginal trust). Částečnou důvěru má klíč, u kterého věřím, že je pravý, ale nevěřím tímto klíčem podepsaných klíčům. Prostě pokud by by Ivanův veřejný klíč podepsán kromě sám sebou třeba ještě Miguelovým klíčem, a já Miguelovi nevěřím (jeho klíč má u mně částečnou nebo žádnou důvěru), byl by pro mě Ivanův klíč nedůvěryhodný. Pokud bych ale Miguelovi věřil (tj. jeho klíč by u mě měl plnou důvěru), byl by pro mě Ivanův klíč důvěryhodný. Prostě, aby mohl Igor šifrovat Ivanovým klíčem je potřeba, aby byl podepsaný někým důvěryhodným. Pokud není a Igor jeho klíči věří (tj. např. po telefonu Ivan mu nadiktoval fingerprint jeho klíče), může ho podepsat svým soukromým klíčem.

----------------------------------------
gpg --edit-key ivan
> sign
> 0
> y
> lskfr4nfs  # ted proste zadejte heslo k vasemu klici 
> save
----------------------------------------

Teď je klíč podepsaný Igorem, může mu být tedy udělena důvěra.

----------------------------------------
gpg --edit-key ivan
> trust
> 3 nebo 4   # ted se zada duvera
> save
----------------------------------------

Navrhuji dát Ivanovu klíči částečnou důvěru (tj. věřím jeho klíči, ale nevěřím klíčům Ivanem podepsaným).

Předpokládám, že Ivan udělal předcházející analogicky s Igorovým klíčem. Nic tedy Igorovi nebrání poslat svůj Ivanovi svá první šifrovaná data.

----------------------------------------
gpg -e -r ivan -o tajne.gpg tajne.txt
----------------------------------------

Toto zašifruje soubor tajne.txt Ivanovým klíčem a ciphertext uloží do souboru tajne.gpg. Parametr -e znamená zašifrovat, -r značí klíč použitý k zašifrování, -o specifikuje výstupní soubor.

Soubor tajne.gpg teď může Igor Ivanovi poslat. Kvůli tomu, že byl soubor zašifrován jen Ivanovým klíčem, nemůže ho dokonce ani Igor už rozšifrovat. Pokud by chtěl, musel by soubor zašifrovat více klíči najednou.

Šifrování více klíči

Jelikož je GPG hybridní šifrovací systém, mohou se jedna data zašifrovat najednou více klíči. Např. Igor posílá dopis a zašifruje ho klíčem svým, Ivanovým a Miguelovým:

----------------------------------------
gpg -e -r igor -r ivan -r miguel -o tajne.gpg tajne.txt
----------------------------------------

Jak je to možné? Jednoduše! U hybridního šifrování se totiž data samotná šifrují symetrickou šifrou. Asymetricky se šifruje jen tzv. session key (klíč sezení). Session key je vlastně dost velké náhodné číslo (třeba 256bajtové). Toto číslo (vlastně klíč pro symetrickou šifru) se zašifruje asymetricky. Pokud tedy zašifruju plaintext a zadám více klíčů, bude stejný klíč klíč (heslo) zašifrováno i asymetrickou šifrou klíči všech, kdo jsou vybráni. Jasné? Jestli ne, jednodušeji: náhodné číslo (heslo pro symetrickou šifru, kterou je zpráva ve skutečnosti zašifrovaná) se asym. zašifruje Ivanovým, Igorovým a nakonec i Miguelovým klíčem. Za každý klíč naroste délka výstupního souboru přibližně o čtvrt kilobajtu (ať už je vstupní soubor velký jakkoli...). Kdokoli z této trojice je schopen zprávu rozšifrovat.

Takže, Ivanovi přišel od Igora soubor tajne.gpg. Co s tím? No přece rozšifrovat:

----------------------------------------
gpg -d -o tajne.txt tajne.gpg
----------------------------------------

Po zadání správného hesla se na něj usměje nový soubor tajne.txt, který obsahuje onu převelice tajnou zprávu.

Komunikace mezi Igorem a Ivanem proběhla úspěšně, až na takový malý detail. Ivan si nemůže být jistý, že soubor, který obdržel, je opravdu od Igora. Někdo přece mohl dopis podstrčit (to není tak těžké, Ivan mohl svůj veřejný klíč vystavit a někdo to tím klíčem jen zašifrovat...) a simulovat tím Igora. Co Ivan zmůže?

Teď už nic. Ale propříště Igor svůj dopis se šifrováním taky podepíše. Tím pádem si bude moct být Ivan jistý, že soubor poslal opravdu Igor (nebo ten, kdo má přístup k Igorovu soukromému klíči a ví heslo). Jak tedy na to?

----------------------------------------
gpg -es -r ivan -u igor -o tajne.gpg tajne.txt
----------------------------------------

Jde z toho vidět, že parametr -s znamená podpis. Klíč, kterým se bude podepisovat, určuje buď konfigurační soubor (~/.gnupg/gpg.conf) nebo opšna -u. U podepisovacího klíče musí být samozřejmě dostupný soukromý klíč.

Když si později Ivan soubor rozšifruje, podpis se zkontroluje, a pokud souhlasí, napíše to. Pak už si bude moci být Ivan jistý a bude moci klidně spát ;->

Igor taky samozřejmě může soubor jen podepsat. To je v případech, kdy nevadí, když to někdo uvidí, ale je důležité, aby se dala ověřit pravost.

Jedeme dál

Maily

V tomto okamžiku už si Igor s Ivanem mezi sebou můžou posílat šifrované (a podepsané) soubory (dopisy). Posílat ale dopisy tímto způsobem (jako zašifrované soubory) není nejefektivnější. Skvělé by bylo, kdyby mohl posílat šifrované maily. Proč ne? Nemálo mailerů už podporu GPG (nebo PGP) má zabudovanou. Sám můžu mluvit jen za mutt, což je mailer, u kterého snad není nic, co by se nedalo konfigurovat. Pořádně ho sice nepoužívám (na net se dostanu jen ze školy :-<), ale to, co jsem v něm zkoušel, bylo skvělé. Zpět k GPG. Mutt má GPG podporu úplně v pohodě. Po napsání dopisu se a následném stisku p nabídne, jestli mail chceme zašifrovat, podepsat, obojí, nebo nic. Prostě rychlovka. Taky když vám dojde šifrovaný/podepsaný mail, hned nabídne rozšifrování/ověří podpis.

Pípa

Jako každý správně vychovaný unixový program umí i GPG pracovat s pípou (pipe). Například šifrování stdin na stdout je dost intuitivní:

----------------------------------------
echo 'tady neco mas' | gpg -er ivan 
----------------------------------------

Ukázka zašifrování a následného rozšifrování:

----------------------------------------
echo 'tady neco mas' | gpg -er igor | gpg -d
----------------------------------------

Komprese

Další fičurka je komprese. Její hlavní účel kupodivu (teď bez ironie) není na snížení objemu dat. Jde tam o praktické zesílení síly šifrování, protože komprese silně snižuje redundanci (opakování, nadbytečnost) dat. Redundantní data lépe podléhají kryptoanalýze (postup pro zlomení šifry). Takže zkomprimováním se zabijí dvě mouchy jednou ranou: sníží se redundance a taky (obvykle) velikost dat.

Kompresi řídí opšna -z, jejíž číselný parametr určuje kompresní úroveň. Je to interval <0;9>. 0 znamená bez komprese. Naopak 9 je maximální komprese.

Jen symetrické šifrování

GPG umožňuje šifrovat i pouze symetricky. Občas se může hodit zašifrovat soubor a neplést do toho klíče. Od toho tady je volba -c:

----------------------------------------
echo 'nejaky text' | gpg -c
----------------------------------------

Program se zeptá na heslo (samozřejmě dvakrát). Použitý algoritmus si můžeme vybrat pomocí opšny --cipher-algo:

----------------------------------------
echo 'nejaky text' | gpg -c --cipher-algo blowfish
----------------------------------------

Podobným způsobem se může měnit i na heslo použitý hašovací algoritmus (--digest-algo) nebo kompresní funkce (--compress-algo). Jejich seznam získáte příkazem gpg --version.

Hrátky s klíči

Seznam klíčů se dá získat příkazem gpg --list-keys.

Editace klíče. Někdy se může hodit si svůj klíč trochu upravit. Používá se k tomu gpg --edit-key jmeno_klice. S tím už jste se setkali, když jsme upravovali Ivanův klíč tím, že jsme ho podepisovali a nastavovali mu důvěru.

Kromě toho se dají u klíče, jehož jsme majiteli (tj. máme celý keypair), měnit i jiné věci. Například se můžou přidávat a ubírat podklíče (subkeys).

Podklíče

Podklíč je je klíč patřící k hlavnímu keypairu. Můžete jich u jednoho keypairu mít víc. Často se klíče dělají tak, že se vytvoří jeden nikdy nekončící keypair a k tomu se postupně přidávají časově omezené podklíče.

K čemu to? Čím více dat je šifrovaných jedním a tím samým klíčem (podklíčem), tím větší je riziko prolomení šifry. Proto se často vytvářejí podklíče s třeba dvouletou trvanlivostí a co dva roky se dělají nové. Výhoda podklíče oproti normálnímu klíči je v tom, že masterkey (nikdy nekončící klíč, kterým podepisujeme podklíče) je vždy stejný a proto se podklíče distribuují dost jednoduše (prostě se znovu vyexpoertuje klíč, na cílovém počítači se naimportuje a při šifrování se vždy vybírá nejnovější podklíč).

Jak tedy vytvořit podklíč?

----------------------------------------
gpg --edit-key igor
> addkey         # potom zadejte heslo
> 3 nebo 5       # chceme vytvorit sifrovaci podklic
> 2048           # mnou doporucena delka klice
> 1y             # klic bude platit jeden ro(c)k
> y              # potvrzeni
> y              # dalsi potvrzeni
> save           # aby se klic ulozil
----------------------------------------

Dále můžeme pomocí delkey podklíč smazat.

Heslo

Příkazem passwd můžeme změnit heslo k soukromému klíči nebo dvojným zadáním prázdného hesla heslo zrušit (nedoporučuju!).

adduid

Pomocí adduid a deluid můžete vytvořit/smazat "jména" klíče. Základní jméno už jste zadávali při vytváření klíče. Teď ale třeba chcete přidat jméno s vaší alternativní mailovou adresou. K tomu se právě používá adduid. Dál se o tom rozepisovat nebudu, protože to je fakt dost jednoduché.

Revokace

Nastala doba vysvětlit si, co je to revokace. Situace: vytvořili jste si nový podklíč a už nechcete, aby vám někdo posílal data šifrovaná starým podklíčem. Tady pomůže revokace. Pomocí key cislo_podklice si vyberete, se kterým podklíčem chcete pracovat a pak pomocí revkey a následných odpovědí a save klíč revokujete. Nyní musíte opět klíč exportovat a donutit své "dopisovatele", aby upgradovaný klíč importovali.

pref, showpref, setpref a updpref

Tyto tři příkazy jsou už pro pokročilé. pref vypíše preference klíče (nebo uid...). showpref udělá to samé, akorát v lidštějším formátu. setpref parametry klíče nastavuje. a nokonec updpref a následný save změny do klíče promítají.

Preference nastavují prioritu šifrovacích algoritmů, haší a kompresních algoritmů. Pokud třeba máte rádi blowfish a chcete, aby, když vám někdo bude posílat šifrovaný dopis, použil právě tento algoritmus, musíte blowfishi (blowfishovi ;->) nastavit větší prioritu (teda spiš ho postavit víc dopředu...).

Nejdřív si musíte zjistit čísla šifer, haší a kompresních algoritmů.

----------------------------------------
gpg -v --version
----------------------------------------

Čísla šifer (a haší...) jsou v závorkách. Zkusme se podívat, co nám vypíše pref.

----------------------------------------
S9 S8 S7 S3 S2 H2 H3 Z1 [mdc]
----------------------------------------

mdc flag budeme proteď ignorovat. Jak vidno, je v tom určitý systém. Předpona S značí šifru. Tak jak jdou za sebou, taková je jejich priorita (nejvyšší má tedy šifra 9, což je AES256). H znamená haš. No a Z jsou kompresní algoritmy.

Váš setpref ted může vypadat takto (pro milovaný blowfish):

----------------------------------------
setpref S4 S9 S8 S7 S3 S2 H2 H3 H1 Z1
----------------------------------------

Aby se změny na klíči opravdu promítly, musíte provést updpref (bude se ptát na heslo) a save.

/* Btw, mdc je šikovná věcička (u nových verzí GPG implicitně zapnutá). Ke každým zašifrovaným datům přidá malý otisk (haš) těchto šifrovaných dat (něco jako CRCčko). Při rozšifrovávání se pak dá poznat, jestli se soubor cestou nezměnil (buď chybou či úmyslem někoho ne zrovna hodného...). */

Armor

gpg --enarmor nešifruje, pouze kóduje. Prostě z binárky udělá textový soubor (ve formátu radix), který se pak dá bezpečně poslat jako součást mailu (nemyslím přílohu!). Přesně opačnou funkci má gpg --dearmor.

print-md

Zajímavá je též funkce print-md, což vypíše haš zadaaného soubor[uů]. Použití:

----------------------------------------
gpg --with-colons --print-md sha1 nejaky_soubor
----------------------------------------

Vypíše to otisk souboru (použitá byla haš SHA1). Opšna --with-colons ovlivní výstup: ten bude lépe strukturovaný a tím pádem jednodušeji parsovatelný. Samozřejmě se dají udělat skripty na automatizaci tohoto postupu, na ověřování...

Textový výstup

Ať už šifrujete nebo podepisujete, může se vám hodit, aby byl výstup (šifrovaná data) textový. To se dá zařídit opšnou -a (jako armor). Malý příklad:

----------------------------------------
echo 'nejaky text' | gpg -ear igor
----------------------------------------

Toto zašifruje stdin a vybleje šifrovaný výstup textově na stdout.

Konfigurace GPG

GPG má konfigurační soubor ~/.gnupg/gpg.conf. Může obsahovat předvolené hodnoty, které byste jinak zadávali jako parametry (třeba cipher-algo, prostě stejné jméno, akorát bez úvodních --).

Nejčastější volby

no-greeting
při spuštění nebude psát obvyklou hlášku o licenci a tak.
default-key
impicitní podepisovací klíč (obvykle váš soukromý)
cipher-algo
implicitní symetrický šifrovací algoritmus
s2k-cipher-algo
implicitní symetrický šifrovací algoritmus pro chránění soukromého klíče.
default-recipient
implicitní přijemce (tímto klíčem budou data zašifrována, pokud zadáte jen gpg -e bez udání klíče)
default-recipient-self
pokud default-recipient není nastaveno a toto ano, použije se při šifrování implicitně klíč definovaný v default-key)
digest-lago
implicitní hašovací algoritmus
s2k-digest-algo
implicitní hašovací algoritmus pro chránění soukroumého klíče (heslo pro soukromý klíč se zhašuje právě touto haší)
compress-level
úroveň komprese (0..9)
compress-algo
použitý kompresní algoritmus (default je ZLIB (2), další možnosti jsou ZIP (1) a 0[0 znamená bez komprese])

Vybral jsem jen ty podle mně nejčastější. Popis všech lze zíkat v manuálové stránce gpg(1).

Potom ještě existuje volba group. Příklad:

----------------------------------------
group all = igor ivan miguel
----------------------------------------

Pokud teď dám něco jako: gpg -er all, tak se data dle očekávání zašifrují klíči všech tří chlapů (Igora, Ivana a Miguela). Group tedy vytvoří skupinu, kterou potom můžete použít jako jméno klíče, pro koho chcete data zašifrovat. Skupin můžete mít samozřejmě víc.

Fatalita pro pokročile paranoidní

Inspirován loop-AES vám tu předkládám návod, jak zvýšit sílu vašeho hesla.

GPG si heslo pro klíč (i při konvenčním šifrování) vezme, zhašuje a pak s ním provádí různé kejkle (například se heslo hodněkrát zašifruje nějakou symetrickou šifrou, pak se prohodí pořadí bitů...). Tyto kejkle mají za úkol snížit efektivní dobu prolomení hesla. Normálně GPG tyto operace provádí sice relativně hodněkrát, ale nám, pokročile paranoidním toto nestačí (standardně je brána střední hodnota, aby to i na starších mašinkách bylo obstojně rychlé). Pokud vám to ale nestačí, je možno jednoduše aplikovat následující patch:

----------------------------------------
--- gnupg-1.2.4/g10/passphrase.c.old	Wed Jul 30 19:16:55 2003
+++ gnupg-1.2.4/g10/passphrase.c	Thu Jan  8 18:18:49 2004
@@ -1209,7 +1209,7 @@
 	    if( create && !pass ) {
 		randomize_buffer(s2k->salt, 8, 1);
 		if( s2k->mode == 3 )
-		    s2k->count = 96; /* 65536 iterations */
+		    s2k->count = 208; /* 8388608 byte count */
 	    }
 
 	    if( s2k->mode == 3 ) {
----------------------------------------

Samozřejmě následuje kompilace GPG (tu popisovat nebudu ;->).

Teď, když budete vytvářet nový klíč nebo šifrovat symetricky, bude po zadání hesla následovat celkem znatelná pauza. Je to tou spoustou operací, které se musí po zadání hesla provést - vy to ale vždy zadáte jednou, útočník bažící po vašich datech to bude muset zkoušet mnohokrát (mnoho = hóóóóódně moc ;->). Tím mu dokážete dobře zkazit náladu.

Co ale, když už máte klíč a chcete naň toto též aplikovat? Pohoda, stačí změnit heslo (samozřejmě můžete heslo "vyměnit" za stejné, nyní už bezpečnější...). Jak tedy na to:

----------------------------------------
gpg --edit-key igor
> passwd
> stare_heslo
> nove_heslo
> nove_heslo
> save
----------------------------------------

Tož tak.


Závěr

Tento článek měl za úkol trochu vás vnést do atmosféry GPG. Neměl to být vyčerpávající popis všech možností. Měl vás nalákat na používání tohoto bezesporu skvělého programu. Pokud se mi tak podařilo, je to jen dobře.

Pro detaily (např. další konfigurační volby) se mrkněte do manuálu, je sice dlouhý, ale čte se dobře. Pokud přece jenom budete chtít s něčím poradit, klidně mi napište, ale jak už jsem upozorňoval, má reakční doba není zrovna nejkratší... Takže GPG zdar...

[Tiskni] [Přidat komentář] [Ukázat komentáře (22)]


Zpět na Novinky
|_ Nastavení & Info _|
Získání účtu?
|_ On-Line DOC _|
Debian Packages
TUXfinder
|_ Zajímavá místa _|
CZilla..
Webdot.cz
ABC Linuxu..
Konference
Linux na MFF UK
Debian
SuSE Linux
Blackhole
Root..
Reboot
Linuxzone.cz
Underground..
Linuxworld
Documentation Archiv
Manualy SK
Linuxsoft.cz..
|_ Linuxová komunita _|
Linux CZ
Linux SK
GNU
SkLUG
Freesoft
|_ Staré dobré sajty _|
Linuxové noviny
Dokumentační projekt
Mikroservis
Školičky
Myslíkovna
|_ Mirror _|
Phuture
|_ Kalendář _|
Přidej akci

|_ Počitadlo _|
    
Server vzniká za pomocí open-source produktů. Mezi nejdůležitější patří GNUDebianLinuxApachePHPMySQLGimp. Vim. Tomcat.
LINUX Trademark Registration of Linus Torvalds from US
UNIX Trademark Registration of X/Open
Copyright Penguin 1998 - 2019. ALL RIGHTS RESERVED