Objavljeno:

Šifriranje in digitalno podpisovanje e-pošte in datotek s šifrirnim programom GPG (mala šola informacijske varnosti, 8. del)

Simetrična in asimetrična kriptografija

Za šifriranje podatkov se uporabljajo simetrični in asimetrični šifrirni algoritmi. Pri simetričnih algoritmih ali algoritmih z zasebnim ključem imamo samo en ključ, s katerim šifriramo in dešifriramo sporočilo. Običajno so ti algoritmi hitri, težko pa je varno izmenjati ključ, saj ključa prejemniku ne moremo posredovati skupaj s šifriranimi podatki. Pri asimetričnih algoritmih ali algoritmih z javnim ključem pa ima vsak uporabnik dva ključa, enega objavi, drugi ostane tajen. Vsi, ki uporabniku želijo poslati sporočilo, bodo za šifriranje sporočila uporabili njegov javni ključ. Tako šifrirano sporočilo bo prejemnik lahko dešifriral le s svojim tajnim ključem in javnim ključem pošiljatelja.

Te metode so računsko bolj zahtevne in zato počasnejše kot simetrične, vendar bolj uporabne, saj je javne ključe mogoče izmenjati preko nezaščitene povezave, tajni ključi pa vedno ostanejo le pri uporabniku.

Asimetrično kriptografijo naj bi prvi odkrili v ameriški NSA v 60. letih, zagotovo pa nekoliko pozneje tudi v britanski tajni službi Government Communications Headquarters. Vendar nobena od navedenih organizacij svojih odkritij ni nikoli javno objavila, zato za uraden datum odkritja asimetrične kriptografije velja leto 1976, ko sta matematika Whitfield Diffie in Martin E. Hellman v reviji IEEE Transactions on Information Theory objavila članek z naslovom New Directions In Cryptography. V članku sta opisala protokol za varno izmenjavo šifrirnih ključev prek nezaščitenega medija, znan tudi kot sistem šifriranja z javnimi ključi.

Leto pozneje se je Ronald L. Rivest domislil novega šifrirnega algoritma, ki bi temeljil na sistemu javnih ključev, omogočal pa bi tudi digitalno podpisovanje. Algoritem je skupaj z Adijem Shamirjem in Leonardom M. Adlemanom opisal v članku, ki ga je septembra 1977 objavila revija Scientific American, leto dni zatem pa so v reviji Communications of the ACM objavili šest strani dolg članek z naslovom A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. V njem je bil opisan celotni algoritem, ki so ga po začetnicah avtorjev poimenovali RSA.

Štirinajst let za tem, leta 1991, je računalniški programer Philip R. Zimmermann napisal računalniški program PGP (Pretty Good Privacy), namenjen šifriranju elektronskih sporočil in računalniških datotek z algoritmom RSA. PGP danes razvija in trži zasebno podjetje.

Leta 1999 je nemški programer Werner Koch razvil GPG oziroma GNU Privacy Guard. Gre za odprtokodno orodje za šifriranje podatkov na podlagi OpenPGP standarda oziroma odprtokodni klon PGP-ja, ki teče na praktično vseh operacijskih sistemih.

Delo s šifrirnimi ključi

Če želimo uporabljati GPG (ali PGP) je seveda najprej potrebno imeti svoj par šifrirnih ključev (javni in zasebni ključ). Prvi korak je torej ustvarjanje para ključev, pri čemer je zasebni ključ mogoče še dodatno zaščititi z geslom (ang. passphrase). V tem primeru je potrebno ob vsaki uporabi zasebnega ključa vnesti geslo (geslo je mogoče tudi spreminjati), s čimer je še dodatno poskrbljeno za varnost.

Ustvarjanje novega šifrirnega ključa

Ustvarjanje novega šifrirnega ključa.

Ustvarjanje novega GPG ključa

Ustvarjanje novega GPG ključa.

