PGP-Key veröffentlichen

Das Veröffentlichen der öffentlichen Schlüssel ist erforderlich, um Kommunikationspartnern das Zusenden verschlüsselter Daten und die Prüfung von Signaturen zu ermöglichen.

Allgemeines

Für das Veröffentlichen von Schlüsseln gibt es inzwischen verschiedene Möglichkeiten:

  • Keyserver
  • Web Key Directory (WKD) / Web Key Service (WKS)
  • OPENPGPKEY (TYPE61) DNS-Record

Keyserver als die ursprüngliche Methode zum Veröffentlichen von PGP-Schlüsseln haben vor allem den Nachteil, daß alles, was dort veröffentlicht wird, auch für immer und ewig dort bleibt. Es existiert keine Möglichkeit, einen dort veröffentlichten Schlüssel wieder zu löschen. Man kann diesen lediglich als ungültig markieren (ohne Widerrufszertifikat nicht mal das). Technisch ist das zwar korrekt und so erforderlich, aus Datenschutzgründen aber nicht immer gewünscht.

WKD und WKS sind Versuche, den aktuellen Zustand zu verbessern. Sie sind Grundlage der vom BSI und beteiligten Firmen ins Leben gerufenen Initiative "EasyGPG". Ziel ist, durch Erhöhung der Nutzerfreundlichkeit jedem den Versand verschlüsselter Mails zu ermöglichen und somit der Verbreitung sicherer Mail zu beschleunigen.

OPENPGPKEY veröffentlicht den öffentlichen Schlüssel direkt im DNS. Das benötigt aber für jede Schlüsselveröffentlichung Zugriff auf den DNS-Server, was technisch und organisatorisch schwierig ist.

Sowohl WKD/WKS als auch OPENPGPKEY sind noch nicht standardisiert.

Keyserver

Schlüssel hochladen

Um per Default den Pool mit sicheren Keyservern anzusprechen, sollte in ~/.gnupg/dirmngr.conf folgende Zeile enthalten sein:

keyserver hkps://hkps.pool.sks-keyservers.net

Das Hochladen erfolgt dann mittels:

$ gpg --send-keys "2F2D 806B 6B58 02FD A5E7  D930 2F2C 4B05 C56A 12D3"
gpg: sende Schlüssel 2F2C4B05C56A12D3 auf hkps://hkps.pool.sks-keyservers.net

Im Beispiel wurde der Schlüssel mit dem Fingerprint "2F2D 806B 6B58 02FD A5E7 D930 2F2C 4B05 C56A 12D3" (Id 0x2F2C4B05C56A12D3) gesendet.

Test

Zum Test kann nach dem Schlüssel gesucht werden:

$ gpg --search "2F2D 806B 6B58 02FD A5E7  D930 2F2C 4B05 C56A 12D3"
gpg: data source: https://51.38.91.189:443
(1)     Max Mustermann (born 1976-02-01 in Musterstadt, Germany)
        Max Mustermann (Unitas Network) <mmustermann@unitas-network.de>
        Max Mustermann (privat) <maxm@mustermann-privat.de>
          2048 bit RSA key 2F2C4B05C56A12D3, erzeugt: 2019-04-29
Keys 1-1 of 1 for "2F2D 806B 6B58 02FD A5E7  D930 2F2C 4B05 C56A 12D3".  Eingabe von Nummern, Nächste (N) oder Abbrechen (Q) > q

Der Schlüssel mit dem Fingerprint "2F2D 806B 6B58 02FD A5E7 D930 2F2C 4B05 C56A 12D3" ist also vorhanden. Natürlich kann man auch nach anderen Parametern suchen (Name, Mailadresse, Id).

Web Key Directory (WKD)

Vorbereitungen

Für Domains mit wenigen Mailnutzern genügt das Anlegen des Directories, WKS muß nicht umgesetzt werden. Es handelt sich noch um einen vorläufigen Standard, zum Zeitpunkt der Erstellung dieses Dokuments war Draft Version 07 aktuell. Damit entfiel u.a. die Nutzung von DNS SRV Records. Da die meiste Client-Software diese Änderung noch nicht umgesetzt hat legen wir trotzdem einen SRV-Record an:

