# Pretty Good Privacy

Pretty Good Privacy (PGP; englisch für „ziemlich gute Privatsphäre“) ist ein von Phil Zimmermann entwickeltes Programm zur Verschlüsselung und zum Unterschreiben von Daten.

## Eigenschaften

PGP benutzt ein sogenanntes Public-Key-Verfahren, in dem es ein eindeutig zugeordnetes Schlüsselpaar gibt:
Genutzt wird ein öffentlicher Schlüssel, mit dem jeder Daten für den Empfänger verschlüsseln und dessen Signaturen prüfen kann, und ein privater geheimer Schlüssel, den nur der Empfänger besitzt und der normalerweise durch ein Passwort geschützt ist. Nachrichten an einen Empfänger werden mit dessen öffentlichem Schlüssel verschlüsselt und können dann ausschließlich mittels seines privaten Schlüssels entschlüsselt werden. Diese Verfahren werden auch asymmetrische Verfahren genannt, da Sender und Empfänger zwei unterschiedliche Schlüssel verwenden.
Die erste Version wurde im Jahr 1991 geschrieben und verwendete einen RSA-Algorithmus zur Verschlüsselung der Daten. Spätere Versionen benutzten den Elgamal-Algorithmus.
Bei PGP wird aber nicht die ganze Nachricht asymmetrisch verschlüsselt, denn dies wäre viel zu rechenintensiv und es wäre nicht praktikabel, dieselbe Nachricht an mehrere Empfänger zu schicken. Stattdessen wird die eigentliche Nachricht symmetrisch und nur der verwendete Schlüssel asymmetrisch verschlüsselt (Hybride Verschlüsselung). Dazu wird jedes Mal ein symmetrischer Schlüssel (session key) zufällig erzeugt.
Dieser symmetrische Schlüssel wird dann z. B. per RSA- oder Elgamal-Kryptosystem mit dem öffentlichen Schlüssel des Empfängers verschlüsselt und der Nachricht hinzugefügt. Dadurch ist es möglich, eine Nachricht für mehrere Empfänger gleichzeitig zu verschlüsseln. Eine für mehrere Empfänger verschlüsselte Nachricht sieht dann folgendermaßen aus:
* asymmetrisch für Empfänger 1 verschlüsselter Schlüssel der Nachricht
* $\vdots$
* asymmetrisch für Empfänger n verschlüsselter Schlüssel der Nachricht
* symmetrisch verschlüsselte Nachricht
PGP basiert dabei auf dem sogenannten Web of Trust, bei dem es keine zentrale Zertifizierungsinstanz gibt, sondern Vertrauen von den Benutzern selbst verwaltet wird.
Da PGP darauf ausgelegt ist, Nachrichten dauerhaft entschlüsseln zu können, wird, falls es einem Angreifer gelingt, einen privaten Schlüssel zu erlangen, die gesamte Kommunikationshistorie dieses Schlüssels kompromittiert. Für Instant Messaging wurde als Alternative zu PGP Off-the-Record Messaging (OTR) entwickelt; dabei bleibt auch bei späterer Kompromittierung des privaten Schlüssels die verschlüsselte Kommunikation unlesbar für den Angreifer (allerdings auch für den legitimen Schlüsselbesitzer).

## Geschichte

