Schon länger kann man GPG-Schlüssel per CERT-Record im DNS hinterlegen — allerdings nur als Verweis auf einen Ort, an dem der Schlüssel liegt. Mit dem OPENPGPKEY Resource Record (RFC 7929) geht es einen Schritt weiter: Der komplette öffentliche Schlüssel steckt direkt im DNS-Record. Ist die Zone per DNSSEC gesichert, kann der Schlüssel nicht gefälscht werden — unabhängig von Keyservern und den dort möglicherweise kursierenden Fake-Keys.
Aufbau des Records
Der Hostname des OPENPGPKEY-Records wird aus der E-Mail-Adresse abgeleitet. Aus dem Localpart (alles vor dem @) wird ein SHA-256-Hash gebildet und die ersten 56 Zeichen davon als Subdomain unter _openpgpkey.domain verwendet. Für user@example.de:
echo -n "user" | sha256sum # Ergebnis: 04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb # Die ersten 56 Zeichen des Hashes werden zum Hostnamen:
04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b._openpgpkey.example.de. IN OPENPGPKEY <base64-encoded-key>
Der Wert des Records ist der GPG Public Key im Binärformat, Base64-kodiert.
Record erzeugen
Den Hash des Localparts berechnen:
echo -n "kernel-error" | sha256sum | cut -c1-56 # 4e1543e4c2a42754aa23025a940a30d0d3d106025c9e03be8e525ac4
Den Public Key exportieren und Base64-kodieren:
gpg --export --export-options export-minimal kernel-error@kernel-error.com \ | base64 -w 0
Beides zusammen ergibt den Zoneneintrag:
4e1543e4c2a42754aa23025a940a30d0d3d106025c9e03be8e525ac4._openpgpkey.kernel-error.com. IN OPENPGPKEY mQINBF...==
Zugegeben — der Record sprengt etwas die Zonenlesbarkeit. Ein GPG-Schlüssel hat schnell mehrere Kilobyte, das wird im Zonefile eine lange Zeile. BIND kommt damit problemlos klar.
Schlüssel automatisch aus dem DNS holen
GnuPG ab Version 2.1 kann OPENPGPKEY-Records direkt abfragen. Will man eine E-Mail verschlüsseln und hat den Schlüssel des Empfängers noch nicht, reicht:
gpg --auto-key-locate dane --locate-keys kernel-error@kernel-error.com
GnuPG sucht den OPENPGPKEY-Record im DNS, prüft die DNSSEC-Signatur und importiert den Schlüssel automatisch. Kein Keyserver nötig, kein manueller Import.
Testen
Ob der Record korrekt im DNS steht, lässt sich online prüfen: openpgpkey.info — E-Mail-Adresse eingeben, der Dienst fragt den OPENPGPKEY-Record ab und zeigt den gefundenen Schlüssel an.
OPENPGPKEY vs. CERT-Record
Der ältere CERT-Record enthält nur eine URL zum Schlüssel — der Client muss den Schlüssel dann von dort herunterladen. OPENPGPKEY packt den kompletten Schlüssel ins DNS. Vorteil: Ein einziger DNS-Lookup genügt, kein zusätzlicher HTTP-Request nötig. Nachteil: Große DNS-Antworten, die bei UDP-Transport fragmentiert werden können — aber mit passender EDNS-Konfiguration kein Problem.
Siehe auch: GPG-Schlüssel per PKA im DNS
Fragen? Einfach melden.
Schreibe einen Kommentar