Software Development

OpenPGP im Berufsalltag – Teil 3: Installieren und einrichten

Installieren? Einrichten? Gibt's das nicht im Browser? Leider noch nicht! Privatsphäre und Sicherheit gibt es nicht geschenkt. Aber alles halb so wild: Im folgenden Artikel zeige ich, wie man OpenPGP mit wenigen Handgriffen unter Windows aufsetzt. Einmal arbeiten und immer nutzen, das klingt doch nicht schlecht, oder? Also – los geht's!

Laptop-Security-Sicherheit-Mail

Download und Installation

Wir benutzen gpg4win. Den Download sollten wir natürlich, wie im 2. Teil der Serie beschrieben, auf Echtheit prüfen.

Haben wir diese Hürde genommen, können wir den Installer als Administrator starten. Obwohl wir das Tool auch als normaler User installieren könnten, ist die Installation "mit root-Rechten" vorteilhaft, weil gpg dann wichtige Hintergrunddienste einrichten und Umgebungsvariablen setzen kann. Also: Rechtsklick auf den Installer --> Als Administrator ausführen.

Bei der Komponentenauswahl beschränken wir uns erstmal auf die Kernkomponente GnuPG. Optional könnten wir noch installieren:

  • Kleopatra – Ein gpg GUI-Client, für E-Mail allerdings nicht benötigt.
  • GpgOL – Ein Plugin für Outlook. Bitte installieren, wenn statt Thunderbird, Outlook verwendet werden soll.
  • GpgEX – Kontextmenüeinträge für den Windows-Explorer. Brauchen wir im Moment allerdings nicht.


Für das Installationsverzeichnis übernehmen wir den Vorschlag und klicken endlich auf Installieren.

Damit ist gpg bereits fertig installiert und funktionsfähig. Öffnen wir nun eine Konsole und geben gpg --version ein, erhalten wir eine Funktionsübersicht: 

gpg (GnuPG) 2.2.7
libgcrypt 1.8.2
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: C:/Users/mosig_user/AppData/Roaming/gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2


Bitte nicht wundern: Die dort gelisteten Programmversionen können von der Version des Downloads abweichen, da Download und enthaltene Komponenten jeweils eigene Versionen besitzen.

gpg in den Suchpfad aufnehmen

Unter Umständen kann es sein, dass gpg auf der Konsole nicht gefunden wird. In diesem Fall müssen wir das Verzeichnis bin, das sich unter dem Installationsverzeichnis befindet, zum Suchpfad für ausführbare Dateien hinzufügen. Wie das geht, habe ich in Teil 2 der Serie beschrieben.

gpg-Home-Verzeichnis ändern

Die Ausgabe von gpg --version zeigt uns außerdem ein interessantes Detail:

Home: C:/Users/mosig_user/AppData/Roaming/gnupg


Dies ist das Verzeichnis, in dem gpg seine Konfiguration und den Schlüsselring ablegt. Unter Windows ist es alles andere als bequem, auf Dinge unterhalb von AppData zuzugreifen. Aus diesem Grund lohnt sich die Festlegung eines anderen Home-Verzeichnisses nach der Installation von gpg

  1. Wir legen ein Verzeichnis nach Wahl an, beispielsweise: C:\Users\DeinUser\gnupg.
  2. Wir kopieren den Inhalt von C:\Users\DeinUser\AppData\Roaming\gnupg in das neue Verzeichnis.
  3. Wir erstellen eine neue Umgebungsvariable GNUPGHOME und geben ihr das neue Verzeichnis als Wert.
  4. Wir starten die Konsole neu und prüfen mit gpg --version, ob die Änderung wirksam geworden ist.

gpg-Lokalisierung ändern

Die Ausgabesprache von gpg lässt sich leicht ändern. Sie wird durch die Umgebungsvariable LANG bestimmt. Akzeptierte Werte sind sogenannte ISO-2-Ländercodes, z. B. steht de für Deutsch, en für Englisch. Entweder wir setzen diese Variable – wie in Teil 2 beschrieben – oder nur für die Lebensdauer der Konsole ("temporär") mittels set LANG=de.

Konfiguration anpassen

Fast geschafft! Was jetzt noch fehlt, ist eine auf Sicherheit optimierte Konfiguration. Die Datei GNUPGHOME\gpg.conf enthält jede Menge Einstellungen, die das Verhalten von gpg im Detail steuern. Ich empfehle folgende Konfiguration, die ich von Thierry Thuon und den Best-Practices von RiseUp entlehnt habe: 

# Avoid information leaked when exporting keys
no-emit-version
no-comments
export-options export-minimal

# Displays the long format of the ID of the keys and their fingerprints
keyid-format 0xlong
with-fingerprint

# Show UID validity in key listings
list-options show-uid-validity
verify-options show-uid-validity

# Use the strongest known algorithms if possible
personal-cipher-preferences AES256
personal-digest-preferences SHA512
default-preference-list SHA512 SHA384 SHA256 RIPEMD160 AES256 TWOFISH BLOWFISH ZLIB BZIP2 ZIP Uncompressed

cipher-algo AES256
digest-algo SHA512
cert-digest-algo SHA512
compress-algo ZLIB

# Is considered broken and therefore not used anymore
disable-cipher-algo 3DES

