n番煎じだけど,自分用にまとめる。
情報を求めてこのページに辿り着いた人には,以下のリンクの方が圧倒的に参考になるので,そちらへどうぞ。
何故DNSなのか
鍵サーバーがアレだと聞いたので。
環境
- Gentoo Linux (gcc 11.2.1)
- GnuPG 2.3.4 (libgcrypt 1.9.4)
- Cloudflare DNSを権威として使用
方法1 : PGP CERTレコード
別名 : “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
DANEはDNS上でいろんな認証情報を取り扱う仕組み。 OpenPGP用の規格もあって,いろいろ使えて便利そうではあるが,Cloudflare DNSが未対応だった為断念。
(やっぱ権威は自分で管理したいなぁ……でも面倒だなぁ……)
使えなかった方法2 : PKA
色んなサイトで紹介されているが,GPGの最近のバージョンでは削除されている(代わりにDANEを使う)。
コメント : https://dev.gnupg.org/rG7f3ce66ec56a5aea6170b7eb1bda5626eb208c83
まとめ
DNSに載せるとお気持ちレベルで信頼性が増す。ような気がする。