PGP

Allikas: Kuutõrvaja

Sissejuhatus

Aeg-ajalt tekib vajadus korraldada suhtlemist nii, et info, mida vahetatakse, oleks kõrvalseisjaile kättesaamatu. Samal ajal peab olema sisu kättesaadav neile, kes asjasse puutuvad. Mainitud asjakorraldust võimaldab informatsiooni krüptimine. Käesolevas käsitletakse digitaalse info krüptimist kasutades programmi PGP.

Krüptimine sõltub nii algoritmist kui võtmest. Reeglina tuleb hoida saladuses võtmeid (paroole), aga mitte algoritme. Kasutatavast võtmest sõltub, millise tulemuse krüptimise algoritm annab ja seepärast ei saa õiget võtit teadmata krüptitud andmeid esialgsele kujule viia.

Kõige enam esineb vajadus informatsiooni salastamise järele. Seda realiseerib sümmeetriline krüptosüsteem, kasutades ühe ehk salajase võtmega krüptimist. Seda kirjeldab skeem

Esimene.gif

'krüptija' on algoritm, mis moodustab lähtetekstist tekst krüptitud teksti ktekst. Kui sama krüptijat ja võtit rakendada ktekst'ile, siis saadakse tulemuseks lähtetekst tekst. Kuna ühe ja sama võtmega saab nii krüptida kui ka lahti krüptida, siis nimetatakse seda sümmeetriliseks krüptosüsteemiks.

Ühe võtme krüptimise algoritmid (DES, IDEA) töötavad suhteliselt kiiresti, kuid peamiseks puuduseks on võtme levitamisel tekkivad probleemid: andmete krüptija ja lahti krüptija peavad teadma ühte ja sama võtit. Arusaadavalt ei saa kasutada võtme edasitoimetamiseks ei telefoni ega e-posti, mida võidakse tõenäoliselt pealt kuulata. Kõige kindlam on võti üle anda füüsiliselt kohtudes.

PGP võimaldab ühe võtmega krüptida näiteks selliselt, krüptimine faili failinimi

bash~$ pgp -c failinimi

ning krüptitud faili lahti krüptida

bash~$ pgp failinimi.pgp

Peale salastatuse on turvalise suhtlemisega seotud veel kaks aspekti:

terviklikkus

Inimestel, kellele andmed on mõeldud, saavad kontrollida, kas nendeni jõudnud andmed on oma esialgsel kujul. St kas keegi pole andmeid vahepeal võltsinud, näiteks muutnud kuupäevi.

ehtsus

Suhtluse igal osapoolel peab olema võimalus veenduda, et kõik teised, kellega ta suhtleb, on ka tegelikult need, kelleks tema neid peab.

PGP ideoloogia pakub mitmeid vahendeid teiste suhtlejate ehtsuses veendumiseks. Ehtsuse kontroll võib osutuda tihti kõige keerulisemaks ülesandeks.

Asümmeetriline krüptosüsteem

Asümmeetrilist krüptosüsteemi saab realiseerida avaliku võtme krüptimisega. PGP avaliku võtme krüptimise mehhanism põhineb RSA algoritmil, mis kasutab kahte võtit: avalikku ja salajast nagu kujutatud skeemil:

Teine.gif

Avaliku võtmega krüptitud andmeid saab lahti krüptida mitte selle sama võtmega, vaid ainult vastava salajase võtme abil. Avalikust võtmest salajast praktiliselt tuletada ei saa. Avaliku võtme krüptimise kasutamiseks tuleb hoida enda teada salajast võtit ja parooli. Avalik võti tuleb teha kõigile kättesaadavaks. Olles hankinud teise kasutaja avaliku võtme ning sellega andmed krüptinud, saab ainult see, kes omab vastavat salajast võtit, saadetise lahti krüptida.

Avaliku võtme krüptimise peamiseks puuduseks on arvutusmahukus.

PGP kasutamisel tekitab iga kasutaja endale võtmepaari moodustava avaliku ja salajase võtme

bash~$ pgp -kg

