Navodila za uporabo GPG (GNU Privacy Guard)

GPG je orodje za šifriranje in/ali podpisovanje podatkov. Deluje po postopku asimetričnih ključev, kjer si uporabnik zgenerira dva ključa:

Kar je šifrirano z enim ključem se lahko odšifrira z drugim in obratno. Kot se lahko sluti že iz imena, je potrebno zasebni ključ varno shraniti, javni ključ pa se objavi in pošlje vsem s katerimi želimo komunicirati šifrirano.

Če želimo sporočilo šifrirati tako, da ga lahko vidi le prejemnik, uporabimo za šifriranje prejemnikov javni ključ. Vsebino lahko potem dešifrira le zasebni ključ prejemnika. Ta način se uporablja pri izmenjavi varnostno občutljivih podatkov.

Drug način uporabe GPG je podpis sporočila, kjer sporočilu dodamo varnostno vsoto, šifrirano z zasebnim ključem. Vsota omogoča preverjanje nespremenjenosti sporočila, šifriranje z zasebnim ključem pa pove kdo je avtor varnostne vsote oz. sporočila. Temu postopku rečemo podpis sporočila. Delo s podpisi ni opisano v teh navodilih.

Več o uporabi orodja GPG si lahko preberete v priročniku GPG.

 

Kratka navodila za šifriranje podatkov z GPG

Tu se bomo osredotočili na uporabo GPG v ukazni vrstici, neodvisno od uprabljenega operacijskega sitema (UNIX, Windows... ). Za večino operacijskih sistemov obstajajo tudi grafična orodja za upravljanje in delo s ključi oz. so del odjemalca za elektronsko pošto.

Izdelava para ključev GPG

Prvi korak je seveda izdelava ključev. Najprej si namestimo svojemu operacijskemu sistemu ustrezni GPG. Potem pa v ukazni vrstici poženemo:
$ gpg --gen-key
gpg (GnuPG) 1.2.4; Copyright (C) 2003 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
minimum keysize is 768 bits
default keysize is 1024 bits
highest suggested keysize is 2048 bits
What keysize do you want? (1024)
Requested keysize is 1024 bits
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct (y/n)? y

You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) "

Real name: Ime in Priimek
Email address: ime.priimek@nekje.si
Comment: Psevdonim
You selected this USER-ID:
"Ime in Priimek (Psevdonim) "

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.
+++++++++++++++.+++++.+++++.+++++++++++++++++++++++++++++++++++++++++++++..
+++++++++++++++++++++++++..+++++++++++++++.++++++++++++++++++++>++++++++++>
+++++............................................+++++
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.
++++++++++++++++++++++++++++++.++++++++++.++++++++++...+++++++++++++++.+++
++++++++++++..++++++++++++++++++++.++++++++++++++++++++++++++++++>+++++...
..........................................................................
...................+++++^^^
public and secret key created and signed.
key marked as ultimately trusted.

pub 1024D/02D5CD1A 2004-10-28 Ime in Priimek (Psevdonim)
Key fingerprint = 6478 C87F 83CB 8334 D5DD ECAE A9EB 6380 02D5 CD1A
sub 1024g/9FD0FA9D 2004-10-28

Vnos ključev v zbirko

Ko izdelamo lastne ključe, se ti samodejno namestijo v zbirko ključev. Vendar pa moramo tuje javne ključe ročno uvoziti v zbirko:
$ gpg --import javni_kljuc.txt 
gpg: key 02D5CD1A: public key "Negdo Drugi (Psevdonim2) " imported
gpg: Total number processed: 1
gpg: imported: 1

Izpis nameščenih ključev

Zbirko javnih ključev izpišemo z ukazom gpg --list-keys, zasebnih pa z gpg --list-secret-keys:
$ gpg --list-keys
/home/uporabnik/.gnupg/pubring.gpg
----------------------------
pub 1024D/12DECD1A 2004-10-28 Negdo Drugi (Psevdonim2)
sub 1024g/AFE1FA9D 2004-10-28

