Im Artikel "PGP-Schlüssel einfach und sicher verteilen" habe ich beschrieben wie OPENPGPKEY DNS-Records mit dem Tool hash-slinger erstellt werden können. Bei einigen Unix/Linux Systemen ist "hash-slinger" aber nicht vorhanden.
PGP Schlüssel abfragen
OPENPGPKEY Records können auch per Unix Boardmitteln erstellt und abgefragt werden. Das Script "openpgp-fetch" benutzt das Programm "dig" aus dem BIND 9 Paket ("dns-utils" oder "bind9-utils", funktioniert auch mit älteren Versionen des "dig" Programms):
#!/bin/bash# fetches an OPENPGPKEY and pipes the key into gpg# based on a Twitter msg by Paul Wouters (https://twitter.com/letoams/status/560834359981539329)maildomain=$(echo$1 | cut -d "@" -f 2)localmail=$(echo$1 | cut -d "@" -f 1)openpgpkeydomain=$(echo -n $localmail | openssl dgst -sha224 | cut -d "=" -f 2)._openpgpkey.$maildomain
dig +short +vc type61 $openpgpkeydomain | sed "s/ [^ ]*//;s/\W//g" | xxd -r -p | gpg
Als Parameter wird die E-Mail Adresse des PGP-Schlüsselbesitzers angegeben:
# openpgp-fetch cs@sys4.de
OPENPGPKEY Record erstellen
Das zweite Script erstellt einen OPENPGPKEY Record für eine E-Mail Adresse und sendet den Record als dynamischen DNS-Update an den Master-DNS-Server. Bei korrektem SOA-Record in der DNS-Zone für die OPENPGPKEYs wird der Master-Server vom "nsupdate" Programm automatisch ermittelt. Dieses Script funktioniert auch mit älteren Versionen von "nsupdate", solange der PGP-Schluessel in der Hex-Kodierung kleiner als 4 Kilobyte ist. Bei grösseren Schlüssel muss das "nsupdate" aus BIND 9.10.x benutzt werden.
#!/bin/bashmaildomain=$(echo$1 | cut -d "@" -f 2)localmail=$(echo$1 | cut -d "@" -f 1)openpgpkeydomain=$(echo -n $localmail | openssl dgst -sha224 | cut -d "=" -f 2)._openpgpkey.$maildomainkeysize=$(gpg --export --export-options export-minimal $1 | wc -c)keydata=$(gpg --export --export-options export-minimal $1 | hexdump -e '"\t" /1 "%.2x"' -e '/65536 "\n"')# send the DNS update
nsupdate -k $2<< EOFupdate delete $openpgpkeydomain TYPE61update add $openpgpkeydomain 3600 IN TYPE61 \# $keysize $keydatasendquitEOF
Als erster Parameter wird die E-Mail Adresse des PGP-Schlüsselbesitzers angegeben, der zweite Parameter ist ein TSIG-Schlüssel, welcher das dynamische Update der DNS-Zone erlaubt:
# openpgp-create cs@sys4.de cs-tsig.key
Dank an ...
Dank an meine Kollegen (speziell Michael, Florian, Robert, Patrick, Wolfgang) für Feedback und Ideen zu den Scripten.