ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

GnuPG

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

./gnupg-logo.png Dieser Artikel behandelt die Signatur und Verschlüsselung mit Hilfe des freien Kryptografie-Systems GNU Privacy Guard (GnuPG) 🇩🇪 . Alle unter Linux gängigen Mailprogramme wie Evolution, Kmail oder Thunderbird können GnuPG zur Verschlüsselung von E-Mails nach dem OpenPGP-Standard nutzen. Ab Version 2 unterstützt GnuPG auch den S/MIME-Standard. Zur Zeit kommt aber unter allen Ubuntu-Versionen standardmäßig noch die bewährte 1.4-Serie zum Einsatz.

Um E-Mails mit GnuPG signieren oder verschlüsseln zu können, benötigt man ein eigenes Schlüsselpaar. Das Schlüsselpaar besteht aus einem öffentlichen und einem privaten Schlüssel.

Während der öffentliche Schlüssel weitergegeben wird, um den Kommunikationspartnern zu ermöglichen, Daten verschlüsselt an sie zu versenden oder ihre Signatur zu überprüfen, muss der private Schlüssel vom Besitzer geheim gehalten werden, damit nur dieser die Daten entschlüsseln bzw. signieren kann.

Die grundlegenden Prinzipien der verwendeten Technik zu verstehen, trägt zur sicheren Anwendung des Verfahrens bei. Diesem Thema widmet sich der Hintergrundartikel GnuPG/Technischer Hintergrund. Wer noch nicht mit der Funktionsweise asymmetrischer Verschlüsselungssysteme vertraut ist, sollte sich diesen Artikel auf jeden Fall zu Gemüte führen, bevor er hier weiterliest [4]. Weitere Grundlagenartikel sind unten unter Links zu finden.

Dieser Artikel beschäftigt sich mit der asymmetrischen Verschlüsselung mit GnuPG, wer sich für die symmetrische Verschlüsselung mit GnuPG interessiert, muss hier weiterlesen GnuPG/Symmetrische Verschlüsselung.

⚓︎

Installation

Das Paket gnupg ist bei allen derzeitigen Ubuntu-Versionen vorinstalliert. Optional kann man noch folgendes Paket dazu installieren [2], welches die Dokumentation der Software enthält:

  • gnupg-doc

⚓︎

Grafische Tools

Wer seinen GnuPG-Schlüsselbund nicht über die Kommandozeile verwalten möchte, findet in den Ubuntu-Repositories eine Reihe grafischer Schlüsselbundmanager (Frontends), die aber nicht im Fokus dieses Artikels stehen. Unter KDE gibt es beispielsweise das Werkzeug Kgpg, dem ein eigener Artikel gewidmet ist.

Nutzer von GNOME möchten dagegen vielleicht lieber Seahorse verwenden, ein Programm, das auch mit dem Dateimanager (Nautilus) und dem Texteditor von GNOME (gedit) zusammen arbeitet - ausführlich beschrieben im Artikel Seahorse.

Vom GnuPG-Projekt selber stammt der "GNU Privacy Assistant" (GPA), der auf dem Gtk-Toolkit basiert, aber desktop-unabhängig ist. Mehr Informationen dazu liefert der Artikel GPA.

⚓︎

GnuPG in anderen Programmen nutzen

Eigentlich alle gängigen E-Mail-Programme unter Linux können GnuPG zur Verschlüsselung und Signierung von E-Mails nutzen. Auch andere Programme, bspw. Instant Messenger, sind manchmal GnuPG-fähig. Wie man das im Einzelfall nutzen kann, steht in den jeweiligen Artikeln bzw. der Dokumentation der jeweiligen Programme. An dieser Stelle deswegen nur eine Tabelle mit einigen passenden Links:

Programm Kategorie Direktlink auf GnuPG-Integration
Evolution E-Mail Evolution (Abschnitt „GnuPG“)
Thunderbird E-Mail Thunderbird/Tipps (Abschnitt „enigmail“)
Kmail E-Mail Kontact (Abschnitt „kmail-gnupg“)
Sylpheed-Claws E-Mail Sylpheed-Claws/Plugins (Abschnitt „OpenPGP“)
Gajim Jabber/Instant Messenger Gajim (Abschnitt „c2c-Verschluesselung“)
Psi Jabber/Instant Messenger Psi (Abschnitt „Verschlüsselung“)
Kopete Jabber/Instant Messenger Settings → Plugins → Cryptography