Določitev gesla za odklep GPG zasebnega ključa

Določitev gesla za odklep GPG zasebnega ključa.

Kot rečeno, si morajo komunikacijski partnerji pred šifriranjem izmenjati javne šifrirne ključe. To je najbolj enostavno s pomočjo posebnih strežnikov javnih ključev (ang. keyserver).

Strežniki šifrirnih ključev

Strežniki šifrirnih ključev.

Iskanje javnih ključev na strežniku ključev

Iskanje javnih ključev na strežniku ključev.

Usklajevanje ključev s strežniki ključev

Usklajevanje ključev s strežniki ključev.

Vse aplikacije, ki sledijo OpenPGP standardu omogočajo pošiljanje lastnih javnih ključev na strežnike javnih ključev, prav tako pa preko teh strežnikov lahko iščemo in v svojo osebno zbirko javnih ključev (ang. keyring) prenašamo javne ključe drugih oseb. Do strežnikov javnih ključev je praviloma potrebno dostopati preko TCP vrat 11371, zato mora biti v požarnem zidu dostop do teh vrat omogočen (v nekaterih poslovnih omrežjih je izhod na ta vrata lahko blokiran).

Lastnosti GPG šifrirnega ključa

Lastnosti GPG šifrirnega ključa.

GPG/PGP šifrirni ključi poleg javnega in zasebnega ključa vsebujejo še nekatere druge podatke, zlasti podatke o identiteti imetnika (lahko tudi sliko lastnika), digitalne podpise tretjih oseb (o tem nekoliko več kasneje), itd. Ključi so lahko različne dolžine, velja pa, da večja dolžina ključa pomeni večjo varnost (hkrati pa tudi nekoliko počasnejše izvajanje šifrirnih operacij).

Seznam GPG ključev v naši interni zbirki šifrirnih ključev

Seznam GPG ključev v naši interni zbirki šifrirnih ključev.

Vsak šifrirni ključ ima svoj digitalni prstni odtis (ang. fingerprint), s pomočjo katerega lahko preverimo njegovo pristnost. Preverjanje pristnosti javnih ključev je zelo pomembno, saj le s tem lahko zagotovimo, da določen javni ključ res pripada neki osebi. Za razliko od “klasičnih” digitalnih potrdil, kjer identiteto imetnika šifrirnega ključa oziroma digitalnega certifikata preveri neodvisna treja oseba (ang. trusted third party, tim. certifikatska agencija (CA – Certificate Authority), nekakšna “notarska” agencija, ki s svojim digitalnim podpisom certifikata jamči za njegovo pristnost), moramo pri GPG/PGP ključih za njihovo istovetnost poskrbeti sami.

Priporoča se, da pristnost javnega ključa čim bolj natančno preverimo. To storimo tako, da osebo, ki ji nek javni ključ pripada, po varnem komunikacijskem kanalu (npr. osebno) vprašamo za vrednost prstnega odtisa, ta vrednost pa se mora ujemati s tisto v naši zbirki javnih ključev. Javnim ključem, ki smo jih preverili in jim zaupamo določimo stopnjo zaupanja, nato pa jih digitalno podpišemo – s tem zagotovimo, da napadalec ne bo mogel vdreti v našo zbirko javnih ključev in obstoječi javni ključ neke osebe zamenjati s svojim, kar bi mu omogočilo izvedbo napada s posrednikom (gre za napad, kjer se napadalec izdaja za drugo osebo). Povedano drugače – preverjen in podpisan javni ključ nam zagotavlja, da ta ključ resnično pripada osebi, ki je navedena kot imetnik tega ključa.

Kot rečeno, v svetu PGP/GPG kriptografije praviloma ne obstaja certifikatska agencija, ki bi skrbela za preverjanje pristnosti javnih ključev uporabnikov. Vendar pa je analogen sistem mogoče ustvariti s pomočjo tim. omrežja zaupanja (ang. web of trust), ki ga vzpostavimo s pomočjo medsebojnega digitalnega podpisovanja javnih ključev.

