What is not WoT? (In Japanese: WoT とはなんでないか)

OpenPGPでは通常、WoT (Web of Trust)というモデルを用いて、 鍵が有効(valid)かどうかが判断されます。

ここで解説を試みますので、具体的な例を見ながら考える機会としてください。

参考までですが、具体的な例で調べてみるまで、僕は、その名前に引きずられて、 まったく違うもの(相互の信頼によって作られる素晴らしい世界、 という感じ)をイメージしていました。

「X.509の認証局に代わるものがOpenPGPでは(みんなで作る)WoTである」というような言明の実際の意味は、僕が当初感じていたものとは違ったのです。技術的な意味では、OpenPGPでX.509の認証局に相当するものは 自分自身の主観 であり、主観にもとづき(わりと限定的に)WoTを利用することができる、に過ぎません。

WoTが使われていないところ

まず最初に、 OpenPGPの実装のGnuPGが、 もっとも多く用いられているであろう使われ方について、 みてみましょう。GnuPGでは、 --trust-model の指定(pgp, classic, direct, always, auto)ができ、 このうち、pgp と classic が WoT モデルにもとづきます。 WoTモデル以外の利用もできることに注意ください。

もっとも多く用いられる使われ方は、おそらく、ある鍵、 もしくはキーリングに入っている鍵のどれかで、電子署名を検証することでしょう。

たとえば、Debianなどのディストリビューションで、 ダウンロードされたパッケージは、経路で改竄がないように電子署名による確認が行われます。 また、Debianのアーカイブには、パッケージは、 Debian開発者の電子署名がなされていることが確認されて、はじめて、登録されます。

この、もっとも多く用いられる使われ方では、WoTは使われません。

具体的には、Debian の apt では、ユーザは、 (デフォルトの「アーカイブ鍵を信用する」という設定を使っていて) アーカイブ鍵による電子署名を検証するのです(apt-secure を参照ください)。 また、 アーカイブへのパッケージ登録の際は、debsig-verifyで、 Debian開発者の鍵が登録されたキーリングであるdebian-keyringを使って(WoTのモデルではなく)、 検証されます。

OpenPGPを使うには

次に、普通のOpenPGPの使い方をみてみましょう。

一般に、OpenPGPを使うには、まず、「(a) 自分の鍵を持っていることが必要」です。 そして、「(b) 相手の鍵を持っていて、それが有効である必要」があります。

(a)は、マニュアルやHOWTOをみて、手順どおりにコマンドを叩けばできるでしょう。

(b)はなんでしょうか。ただ単に鍵サーバからダウンロードすれば良いのでしょうか。

いいえ、違います。

鍵が有効(valid)である、すなわち、「確実に相手のものだと確認できている」必要があります。

相手が誰になるかは事前に分からないこともあります。このため、OpenPGPを使う人(使いたい人)は、 機会があれば、互いに(潜在的な)相手の公開鍵を確認し合い、準備をするわけです。

直接確認できれば一番いいのですが、それだけだと限りがあるし大変です。そのため、 間接的に鍵を確認できる仕組みがあります。 それが、WoT (Web of Trust)のモデルの、信用による確認、です。

WoTによる有効性の判断

ある公開鍵が有効だ、ということは、 (自分にとって)その鍵とUIDの結びつきがしっかり確認されている、ということです。

WoTでの有効性の判断には、以下の4つの判断基準が用いられます (これはclassicモデルの場合。pgpモデルの場合には、さらに署名のされ方も勘案される)。

  1. 確認し、確認したことを証明するために相手の公開鍵に署名をしたもの
  2. 自分が「十分に」信用する人(の複数人)が、(1)を行ったもの
  3. 自分が「ある程度」信用する人の複数人が、(1)を行ったもの
  4. 自分からあまり遠くではないもの

上記の判断基準は、 (1) OR { { (2) OR (3) } AND (4)} と、使われます。

(1)は自分で確認したものを信じるということです。 (2), (3)は間接的に確認する、ということです。(4)はその際の制限です。

GnuPGのデフォルトでは(2)の人数は 1 (--completes-needed で指定)、 (3)の人数は 3 (--marginals-needed で指定)、 (4)の限界は 5 (--max-cert-depth で指定)、となっています。

"Web of Trust" という名前は、「鍵とUIDの結びつきがしっかり確認されている」関係が、 網の目のようになっていることから来ています。

たとえば、GUM Debian 2013のKSPの例が、図1. です。相互に署名がある場合は、 矢印なしの線でつなぎ、片方だけの関係の場合は、矢印付の線でつないでいます。

WoT of GUM Debian 2013 KSP

図1. WoT of GUM Debian 2013 KSP

モデルの名前に "Trust" とついているので勘違いしやすいのですが、 この網の目自体が、 人物が信頼できるという意味での「信頼の網」という意味合いではありませんので、 注意ください。

