GnuPG kasutamine

Allikas: Kuutõrvaja

Sissejuhatus

Kui osapooled omavahel andmeid vahetavad võib päevakorrale tõusta kas üks või enam järgnevatest ajaoludest

  • terviklus - osalejad saavad olla kindlad, et esitatud andmetest ei ole midagi puudu või üle
  • salastatus - osalejad saavad olla kindlad, et esitatud andmeid ei saa keegi muu peale osalejate kasutada
  • ehtsus - osalejad saavad olla kindlad, et esitatud andmed on esitatud selle osaleja poolt kelle poolt nad arvavad, et andmed on esitatud
  • salgamise vääramine - andmete esitaja ei saa eitada, et ta on andmed esitanud

Selliseid nõuded saab rahuldada üldiselt avaliku võtme krüptograafia kasutamisel, käesolevas tekstis kasutatakse selleks GnuPG tarkvara.

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; õigemini, mõistliku aja jooksul ei ole selle eesmärgi saavutamine tõenäoline.

Sümmeetriline krüptosüsteem

Puhast andmete salastamist 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 (nt 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 on suhteliselt lihtne pealt kuulata. Kõige kindlam on võti üle anda füüsiliselt kohtudes.

GnuPG võimaldab ühe võtmega krüptida näiteks selliselt, faili tekst krüptimiseks tuleb öelda

 $ gpg -c failinimi
 Enter passphrase: xxx

ning krüptitud faili lahti krüptimiseks öelda, kasutades sama parooli

 $ gpg failinimi.gpg
 gpg: CAST5 encrypted data
 Enter passphrase: xxx

Asümmeetriline krüptosüsteem

Asümmeetrilist krüptosüsteemi saab realiseerida avaliku võtme krüptimisega

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, mille tõttu avaliku võtme krüptot kasutavad lahendused lepivad suhtlemise alguses kokku ühise sümmeetrilise võtme ning edasi kasutatakse summmeetrilist krüptot.

GnuPG tarkvara

GnuPG (Gnu Privacy Guard) on OpenPGP vaba implementatsioon, kusjuures 2009 aastal levitatakse kahte stabiilset versiooni

  • GnuPG-1 (v. 1.4.x) - klassikaline lahendus
  • GnuPG-2 (v. 2.0.x) - kaasaegsem modulaarne lahendus, nt komplekti kuuluv pgp-agent teeb kasutamise töökohaarvutis mugavaks

Mõlemat versiooni saab kasutada paralleelselt samade nö andmetega (võtmetega).

Võtmete kasutamine

GnuPG kontekstis on kasutajal tavaliselt kasutada kaks võtmepaari

  • primaarne allkirjastamise võtmepaar, mille salajast võtit kasutatakse ainult allkirjastamiseks
  • krüptimise võtmepaar, mida kasutatakse ainult krüptimiseks

GnuPG tehnoloogia võimaldab, et kasutajal on veel rohkem võtmeid, mida ta saab andmete signeerimisel ja krüptimisel kasutada.

  • alati esinevad kasutaja võtmed paarides, salajane võti ja vastav avalik võti
  • tavaliselt on kasutajal üks primaarse võtme paar, kuid neid võib olla ka enam
  • primaarse võtme nö alla saab moodustada alamvõtmeid (ingl. k. subkey)
  • ühte konkreetset võtit soovitatakse kasutada kas allkirjastamiseks või krüptimiseks, aga mitte mõlemaks samaaegselt

Kasutaja võtmed paikevad spetsiaalses formaadis mooustatud failis, mida nimetatakse võtmehoidjaks (ingl. k. keyring). Tuleb arvestada, et kui kõneldakse kasutaja avalikust võtmest, siis ei ole tihtipeale päris selge millist konkreetset võtit silmas peetakse, võimalik, et kõigi kasutaja võtmete avalikku osa.

Lisaks isiklikele võtmetele (st võtmetele, mis esinevad paarides st kasutajal on igale avalikule võtmele vastav salajane võti olemas) on tavaliselt kasutaja oma võtmehoidjasse salvestanud ka kaaslaste võtmeid, kui nende võtmete puhul on tegemist vaid avaliku osaga.

Pakitud ja allkirjastatud faili tekst.gpg kasutamiseks

 $ gpg -o tekst -d tekst.gpg
 gpg: Signature made Sun May 24 22:57:11 2009 EEST using RSA key ID 8B9484D2
 gpg: Good signature from "Mart Kask <mart@loomaaed.tartu.ee>"

Võtmete moodustamine

Kuna järgnevas tutvustataks OpenPGP kaardi kasutamist ja see lahendus oskab kasutada ainult 1024 bit RSA võtmeid, siis eranditult on kasutatud näidetes just selliseid võtmeid. Samal põhjusel kasutame ka GnuPG-1 tarkvara kuigi GnuPG-2 (pakett gnupg2) oskab kasutada samu võtmeid.

Primaarse allkirjastamise võtmepaari moodustamine

Primaarse allkirjastamise võtmepaari genereerimiseks tuleb öelda, tavaliselt moodustatakse primaarne võti tähtajatu kehtivusega

 $ gpg --gen-key
 gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc.
 This is free software: you are free to change and redistribute it.
 There is NO WARRANTY, to the extent permitted by law.
 
 Please select what kind of key you want:
    (1) DSA and Elgamal (default)
    (2) DSA (sign only)
    (5) RSA (sign only)
 Your selection? 5
 RSA keys may be between 1024 and 4096 bits long.
 What keysize do you want? (2048) 1024
 Requested keysize is 1024 bits
 Please specify how long the key should be valid.
        0 = key does not expire
     <n>  = key expires in n days
     <n>w = key expires in n weeks
     <n>m = key expires in n months
     <n>y = key expires in n years
 Key is valid for? (0) 0
 Is this correct? (y/N) y
 
 You need a user ID to identify your key; the software constructs the user ID
 from the Real Name, Comment and Email Address in this form:
     "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
 
 Real name: Mart Kask
 Email address: mart.kask@loomaaed.tartu.ee
 Comment: Tartu Loomaaed
 You selected this USER-ID:
     "Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>"
 
 Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
 You need a Passphrase to protect your secret key.
 
 We need to generate a lot of random bytes. It is a good idea to perform
 some other action (type on the keyboard, move the mouse, utilize the
 disks) during the prime generation; this gives the random number
 generator a better chance to gain enough entropy.
 
 Not enough random bytes available.  Please do some other work to give
 the OS a chance to collect more entropy! (Need 268 more bytes)
 .......+++++
 .+++++
 gpg: /home/mart/.gnupg/trustdb.gpg: trustdb created
 gpg: key 6013CC32 marked as ultimately trusted
 public and secret key created and signed.
 
 gpg: checking the trustdb
 gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
 gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
 gpg: next trustdb check due at 2019-05-20
 pub   1024R/6013CC32 2009-05-22 [expires: never]
       Key fingerprint = C510 B672 65EE 5C8D 5D61  1E96 8504 959C 6013 CC32
 uid                  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>
 
 Note that this key cannot be used for encryption.  You may want to use
 the command "--edit-key" to generate a subkey for this purpose.

Kasutaja võtmed asuvad nn võtmehoidjas (ingl. k. keyring), võtmehoidja sisu saab küsida öeldes (-k abil näeb avalike võtmete vaadet)

 $ gpg -k       
 /home/mart/.gnupg/pubring.gpg
 -----------------------------
 pub   1024R/6013CC32 2009-05-22 [expires: never]
 uid                  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>

-K võtme abil küsides näeb salajaste võtmete vaadet

 $ gpg -K
 /home/mart/.gnupg/secring.gpg
 -----------------------------
 sec   1024R/6013CC32 2009-05-22 [expires: never]
 uid                  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>

gpg --gen-key käsku korduvalt andes saab kasutaja tekitada endale mitu primaarset võtit.

Krüptimise võtmepaari moodustamine

Krüptimise võtmepaari moodustamiseks tuleb sooritada selline järgnevus, tavaliselt määratakse krüptimise võtmele mingi tähtaeg, nt mõni aasta, 0x6013CC32 on selle primaarse võtme ID mille alla alamvõtmeid moodustatakse

 $ gpg --edit-key 0x6013CC32
 
 Command> addkey
 Key is protected.
 
 You need a passphrase to unlock the secret key for
 user: "Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>"
 1024-bit RSA key, ID 6013CC32, created 2009-05-22
 
 Please select what kind of key you want:
    (2) DSA (sign only)
    (4) Elgamal (encrypt only)
    (5) RSA (sign only)
    (6) RSA (encrypt only)
 Your selection? 6
 RSA keys may be between 1024 and 4096 bits long.
 What keysize do you want? (2048) 1024
 Requested keysize is 1024 bits
 Please specify how long the key should be valid.
        0 = key does not expire
     <n>  = key expires in n days
     <n>w = key expires in n weeks
     <n>m = key expires in n months
     <n>y = key expires in n years
 Key is valid for? (0) 1y
 Key expires at Sat May 22 22:25:33 2010 EEST
 Is this correct? (y/N) y
 Really create? (y/N) y
 We need to generate a lot of random bytes. It is a good idea to perform
 some other action (type on the keyboard, move the mouse, utilize the
 disks) during the prime generation; this gives the random number
 generator a better chance to gain enough entropy.
 ...+++++
 .+++++
 
 pub  1024R/6013CC32  created: 2009-05-22  expires: never  usage: SC  
                      trust: ultimate      validity: ultimate
 sub  1024R/3DE71334  created: 2009-05-22  expires: 2010-05-22  usage: E   
 [ultimate] (1). Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>
 
 Command> save
 $ 

Võtmete juures on kirjas

  • pub/sub - kas tegu on primaarse või alamvõtmega
  • võtme pikkus ja nimi
  • moodustamise ja kehtivuse lõppemise aeg
  • kasutus - allkirjastamine (S, signing) või krüptimine (E, encryption)

Interaktiivse režiimi kasutamise lõpus tuleb tehtud muudatused salvestada.

Võtmehoidja sisuga tutvumine

Võtmehoidja sisuga lähemaks tutvumiseks tuleb kasutada lisaks -vv lippe

 $ gpg -kvv
 gpg: using PGP trust model
 /home/mart/.gnupg/pubring.gpg
 -----------------------------
 pub   1024R/6013CC32 2009-05-22 [expires: never]
 uid                  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>
 sig 3        6013CC32 2009-05-22  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>
 sub   1024R/3DE71334 2009-05-22 [expires: 2010-05-22]
 sig          6013CC32 2009-05-22  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>

Siit on näha, et alamvõti on allkirjastatud kasutaja primaarse võtmega, millele viitavad sig kirjed.

Võtmete sõrmejälgede esitamiseks tuleb kasutada --fingerprint võtit, ka alamvõtmete omade esitamiseks kaks korda

 $ gpg --fingerprint --fingerprint
 /home/mart/.gnupg/pubring.gpg
 -----------------------------
 pub   1024R/6013CC32 2009-05-22 [expires: never]
       Key fingerprint = C510 B672 65EE 5C8D 5D61  1E96 8504 959C 6013 CC32
 uid                  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>
 sub   1024R/3DE71334 2009-05-22 [expires: 2010-05-22]
       Key fingerprint = A875 31E7 1129 B48A B5BD  E00F BF20 1742 3DE7 1334

GnuPG seadistusfaili kasutamine

Failisüsteemis on kasutaja GnuPG kasutamisega seotud sellised failid kataloogis .gnupg

 $ find .gnupg -ls
 132733    4 drwx------   2 mart     mart         4096 May 22 22:33 .gnupg
 132741    4 -rw-------   1 mart     mart         1496 May 22 22:28 .gnupg/pubring.gpg~
 132736    4 -rw-------   1 mart     mart         1280 May 22 22:04 .gnupg/trustdb.gpg
 132737    4 -rw-------   1 mart     mart          600 May 22 22:28 .gnupg/random_seed
 132743    4 -rw-------   1 mart     mart         2292 May 22 22:30 .gnupg/secring.gpg
 132734   12 -rw-------   1 mart     mart         9153 May 22 22:33 .gnupg/gpg.conf
 132740    4 -rw-------   1 mart     mart         1182 May 22 22:30 .gnupg/pubring.gpg

Kasutaja GnuPG seadistusfailis .gnupg/gpg.conf saab näiteks kasutada parameetrit no-greeting et programmi kasutamisel ei esitataks copyright teadet

 no-greeting

Andmete allkirjastamine

 $ gpg -s -u 0x4E71DD63 tekstifailinimi

Krüptimine

 $ gpg -e -r 0x4E71DD63 tekstifailinimi

Võtmete haldamine

Kasutaja enda võtme kehtetuks tunnistamine

Kasutaja saab oma võtme kehtetuks tunnistada juhul kui ta on moodustanud aegsasti nn kehtetuks tunnistamise sertifikaadi (ingl. k. revoke certificate) öeldes

 $ gpg --gen-revoke 0xE28D6116
 
 sec  1024D/E28D6116 2009-05-16 Mart Kask <mart@loomaaed.tartu.ee>
 
 Create a revocation certificate for this key? (y/N) y
 Please select the reason for the revocation:
   0 = No reason specified
   1 = Key has been compromised
   2 = Key is superseded
   3 = Key is no longer used
   Q = Cancel
 (Probably you want to select 1 here)
 Your decision? 3
 Enter an optional description; end it with an empty line:
 > 
 Reason for revocation: Key is no longer used
 (No description given)
 Is this okay? (y/N) y
 
 You need a passphrase to unlock the secret key for
 user: "Mart Kask <mart@loomaaed.tartu.ee>"
 1024-bit DSA key, ID E28D6116, created 2009-05-16
 
 ASCII armored output forced.
 Revocation certificate created.
 
 Please move it to a medium which you can hide away; if Mallory gets
 access to this certificate he can use it to make your key unusable.
 It is smart to print this certificate and store it away, just in case
 your media become unreadable.  But have some caution:  The print system of
 your machine might store the data and make it available to others!
 -----BEGIN PGP PUBLIC KEY BLOCK-----
 Version: GnuPG v1.4.9 (GNU/Linux)
 Comment: A revocation certificate should follow
 
 iEkEIBECAAkFAkoYK2wCHQMACgkQcICc29d2wohiQgCfetS/OBHt7et3Ze9Qh6F8
 rE2iqaQAn3sM0JgxAlC22iA2f/SBVK5OjnEf
 =s2b5
 -----END PGP PUBLIC KEY BLOCK-----

Seejärel tuleb revoke sertifikaadile vastav tekst

 -----BEGIN PGP PUBLIC KEY BLOCK-----
 Version: GnuPG v1.4.9 (GNU/Linux)
 Comment: A revocation certificate should follow
 
 iEkEIBECAAkFAkoYK2wCHQMACgkQcICc29d2wohiQgCfetS/OBHt7et3Ze9Qh6F8
 rE2iqaQAn3sM0JgxAlC22iA2f/SBVK5OjnEf
 =s2b5
 -----END PGP PUBLIC KEY BLOCK-----

salvestada tekstifaili (nt mar-rc.gpg) või ehk isegi trükkida paberile ja paigutada see turvalisse kohta.

Enda avalike võtmete võtmeserverisse kopeerimine

 $ gpg --keyserver hkp://keys.gnupg.net:11371 --send-keys 0x8B9484D2
 gpg: sending key 8B9484D2 to hkp server keys.gnupg.net

Teise kasutaja avaliku võtme võtmehoidjasse lisamine

Võtmete otsimiseks sobib öelda

 $ gpg --keyserver hkp://keys.gnupg.net:11371 --search-keys "Priit Kask"

Teise kasutaja avaliku võtme eelmaldamine

 $ gpg --delete-key priit

Enda võtme kehtetuks kuulutamine

Kui mingil põhjusel kasutaja ei soovi või ei saa enda oma võtit kasutada, tuleb puhtasse võtmehoidjasse kopeerida nt võtmeserverist kasutaja avalik võti

 $ gpg --keyserver hkp://192.168.10.199:11371 --search-keys 0xE28D6116

seejärel laadida revoke certificate

 $ gpg --import mart-rc.gpg
 gpg: key E28D6116: "Mart Kask <mart@loomaaed.tartu.ee>" revocation certificate imported
 gpg: Total number processed: 1
 gpg:    new key revocations: 1
 gpg: no ultimately trusted keys found

ning saata võti võtmeserverisse

 $ gpg --keyserver hkp://192.168.10.199:11371 --send-keys 0xE28D6116

Kui seejärel küsida võtmeserverist selle kasutaja võtit, siis öeldakse

 $ gpg --keyserver hkp://192.168.10.199:11371 --search-keys 0xE28D6116
 gpg: searching for "0xE28D6116" from hkp server 192.168.10.199
 (1)     Mart Kask <mart@loomaaed.tartu.ee>
         1024 bit RSA key E28D6116, created: 2009-05-23 (revoked)
 ...

Võtme eksportimine võtmehoidjast

Võtmehoidjas oleva võtme 0x55BE302B saab eksportida öeldes nt Debiani paketihaldusega soetud võtmete puhul nii

 # gpg --no-default-keyring --keyring /etc/apt/trusted.gpg \
   --export 0x55BE302B > /tmp/55BE302B.gpg

Võtme -a (nn ascii armor) kasutamisel tekitatakse väljund ascii teksti kujul, mida on nt hiirega ühest aknast teise mugav kopeerida

 # gpg -a --no-default-keyring --keyring /etc/apt/trusted.gpg \
   --export 0x6D849617
 -----BEGIN PGP PUBLIC KEY BLOCK-----
 Version: GnuPG v1.4.9 (GNU/Linux)
 
 mQENBEl7U/sBCAC89gF2l3X2IZIpMKI+5cJxb8csPIYtwbgJ4w+bDfe7w6zVeOHn
 5XO3MYp+xTd2/ofeSy9tg/SOFub2C1glM6oPDnJOAImwAAFHsSPFd28KHki0M+Bh
 /XeN/uWAA1jdFGP8PaVEWn2pIaOVQx2cGxTT0q73eD2iKtvL7Ontv3TYLoGJsYbW
 sRNVmThDqNfqVJ8AlnRRoKLCoELKjxPia5tPx3VIinAGWezuxaqlMKsWqmiVyYCw
 IRNQn858RjC4Rtvy009lMjUaEz8WIsxilFrOrZhMf+bLIHbbUHqFy9ua1NFsIJDh
 tPKjvT9EBjki9413VXMfMYkIvIBMxAKKo5/LABEBAAG0OURlYmlhbi1Wb2xhdGls
 ZSBBcmNoaXZlIEF1dG9tYXRpYyBTaWduaW5nIEtleSAoNS4wL2xlbm55KYkBPAQT
 AQIAJgUCSXtT+wIbAwUJB4TOAAYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEN/Z
 kzBthJYXE0QIAK6PpBY38NRtBRtmIRgi6XHZ6cV/yNKj4PwMnIun7gXmVuYoGQYT
 TVOBGAVbyLlLWqYLbv+Vjq6d7Ybnr0Csz+PMbLY3i3feQ54ZfYIj4PC9v8Bzv7IJ
 8+H+PS8YEg0Ju/eCeTQ6eVfZidhgEqiQkpDx3DKYfnctSxUmFykHbltn5UsTxa7R
 mCK1X2ONXXtBxbXZMTIT/9MFG+BwMxQ/9Xbl+loFt5mp25NqrCbsgQ375I3l21L7
 yJhCCOWMahB9GmimYqIlt7H8GrA91k2yKPICoFGvPr2exKuMxHYzdbcWmg4T7ABp
 sp3eNDHcOU/w/Xknh0dwjcP7+0tDrY0f5B+IRgQQEQIABgUCSXtUDQAKCRCZ05mh
 7DahhW6/AJ9NC6pHb53irBHARPBsrt/U2y4KrwCfQTGGi9MMExWJqs9KZ4qga+Xs
 /wI=
 =es52
 -----END PGP PUBLIC KEY BLOCK-----

Võtme importimine võtmehoidjasse

 # gpg --no-default-keyring --keyring /etc/apt/trusted.gpg \
   --import /tmp/55BE302B.gpg

Paperkey

 # apt-get install paperkey

Võtmeserver

Olemasoleva võtmeserveri kasutamine

Üks avaliku võtmeserveri tema veebiliidese kaudu kasutamise kasu on, et saab näha nimeliselt võtme allkirjastajate nimekirja, nt http://pgp.mit.edu:11371/pks/lookup?op=vindex&search=0x4D270D06F42584E6

 Search results for '0x4d270d06f42584e6'
 
 Type bits/keyID     cr. time   exp time   key expir
 
 pub  1024D/F42584E6 2008-04-06            
 
 uid Lenny Stable Release Key <debian-release@lists.debian.org>
 sig  sig3  F42584E6 2008-04-06 __________ 2012-05-15 [selfsig]
 sig  sig   9B7C328D 2008-04-06 __________ __________ Luk Claes <luk@lugwv.be>
 sig  sig   C93BFF79 2008-04-06 __________ __________ Bernd Zeimetz <bernd@bzed.de>
 sig  sig   58510B5A 2008-04-06 __________ __________ Christoph Berg <cb@df7cb.de>
 sig  sig   29F19BD1 2008-04-06 __________ __________ Dr. Michael Meskes <meskes@debian.org>
 sig  sig   5D64F870 2008-04-06 __________ __________ Martin Zobel-Helas <zobel@debian.org>
 sig  sig   16AF7728 2008-07-15 __________ __________ Sun Sky (Sky) <sk222@163.com>
 sig  sig   9DE1EEB1 2009-02-27 __________ __________ Marc 'HE' Brockschmidt <he@ftwca.de>
 sig  sig   B2CFCDD8 2009-04-11 __________ __________ Philipp Kern

Võtmeserveri pidamine

Võtmeservereid on üsna erinevaid, nt HKS (OpenPGP HTTP Keyserver Protocol) ja LDAP protokolli kasutavad. Tundub, et üks suhteliselt populaarne võtmeserveri tarkvara on SKS (SKS OpenPGP Key Server) http://minskyprimus.net/sks/.

Tavaliselt GnuPG kasutajal ei ole vajadust pidada lokaalset võtmeserverit, aga kui huvi on, siis SKS paigaldamiseks tuleb öelda

 # apt-get intall sks

ning seejärel moodustada esialgne andmebaas. Selleks sobib öelda

 $ cd /var/lib/sks/dump
 $ /usr/lib/sks/sks_build.sh

Võtmeserveri käivitamiseks tuleb näidata failis /etc/default/sks rida

 initstart=yes

öelda

 # /etc/init.d/sks start

Seejärel saab võtmeserverisse võtmeid salvestada ning sealt võtmeid kopeerida.

Usaldusvõrgustik

Usaldusvõrgustik (ingl. k. web of trust) on TODO

Graafilised GnuPG klientprogrammid

GNU Privacy Assistant

GNU Privacy Assistant tarkvara paigaldamiseks tuleb Debiani operatsioonisüsteemis öelda

 # apt-get install gpa

FreeBSD operatisoonisüsteemis asub tarkvara ports/security/gpa harus

Seahorse

Kui kasutusel on GNOME keskkond, siis on vaikimisi Seahorse tarkvara juba süsteemis olemas, iseenesest vastab talle pakett seahorse.

OpenPGP kaart

Kiipkaardi kasutamise üheks eesmärgiks on teha pahalase jaoks võimalikult raskeks omada kasutaja salajase võtme kasutamiseks vajalikke kõiki komponente samaaegselt.

OpenPGP kaardi kasutamisel võrreldes GnuPG tarkvara nö niisama kasutamisega kaasnevad sellised eelised

  • salajane võti ei asu failisüsteemis - salajane võti võib pahalase kätte sattuda sel juhul nt üle võrgu ära kopeerimisel või kui see varundatakse koos muude kasutaja andmetega ning backuppi ei hoita turvaliselt
  • salajane võti ei asu arvuti mälus - sarnaselt arvuti failisüsteemis olevate andmetega saab kopeerida arvuti mälus olevaid andmeid
  • salajase võtme kasutmiseks tuleb võti lahti lukustada ja on oluline kui OpenPGP kaardi kasutamise jaoks vajalikke PIN koode saab sisestada mitte klaviatuurilt, vaid kaardilugejast
  • OpenPGP kaarti saab hoida füüsiliselt kaardilugejas ainult siis, kui seda kasutatakse

Kujutledes sellist suhteliselt halba juhtumit, kus pahalasel on täielik kontroll kasutaja arvuti üle ei saa ta siiski kasutaja salajast võtit kasutada päris meelevaldselt, kuna võtme kasutamiseks peab kasutaja sisestama PIN koodi kaardilugejas (eeldusel, et kasutatakse sellist lugejat). See tähendab, et pahalase tegevus on piiratud ainult kasutaja töökohaga.

OpenPGP kaart http://www.g10code.com/p-card.html selliste omadustega protsessorkaart (alltoodud loetelu ei ole lõplik)

  • kaardil saab asuda 3 üksteisest sõltumatut 1024 bit RSA võtit (allkirjastamine, krüptimine ja autentimine (ingl. k. signing, encryption, authentication), millest GnuPG kasutab kahte esimest
  • võtmete genereerimine kaardil või olemasolevate võtmete kaardile kopeerimine
  • kaardil asuva võtme abil moodustatud allkirjade loendur
  • saab kasutada Debian Lenny operatsioonisüsteemi standardse paketihalduse tarkvara abil (GnuPG-1)
  • ISO 7816-4,-8 standarditega ühilduv

Muu seas soosib Fellowship of Free Software Foundation selle kaardi kasutamist oma liiklmete seas, kaardi kasutumisega saab tutvuda aadressil http://wiki.fsfe.org/Crypto_Card olevas wikis.

OpenPGP kaart näeb välja selline

Openpgp-1.gif Openpgp-2.gif

OpenPGP kaardi kasutamise ettevalmistamine

Selleks, et arvutiga saaks Debianis OpenPGP kaardi kasutada tuleb praktiliselt sooritada sarnased ettevalmistused nagu Eesti ID-kaardi kasutamiseks, http://kuutorvaja.eenet.ee/wiki/Eesti_ID-kaardi_kasutamine_Debianiga#Kaardilugeja_.C3.BChendamine_operatsioonis.C3.BCsteemiga ja tundub, et sobivad samasugused kaardilugejad, nt SCR-331 USB mudel.

Lisaks peab olema paigaldatud gnupg pakett (GnuPG-1 tarkvara), Lenny puhul on tarkvara versioon 1.4.9

 # apt-get install gnupg

FreeBSDs asub see pakett ports/security/gnupg all

Sellest, et kaardilugeja riistvara on korrektselt paigaldatud ning gpg programm suhtleb kaardiga edukalt annab tunnistust sarnane väljund

 $ gpg --card-status
 gpg: detected reader `SCM SCR 331 00 00
 Application ID ...: D2760001240101010001000016000000
 Version ..........: 1.1
 Manufacturer .....: PPC Card Systems
 Serial number ....: 00001600
 Name of cardholder: [not set]
 Language prefs ...: de
 Sex ..............: unspecified
 URL of public key : [not set]
 Login data .......: [not set]
 Private DO 1 .....: [not set]
 Private DO 2 .....: [not set]
 Signature PIN ....: forced
 Max. PIN lengths .: 254 254 254
 PIN retry counter : 3 3 3
 Signature counter : 0
 Signature key ....: [not set]
 Encryption key....: [not set]
 Authentication key: [not set]
 General key info..: [none]

Antud juhul on tegu nn initsialiseerimata olekus uue OpenPGP kaardiga.

Kaardi edasiseks kasutamiseks tuleb teha valik kahe võimaluse vahel

  • võtmed genereeritakse kaardil
  • võtmed genereeritakse arvutis ja kopeeritakse kaardile

Järgnevas kirjeldame teist kasutusjuhtumit sellistel põhjustel

  • arvuti abil on parem kontrollida võtmete moodustamise protseduuri, arusaadavalt peab olema tegu turvalise arvutiga, nt arvutiga, mida kunagi ei lülitata otseselt avalikku võrku
  • põhimõtteliselt võiks kaardile paigutada ainult signeerimise ja krüptimise subkey'isid, kasutaja primaarset võtit ei hoita kaardil
  • Debian Lenny, SCR-331 USB kaardilugeja ning OpenPGP kaardilugejaga reeglina ei õnnestunud alamvõtmete kaardil genereerimine, protseduur lõppes sellise veaga
 Command> addcardkey
 ... 
 gpg: please wait while key is being generated ...
 gpg: pcsc_transmit failed: not transacted (0x80100016)
 gpg: apdu_send_simple(0) failed: general error
 gpg: generating key failed
 gpg: key generation failed: general error
 gpg: Key generation failed: general error

Salajaste alamvõtmete kaardile kandmine

Sellisel puhul on eelduseks, et enne kaardiga tegelemist on alamvõtmed arvutis moodustatud

 $ gpg -k         
 /home/mart/.gnupg/pubring.gpg
 -----------------------------
 pub   1024R/6013CC32 2009-05-22 [expires: 2019-05-20]
 uid                  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>
 sub   1024R/6A2281DF 2009-05-22 [expires: 2010-05-22]
 sub   1024R/3DE71334 2009-05-22 [expires: 2010-05-22]

Alamvõtmete kaardile kandmiseks tuleb öelda (kuigi antud näide pole kooskõlas teksti algusega, sest kasutatud kaardil on varasematest katsetustest võtmed olemas, need asendatakse)

 $ gpg --edit-key 0x6013CC32
 Secret key is available.
 
 pub  1024R/6013CC32  created: 2009-05-22  expires: 2019-05-20  usage: SC  
                      trust: ultimate      validity: ultimate
 sub  1024R/6A2281DF  created: 2009-05-22  expires: 2010-05-22  usage: S   
 sub  1024R/3DE71334  created: 2009-05-22  expires: 2010-05-22  usage: E   
 [ultimate] (1). Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>

Kuna tegeldakse salajaste võtmetega, siis tuleb vahetada režiimi

 Command> toggle
 
 sec  1024R/6013CC32  created: 2009-05-22  expires: 2019-05-20
 ssb  1024R/6A2281DF  created: 2009-05-22  expires: never     
 ssb  1024R/3DE71334  created: 2009-05-22  expires: never     
 (1)  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>

Valime tegelemiseks allkirjastamise alamvõtme (esimese) siit nimekirjast

 Command> key 1
 
 sec  1024R/6013CC32  created: 2009-05-22  expires: 2019-05-20
 ssb* 1024R/6A2281DF  created: 2009-05-22  expires: never     
 ssb  1024R/3DE71334  created: 2009-05-22  expires: never     
 (1)  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>

ja paigutame kaardile

 Command> keytocard
 gpg: detected reader `SCM SCR 331 00 00'
 Signature key ....: 0490 B7C1 8F9C 85F6 9942  F785 51D1 A671 CB91 20A2
 Encryption key....: E301 959A 0552 CAF2 9254  3256 C332 0658 D70B 9B11
 Authentication key: 900E 5F2E E335 9943 3788  23EF F196 CF79 0524 DF31

Valime millise tähendusega on võti kaardil seotud

 Please select where to store the key:
    (1) Signature key
    (3) Authentication key
 Your selection? 1
 
 gpg: WARNING: such a key has already been stored on the card!
 
 Replace existing key? (y/N) y

Salajase võtme kasutamiseks tuleb sisestada passphrase

 You need a passphrase to unlock the secret key for
 user: "Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>"
 1024-bit RSA key, ID 6A2281DF, created 2009-05-22
 

Peale kaardi Admin PINi sisestamist on näha, et võti asub kaardil

 gpg: existing key will be replaced
 gpg: 3 Admin PIN attempts remaining before card is permanently locked
 
 Admin PIN
 
 sec  1024R/6013CC32  created: 2009-05-22  expires: 2019-05-20
 ssb* 1024R/6A2281DF  created: 2009-05-22  expires: never     
                      card-no: 0001 00001600
 ssb  1024R/3DE71334  created: 2009-05-22  expires: never     
 (1)  Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>

Krüptimise alamvõtme paigutamine kaardile toimub sarnaselt. Kui võtmed on esitatud moel kaardile kantud, siis failisüsteemis on nn stub key'd, mis ütlevad GnuPG tarkvarale, et võtme kasutamiseks tuleb pöörduda kaardilugeja poole.

OpenPGP kaardi kasutamine

Peale seda kui salajased võtmed on kaardile paigutatud toimub edasine tarkvara kasutamine nagu GnuPG kasutamine ikka, ainult salajase võtme kasutamisel küsitakse kasutajalt PIN koodi.

GnuPG kasutamine epostikliendiga

Probleemid

  • mida kasutada, kas PGP/MIME või S/MIME
  • kõik kliendid ei pruugi mõista
  • krüptitud sõnumeid ei töötle kasutaja võrguperimeetril töötav sisu-põhine antiviiruse ja antispämmi tarkvara

GnuPG-2 tarkvara kasutamine

TODO

gpg-agenti kasutamine ssh võtmete jaoks

Eesti ID-kaardi kasutamine GnuPG-2 tarkvaraga Debianis

Paigaldada lisaks gnupg2 paketile gnupg-pkcs11-scd ja gpg-agent

 # apt-get install gnupg-pkcs11-scd gpg-agent

Moodustada gnupg-pkcs11-scd jaoks seadistusfail

 # egrep -v "^#|^$" /root/.gnupg/gnupg-pkcs11-scd.conf 
 log-file /tmp/gnupg-pkcs11-scd.log
 verbose
 debug-all
 providers p1
 provider-p1-library /usr/lib/opensc-pkcs11.so
 emulate-openpgpg

Ning gpg-agenti seadistusfail /root/.gnupg/gpg-agent.conf

 # cat /root/.gnupg/gpg-agent.conf 
 scdaemon-program /usr/bin/gnupg-pkcs11-scd
 pinentry-program /usr/bin/pinentry

Seejärel küsime kaardilt sertifikaatide andmed

 # gpg-agent --server --no-use-standard-socket
 OK Pleased to meet you
 scd learn
 S SERIALNO D2760001240111111111111111111111 0
 S APPTYPE PKCS11
 S KEY-FRIEDNLY 328DD8D1643FAABF3AEC6362E2F8EB7FF2870309 /C=EE/O=ESTEID/OU=authentication\
   /CN=OOLBERG,IMRE,37003212713/SN=OOLBERG/GN=IMRE/serialNumber=37003212713 on ID-kaart (PIN1, Isikutuvastus)
 S KEYPAIRINFO 328DD8D1643FAABF3AEC6362E2F8EB7FF2870309 AS\x20Sertifitseerimiskeskus\
   /PKCS\x20\x2315\x20SCard/A0055728/ID\x2Dkaart\x20\x28PIN1\x2C\x20Isikutuvastus\x29/01
 S KEY-FRIEDNLY 6D60BFD83CDBF9227C1446EBBCE14EDBCEA17380 /C=EE/O=ESTEID/OU=digital signature\
   /CN=OOLBERG,IMRE,37003212713/SN=OOLBERG/GN=IMRE/serialNumber=37003212713 on ID-kaart (PIN2, Allkirjastamine)
 S KEYPAIRINFO 6D60BFD83CDBF9227C1446EBBCE14EDBCEA17380 AS\x20Sertifitseerimiskeskus\
   /PKCS\x20\x2315\x20SCard/A0055728/ID\x2Dkaart\x20\x28PIN2\x2C\x20Allkirjastamine\x29/02
 OK

Lisame saadud andmed kasutaja seadistusfaili /root/.gnupg/gnupg-pkcs11-scd.conf, kokku on faili sisu selline

 log-file /tmp/gnupg-pkcs11-scd.log
 verbose
 debug-all
 providers p1
 provider-p1-library /usr/lib/opensc-pkcs11.so
 emulate-openpgpg
 openpgp-auth 328DD8D1643FAABF3AEC6362E2F8EB7FF2870309 
 openpgp-sign 328DD8D1643FAABF3AEC6362E2F8EB7FF2870309 
 openpgp-encr 6D60BFD83CDBF9227C1446EBBCE14EDBCEA17380

Nüüd on võimalik kasutada gpg2 programmiga id kaarti, nt küsida, näidates esmalt gpg-agenti soketi, PID'i ning konstant ühe

 # export GPG_AGENT_INFO="/tmp/gnupg-pkcs11-scd.pxRBik/agent.S:26245:1"
 # gpg2 --card-status
 Application ID ...: D2760001240111111111111111111111
 Version ..........: 11.11
 Manufacturer .....: unknown
 Serial number ....: 11111111
 Name of cardholder: [not set]
 Language prefs ...: [not set]
 Sex ..............: unspecified
 URL of public key : [not set]
 Login data .......: [not set]
 Signature PIN ....: forced
 Max. PIN lengths .: 0 0 0
 PIN retry counter : 0 0 0
 Signature counter : 0
 Signature key ....: [none]
 Encryption key....: 6D60 BFD8 3CDB F922 7C14  46EB BCE1 4EDB CEA1 7380
 Authentication key: 328D D8D1 643F AABF 3AEC  6362 E2F8 EB7F F287 0309
 General key info..: [none]

Kahjuks aga ei õnnestu GnuPG-2'ga seostada kaardi võtmeid, et neid praktiliselt kasutama hakata

 # gpg2 --card-edit
 Application ID ...: D2760001240111111111111111111111
 Version ..........: 11.11
 ...
 General key info..: [none]
 
 Command> admin
 Admin commands are allowed
 
 Command> generate
 gpg: key operation not possible: Unknown IPC comman

OpenSSL kasutamine krüptimiseks

Lisaks GnuPG tarkvarale saab OpenSSL utiliidi abil samuti edukalt krüptida, nt sümmeetriliseks krüptimiseks sobib kasutada sellist järgnevust, man enc

 $ openssl des3 -salt -in file.txt -out file.des3
 $ openssl des3 -d -salt -in file.des3 -out file.txt -k mypassword

Kasulikud lisamaterjalid