PGP – Pretty Good Privacy

Was ist Pretty Good Privacy?

Pretty Good Privacy (PGP) bedeutet auf deutsch etwa „Ziemlich Gute Privatsphäre“. PGP ist ein von Phil Zimmermann entwickelte Software zur Ver- und Entschlüsselung und zum Unterschreiben von Daten.

Was macht PGP?

PGP verwendet ein sogenanntes Public-Key-Verfahren. Hierbei gibt es ein eindeutig zugeordnetes Schlüsselpaar:

Verwendet wird im Public-Key-Verfahren ein öffentlicher Schlüssel, mit dem jeder die Daten für den Empfänger verschlüsseln kann. Dazu wird ein privater geheimer Schlüssel verwendet, der nur dem Empfänger bekannt ist und der zusätzlich durch ein Kennwort geschützt ist.

Die Nachrichten werden an einen Empfänger mit seinem öffentlichen Schlüssel verschlüsselt und können somit ausschließlich durch den privaten Schlüssel des Empfängers entschlüsselt werden. Das Verfahren wird aus diesem Grund auch asymmetrisches Verfahren genannt. Der Sender und Empfänger verwenden zwei unterschiedliche Schlüssel. Dies erleichtert den Schlüsselaustausch.

Die erste Version von PGP wurde 1991 entwickelt und verwendet einen RSA-Algorithmus zur Verschlüsselung der Daten. Spätere Versionen verwenden den Diffie-Hellman-Schlüsselaustausch (DH/DSS).

Wie verschlüsselt PGP?

PGP verschlüsselt nicht die ganze Nachricht asymmetrisch, dies wäre viel zu rechenintensiv und daher bei größeren Datenmengen auch mit heutigen Rechnern unpraktikabel. Stattdessen wird die eigentliche Nachricht mit einem symmetrischen Algorithmus chiffriert und nur der verwendete Schlüssel asymmetrisch verschlüsselt. Dies nennt man aus diesem Grund eine Hybride Verschlüsselung. Für diesen Zweck wird jedes Mal ein symmetrischer Schlüssel zufällig erzeugt.

Der symmetrische Schlüssel wird per RSA- oder Elgamal-Verfahren mit dem öffentlichen Schlüssel des Empfängers verschlüsselt und zur Nachricht eingebettet. Aus diesem Grund ist es hiermit möglich, eine Nachricht für mehrere Empfänger gleichzeitig zu verschlüsseln und zu versenden. Eine für mehrere Empfänger verschlüsselte Nachricht sieht dann grafisch folgendermaßen aus:

asymmetrisch verschlüsselter Schlüssel der Nachricht für Empfänger 1
asymmetrisch verschlüsselter Schlüssel der Nachricht für Empfänger 2
asymmetrisch verschlüsselter Schlüssel der Nachricht für Empfänger 3
asymmetrisch verschlüsselter Schlüssel der Nachricht für Empfänger n
symmetrisch verschlüsselte Nachricht

Das Web of Trust

PGP basiert hierbei auf dem sogenannten Web of Trust. Anders als bei anderen Herangehensweisen gibt es keine zentrale Zertifizierungsinstanz, sondern Ketten des Vertrauens aus überprüften Benutzern. Jeder Benutzer trägt Sorge dafür, das der Schlüssel auch zu der Person gehört, der ihn angeblich erzeugt hat. Der Fingerprint dieses Schlüssels kann entsprechend angezeigt und vergleichen werden.

Funktionsweise von PGP

Der Anwender kann mit PGP wahlweise eine Nachricht verschlüsseln, signieren, oder verschlüsseln und signieren. Die Signatur der Nachricht dient dazu, die Echtheit dieser Nachricht dem Empfänger zu garantieren. Auf diese Weise kann gewährleistet werden, das kein Dritter den Inhalt trotz Verschlüsselung verändert hat. In der Praxis ist es sinnvoll Nachrichten, wenn man sie schon verschlüsselt auch immer zu signieren. Hingegen sind signierte unverschlüsselte Nachrichten teils in Newsgruppen verbreitet.

Erzeugen einer digitalen Signatur