PGP salajane võti on kaitstud turvalisuse huvides parooliga, mida kasutajalt küsitakse. Selle parooli peab sisestama iga kord, kui te kasutate oma salajast võtit. Lisaks palutakse teil võtmete loomisel sisestada oma nimi ning midagi unikaalset, mis on teiega seotud, nt e-posti aadress, telefoninumber; tüüpiliselt sisestatakse midagi sellist

Priit Paju <priit@zoo.tartu.ee>

PGPga krüptimine

PGP on hübriidne krüptosüsteem, mis tähendab, et ta ühendab sümmeetrilise ja asümmeetrilise süsteemi häid omadusi, milleks on krüptimise kiirus ja võtmete levitamise võimalus.

PGPga krüptimine toimub selliselt

bash~$ pgp -e salakiri Priit

mille tulemusel tekib Priidu avaliku võtmega krüptitud (-e - encrypt) fail salakiri.pgp

Krüptimisel andmete saatja:

  1. genereerib juhusliku võtme, mida nimetatakse seansivõtmeks
  2. kasutades ühe võtmega krüptimist, krüptitakse seansivõtmega andmed
  3. krüptib adressaadi avaliku võtmega kasutatud seansivõtme
  4. saadab adressaadile krüptitud seansivõtme ja krüptitud andmed 

PGP hoolitseb ise salajase võtme genereerimise eest.

PGP kasutamine lahtikrüptimisel toimub selliselt

bash~$ pgp salakiri.pgp

ja tekib fail salakiri.

Lahtikrüptimisel andmete saaja:

  1. krüptib oma salajase võtmega lahti krüptimise seansivõtme
  2. krüptib seansivõtmega lahti andmed 

Allkirjastamine

PGP kasutab avaliku võtme krüptimise algoritmi RSA, mis võimaldab salajase võtmega krüptitud infot lahti krüptida vastava avaliku võtmega. Seda kujutab skeem:

Kolmas.gif

Seda asjaolu saab kasutada andmete allkirjastamisel.

Andmed allkirjastatakse selleks, et vastuvõtja saaks:

  • veenduda nende ehtsuses
  • veenduda nende terviklikkuses
  • väärata salgamist

Saatja krüptib andmed oma salajase võtmega ja läkitab teele krüptimata andmed ning kontrolliks ka krüptitud andmed. Vastuvõtja saab krüptitud andmed lahti krüptida saatja avaliku võtme abil. Seda kujutab skeem

Neljas.gif

tekst kujutab endast andmeid ja ktekst vastab nende andmete kohta käivale allkirjale.

   * Andmete ehtsuses veendub vastuvõtja, kui krüptitud andmed õnnestub avaliku võtmega lahti võtta. Avaliku võtmega saab lahti krüptida ainult vastava
     salajase võtmega krüptitud andmeid.
   * Andmete terviklikkuses saab vastuvõtja veenduda võrreldes krüptimata ja lahti krüptitud versioone.
   * Andmete saatja ei saa maha salata nagu ta poleks andmeid saatnud. Mitte keegi teine peale saatja ei saa lähteandmeid krüptida selliselt, et need on
    lahtikrüptitavad saatja avaliku võtmega. 

Toodud skeemi saab praktiliselt kasutada, kuid reeglina on krüpteeritud andmete maht suurem krüptimata andmete omast; seega transportida nii tekst'i kui ka ktekst'i on ebaotstarbekas. Võib küll ka saata vaid krüpteeritud andmed, kuid tihti on vaja jätta vastuvõtjale pigem võimalus kontrolliks, kui teha see vältimatuks.

Põhimõtteliselt toimetab PGP allkirjastamist vastavalt toodud skeemile, kuid ühe erinevusega. Vajadus ktekst'i saatmise järele kaob ära kasutades räsifunktsiooni. Räsifunktsiooni algoritm on avalik. Räsifunktsioon pakub võimaluse seada suvalise mahuga andmetele vastavusse kindla pikkusega järgnevus, mida nimetatakse sõnumilühendiks. Väga ebatõenäoline on peale lähteandmete muutmist, tingimusel, et muudetu on sisult sarnane, saada samasugust sõnumilühendit.

Seega, andmete allkirjastamisel PGP leiab esmalt sõnumilühendi, siis krüptitakse see saatja salajase võtmega ning saadetakse ära nii krüpitud sõnumilühend kui ka krüptimata lähteandmed.

