32.10 Mails verschlüsseln: PGP und S/MIME
Die Verschlüsselung von E-Mails ist heute, da das Abhören von E-Mails ein Leichtes ist, wichtiger als je zuvor. Im Folgenden stellen wir mit PGP/GPG und S/MIME zwei bekannte Verfahren zur Verschlüsselung von E-Mails vor.
32.10.1 PGP/GPG
Beginnen wollen wir dabei mit dem bekannten PGP-Programm. Die Abkürzung PGP steht für Pretty Good Privacy, eine fast schon mystische Abkürzung in der Welt der IT. Das PGP-Programm wurde ursprünglich von Phil Zimmerman geschrieben, mit dem Ziel, jedermann das Recht auf eine Privatsphäre zu garantieren.
Dass PGP diesen Zweck mehr als erfüllte, belegt die Tatsache, dass die Software als starke Kryptografie eingestuft wurde und als solche unter die Waffenexportverbote der USA fiel. Nur durch den legendären Trick, die Software auszudrucken und in Buchform zu exportieren, gelang es damals, sie auch legal nach Europa zu bringen.
PGP ist mittlerweile kommerziell, aber es gibt mit dem GNU Privacy Guard (GPG) eine freie Alternative. Gerade bei solchen wirklich sensitiven Programmen sollte man darauf achten, dass man freie Software einsetzt – nur hier kann man dem Programm nämlich wirklich vertrauen. GPG ist kompatibel zu PGP und sowohl für Linux als auch für Windows verfügbar. Es gibt also eigentlich keinen technischen Grund, die Software nicht einzusetzen. Der einzige denkbare Grund für einen Verzicht wäre der, dass man schon PGP einsetzt. Da beide Tools zueinander kompatibel sind, werden wir im Folgenden nur noch von PGP im Sinne des gemeinsamen Standards sprechen.
Motivation
Im Zusammenhang mit PGP wird stets das Beispiel mit der Postkarte gebracht. Das liegt weniger daran, dass alle Autoren vermeintlich voneinander abschreiben, als vielmehr an der Prägnanz dieses Beispiels. Es wird nämlich argumentiert, dass E-Mails so offen wie Postkarten seien, auf der jeder – auch der Postbote – lesen kann, was der Absender dem Adressaten mitzuteilen hat. Der Vergleich endet dann meist mit der rhetorischen Frage, ob man selbst auch die geschäftliche Korrespondenz oder auch jegliche private Post so »frei« verschicken würde.
Funktionsweise
PGP nutzt asymmetrische Verschlüsselung, [Fn. Um genau zu sein: Es kommen RSA und Diffie-Hellman/DSS zum Einsatz.] der Benutzer besitzt also wieder einen öffentlichen und einen privaten Schlüssel. Daraus ergeben sich folgende Möglichkeiten:
- Digitale Signatur
Sie können einen Text mit Ihrem privaten Schlüssel unterschreiben, indem Sie einen Hash des Textes mit diesem verschlüsseln. Nun kann jeder Empfänger des Textes mit Ihrem öffentlichen Schlüssel den signierten Hash wieder entschlüsseln und überprüfen, ob dieser auch zu dem gesendeten Text gehört. - E-Mails verschlüsseln
Sie können auch E-Mails komplett verschlüsseln. Da eine vollständige Verschlüsselung mit asymmetrischen Verfahren zu rechenintensiv wäre, wird die E-Mail mit einem symmetrischen Algorithmus chiffriert. Erst der dafür benutzte, zufällig erzeugte Schlüssel wird mit dem öffentlichen Schlüssel des Empfängers verschlüsselt.
Der Empfänger kann nun mit seinem privaten Schlüssel den Key für das symmetrische Verfahren entschlüsseln und damit die gesamte Nachricht wieder in den Klartext überführen. Mit dieser Methode können Nachrichten auch für mehrere Empfänger verschlüsselt werden, ohne dass ein großer Overhead entsteht.
Bekanntermaßen ist der öffentliche Schlüssel für alle Aktionen zuständig, die jedermann durchführen kann, wie die Unterschrift einer Mail prüfen oder eine Mail an einen Empfänger verschlüsseln. Der private Schlüssel ist also für alle Aktionen vorgesehen, die man nur selbst durchführen können sollte: Das Entschlüsseln von Mails, die für Sie bestimmt sind, und das Signieren Ihrer eigenen Nachrichten.
Die Bedienung
Damit Sie auch gleich damit loslegen können, verschlüsselte E-Mails zu senden und zu empfangen, geben wir Ihnen im Folgenden eine Anleitung dazu. Wir verwenden hierfür das freie Open-Source-Programm GnuPG.
Schlüssel erzeugen
Zunächst müssen ein privater und ein öffentlicher Schlüssel erzeugt werden. Dies wird mittels gpg --gen-key erledigt.
Wir erzeugen dabei einen 2048 Bit langen, unendlich lange gültigen DSA/Elgamal- Schlüssel für Max Mustermann. 2048 Bit lange Schlüssel sind äußerst stark, und eine Ver- bzw. Entschlüsselung von größeren Nachrichten kann mit solchen Schlüsseln sehr lange dauern. Wenn Sie oft größere Nachrichten (etwa mit Anhängen) versenden, empfiehlt sich eventuell ein schwächerer Schlüssel mit bspw. 1024 Bit.
Listing 32.13 Schlüsselerzeugung mit GPG
$ gpg --gen-key
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software
Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to
redistribute it under certain conditions. See the
file COPYING for details.
gpg: Verzeichnis `/home/abc/.gnupg' erzeugt
gpg: Neue Konfigurationsdatei
`/home/abc/.gnupg/gpg.conf' erstellt
gpg: WARNUNG: Optionen in `/home/abc/.gnupg/gpg.conf'
sind während dieses Laufes noch nicht wirksam
gpg: Schlüsselbund `/home/abc/.gnupg/secring.gpg'
erstellt
gpg: Schlüsselbund `/home/abc/.gnupg/pubring.gpg'
erstellt
Bitte wählen Sie, welche Art von Schlüssel Sie
möchten:
(1) DSA and Elgamal (default)
(2) DSA (nur signieren/beglaubigen)
(5) RSA (nur signieren/beglaubigen)
Ihre Auswahl? [RETURN]
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) [RETURN]
Die verlangte Schlüssellänge beträgt 2048 Bit
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) [RETURN]
Schlüssel verfällt nie
Ist dies richtig? (j/N) j
You need a user ID to identify your key; the software
constructs the user ID from the Real Name, Comment and
Email Address in this form:
"Heinrich Heine (Der Dichter)
<heinrichh@duesseldorf.de>"
Ihr Name ("Vorname Nachname"): Max Mustermann
Email-Adresse:
Max.Mustermann@doomed-reality.org
Kommentar: [RETURN]
Sie haben diese User-ID gewählt:
"Max Mustermann
<Max.Mustermann@doomed-reality.org>"
Ändern: (N)ame, (K)ommentar, (E)-Mail oder
(F)ertig/(B)eenden? F
Sie benötigen eine Passphrase, um den geheimen
Schlüssel zu schützen.
Wir müssen eine ganze Menge Zufallswerte erzeugen.
Sie können dies unterstützen, indem Sie z. B. in einem
anderen Fenster/Konsole irgendetwas tippen, die Maus
verwenden oder irgendwelche anderen Programme
benutzen.
.+++++++++++++++.++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++..++++++++++++++++++++++
++++++++.++++++++++.++++++++++>+++++.+++++...........
..........<+++++..............+++++..++++++++++.+++++
++++++++++.+++++.++++++++++++++++++++..++++++++++++++
+++++++++++.++++++++++.+++++...++++++++++...+++++++++
+.++++++++++.+++++...++++++++++++++++++++>++++++++++>
+++++.........................>..+++++...............
.....................................................
.....................................................
..........................................+++++^^^
gpg: /home/abc/.gnupg/trustdb.gpg: trust-db erzeugt
gpg: key 4BBB2170 marked as ultimately trusted
öffentlichen und geheimen Schlüssel erzeugt und
signiert.
gpg: "Trust-DB" wird überprüft
gpg: 3 marginal-needed, 1 complete-needed, PGP
Vertrauensmodell
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q,
0n, 0m, 0f, 1u
pub 1024D/4BBB2170 2006-10-16
Schl.-Fingerabdruck = 81C0 6745 F200 8CE6 6AB5
990F 8524 2389 4BBB 2170
uid Max Mustermann <Max.Mustermann@doomed-reality.org>
sub 2048g/3EE79B61 2006-10-16
Schlüssel verteilen
Fertig! Nun müssen Sie Ihren öffentlichen Schlüssel (den Public Key) an die Personen verteilen, die dann mit ihm Nachrichten, die an Sie gesendet werden sollen, verschlüsseln möchten. Umgekehrt müssen diese Personen natürlich auch ihre öffentlichen Schlüssel an Sie schicken, damit Sie in der Lage sind, verschlüsselte Nachrichten an sie zu senden.
Um den Schlüssel zu versenden, können Sie den ihn entweder auf einen Schlüsselserver packen oder per Hand versenden. Wir werden den Schlüssel im Folgenden per Hand verteilen, wozu wir gpg veranlassen, ihn zu »exportieren«. Mit -a geben wir zusätzlich an, dass wir einen 7-Bit-ASCII-Output benutzen möchten.
[»]Hat man mehrere Schlüssel importiert, so werden bei Angabe des --export"=Parameters alle Schlüssel exportiert. Möchte man nur einen bestimmten (etwa den eigenen) Schlüssel exportieren, so ist dieser eine Schlüssel anzugeben. In diesem Fall wäre es für den eigenen Schlüssel -{-export 4BBB2170}. Den zweiten Parameter können Sie durch -{-list-keys} herausfinden (siehe unten).
Listing 32.14 Den Public Key ausgeben
$ gpg --export -a
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQGiBEUznXMRBACiYDOm3LvDKp1hoJGC37rqQrUvkdcUi3HGpfLNn58CS80JeaUj
OC/cJnog24lKZCo3pWvqATN7OlZrwJeznG7QhU3Lax/KxZ0CXLzB4yWWn0Vxu5g2
6sks+3r759ybviXzBmXe6UET9bvNlbqA+I4dGjUSSTKOwGk40se0YqKGIwCg7n9M
7jBsrTyBcetQ3eHK6WobYzMEAIcxTCx4ZmzXtfK+MEY9w0Q2DA8wNedQD3Sya4+3
RCbw7d099SnnYC1L5cklO/IwRHDTQhTQuSAlm4pprvwXNPsLWivi7pTwBhBYhwEI
2fRJRv8clE+vH/I1AZ9xmrtF0DhYd76H1v7jQEcUwIMamAV6Plj3atZ5Azyzh9C+
fkj6A/4ieXaGVke60LHMhzjn5p4p6tzRDzZgGx+CMLz7uy3ma/FXjZrlAwDuKUHw
I/G+Ln4wiGTGY0fnPkN2dXZZEwgMH4tzkemzQtmEmG6tqBDgcmx0EsRCE8f1CJWB
C28cYim7yUhTY/bmzUcxiqjXbavGPlABBvgNC+VEuOO0Ly60b7QyTWF4IE11c3Rl
cm1hbm4gPE1heC5NdXN0ZXJtYW5uQGRvb21lZC1yZWFsaXR5Lm9yZz6IYAQTEQIA
IAUCRTOdcwIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEIUkI4lLuyFw+v0A
oLjqfIPGML8a8t/t/tM3qQGd1xr0AJ453ZwTUyMjkiRFNJOfl8JCk+wnY7kCDQRF
M52BEAgAgdkxGiPRcInf/0ppvMiyS5/SXhKj1kQ8sA5NDKRxPLA0jylT+vb9JKm5
M/T7L9g0DY+2rAhhl8AmBGU42ta6fVU8hFScy+ZJkcPqrBJb4hkcfSXMLUaXYBZc
vsFgm4ui8zSRUbp51K4/ST/muGjB2FoOkdp6IB8zhnT1P3k9peLDGDGOmEbiRJW7
LhweWFMEMw7TT4zENmaURvu5jrEzXEE7iDl+U4nSD5f/UcP1yVNVZneAhtGZPBgi
691Lbj8Pqa4QxXttT7JAP7FovtSgC9HMUzYcp1JtjK10uNnkeHGBWGy5pyt4u5xG
oGhHVfb9KCid+LnoaZ0b1FVTUwrswwADBQf/fzj1S3fi1HnZc+otnECn0uUYA22e
vBZRuMp9/OIKeSCGm89mO3ruPXFA4/+mTK0MfhfzbaGFqnYhR9WC5jsAzb96M9nL
1XCisqr3WNoJOjfutODvAMHAnxtokuBS1M1EWMq7+r5YP1B4TWSBNJnFxyvZpgCV
aOnhJl0qYJGmd4f0qgPnYw9G5B/BSyE32UoIXs9uCj0yA9dRceN/U0ws+j6vrKPJ
EvF86xlMExmZifn3HyjSOihcrv3SCEFtbIm6T3rnFSQzG9UpzCMcJXEj8Ys/Qivm
1KRoBlGtaAF+Jdjyq/jje+nFglkBK9harnmG1z/4lwH7LB2dLQPdexnMtIhJBBgR
AgAJBQJFM52BAhsMAAoJEIUkI4lLuyFwAH8AoIfdKuj7szGSb4efsZmFe66Cxx1q
AKDjqU1g+siwrHX5ZzzU9YcKfoZ55Q==
=PpwL
-----END PGP PUBLIC KEY BLOCK-----
Schlüssel importieren
Sendet Ihnen nun aber ein Fremder seinen öffentlichen Schlüssel, so muss dieser erst importiert werden, damit Sie später mit diesem Nachrichten an diesen Sender verschlüsseln können. Dazu wird der Schlüssel in einer Datei gespeichert (im Folgenden heißt sie key.txt).
Listing 32.15 Einen Schlüssel importieren
$ gpg --import key.txt
gpg: key 595195C0: public key "Steffen Wendzel
<steffen@ploetner-it.de>" imported
gpg: Anzahl insgesamt bearbeiteter Schlüssel: 1
gpg: importiert: 1
Übersicht über importierte Schlüssel
Die bereits importierten Schlüssel lassen sich natürlich auch anzeigen:
Listing 32.16 Importierte Schlüssel auflisten
$ gpg --list-keys
/home/abc/.gnupg/pubring.gpg
----------------------------
pub 1024D/4BBB2170 2006-10-16
uid Max Mustermann
<Max.Mustermann@doomed-reality.org>
sub 2048g/3EE79B61 2006-10-16
pub 1024D/595195C0 2006-10-15
uid Steffen Wendzel
<steffen@ploetner-it.de>
sub 2048g/BBDB8B83 2006-10-15
Alle populären Mailprogramme können über die jeweiligen Optionsmenüs für die Nutzung von GPG oder PGP konfiguriert werden. Zur Zusammenfassung: Die öffentlichen Schlüssel dienen zur Verschlüsselung einer E-Mail. Zu diesem Zweck müssen Sie Ihren öffentlichen Schlüssel an Leute, die Ihnen Mails schreiben, verschicken. Die von diesen Leuten verschlüsselten Mails können Sie mit Ihrem privaten Schlüssel dann wiederum entschlüsseln. Schickt Ihnen jemand seinen öffentlichen Schlüssel, können Sie wiederum E-Mails an diese Person mit diesem öffentlichen Schlüssel verschlüsseln.
[»]So weit diese kleine Einführung in gnupg. Falls Sie weitere Informationen zum Thema suchen, dann sind Sie bei http://www.gnupg.org/howtos/de/ an der richtigen Adresse.
Sicherheitsfragen
Viel spannender sind für uns die Sicherheitsfragen. Offensichtlich ist, dass PGP wie viele andere Verfahren auch für einen Man-in-the-Middle-Angriff anfällig ist. Die Verschlüsselung ist nämlich sehr sicher, und es ist fast ausgeschlossen, dass eine entsprechend verschlüsselte Mail mit mathematischen Verfahren offengelegt wird. Dagegen liegt bei der Schlüsselverteilung »der Hase im Pfeffer«.
Wie nämlich kann man feststellen, ob der öffentliche Schlüssel des Empfängers wirklich zu diesem und nicht etwa zu einem Angreifer gehört, der die Kommunikation abfängt? Eigentlich gar nicht. Man müsste sich eigentlich immer persönlich von der Echtheit eines Schlüssels überzeugen, diesen also selbst auf einer Diskette oder einem anderen Speichermedium in Empfang nehmen oder sich den Schlüssel von der betreffenden Person am Telefon vorlesen lassen (was allerdings auch abgehört werden kann!).
Nun wäre so eine Vorgehensweise aber extrem umständlich [Fn. Haben Sie schon einmal einen 768 Bit langen, hexadezimal codierten Schlüssel am Telefon vorgelesen? Dafür könnte man glatt eingeliefert werden ...] und sicherlich nur für einen begrenzten Freundes- und Bekanntenkreis praktikabel. Daher gibt es zwei sehr gute Möglichkeiten, die Echtheit seines Schlüssels sicherzustellen: das Web of Trust sowie öffentliche Keyserver.
Das Web of Trust funktioniert sehr einfach: Wenn man sich von der Echtheit eines Schlüssels wirklich überzeugt hat, kann man diesen Schlüssel mit dem eigenen unterschreiben. Nun kann ein Dritter, der sich von der Echtheit Ihres Schlüssels überzeugt hat, sich auch der Echtheit des unterschriebenen Schlüssels sicher sein, da er Ihnen sicherlich vertraut. Daher schicken Leute, die zum ersten Mal ihre Schlüssel austauschen, oft Unterschriften anderer Nutzer mit.
Eine Ergänzung dazu ist das Keyserver-Netzwerk, das es erlaubt, den eigenen Schlüssel samt persönlicher Daten auf einen gesicherten Server im Internet hochzuladen. Möchte Ihnen nun ein völlig Unbekannter eine sichere Mail schicken, so kann er nachsehen, ob er auf dem Keyserver Ihren öffentlichen Schlüssel findet.
Bei Keyservern ist zu beachten, dass Sie nur mit Ihrem privaten Schlüssel Ihren Eintrag widerrufen können, da nur dieser Sie wirklich identifiziert. Man ist also nicht vor dem Verlust des Schlüssels geschätzt, da in diesem Fall für immer und ewig ein veralteter Schlüssel veröffentlicht sein wird.
32.10.2 S/MIME
Der S/MIME-Standard ist PGP recht ähnlich. Aus diesem Grund gehen wir hier nicht so sehr ins Detail, sondern halten nur den wesentlichen Unterschied fest.
Im Gegensatz zu PGP vertraut S/MIME nicht in erster Linie auf ein Netzwerk von Freunden, sondern setzt eine hierarchische Verwaltung von digitalen Zertifikaten ein. Durch eine solche allgemein akzeptierte Instanz, die entfernt mit den optionalen und nicht allwissenden Keyservern von PGP vergleichbar ist, kann man an die öffentlichen Schlüssel von bestimmten Personen oder Institutionen gelangen.
Ein solches, zugegeben umständlicheres, Netzwerk ist nötig, damit die Rechtssicherheit von elektronischen Unterschriften im Sinne der geltenden Gesetze gewährleistet ist. Dafür werden die zusätzlichen Kosten für den Betrieb einer unabhängigen und vertrauenswürdigen Instanz, die die Verteilung und Bestätigung der Zertifikate übernimmt, in Kauf genommen.
Um diesen Charakter einer garantiert sicheren Kommunikation auszudrücken, spricht man hier von Zertifikaten statt von öffentlichen Schlüsseln, auch wenn beides aus mathematischer Sicht dasselbe ist.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.