Das Erhalten eines PGP-Schlüssels ist einfach, aber das Teilen mit anderen kann lästig sein.

Warum man Web Key Directory verwenden sollte

Das Teilen Ihres öffentlichen Schlüssels ist wichtig, um Ihre Kommunikation zu sichern, da es anderen ermöglicht, Nachrichten zu verschlüsseln, die nur Sie mit dem entsprechenden privaten Schlüssel entschlüsseln können, und um zu überprüfen, dass Nachrichten von Ihnen stammen. Dies ist besonders wichtig für E-Mails, da sie standardmäßig nicht verschlüsselt sind und von der Stelle, die die E-Mail bearbeitet, abgefangen und gelesen werden können. Dies erfordert jedoch, dass der Empfänger Ihren öffentlichen Schlüssel hat, der auf irgendeine Weise geteilt werden muss.

Traditionelle Methoden

Der traditionelle Weg, Ihren öffentlichen Schlüssel zu teilen, besteht darin, ihn auf einem Schlüsselserver hochzuladen, aber diese Methode hat ihre Nachteile. Jeder kann einen Schlüssel auf einem Schlüsselserver hochladen, und es gibt keine Möglichkeit zu überprüfen, ob der Schlüssel tatsächlich der Person gehört, zu der er gehört.

Eine andere Möglichkeit wäre, den Schlüssel von der Website der Person herunterzuladen, aber es wäre viel schwieriger, den Schlüssel überhaupt zu finden, da die Websites jedes Einzelnen unterschiedlich wären und immer noch manuelle Arbeit erfordern würden, um den Schlüssel zu erhalten.

Auch das Senden des Schlüssels per E-Mail ist nicht ideal, da die erste E-Mail unverschlüsselt wäre und der Schlüssel abgefangen und durch einen bösartigen ersetzt werden könnte und immer noch manuelle Arbeit erfordern würde, um den Schlüssel zu importieren.

Die Lösung

Hier kommt das Web Key Directory ins Spiel. WKD ist ein Protokoll, das die Entdeckung von OpenPGP-Schlüsseln ermöglicht, die auf den eigenen Servern der Menschen hochgeladen wurden, um die Notwendigkeit dedizierter Schlüsselserver zu umgehen und eine größere Kontrolle über die Schlüssel zu ermöglichen. Wenn Sie HTTPs verwenden, um den Schlüssel zu erhalten, können Sie etwas sicherer sein, dass der für die E-Mail-Adresse verwendete Schlüssel vom Besitzer der Domain verteilt wurde, der möglicherweise dieselbe Person ist.

WKD ermöglicht es E-Mail-Clients wie Thunderbird, den öffentlichen Schlüssel des Empfängers automatisch zu entdecken und ihn direkt im ersten Gespräch zu verwenden.

Einrichten des Web Key Directory

WKD hat zwei Möglichkeiten es Einzurichten: das Direkt-Setup und das Erweiterte-Setup. Trotz ihren Namen erfordern beide ungefähr die gleichen Schritte. Das Direkt-Setup erfordert keine zusätzlichen DNS-Einträge, während das Erweiterte-Setup die Erstellung eines Subdomains mit dem festen Namen openpgpkey erfordert, die zuerst getestet wird, bevor sie auf das Direkt-Setup zurückfällt.

Anforderungen

  1. Eine Domain:

    Die Domain ist erforderlich, um den öffentlichen Schlüssel zu hosten, da Sie sonst WKD nicht verwenden könnten. Für das Basis-Setup müssen Sie nur in der Lage sein, Dateien im .well-known-Verzeichnis Ihrer Domain zu platzieren.

    Für das erweiterte Setup müssen Sie in der Lage sein, eine Subdomain namens openpgpkey zu erstellen und Dateien im .well-known-Verzeichnis dieser Subdomain zu platzieren.

  2. Ein öffentlicher Schlüssel, der zur E-Mail-Adresse auf der Domain passt

  3. Ein Webserver:

    Der Webserver ist erforderlich, um den öffentlichen Schlüssel zu hosten. Wenn Sie kein Webhosting haben oder den Webserver nicht steuern können, können Sie Openpgp.org’s WKD-as-a-service verwenden. Dieser Service ermöglicht es Ihnen, Ihren öffentlichen Schlüssel auf ihren Servern zu hosten, indem Sie das erweiterte Setup verwenden. Dieser Ansatz hat den Nachteil, dass Sie keine volle Kontrolle über den Schlüssel haben und er alle verfügbaren Schlüssel für diese Identität enthält.

Den Hash erhalten

Der Basismodus erwartet den Schlüssel an diesem Ort: https://{domain}/.well-known/openpgpkey/hu/{hash}?l={email-name} wobei {domain} die Domain der E-Mail-Adresse, {hash} der WKD-Hash der E-Mail-Adresse und {email-name} der Namensbestandteil der E-Mail-Adresse vor dem @ unter Verwendung der richtigen Prozentescapierung ist.

Der erweiterte Modus ist ähnlich, verwendet aber die openpgpkey-Subdomain und enthält die Domain in Kleinbuchstaben im Pfad, wie folgt: https://openpgpkey.{domain}/.well-known/openpgpkey/{domain}/hu/{hash}?l={email-name}