Andmete vastuvõtja rakendab lähteandmetele räsifunktsiooni ning arvutab ise vastava sõnumilühendi. Peale seda krüptib ta vastava avaliku võtmega lahti saatjalt saadud krüptitud sõnumilühendi ning võrdleb kahte tulemust. Kui nad on identsed, siis on väga suure tõenäosusega andmed terviklikud.

Krüptitud sõnumilühend ja lähteandmed kuuluvad kokku, kusjuures krüptitud sõnumilühendit saab käsitleda digitaalse allkirjana, kuigi tehniliselt annab krüptitud sõnumilühend vaid võimaluse kontrollida, kas vastuvõtja käsutuses olev avalik võti vastab andmete allkirjastamisel kasutatud salajasele võtmele. Seega, küsimus, kas krüptitud sõnumilühendit võib käsitleda digitaalse allkirjana, taandub sellele, kui kindel te saate olla, et teie kasutada olev avalik võti on ehtne.

Programm pgp võimaldab faile allkirjastada selliselt

bash~$ pgp -s salakiri

ning tekib fail salakiri.pgp

Selle faili, kui digitaalselt allkirjastatud dokumendi, digitaalset allkirja saab kontrollida selliselt

bash~$ pgp salakiri.pgp

Avaliku võtme usaldusväärsus

Kõige valulisem koht avaliku võtme krüptograafia kasutamisel on avalike võtmete levitamine. Avaliku võtme kasutajal peab olema võimalus kontrollida võtme ehtsust. Siiamaani kõnelesime avalikust võtmest RSA kontekstis krüptimise algoritmi juures. PGP kontekstis on avalikul võtmel ka teisi omadusi ja sestap kõneldakse PGP avalikust võtmest.

PGP avalik võti sisaldab järgmist informatsiooni:

  • kasutaja RSA avalik võti
  • kasutaja isikunimi, e-posti aadress
  • kasutaja enda allkiri
  • teiste kasutajate allkirjad

PGP avaliku võtme moodustamisel allkirjastatakse avalik võti ja isikuandmed omaniku salajase võtmega. Omaniku allkiri tema enda avalikul võtmel annab teistele võimaluse veenduda, et toodud avalikule võtmele leidub vastav salajane võti. Peale võtmete moodustamist peaks kasutaja laskma oma PGP avalikku võtit allkirjastada teistel autoriteetsetel inimestel. Seda põhjusel, et kui teie võti satub kellegi kätte, kes teid ei tunne, kuid teab ja usaldab ühte teie võtme allkirjastajat, siis arvatavasti ta julgeb pidada teie võtit ehtsaks.

PGP hoiab tavaliselt võtmeid kahes võtmehoidjaks kutsutavas failis

  • ühes teie PGP salajast võtit (salajaste võtmete võtmehoidja)
  • teises teie kasutada olevaid teiste kasutajate PGP avalikke võtmeid (avalike võtmete võtmehoidja)

Teie enda avalikku võtit hoitakse samuti avalike võtmete võtmehoidjas ja ta ei erine tehniliselt teistest avalikest võtmetest, kusjuures te võite omada ka mitut salajase-avaliku võtme paari.

Kui PGP avalik võti asub võtmehoidjas, siis lisandub ülaltoodule ka teie hoiak avaliku võtme omaniku suhtes tema usaldatavusse. Kogu sissekanne on allkirjastatud võtmehoidja omaniku salajase võtmega, tagades, et keegi ei saa võtmehoidja sisu muuta ilma, et te ise seda märkaksite.

Olles hankinud kellegi PGP avaliku võtme, ei saa te seda kasutada enne, kui olete ta lisanud oma avalike võtmete võtmehoidjasse. See toimub selliselt:

bash~$ pgp -ka priidu.avalik.voti

kusjuures toimingu käigus peate te vastama mõnele küsimusele.

Iga uue võtme lisamisel peate te võtma kaks seisukohta (kaks erinevat usaldust):

  1. kas te allkirjastate PGP avaliku võtme selleks, et teised, kes teid usaldavad, saaksid selle ilma pikemalt vaagimata oma võtmehoidjasse lisada
  2. kas lisatava PGP avaliku võtme omanik on nii usaldatav, et tema poolt allkirjastatud võtmete edaspidisel lisamisel ei küsita teilt täiendavaid
     küsimusi. Sellise absoluutse usaldusega kasutaja on võtme lisaja jaoks tutvustaja. 