pub 1024D/32D5CD1B 2004-10-28 Ime in Priimek (Psevdonim)
sub 1024g/AEE12A3D 2004-10-28

$ gpg --list-secret-keys
/home/uporabnik/.gnupg/secring.gpg
----------------------------
sec 1024D/02D5CD1A 2004-10-28 Ime in Priimek (Psevdonim)
ssb 1024g/9FD0FA9D 2004-10-28

Izpis javnega ključa

Za izpis javnega ključa uporabimo gpg -a --export <ime>. Izpis potem preprosto prekopiramo preko odlagališča v sporočilo in pošljemo; lahko pa seveda tudi shranimo v datoteko in prenesemo kako drugače (ključ USB...):
$ gpg -a --export "Ime in Priimek"
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.4 (GNU/Linux)

mQGiBEGAoJYRBACdZm9sGtOtjNW2a7JKxkBHrIYAtPKLFKiVzs1gMMlf3u2kpf0P
tO40ZvDupmyDRnTUia/ycRgu6T39OjsL7B+vNr2kAGvFa8Fh1IgUkbC+MSEmNKVw
92lgyNLf7Oxy4s4rBq75zaJy6Ji1F/PvlEcVd4LS+zXNlHpoxWHmQTRwpwCgl+E3
yC58GBOJY43bcoCN2J7IWjcD/j7Afuy34qGN2MckUcTpkG8ClIo+qbzdst2MG6bU
jcQkH6ChixULACpu+ydKMPExJwtVSOEg4smo43YIL5n+vE1B6GxcbsWezRofFxnX
P4vK06DGDKej259NasfSzHwQZ8CBEKtZEl1oefnXg6qHgocGXXT4a6WGlKS/shpy
t48RA/9t+DlWI002ADpA3fmAEA67zW4Lb2qDfFKdPzshAZGqvZ35LzACeQT97lcg
sDQnD2uxhYnyKj9MEFrVfqS6Fvq2N6SkqFsO9x/r0/tBPfh96ZpAMllChwBUWOJh
UyScv4Px8iLroJ9Lo2OeI+KVR/QC8V2G8pB77am8qzizY519ALQxSW1lIGluIFBy
aWltZWsgKFBzZXZkb25pbSkgPGltZS5wcmlpbWVrQG5la2plLnNpPoheBBMRAgAe
BQJBgKCWAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEKnrY4AC1c0aoiEAnjp+
bi7+ZTPMcTyVmzyWpclORUX+AJwK8BCtn4eiRMF/NNI6fDEoPzpmEbkBDQRBgKCY
EAQAl+yoXpsuWiclbhxLDZE6iR7Ld6eFxgovBbdQktUloMVQu4E8QL5Ye3DJW+3h
UpkbURAzLuOI8HBub72f8sFKOqXDd63I4B9Ci9MXj6Q2c3SmxU4rsa/TNpSf+DDE
+EjRvYsGsYvISC6YHRNWEqMhu+r9Z7SRThBfZy9vXA173FMAAwUD/3xclEaeDkmd
0YoWYaFNy1AT2zr33SzfZ06t4y5YeK0r6lDwqH8sBSYRqPZt5l3ngsafrI/CaWk8
3bSs3r8YqH530AtXwQBlu4/fGbU4gtVE9cJV8uyp1lrVjjFzyRHo/uBNcU0ieATd
0raZ9KspFKI1eiT68FMp76BGznE2GakoiEkEGBECAAkFAkGAoJgCGwwACgkQqetj
gALVzRpF2ACeIT89X4xBIWB4gwX9Cud9ActFrywAoIwwy6/zBpTYPeJdRpgoOw4E
GQFw
=wGaf
-----END PGP PUBLIC KEY BLOCK-----

Šifriranje