Phil Zimmermann schrieb die erste Version 1991. Sein Ziel war es, dass alle Bürger und insbesondere Bürgerbewegungen auch vor dem Zugriff durch Geheimdienste sicher verschlüsselte Nachrichten austauschen können (starke Verschlüsselung).
PGP durfte in seinen Anfangsjahren nicht lizenzfrei aus den USA exportiert werden, da es, ähnlich wie Waffen, unter das US-Exportgesetz fiel. Danach unterlagen Kryptosysteme mit Schlüsseln von mehr als 40 Bit Länge für die symmetrische Verschlüsselung besonderen Exportbestimmungen. Die ersten PGP-Versionen verwendeten den IDEA mit 128 Bit Schlüssellänge. Ende der 1990er Jahre liberalisierten die USA diese Gesetze.
Um die Exportbeschränkung zu umgehen, wurde der vollständige Quellcode 1995 in dem Buch „PGP Source Code and Internals“ von Phil Zimmermann veröffentlicht. Als Buch konnte die Software legal aus den USA exportiert werden. Es wurde von über 60 Freiwilligen per Hand abgetippt. Aus dem abgetippten Programmcode wurde dann eine international verfügbare Version von PGP (PGPi) kompiliert.
Die Firma PGP Corporation entstand aus einer Fusion vom Team um Phil Zimmermann mit ViaCrypt, an die Phil Zimmermann einige kommerzielle Rechte verkauft und die RSA direkt lizenziert hatte. Sie stellte bis Version 8 mit PGP Freeware ein eigenständiges Produkt für nichtkommerzielle Anwender bereit. Ab Version 9 gibt es stattdessen nur noch die Testversion von PGP Desktop Professional 9. Für 30 Tage kann sie uneingeschränkt benutzt werden. Nach Ablauf der Frist werden Funktionsumfang und Nutzungsrechte auf einen Umfang reduziert, der etwa dem ehemaligen PGP Freeware entspricht. Ver- und Entschlüsselung von E-Mails sind auch nach Ablauf der Testphase möglich, aber nur für nichtkommerzielle Zwecke zulässig.
PGP wurde 1997 von NAI (McAfee) aufgekauft und dort in die eigene Produktlinie integriert. Weil der Quelltext von PGP durch McAfee zeitweilig nicht offengelegt wurde und Features implementiert wurden, welche die automatische Verschlüsselung an einen weiteren Empfänger ermöglichten (Additional Decryption Key ADK), ist PGP in dieser Zeit stark in die Kritik geraten. 2002 hat McAfee die Marke PGP aufgegeben und an eine Gruppe ehemaliger Mitarbeiter von PGP rund um Phil Zimmermann verkauft. Diese neu gegründete PGP Corporation hat alle Rechte an PGP von McAfee zurückgekauft und von Beginn an alle Quelltexte wieder offengelegt.
Die neue PGP ist heute in vielen Ländern vertreten, darunter auch in Deutschland, wo die PGP Corporation im Jahre 2005 die deutsche Glück & Kanja Technology AG übernommen hat und damit die heute in Offenbach am Main sitzende PGP Deutschland AG gründete. Fünf Jahre später hat PGP dann auch die deutsche TC Trustcenter in Hamburg gekauft und ist damit auch als zertifiziertes Trustcenter für Zertifikate nach deutschem Signaturgesetz (für qualifizierte Signaturen) am Markt vertreten.
Nicht zuletzt wegen der intransparenten Situation in der Zeit, in der PGP im Eigentum der McAfee war, wurde bis 1998 der OpenPGP-Standard entwickelt. Das unter der GNU-GPL stehende Programm GnuPG war die erste Implementierung von OpenPGP und wurde als freie Alternative zu PGP entwickelt. Es gibt mittlerweile viele Erweiterungen des OpenPGP-Standards, die über den Funktionsumfang von PGP hinausgehen, so dass der reibungslose Austausch von Daten und Schlüsseln nicht immer garantiert ist.
Die PGP Corporation wurde im Juni 2010 von Symantec für 300 Millionen US-Dollar übernommen.

## Funktionsweise

Man kann mit PGP wahlweise eine Nachricht nur signieren, nur verschlüsseln oder sowohl signieren als auch verschlüsseln. Die Signatur dient dazu, die Echtheit der Nachricht zu garantieren, also dass sie vom behaupteten Absender ist (Authentizität) und nach der Signierung nicht verändert wurde (Integrität). In der Praxis wird man Nachrichten, wenn man sie verschlüsselt, zumeist auch signieren.

### Erzeugen einer digitalen Signatur

Um später sichergehen zu können, dass eine empfangene Nachricht nicht manipuliert oder ersetzt wurde (Integrität) und außerdem vom behaupteten Absender stammt (Authentizität), muss der Sender eine digitale Signatur für die Nachricht (oder Teile davon) erzeugen. Dabei wird auf die Klartextnachricht eine kryptologische Hashfunktion angewandt (früher oft SHA-1, inzwischen aber veraltet und durch u. a. SHA-256 ersetzt). Dadurch entsteht ein Message Digest (eindeutiger Fingerprint) der Nachricht, der wesentlich kürzer ist als die Nachricht selbst, was die Generierung der digitalen Signatur vereinfacht. Anschließend wird aus dem Message Digest unter Verwendung des privaten Schlüssels des Senders eine Signatur erzeugt.