Esimesele küsimusele saate vastata jaatavalt, kui alltoodutest on täidetud vähemalt üks:

  • te olete personaalselt inimesega kohtunud ja temalt saanud PGP avaliku võtme
  • olete kontrollinud telefonis või visiitkaardilt tema PGP avaliku võtme sõnumilühendit; võtme lühendit näeb selliselt
     bash~$ pgp -kvc Priit
     Key ring: '/home/elmu/.pgp/pubring.pgp', looking for user ID "Priit".
     pub      768/1650F71D 1999/10/22 Priit Paju <priit@zoo.tartu.ee
     Key fingerprint = E7 53 F8 2B 87 16 41 C2 31 7C D5 B6 BE 04 59 E0
     Selle järgnevuse trükivad mõned inimesed oma visiitkaardile.
  • tema PGP avalikul võtmel on kellegi allkiri, keda te usaldate

Te ei peaks oma allkirjaga kinnitama võtme ehtsust, kui te pole selles kindel. Peab arvestama seda, et kui teised kasutajad näevad võtmel teie allkirja ning nad usaldavad teid, siis te ei peaks petma nende usaldust.

Teisele küsimusele saate vastata jaatavalt, kui te usaldate inimest ja tema oskust PGP võtmetega tegelda.

Kui te ka ei vasta kummalegi küsimusele jaatavalt, saate te ikkagi võtme lisada võtmehoidjasse ning seda kasutada.

Järgnevalt esitame kommenteeritult praktilisi näiteid:

Et näha, kes on PGP avalikku võtit allkirjastanud:

bash~$ pgp -kvv Priit
Key ring: '/home/elmu/.pgp/pubring.pgp', looking for user ID "Priit".
Type Bits/KeyID    Date         User ID
pub  768/1650F71D  1999/10/22   Priit Paju <priit@zoo.tartu.ee>
sig  64DE58A5                   Mart <mart@zoo.tartu.ee>
sig  1650F71D                   Priit Paju<priit@zoo.tartu.ee>

Antud juhul on näha, et Priidu PGP avaliku võtme kooskõlalisust tõendab kolmas kasutaja Mart. Kui te usaldate Marti ja sestap ka tema allkirja, siis te võite kasutada seda võtit ja isegi signeerida selle. Seejärel võite te toimetada allkirjastatud Priidu võtme talle tagasi ja kui järgmine kord keegi tema võtit lisama hakkab, näeb ta seal ka teie allkirja. Just nii tekivadki avalikele võtmetele allkirjad. Ei ole midagi ebaloomulikku, kui mõnda avalikku võtit on allkirjastanud kümmekond kasutajat. Võimalik, et usaldusest teie vastu otsustab ta lugeda Priidu võtme ehtsaks.

Võtme allkirjastamine toimub selliselt:

bash~$ pgp -ks Priit

Võtmelt allkirja eemaldamine aga nii:

bash~$ pgp -krs Priit

Kui te aga otsustate usaldada Priitu niivõrd, et soovite teda tutvustaja seisusse tõsta, siis:

