さて、いまあるユーザ(またはサーバ)における隣接しているユーザ(サーバ含む) の数をリンク数と呼ぶことにします。サーバAのリンク数は2、ユーザCの リンク数は4であることがわかるでしょう。
まず、サーバAは乱数を作成します。作成した乱数を保持数と呼びことにします。 ここから若干複雑になるので数式を使いますが、難しいと思われた方は最後 に飛んでかまいません。いま、サーバAは隣接ユーザのユーザB、ユーザCに 流入数と呼ばれる数を渡します。 Aの保持数hold_A,Bの流入数inf_B,Cの流入数inf_Cの関係は次のとおりです。
(式1)hold_A=inf_B+inf_C
上記の関係を満たす数であれば、なんでも構いませんが、例えば Aの保持数を10、Bの流入数を8とすれば、Cの流入数は2です。 そこでサーバAは流入数をそれぞれBに8、Cに2を渡します。
さて、ユーザBに注目しましょう。先ほどユーザBは流入数8が渡っています。 この流入数を基にさらに隣接ユーザであるユーザD、ユーザEにそれぞれ流入数を 分配します。 その分配の規則ですが、ユーザBの保持数をhold_Bとすれば、次の通りです。
(式2)inf_B=hold_B+inf_D+inf_E
今、Bの流入数が8ですから、ユーザBの保持数を5とすれば、 ユーザDの保持数は-3、ユーザEの流入数は6とすることができます。
その他のユーザも式2の操作で保持数、流入数を決定します。 ただし、リンク数が1の場合は流入数は保持数となります。すなわち
(式3)inf_x=hold_x (ただしxのリンク数=1の場合のみ)
すなわち、ユーザDの保持数hold_D=-3、ユーザEの保持数hold_E=6ですね。 これらの操作をすると全てユーザの保持数が決めることになります。 保持数の決定例は下図のようになります。
ユーザの保持数には次の関係があることに注意してください。
(式4)hold_A=Σ(x=ユーザ)hold_x
式4を確かめてみましょう。サーバAの保持数は10, ユーザの保持数を全て足すと10となり確かに一致しますね。
さてこれで匿名通信への準備が揃いました。これからユーザからサーバAに 匿名である数を渡すことにします。 いま、匿名で渡す数を意味数と呼ぶ事にしましょう。 議論を簡単にするため、ある時点でユーザEだけがサーバAに 意味数を渡すと仮定します。ここで送信数を導入します。 送信数(send)と意味数(mean)は次の関係があります。
(式5)send_x=mean_x+hold_x
すなわち、送信数は意味数と先ほどの保持数を足すだけです。
ただし、あるユーザがサーバAに匿名で渡す数がなければ、
その意味数は0にします。今の場合、ユーザE以外は意味数は0です。
仮に、ユーザEの意味数を20とすれば、ユーザEの送信数は26です。
さて、これらの送信数を各ユーザが直接サーバAに渡します。
(筆者注:ユーザが直接サーバAと通信すると、匿名性が低下するため、
本来、サーバAの公開鍵を使って、送信数を暗号化し、
流入数の配分の際の経路を逆に伝ってサーバAに送信数を
渡す、ユーザがダミートラフィックを発生させる等のテクニックを使いますが、
ここでは説明を分かりやすくするために
直接サーバAに送信数を渡す事にしました。)
サーバAは各ユーザの送信数を足します。すると次のような結果 になります。
(式6) Σ(x=ユーザ)send_x = Σ(x=ユーザ) mean_x + hold_A
すなわち、各ユーザ数の送信数の総和は各ユーザの意味数の総和+ サーバの保持数となります。よって、サーバAは各ユーザの意味数 の総和がわかります。さて、この例では実際にユーザの送信数を足すと総和は30、 サーバAの保持数は10ですから、意味数の総和は20となります。 今、匿名でサーバAに数を送信しているのはユーザEだけですから、 ユーザEの意味数20が確かにサーバAに伝わっている(それもサーバAは どのユーザから意味数が送信されたかわからないまま)ことがわかります。
もし、複数のユーザが意味数を送信した場合、その意味数の総和が サーバAに伝えられます。しかし一般的にはサーバAには意味数そのもの を伝えたいはずです。その場合にはこの仕組みを応用して、意味数等 をベクトル化して衝突を検知、回避する事が考えられます。このことは HPで紹介するレベルを超えるので、もし関心がある方は資料等を 直接私までメールで請求して下さい。(tnishita@yahoo.co.jp)
さて、Winny、Gnutellaのようなスター状ネットワークに匿名通信路 を応用してみました。このシステムをみればわかるのですが、明らかに 大きなファイルを転送するには向いていません。もしこのシステムを 利用するのであれば、メタデータや鍵等の交換に利用するのが向いているでしょう。 本格的にP2P通信を匿名で行うにはやはりMIX-netの方が向いていますが、 しかしだれがMIX-サーバを立てるのかというところには法的にも技術的にも 問題が残るところです。
そこで、これを解決するためにP2Pネットワークに参加している ユーザが一時的にMIX-サーバになることが 考えられます。ではMIX-netによるP2Pへの適用における私の研究を説明しましょう。