⚓︎

Der "Schlüsselbund"

GnuPG speichert alle Schlüssel, die man mit der Zeit sammelt, in einem "Schlüsselbund" im Verzeichnis ~/.gnupg/. Genau genommen handelt es sich um zwei Schlüsselbunde. Eines (secring.gpg) enthält die eigenen, geheimen Schlüssel, und das andere (pubring.gpg) enthält die öffentlichen Schlüssel, sowohl die eigenen als auch die der Kommunikationspartner. Alle GnuPG-Operationen werden mit dem Kommandozeilenwerkzeug gpg durchgeführt [1].

⚓︎

Schlüssel auflisten

Mit folgenden Befehlen kann man seine GPG-Schlüssel auflisten lassen. Die Optionen können dabei jeweils in der langen, beschreibenden Version, oder in der kurzen, einbuchstabigen Variante benutzt werden. Entweder die eigenen, geheimen Schlüssel:

gpg --list-secret-keys
gpg -K 

Oder die öffentlichen Schlüssel:

gpg --list-keys
gpg -k 

Diese Befehle zeigen Informationen über die Schlüssel in der Konsole an. Wichtig ist hierbei u.a. die Key-ID (hinter der "Schlüsselstärke" zu finden). Es ist ein 8-stelliger Hex-Code.

sec  1024D/ABCD1234 2005-06-18 Max Mustermann <max.m _at_ example.com>

In diesem Beispiel ist die Key-ID ABCD1234. Wenn man bisher weder eigene Schlüssel angelegt, noch fremde importiert hat, ist die Ausgabe natürlich leer.

⚓︎

"Fingerprint" anzeigen

Ein Fingerprint (dt.: Fingerabdruck) ist ein relativ kurzer Hash-Wert, mit dem man Schlüssel verifizieren kann. Dieser identifiziert einen Schlüssel so wie der menschliche Fingerabdruck einen Menschen eindeutig identifiziert. Nach heutigem Kenntnisstand ist es so gut wie aussichtslos zu versuchen, einen zweiten Schlüssel mit demselben Fingerprint erschaffen zu wollen. Man kann (und sollte) das dafür nutzen, sich von der Echtheit solcher Schlüssel zu überzeugen, die man von einem Schlüsselserver oder per E-Mail erhalten hat. Dieser Fingerabdruck besteht aus einer Zeile Hexadezimalzahlen, die man bspw. auf Visitenkarten drucken oder am Telefon übermitteln kann.

Anzeigen lässt sich der Fingerabdruck eines Schlüssels mit:

gpg --fingerprint <ID oder Name des Schlüssels> 

Aussehen tut er dann z.B. so: 23C7 B473 4C46 5AFB B0D3 E60F 631E 9BDA E8D8 4F17

Die Ausgabe dieses Kommandos sieht genauso aus wie die von --list-keys, mit einer zusätzlichen Zeile. Man kann die ID auch weglassen, dann werden alle Schlüssel des Schlüsselbunds mit Fingerabdruck aufgelistet.

⚓︎

Schlüsselpaar erzeugen

Ein neues Schlüsselpaar aus privatem und zugehörigem öffentlichen Schlüssel kann ganz einfach im Terminal [1] erzeugt werden:

gpg --gen-key 
Bitte wählen Sie, welche Art von Schlüssel Sie möchten:
   (1) DSA und ElGamal (voreingestellt)
   (2) DSA (nur signieren/beglaubigen)
   (5) RSA (nur signieren/beglaubigen)
Ihre Auswahl?

1 auswählen. Anschließend wird nach der Schlüsselstärke gefragt. 2048 Bit ist die Standardeinstellung für den ElGamal-Teil, aber mehr kann auch nie schaden. Der DSA-Teil ist auf 1024 Bit festgelegt.

Experten-Info:

