[Hauptseite Server] [Hauptseite PGP] [Key Signing Sessions] [Session Februar 2006]
UK flag [the english version]

PGP Schlüssel generieren

Diese Anleitung beschreibt die Generierung von PGP-Schlüsseln unter Unix. Wer eine grafische Oberfläche einsetzt, kann die Anleitung trotzdem verwenden um die zusätzlich nötigen Schritte zu erkennen.

Denn mit dem eigentlichen Erstellen eines PGP-Schlüssels ist es nicht getan. Weitere Aktionen sollten auch noch erledigt werden:

  1. Den Schlüssel generieren
  2. Ein Key revocation Zertifikat erstellen
  3. Ein Backup erstellen
  4. Die Schlüsseldaten auf Papier festhalten
  5. Schlüssel an Keyserver senden
  6. Die wichtigsten Regeln lesen

PGP 2.6.x, PGP 5.x oder GnuPG?

Die Version PGP 2.6.2 sollte nicht mehr verwendet werden. Sie enthält einige Bugs.

Schlüssel dürfen nicht mit der Version 5.0 erzeugt werden. Diese hat einen Fehler in der Zufallsgenerierung.

Es gibt viele Argumente für jede der Versionen...

Den eigentlichen Schlüssel generieren

Jeder braucht (mindestens) einen persönlichen Schlüssel. Dieser besteht (zumindest bei einem public key Verfahren (wie PGP es verwendet)) aus einem public key und einem private key. Der public key wird später (möglichst) in der ganzen Welt verteilt, wohingegen der private key nur dem Besitzer des Schlüssels selber bekannt sein darf!

Die Zugehörigkeit eines Schlüssels zu seinem Besitzer oder seiner Besizterin geschieht über die sogenannte User-ID. In der Regel wird die User-ID mit der E-Mail Adresse versehen. Es gibt eine Art Standard-Aufbau für PGP-User-IDs: "Nicky Kern <nicky@vis.inf.ethz.ch>" (zuerst also der Name als normaler String, und dann die EMail-Adresse in Dreiecksklammern). Die allermeisten User-IDs sind so aufgebaut und man sollte seine genauso bilden.

Der secret key wird verschlüsselt abgelegt, damit niemand der in Besitz der Datei mit dem secret key kommt, damit etwas anfangen kann. Zur Verschlüsselung wird der passphrase verwendet, der bei jeder Benutzung von PGP vom Benutzer erfragt wird. Wie der Name schon suggeriert sollte der Passphrase auf keinen Fall zu kurz sein, da er, je kürzer je einfacher, herauszubekommen ist.

Achtung: Passwörter (und speziell den passphrase von PGP) nie über eine unverschlüsselte Leitung eingeben! Um eine verschlüsselte Verbindung herzustellen, gibt es auf gut administrierten Rechnersystemen übrigens ssh als Ersatz von rsh und telnet.

Verschiedene Schlüssel können verschieden lang sein. Da PGP 2.6 und PGP 5.x verschiedene Algorithmen verwenden, werden Empfehlungen für Schlüssellängen erst weiter unten ausgesprochen. Prinzipiell gilt: je länger je sicherer. Vor allem muss man in die Zukunft schauen: nur weil man mit heutigen Algorithmen und Computern einen Schlüssel nicht (oder nicht so leicht) knacken kann, heisst das noch lange nicht, dass das auch in 5 oder 10 Jahren noch der Fall ist...

Da PGP Zufallszahlen benötigt und die auf einem Computer schwer zu bekommen sind, fragt PGP nach Tastendrücken. Man kann hier einfach fröhlich auf der Tastatur herumklimpern, bis PGP genug hat.

Hinweis:Die Wahl des Algorithmus für den Schlüssel ist nicht so einfach. Es gibt auch sehr viele unterschiedliche Argumente für den einen oder anderen Algorithmus. Aus Kompatibilitätsgründen ist RSA zu bevorzugen. Aber einige Versionen von PGP und GnuPGP können mit RSA (und/oder IDEA) nicht umgehen....

PGP 2.6

Die eigentliche Schlüsselgenerierung wird mit "pgp -kg" gestartet. PGP fragt dann nach Schlüssellänge, User-ID und Passphrase. Für die letzteren beiden gilt das vorhin gesagte. Die Keylänge sollte heutzutage mindestens 1024 Bit betragen. Eigentlich gibt (asser der höheren Verarbeitungszeit - die allerdings heute eigentlich kaum noch jemand belasten sollte) es keinen Grund nicht einen 2048-Bit Schlüssel zu generieren.

Nachdem PGP fertig ist, befindet sich der öffentliche Schlüssel in ~/.pgp/pubring.pgp und der private in ~/.pgp/secring.pgp.

