概要
次のインターネットドラフト(以下、I-D)に基づいて、PGPの公開鍵を配布してみたので、そのメモを残します。
WKDとは
Web Key Directoryの略で、PGPの公開鍵をHTTPSで公開する仕組みです。 PGPの公開鍵を公開する方法はすでに他のものが様々ありますが、それらがもつ課題の解決を目指しているようです。I-Dには、以下のようなことが記載されていました。
既存の方法 | 課題 |
---|---|
DNSで配布する方法 | 必ずしもメールプロバイダがDNSの管理をしているわけではない |
始めのメールに公開鍵を添付する方法 | 始めのメールが改ざんされる可能性がある |
鍵配布サーバーを用いる方法 | メールアドレスと鍵の対応性が正しく管理できない場合がある |
公開用のURL
公開用のURLは、directとadvancedと呼ばれる2つの形式があるようですが、いずれかのURLでバイナリ形式の公開鍵を公開すればよいです。I-Dに倣い、メールアドレスがJoe.Doe@example.org
である場合のURLの例を以下に記載します。
direct method
https://example.org/.well-known/openpgpkey/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe
無作為に見える文字列、iy9q119eutrkn8s1mk4r39qejnbu3n5q
は、メールアドレスのローカルパートであるJoe.Doe
を変換することで作る文字列となります。
変換の方式ですが、以下で行うことができます。
- 小文字にする(Joe.Doe → joe.doe)
- sha1でハッシュをとる(joe.doe → a83ee94be89c48a11ed25ab44cfdc848833c8b6e)
- ハッシュした値(バイナリ)を、Z-Base32でエンコードする(a83ee94be89c48a11ed25ab44cfdc848833c8b6e → iy9q119eutrkn8s1mk4r39qejnbu3n5q)
advanced method
direct methodとほとんど一緒ですが、openpgpkey
というサブドメインをつくる必要が生じます。
https://openpgpkey.example.org/.well-known/openpgpkey/example.org/hu/iy9q119eutrkn8s1mk4r39qejnbu3n5q?l=Joe.Doe
公開の仕方
I-Dでは、上記のURLに公開鍵を配置するまでの仕組みが、Web Key Directory Update Protocolとして記載されています。
draft-koch-openpgp-webkey-service-14
ただ、お手軽に試すには少々時間が掛かりそうな内容ですので、手動で公開することにしました。 まずは、公開するためのPGPの鍵ペアをThunderbirdで作り、適当なファイルにエクスポートします。
エクスポートしたファイルの中には、-----BEGIN PGP PUBLIC KEY BLOCK-----
と-----END PGP PUBLIC KEY BLOCK-----
で囲まれたデータが記載されています。
このデータの形式はASCII Armoredであり、以下で述べられている通りバイナリに変換する必要があります。
The HTTP GET method MUST return the binary representation of the OpenPGP key for the given mail address.
フッターとヘッダーを取り除き、そのまま変換したくなりますが、データの末尾にはCRCを示す情報が付加されているのでそれを削除してからbase64 -d
などでバイナリにします。
そのファイルをサーバーにアップロードすればよいです。
正しく公開できたか確認する
こちらのツールを利用することで、正しい形式の鍵が公開できているか確認することができました。
メールソフトで利用する
このあたりに記載されているメールソフトを利用することで、WKDで公開鍵を取得し検証等に利用してくれるはずですが、確認はできていません。
https://wiki.gnupg.org/WKD#Implementations
ThunderbirdはEnigmailなどのアドオンを用いることなく内蔵の機能でpgpメールを送れるようにりましたが、WKDについてはまだアドオン使わないといけない感じでしょうかね。