GnuPG kasutamine
Sisukord
- 1 Sissejuhatus
- 2 GnuPG tarkvara
- 3 Võtmete kasutamine
- 4 Võtmete moodustamine
- 5 GnuPG seadistusfaili kasutamine
- 6 Andmete allkirjastamine
- 7 Krüptimine
- 8 Võtmete haldamine
- 8.1 Kasutaja enda võtme kehtetuks tunnistamine
- 8.2 Enda avalike võtmete võtmeserverisse kopeerimine
- 8.3 Teise kasutaja avaliku võtme võtmehoidjasse lisamine
- 8.4 Teise kasutaja avaliku võtme eelmaldamine
- 8.5 Enda võtme kehtetuks kuulutamine
- 8.6 Võtme eksportimine võtmehoidjast
- 8.7 Võtme importimine võtmehoidjasse
- 9 Paperkey
- 10 Võtmeserver
- 11 Usaldusvõrgustik
- 12 Graafilised GnuPG klientprogrammid
- 13 OpenPGP kaart
- 14 GnuPG kasutamine epostikliendiga
- 15 GnuPG-2 tarkvara kasutamine
- 16 Eesti ID-kaardi kasutamine GnuPG-2 tarkvaraga Debianis
- 17 OpenSSL kasutamine krüptimiseks
- 18 Kasulikud lisamaterjalid
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
'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
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 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
- http://alpha.uwb.edu.pl/map/eToken_gpg_howto.shtml
- http://gnupg-pkcs11.sourceforge.net/index.html
- http://www.gnupg.org/documentation/manuals/gnupg/
- http://www.etokenonlinux.org/et/HowTos/eToken_and_GPG
- http://www.g10code.com/main.html
- http://www.gnupg.org/howtos/card-howto/en/smartcard-howto.html
- http://kuutorvaja.eenet.ee/wiki/Eesti_ID-kaardi_kasutamine_Debianiga
- http://wiki.debian.org/Smartcards/OpenPGP
- http://wiki.itcollege.ee/index.php/Krüpteerimine_Linuxis