PGPとDNS
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に載せるとお気持ちレベルで信頼性が増す(ような気がする).