PGP 5.x

Die Schlüsselgenerierung wird mit "pgpk -g" gestartet. PGP fragt nach Verschlüsselungsverfahren, User-ID, Passphrase, Keylänge und dem Auslaufdatum des Schlüssels. Für das Verschlüsselungsverfahren kann DSS/Diffie-Hellman oder RSA gewählt werden. Es werden vier Standardmöglichkeiten für die Keylänge angeboten. Ich empfehle eine der beiden letzteren zu nehmen. Als Auslaufzeit für den Schlüssel wird man in der Regel 0 (läuft nie aus) wählen.

GnuPG

Die Schlüsselgenerierung wird mit "gpg --gen-key" gestartet. GnuPG fragt nach Verschlüsselungsverfahren, Schlüssellänge, Auslaufdatum des Schlüssels, User-ID (Name Vorname/E-Mail/Kommentar), Passphrase (Mantra). Für das Verschlüsselungsverfahren ist DSA und ElGamal zu wählen. RSA wird bei der Schlüsselgenerierung nicht unterstützt. Es werden drei Standardmöglichkeiten für die Keylänge angeboten. Ich empfehle 2048 zu wählen. Als Auslaufzeit für den Schlüssel wird man in der Regel 0 (läuft nie aus) wählen.

Key revocation Zertifikat

Jetzt ist auch der Moment um ein key revocation Zeritifikat zu machen. Mit diesem kann der Schlüssel als ungültig erklärt werden. Z.B. wenn man den pass phrase vergessen hat. Dieses Zertifikat sollte an einem sicheren Platz gespeichert werden. Da dieses Zertifikat erst in den Umlauf geraten darf, wenn der Schlüssel wirklich zurückgezogen werden soll, müssen die Originalschlüssel zuerst gerettet werden (die Befehle sind in Unix-Syntax angegeben):

PGP 2.6

  1. cd Verzeichnis wo pgp-Dateien sind (in der Regel: ~/.pgp)
  2. cp pubring.pgp pubring.ok
  3. pgp -kd <userID>
  4. pgp -kxa <userID> revoke
  5. cp pubring.ok pubring.pgp

Mit dem Schritt 5 wird der ursprüngliche öffentliche Schlüsselbund wieder hergestellt. Das Rückrufzertifikat ist nun in der Datei revoke.asc. Wird diese Datei mit pgp eingelesen (oder auf die Keyserver gelegt), wird der Schlüssel unwiderruflich als ungültig erklärt.

PGP 5.x

  1. cd Verzeichnis wo pgp-Dateien sind (in der Regel: ~/.pgp)
  2. cp pubring.pkr pubring.ok
  3. pgpk --revoke <userID>
  4. pgpk -x <userID> > revoke.asc
  5. cp pubring.ok pubring.pkr

Mit dem Schritt 5 wird der ursprüngliche öffentliche Schlüsselbund wieder hergestellt. Das Rückrufzertifikat ist nun in der Datei revoke.asc. Wird diese Datei mit pgp eingelesen (oder auf die Keyserver gelegt), wird der Schlüssel unwiderruflich als ungültig erklärt.

GnuPG

  1. gpg --gen-revoke <userID>
  2. Auswahl Hinweis: Dieser Schlüssel ist nicht mehr sicher anwählen
  3. Den ausgegebenen Textblock in eine Datei kopieren. Dieser Textblock sieht in etwa so aus:
    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Version: GnuPG v1.0.6 (GNU/Linux)
    Comment: Weitere Infos: siehe http://www.gnupg.org
    Comment: A revocation certificate should follow
    
    iEkEIBECAAkFAjz9Y5cCHQIACgkQ2rgjBHv7Gs12NACcCeb2ofK6PwzYgJsHrx6M
    czCbmc8An0x7r8vo0l5QEKt1MqsGipbf5wAy
    =7AF5
    -----END PGP PUBLIC KEY BLOCK-----
    

Das Rückrufzertifikat ist nun in der neu angelgten Datei (z.B. revoke.asc). Wird diese Datei mit gpg eingelesen (oder auf die Keyserver gelegt), wird der Schlüssel unwiderruflich als ungültig erklärt.

Hinweis: Es können auch mehrere Rückrufzertifikate erzeugt werden, je mit den verschiedenen Möglichkeiten warum der Rückruf erfolgt. So kann man im Kommentar auch angeben: Habe Passphrase vergessen.

Backup der Schlüssel

Das Rückrufzertifikat und die Schlüssel sollten jetzt auf eine Diskette kopiert werden. Die Dateien finden sich:

