信用モデル「信用の輪(web of trust)」のひみつ
IIJ 技術研究所
山本和彦
作成:1998年10月23日
修正:2000年8月30日
注意
- ここで述べる信用モデルは、PGP 2.6.3i に対しては完全に通用します。
- PGP 5.x に関しては、C のマクロ PGPTRUSTMODEL を 0 に設定し
コンパイルした場合に限り正しいです。PGP 5.x ではその他に 1 と 2 という
信用モデルを提供しています。デフォルトは 0 なので、
通常ここで述べる内容を知っておけば十分でしょう。
- GNUPG でもここに述べる信用モデルが提供されています。
ただし、ある公開鍵は、必ずその公開鍵の所有者によって署名されている
必要があります。他の人の署名をいくら集めても、
所有者によって署名されていない公開鍵は、
有効性が complete になりません。
(所有者の署名は削らないようにしましょう。)
- 警告のメッセージなどの例は PGP を Unix で使った場合のはなしです。
Windows や Mac では警告の方法が異なります。
また、GNUPG でもメッセージの文章が異なります。
有効性と信用度
鍵リングに登録される公開鍵には
有効性(validity)と信用度(trust)という値があります。
信用度は自分で設定し、
有効性は計算により算出されます。
それぞれ以下のような意味を持っています。
- 有効性
- ある公開鍵が、本当にその公開鍵のユーザ ID で示される
人に属しており、改竄もされていないと信頼できる度合。
- 信用度
- ある人 A が他の人 B を紹介する際に、
紹介者としてどれだけ A を信用するかという度合。
A が B を C に紹介するとは、
A が B の公開鍵に署名し、A の署名の付いた B の公開鍵を
何らかの方法で C が入手することを意味します。
公開鍵には複数の人が署名可能であり、
それぞれの信用度の合計から有効性を決定します。
有効性の意味
有効性の値には高い順に、
- complete (完全に有効)
- marginal (最低限有効)
- untrusted (無効)
- undefined (未定義)
があります。
PGPは、これらの値をどのように使うのでしょうか?
ある公開鍵を使うとき、
つまり、その人宛に暗号文を作成したり、
その人の電子署名を検証するとき、
有効性の値によって PGP は以下のように動作します。
- 有効性が complete のとき
- いっさい警告は表示されない
- 有効性が marginal のとき
-
"WARNING: Because this public key is not certified with enough trusted
signatures, it is not known with high confidence that this public key
actually belongs to:"
と警告が表示される。
- 有効性が untrusted のとき
-
"WARNING: This public key is not trusted to actually belong to:"
と警告が表示される。
- 有効性が undefined のとき
-
"WARNING: Because this public key is not certified with a trusted
signature, it is not known with high confidence that this public key
actually belongs to:"
と警告が表示される。
このように有効性が complete でない場合、
その公開鍵が偽物である可能性を示唆するために、
その公開鍵が利用される度に
PGP は警告を発します。
有効性の決定規則
公開鍵に付いた署名の信用度から
その公開鍵の有効性を決定する規則を詳しく説明しましょう。
以下に信用度の値を高い順に示します。
- ultimate (絶対的に信用する、自分自身)
- complete (完全に信用する)
- marginal (ある程度信用する)
- untrusted (信用しない)
- unknown (未知)
- undefined (未定義)
このように有効性と同じ値を使うのでややこしいです。
混乱しないで下さい。
設定ファイルには、有効性を決定する際に
重要な役割を果たす変数が 2 つあります。
それぞれの名称と意味を示します。
- COMPLETES_NEEDED
- 信用度が complete である署名をいくつ集めると
有効性を complete にできるかを示す変数。
デフォルトは 1。
- MARGINALS_NEEDED
- 信用度が marginal である署名をいくつ集めると
有効性を complete にできるかを示す変数。
デフォルトは 2。
読みやすくするため、以下ではそれぞれ V_c と V_m と呼ぶことにします。
有効性は、その公開鍵に付いている
電子署名の信用度の得点の総和から決定されます。
通常、信用度には以下のように得点が与えられます。
- ultimate V_c × V_m
- complete V_m
- marginal V_c
- untrusted 0
- unknown 0
- undefined 0
complete と marginal がひっくり返っていることに注意して下さい。
信用度が ultimate である電子署名の数を N_u、
complete を N_c、marginal を N_m とすると、
得点の総和は、
総和 = V_c × N_m + V_m × N_c + V_c × V_m × N_u
となります。有効性は、この総和が
- 0 なら undefined
- V_c × V_m ÷ 2 より小さければ untrusted
- V_c × V_m より小さければ marginal
- V_c × V_m 以上なら complete
と計算されます。
デフォルトでは V_m = 2、V_c = 1 ですから。
信用度の得点は、
marginal、complete、ultimate それぞれ 1、2、2
となります。
よって、
信用度が marginal でる電子署名を 2 つ、あるいは、
complete を 1 つ、あるいは、
ultimate を 1 つ集めれば、有効性を complete にできます。
この規則には、例外が2つあります。
1つ目の例外は、V_m < V_c の場合です。
信用度が低い marginal を集めなければならない数が、
completeのそれよりも小さいのは、
明らかにおかしいです。
そこで、この場合は、V_m を V_c と同じ値して、
上記の規則に従います。
2 つめの例外は、
V_m = 0 の場合です。
これは、いくら信用度が marginal である電子署名を集めても、
公開鍵の有効性を complete にできないことを意味しています。
この場合、次の規則に従います。
まず、信用度の得点は以下のようになります。
- ultimate V_c
- complete 1
- marginal 0
- untrusted 0
- unknown 0
- undefined 0
よって総和は、
総和 = N_c + V_c × V_u
となります。有効性はこの総和が
- 0 なら undefined
- V_c ÷ 2 より小さければ untrusted
- V_c より小さければ marginal
- V_c 以上なら complete
と計算されます。