Bei der Wahl der Art des Schlüssels (bzw. der Schlüssel) sollte nur mit entsprechendem Hintergrundwissen von der Standardauswahl DSA und ElGamal abgewichen werden. So ist es z.B. auch möglich einen RSA Signierschlüssel mit einem ElGamal Verschlüsselungsschlüssel zu wählen. Dazu müsste man 5 auswählen und später dem RSA-Schlüsselpaar ein ElGamal-Unterschlüsselpaar hinzufügen (Stichwort: addkey).

Das DSA-Schlüsselpaar wird 1024 Bit haben.
ELG-E Schlüssel können zwischen 1024 und 4096 Bits lang sein.
Welche Schlüssellänge wünschen Sie? (2048)

Anschließend muss man auswählen, wie lange der Schlüssel gültig sein soll. Hier sollte man der Versuchung widerstehen, eine unbeschränkte Gültigkeit festzulegen, da dieser Schlüssel dann auch bei Verlust ewig gültig ist und niemals von den Keyservern verschwindet. Irgendetwas zwischen 1 und 5 Jahren ist dagegen ein praktischer Wert.

Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
         0 = Schlüssel verfällt nie
      <n>  = Schlüssel verfällt nach n Tagen
      <n>w = Schlüssel verfällt nach n Wochen
      <n>m = Schlüssel verfällt nach n Monaten
      <n>y = Schlüssel verfällt nach n Jahren
Wie lange bleibt der Schlüssel gültig? (0)

Hinweis:

Das Ablaufdatum kann auch noch im Nachhinein geändert werden. Um diese Änderungen seinen Gesprächspartnern mitzuteilen, muss man ihnen seinen öffentlichen Schlüssel erneut schicken bzw. ihn erneut zum Schlüsselserver hochladen.

Nun müssen der Name und die E-Mail-Adresse angegeben werden, für die das Schlüsselpaar gelten soll:

Sie benötigen eine Benutzer-ID, um Ihren Schlüssel eindeutig zu machen; das
Programm baut diese Benutzer-ID aus Ihrem echten Namen, einem Kommentar und
der E-Mail-Adresse in dieser Form auf:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
Ihr Name ("Vorname Nachname"): Vorname Nachname
E-Mail-Adresse: user@example.com
Kommentar: optional
Sie haben diese User-ID gewählt:
    "Vorname Nachname (optional) <user@example.com>"
Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden?

Zu guter Letzt wird nochmal gefragt, ob die Angaben ok sind, (mit der Taste F bestätigen,) und eine Passphrase für den privaten Schlüssel wird benötigt, um diesen zu schützen. Diese Passphrase braucht man später, um Mails signieren und entschlüsseln zu können. Das Passwort sollte nicht leicht zu erraten sein und mindestens 8 Stellen besitzen. Nun wird der Schlüssel erstellt, wobei eine große Menge echter (nicht Pseudo-)Zufallswerte benötigt werden. Es kann deswegen sein, dass man vom System gebeten wird, ein wenig mit Maus und Tastatur zu spielen um solche Werte besser erzeugen zu können.

Nun liegt der Schlüssel in ~/.gnupg als secring.gpg und man kann ihn wie oben beschrieben auflisten lassen. Mit dem öffentlichen Schlüssel verschlüsselte Nachrichten oder auch Dateien, können nur mithilfe des dazugehörigen privaten Schlüssel wieder entschlüsselt werden. Genauere Details finden sich im Artikel GnuPG/Technischer Hintergrund.

Achtung!

Wenn man plant, den Schlüssel an mehr als eine Handvoll Leute weiterzugeben (bzw. ihn auf einen Keyserver hochzuladen), denen man bei Verlust oder Kompromittierung des privaten Schlüssels persönlich Bescheid sagen kann, sollte man sich am Besten direkt nach der Erstellung des Schlüssels ein sogenanntes Widerrufszertifikat erstellen, mit dem man später den Schlüssel - auch ohne dass dieser vorhanden sein muss - für ungültig erklären kann. (mehr)

⚓︎

Schlüssel importieren

Erhält man den öffentlichen Schlüssel eines Kommunikationspartners, so muss man ihn zur weiteren Verwendung erstmal in den Schlüsselbund importieren.

gpg --import /tmp/dateiname.asc 

Man sollte aber auf keinen Fall Schlüssel ungeprüft verwenden! Entweder man nimmt persönlichen Kontakt zum Kommunikationspartner auf und gleicht den Fingerprint ab, oder man nutzt das GnuPG/Web of Trust.

⚓︎

Schlüssel exportieren

Ebenso kann man einen Schlüssel exportieren. Das ist z.B. notwendig, wenn man seinen öffentlichen Schlüssel auf seiner Webseite zum Download anbieten will, oder wenn man den Schlüssel eines Kommunikationspartners signiert hat und ihm diesen jetzt mit dieser Signatur zukommen lassen möchte (siehe auch GnuPG/Web of Trust).

gpg -a --output gpg-key.asc --export <Schlüssel-ID oder Name> 

Der Schlüssel befindet sich danach in der Datei gpg-key.asc im aktuellen Verzeichnis und kann als E-Mail-Anhang verschickt oder auf den Webspace hochgeladen werden.

⚓︎

Zusätzliche E-Mail-Adressen

Viele Leute besitzen inzwischen mehrere E-Mail-Adressen, aber die wenigsten wollen für jede einen eigenen Schlüssel erzeugen und sich die ganzen unterschiedlichen Passphrasen merken. Deswegen kann man dem eigenen Schlüsselpaar zusätzliche Identitäten hinzufügen. Der Schlüssel gilt dann für alle diese E-Mail-Adressen. Das geht so:

gpg --edit-key <Schlüssel-ID oder Name>
Befehl> adduid 

Dann auf Nachfrage den neuen Namen (bzw. denselben), die zusätzliche E-Mail-Adresse und optional einen zugehörigen Kommentar angeben, mit F bestätigen und die Passphrase des Schlüssel eingeben. Danach das Schlüssel-Edit-Programm verlassen:

Befehl> save 

Der Schlüssel ist jetzt mit der zusätzlichen Identität verknüpft, was man durch einen Aufruf von gpg --list-keys überprüfen kann.

⚓︎

Konfiguration der bevorzugten Algorithmen

Achtung!

Wie bei der Erzeugung des Schlüsselpaares, sollte auch hier nur mit dem nötigen Hintergrundwissen von den Standardeinstellungen abgewichen werden. Des Weiteren sollten die Beispiele nicht gedankenlos übernommen werden, da sie recht willkürlich gewählt wurden.

GnuPG unterstützt mehrere Algorithmen zur symmetrischen Verschlüsselung, zum Signieren und Komprimieren von Nachrichten. Welche genau, lässt sich mittels

gpg --version 

ermitteln.

Welche Algorithmen beim Senden einer Nachricht verwendet werden, hängt davon ab, wie sich Sender und Empfänger einigen. Dazu legt der Sender und der Empfänger jeweils eine Liste bevorzugter Algorithmen an, welche verglichen werden.

Der Empfänger hinterlegt seine Vorzugsliste in seinem öffentlichen Schlüssel. Um sich seine eigenen Einstellungen anzeigen zu lassen, geht man wie folgt vor:

gpg --edit-key <Schlüssel-ID oder Name>
Befehl> showpref 

Die Ausgabe sieht in der Standardeinstellung von GnuPG und unveränderten Schlüsseleinstellungen so aus:

[uneingeschränkt] (1). foo bar <foo@bar.com>
     Verschlü.: AES256, AES192, AES, CAST5, 3DES
     Digest: SHA1, SHA256, RIPEMD160
     Komprimierung: ZLIB, BZIP2, ZIP, nicht komprimiert
     Eigenschaften: MDC, Keyserver no-modify 

Um nun diese Liste zu editieren, steht der Befehl setpref zur Verfügung. Dem Befehl selbst folgt direkt eine Liste bevorzugter Algorithmen. Also z.B.:

Befehl> setpref TWOFISH AES256 AES SHA512 SHA256 BZIP2 ZLIB
Liste der Voreinstellungen setzen:
     Verschlü.: TWOFISH, AES256, AES, 3DES
     Digest: SHA512, SHA256, SHA1
     Komprimierung: BZIP2, ZLIB, nicht komprimiert
     Eigenschaften: MDC, Keyserver no-modify