Digitalno podpisovanje javnih GPG ključev

Digitalno podpisovanje javnih GPG ključev.

To poteka tako, da oseba A preveri in podpiše javni ključ osebe B, oseba B pa nato na strežniku ključev objavi svoj s strani osebe A podpisan javni ključ. Oseba C, ki zaupa osebi A (oziroma njenemu digitalnemu podpisu) nato prejme javni ključ osebe B. Ker je le-ta podpisan s strani osebe A, mu lahko zaupa, saj zaupa, da je oseba A ustrezno preverila šifrirni ključ osebe B.

Naj omenimo, da se množično podpisovanje javnih ključev pogosto izvaja na tim. zabavah podpisovanja javnih ključev (ang. keysigning party), ki smo jih nekaj imeli tudi v Sloveniji. Iz razumljivih razlogov na teh zabavah prisotnost alkohola ali opojnih substanc ni zaželjena… 🙂

Podpisan javni GPG ključ

Podpisan javni GPG ključ

GPG seveda omogoča tudi digitalno podpisovanje sporočil (e-pošte) ali datotek. Vsebina sporočil v tem primeru sicer ni zaščitena pred neupravičenim vpogledom, vendar pa digitalno podpisovanje zagotavlja, da med prenosom sporočila ali med njegovo hrambo le-to ni bilo spremenjeno.

Šifrirne ključe je mogoče tudi preklicati. To storimo kadar npr. želimo ustvariti močnejše šifrirne ključe, ali kadar sumimo, da so bili naši ključi kompromitirani.

V tem primeru (preklican) šifrirni ključ sicer obdržimo v svoji zbirki ključev, vendar ga lahko uporabljamo samo za dešifriranje (starih sporočil), novih sporočil pa z njim ne moremo več šifrirati.

Določanje razloga za preklic GPG ključa

Določanje razloga za preklic GPG ključa.

Pregled lastnosti preklicanega GPG ključa

Pregled lastnosti preklicanega GPG ključa.

Preklicani GPG ključi so v naši zbirki ključev ustrezno označeni

Preklicani GPG ključi so v naši zbirki ključev ustrezno označeni.

Informacije o preklicih se ravno tako nahajajo na strežnikih javnih šifrirnih ključev (seveda moramo to informacijo preko OpenGPG kompatibilne aplikacije na te strežnike posredovati).

Šifriranje datotek in e-pošte z GPG

Ubuntu v ima v osnovni namestitvi GPG že nameščen. GPG lahko poganjamo preko ukazne vrstice ali pa upravljamo preko grafičnega programa Seahorse, ki ga najdemo v zaganjalniku pod imenom Gesla in šifrirni ključi oz. Passwords and Keys.

Ob prvem zagonu programa lahko vanj uvozimo obstoječe šifrirne ključe ali ustvarimo nov ključ. V programu lahko tudi urejamo pare svojih zasebnih in javnih GPG ključev, svoje javne ključe izvozimo oz. sinhroniziramo na strežnike z javnimi ključi, na strežnikih z javnimi ključi poiščemo javne ključe ostalih oseb oz. v svojo zbirko javnih ključev uvozimo javne ključe, ki so nam jih posredovali po e-pošti ali drugače, določamo stopnjo zaupanja tem ključem, itd..

Kot rečeno je s programom GPG mogoče šifrirati, dešifrirati in digitalno podpisovati podatke – zlasti datoteke in elektronsko pošto. Da so navedena opravila dobro integrirana v Ubuntu sistem skrbi poseben dodatek za program Seahorse (programski paket seahorse-plugins), ki ga je potrebno namestiti v Ubuntu (podobni dodatki so na voljo tudi za okolje Windows in Mac OS).

