DANE OPENPGPKEY, c'est utiliser le DNS, signé avec DNSSEC, pour récupérer une clé publique OpenPGP (pas pour en prouver l'authenticité, attention !). Pour les détails, voir l'article de tonton Bortz.
J'avais déjà tenté d'utiliser DANE OPENPGPKEY quand j'en avais appris l'existence en 2016, mais je n'étais pas parvenu à forger l'enregistrement DNS qui le matérialise. Mais, cette fois-ci, je suis outillé.
Pour créer un tel enregistrement, on va utiliser la suite logicielle hash-slinger
(qui permet, également et entre autres, la manipulation des enregistrements DNS SSHFP et des enregistrements DNS DANE TLSA). Installons-le (il n'est pas dans les dépôts Debian GNU/Linux Buster à cause d'une dépendance à python33-m2crypto non-satisfaite) :
$ sudo apt-get install swig
$ sudo pip3 install m2crypto
$ git clone https://github.com/letoams/hash-slinger
$ cd hash-slinger && sudo make install
La clé publique que l'on veut publier doit être présente dans le trousseau GnuPG courant. Voir mon tutoriel complet pour créer / gérer sa paire de clés OpenPGP.
Créer l'enregistrement : openpgpkey --create <adresse_emails_de_l'identité_de_la_clé_OpenPGP>
.
Publier l'enregistrement dans la zone DNS concernée.
On vérifie que l'enregistrement est correct :
$ openpgpkey --verify <adresse_emails>
All OPENPGPKEY records matched with content from the local keyring
Pour tester la récupération, soit on tente depuis une autre machine (virtuelle), soit on utilise un compte utilisateur différent sur la même machine ou même un trousseau différent sur le même compte utilisateur. J'ai choisi cette troisième option.
$ mkdir /tmp/testOPK
$ export GNUPGHOME=/tmp/testOPK
$ gpg -k # doit rien retourner puisque trousseau vide
$ gpg --auto-key-locate dane --locate-keys <adresse_emails>
Si la clé OpenPGP a plusieurs identités, seule l'identité qui correspond à l'adresse emails a été publiée et est donc récupérable. Les autres identités doivent être publiées chacune dans leur zone respective et être récupérée séparément.
Les signatures de la clé ne sont pas publiées et ne sont pas récupérables. De toute façon, suite à l'attaque de 2019 des serveurs de clés OpenPGP par surcharge de signatures, les développeurs de GnuPG ont décidé de ne plus récupérer les signatures tierces sur les serveurs de clés. Donc, DANE ou serveur de clés = même résultat.
Bien évidemment, DANE OPENPGPKEY est un moyen supplémentaire de récupérer une clé OpenPGP : serveurs de clés, téléchargement web, pièce jointe d'un email, etc. DANE OPENPGPKEY ne permet pas de garantir qu'il s'agit de la clé du correspondant avec lequel tu veux échanger. En effet, DNSSEC garanti que l'enregistrement DNS n'a pas été altéré durant son transport entre le serveur qui fait autorité sur le domaine du correspondant et le serveur DNS récursif qui effectue la validation. Rien dit qu'un attaquant n'a pas inséré sa clé OpenPGP dans l'enregistrement OPENPGPKEY du correspondant. Rien dit qu'un attaquant actif entre ton serveur DNS récursif et toi n'a pas modifié l'enregistrement DNS. Bref, comme d'habitude, il faut vérifier l'authenticité de la clé récupérée en contactant le correspondant sur un autre canal (de visu, téléphone, etc.) avant de signer la clé et de lui accorder une quelconque confiance.