© saicle/Shutterstock.com
Asynchrone Verschlüsselung mit Pretty Good Privacy (PGP)

Ziemlich gute Privatsphäre


Datenschutz finden alle wichtig, aber viele handeln in ihrem Alltag nicht danach. Am Telefon werden wildfremden Leuten Informationen verraten, Passwörter werden im Klartext durch das WLAN und Internet geschickt, um sich in den E-Mail-Account oder FTP-Server einzuloggen, und Nachrichten bei Facebook, Twitter und Co. werden unverschlüsselt über HTTP verschickt. Genau dasselbe trifft auch auf die E-Mails selbst zu: Sensible Daten gehen mit fast jeder E-Mail durch die Netze, Zugangsdaten, persönliche Informationen und der berufliche E-Mail-Verkehr werden im Klartext verschickt und empfangen. Aber das muss nicht sein: PGP ist eine End-to-End-Verschlüsselung, seit 20 Jahren verfügbar. Hier zeige ich, wie man in PHP E-Mails und Dateien verschlüsseln, entschlüsseln, signieren und prüfen kann.

Verschlüsselung ist wichtig und wird immer wichtiger, bei Passwörtern nutzt hoffentlich jeder Programmierer in seiner Software mittlerweile Einwegverschlüsselungen / Hashes, also Verfahren, um Passwörter nicht im Klartext in die Datenbank schreiben zu müssen, aber trotzdem in der Lage zu sein, ein eingegebenes Passwort überprüfen zu können. Einwegverschlüsselungen haben den großen Vorteil, dass man keinen Schlüssel benötigt, und demnach auch das Ergebnis nicht wieder entschlüsseln kann, um das Original zurückzuerhalten. Bekannte Vertreter sind das etwas in die Jahre gekommene MD5-Verfahren, neuere Verfahren sind beispielsweise SHA1 oder die Algorithmen aus der SHA2-Familie (Secure Hash Algorithm; SHA-224 ,SHA-256, SHA-384, SHA-512).

Symmetrische Verschlüsselung

Möchte man Daten verschlüsseln und sie auch später wieder entschlüsseln, kommt man als Erstes auf symmetrische Verschlüsselungsverfahren. Bekannte Vertreter sind AES, 3DES und Blowfish. Wer die Daten verschlüsselt und sie selbst auch wieder entschlüsseln möchte, muss nur dafür sorgen, dass das Passwort sicher gespeichert wird. Zur Verschlüsselung nimmt man ein Passwort, und nur mit genau diesem Passwort lässt sich auch das Original wieder herstellen.

Asymmetrische Verschlüsselung

Möchte man Daten verschlüsseln und jemand anderes, beispielsweise der Empfänger einer Nachricht, muss sie entschlüsseln können, hat man einen großes Problem: Man muss das Passwort an das Gegenüber übermitteln, logischerweise unverschlüsselt. Gerade im Internet ist das schwierig, wenn es in erster Näherung als unsicher angenommen wird. Häufig kommt deshalb die asymmetrische Verschlüsselung ins Spiel. Dabei gibt es ein Schlüsselpaar, bestehend aus einem privaten Schlüssel und einem dazugehörigen öffentlichen anderen Schlüssel. Den öffentlichen kann man gefahrlos weitergeben, er ist nicht geheim. Das Interessante ist nun, dass man eine Nachricht mit dem öffentlichen Schlüssel verschlüsseln kann, und sie dann nur der Besitzer des dazugehörigen privaten Schlüssels entschlüsseln kann. Was an Magie zu grenzen scheint, ist schlichte Mathematik und schon seit Jahrzehnten ein als sicher angesehenes Verfahren.

Signatur

Mithilfe der asymmetrischen Verschlüsselung ist es auch möglich, eine Nachricht zu signieren. Dazu wendet der Absender eine Einwegverschlüsselung auf die Nachricht an und verschlüsselt das Ergebnis mit seinem privaten Schlüssel. Für jeden anderen ist dann mittels des öffentlichen Schlüssels eine Überprüfung möglich, ob der Text wirklich vom angegebenen Absender stammt und der Inhalt nicht verändert wurde.

Vorteile der asymmetrischen Verschlüsselung

Eine Nachricht ist also durch die asymmetrische Verschlüsselung geschützt vor neugierigen Blicken. Durch die Signatur, die parallel oder einzeln angewendet werden kann, ist auch der Absender identifizierbar und die Integrität der Nachricht sichergestellt.

PGP und GPG

Für Dateien, aber auch besonders im E-Mail-Bereich, wird das Public-Key-Verfahren PGP verwendet. PGP steht dabei für Pretty Good Privacy und wurde 1991 von Phil Zimmermann entwickelt. Da die asymmetrische gegenüber der symmetrischen Verschlüsselung sehr langsam ist, wird ein Hybrid verwendet: Die eigentliche Nachricht wird zuerst mit einem zufällig erzeugten Schlüssel symmetrisch verschlüsselt, dann wird der genutzte Schlüssel asymmetrisch mit dem öffentlichen Schlüssel des Empfängers verschlüsselt. So ist es sogar möglich, eine Nachricht an mehrere Empfänger zu schicken, der symmetrische Schlüssel muss einfach nur für jeden Empfänger asymmetrisch verschlüsselt und mitgeschickt werden.

1998 wurde der OpenPGP-Standard geschaffen, den das Programm GnuPG (GPG) als Open Source implementierte, und der als freie Alternative zum kommerziellen PGP häufig genutzt wird. Leider sind beide nicht vollständig deckungsgleich, sodass es Probleme beim Austausch dieser beiden Programme geben kann, doch in der Praxis funktioniert das eigentlich immer problemlos.

PGP-Verschlüsselung im Detail

Die Schritte zur Verschlüsselung sind die folgenden:

  • Eine Signatur kann erzeugt werden

  • Die Nachricht (und die Signatur) wird komprimiert

  • Symmetrische Verschlüsselung mit zufälligem Schlüssel KM

  • Asymmetrische Verschlüsselung des Schlüssels KM mit dem öffentlichen Schlüssel des Empfängers

  • Zur leichteren Übertragung via E-Mail wird das Ergebnis noch Base64-kodiert

Zu guter Letzt werden noch Kopf- und Fußzeilen hinzugefügt, das Ergebnis sieht z. B. aus wie in Listing 1. Zur Entschlüsselung muss man diese Schritte rückwärts anwenden, mit zugehörigem privatem Schlüsselgegenstück.

Listing 1

-----BEGIN PGP MESSAGE----- Version: GnuPG v2.0.16 (GNU/Linux) hQEMA1PUVhZb8UnsAQf+KS9PNvkWYFO...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang