[DHT][P2P]P2P分散プロキシの検討:その2
前回はP2P分散プロキシの設計の概略を書いた。
今回から数回に分けてセキュリティや匿名性の議論を行う。匿名性と非匿名性のバランスについても後ほど書ければと思う。
今、Chordを使って分散プロキシを設計することを考えてみよう。
実際にWEBサーバにアクセスするノードはURL=urlとするとNode_ID=hash(url)とすることにしよう。このノードをGWノードと呼ぶ事にし、urlに接続要求したノードを接続要求ノードと定義する。
さて匿名性が高いということはGWノードからみて接続要求ノードがわからないこととほぼ同値である。
Chordを使って分散プロキシを設計すると、実は匿名性があまり高くならない事が考えられる。その理由は一体なんでしょう?
それはChordが「きれいに」設計されたDHTだからである。Chordにおいて、ノードAのリンク先はノードAのNodeIDから2n離れたNodeIDのノード群となる。ということは、GWノードや中間プロキシとなるノードからすると、接続要求ノードが「大体この辺にあるな」と推測できる(というよりもNodeIDの範囲を絞る)事ができるのである。ここで中間プロキシとは接続要求ノードがGWノードにルーティングする際に使用するノードで、それ自体がGWノードと接続要求ノードのプロキシになるノード群を意味する。
このような事を避けるためには、ランダムネスを取り入れたDHTを入れることも考えられる。例えば、DHTとしてSymponyを入れることにより、このような推測はややしにくくなる事が考えられる。
もっとも、Sympnonyを取り入れたとしても接続要求ノードのNodeIDの範囲を絞る事が可能である。
そこで、ルーティングにもランダムネスを入れることが考えられる。
DHTの場合、非常に効率よくルーティングするため、GWノードへ一番効率のよい中間ノードへルーティングすることになる。そのため、下記のようなルーティングポリシを実行すれば効率は多少劣るが匿名性は高くなるだろう。
・各リンク先において、GWノードに近づくリンク先へ行く確率をp,逆に遠ざける確率をqとする。
p+q=1である。
・pは各ノードでランダムに設定する。ただし、一般にpはp>>qであるような確率発生関数を設定すること。
・GWノードに効率よくルーティングするリンクほど、実際にルーティングする確率が高くすることに確率発生関数を設定する。つまりルーティングする毎に確率発生関数を計算し、それを基に乱数を発生させて、ルーティング先を決めるわけだ。ランダムネスを取り入れつつ、効率良くルーティングしやすくなるように設計していることに注意!
・qの確率で、逆方向(つまりGWノードに遠ざける)にルーティングする。
このようにすれば、GWノードから中間プロキシから接続要求ノードを推測するのは困難になるはずだ。
次回は暗号、その応用としてMix-net(Onion-routing)を取り入れた際にどのぐらい分散プロキシの匿名性が高まるか検討してみることににする。
| 固定リンク
「P2P」カテゴリの記事
- WebRTCを実現するためにSTUNだけでなくTURNも必要な理由(2015.01.08)
- [P2P]P2Pストリーミングのサーベイ文書について(2014.11.09)
- Winnyの開発者、金子 勇氏の急逝を悼んで(2013.07.07)
- 「分散ハッシュシステムでのNAT超えの考察」に対する質問について(2012.12.16)
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(その2)(2011.11.20)
この記事へのコメントは終了しました。
コメント