PGPとDNS

n番煎じだけど,自分用にまとめる.

情報を求めてこのページに辿り着いた人には,以下のリンクの方が圧倒的に参考になるので,そちらへどうぞ.

何故DNSなのか

鍵サーバーがアレだと聞いたので.

環境

  • Gentoo Linux (gcc 11.2.1)
  • GnuPG 2.3.4 (libgcrypt 1.9.4)
  • Cloudflare DNSを権威として使用

方法1 : PGP CERTレコード

RFC 4398

別名 : “big” CERTレコード

  • メリット : DNSで完結する
  • デメリット : 殆どの場合デフォルトで有効になっていない(使う際に追加のコマンドライン引数が必要)

メールアドレスをuser.domain.tld.の形式に変形したドメイン(例: piyo(at)example.netの場合piyo.example.net.)のCERT 3 0 0に,base64エンコードした公開鍵の本体を貼り付ける. 公開鍵の本体はgpg --export --no-armor piyo(at)example.net | base64 -w0で得られる.

Cloudflare DNSの場合は最初からCERTレコードが登録できるが,そうでないサーバー/サービスの場合はmake-dns-certを使うなどすると良さそう.

% dig +short me.dyama.net. cert
PGP 0 0 mDMEYWqh9hYJKwYBBAHaRw8BAQdAftm3F9L5BEDmEWFwbC7yXq2qXO7Q xYaDydrZAg0rlNG0FFlhbWFEIDxtZUBkeWFtYS5uZXQ+iJQEExYKADwW IQQOPhCYsxKaN6/mpc9ZbmpBtVF3NgUCYWqh9gIbAQULCQgHAgMiAgEG FQoJCAsCBBYCAwECHgcCF4AACgkQWW5qQbVRdzZwBwD/YLj2tz1RvQxm hB0wQQFbHB1DWK2kyu0bjXw4lyR5UVoBAPbulFzvYMZ5e2IG9J9Y6+78 adeBxFw3j/eNR0x3P5cMuDMEYWqiCxYJKwYBBAHaRw8BAQdAFgEPg9Rk UsWI4wfANDHz08Nd7pAjuyu20PFtepEo202I9QQYFgoAJhYhBA4+EJiz Epo3r+alz1luakG1UXc2BQJhaqILAhsCBQkDwmcAAIEJEFluakG1UXc2 diAEGRYKAB0WIQSrEGCxqVN9fOEkQAdP0HEW+5HykgUCYWqiCwAKCRBP 0HEW+5Hykgb8AP4q6/Sc+5dZuZFan7V6e5cla2t7RwkTHG6ZDCl97MJQ GwD+K3yZFab1gkKXEjxYGiZ8NKKFIrkMNXfAbwCCup1f8g91fQD/ZhB8 KfHVQLbgkCNWBDPn0ssu61QlHAfGbV6cCaddScUBAKdWyZu3v/8lFHZE SD7SrbX/7Yazazd3bg0GpLIoiz8AuDgEYWqiHxIKKwYBBAGXVQEFAQEH QKo56Vn1ndqdfuwakecwXetK11iWZ2dae6HlYkXmlMMPAwEIB4h+BBgW CgAmFiEEDj4QmLMSmjev5qXPWW5qQbVRdzYFAmFqoh8CGwwFCQPCZwAA CgkQWW5qQbVRdzbPoAD+MSY/emf41PzAVZd5L8GShMXYy1DUBC4/bSjP fEhezrEA/2c4iREREFzr4BD+4LPv/2Gq2tHYtFSIjG3LmcAfCsMIuDME YWqiLRYJKwYBBAHaRw8BAQdA9ec2Szu13x4h4R0E6Nz0n6ed/W3iJ/VM WuQykwgHD7KIfgQYFgoAJhYhBA4+EJizEpo3r+alz1luakG1UXc2BQJh aqItAhsgBQkB4TOAAAoJEFluakG1UXc2zWoA/iQVgxPCp/MDv/NiD4Oj HIEpJYc0XG2B9JzKNUxPdfDnAP451UT9v2EDj1V+GXzxr4dV22ZIgDzi Bh5gvIlwJu3kDw==
% gpg --locate-external-keys --auto-key-locate clear,cert me(at)dyama.net

ちなみに,同じCERTを使う方法にIPGP(“little” CERTレコード)があるが,PGP形式とIPGP形式は同時には使えない. IPGPはPKAと同じで,鍵の指紋と場所を示すが,鍵そのものは含まない.

方法2 : Web Key Directory (direct)

DNSとは直接は関係しないが,紹介だけ.

Draft : OpenPGP Web Key Directory

  • メリット : 管理・運用が楽ちん

まず,WKDハッシュなるものを計算する必要がある.gpg -k --with-wkd piyo(at)example.netでフルネームの下に表示されるものを使う. (32ケタの英数字で,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(at)example.net(at)example.netを除いた部分)

後は,Webサーバーの/.well-known/openpgpkey/policyに空ファイルを,/.well-known/openpgpkey/hu/xxxx...xxxx(ファイル名はWKDハッシュ)にバイナリ形式の公開鍵を置くだけ.

% gpg --locate-external-keys --auto-key-locate clear,wkd me(at)dyama.net

WKDには他にもadvancedという方法があるらしい.

使えなかった方法1 : DANE

RFC 7929

DANEはDNS上でいろんな認証情報を取り扱う仕組み. OpenPGP用の規格もあって,いろいろ使えて便利そうではあるが,Cloudflare DNSが未対応だった為断念.

(やっぱ権威は自分で管理したいなぁ……でも面倒だなぁ……)

使えなかった方法2 : PKA

色んなサイトで紹介されているが,GPGの最近のバージョンでは削除されている(代わりにDANEを使う).

コメント : https://dev.gnupg.org/rG7f3ce66ec56a5aea6170b7eb1bda5626eb208c83

まとめ

DNSに載せるとお気持ちレベルで信頼性が増す(ような気がする).