Inhalt
Ich habe schon einige Versuche mit eMail-Verschlüsselung hinter mir, die alle mit Frustration und schließlich Aufgabe endeten. Das mag auch mit mangelndem Verständnis meinerseits zu tun haben, lag aber auch immer an schlechter Bedienbarkeit, fehlender Unterstützung mancher Plattformen und intransparenter Software, die dem Nutzer vermeintlich allzu schwierige Entscheidungen mit nicht immer sinnvollen Vorgaben abnahm.
Vor kurzem kam dann die Nachricht, dass Thunderbird mit Version 78 ab Sommer 2020 die im Moment im Add-on Enigmail steckenden PGP-Funktionen in das Mail-Programm selber integrieren wird. Das war Anlass genug für mich, PGP noch einmal eine Chance zu geben.
Ziel von PGP
Mit PGP kann man Nachrichten unterschreiben (signieren) und verschlüsseln. Beides ist optional, so dass man Nachrichten weiterhin völlig offen, nur signiert, nur verschlüsselt oder verschlüsselt und signiert versenden kann. Das Signieren von Nachrichten hat mehrere Ziele:
- Authentizität
Mit der Unterschrift ist belegt, dass die Nachricht wirklich von der Person gesendet wurde, für die im Besitz des Schlüssels ist, und dass die Adressen von Absender und Unterzeichner übereinstimmen. - Integrität
Die Prüfsumme der Nachricht wird in der Unterschrift mit verschlüsselt, so dass jede Änderung am Nachrichteninhalt sofort zur Ungültigkeit der Unterschrift führen würde. Somit kann man sicher sein, dass die Nachricht nach der Unterzeichnung nicht verändert wurde
Die Verschlüsselung sorgt zusätzlich für Vertraulichkeit. Die Nachricht kann nur entschlüsselt werden, wenn man den privaten Teil des Schlüssel besitzt, der zu dem öffentlichen Schlüssel passt, der zur Verschlüsselung benutzt wurde.
Ziel meiner Aktion ist vor allem, eMails signieren und die Signaturen empfangener Mail prüfen zu können. So kann man dem Teil seiner Korrespondenz, der signiert oder verschlüsselt ist, fast blind vertrauen und muss nur beim Rest misstrauisch sein. Meine Hoffnung ist, dass der Anteil vertrauenswürdiger Mails über die Zeit zunehmen wird.
Die Möglichkeit der Verschlüsselung ist für mich ein Nebeneffekt, den ich gerne mitnehme, aber wohl eher selten nutzen werde.
Die Plattformen
Erstaunlich, wie viele verschiedene Plattformen doch immer noch nicht nur beim EDV-affinen Techniker herumschwirren. Da ist zunächst Linux in Form von Debian Buster als mein PC-System. Mein Laptop arbeitet wie der PC meiner Frau mit Windows 10, und unsere Smartphones und Tablets mit Android 8, 9 oder LineageOS 15. Von MacOS und Blackberry sind wir glücklicherweise bisher verschont geblieben, und die Palms und Symbian-Telefone sind schon lange den Weg alles irdischen gegangen.
Die gewohnten Mail-Programme sollen möglichst nicht geändert werden. Davon benutzen wir zur Zeit vier: Evolution für Linux, Thunderbird oder Outlook für Windows und K9 für Android.
Den Anfang macht Linux
Hier erwartete ich die wenigsten Probleme, da PGP schließlich ursprünglich dafür entwickelt wurde.
Grundlage bildet hier gpg (GnuPG oder Gnu Privacy Guard), das alle Funktionen der Signatur, Verschlüsselung und Schlüsselverwaltung im Hintergrund erledigt. Das Paket ist normalerweise schon in Debian Buster vorinstalliert. Sollte es fehlen. lässt es sich ganz einfach mit
sudo apt-get install gnupg
nachinstallieren.
Eine grafische Oberfläche für einige Funktionen von gpg bietet gpa, der Gnu Privace Assistant, an. Hier sollte man allerdings Vorsicht walten lassen, denn der Funktionsumfang ist eingeschränkt und es werden einige manchmal etwas fragwürdige Vorgaben gemacht.
Installiert ist gpa genau so einfach wie gpg selbst mit
sudo apt-get install gpa
Der erste Schlüssel
Etwas blauäugig habe ich den ersten Schlüssel ohne weitere Überlegungen von GPA erzeugen lassen. Der Menüpunkt Schlüssel → Neuer Schlüssel öffnet einen Assistenten, der lediglich nach Name, eMail-Adresse und Passwort fragt und die Erzeugung einer Sicherheitskopie anbietet. Vor unangenehmen, aber wichtigen Einzelheiten wie z.B. die Schlüssellänge versucht er den User zu bewahren.
Wenn man danach die Eigenschaften des Schlüssels ansieht, bemerkt man, dass er zwar wie gefordert auf RSA basiert, die Länge lediglich 2048 bit ist, während allgemein heute mindestens 4096 empfohlen werden.
Mehr Einfluss auf die Schlüsseleigenschaften hat man mit dem Kommandozeilenwerkzeug gpg. Um einen neuen Schlüssel zu erzeugen, nutzt man
gpg --full-generate-key
Im folgenden Dialog kann man Verschlüsselungsverfahren, Schlüssellänge, Gültigkeitsdauer, Nutzerbezeichnung und Passwort angeben. Empfohlen wird ein RSA-Schlüssel mit mindestens 4096 bit Länge, der volle Name und die eMail-Adresse als Nutzer-ID und ein sicheres Passwort.
Standardvorgabe ist eine unbegrenzte Gültigkeit, was ich allerdings nicht empfehle, weil man einmal veröffentlichte Keys nicht mehr löschen kann. Unbegrenzt gültige Schlüssel bleiben so ewig im Netz, während begrenzt gültige wenigstens nach Ablauf der Frist gelöscht werden. Will man den Schlüssel länger als ursprünglich geplant benutzen, kann man die Gültigkeit problemlos verlängern.
Mit
gpg --list-secret-keys
kann man sich danach vergewissern, dass der Schlüssel erzeugt und dem Schlüsselring beigefügt wurde.
Zwei Aktionen sind nach der Erzeugung eines Schlüssels wichtig:
- Eine Sicherheitskopie zu erzeugen und sicher auf einem separaten Speichermedium (z.B. USB-Stick) aufzubewahren. Das geht zum Beispiel ganz einfach mit gpa und Schlüssel → Sicherheitskopie anlegen.
- Ein Rückruf-Zertifikat zu erzeugen und ebenso sicher abzulegen. Nur mit einem solchen Zertifikat ist es später möglich, den Schlüssel zu widerrufen, wenn er unsicher geworden sein sollte oder nicht mehr zugänglich ist. Das wird leider von gpa nicht angeboten, sondern geht nur über die Kommandozeile und
gpg --gen-revoke <Identität>
Den Schlüssel signieren (lassen)
Eine Grundidee von PGP ist das sogenannte Web of Trust. Durch das gegenseitige Unterzeichnen der Schlüssel wird nach und nach ein Netz des wechselseitigen Vertrauens aufgebaut. Die öffentlichen Schlüssel selbst werden entweder direkt unter den Kommunikationspartnern ausgetauscht oder von Key-Servern bezogen.
Nach der Erzeugung ist der Schlüssel zunächst nur vom Erzeuger unterschrieben (self-signed) und nicht durch eine andere Instanz geprüft. Ein Adressat hat so keinerlei Sicherheit, dass der Schlüssel auch wirklich den vermeintlichen Absender repräsentiert. Er könnte genau so gut von einer beliebigen anderen Person erzeugt worden sein, um eine andere Identität vorzutäuschen.
Um die Glaubwürdigkeit des Schlüssels zu erhöhen, lässt man ihn von anderen Personen unterschreiben, die den Besitzer persönlich kennen oder seine Identität anhand von Personaldokumenten überprüft haben. Letzteres funktioniert nur, wenn sich beide Parteien persönlich treffen, meist auf eigens dafür eingerichteten Key-Signing-Parties. Ohne solche Unterschrift(en) sollte man keinem Key vertrauen.
Üblich ist, dass sich beide Parteien die Keys gegenseitig unterschreiben. Dafür übergibt der Besitzer dem Unterzeichner einen Ausdruck des Key-Fingerprints, der zum Beispiel mit
gpg --fingerprint <Identität>
erzeugt wird, wobei man als Identität seinen Namen oder die eMail-Adresse verwendet. Der Unterzeichner lädt den Key nach Überprüfung der Identität anhand der vorgelegten Dokumente in ihren Keyring. Am einfachsten geht das über das Kommando
gpg --search-keys <Identität>
Das Programm listet alle passenden Keys auf, und man importiert den passenden Key mit Angabe der Zeilennummer. Theoretisch sollte das auch mit gpa über das Menü Server → Schlüssel erhalten möglich sein, es ist mir aber dort nicht gelungen.
Nun vergleicht man den Fingerprint mit dem, den man vom Eigentümer als Ausdruck erhalten hat. Stimmt er überein, kann man den Key unterzeichnen, zum Beispiel in gpa über das Menü Schlüssel → Schlüssel Signieren oder per gpa Kommando
gpg --sign-key <Identität>
Den unterschriebenen Schlüssel exportiert man in gpa mit Schlüssel → Schlüssel Exportieren und sendet ihn als verschlüsselte Mail an den Besitzer zurück. So stellt man sicher, dass der Besitzer auch Zugriff auf das eMail-Konto und den passenden privaten Schlüssel hat.
Er kann den Schlüssel dann importieren, zum Beispiel in gpa mit Schlüssel → Schlüssel Importieren. Die Unterschriften kann er dann mit
gpa --list-sigs <Identität>
anzeigen lassen. Ist alles nach Wunsch, kann er den Schlüssel mit gpa und Server → Schlüssel Senden oder mit
gpg --send-key <Identität>
an den Key-Server schicken, wo er dann inklusive Unterschriften öffentlich verfügbar gemacht wird.
Zusätzliche Identität
Ein Schlüssel kann für mehr als eine Mailadresse oder Person benutzt werden. Zu einem existierenden Schlüssel lassen sich weitere Identitäten mit
gpg --edit-key <Identität>
hinzufügen. Die Identität ist ein beliebiger Teil des Namens oder der eMail-Adresse des Keys. Ist sie nicht eindeutig, listet gpg die Treffer in einer numerierten Liste, aus der man den entsprechenden Key mit seiner Nummer auswählt.
Das Kommando adduid
fügt eine weitere Nutzerkennung zum ausgewählten Key hinzu. Das Programm fragt nach Name, Mail-Adresse und Kommentar. Mit F
beendet man das Editieren und mit Q
verlässt man das Programm, wobei man das Ändern des Keys nochmals bestätigen muss.
Windows mit Gpg4win
Für Windows ist das Paket Gpg4win für die PGP-Infrastruktur zuständig. Es besteht unter anderem aus den portierten GnuPG-Tools gpg und gpa und den Plugins GpgOL für Outlook und GpgEX zur Dateiverschlüsselung im Windows Explorer.
Seit Ende 2019 ist Gpg4win sogar vom BSI für den Einsatz zum Schutz von Verschlussachen bis VS-NfD freigegeben und ersetzt das in die Tage gekommene und seit 2014 nicht mehr weiterentwickelte Chiasmus.
Nach der Installation kann man mit gpa den privaten Schlüssel vom USB-Stick importieren. Nicht vergessen, das Schlüssel-Vertrauen für den eigenen Key auf „Absolut” zu setzen, sonst beschwert sich Thunderbird später über nicht vertrauenswürdige private Schlüssel.
Thunderbird
Installiert man dann die Enigmail-Erweiterung in Thunderbird, findet diese den privaten Schlüssel und verwendet ihn für die passenden Konten. Über das Menü Enigmail → Einstellungen → Senden kann man die Vorgaben, wann Mails verschlüsselt und/oder Signiert werden sollen ändern, falls die Vorgaben nicht passen.
Bei jeder neuen Mail hat man dann zwei zusätzlicher Knöpfe in der Kopfzeile, mit denen man Signieren und Verschlüsseln kann; letzteres natürlich nur, wenn man für den Empfänger einen passenden öffentlichen Schlüssel importiert hat.
Im Sommer 2020 wird sich mit Thunderbird 78 vorausschtlich das Vorgehen ändern, da dann die Enigmal-Funktionen direkt in Thunderbird wandern sollen.
Da PGP Probleme beim Signieren und Verschlüsseln von HTML-Mails hat, sollte man deren Erstellung in den Kontoeigenschaften des Absenders unter „Verfassen und Adressieren” → „Nachrichten im HTML-Format verfassen” abstellen.
Outlook
Für Outlook installiert gpg4win das Plugin GpgOL. Es erzeugt in den Ribbons den Eintrag Absichern, über den man eine neue Nachricht signieren und verschlüsseln kann.
Das Plugin selektiert den passenden Schlüssel automatisch. Beim Empfang werden verschlüsselte Mails nach Eingabe der Key-Passphrase ebenso problemlos entschlüsselt.
Im Ribbon des Hauptfensters befindet sich der Zugang zu den sehr ausführlichen GpgOL-Einstellungen.
Android
Für Android bietet sich eine Kombination aus OpenKeychain als Key-Infrastruktur und K9 als Mail-Client an. Beides lässt sich sowohl aus dem Playstore als auch aus F-Droid installieren.
K9 richtet man wie gewohnt ein, ohne zunächst auf PGP achten zu müssen. In OpenKeychain muss nach der Installation zunächst der private Schlüssel installiert werden. Dafür steht der Punkt Meine Schlüssel verwalten aus dem Optionsmenü oben rechts. Wenn man keinen neuen Schlüssel erzeugen will, kann man einen bestehenden - also zum Beispiel den eben auf Linux erzeugten - importieren.
Der Import klappt mit einem Security-Token (Fido-Key), per Datei oder direkte Wifi-Übertragung. Letzteres funktioniert nur, wenn beide Seiten OpenKeychain benutzen.
Da man ohnehin immer eine Sicherheitskopie des eigenen Schlüssels auf einem USB-Stick anlegen sollte, kann man ihn auch gleich zur Übertragung nutzen. Praktisch dafür ist ein Stick, der sowohl USB-A (für den PC) als auch Mikro-USB oder USB-C (für das Android-Gerät) besitzt. Ansonsten hilft ein USB-OTG-Kabel.
In K9 muss jetzt noch OpenKeychain als OpenPGP-App ausgewählt werden. Dafür öffnet man die globalen Einstellungen und selektiert unter Kryptographie den entsprechenden Eintrag.
Will man Schlüssel zum Signieren und Verschlüsseln für Konten in K9 verwenden, muss zuvor für jedes Konto der zu verwendende Schlüssel ausgewählt werden. Das erledigt man in den Kontoeinstellungen (in der Kontenliste lange auf das Konto drücken) unter Kryptographie → Mein Schlüssel.
Letzter Tipp: bevor man Signatur und Verschlüsselung für einen Empfänger aktivieren kann, muss sein öffentlicher Schlüssel importiert werden. Sind PGP-Funktionen möglich, erscheint beim Verfassen der Mail oben rechts ein zusätzliches Schlosssymbol zum Einschalten der Sicherheitsfeatures.
Es ist mir allerdings noch nicht gelungen, in K9 Signieren ohne Verschlüsseln auszuwählen. In Sachen PGP scheint dort aber auch noch einiges in Bewegung zu sein.
Schlüsselaustausch über Key-Server
Keyserver sind ein weiteres Grundkonzept von PGP. Applikationen können sich von ihnen die öffentlichen Schlüssel der Nachrichtenquelle holen und mit ihnen und dem privaten Schlüssel des Empfängers die Signatur der Nachricht prüfen oder die Inhalte entschlüsseln. Dafür muss die Schlüsselverwaltung des Absenders natürlich vorher die Keys an den Schlüsselserver senden.
Leider benutzen gpg und OpenKeychain in der Standardkonfiguration nicht die gleichen Keyserver. Während in gpg der Server keys.gnupg.net
definiert ist, benutzt OpenKeychain eine Liste von 3 Key-Servern, unter denen sich aber nicht der gnupg-Server befindet. So werden gnupg-Keys nicht in OpenKeychain gefunden und umgekehrt.
Es lassen sich aber auf beiden Seiten die Server ändern oder weitere Server hinzufügen. In gnupg geschieht das durch ändern der Datei ~/.gnupg/gpg.conf
. Die Standard-Konfiguration ist
keyserver hkp://keys.gnupg.net
Das Verhalten von gnupg bei mehr als einem Keyserver ist allerdings nicht dokumentiert. Die Meinungen darüber, ob an alle definierten Server gesendet wird oder nur an einen, und wenn an welchen, gehen in den Diskussionen auseinander, und die Implementierung scheint in dieser Hinsicht auch noch nicht fix zu sein. Ich empfehle daher, sich auf einen Keyserver zu beschränken.
In OpenKeychain kann der gnupg-Keyserver zu der bestehenden Liste hinzugefügt werden. Das geschieht über Einstellungen → Schlüsselsuche im Pizzamenü links oben. Unter „OpenPGP Schlüsselserver verwalten” findet man die Server-Liste, die sich mit dem Plus-Symbol rechts oben erweitern oder durch Klick auf einen Eintrag ändern lässt.
Allerdings sendet und empfängt OpenKeychain auch immer nur über einen Server, und zwar an den ersten der Liste. Nur wenn dieser nicht reagiert, werden weitere versucht. Die Reihenfolge der Einträge lässt sich durch ziehen am Pizzamenü rechts neben dem Eintrag ändern.
Bei einem der 5 getesteten Android-Geräte (Moto-X mit Android 9) ist es mir nicht gelungen, gnupg als Key-Server einzutragen. Bei der Überprüfung des Servers erhält man keinen Kontakt, obwohl die URL korrekt eingetragen wurde und das Netzwerk funktioniert. Die Ursache ist bisher unklar.
Ist der Schlüsselserver korrekt eingerichtet, findet man offentliche Schlüssel über das Plus-Zeichen (unten rechts in der Schlüsselliste) und Schlüsselsuche. Dort sieht man auch die beiden anderen Möglichkeiten zum Schlüsselimport: „QR-Code einscannen” und „Aus Datei importieren”.
Fazit
Die PGP-Software ist in den letzten Jahren gereift. Sie ist auf allen relevanten Plattformen verfügbar, leicht zu installieren und konfigurieren und funktioniert bis auf wenige Ausnahmen problemlos.
Es gibt kaum noch einen Grund, PGP nicht für seine Korrespondenz einzusetzen. Es macht Mails sicherer, kann Fälschungen sicher entlarven und bei Bedarf Inhalte vertraulich übermitteln.
Das System funktioniert um so besser, je mehr Teilnehmer es hat und je größer der Anteil signierter und/oder verschlüsselter Korrespondenz ist. Grund genug, genau jetzt damit anzufangen!