Speicherortbei PGPbei GnuPG
Verzeichnis ~/.pgp ~/.gnupg
Dateien pubring.pkr oder pubring.pgp
secring.pkr oder secring.pgp
pubring.pgp
secring.pgp

Die Diskette ermöglicht es später zur Kontrolle die original Schlüssel wieder zu holen. Das revoke.asc kann auf der Harddisk gelöscht werden um zu verhindern, dass es versehentlich auf einen Keyserver geschickt wird.

Eigene Schlüsseldaten ausdrucken

Damit andere Personen den Schlüssel unterzeichnen können, müssen die Schlüsseldaten überprüft werden können. Am Besten ist ein Papier-Ausdruck der eigenen Schlüsseldaten mit der eigenen handschriftlichen Unterschrift.

PGP 2.6

Die Schlüsseldaten werden mit pgp -kvc <userID> ermittelt. Das kann so aussehen:

host> pgp -kvc nicky@vis
Type Bits/KeyID    Date       User ID
pub  2048/DE3699A5 1997/10/27 Nicky Kern 
            Key fingerprint = 63 8E 7A CE 84 AF 62 81  24 1A AC 71 54 38 6A 75
1 matching key found.

PGP 5

Die Schlüsseldaten werden mit pgpk -ll <userID> ausgedruckt. Das kann so aussehen:

host> pgpk -ll nicky@vis
Type Bits KeyID      Created    Expires    Algorithm       Use
sec+ 1024 0x176E0311 1998-05-11 ---------- DSS             Sign & Encrypt 
f20    Fingerprint20 = A66C 8CD6 7B46 E8D4 5B45  E814 A815 EC84 176E 0311
sub  2048 0xF7EE4598 1998-05-11 ---------- Diffie-Hellman                 
f20    Fingerprint20 = 8400 46D2 167B 4F59 A186  001F 9C62 33A4 F7EE 4598
uid  Nicholas John Kern 
SIG       0x176E0311 1998-05-11 Nicholas John Kern 
uid  Nicky Kern 
SIG       0x176E0311 1998-05-11 Nicholas John Kern 
uid  Nicholas John Kern 
SIG       0x176E0311 1998-05-11 Nicholas John Kern 

GnuPG

Die Schlüsseldaten werden mit gpg --fingerprint <userID> ausgedruckt. Das kann so aussehen:

pub  1024D/7BFB1ACD 2002-06-04 mein test <test@test>
     Key fingerprint = 395E B8B6 412D 6755 C048  4D8F DAB8 2304 7BFB 1ACD
sub  1024g/C3FF4622 2002-06-04 [verfällt: 2002-06-05]

Schlüssel an die Keyserver senden

PGP 2.6

Unter Unix geht das einfach mit pgp -kxaf <userID> | Mail -s add pgp-public-keys@keys.pgp.net.

Allgemein lässt sich der Key zuerst extrahieren und dann per Mail an die Keyserver senden:

  1. pgp -kxa <userID> mykey (erzeugt eine Datei mykey.asc mit dem öffentlichen Schlüssel)
  2. Sende Mail an die Adresse pgp-public-keys@keys.ch.pgp.net mit dem Subject add und als eigentlicher Mailinhalt den Inhalt der Datei mykey.asc

PGP 5.x

Unter Unix einfach mit pgpk -x <userID> | mail -s add pgp-public-keys@keys.pgp.net .

Allgemein lässt sich der Key zuerst extrahieren und dann per Mail an die Keyserver senden:

  1. pgpk -x <userID> > mykey.asc (erzeugt eine Datei mykey.asc mit dem öffentlichen Schlüssel)
  2. Sende Mail an die Adresse pgp-public-keys@keys.ch.pgp.net mit dem Subject add und als eigentlicher Mailinhalt den Inhalt der Datei mykey.asc

GnuPG

GnuPG kann den Schlüssel direkt an den Keyserver senden:

  1. gpg --keyserver wwwkeys.ch.pgp.net --send-keys <userID>

Natürlich ist es auch möglich den Schlüssel zu extrahieren und dann per Web-Interface an die Keyserver zu senden:

  1. gpg --export <userID> > mykey.asc (erzeugt eine Datei mykey.asc mit dem öffentlichen Schlüssel)
  2. Verwende das Web-Interface um den Inhalte der Datei ins Keyserver-Netzwerk einzuspeisen.

Die wichtigsten Regeln

Bitte lesen Sie auch die wichtigsten Regeln für den Umgang mit PGP/GnuPGP.


Hinweise, Kommentare per mail an Patrick Feisthammel <pafei@rubin.ch>
Letzte Änderung: 17. Juni 2003, Patrick Feisthammel