Das Thema, um das es in der Serie zuerst gehen soll, ist die Verschlüsselung von E-Mails mit Hilfe des Standards OpenPGP. In diesem Beitrag beleuchte ich einige Konzepte, die bei allen Installationen von OpenPGP-Software gleich oder zumindest sehr ähnlich sind. In den weiteren Beiträgen geht es dann um die Installation von OpenPGP für verschiedene Anwendungen unter diversen Desktop- und mobilen Betriebssystemen. Wer jetzt erst in die Serie einsteigt, ist gut beraten, den vorigen Beitrag zu lesen, in dem ich erkläre, was Verschlüsselung eigentlich genau ist. Dieses Wissen wird vorausgesetzt, um diesem und allen weiteren Beiträgen folgen zu können.
Die Basis 🔗
PGP steht, wie in der Einführung zu Verschlüsselung bereits erwähnt, für “Pretty Good Privacy”, also zu deutsch etwa “ziemlich guter Datenschutz”. Es wurde 1991 von dem Informatiker Phil Zimmerman entwickelt und gelangte durch verschiedene rechtliche Irrungen und Wirrungen schließlich als für jedermann einsehbarer Programmcode in die Öffentlichkeit.
Basierend hierauf wurde 1998 das Protokoll OpenPGP entwickelt, das genau definiert, wie ein verschlüsselter Text formatiert sein muss, welche Informationen in welcher Reihenfolge in ihm gespeichert sind, damit er mit den passenden Schlüsseln entschlüsselt oder die Signatur verifiziert (für gültig befunden) werden kann. Auch wird hiermit das Schlüsselformat selbst festgelegt.
Die Referenzimplementierung, also diejenige Entwicklung eines Programmes, das diesen Standard am getreuesten abbildet, ist der GNU Privacy Guard (GnuPG). Hierbei handelt es sich zum einen um ein alleinstehendes Programm. Dieses hat jedoch keine grafische Benutzeroberfläche wie der Webbrowser oder eine Textverarbeitung, sondern ist ein sogenanntes Programm für die textbasierte Kommandozeile. Unter Windows heißt diese “Eingabeaufforderung”, unter Mac OS X oder Linux “Terminal” oder “Shell”. Und zum anderen ist GnuPG eine sogenannte Bibliothek, also ein Programmodul, das in andere Programme eingebunden wird und seine Funktionalität diesen zur Verfügung stellt.
GnuPG bildet die Basis für sämtliche in den nächsten Artikeln zu behandelnde Software, ist sozusagen das Herzstück dessen, womit wir arbeiten, was wir aber selbst nur selten bis gar nicht direkt zu sehen bekommen. Einzige Ausnahme: Man kennt sich bereits so gut aus, dass man bestimmte Dinge eben mit diesem obigen Kommandozeilen-Programm erledigen möchte.
E-Mail-Formate 🔗
E-Mails, die mit OpenPGP verschlüsselt werden, können grundsätzlich zwei Formate haben.
Das eine, althergebrachte, Format ist eingebettetes PGP (“Inline PGP”). Dies erfordert zwingend, dass man seine Mails im absoluten Nur-Text-Format schreibt, also ohne jegliche Formatierungen.
Der Nachteil ist, dass diese in der Regel fest umbrochene Zeilen haben und damit auf verschieden großen Bildschirmen schwer lesbar sein können, indem nämlich Zeilen abgeschnitten oder überlange Zeilen in kurzen “Zeilenstummeln” fortgesetzt werden, die nächste echte Zeile dann aber nach wenigen Zeichen wieder auf einer neuen zeile anfängt usw. Auch kann man so nur schwer Tabellen, Listen oder andere heutzutage durchaus übliche Strukturierungen nicht oder nur per schwer überschaubarer Zeichenaufteilung erreichen.
Das andere, moderne, Format heißt PGP/MIME und ist auf alle E-Mail-Formate, also auch formatierte (oder HTML-) E-Mails anwendbar. Die Teile der Mail werden hierbei als Gesamtheit verschlüsselt und die Eigenschaften der einzelnen Teile werden bewahrt, so dass nach dem Entschlüsseln der Originalzustand unverfälscht wiederhergestellt werden kann.
Schlüsselpaar erzeugen 🔗
OpenPGP ist, wie bereits erwähnt, ein asymmetrisches Verschlüsselungsverfahren. Es gibt also immer ein Schlüsselpaar, das aus einem öffentlichen und einem privaten Schlüssel besteht. E-Mails werden vom Absender mit dem öffentlichen Schlüssel des Empfängers verschlüsselt. Der Empfänger entschlüsselt die Mail dann mit seinem privaten Schlüssel. Gleichzeitig unterschreibt der Absender die Mail mit seinem privaten Schlüssel. Der Empfänger überprüft diese Unterschrift (Signatur) mit dem öffentlichen Schlüssel des Absenders.
Nach der Installation der jeweiligen Software ist der erste Schritt folglich der, dass man sein persönliches Schlüsselpaar erzeugt. Man gibt dafür seinen Namen, seine hauptsächlich benutzte E-Mail-Adresse, ein möglichst komplexes, aber dennoch leicht zu merkendes Kennwort (die sogenannte Passphrase) an und lässt das Programm den Schlüssel erzeugen. Dabei beeinflusst man die Erstellung in der Regel durch Mausbewegungen oder zufällige Tastatureingaben, die dem ganzen mathematischen Mix, der da abläuft, genügend Zufallszahlen zur Verfügung stellen, damit es möglichst schwer wird, diesen Schlüssel überhaupt jemals zu knacken.
Schlüssel beglaubigen und Vertrauen erzeugen 🔗
Die OpenPGP-Verschlüsselung basiert auf gegenseitigem Vertrauen. Dazu kann man den öffentlichen Schlüssel einer anderen Person, von dessen Echtheit man überzeugt ist, unterschreiben, diesen also beglaubigen. Man fängt damit in der Regel beim eigenen Schlüssel an und unterschreibt diesen selbst. Dies ist also der nächste Schritt nach der Erstellung des Schlüssels. Ein von einem selbst nicht unterschriebener Schlüssel gilt in den Augen überzeugter Kryptografen als im Grunde nicht existent. Es ist also ratsam, diesen Schritt unbedingt sofort durchzuführen.
Verbreitung des eigenen öffentlichen Schlüssels und Erhalt anderer öffentlicher Schlüssel 🔗
Nun, da man seinen schönen öffentlichen Schlüssel erstellt und unterschrieben hat, möchte man diesen natürlich auch verbreiten, damit andere einem zukünftig verschlüsselte E-Mails zukommen lassen können. Hierzu gibt es grundsätzlich zwei Möglichkeiten.
Die eine besteht darin, den öffentlichen Schlüssel an eine Sammelstelle, einen sogenannten Schlüsselserver, zu schicken und somit anderen zugänglich zu machen. Jedes gängige OpenPGP-Programm stellt eine Suchfunktion zur Verfügung, mit der man nach Namen, E-Mail-Adressen oder Schlüssel-IDs anderer Nutzer suchen kann. Der gefundene öffentliche Schlüssel kann dann gleich importiert und genutzt werden.
Die zweite Möglichkeit ist die, den öffentlichen Schlüssel in Eigenverwaltung auf seiner eigenen Webseite zu lagern und von dort per Link zu verbreiten. Eine Initiative wie pgp.ascC argumentiert, dass diese öffentlichen Schlüssel vertrauenswürdiger sind als solche auf Schlüsselservern, da man in jedem Fall davon ausgehen kann, dass nur der Besitzer schreibenden Zugriff auf die eigene Webseite hat, also nur selbst Dateien zum Abruf dort plazieren kann. Außerdem dürfte dort in der Regel immer die aktuellste Version des öffentlichen Schlüssels zu finden sein.
Ich stimme dieser Argumentation durchaus zu, fahre selbst aber die Doppelstrategie, dass mein öffentlicher Schlüssel stets auch auf Schlüsselservern abrufbar ist.
Weiteres Vertrauen in öffentliche Schlüssel 🔗
Das weitere Vertrauen in öffentliche Schlüssel wird durch den persönlichen Kontakt mit anderen Nutzern von OpenPGP aufgebaut. Wenn also Person A den Schlüssel von Person B unterschreibt und Person C mit Person A bekannt ist, kann Person C auch dem Schlüssel von Person B vertrauen, da eine gültige Signatur von Person A vorliegt. So wird über kurz oder lang ein Netz des Vertrauens (Web Of Trust) gebildet.
Bewerkstelligt wird dies, indem man in persönlichem Kontakt (direkte Begegnung, Telefongespräch o. ä.) die Angaben der öffentlichen Schlüssel vergleicht. Die hierbei wichtigsten Angaben sind zum einen die achtstellige ID und zum anderen der 40-stellige Fingerabdruck des öffentlichen Schlüssels. Im Beispiel meines auf dieser Seite zugänglichen öffentlichen Schlüssels lauten die Angaben wie folgt:
- Schlüssel-ID: 789EDB19 oder 0x789EDB19
- Fingerabdruck: 79DB 97B0 3399 79F3 24F3 76D3 8E3F 7B7B 789E DB19
Beobachtern wird aufgefallen sein, dass die Schlüssel-ID mit den letzten acht Stellen des Fingerabdrucks übereinstimmt. Die Vermutung liegt also nahe, dass auch der Rest stimmt und es reicht, die ID zu vergleichen. Leider kann man sich hierauf nicht mehr zu 100% verlassen, wie in diesem Artikel nachzulesen ist. Will man aber völlig sicher gehen, ist der Vergleich des gesamten Fingerabdrucks dringend empfohlen, oder zumindest mehrere zufällig ausgewählte Blöcke davon. Vielen Dank an Henning für diesen Hinweis!
Kontakt zu anderen OpenPGP-Nutzern kann auch auf bestimmten Konferenzen geknüpft werden, auf denen es manchmal sogenannte “Key Signing parties”, also “Schlüssel-Unterschreibe-Partys” gibt, auf denen man sich in persönlichem Kontakt gegenseitig die öffentlichen Schlüssel zukommen lässt, vergleicht und gegenseitig signiert. Eine weitere Möglichkeit sind Krypto-Parties in der Region. Dies sind zumeist privat organisierte Workshops oder Seminare, in denen ein Experte oder sachkundiger Anwender anderen, die keine oder nur wenig Kryptografiekenntnisse haben, die Grundlagen der Verschlüsselung beibringt und man dort Kontakte zu anderen Interessierten knüpfen kann. Und was liegt da näher, die frisch generierten Schlüssel dort gleich im persönlichen Kontakt zu beglaubigen?
Die so frisch von dritten unterschriebenen öffentlichen Schlüssel können dann als aktualisierte Version wieder auf die eigene Webseite und/oder den Schlüsselserver hochgeladen werden, und die Unterschriften der Beglaubiger sind zukünftig für alle anderen sichtbar, und die Wahrscheinlichkeit, dass man für echt und vertrauenswürdig gehalten wird, steigt. Auch die Unterschrift, die man selbst unter andere Schlüssel setzt, bekommen dadurch höheres Gewicht bei der Vertraulichkeit.
Wenn mal was schiefgeht: Schlüssel widerrufen 🔗
Es kann immer mal was passieren, das dazu führt, dass der Schlüssel kompromitiert wird, indem er z. B. irgendwie den Weg an die Öffentlichkeit findet, der Computer gestohlen wird, auf dem dieser gespeichert ist usw. Daher ist es unbedingt angeraten, am Ende des Einrichtungsvorgangs ein Widerrufszertifikat zu erstellen, das man auf einem externen Medium, z. B. einem USB-Stick, speichert und aufbewahrt. Denn wenn mal was schief geht, kann man seinen öffentlichen Schlüssel damit für ungültig erklären. Gerade wenn dieser auf Keyservern gespeichert ist, kann man so schnell die Neuigkeit verbreiten, dass dieser öffentliche Schlüssel nun nicht mehr sicher ist und nicht mehr verwendet werden sollte.
Weitere E-Mail-Adressen hinzufügen 🔗
Möchte man unter mehreren E-Mail-Adressen verschlüsselt kommunizieren, kann man diese einfach als weitere sogenannte User-IDs hinzufügen und den öffentlichen Schlüssel aktualisieren. Man muss also nicht für jede neue E-Mail-Adresse, für die man Verschlüsselungsbedarf hat, ein neues, eigenes, Schlüsselpaar erstellen.
Abschied von Webmailern 🔗
Eines haben auch alle in den nächsten Artikeln behandelten Installationen gemeinsam: Verschlüsseltes Kommunizieren ist in Webmailern, also wenn man Gmail, GMX, web.de, FastMail oder ähnliche im Webbrowser wie Firefox oder Chrome nutzen will, nicht möglich. Man muss ein echtes E-Mail-Programm verwenden. Webmailer haben keine Ver- und Entschlüsselungsfunktionen eingebaut. Das wäre auch wenig sinnvoll, denn damit diese das könnten, müsste man seinen eigenen privaten Schlüssel auf den Server des Anbieters hochladen, damit dieser ihn nutzen kann. Und damit hätte man nicht mehr die volle Kontrolle über diesen Schlüssel. Es gibt zwar Ansätze, Ver- und Entschlüsselungsfunktionen in Webbrowsern per Erweiterung zur Verfügung zu stellen, diese sind aber nicht einheitlich oder deren Entwicklung aus Mangel an Interesse oder Zeit schon vor Jahren wieder eingestellt worden. Man könnte zwar die verschlüsselten Texte markieren und kopieren und den Inhalt der Zwischenablage dann von einem OpenPGP-Programm entschlüsseln lassen, die Antwort schreiben und diese dann wieder verschlüsseln und in den Antworttext im Browser kopieren, das wäre aber sehr umständlich und auch würde auch nicht immer die Lesbarkeit auf der anderen Seite garantieren.
Wer also Verschlüsselung nutzen will, sollte sich von Mail im Browser verabschieden und sich an die Nutzung eines echten E-Mail-Programmes gewöhnen.
Und nun genug der Vorrede! In den nächsten Beiträgen geht’s ans Eingemachte, sprich an die Einrichtung in verschiedenen Programmen.