Kleine Einfuehrung in GPG
1. Schaffen der Vorraussetzungen fuer die Schluesselerstellung
Um einen Schluessel zu erstellen benoetigt der Rechner eine Menge random (Zufalls) Daten mit denen der Schluessel generiert wird. Es eignet sich daher vor dem erstellen einen Blick in die manpage von rndcontrol zu werfen oder mit ...
rndcontrol -s n (wobei n ein irq 1-15 darstellt) Beispiel: trial:/usr/src# rndcontrol -s 1 rndcontrol: setting irq 1 rndcontrol: interrupts in use: 1
mehr Daten an /dev/random bzw. /dev/urandom leiten. mit
Beispiel2 trial:/usr/src# rndcontrol -c 1 rndcontrol: clearing irq 1 rndcontrol: interrupts in use:
kann man nach dem erstellen des Schluessels das ganze wieder rueckgaengig machen.
2. Erstellen eines Schluesselpaares
Nun kann man zum eigentlichen Erzeugen des Schluessels uebergehen. gpg --gen-key startet den interaktiven Modus dafuer.
trial:/home/mucner> gpg --gen-key
gpg (GnuPG) 1.2.2; 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)
(5) 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
<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)
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) <heinrichh@duesseldorf.de>"
Real name: Tester
Email address: tester@test.de
Comment:
You selected this USER-ID:
"Tester <tester@test.de>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
3. Was tun mit dem neu erzeugtem Schluessel ?
Es bietet sich an den Schluessel erstmal auf einen der Keyserver zu laden mit gpg --send-keys. Die Keyserver die man nutzen moechte werden dazu in .gnupg/options eingetragen. Der Pilgerer Org. e.V. nutzt z.b. folgende Konfiguration.
vi .gnupg/options (oder gpg.conf) diese Lines hinzufuegen. keyserver x-hkp://keyserver.cryptnet.net keyserver x-hkp://wwwkeys.pgp.net dann gpg --send-keys
Da man ja Seinen Public Key sharen moechte/sollte, gibt es auch noch die Moeglichkeit mit gpg --export --amor username > .plan eine ASCII version des Keys zu erzeugen. Dieses file wird dann beispielsweise bei einem finger ausgelesen oder man kann es per Mail an einen Bekannten versenden
zum erzeugen: trial:/home/mucner> gpg --export --armor > .plan trial:/home/mucner> finger mucner Login: mucner Name: Marc Sztochay Directory: /home/mucner Shell: /bin/tcsh Last login Wed Aug 13 10:40 (CEST) on ttypk from hamlet.pilgerer Mail last read Wed Aug 13 14:31 2003 (CEST) Plan: -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.2 (FreeBSD) mQGiBD86E/YRBACtZsg1i+7JxZ/nulAaR+oG7d6guHJ781uwiUddC9Lzs616Ge6O gdhSt/cBa+BqKhue5Ya6fJ7Xjrpn4GpxR3gGsTmr2bzGsQcclanoE9DTbEavK5vt KLY4L3k/bYXx84IeIn5afDGkR1jHF5V6HMbzAPuNdLAa9LjcmdHwO6eo5wCg0jb4 IDKWzHk0Oio9SoS7sKarNUED/itEtXPu9N6gluhQceMalPOOHkAoKusk3Fas7fHj sgQ1s/GtZtvbUo6i9oDp7lEnV+b/EC/ad2xfF7rP9ono+B60pqglJO/Cru3W++jH +0A6d5Ohk43fZv2uYS3OTq9A9ZmTAbHfG4s7u78md8SwUuaYxNn/dRIxRkbyDMSC hTp+A/46eF3yQMoh8Cei4253Hli9ED3PjH4NW9tuEl7IxdTUEujEzUJ7NHj6e+Q1 KDEI6FSdikg6HrkDjFQWFBs+eG/swbPqSaGtYk5y2E296WLcUmluYH1eAfTJLGmU pFFY+1EKWLTE1mhV52tS8rcKbi15DNoXo5Cx6vERjP+H13/c57Q7TWFyYyBTenRv Y2hheSAoUGlsZ2VyZXIgT3JnLiBlLlYuKSA8bXN6dG9jaGF5QHBpbGdlcmVyLm9y Zz6IYQQTEQIAIQUCPzoT9gUJXfwPAAYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRBa QwskPC7mav4KAJ95YMoZLPwew5TzcuBYomV5F7x6xQCfeNw8RbK9n1lScQz/P1K5 WOysKNW5AQ0EPzoT+hAEAKsmIoZmt6PvCsdVYwQjO4XjCTS6WCzmQI5wAn5fslsi 3MZwLwgdmALgjNF1TP63jo3p9b9LzWVPixZqBT9R20dfYpIeahlIZvRmx5i65Ox+ H/hwDwUednJCYOWMW72rKogiIxA8mlLn8ZR5ap3Kv7o44cqUYEWyxAWyR9IVVNbX AAMHBACIVCQ5JDW+IDiEj3o1OiMSjnbE0wuL1sRNNbmR7H/Xre6CT6qp07bBzoKh MqdNIZWaApwrSV5mGNBsfkJmmnJ0LyqbnK18V9IyceGbyKy+dWzN++InVexkXR1F yXh9opkMyCANyDzTiLEesRSs/tVrUiANQjI4ak7YS71/dcqbTYhMBBgRAgAMBQI/ OhP6BQld/A8AAAoJEFpDCyQ8LuZqmjkAoLQgnWj1ozqb2vkSYmc6lLo24hfvAJ9v c9ojg0ZwfyoeBSxDyGcDWHsIYw== =r6qb -----END PGP PUBLIC KEY BLOCK-----
- Einen Recovery Key erstellen ...
4. Der Austausch von Schluesseln
Der Austausch von Schluesseln laeuft folgendermassen ab.
Direktes senden eines Public Keys an einen Bekannten wie im Beispiel und anschliessendes importieren mit dem Befehl gpg --fast-import filename
trial:/home/mucner> gpg --e --a | mail -s "Mein neuer gpg Key" mailadresse@meinesfreundes.de der Empfaenger muss den Key speichern und dann wie in diesem Beispiel importieren. hamlet:/home/mucner> gpg --fast-import nick-gpg.asc gpg: key 731D3949: public key "MW (Nick) <nick@somecompany.org>" imported gpg: Total number processed: 1 gpg: imported: 1
in diesem Beispiel wird der Standartoutput an mail gepiped und sofort gesendet.. Nachteil dabei ist das der Empfaenger den Schluessel erst zwischenspeichern muss.Kennt man zum Beispiel nur den Namen des Bekannten oder geschaeftspartners, kann man auch mit gpg --search-keys $Name vorgehen..
hamlet:/home/mucner> gpg --search-keys FM gpg: searching for "FM" from HKP server wwwkeys.pgp.net Keys 1-4 of 4 for "FM" (1) FM <FM@somecompany.de> 1024 bit DSA key E17557E0, created 2002-09-01 (2) FM (FM) <flower@blumentopf.de> 1024 bit DSA key 7674C97E, created 2002-02-10 1024 bit RSA key 4D778789, created 1999-05-04 Enter number(s), N)ext, or Q)uit > 1 gpg: key E17557E0: public key "FM <FM@somecompany.de>" imported gpg: Total number processed: 1 gpg: imported: 1Eine weitere Moeglichkeit ist das abrufen des Schluessels vom Keyserver mit der eindeutigen Key-ID. dazu benutzt an das Kommando gpg --recv-keys Key-ID. Diese Moeglichkeit ist geeignet wenn man den Schluessel nicht ungeschuetzt durch das Internet schicken moechte wo die Email eventuell von einer 3. Person manipuliert wird. Man schickt dann einfach nur die Key-ID und laesst den Empfaenger den Schluessel selber downloaden.
trial:/home/mucner> gpg --recv-keys 0xF96B2EC0 gpg: key F96B2EC0: public key "DT <dt@somecompany.de>" imported gpg: Total number processed: 1 gpg: imported: 1
5. Schluessel verwalten/editieren und etwas ueber Vertrauen
Hat man einen Schluessel auf die ein oder andere Art erhalten stellt sich immernoch die Frage ob derjenige der einem den Schluessel hat zukommen lassen auch derjenige ist den er vorgibt zu sein. Um dieser Unsicherheit beizukommen gibt es die Moeglichkeit Keys zu signen mit gpg --edit-key Key-ID bzw. Signaturen anzuzeigen mit gpg --list-sig Key-ID. Um dieses Feature sinnvoll nutzen zu koennen muss man unbedingt die Keyserver wie weiter oben beschrieben, in die Konfiguration eingetragen haben. Ausserdem sollte man das Kommando gpg --list-keys kennen um einen ueberblick der gespeicherten Public Keys zu bekommen.
Man betrachte einfach einmal vollgendes Beispiel
trial:/home/mucner> gpg --list-keys /home/mucner/.gnupg/pubring.gpg ------------------------------- pub 1024D/3C2EE66A 2003-08-13 Marc Sztochay (Pilgerer Org. e.V.) <msztochay@pilgerer.org> sub 1024g/F539A158 2003-08-13 [expires: ????-??-??] pub 1024D/642D95CF 2003-05-06 MS <ms@mycompany.de> sub 2048g/32C6C1AC 2003-05-06
Der User hat in diesem Fall 2. Public Keys gespeichert. Nun moechte er wissen ob der Key von ms@mycompany.de wirklich von der person ist. Er gibt deshalb folgendes ein..
hamlet:/home/mucner> gpg --list-sig 642D95CF pub 1024D/642D95CF 2003-05-06 MS <ms@mycompany.de> sig 3 642D95CF 2003-05-06 MS <ms@mycompany.de> sig 3 E17557E0 2003-08-12 FM <fm@mycompany.de> sub 2048g/32C6C1AC 2003-05-06 sig 642D95CF 2003-05-06 MS <ms@mycompany.de>
In diesem Beispiel zeigt es dem User an dass der Schluessel 642D95CF von der Person FM mit dem Schluessel E17557E0 bestaetigt wurde. Da beide scheinbar in der gleichen Firma arbeiten @mycompany.de kann er nun davon ausgehen das der Key wirklich von einem Mitarbeiter dieser Firma erstellt wurde. Natuerlich ist dieses Beispiel nicht repraesentativ, da ein Sign nicht wirklich sicherheit garantiert. Man sollte sich daher eher auf mehrere Signs verlassen und die Keys mit denen gesignd wurde evtl. auch verifizieren da diese ja auch wieder gesigned werden.
Hat der User nun genug vertrauen kann er dazu uebergehen den Schluessel selber zu signen. Dazu geht er wie folgt vor:
hamlet:/home/mucner> gpg --edit-key 642D95CF
gpg (GnuPG) 1.2.2; 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.
gpg: checking the trustdb
gpg: checking at depth 0 signed=1 ot(-/q/n/m/f/u)=0/0/0/0/0/1
gpg: checking at depth 1 signed=3 ot(-/q/n/m/f/u)=1/0/0/0/0/0
gpg: next trustdb check due at 2022-05-12
pub 1024D/642D95CF created: 2003-05-06 expires: never trust: -/q
sub 2048g/32C6C1AC created: 2003-05-06 expires: never
(1). MS <ms@mycompany.de>
Command> sign
pub 1024D/642D95CF created: 2003-05-06 expires: never trust: -/q
Primary key fingerprint: 523E 1B0C 3B23 2CE3 8B0B 8A9C 1985 2ADA 642D 95CF
MS <ms@mycompany.de>
How carefully have you verified the key you are about to sign actually belongs
to the person named above? If you don't know what to answer, enter "0".
(0) I will not answer. (default)
(1) I have not checked at all.
(2) I have done casual checking.
(3) I have done very careful checking.
Your selection? 3
Are you really sure that you want to sign this key
with your key: "Marc Sztochay (Pilgerer Org. e.V.) <msztochay@pilgerer.org>"
I have checked this key very carefully.
Really sign? y
You need a passphrase to unlock the secret key for
user: "Marc Sztochay (Pilgerer Org. e.V.) <msztochay@pilgerer.org>"
1024-bit DSA key, ID 3C2EE66A, created 2003-08-13
Command> saveNun hat er seinerseits den Schluessel als echt verifiziert und sollte nun mit
gpg --send-keys Key-ID
Diese Bestaetigung an den Keyserver uebermitteln.
Misc
Um die Nachricht "insecure memory" wegzubekommen im file .gnupg/options (oder gpg.conf) die folgende Zeile hinzufuegen.
no-secmem-warning
Mutt Spezifisch
Hier noch einige Tipps bzw. Zeilen fuer Eure .muttrc. Die Folgenden Header Zeilen ermoeglichen es dem Empfaenger Euren key leichter zu verifizieren.
my_hdr X-PGP-Key: http://wwwkeys.pgp.net:11371/pks/lookup?op=get&search=0xEURESCHLUESSELID my_hdr X-PGP-Fingerprint: EUER FINGERPRINT
Mit den folgenden Einstellungen wird gpg ueberhaupt aktiviert und konfiguriert unter Mutt
# gpg settings # # autosign all messages set pgp_autosign # encrypt replies to messages which are encrypted set pgp_replyencrypt # sign replies to messages which are signed set pgp_replysign # sign replies to messages which are encrypted set pgp_replysignencrypted # don't display non-usable keys on the PGP key selection menu set nopgp_show_unusable # defines keyid to use for signing set pgp_sign_as="0x3C2EE66A" # expire time for cached PGP passphrases set pgp_timeout=300 set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f" set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f" set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f" set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --t extmode --clearsign %?a?-u %a? %f" set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach -sign --textmode %?a?-u %a? %f" set pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose -- textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x3C2EE6 6A -- -r %r -- %f" set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x3C2EE66A -- -r %r -- %f" set pgp_import_command="gpg --no-verbose --import -v %f" set pgp_export_command="gpg --no-verbose --export --armor %r" set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r" set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r" set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
Um automatismen zu erstellen
Man hat unter gpg wie bei jeder Aufgabe die eine Passwort eingabe erfordert ein Problem wenn man einen Automatismus erstellen moechte.
Mit diesem Kommando liesst gpg die Passphrase aus dem File password-file
gpg --passphrase-fd 0 < password-file <rest des gpg Kommandos>
Eine 2. Moeglichkeit besteht in dem man das Passwortfile an gpg pipet.
cat password-file | gpg <rest des gpg Kommandos>
Quellen und Links
- man gpg
- man mutt
- man muttrc