Ko dodatek namestimo, je v privzeti Ubuntujev upravljalnik datotek Nautilus integrirana podpora šifriranju, dešifriranju in digitalnemu podpisovanju datotek in imenikov. To storimo tako, da z desnim miškinim gumbom kliknemo na datoteko ali mapo in v meniju izberemo ustrezno možnost (Šifriranje oziroma Podpiši) oziroma dvokliknemo na datoteko s končnico GPG in odpre se vmesnik za izbiro ustreznega de/šifrirnega ključa (če jih uporabljamo več) ter vnos gesla.

Izbor prejemnikov šifriranih datotek

Izbor prejemnikov šifriranih datotek.

Vnos GPG gesla

Vnos GPG gesla.

Podobno enostavno je s pomočjo ustreznega dodatka tudi šifriranje in digitalno podpisovanje elektronske pošte. V Ubuntu Linuxu različice 12.04 je privzeti poštni odjemalec Thunderbird, ki pa privzeto ne vsebuje podpore za šifriranje elektronske pošte po OpenPGP standardu. Za to je potrebno namestiti dodatek Enigmail (namestimo programski paket enigmail). Po namestitvi je pošiljanje in prejemanje PGP/GPG šifrirane e-pošte zelo dobro integrirano v poštni odjemalec Thunderbird (več podrobnosti najdemo v Thunderbirdu v zavihku OpenPGP), saj poštni odjemalec med dohodno elektronsko pošto sam zazna PGP/GPG šifrirano sporočilo in v tem primeru samodejno odpre okno za vnos gesla za dešifriranje sporočila. Prav tako je v sam poštni odjemalec tesno integrirano iskanje in prenos javnih ključev oseb, ki jim želimo poslati GPG šifrirano sporočilo. Seveda se ob pošiljanju elektronske pošte s priponkami samodejno šifrirajo tudi le-te.

Šifriranje elektronske pošte z dodatkom Enigmail

Šifriranje elektronske pošte z dodatkom Enigmail.

Upravljanje s šifrirnimi ključi v dodatku Enigmail

Upravljanje s šifrirnimi ključi v dodatku Enigmail.

Podobni dodatki obstajajo tudi za druge poštne odjemalce (tudi za okolje Windows), npr. GPG za Outlook 2010, PGP Notes (za Lotus Notes), itd.

Naj omenimo, da je na voljo tudi dodatek za podporo šifriranju v spletnem brskalniku Firefox. Gre za dodatek FireGPG, ki omogoča uporabo PGP/GPG šifriranja na spletnih straneh oz. pri uporabi spletne e-pošte, žal se dodatek že nekaj časa ne razvija več, kljub temu pa še vedno razmeroma zadovoljivo opravlja svoje delo. Naj pa omenimo, da obstaja tudi ponudnik spletne e-pošte, ki ima vgrajeno GPG/PGP šifriranje in sicer Hushmail (osnovna različica je na voljo brezplačno, če pa želimo Hushmail uporabljati na svoji domeni, je za to storitev potrebno plačati).

GPG šifriranje se sicer uporablja tudi pri zagotavljanju integritete programskih paketov, ki jih nameščamo v Ubuntu. Programski paketi v Linuxu so namreč digitalno podpisani s čimer se zagotavlja njihova digitalna integriteta oziroma preprečuje, da bi morebitni napadalec programski paket med prenosom po internetu (od skladišča programskih paketov do našega računalnika) neopaženo spremenil.

GPG ključi skladišč programskih paketov v Linuxu

GPG ključi skladišč programskih paketov v Linuxu.

Javni šifrirni ključi uradnih skladišč programskih paketov so seveda že privzeto vključeni operacijski sistem. Vendar pa je pri dodajanju neuradnih skladišč programskih paketov potrebno ročno dodati javne GPG ključe razvijalcev v svojo zbirko ključev. Pri tem se je potrebno zavedati, da je te ključe ravno tako potrebno preveriti, saj vedno obstaja možnost, da napadalec postavi lažno spletno stran, kjer objavi lažne šifrirne ključe in nato preko lažnega skladišča na naš računalnik posreduje zlonamerno programsko kodo.

