GnuPG kasutamine
Sisukord
Sissejuhatus
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, sisaldab nt OpenPGP protsessorkaardi kasutamise tuge, pgp-agent teeb kasutamise töökohaarvutis mugavaks
Mõlemat versiooni saab kasutada paralleelselt samade nö andmetega (võtmetega).
Võtme moodustamine
GnuPG kontekstis on kasutajal reeglina kasutada kolm võtmepaari
- primaarne võtmepaar, mille salajast võtit kasutatakse ainult muude võtmete allkirjastamiseks
- allkirjastamise võtmepaar, mida kasutatakse ainult allkirjastamiseks
- krüptimise võtmepaar, mida kasutatakse ainult krüptimiseks
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 võtme moodustamine
Primaarse võtme genereerimiseks tuleb öelda
$ gpg --key-gen 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) 10y Key expires at Mon May 20 22:04:42 2019 EEST 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: 2019-05-20] 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: 2019-05-20] 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: 2019-05-20] uid Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>
Allkirjastamise võtme moodustamine
gpg programmil on olemas ka internatiivne režiim, võtmete haldamiseks saab seda kasutada öeldes nt kus 0x on standardne prefix, --no-greeting kasutamisel ei esitata copyright teate teksti
$ gpg --no-greeting --edit-key 0x6013CC32 Secret key is available. pub 1024R/6013CC32 created: 2009-05-22 expires: 2019-05-20 usage: SC trust: ultimate validity: ultimate [ultimate] (1). Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee> Command>
Command> järele saab öelda võtme haldamist puututavaid käske, sh help.
Allkirjastamise võtme moodustamiseks tuleb öelda addkey
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? 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) 1y Key expires at Sat May 22 22:22:42 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: 2019-05-20 usage: SC trust: ultimate validity: ultimate sub 1024R/6A2281DF created: 2009-05-22 expires: 2010-05-22 usage: S [ultimate] (1). Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>
Tavaliselt valitakse alamvõtmete pikkuseks mõõdukas aeg, nt mõni aasta.
Käsu toggle abil saab liikuda avalike ja salajaste võtmete esitamise vahel
Command> toggle sec 1024R/6013CC32 created: 2009-05-22 expires: 2019-05-20 ssb 1024R/6A2281DF created: 2009-05-22 expires: 2010-05-22 (1) Mart Kask (Tartu Loomaaed) <mart.kask@loomaaed.tartu.ee>
Krüptimise võtme moodustamine
Krüptimise võtme moodustamiseks tuleb sooritada selline järgnevus
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: 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> 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: 2019-05-20] 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/6A2281DF 2009-05-22 [expires: 2010-05-22] sig 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 iga alamvõti on allkirjastatud kasutaja primaarse võtmega, millele viitavad sig kirjed.
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
Võtmeserverite kasutamine
Võtmete otsimiseks sobib öelda
$ gpg2 --keyserver hkp://pgp.mit.edu:11371 --search-keys "Priit Kask"
OpenPGP kaart
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)
- 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 kaardi kasutamise ettevalmistamine
Selleks, et arvutiga saaks 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
Lisaks peab olema paigaldatud gnupg pakett (GnuPG-1 tarkvara), Lenny puhul on tarkvara versioon 1.4.9
# apt-get install gnupg
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]
Tegu on nn initsialiseerimata olekus uue OpenPGP kaardiga.
Kaardi edasiseks kasutamiseks tuleb teha otsus
- 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, mis 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, SCR331 USB kaardilugeja ning OpenPGP kaardilugejaga reeglina õnnestus subkey'ide kaardil genereerimine
Sellisel puhul on eelduseks, et enne kaardiga tegelemist on subkey'id arvutis moodustatud ning nende kaardile paigutamiseks tuleb öelda
$ gpg --edit-key mart
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
Eesti ID-kaardi kasutamine GnuPG-2 tarkvaraga
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
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