# Since many keys come with SHA1 signatures only, 
# we need to disable this in order to being able to import them anymway. #weak-digest SHA1 s2k-cipher-algo AES256 s2k-digest-algo SHA512 s2k-mode 3 s2k-count 65011712 # Always use the following keyserver keyserver hkps://hkps.pool.sks-keyservers.net # Do not use the unencrypted hkp protocol anymore #keyserver hkp://pool.sks-keyservers.net # Don't allow keys to specify preferred keyservers keyserver-options no-honor-keyserver-url # Include revoked keys in search results keyserver-options include-revoked


Wir kopieren einfach den Inhalt nach GNUPGHOME\gpg.conf und fertig. gpg ist jetzt ausreichend eingerichtet und kann genutzt werden.

Schlüssel erzeugen und E-Mail-Client einrichten

Als nächstes sollte man seine private Schlüssel generieren. Wie das geht, erkläre ich im nächsten Teil. Erst danach lohnt sich das Aufsetzen eines E-Mail-Clients in Verbindung mit OpenPGP so richtig. Wer nicht warten mag, der kann der sehr guten Anleitung von posteo.de zur Einrichtung von Thunderbird+Enigmail folgen. Obwohl dort auch die Generierung der Schlüssel über Enigmail beschrieben wird, empfehle ich, dies auf der Konsole zu erledigen. Zum einen kann man dabei etwas lernen und zum anderen gibt es – wie immer – einige Details zu beachten, aber dazu mehr im nächsten Teil.

Im Fehlerfall: gpg-Debugging

Sollte es bei der Arbeit mit gpg zu Fehlern kommen, ist es möglich, sich Fehlerinformationen ausgeben oder in Dateien schreiben zu lassen. Zur Anwendung und Auswertung benötigt man bereits fortgeschrittene Kenntnisse, ich möchte es aber der Vollständigkeit halber (und weil ich es selbst immer vergesse) hier vorstellen.

Verbose Output

Erste Maßnahme könnte die Aktivierung der "ausführlichen Ausgabe" sein. Dies bezeichnet man im Englischen als "being verbose" und wird mit dem Schalter -v aktiviert:

# Verbose example with verify command
gpg -v --verify gpg4win-3.1.1.exe.sig gpg4win-3.1.1.exe


Den Schalter gibt es in drei Stufen. Je mehr v angehangen werden, desto ausführlicher wird die Ausgabe:

# Even more verbose example with verify command
gpg -vv --verify gpg4win-3.1.1.exe.sig gpg4win-3.1.1.exe

# Most verbose example with verify command
gpg -vvv --verify gpg4win-3.1.1.exe.sig gpg4win-3.1.1.exe


Aber halt, es gibt neben dem Verbose-Schalter noch einen extra Schalter für noch ausführlicheren debug-Output (Engl. debug = Fehlerbereinigung): --debug. Die gpg-Dokumentation schreibt:

--debug flags
Set debugging flags. All flags are or-ed and flags may be given in C syntax (e.g. 0x0042).

--debug-all
Set all useful debugging flags.


Ich nutze immer --debug-all, weil ich die Flags nicht kenne und mir auch nicht merken möchte:

# *Very* detailed output
gpg --debug-all --verify gpg4win-3.1.1.exe.sig gpg4win-3.1.1.exe

# You may also combine with -v to get *ultra* detailed output
gpg -vvv --debug-all --verify gpg4win-3.1.1.exe.sig gpg4win-3.1.1.exe


Die genaue Ausgabe von -v und --debug hängt von der verwendeten gpg-Funktionalität ab. Im Allgemeinen ist es ratsam, mit -v zu beginnen, und sich dann langsam an das gewünschte Maß heranzutasten.

Dämonische Logdateien

Ein Teil der Funktionalität von gpg wird über Hintergrunddienste (engl. Bezeichnung: Daemons) bereitgestellt. Zu diesen gehören:

  • dirmngr – Kümmert sich um Kommunikation mit Schlüsselservern.
  • gpg-agent – Stellt die gpg-Funktionalität anderen Programmen zur Verfügung, z. B. Enigmail.
  • sc-daemon – Stellt Funktionen zum Umgang mit SmartCards, z. B. Yubikey, bereit.

Jeder dieser Dienste kann optional eine eigene Konfigurationsdatei in GNUPGHOME besitzen:

  • dirmngr.conf
  • gpg-agent.conf
  • scdaemon.conf

Über diese Dateien kann man auf Wunsch Debug-Ausgaben in Textdateien aktivieren. Dazu fügt man Folgendes in die Dateien ein:

debug-level guru
debug-all
log-file debug.log


Für die Logdatei lohnt sich meist die Angabe eines absoluten Pfads, um bessere Kontrolle über deren Ablageort zu haben.

Hintergrunddienste neu starten

So seltsam es klingt: Bei der Änderung von Konfigurationsdateien oder sonstigen Problemen sollte man zunächst einen Neustart der Hintergrunddienste vornehmen. Auf der Konsole geht das so:

  • dirmngr: gpgconf --kill dirmngr # Automatischer Neustart bei Bedarf
  • gpg-agent: gpg-connect-agent reloadagent /bye
  • scdaemon: gpgconf --reload scdaemon

Damit ist auch der Exkurs in die Debugging-Welt abgeschlossen. Weiter geht es im nächsten Teil der Serie mit der Schlüsselerzeugung.

    
Über Jan Mosig

Jan Mosig arbeitet für die itemis AG am Standort Leipzig. Er beschäftigt sich mit Problemen im Projektalltag und setzt zu deren Lösung auf technische Softwarequalität, Agile und Mut zur Veränderung.