Za šifriranje vsebine datoteke se uporabi gpg -e. V našem primeru želimo poslati podatke na naslov negdo.drugi@nekje.si:
$ gpg -a -r "Negdo Drugi" -e datoteka.txt
gpg: CA4F7CF2: There is no indication that this key really belongs to the owner
2048g/CA4F7CF2 2004-10-22 "Negdo Drugi (Psevdonim2) "
Primary key fingerprint: BAC6 E379 99E7 AD1C 24B4 D5DE FG5A C069 712D 9853
Subkey fingerprint: 9101 ADDE B3A1 B791 B587 35F2 BC8B A69A CE8F 7EF2

It is NOT certain that the key belongs to the person named
in the user ID. If you *really* know what you are doing,
you may answer the next question with yes

Use this key anyway? y
Kodirana vsebina se potem nahaja v datoteki, ki ima dodano končnico ".asc". V našem primeru "datoteka.txt.asc":
$ cat datoteka.txt.asc 
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.2.4 (GNU/Linux)

hQIOA/TlO6Z14gv9EAf/e/OMNKZTDkbQURo/tA8klxNXPtpiCbt0mTycHz/51EZu
dCYETQMboYYSbRgbR4uFW5YogxIENwdqOU/70lc6d1L443k8EJfvvgZFqyY2Sh3S
S3d98Tzl3DCqv4BpAPlJTGbJtZxwHY8Szv1HWtEcwu3D9XVtu6esg6bfrnVPK94f
VzIeh7eqiBlMXTtZkrCC54ft+XGUbx20PIVXYaX6tmr/UrckbykewYbthZipiyqU
vSqcL0kQ+oR5AQI5vgqn3qcc9XvbluVKTBxv39zeUrtrbxvoQXPEUl8km2Bhooyn
Gv+KfX8hijh4T7Fd2+wqVnAx+lrkcW9/+gdjoficcQf/bFMdOG9nFnH+5RtPERk2
YtTQ9dTbxWO4nGW4iaJmfwMcYCuITeGueGBQyuYw0FFfk89alo85JBJ6MZfF4lDt
qOfFpGCjN4cJn4HWeUrmtgLXbnP5X0A45VgJ6Y+y9fRyG+ASntoIcyw4nKn4WEdO
3XvA+EfsyBZSs6Ezs2xEIF8C5GMSk9b91O699mcvmSxVDaBDMYfUdBrYI5J0XAB+
tJdLF/FGzj/5CGI2D7sHwsX8S9LrAKo71RJywDOSu2uf1bmRu+VoQbkYWV/C1gGu
6osu8PoYm9cK1/Kn1tKouQWkLyopoFmrjGXdHdsa04A4cpN5CPc4SJEwdv6mq60j
VdJKAfFr2Ba1SS6hxNp5pB9Xg48mBIx4JbKOOpuPLSo4QsMwW/j3lU1NWRGGTABx
Y4P0JKgVBUK3e65BjyXYmSeoZ+DnL2Og04sCS80=
=f8sg
-----END PGP MESSAGE-----
Vsebina datoteke se lahko brez kakršnihkoli nadaljnih čarovnij vstavi v sporočilo in posreduje naslovniku.

Dešifriranje

Prejeto šifrirano sporočilo je šifrirano z našim javnim ključem in se dešifrira z gpg -d. Pri tem dostopamo do svojega zasebnega ključa, ki je ponavadi varovano z geslom:
$ gpg -d datoteka.txt.asc 

You need a passphrase to unlock the secret key for
user: "Ime in Priimek (Psevdonim) "
1024-bit ELG-E key, ID 75520BFD, created 2004-10-2 (main key ID 76B69FBC)

gpg: encrypted with 1024-bit ELG-E key, ID 75620BFD, created 2004-10-22
"Ime in Priimek (Psevdonim) "
Vsebina datoteke datoteka.txt - vrstica 1
Vsebina datoteke datoteka.txt - vrstica 2
Vsebina datoteke datoteka.txt - vrstica 3
...

~