bash~$ pgp -ke Priit
Would you trust "Priit Paju <priit@zoo.tartu.ee>"
to act as an introducer and certify other people's public keys to you?
(1=I don't know. 2=No. 3=Usually. 4=Yes, always.) ? 4

Nagu näha on tutvustajal neli erinevat usaldatavuse taset. Kui märkida Priit 4ndasse, siis lisatakse küsimusteta kõik avalikud võtmed, millel on Priidu allkiri.

Soovides näha, milliseid tutvustajaid te kasutate ning nende tasemeid, on käsk:

bash~$ pgp -kc

PGP ideoloogia eeldab, et iga kasutaja omab vähemalt mõnda tutvustajat. Igal ajahetkel saab kasutaja üle vaadata, keda ta usaldab ja keda mitte. Nii tekib kasutajate vahel mittehierarhiline usalduse võrgustik.

Võtmete levitamine

PGP avalike võtmete levitamisest oli juba möödaminnes juttu. Isiklik võtmete üleandmine on kõige kindlam moodus. Alati ei pruugi see aga võimalik olla. Jääb üle riputada oma võti kodulehele välja, lootes, et ta on piisavalt paljude autoriteetsete kolmandate kasutajate poolt allkirjastatud.

Spetsiaalsed võtmeserverid (K-server) annavad kõigile kasutajatele võimaluse:

  • oma PGP avalikku võtit ülesse riputada
  • võtit maha võtta või kehtetuks kuulutada
  • teiste kasutajate võtit otsida

Reeglina moodustavad võtmeserverid (nt. http://www.de.pgp.net/pgp/pks-commands.html) ühtse süsteemi: olles lisanud oma võtme ühte, jõuab teises analoogilises serveris otsingu teostaja teie võtmeni.

Oluline on tähele panna, et võtmeserver ei garanteeri sugugi, et PGP avalikus võtmes sisalduv informatsioon on kooskõlaline; server teeb võimalikuks võtmete levitamise.

Avalikule võtmele vastav järgnevus ehk ascii vormis näeb välja selline:

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 5.0
Comment: PGP Key Server 0.9.4+patch1
mQGiBDf5Ug8RBACyy6lk6hSXcg0rikfpnwILRDrOfgUmiHZYFmYvS1WXqyBN8fQx
IknNAawKXQ6Iu5LkqK1ZZVUHAXZtM+pZcPoee4boW6FxXHwThd+kIC8e5+RbHN00
TnBW0Dy+6UJg6txSl5kUfJIbPcI/5s9UFw5+gnXEFV8woiHCjOchzYt/CwCg6v6n
IknNAawKXQ6Iu5LkqK1ZZVUHAXZtM+pZcPoee4boW6FxXHwThd+kIC8e5+RbHN00
TnBW0Dy+6UJg6txSl5kUfJIbPcI/5s9UFw5+gnXEFV8woiHCjOchzYt/CwCg6v6n
XiK5jMRBs42CMHuiEMWTnVMEAK6KNBczksdd4xKfRWjgB8vXqoe2D62pTho3gRnZ
=++b3
-----END PGP PUBLIC KEY BLOCK-----

kusjuures ascii vorm tekitatakse faili kasutajanimi selliselt

bash~$ pgp -kxa kasutajanimi

ning kahendvormis PGP võti eraldatakse võtmehoidjast faili selliselt

bash~$ pgp -kx kasutajanimi

Võtmete kehtetuks tunnistamine

Kui selgub, et keegi on saanud oma valdusse teie salajase võtme parooli, kusjuures salajane võti on kindlalt ainult teie valduses, siis saate te muuta parooli tarvitsemata uut võtmepaari genereerida.

bash~$ pgp -ke

Peale seda jääb samaks teie avalik võti ja ka selle lühend. Tehniliselt ei ole küll võimalik ainult parooli või ainult salajast võtit omades PGP'd kasutada, kuid kindlam on, kui mõlemad on teie ja ainult teie valduses.

Kui te kahtlustate, et nii salajane võti kui ka parool on peale teie veel kellegi teise valduses, siis tuleb teil sellest teatada võimalikult kiiresti kõigile neile, kes teid usaldavad. Seda võib teha 'suusõnaliselt', paludes teisi kasutajaid lihtsalt eemaldada teie avalik võti oma võtmehoidjast, kuid võite ka levitada enda poolt kehtetuks allkirjastatud võtit.

Kehtetuks allkirjastamine toimub selliselt

bash~$ pgp -kd enda.tunnus

misjärel eraldage oma avalik võti võtmehoidjast ning levitage seda tavalisel moel. Kui teised kasutajad lisavad kehtetuks allkirjastatud võtme oma võtmehoidjasse, siis PGP ei võimalda neil teie vana avalikku võtit enam kasutada.

Peale selle tuleb endale uued võtmed genereerida ja avalikkusele levitada.

Kasutaja avaliku võtme eemaldamine toimub selliselt

bash~$ pgp -kr Priit

Kui teil on läinud oma parool meelest, või olete lisaks ka oma salajase võtme kaotanud, siis peaks te endale genereerima uue võtmepaari ja sellest ka teistele teatama.

© EENet 2000