### Verschlüsselung

Als zweiten Schritt (oder ersten, falls nicht signiert werden soll) kann der Sender nun die Verschlüsselung der Nachricht vornehmen. Hierbei werden die Klartextnachricht und die digitale Signatur aus dem ersten Schritt zu einem Datensatz zusammengefasst und komprimiert, zur Reduktion der Größe und Erschwerung der Kryptoanalyse. Diese komprimierten Daten werden nun mit dem zufällig generierten Session Key K$_M$ symmetrisch zum Geheimtext verschlüsselt. Da es sich um einen zufällig erstellten Einmalschlüssel handelt, muss dieser dem Empfänger mitgeteilt werden. Dazu wird der Schlüssel K$_M$ mit dem öffentlichen Schlüssel des Empfängers asymmetrisch verschlüsselt und der verschlüsselten Nachricht vorangestellt. Eine verschlüsselte Nachricht ist deshalb immer nur so sicher wie das schwächere Element aus dem asymmetrischen Schlüssel, für den verschlüsselt wird, und dem Session Key. Zum Schluss müssen die Bytes des Geheimtextes und des verschlüsselten Schlüssels noch E-Mail-freundlich gemacht werden. Dazu werden diese (genauso wie andere Binärdaten im E-Mail-Versand) mittels einer Base64-Variante (Radix-64) in bestimmte druckbare ASCII-Zeichen codiert. Nun kann die PGP-Nachricht an den Empfänger gesendet werden. Neben der Verwendung für E-Mails kann PGP auch für andere Nachrichtenkanäle verwendet werden, indem Dateien oder Text (dafür gibt es wegen der zwischen den Betriebssystemen uneinheitlichen Zeilenende-Codierung ein gesondertes Signaturverfahren) signiert und/oder verschlüsselt werden.

#### Aussehen einer verschlüsselten Nachricht

Verschlüsselt man den Text
dann sieht die codierte Nachricht so aus (im Inline-PGP-Format; bei einer PGP/MIME-E-Mail sähe es etwas anders aus):

### Entschlüsselung

Zu Beginn muss der Empfänger die vorliegenden ASCII-Zeichen mit Base64 wieder decodieren, um an den Geheimtext und den verschlüsselten Session Key zu gelangen. Jetzt kann der Session Key durch den privaten Schlüssel des Empfängers entschlüsselt werden und damit gleich anschließend der Geheimtext wieder in die komprimierte Kombination aus Klartextnachricht und digitaler Signatur entschlüsselt werden. Um schließlich an die Nachricht zu gelangen, muss diese nur noch dekomprimiert werden.
Allerdings sollen auch noch die Authentizität des Senders und die Integrität der Nachricht sichergestellt werden. Dazu wird einerseits auf den Klartext die gleiche Hash-Funktion wie beim Sender angewandt, und andererseits die digitale Signatur mit dem öffentlichen Schlüssel des Senders dechiffriert. Wurde zum Erstellen der Signatur tatsächlich der zugehörige private Schlüssel verwendet, so stimmen die beiden Klartexte des Message Digests überein; und man kann davon ausgehen, dass die Nachricht nicht verändert wurde. Davon, dass sie auch von einem bestimmten Sender stammt, kann man ausgehen, wenn der signierende Schlüssel einem Absender sicher zugeordnet werden kann, was unabhängig von der Bearbeitung einzelner Nachrichten ist.

## Sicherheit

Ein möglicher Angriff ergibt sich aus dem Vorgehen, Nachrichten zuerst zu signieren und dann zu verschlüsseln. Der Empfänger kann die signierte Nachricht nach dem Entschlüsseln mit gefälschtem Absender an eine dritte Person weiterleiten. Falls der Adressat in der Nachricht nicht namentlich genannt ist, kann die gültige Signatur den Eindruck erwecken, sie sei direkt vom ursprünglichen Sender an diese dritte Person geschickt worden.
Daneben wurde kritisiert, dass die öffentlichen Schlüssel häufig auf Servern gespeichert werden, auf die jede Person Lese- und Schreibzugang hat. So ist es dazu gekommen, dass dort falsche Schlüssel abgelegt wurden. Ein Ansatz, um dies zu verhindern, ist die Spezifikation DANE/OPENPGPKEY von der Internet Engineering Task Force.