Wenn du PGP für deine E-Mail-Kommunikation nutzt, kennst du das Problem: Wie verteilt man den öffentlichen Schlüssel am besten, damit ihn andere finden und nutzen können, und wie verhindert man gefälschte Schlüssel? Neben klassischen Keyservern gibt es mit dem Web Key Directory (WKD) eine moderne, dezentrale Lösung, bei der der Schlüssel direkt über die eigene Domain bereitgestellt wird. In diesem Beitrag zeige ich dir Schritt für Schritt, wie du WKD für deine Domain einrichtest. Voraussetzung ist, dass du bereits OpenPGP einsetzt und deine Schlüssel besitzt.
Wie die Mail-Verschlüsselung und Web Key Directory funktioniert
Möchtest du eine verschlüsselte E-Mail an mich schicken, benötigst du selbst zunächst ein Schlüsselpaar. Dieses besteht aus einem privaten und einem öffentlichen Schlüssel. Der private Schlüssel bleibt stets bei dir und wird zum Entschlüsseln und Signieren von Nachrichten verwendet. Der öffentliche Schlüssel hingegen kann bedenkenlos vorbereitet werden. Andere können mit diesem lediglich Nachrichten für dich verschlüsseln, welche dann nur du mit deinem privaten Schlüssel entschlüsseln kannst.
Um an meinen öffentlichen Schlüssel zu kommen kannst du entweder öffentliche Schlüsselserver wie keys.openpgp.org verwenden, oder du nutzt meine Verlinkung im Kontakt-Bereich, wo ich den Schlüssel zum Download zur Verfügung stelle. Eine weitere Möglichkeit ist jetzt noch WKD. Mail-Clients wie Thunderbird beziehen öffentliche Schlüssel automatisch per WKD, somit musst du dich selbst erst gar nicht auf die Suche nach dem richtigen öffentlichen Schlüssel machen. Aufgebaut ist die URL für WKD wie folgt:
https://domain.tld/.well-known/openpgpkey/hu/dizb37aqa5h4skgu7jf1xjr4q71w4paq
Existiert in diesem Pfad der Schlüssel, so wird dieser in den GnuPG-Keyring mit aufgenommen und zum Verschlüsseln verwendet.
Web Key Directory einrichten
Zunächst musst du den Alias-Hash deiner E-Mail-Adresse auslesen. Dies gelingt mit PGP mit folgendem Befehl:
gpg --with-wkd-hash --fingerprint alias@domain.tld
Die Ausgabe sieht dann wie folgt aus. Den Hash-Wert habe ich rot markiert.
pub rsa4096 2023-01-19 [SC]
33BA BC84 E1DC 790C D6CC 7301 6B5D 3C1D 94A7 6AF8
uid [ unknown] Janis Mades <mail@itv4.de>
dizb37aqa5h4skgu7jf1xjr4q71w4paq@itv4.de
sub rsa4096 2023-01-19 [E]
Exportiere jetzt den öffentlichen Schlüssel im Binärformat mit dem Namen dieses Hash-Wertes:
gpg --no-armor --export alias@domain.tld > dizb37aqa5h4skgu7jf1xjr4q71w4paq
Nun musst du im Stammverzeichnis deines Webspace der betroffenen Domain bzw. Website folgende Verzeichnisstruktur für WKD erstellen:
.well-known/
└── openpgpkey
├── hu
│ └── dizb37aqa5h4skgu7jf1xjr4q71w4paq
├── .htaccess
└── policy
In den Ordner "openpgpkey" erstellst du folgende .htaccess Datei:
<IfModule mod_mime.c> ForceType application/octet-stream Header always set Access-Control-Allow-Origin "*" </IfModule>
Außerdem eine leere Datei namens "policy", die den WKD-Clients mitteilt, dass WKD grundsätzlich angeboten wird. In den Ordner "hu" kommt der eben exportiere öffentliche Schlüssel mit dem Namen des Hashs hinein.
Nur sofern die Subdomain openpgpkey.domain.tld auflösbar ist, musst du im DNS der Domain noch folgenden DNS-Record anlegen:
Typ: TXT Name: openpgpkey Wert: "v=openpgpkey1"
Testen
Mit folgendem Befehl kannst du nun überprüfen, ob du WKD korrekt eingerichtet hast und der öffentliche Schlüssel bei einer Suche gefunden wird:
gpg -v --auto-key-locate clear,wkd,nodefault --locate-key alias@domain.tld
Wenn der Schlüssel per WKD gefunden wird sieht die Ausgabe wie folgt aus:
gpg: using pgp trust model gpg: pub rsa4096/6B5D3C1D94A76AF8 2023-01-19 Janis Mades <mail@itv4.de> gpg: key 6B5D3C1D94A76AF8: "Janis Mades <mail@itv4.de>" not changed gpg: Total number processed: 1 gpg: unchanged: 1 gpg: auto-key-locate found fingerprint 33BABC84E1DC790CD6CC73016B5D3C1D94A76AF8 gpg: automatically retrieved 'mail@itv4.de' via WKD pub rsa4096 2023-01-19 [SC] 33BABC84E1DC790CD6CC73016B5D3C1D94A76AF8 uid [ unknown] Janis Mades <mail@itv4.de> sub rsa4096 2023-01-19 [E]
Alternativ kannst du auch folgendes Tool verwenden: https://wkd.chimbosonic.com
Bei Fragen oder Anregungen freue ich mich natürlich über eure Kommentare.

Über mich
Ich bin Janis (aka. EurenikZ), 26 Jahre alt und komme aus der Nähe von Frankfurt am Main. Ich habe eine abgeschlossene IHK-Ausbildung zum Fachinformatiker für Systemintegration und arbeite als Junior IT-Administrator in einem IT-Systemhaus. Neben meinem IT-Blog beschäftige ich mich viel mit diversen IT-Themen und meinen Webseiten sowie Telegram Bots und biete IT-Dienstleistungen an.