[P2P]分散ハッシュによるP2P型WEB匿名プロキシ
先日の予告どおり、今日はP2PのWEB匿名プロキシについて説明します。
これを書くきっかけはP2PによるWEB匿名プロキシに関するページを以前見たことです。
Aerie
でも、どうやって実現するかってシステム概要について全然書いてないじゃない。。。(´・ω・`)ショボーン。
ということで、私がこんな感じかな?ってちょっと考えて見ましたので説明します。(笑)
まず、「おさらい」ですが、プロキシを使うと外部からIPアドレスが隠蔽できます。これを多重にすると匿名性は非常に強くなります。
今回、私がモデルにしたのは匿名通信路の一種である「Crowds」です。
Crowdsはあるユーザグループにおいて、ユーザ自体がプロキシとなり、WEBアクセスする際にユーザ間を何度もホッピングすることで、外部からは元々誰からWEBにアクセスしているか困難にする技術です。
Crowdsに関する参考文献は下記の通り。
http://www.scs.cs.nyu.edu/G22.3033-001/notes/l11.pdf
さて、Crowdsの問題としては、他のユーザのIPアドレスを複数(匿名性を高めるなら、たくさん)知っている必要があることになります。また、URLごとにホッピング先を変えたりすると結構システムが煩雑になったり、さらにユーザの頻繁な参加や離脱をあまり考慮されていません。さらに、ユーザの参加人数が巨大になった際もあまり検討されていません。そこで今回は分散ハッシュをうまう使う事でこの問題を解決しましょう。
今回のシステムでは、分散ハッシュはChordだろうがCANだろうがあまり関係ありませんが、以前ChordをBlogで紹介したので今回はChordを使いましょう。分散ハッシュやChordについては以前の記事をご覧になって下さい。
さて、まずユーザAがWEBサーバにアクセスするとしましょう。今、ハッシュ関数hash()において、アクセスしたいURLをurl1として、hash_url1=hash(url1)を計算します。これをChordによって、ハッシュキーがhash_url1のノードを探します。
[※注意:各ノードはP2Pネットワーク参加する際、ランダムなnumberをハッシュキーとして保持しておきます。タネンバウム著の「コンピュータネットワーク」ではハッシュキーをノード識別子と読んでいます。]
今、hash_url1をハッシュキーとするノードをZとすれば、
A⇒B⇒E⇒G⇒P⇒Z
のようにZを検索する際に何人ものノードを介するはずです。これが、WEBへの通信そのものになります。
すなわち、B,E,G,P,ZはURL=url1へのAのアクセスのプロキシとなります。
さて、今度はAがURL=url2のアクセスをした場合どうなるでしょう?今度はhash(url2)をハッシュキーととしてもつノードXを探す必要があります。かなりの高い確率でXはZではありませんし、また検索する際には違うノードをたどる可能性が高いこともわかるでしょう。つまり、
A⇒C⇒F⇒M⇒Q⇒R⇒S⇒U⇒Y⇒X
のようになります。ここでプロキシの数及びプロキシとなるノードがurl1にアクセスする時とurl2にアクセスする時には一般に異なる事に注意!これによって、「URL毎に多重するプロキシ数、プロキシとなるノードが異なる」非常に匿名性の高いシステムができあがりました。
また、このシステムは分散ハッシュの性質を活かし、負荷分散の効率が良く、スケーラビリティにも優れています。それだけでなく、ノードの頻繁なネットワーク参加、離脱にも耐えられます。また、ノード自体はいつもネットワークに参加しているとは限らないので、アクセス先サーバからアクセス元をたどるのは非常に困難である事もわかります。
現在、掲示板書き込みにはプロキシが良く使われますが、将来はこのようなP2Pプロキシが広く使われる事になるかもしれません。そんなに実装も難しそうではないので、近いうちにこのシステムのフリーソフトが出回りそうな予感。
| 固定リンク
« バイオリン購入。 | トップページ | GW »
「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)
この記事へのコメントは終了しました。
コメント