Um genau sicherzustellen, dass eine abgefangene Nachricht nicht ersetzt oder verändert wurde, muss der Sender zuerst einmal Authentizität und Integrität der Nachricht mittels einer digitaler Signatur erzeugen. Hierbei wird auf die Klartextnachricht oder die Klardaten eine Hash-Funktion, wie zum Beispiel MD6, MD5 oder SHA-1, angewendet. Durch das Hashen entsteht ein „Message Digest“, ein eindeutiger Fingerprint der Nachricht, der aufgrund des verlustbehafteten Kompression des Hash-Algorithmus wesentlich kürzer ist, als die Nachricht in Bytes selbst. Daher nimmt die Generierung der Digitalen Signatur für eine Nachricht sehr wenig zusätzlichen Platz ein.

Anschließend wird aus dem Fingerprint der Nachricht, dem Message Digest (was nichts anderes ist, als der Hash-Wert) unter der Verwendung des privaten Schlüssels des Senders eine Nachrichten-Signatur erzeugt. Hierbei wird ein anderer Algorithmus angewendet. DSA bzw. RSA wird am häufigsten zur Erzeugung von Signaturen verwendet. Das mit Abstand bekannteste und auch am meisten verwendete digitale Signaturverfahren ist RSA.

Die Sicherheit von RSA basiert auf der Schwierigkeit, große Zahlen in ihre Primfaktoren zu zerlegen. (Faktorisierungsproblem) Das aktuelle Vertrauen in die Sicherheit von Signaturverfahren wie RSA oder DSA basiert vor allem auf der Tatsache, dass diese trotz 30 Jahre umfangreicher Forschung nicht gebrochen werden konnten.

Verschlüsselung

Im zweiten Schritt kann der Sender nun die Verschlüsselung der Nachricht vollführen. Hierbei wird der Klartext der Nachricht und die Digitale Signatur zusammen aus dem ersten Schritt genommen und komprimiert. Dies dient zur Reduktion der Größe und zusätzlich der Erschwerung der Kryptoanalyse. Diese komprimierten Bytes werden nun mit dem zufällig generierten Session Key mit einem symmetrischen Verfahren zum Ciphertext verschlüsselt. Damit der Empfänger diese Nachricht lesen kann, muss der zufällig erstellte Einmalschlüssel dem Empfänger mitgeteilt werden.

Hierzu wird der Schlüssel (Session Key) mit dem öffentlichen Schlüssel des Empfängers mit einem asymmetrischen Verfahren verschlüsselt und an die jetzt verschlüsselte Nachricht angefügt. Sollen die Daten per E-Mail versendet werden müssen die Bits des Ciphertextes und des verschlüsselten Schlüssels noch entsprechend encodiert werden. Dazu wird Datenblock mittels BASE64 in ASCII-Zeichen codiert. Jetzt kann die Nachricht entsprechend durch einen Client weiterverarbeitet und versendet werden.

Entschlüsselung

Zu Beginn muss der Empfänger die vorliegenden ASCII-Zeichen mit BASE64 wieder decodieren, um an den ursprümglichen Ciphertext und den verschlüsselten Session Key zu gelangen. Nun kann jetzt der Session Key durch den privaten Schlüssel des Empfängers entschlüsselt werden. Mit diesem Schlüssel wird wiederum gleich anschließend der Ciphertext wieder in die komprimierte Daten bestehend aus Klartextnachricht und Digitale Signatur entschlüsselt werden. Damit die Nachricht gelesen werden kann, muss diese nur noch entkomprimiert werden. Nun muss nur noch die Authentizität des Senders und die Integrität der Nachricht überprüft werden.

Hierzu wird auf den Klartext die gleiche Hash-Funktion, wie auch beim Sender angewandt. Die ergibt einen Hashwert, der zwischengespeichert wird. Anschließend wird die digitale Signatur mit dem öffentlichen Schlüssel des Senders mittels einer Umkehrfunktion des Signaturalgorithmus dechiffriert. Wurde zum Erzeugen der Signatur tatsächlich der zugehörige private Schlüssel verwendet, stimmen die beiden Klartexte des Message Digests überein. An dieser Stelle kann man mit hoher Wahrscheinlichkeit davon ausgehen, dass die Nachricht nicht verändert wurde und tatsächlich von einem bestimmten Sender stammt.