Der Hash wird berechnet, indem die E-Mail-Adresse in Kleinbuchstaben umgewandelt und mit dem SHA-1-Algorithmus gehasht wird. Der resultierende 160-Bit-Hash wird mit der Z-Base-32-Methode codiert, um eine 32-Oktett-Zeichenfolge zu erstellen. Diese Zeichenfolge wird dann als Hash in der URL verwendet. Sie müssen dies jedoch nicht von Hand tun, da das gpg-Befehlszeilentool dies für Sie tun kann.

1
2
3
4
5
# Ein spezifischer Schlüssel:
gpg --with-wkd-hash --fingerprint max@example.com

# Alle gespeicherten Schlüssel:
gpg --list-keys --with-wkd-hash

Das Ergebnis wird so aussehen:

1
2
3
4
5
pub   ed25519 2024-03-17 [SC] [expires: 2026-03-17]
      7D20 74D0 A684 D702 16B3  0E6C 4F5D BF89 21E2 04A9
uid           [ultimate] Max Mustermann <max@example.com>
              yhdyrs3mzusb7sgsjytxj5gp1aaw1qgo@example.com
sub   cv25519 2024-03-17 [E] [expires: 2026-03-17]

Der Hash befindet sich vor dem @ in der E-Mail-Adresse, in diesem Fall yhdyrs3mzusb7sgsjytxj5gp1aaw1qgo.

Jetzt, da Sie den Hash haben, müssen Sie eine binäre ungerüstete Version des öffentlichen Schlüssels an den Speicherort des Hash speichern, was Sie mit dem folgenden Befehl tun können:

1
gpg --no-armor --export max@example.com

Seien Sie vorsichtig bei Windows, da es den Umleitungsoperator bei eigenen Versuchen > nicht korrekt funktioniert hatte und die binären Daten durcheinander bringt. Verwenden Sie Git Bash oder WSL, um dies zu verhindern.

DNS

Wenn Sie das erweiterte Setup verwenden, müssen Sie einen Subdomain namens openpgpkey erstellen und den Webserver so konfigurieren, dass er die Schlüssel von dort aus bedient.

Wenn Sie das Direkt-Setup verwenden, müssen Sie sicherstellen, dass die openpgpkey-Subdomain nicht antwortet. Wenn Sie beispielsweise Wildcard-DNS-Einträge verwenden, stellen Sie sicher, dass die openpgpkey-Subdomain nicht von den Wildcard-DNS-Einträgen beeinflusst wird, indem Sie einen leeren TXT-RR für diese Subdomain einfügen, der die Wildcard-DNS-Einträge daran hindert, den openpgp-DNS-Eintrag zu beeinflussen, da das erweiterte Setup zuerst versucht wird, bevor es auf das Direkt-Setup zurückfällt.

Hochladen des Schlüssels

Der Schlüssel muss an den Webserver an den für das gewählte Setup geeigneten Hash-Ort hochgeladen werden. Er sollte als application/octet-stream serviert und von überall aus mit dem Access-Control-Allow-Origin: *-Header zugänglich sein.

Beispielkonfigurationen für nginx könnten so aussehen:

1
2
3
4
location ^~ /.well-known/openpgpkey {
   default_type application/octet-stream;
   add_header Access-Control-Allow-Origin * always;
}

oder für Clodflare-Seiten, indem Sie eine _headers-Datei im Ausgabeverzeichnis erstellen:

1
2
3
/.well-known/openpgpkey/*
   Content-Type: application/octet-stream
   Access-Control-Allow-Origin: *

Hinzufügen der Policy-Datei

Die Spezifikation erfordert, dass eine Policy-Flags-Datei bedient wird. Diese Datei ist auch dann erforderlich, wenn das Web Key Directory Update Protocol nicht unterstützt wird, was ein Protokoll ist, das die automatische Aktualisierung des öffentlichen Schlüssels ermöglicht. Das wird jedoch nicht benötigt, da die Schlüssel statisch gehostet wird.

Die Policy-Flags-Datei kann einfach eine leere Datei sein, muss aber für das Direkt- und das Erweiterte-Setup unter /.well-known/openpgpkey/policy erreichbar sein.

Testen des Setups

Sie können Ihr Setup mit dem folgenden GnuPG-Befehl testen, der versucht, den Schlüssel vom Server abzurufen:

1
gpg --auto-key-locate clear,nodefault,wkd --locate-keys max@example.com
1
2
3
4
5
6
gpg: key 4F5DBF8921E204A9: public key "max@example.com" imported
gpg: Total number processed: 1
gpg:               imported: 1
pub   ed25519 2024-03-17 [SC] [expires: 2026-03-17]
      7D2074D0A684D70216B30E6C4F5DBF8921E204A9
uid           max@example.com

Für den täglichen Gebrauch können Sie einfach das --locate-keys in gpg verwenden, um den Schlüssel automatisch vom Server abzurufen, oder in Ihrem E-Mail-Client nach der entsprechenden Option suchen.

Fazit

Die Einrichtung des Web Key Directory ist eine großartige Möglichkeit, Ihren öffentlichen Schlüssel mit anderen zu teilen. Es ermöglicht die automatische Entdeckung des öffentlichen Schlüssels, zum Beispiel in E-Mail-Clients, und ermöglicht eine größere Kontrolle über den Schlüssel, da er auf Ihrem eigenen Server gehostet und bedient wird und die Kommunikation ohne manuellen Schlüsselaustausch ermöglicht. Es ermöglicht Ihnen auch, alte oder widerrufene Schlüssel vom Server zu entfernen, was mit traditionellen Schlüsselservern nicht möglich ist, die den Schlüssel für immer behalten und den Schlüsselserver mit alten Schlüsseln überfüllen.

Quellen: