P2Pでの匿名通信路(応用編)


匿名通信路「DC-net」の原理を説明したので、 それをP2Pに適用したシステムを考えて見ましょう。

Star DC-net


まず、ネットワーク形態ですが、WinnyやGnutella に見られるツリー状(スター状)を考えてみます。 そのため、このシステムをStar DC-netと呼ぶ事にします。 今、サーバAにユーザA,B,C,D,E,F,G,Hが匿名である情報を 送信したいと考えています。ネットワーク図は下図の 通りです。

さて、いまあるユーザ(またはサーバ)における隣接しているユーザ(サーバ含む) の数をリンク数と呼ぶことにします。サーバ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への適用における私の研究を説明しましょう。

NEXT

TOPページに戻る