_openpgpkey._tcp.unitas-network.de.  IN  SRV 0 0 443 openpgpkey.unitas-network.de.

Der SRV-Record zeigt auf einen virtuellen Webserver mit dem Hostnamen openpgpkey.unitas-network.de, welcher bereits der Vorgabe für die advanced Variante aus Draft 07 entspricht. Dort werden Verzeichnisse für folgende URLs angelegt:

  • /.well-known/openpgpkey/hu/
  • /.well-known/openpgpkey/unitas-network.de/hu

Durch Ablage der Schlüssel in beiden Verzeichnissen sollte das sowohl mit Draft 07 als auch mit älteren funktionieren.

Veröffentlichen

Zum Erzeugen des Namens der Datei, welche auf dem Webserver abgelegt wird, wird aus der Mailadresse ein Hashwert erzeugt. Diesen kann man wie folgt anzeigen:

$ gpg --list-keys --with-wkd "2F2D 806B 6B58 02FD A5E7  D930 2F2C 4B05 C56A 12D3"
pub   rsa2048 2019-04-29 [C]
      2F2D 806B 6B58 02FD A5E7  D930 2F2C 4B05 C56A 12D3
uid        [ ultimativ ] Max Mustermann (born 1976-02-01 in Musterstadt, Germany)
uid        [ ultimativ ] Max Mustermann (Unitas Network) <mmustermann@unitas-network.de>
           zsfhcfrxs16wwifxewq44mstg3eq46zq@unitas-network.de
uid        [ ultimativ ] Max Mustermann (privat) <maxm@mustermann-privat.de>
           nkuq5ea3fhopusbc5uijqqymwt1xcggt@mustermann-privat.de
sub   rsa2048 2019-04-29 [S] [verfällt: 2021-04-28]
sub   rsa2048 2019-04-29 [E] [verfällt: 2021-04-28]
sub   rsa2048 2019-04-29 [A] [verfällt: 2021-04-28]

Um den Schlüssel zur Veröffentlichung als Firmenmailadresse zu exportieren, nimmt man die zeile unter der Mailadresse (zsfhcfrxs16wwifxewq44mstg3eq46zq@unitas-network.de). Vor dem "@" befindet sich der gewünschte Hashwert. Der wird als Dateiname für den Export verwendet:

$ gpg --export "2F2D 806B 6B58 02FD A5E7  D930 2F2C 4B05 C56A 12D3" > zsfhcfrxs16wwifxewq44mstg3eq46zq

Die Datei mit dem Namen "zsfhcfrxs16wwifxewq44mstg3eq46zq" wird dann auf dem Webserver in die beiden o.g. Verzeichnisse abgelegt.

Test

Zum Test kann folgender Befehl verwendet werden:

$ gpg --auto-key-locate clear,wkd,nodefault --locate-key mmustermann@unitas-network.de
gpg: Schlüssel 2F2C4B05C56A12D3: Öffentlicher Schlüssel "Max Mustermann (Unitas Network) " importiert
gpg: Anzahl insgesamt bearbeiteter Schlüssel: 1
gpg:                              importiert: 1
pub   rsa2048 2019-04-29 [C]
      2F2D 806B 6B58 02FD A5E7  D930 2F2C 4B05 C56A 12D3
uid        [ unbekannt ] Max Mustermann (Unitas Network) <mmustermann@unitas-network.de6gt;
sub   rsa2048 2019-04-29 [S] [verfällt: 2021-04-28]
sub   rsa2048 2019-04-29 [E] [verfällt: 2021-04-28]
sub   rsa2048 2019-04-29 [A] [verfällt: 2021-04-28]

OPENPGPKEY

Da dieses Verfahren relativ kompliziert umzusetzen und wenig verbreitet ist, verzichten wir derzeit auf die direkte Veröffentlichung von Schlüsseln im DNS.