zkat’s diary

技術ブログ

Web Key DirectoryでPGPの公開鍵を配布する

概要

次のインターネットドラフト(以下、I-D)に基づいて、PGPの公開鍵を配布してみたので、そのメモを残します。

datatracker.ietf.org

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を変換することで作る文字列となります。 変換の方式ですが、以下で行うことができます。

  1. 小文字にする(Joe.Doe → joe.doe)
  2. sha1でハッシュをとる(joe.doe → a83ee94be89c48a11ed25ab44cfdc848833c8b6e)
  3. ハッシュした値(バイナリ)を、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で作り、適当なファイルにエクスポートします。

thunderbird-pgp-key-export

エクスポートしたファイルの中には、-----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などでバイナリにします。 そのファイルをサーバーにアップロードすればよいです。

正しく公開できたか確認する

こちらのツールを利用することで、正しい形式の鍵が公開できているか確認することができました。

metacode.biz

メールソフトで利用する

このあたりに記載されているメールソフトを利用することで、WKDで公開鍵を取得し検証等に利用してくれるはずですが、確認はできていません。

https://wiki.gnupg.org/WKD#Implementations

ThunderbirdはEnigmailなどのアドオンを用いることなく内蔵の機能でpgpメールを送れるようにりましたが、WKDについてはまだアドオン使わないといけない感じでしょうかね。