Bei den klassischen Methoden zur Verschlüsselung wird nur ein Schlüssel benutzt. Der Sender verschlüsselt seine Nachricht mit diesem Schlüssel, und der Empfänger entschlüsselt die Nachricht mit eben demselben Schlüssel wieder. Das funktioniert nur, wenn der Empfänger vorher den Schlüssel bekommen hat. Das muß auf einem sicheren Kommunikationskanal geschehen, da ansonsten Unbefugte Einblick in den Schlüssels bekommen könnten. Somit bräuchte man einen sicheren Kommunikationskanal, aber mit dem Existieren eines solchen sicheren Kanals würde die Verschlüsselung auch wieder unnötig.
GnuPG setzt auf ein sogenanntes asymmetrisches Schlüsselverfahren. Ein Schlüssel besteht also aus zwei Teilen, zum Einen dem privaten (Private-Key) und zum Anderen dem öffentlichen Schlüssel (Public-Key). Idealerweise ist der private Schlüssel nicht mit dem öffentlichen rekonstruierbar. Auf den privaten Schlüssel kann und darf nur der Eigentümer Zugriff haben, der deshalb auch mit einer Passphrase geschützt wird.
Mit diesem Private Key werden dann die Daten entschlüsselt und gegebenfalls signiert. Der öffentliche Schlüssel dagegen dient ausschließlich zur Datenverschlüsselung und Überprüfung signierter Daten. Deshalb muss er jedem Kommunikationspartner zur Verfügung stehen, der diese beiden Aktionen durchführen will.
Entschlüsselt wird die Nachricht dann mit dem privaten Schlüssel des Empfängers.
Nach diesem Schema kann man demnach effektiv verschlüsseln, ohne über einen sicheren Kommunikationskanal zu verfügen.
Der Public-Key dient dem Verschliessen. Mit dem Private Key lässt sich das Schloß wieder öffnen und Vertrauen aussprechen.
Die Verbreitung des Public-Keys ist mit keinem Sicherheitsrisiko behaftet, da die Daten mit dem Public-Key weder signiert noch entschlüsselt werden können.
Mit digitalen Unterschriften soll die Authenzität einer Nachricht nachgewiesen werden. Sofern Nachrichten von offizieller Seite signiert würden, fiele es dem Täter wesentlich schwerer, mit gefälschten Nachrichten Unruhe oder Schaden anzurichten. Als Beispiel mag hier ein trojanische Pferd herhalten, das als Patch eines bekannten Webbrowsers verschickt wurde.
Die digitale Signatur wird mit Hilfe des Private Key aus dem Text erzeugt. Der Empfänger kann dann mit dem Public Key des Senders dessen Authenzität überprüfen. Dabei wird nicht nur der Absender authentifiziert, sondern auch, ob der Text unverändert angekommen ist.
Eine Schwachstelle der Public Key Algorithmen ist die Veröffentlichung der öffentlichen Schlüssel. Ein Benutzer könnte einen öffentlichen Schlüssel mit falscher UserID in Umlauf bringen. Wenn dann mit diesem Schlüssel Nachrichten kodiert werden, kann der Eindringling die Nachrichten dekodieren und lesen. Wenn er sie dann noch mit einem echten öffentlichen Schlüssel kodiert an den eigentlichen Empfänger weiterleitet, fällt dieser Angriff nicht einmal auf.
Die von PGP (und damit auch von GnuPG) gewählte Lösung besteht im Unterschreiben der Schlüssel. Ein Public Key kann von anderen Leuten unterschrieben werden. Mit dieser Unterschrift bestätigt der Signierende, daß der Schlüssel zu der in der UID angegebenen Person gehört. Und letztendlich kann der Benutzer festlegen, welchen Unterschriften er wie weit traut. Das Vertrauen ist dabei zwar reflexiv, aber nicht symmetrisch und transitiv. Ein Schlüssel gilt dann als vertrauenswürdig, wenn er von Leuten unterzeichnet wurde, denen man selber vertraut. Wenn man Schlüssel unterzeichnet, sollte man sich sicher sein, daß man die Identität desjenigen, dessen Schlüssel man unterschreibt, genau kennt. Eine Möglichkeit ist es, den Schlüssel persönlich übergeben zu bekommen, und eine andere, die den Fingerprint über zuverlässige Kanäle zu vergleichen.