PGP Global Directoryのまずい点

PGP Global DirectoryはPGPを開発・販売するPGP Corporationにより運営されている公開鍵サーバーですが、この実装はPGPっぽくない、というか、まずいと思うのですが。

なぜまずいか? それは、この公開鍵サーバーは破棄された鍵を流通する機構を持っていないからです。

破棄された公開鍵をアップロードしようとすると以下のようなメッセージのエラーが表示されるようになっています。

鍵が破棄されています

アップロードした鍵は破棄されています。

なぜ、これがまずいのか。

それはまずは破棄の意味について説明する必要があります。

そもそも、OpenPGPの機構においては、公開鍵があって、それに署名がついていく形になっています。つまり、他の人は公開鍵に署名することにより、その信用を証明することになり、また、その他の鍵の設定の変更も自己証明として、署名していくことになります。例えば、鍵の有効期限を変更した場合は、自己署名として、その変更を鍵に書き込んでいくわけです。(例えば微妙ですが、これは手形や小切手に順番に裏書きしていく状況を想像してもらえれば分かると思います。)

公開鍵の破棄、というのは実はこの署名の一つであり、自分で破棄する場合は自己署名、指定者による破棄の場合は、その指定者の鍵により破棄の署名が書き込まれることになります。そもそもOpenPGPのほとんどの実装においては、この破棄された公開鍵というのは非常に厳密に扱われており、破棄した公開鍵で署名することも不可になり、また、それが流通すると、保持者のそれぞれの公開鍵のコピーから破棄の署名を取り除かない限り取り消すことはできません。(また通常の公開鍵サーバーに公開されたらこの破棄の署名は、取り消すことはまず不可能です。)

さて、話をPGP Global Directoryに戻します。

PGP Global Directoryにおいては、破棄された公開鍵を公開することができません。つまり公開されている公開鍵においても、破棄されると取り除かれてしまいます。これは、PGP Global Directoryが公開した鍵を取り除ける仕様になっていることに基づき、実装は、公開鍵のオーナーが、使用しなくなった鍵を公開鍵から取り除くことを期待した仕様になっています。(また、メールによる定期的な確認に応じないユーザーの公開鍵は自動的に取り除かれます。)

この取り除かれた時にその鍵が破棄されている場合に問題が生じます。

まず第一に、破棄された情報が記録されないために、何らかの形で破棄の情報が行き渡るまでは、その鍵は有効な鍵、として扱われます。例え、破棄された公開されたものを公開鍵サーバに照会しても「鍵が存在しない」ということが分かるだけです。つまり、破棄された理由が例え、公開鍵が漏洩してしまい、使用してはいけないものであっても、それが他の人に伝わらないのです。

また、公開鍵が署名されるタイミングによっては、破棄された公開鍵に署名がついてしまう問題も生じてしまいます。ほとんどの実装では、破棄された公開鍵はそれ以降の署名を無視するようになっていますから、運用上の問題がないにせよ、流れ的には結果的にどこかで、署名された公開鍵が、破棄された公開鍵と合わさり、破棄後の鍵に署名がついている奇妙な状態になってしまいます。ほとんどの場合は、本人確認の時にそれが破棄されているかは判断できるにせよ、署名までに時間が経過してしまう可能性も否めません。

ということで、PGP Global Directoryの破棄の情報が行き渡らない実装はそれが、唯一の公開鍵サーバーではない限りはまずいわけです。(唯一の公開鍵サーバーであれば、そこで公開されていない公開鍵は破棄されたという判断は不可能ではないかと思います。)