GnuPG
GnuPG ist ein Kryptografieprogramm zur Signierung, Verschlüsselung und Entschlüsselung von Daten. Als OpenSource-Software nutzt es sog. patentfreie Algorithmen und ist unter verschiedenen Betriebssystemen (u.a. auch Microsofts Windows) lauffähig. Die Möglichkeiten GPGs belaufen sich unter anderem auf Verschlüsselung (im Weiteren entfällt der Zusatz Entschlüsselung, weil alleinige Verschlüsselung in der Regel unlogisch ist) von E-Mails, Chats und Dateien, was es gerade für Instant Messaging interessant macht.
Funktionsweise
GnuPG funktioniert mit Hilfe eines Schlüsselpaars, bestehend aus einem privaten Schlüssel, der, wie der Name schon sagt, im Privatbesitz bleibt, und einem öffentlichen Schlüssel, der an die Kommunikationspartner weitergegeben wird. Durch den öffentlichen Schlüssel ist die Verschlüsselung eines Datums möglich, jedoch erlaubt nur der private Schlüssel die Entschlüsselung.
Installation
# pacman -Sy gnupg
Erzeugen eines Key-Pairs
Damit wir loslegen können, legen wir uns ein Key-Pair zu.
$ gpg --gen-key
Wir geben Namen, E-Mail-Adresse und Kommentar ein, welche später zu Identifierung durch die Partner genutzt werden kann. Es müssen nicht unbedingt wahre Angaben sein... Wir erhalten eine Ausgabe wie:
pub 1024D/77421F4F 2003-02-27 Vorname Nachname (Kommentar) <E@mail.ru> Key fingerprint = CB84 38FF 2195 95DF ACA0 44B1 468F 1F20 23F8 0042 sub 1024g/C596B611 2003-02-27
Diese sagt uns, dass 77421F4F die hexadezimale Kennung des Schlüssels. Diese sollte man immer mit 0x einleiten, damit GPG die Eingabe besser von anderen unterscheiden kann.
Ungültigkeitsvorbehalt
Für den Fall der Fälle sollte man sich vielleicht die Option vorbehalten, den aktuellen Schlüssel für ungültig zu erklären. Beispielsweise, wenn man sein Passwort vergessen hat...
$ gpg --gen-revoke 0xKEYID > revokeKey
Speichert das Revoke-Zertifikat in der Datei revokeKey. Diese Datei sollte an einem sicherern Ort aufbewahrt werden, da sie die Ungültigkeitserklärung für den Schlüssel enthält.
Das ganze ist sinnvoll, wenn der Key auf einem Server liegt, wir ihn auf diesem aber nicht löschen können. Wichtig ist, dass die --keyserver-Option gesetzt ist. (Laut man-Page werden die Keyserver oft untereinander gesynct). Zum Beispiel kann man den Server in die ~/.gnupg/options schreiben:
$ echo keyserver wwwkeys.de.pgp.net >> ~/.gnupg/options
Lade den Key vom Server:
$ gpg --keyserver wwwkeys.de.pgp.net --recv-keys 0xKeyID
Importiere das Ungültigkeitszertifikat:
$ gpg --import revokeKey
Sende den Key wieder auf den Server:
$ gpg --keyserver wwwkeys.de.pgp.net --send-keys 0xKeyID
(Die Option --keyserver ist optional, wenn dieser bereits in der options steht.)
Eine andere Möglichkeit ist, die Ablaufdaten möglichst niedrig resp. zeitnah zu halten, sodass die Keys automatisch ungültig werden.
Verbreitung der Keys
Keys können auf sogenannte Key-Server geladen werden. Dort ist es anderen möglich diese zu finden (beispielsweise anhand der E-Mailadresse oder auch der KeyID) und herunterzuladen. Um den Key hochzuladen reicht ein:
$ gpg --send-keys 0xKeyID
Um Keys herunterzuladen ein:
$ gpg --recv-keys 0xKeyID
Das praktische an dieser Methode ist, dass man den Key direkt importiert. Der Nachteil ist natürlich, dass man in aller Regel nicht gerade die KeyID parat hat. Dafür ist eine Suchfunktion über einen Browser erreichbar. Hier kann man sich die Keys als klartext anzeigen und herunterladen. Um einen heruntergeladenen Key nun noch zu importieren, ist ein:
$ gpg --import KeyFile
erforderlich.
Dateisignaturen
Um Dateien zu signieren, reicht ein:
$ gpg --armor --detach-sign Datei
Das führt dazu, dass eine neue Datei namens Datei.asc angelegt wird, die die Signatur enthält. Möchte man aber die Signatur an das Dateiende hängen, so gelingt das mit:
$ gpg --clearsign -a Datei
Das ist allerdings nur bei Klartextdateien zu empfehlen, weil Binärdateien danach aller Regel nach solange unbrauchbar sind, bis die Signatur wieder entfernt wird.
Um die Signatur zu verfizieren gibt man:
$ gpg --verify Datei.asc Datei
ein. Das abschließende "Datei" ist nur erforderlich, sofern die .asc-Datei nicht denselben Namen (exklusive Suffix) hat, wie die signierte Datei. In dem konkreten Beispiel ist es also nicht erforderlich.
Dateiverschlüsselung
Um eine Datei zu verschlüsseln brauchen wir die Datei, die an den Partner versendet werden soll und dessen öffentlichen Schlüssel.
$ gpg --encrypt -a --recipient KeyId Datei
Der Gegenüber entschlüsselt die entstandene Datei Datei.asc dann folgendermaßen:
$ gpg --decrypt --output Datei Datei.asc
und erhält damit die entschlüsselte Datei in der Datei Datei (:D).