23.10 Mails verschlüsseln: PGP und S/MIME
Die Verschlüsselung von E-Mails ist besonders heutzutage, wo das Abhören von E-Mails ein Leichtes ist, von großer Bedeutung.
Dazu sollen im Folgenden mit PGP/GPG und S/MIME zwei bekannte Verfahren vorgestellt werden.
23.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 der Fakt, dass die Software als starke Kryptographie 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, die Software auch nach Europa zu bringen.
PGP ist mittlerweile kommerziell, aber es gibt mit dem GNU Privacy Guard (GPG) wieder 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 dabei 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 Grund dafür, nicht auf GPG zu setzen, wäre der, dass man schon PGP einsetzt. Da beide Tools also zueinander kompatibel sind, werden wir im Folgenden nur noch von PGP im Sinne des gemeinsamen Standards sprechen.
Motivation
Egal wo man etwas über PGP liest, überall wird 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 offen wie eine Postkarte seien, auf der auch jeder – auch der Postbote – lesen kann, was denn nun geschrieben wurde. 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.
Ihnen dagegen sollte schon von der Beschreibung der für E-Mails verwendeten Protokolle her klar sein, dass es eine Notwendigkeit für die Verschlüsselung der E-Mails als solcher gibt. Auch sollten Sie verstanden haben, warum Verschlüsselung an sich wichtig ist.
Funktionsweise
PGP nutzt asymmetrische Verschlüsselung <Um genau zu sein: Es kommen RSA und Diffie-Hellman/DSS zum Einsatz.>, man besitzt also wieder einen öffentlichen und einen privaten Schlüssel. Daraus ergeben sich folgende Möglichkeiten: <Mehr zum Thema Kryptographie erfahren Sie in unserem Buch »Praxisbuch Netzwerksicherheit«.>
- Digitale Signatur
- Man kann selbstverständlich einen Text mit seinem privaten Schlüssel unterschreiben, indem man einen Hash des Textes mit diesem verschlüsselt. 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
- Natürlich kann man auch E-Mails komplett verschlüsseln. Da eine komplette 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 also der öffentliche Schlüssel für alle Aktionen zuständig, die jedermann durchführen kann, wie also die Unterschrift einer Mail prüfen oder eine Mail an jemanden verschlüsseln. Der private Schlüssel ist also für alle Aktionen vorgesehen, die man nur selbst durchführen können sollte: Mails, die für einen bestimmt sind, entschlüsseln und eigene Nachrichten signieren.
Die Bedienung
Damit Sie auch gleich damit loslegen können, verschlüsselte E-Mails zu senden und zu empfangen, gibt es im Folgenden eine Anleitung dazu. Wir verwenden hierfür das freie Open-Source-Programm gnupg.
Schlüssel erzeugen
Zunächst müssen ein privater sowie 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. Sollten Sie also vorhaben, oft größere Nachrichten (etwa mit Anhängen) zu versenden, dann empfiehlt sich ein etwas schwächerer Schlüssel mit beispielsweise 1024 Bit.
$ 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
Listing 23.23 Schlüsselerzeugung mit GPG
Schlüssel verteilen
Fertig! Nun müssen Sie Ihren öffentlichen Schlüssel (den public key) an die Personen verteilen, die mit diesem anschließend Nachrichten, die an Sie gesendet werden sollen, verschlüsseln können. Umgekehrt müssen diese Personen natürlich auch ihre öffentlichen Schlüssel Ihnen zustellen, damit Sie in der Lage sind, deren verschlüsselte Nachrichten zu entschlüsseln.
Um dies zu tun, können Sie den Schlüssel entweder auf einen Schlüsselserver packen oder per Hand versenden. Wir werden den Schlüssel im Folgenden per Hand verteilen, wozu man gpg dazu veranlassen muss, den Schlüssel zu »exportieren«. Mit -a wird zusätzlich angegeben, dass man einen 7-Bit-ASCII-Output benutzen möchte.
$ 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-----
Listing 23.24 Den public key ausgeben
Schlüssel importieren
Nun können Sie bereits an die Leute, die diesen Schlüssel bekommen haben, verschlüsselte Nachrichten mit Ihrem Mailprogramm versenden (die meisten guten Mailprogramme bekommen das automatisch hin – verwenden Sie beispielsweise Sylpheed).
Sendet Ihnen nun aber ein Fremder seinen öffentlichen Schlüssel, so muss dieser erst importiert werden, damit Sie später mit diesem Nachrichten des Senders entschlüsseln können. Dazu wird der Schlüssel in einer Datei gespeichert (im Folgenden heißt sie key.txt).
$ 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
Listing 23.25 Einen Schlüssel importieren
Übersicht über importierte Schlüssel
Die bereits importierten Schlüssel lassen sich natürlich auch anzeigen:
$ 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
Listing 23.26 Importierte Schlüssel auflisten
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 Stelle.
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 kann man nämlich feststellen, ob der öffentliche Schlüssel des Empfängers wirklich zu ihm und nicht 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 Ähnlichem in Empfang nehmen oder sich den Schlüssel am Telefon vorlesen lassen.
Nun ist so eine Vorgehensweise aber extrem umständlich <Haben Sie schon mal 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 Keyserver 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.
23.10.2 S/MIME
Der S/MIME-Standard ist eigentlich nur ein etwas anderer Standard als PGP. Aus diesem Grund gehen wir nicht so sehr ins Detail, sondern halten nur grob den Unterschied fest.
Im Gegensatz zu PGP vertraut S/MIME nämlich 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 zum 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 eben auch von »Zertifikaten« anstatt von »öffentlichen Schlüsseln«, auch wenn beides von der mathematischen Seite betrachtet eigentlich das Gleiche ist.