welcome: please sign in
location: GPG

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 ?

  1. 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
  2. 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-----
  3. Einen Recovery Key erstellen ...

4. Der Austausch von Schluesseln

Der Austausch von Schluesseln laeuft folgendermassen ab.

  1. 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.
  2. 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: 1
  3. Eine 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> save

Nun 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>

GPG (last edited 2008-07-14 09:55:46 by localhost)