Der GNU Privacy Guard
Dieser Artikel beschreibt die Nutzung von GNU Privacy Guard (GnuPG), einem freien OpenPGP-kompatiblen Verschlüsselungssystem.
~$ gpg --list-key @pro-linux.de 'Werner Koch' 6EDDD207FCC5040F pub 1024D/7C714C78 2004-03-24 uid Rene van Bevern (RvB) <rvb@pro-linux.de> uid Rene van Bevern (RvB) <rvb@rvb-web.de> uid Rene van Bevern (Jabber ID) <rvb@jabber.org> uid Rene van Bevern (RvB) <rvb@fvwmwiki.org> uid Rene van Bevern (RvB) <rvb@progn.org> sub 1024g/77555177 2004-03-24 [expires: 2005-03-24] sub 1024R/705988B3 2004-07-10 pub 1024D/FCC5040F 2004-04-26 uid Stephan Beyer <s-beyer@gmx.net> uid Stephan Beyer (sbeyer) <sbeyer@kidstation.de> uid [jpeg image of size 2193] uid Stephan Beyer (Uni) <Stephan.Beyer@stud.tu-ilmenau.de> uid Stephan Beyer (JabberID) <sbeyer@jabber.org> sub 1024g/AC6D579F 2004-04-26 pub 1024D/57548DCD 1998-07-07 [expires: 2005-12-31] uid Werner Koch (gnupg sig) <dd9jn@gnu.org> pub 1024D/3DDBDDEA 2001-11-03 uid Hans-Joachim Baader <hjb@pro-linux.de> sub 1024g/2C42C700 2001-11-03
Es ist übrigens (wie auch bei den vielen anderen gpg-Kommandos) egal, ob man Singular (--list-key) oder Plural (--list-keys) benutzt - die Ausgabe bleibt die gleiche. Kann gpg keine Treffer zur Suche finden, erzeugt es einen Fehler:
~$ gpg --list-keys gibtsnicht gpg: error reading key: public key not found ~$ echo $? 2
Mit --list-secret-keys zeigt gpg die geheimen Schlüssel an. Brauchte ich ehrlich gesagt noch nie :-)
Mit --list-sigs zeigt gpg die Signaturen der Schlüssel an.
Mit --fingerprint zeigt gpg die »Fingerabdrücke« der Schlüssel an, mit denen man Schlüssel identifizieren kann. --fingerprint ist ein gpg-Kommando, während --with-fingerprint eine Option ist, die man bei anderen Kommandos nutzen kann:
~$ gpg --list-sigs --with-fingerprint sbeyer pub 1024D/FCC5040F 2004-04-26 Key fingerprint = F03F E6A6 F9B8 9520 88BA 587E 6EDD D207 FCC5 040F uid Stephan Beyer <s-beyer@gmx.net> sig 3 FCC5040F 2004-10-09 Stephan Beyer <s-beyer@gmx.net> sig 3 7C714C78 2004-04-28 Rene van Bevern (RvB) <rvb@pro-linux.de> sig 7624F276 2004-04-29 SilenceX <SilenceX@parityerror.de> sig 687B8FCA 2004-06-26 Frank Lerche <frank@frank-lerche.de> sig 4743206C 2004-06-28 Joachim Breitner <mail@joachim-breitner.de> [...]
Anmerkung: Wenn Sie gpg-Listenausgaben in Skripten zur weiteren Verarbeitung verwenden wollen, nutzen Sie den Zusatzparameter --with-colons. Das Ausgabeformat dazu ist näher unter /usr/share/doc/gnupg/DETAILS.gz erläutert. Wenn Sie dabei mit --list-sigs arbeiten, nutzen Sie zusätzlich --fast-list-mode. Das ist schneller, da es nur die in der Signatur verankerte Schlüssel-ID anzeigt und nicht noch nach der primären Benutzer-ID im Keyring suchen muss (uid wird dann generell weggelassen). Dann sei noch --fixed-list-mode erwähnt, das Schlüssel-ID und primäre Benutzer-ID getrennt anzeigt und die Zeit in Sekunden seit 1.1.1970 angibt.
Exportieren
Wahrscheinlich will man seinen öffentlichen Schlüssel mal in eine Datei ausgeben (z.B. um ihn auf seine Homepage zu legen). Exportieren macht --export, das ohne Parameter allerdings alle öffentlichen Schlüssel ausgibt (analog zu --list-keys). Zu Anfang ist das zwar nur der eigene, trotzdem sollte man eindeutige Teile der Benutzer-ID (z.B. Name oder E-Mailadresse) oder die Schlüssel-ID (8-stellig, 16-stellig oder 40-stellig (der gesamte Fingerprint), mit und ohne vorangestelltem 0x möglich) an --export anfügen. --export 0xFCC5040F und --export s-beyer@gmx.net führen immer zu dem, was ich will. In dieser Form ist es also weitestgehend eindeutig. --export Stephan exportiert irgendwann auch die anderen Stephans, deren öffentliche Schlüssel ich mal haben werde.
Mit --output <em>Dateiname</em> bzw. -o <em>Dateiname</em> wird die Ausgabe in einer Datei gespeichert. (Ich hab anfangs immer eine UNIX-typische Umleitung mittels > <em>Dateiname</em> gemacht und auch keine Probleme damit gehabt. Dennoch empfehle ich, lieber -o <em>Dateiname</em> zu verwenden.) Beispiel:
gpg -o ~/.gnupg/sbeyer.asc --export 0xFCC5040F
Werfe ich einen Blick in die neu erstellte sbeyer.asc, so stelle ich fest, dass es sich um ziemlich hässliche 8-Bit-Ausgaben handelt, und das ist übers Netz manchmal ungeeignet zu verschicken, gerade per E-Mail. Dafür bietet gpg die Option -a bzw. --armor an, die man unbedingt bei allen Ausgaben nutzen sollte, um 8-Bit-Ausgaben zu unterdrücken und schöne Base64-Ausgaben zu machen (nur dann rechtfertigt sich übrigens der .asc-Dateisuffix). Es lohnt sich, armor in die Datei ~/.gnupg/gpg.conf zu schreiben, wodurch gpg sich immer so verhält, als hätte man -a angegeben.
Auf einigen Systemen ist statt einer ~/.gnupg/gpg.conf eine ~/.gnupg/options installiert, welches die Konfigurationsdatei älterer GnuPG-Versionen war. Ich empfehle in diesem Falle, die Datei umzubenennen. Wenn gpg.conf existiert, wird options ignoriert.
Widerrufen
Man sollte sich auch gleich am Anfang ein Widerrufszertifikat in eine Datei speichern, um später alte Schlüssel widerrufen zu können, z.B. wenn man die Passphrase vergessen hat, seinen geheimen Schlüssel gelöscht hat oder man merkt, dass er kompromittiert (geknackt) wurde. In meinem Falle lautet der Befehl:
gpg -o ~/.gnupg/revoke.asc --gen-revoke 0xFCC5040F
GnuPG gibt entsprechende Sicherheitshinweise aus.
Warum überhaupt ein Widerrufszertifikat? Ein Grund ist zum Beispiel, dass man wirklich nur als Besitzer des Schlüsselpaares das Zertifikat erstellen kann und somit kein anderer den öffentlichen Schlüssel einfach für ungültig erklären kann. Ein weiterer Grund ist das Verhalten der Keyserver: die Keyserver synchronisieren untereinander, d.h. wird auf einem Keyserver ein Schlüssel hinzugefügt, so ist er auch bald auf allen anderen zu finden. Würde man seinen Schlüssel einfach von einem Keyserver löschen, so würde dieser sich nach der nächsten Synchronisation wieder auf dem Server befinden. Also setzt man statt dem Löschen eben das Widerrufszertifikat ein. Es gilt übrigens allgemein, dass der Schlüssel durch jede Änderung größer wird.
Anmerkung: Wenn man später echt widerrufen muss, importiert man das Widerrufszertifikat und sendet es dann an den Keyserver, und zwar mit
gpg --import ~/.gnupg/revoke.asc gpg --send-keys Schlüssel-ID