OpenPGP pametna kartica

Odprtokodni razvijalci so razvili tudi posebno pametno kartico, tim. OpenPGP card, ki omogoča shranjevanje zasebnih GPG ključev na kartico, posledično pa vse operacije šifriranja, dešifriranja, digitalnega podpisovanja ter preverjanja digitalnih podpisov potekajo na sami pametni kartici.

OpenGPG pametna kartica

OpenPGP pametna kartica.

Pametna kartica je zasnovana na tak način, da deluje z večino čitalcev pametnih kartic, omogoča hrambo do treh šifrirnih GPG ključev, šifrirni ključi pa so na kartici shranjeni na tak način, da zasebnih ključev iz kartice ni mogoče izvoziti. Še opozorilo: ko šifrirni ključ iz lokalne zbirke ključev (tim. keyring) prenesemo na pametno kartico je privzeta operacija taka, da se GPG ključ na pametno kartico ne skopira, pač pa premakne – to pomeni, da ključa ni več mogoče shraniti na računalnik in torej dešifriranje brez pametne kartice ni več mogoče.

OpenGPG pametna kartica z ActivIdentity čitalcem

OpenPGP pametna kartica z ActivIdentity čitalcem.

Pametna kartica omogoča tudi zaščito z geslom oz. PIN kodo, ki je lahko dolga od 6 do 32 znakov. Uporaba OpenPGP pametnih kartic tako za precej dostopno ceno (dobrih 10 EUR) bistveno poveča varnost, hkrati je sama uporaba le-teh razmeroma enostavna. Le za osnovne operacije (prenos ključa na kartico) na Linuxu trenutno ni na voljo ustreznih grafičnih orodij, pač pa je potrebno uporabiti ukazno vrstico. Naj še omenimo, da je s pomočjo pametne kartice mogoče izvesti tudi prijavo uporabnika v sistem, odklepanje LUKS šifriranih nosilcev podatkov, avtentikacijo oddaljenih uporabnikov, itd. Zelo enostavno upravljanje z OpenPGP pametno kartico je integrirano tudi v Enigmail, že omenjeni dodatek poštnega odjemalca Thunderbird. Podrobnejša uporaba pametnih kartic v Linuxu bo sicer (morda) tema kakšnega naslednja prispevka.

Zaključek

OpenPGP že dlje časa velja za neke vrste standard pri šifriranju elektronske pošte. Uporaba GPG je v Linuxu enostavna in dobro integrirana v sistem, poleg tega pa je uporaba aplikacije povsem brezplačna. Infrastruktura je torej na voljo, žal pa se šifriranje e-pošte uporablja le redko. Razlog za to je dejstvo, da je morajo šifriranje e-pošte uporabljati vsi komunikacijski partnerji (šifriranje e-pošte je nesmiselno, če ga uporabljaš sam). Poleg tega je uporaba šifriranja pri spletni pošti razmeroma zapletena oz. uporabniško neprijazna (z izjemo zaprtih ekosistemov, kot npr. Hushmail). Obstajajo sicer nekatere rešitve, ki skrbijo za šifriranje e-pošte v ozadju na poštnem strežniku (tim. mail gateway), vendar take rešitve delujejo le v zaprtih ekosistemih, ki vsi uporabljajo isto ali enako standardizirano rešitev (npr. znotraj posameznega podjetja).

Brezplačna in kvalitetna orodja za šifriranje ter digitalno podpisovanje elektronske pošte in datotek so tako na voljo in to za uporabnike različnih operacijskih sistemov. Na nas samih pa je ali jih bomo uporabljali ali ne.

Kategorije: Informacijska varnost, Odprta koda, Zasebnost
Ključne besede: GPG, kriptografija, mala šola informacijske varnosti