OPENPGPKEY mit Unix Bordmitteln

Abstract

OPENPGPKEY Records können auch mit Unix-Boardmitteln erstellt und abgefragt werden. Zwei Scripte zeigen wie.

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 mit 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):

#! env bash
# fetches an OPENPGPKEY and pipes the key into gpg
# based on a Twitter msg by Paul Wouters (https://twitter.com/letoams/status/560834359981539329)
# updated for draft-ietf-dane-openpgpkey-03
# 2015-05-14

maildomain=$(echo $1 | cut -d "@" -f 2)
localmail=$(echo $1 | cut -d "@" -f 1)
openpgpkeydomain=$(echo -n $localmail | openssl dgst -sha256 | cut -d "=" -f 2 | cut -c 1-57)._openpgpkey.$maildomain
echo "fetching ${openpgpkeydomain} ..."
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-Schlüssel in der Hex-Kodierung kleiner als 4 Kilobyte ist. Bei größeren Schlüssels muss das nsupdate aus BIND 9.10.x benutzt werden.

#!/bin/bash
# updated for draft-ietf-dane-openpgpkey-03
# 2015-05-14

maildomain=$(echo $1 | cut -d "@" -f 2)
localmail=$(echo $1 | cut -d "@" -f 1)

openpgpkeydomain=$(echo -n $localmail | openssl dgst -sha256 | cut -d "=" -f 2 | cut -c 1-57)._openpgpkey.$maildomain
keysize=$(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 << EOF
update delete $openpgpkeydomain TYPE61
update add $openpgpkeydomain 3600 IN TYPE61 \# $keysize $keydata
send
quit
EOF

Als erster Parameter wird die E-Mail-Adresse des PGP-Schlüsselbesitzers angegeben, der zweite Parameter ist ein TSIG-Schlüssel, der 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 Skripten.

Carsten Strotmann, 08. March 2015