Jeder kann einen PGP-Schlüssel selber generieren. Wer nun wissen will, ob dieser Schlüssel auch wirklich der angegebenen Person gehört, muss dies überprüfen. Das ist aber schwierig, wenn man diese Person gar nicht kennt.
Im folgenden erkläre ich, wie PGP dieses Problem löst. Im wesentlichen besteht diese Lösung aus Zertifikaten, die in etwa aussagen: Ich bestätige, dass dieser Schlüssel der angegebenen Person gehört.
Zudem zeige ich, wie PGP bestimmt, ob ein Schlüssel gültig ist, oder nicht und wie das Vertrauen festgelegt wird.
Bei jedem Public Key Verfahren ist die Authentizität ("Echtheit") der Public Keys ein Problem. Ein kleines Beispiel: Ich erhalte von Germano Caronni eine elektronisch unterschriebene Mail. Um die Unterschrift zu prüfen, brauche ich seinen public key.
Eine Mail an pgp-public-keys@keys.ch.pgp.net mit dem Subject GET caronni@tik liefert mir seinen public key. Aber ist das wirklich sein public key? Jemand (ein Betrüger) könnte einen Key mit dem Namen Germano Caronni erzeugt und auf dem Keyserver deponiert haben.
Ich muss nun die Echtheit dieses public keys überprüfen. Dazu habe ich verschiedene Möglichkeiten, z.B:
Die ersten beiden Möglichkeiten sind aufwendig und zum Teil undurchführbar (wenn der Key z.B. einer Person weit weg gehört). Die Dritte ist dagegen relativ einfach. Dazu gibt es sogar eine Hilfe, den AT&T PathServer. Dort kann ich die Schlüssel-ID meines public keys (DD934139) eingeben und die Schlüssel-ID des public keys von Germano (7B7AE5E1). Als Resultat erhalte ich dieses Bild:
Der oberste Kreis steht für meinen Schlüssel DD934139, der unterste Kreis für den Schlüssel von Germano Caronni 7B7AE5E1.
Ein Pfeil von A nach B bedeutet, dass A den Schlüssel von B unterschrieben hat.
Aus dem Bild ersehe ich nun: Marcel Waldvogel bestätigt, dass der Schlüssel 7B7AE5E1 Germano Caronni gehört (Marcel hat den Schlüssel von Germano unterschrieben). Ich wiederum habe den Schlüssel von Marcel Waldvogel unterschrieben und bestätige, dass der Schlüssel AB96E86D ihm gehört. Daneben gibt es noch einen weiteren Pfad über das ct‘magazin und Hanno Wagner.
Damit solche Pfade existieren können (und möglichst kurz und disjunkt sind), müssen möglichst viele Schlüsselinhaber die Schlüssel anderer Schlüsselinhaber unterschreiben und diese Unterschriften auf den Keyservern (siehe Glossar) veröffentlichen, damit Dritte diese Bestätigungen auch nutzen können. Das Ganze wird dann web of trust (Vertrauensnetz) genannt.
Warum müssen die Pfade kurz und disjunkt sein? Die Pfade sind Ketten von Bestätigungen. Je länger der Pfad zwischen meinem Schlüssel und dem Schlüssel vom Germano ist, desto weniger sicher kann ich mir über die Echtheit des Schlüssel von Germano sein. Pfade, die keinen gemeinsamen Schlüssel zwischen dem Start- und Endschlüssel haben, sind disjunkt. Je mehr disjunkte Pfade existieren, desto geringer ist die Wahrscheinlichkeit, dass ein schwarzes Schaf durch eine falsch ausgestellte Unterschriften eine Bestätigungskette vortäuscht, die so gar nicht existiert. (Durch mehrere Schlüssel, die von derselben Person stammen, ist das dennoch möglich).
Jeder Benutzer von PGP hat seinen eigenen Schlüsselbund mit öffentlichen Schlüsseln.
In diesem Schlüsselbund ist auch gespeichert, welche Schlüssel als gültig (valid) betrachtet werden. Ein Schlüssel ist gültig, wenn er
Ein Schlüssel, der im Schlüsselbund als nicht gültig gekennzeichnet ist, wird von PGP nur mit Vorbehalt verwendet:
bei PGP 2.x.x | bei PGP 5.x | Bedeutung |
---|---|---|
undefiniert (undefined) | untrusted | Unterschriften mit diesem Schlüssel werden ignoriert. |
teilweise (marginal) | marginal | Es müssen mindestens 2 solche Schlüssel einen dritten Schlüssel signieren, damit dieser (der dritte Schlüssel) als gültig anerkannt wird. |
voll (complete) | complete | Es muss mindestens 1 solcher Schlüssel einen anderen Schlüssel signieren, damit dieser (der andere Schlüssel) als gültig anerkannt wird. |
absolut (ultimate) | ultimate | Zu diesem Schlüssel besitzt man auch den geheimen Schlüssel. Jeder Schlüssel, der mit diesem Schlüssel signiert wird, ist sofort als gültig anerkannt. |
Die Anzahl benötigten Unterschriften, damit ein Schlüssel als gültig anerkannt wird, habe ich von PGP 5.0i für Windows genommen. Bei der Unix-Version und bei PGP 2.6.x können diese Werte in der Konfigurationsdatei selber eingestellt werden. So halte ich z.B. die Werte 2 und 4 (statt wie oben 1 und 2) für angebrachter. Die Werte 2 und 4 sind die Defaultwerte bei PGP 2.6.x.
Welche Schlüssel gültig sind und welches Vertrauen die Schlüssel geniessen kann wie folgt festgestellt werden:PGP 5.x (Windows) | PGPKeys.exe zeigt in den Spalten 'Validy' und 'Trust' die Werte graphisch an. |
---|---|
PGP 5.x (Unix) | pgpk -c überprüft alle Unterschriften und zeigt die Werte für jeden Schlüssel. |
PGP 2.x.x | pgp -km zeigt die Werte an, pgp -kc überprüft voher noch alle Unterschriften. |