Die Voreinstellungen wirklich ändern? (y/N) 

Durch Drücken von Y bestätigt man seine angezeigte Eingabe und muss nach Eingabe seines Passworts den Schlüssel speichern:

Befehl> save 

Experten-Info:

GnuPG fügt der Liste automatisch 3DES, SHA1 und nicht komprimiert hinzu. Diese Algorithmen werden benutzt, wenn eine Einigung zwischen Sender und Empfänger fehlschlägt.

Der Sender legt seine Vorlieben für den Versand in der Konfigurationsdatei von GnuPG fest. Dazu fügt er z.B. folgendes an das Ende der Datei ~/.gnupg/gpg.conf an:

#Bevorzugte Verschlüsselungsalgorithmen
personal-cipher-preferences AES256 AES TWOFISH

#Bevorzugte Hashalgorithmen
personal-digest-preferences SHA386 RIPEMD160 BZIP2

#Bevorzugte Kompressionsalgorithmen
personal-compress-preferences BZIP2

Beim Versandt einer Nachricht vergleicht nun GnuPG die Liste des Senders mit der Liste des Empfängers und wählt den ersten übereinstimmenden Algorithmus aus (hier den symmetrischen Verschlüsselungsalgorithmus):

Liste des Senders: AES256, AES, TWOFISH
Liste des Empfänges: TWOFISH, AES256, AES

Kann auf diese Art und Weise keine Einigung erziehlt werden, wird, wie oben bereits erwähnt, 3DES zur Verschlüsselung, SHA1 zum Signieren und keine Kompression verwendet. Die genaue Bedeutung der o.g. GnuPG Optionen kann in der offiziellen Dokumentation nachgeschlagen werden.

⚓︎

Dateioperationen

Mit den folgenden Befehlen kann man Dateien mit GnuPG verschlüsseln und/oder digital signieren. In den meisten Fällen, wenn man GnuPG z.B. für die E-Mail-Kommunikation benutzt, muss man sich mit diesen Optionen aber nicht weiter beschäftigen, da die Mail-Programme sich selber um die Verschlüsselung kümmern. Die folgenden Befehle benötigt man also nur, wenn man bspw. Dateien verschlüsselt auf der eigenen Festplatte speichern will, oder wenn man ein Softwarepaket, welches man auf der eigenen Homepage zum Download anbietet, digital signieren will.

In den folgenden Beispielen wird davon ausgegangen, dass man eine fiktive Datei test.txt behandeln will.

⚓︎

Verschlüsseln

Wenn man etwas verschlüsseln will, muss auch angeben werden, für wen das geschehen soll. (Genauer gesagt, mit wessen öffentlichem Schlüssel die Datei verschlüsselt werden soll.) Der Befehl hierfür sieht wie folgt aus:

gpg --encrypt -a --recipient <Name oder Key_Id> test.txt 

Es entsteht eine Datei test.txt.asc.

Hinweis:

Wenn man die Datei mit dem öffentlichen Schlüssel von jemand anders verschlüsselt hat, bedeutet dies, dass nur derjenige die Datei wieder entschlüsseln kann. Selber kann man dies nicht, da man nicht im Besitz des geheimen Schlüssels des Kommunikationspartners ist. Wenn man die Daten selber noch benötigt, sollte man also eine Kopie der unverschlüsselten Datei behalten. Alternativ kann diese zusätzlich mit dem eigenen Schlüssel verschlüsselt werden - die Option --recipient kann mehrfach angegeben werden.

⚓︎

Entschlüsseln

Der Inhaber des privaten Schlüssels kann diese Datei jetzt auf folgende Weise wieder in die ursprüngliche Version verwandeln. (Hierfür wird natürlich die Passphrase benötigt.)

gpg --decrypt --output entschluesselt.txt test.txt.asc 

In entschluesselt.txt steht nun wieder der Text. Wenn man den Parameter --output (und den Dateinamen) weglässt, gibt GnuPG den entschlüsselten Text in der Konsole aus.