あくまでも、ここで有効とされるのは、「鍵のIDとUIDの結びつき」だけです。 それで、「鍵のIDとUIDの結びつき」の確認の関係が網の目になっています。

WoTの使い方 (1) はじめの状態

では、どのようにWoTが使われるかを見て、理解を深めましょう。

(以前に)僕は、二つの鍵について、パスポートなどのIDで名前を確認し、 メールを送りあっていて、40AD1FA6 と 9C0C1404 を確認して、 これらの鍵に対してすでに署名をしています。

図2. が、このはじめの状態です。

はじめの状態

図2. はじめの状態

4CA7BABE が僕の鍵です。二重丸で、「究極の信用」があることを示しています。

はじめの状態は、(1)の判断基準だけの場合で、3つの鍵、

  • 40AD1FA6
  • 4CA7BABE
  • 9C0C1404

が有効となり、円に色がついています。 有効性の確認に使われた「鍵のIDとUIDの結びつき」の証明は実線になっています。

WoTの使い方 (2) 信用情報を加える

次に、9C0C1404の持ち主が十分に信用できるとして、設定した場合です。 この設定を行うには --edit-key で信用(trust)を設定します。:

$ gpg --edit-key 9C0C1404
[...]
gpg> trust
[...]

ここで "full" を設定します。

時に、 この信用情報は ~/.gnupg/trustdb.gpg に保存される、マシンローカルな情報です。 バックアップには --export-ownertrust, 戻すには --import-ownertrust を使います。

鍵サーバに登録される公開鍵の情報と異なり、信用情報は、個人が保持し管理する、 プライベートな情報です。大事なのは、これはあくまでも、

自分がその人(の鍵の確認を)を信用する

ということです。これは自分の主観で、自分が使う結果に、それは反映されます。

9C0C1404を信用した状態

図3. 9C0C1404を信用した状態

有効な鍵が三つ増えて、全部で6つが有効になりました。

WoTの使い方 (3) さらに信用情報を加える

さらに、40AD1FA6の持ち主が十分に信用できるとして、設定した場合です。

さらに40AD1FA6を信用した状態

図4. さらに40AD1FA6を信用した状態

有効な鍵が7つ増えて、全部で13が有効になっています。

WoTの使い方 (4) もっと信用情報を加える

もっと増やしてみようと、7E37CE41の持ち主が十分に信用できるとして、設定した場合です。

もっと信用した状態

図5. もっと信用した状態

有効な鍵が1つ増えて、全部で14が有効になりました。

WoTの使い方 (5) 信用情報の加え方を変えてみる(大胆)

OpenPGPは、柔軟なシステムで、自分の主観で信用情報を変えることもできますし、 自分の都合で判断基準のパラメータを変えることもできます。GnuPGの実例でみてみます。

例として、9C0C1404 には "full" の信用、 40AD1FA6 と 7E37CE41 には "marginal" の信用、 判断基準の(3)の人数として2 (--marginals-needed で指定)、とした場合が 下記です。

わりとありうる判断基準の場合

図6. わりとありうる判断基準の場合

この設定と基準では有効な鍵は11で、 図5. で有効だった3つの鍵は("marginal" に信用される一人の署名しかないので)有効ではありません。

WoTの使い方 (6) 信用情報の加え方を変えてみる(保守的)

もう少し保守的に信用するとして、40AD1FA6 と 9C0C1404 には "marginal" の信用、 判断基準の(3)の人数として2 (--marginals-needed で指定)、とした場合が 下記です。

わりとありうる保守的な判断基準の場合

図7. わりとありうる保守的な判断基準の場合

この設定と基準では有効な鍵は6です。

なにをどれくらい信用するかで、有効な鍵は違う、ということを理解ください。

WoTモデルを使うということは、どういうことか?

OpenPGPは、階層的な権威に頼らないシステムのため、ユーザは互いに、 「鍵のIDとUIDの結びつき」の確認をして、相互に公開鍵に電子署名をして証明します。

この相互の電子署名をほかの人にも開示することにより、 「鍵のIDとUIDの結びつき」の確認の網の目が出来ます。

上記の例で見たように、自分が信用できる間に入る人で、直接の確認していないユーザに対し、 鍵の有効性を確認することができるのです。これが、WoTモデルで、間接の確認を使う、 ということです。

繰り返しますが、公開鍵への電子署名で証明されるのは「鍵のIDとUIDの結びつき」で、 (間に入った人への)信用は、その人が「鍵のIDとUIDの結びつき」の確認をしたこと、 に対するものです。

公開鍵への電子署名で証明されるのは「鍵のIDとUIDの結びつき」だけなので、 よく見知った知り合いでなくても、十分に確認がとれれば、 その人の公開鍵に電子署名を行って証明してよいでしょう。

一方、自分がだれかを信用するという場合に、当該の間に入る人が、 (たとえば、たくさん署名を持っているからといって) 自分が信用するに値するかどうかはわかりません。 自分がよく知っていて、 自分がその人の確認作業を確実に信用できる、そういう人だけに限定した方がよいでしょう。 自分がたとえその人を誠実でまじめな人だとよく知っていたとしても、 その人の「鍵のIDとUIDの結びつき」の確認作業についてよく知らなければ、 信用しない方が賢明でしょう。 とはいっても、これは主観の問題で、その影響は自分に及ぶもので、あなた自身の判断です。

(間に入った人への)信用は、主観にもとづいたもので、自分だけが利用します。対して、 鍵サーバに登録するなどの「鍵のIDとUIDの結びつき」の証明は、 第三者が利用することを前提として、共有するものです。ですから、これは、 客観的に行われるべきだと言えます。

まとめ

  • OpenPGPの鍵の有効性の判断に使われるWoT (Web of Trust)モデルというのがある。
  • GnuPGはWoTモデル以外でも使えるし、使われます。
    • たとえば、WoTモデル以外で、 (設定された/自分の主観として)信用できる鍵に対する電子署名の検証が広く用いられています。
  • 「鍵のIDとUIDの結びつき」の確認の関係は網の目になる。
  • 「鍵のIDとUIDの結びつき」の確認は客観性にもとづいて行いましょう。
  • WoT (Web of Trust)モデルを使って、間接的な確認で、 鍵の有効性を直接以外に広げることができる。(ので、便利かもしれません。)
  • 最終的に有効と判断される鍵は、 「鍵のIDとUIDの結びつき」の網目で、自分からみて数段先となることもある。
  • しかし、自分もしくは信用する人が「鍵のIDとUIDの結びつき」を確認したものに限られる。 自分もしくは信用する人から高々、一段である。 つまり、「鍵のIDとUIDの結びつき」の最短の距離が二段以上になること(連鎖になること)は決してない。
  • ownertrust (信用、 --edit-key の trust で付与するもの)は自分の主観。
  • ownertrust はマシンローカルのプライベートなもので、共有されない。
  • 完全なる誤解: 「ownertrustが共有されて網の目になっている」
  • よくある誤解: GnuPG での電子署名の検証には WoT モデルが使われる。 (正しくは、使うこともできる。もしくは、使われることもある。) (実際のよくある利用では使われていない。)
  • よく理解されてないこと: 何を信じるか(主観/設定)で、GnuPGの電子署名の検証の結果は異なる。
  • 望むらくは: なにを信じて(設定して/前提として)、検証しているのか分かっておいた方がよいでしょう。

僕の勘違い

僕の勘違いが何であったかについても記録として残しておきます。 もしかしたら、よくある勘違いかも知れません。

メンタルモデルといいましょうか、頭の中で思い描いていたのは、 デフォルトでなんの信用を設定しなくても、図5. のような網の目の感じで、 自動的に 客観的に 鍵への署名の関係がたどられて有効と判断される、 と漠然と考えていました。

主観による信用と、 判断基準のパラメータの設定に関して、理解が完全に抜けていました。

もしかしたら、署名の都度、信用情報も合わせて設定するプラクティスが良いかもしれません。 この場合、図5. のようなものからはちょっと有効なものが減りますが、 図4. のような網の目を使うことになります。

僕が実際に使っているのは、図3. に近いと思います。 信用情報の設定はとても限定的です。 また、これとは別に、第三者の署名を信じることで有効とするのではなくて、 他の情報から自分が有効であると主観的に判断する鍵がわりとあり、 これはローカルに署名して使っています。

蛇足ながら

たとえば、ある人 A がファイルを配布しているとします。 配布されるファイルのSHAサムの記載があり、 その文章はGnuPGの電子署名がついているとしましょう。

ある人 A の鍵が確認でき、その文章への電子署名をあなたが確認できたとします。 そして、SHAサムにより、配布されるファイルを検証できたとします。

ここで、配布されるファイルの内容に問題がないかどうかの判断は、しかしながら、 まったく別の次元の話であることに注意ください。

GnuPGの動作は、自分が署名した鍵と自分が設定した信用に依拠します。 これがすべて正しいとしても、保証されるのは「鍵のIDとUIDの結びつき」だけです。

最終的に「ある人 A」のファイルを配布するという行為を信用できるかどうかは、 まったく独立の問題です。

えーと、ままある意味不明の例を持ち出せば、 「私どもにクレジットカード番号を安心して送信してください。SSL証明書があります。」 という話を参考にしてください。 クレジットカード番号を伝えるのに、該当の業者が信頼に値するかどうかに関しては、 SSL証明書はなにも役に立ちません。

この記事の記録

  • Debian のイベントを契機として、2013-06-24 に掲載しました。
  • 2014-12-22に加筆修正しました。「信頼」という日本語は、どこか客観的というニュアンスがあるので、「信用」に変えました。