Hinweis:

Anstelle der langen Optionsnamen --encrypt, --decrypt, --recipient und -output kann man auch die Kurzversionen -e, -d, -r und -o verwenden. Die Option -a, ausgeschrieben --armor bedeutet, dass die verschlüsselte Datei im ASCII-Armor-Format gespeichert wird. Lässt man diese Option weg, wird das Ergebnis in einem Binärformat abgelegt und erhält die Endung .gpg bzw. bei Signaturen .sig, anstatt .asc. Das Binärformat bietet aber nur Nachteile im täglichen Gebrauch, so dass man sich die ständige Benutzung der Option -a angewöhnen sollte.

⚓︎

Signieren

Es gibt mehrere Verfahren, eine Datei digital zu signieren. In den meisten Fällen wird man die folgende Option verwenden:

gpg --detach-sign -a test.txt 

Nachdem man seine Passphrase erfolgreich eingegeben hat, erhält man eine Datei test.txt.asc. Diese enthält eine digitale Signatur der Originaldatei mit der sich die Authentizität beweisen lässt. Hier ein Beispiel:

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
iD8DBQFDTqEJxHY64NcyylkRAvZ2AJoDxlQ4VuqpIDfcTFnHEye4PGfNIACdEcRw
QVoj5npyj4VyaEzLzx4vdSs=
=ySv1
-----END PGP SIGNATURE-----

Man kann auch die Kurzform -b verwenden. Verwendet man stattdessen die Option --clearsign, so wird nicht nur die Signatur in die Ausgabedatei geschrieben, sondern die ganze Ursprungsdatei mit angehängter Signatur am Ende. Das kann praktisch sein, wenn man nur eine einzige Datei übertragen will. Allerdings muss dann der Empfänger im Falle von ausführbarem Code diese Signatur erstmal wieder aus der Datei entfernen, um sie verwenden zu können.

Zum Signieren wird immer der default-Schlüssel verwendet. Sollte man mehrere geheime Schlüssel besitzen, kann man mit dem Parameter --local-user den Schlüssel angeben den man für die Signatur verwenden will.

⚓︎

Signatur verifizieren

Eine Signatur überprüft man mit folgendem Kommando:

gpg --verify test.txt.asc 
gpg: Signature made Mon 19 Jun 2006 17:06:05 CEST using DSA key ID <Key_Id>
gpg: Good signature from "Person von der die Signatur stammt"

Wenn die signierte Datei nicht denselben Dateinamen wie die Signatur (abzgl. der .asc- oder .sig-Endung) trägt, kann man diesen Dateinamen extra angeben:

gpg --verify signaturdatei.asc test.txt 

Sollte die Signatur nicht zu dem Text passen, weil die Datei nachträglich manipuliert wurde, wird dies durch BAD signature from... angezeigt. Das dritte mögliche Ergebnis ist, dass GnuPG die Signatur nicht verifizieren kann, weil man den benötigten Schlüssel nicht im Schlüsselbund hat. In diesem Fall muss man sich erstmal den öffentlichen Schlüssel des Absenders besorgen.

⚓︎

E-Mail-Verschlüsselung testen

Das GNU Privacy Project 🇩🇪 (GnuPP) stellt einen praktischen Dienst zum Testen verschlüsselter E-Mails bereit, den "freundlichen E-Mail-Roboter Adele". Jeder kann einfach seinen öffentlichen Schlüssel an adele@gnupp.de senden - entweder als Anhang oder per Copy'n'Paste - und Adele wird mit einer verschlüsselten E-Mail antworten. In dieser enthalten ist dann ebenfalls der Schlüssel von Adele, so dass man an Adele ebenfalls eine verschlüsselte Nachricht senden kann, die von Adele dann entschlüsselt beantwortet wird. Natürlich muss man für diese zweite - verschlüsselte - Mail Adeles Schlüssel erstmal in den Schlüsselbund importiert haben.

⚓︎


Diese Revision wurde am 9. August 2009 23:02 von DrScott erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Sicherheit, Kommunikation, Verschlüsselung, Email, pgp, gpg, OpenPGP