[P2P][DHT]P2P分散プロキシの検討:その3
前回はP2P分散プロキシにおいてDHTを改良してルーティング元を匿名する方法を提案・紹介した。
今回は通信自体の匿名性について議論したい。
匿名性を高めた分散プロキシとしてTorを挙げる人が多いだろう。これはOnion-routing(Mix-net)を使って匿名性を高めている。
実は私もかなり昔にP2PでMix-netを使った匿名通信を解説、提案したことがある。
解説については、
P2Pでの匿名通信路(原理編)
提案については、
P2Pでの匿名通信路(実践編)
DHTにも同様にMix-netを適用できるのでここでの解説を省く。
ところで、前回解説したDHTによってルーティング元を匿名することができれば、実はMix-netを適用しなくても匿名性を担保できることをこれから説明する。
そもそも、Mix-netは多重に暗号化することによって、ルーティング先、ルーティング元を隠蔽する技術であった。ところが、今回WEBアクセスのようなものに使う分散プロキシを考えると、当然ルーティング先(つまりGWノード)はわかる。なぜならGWノードはNode_ID=hash(url)であり、そこに行くようにルーティングしなければならないから。
残るはルーティング元を隠蔽する事だが、これは前回説明したDHTの改良で可能だ。ということは、結局Mix-netのような厳しい匿名通信路を使わなくても良いことがわかる。またそもそもMix-netのような公開鍵方式で暗号化する方式はノードのリソースを大幅に消費するのであまりWEBアクセスのための分散プロキシには向かないだろう。(大きな遅延が発生する恐れがある。)
ただし、当たり前のことだがGWノードと接続要求ノード間は暗号化する必要がある。そうしないと、中間プロキシが盗聴できるからである。
さて、GWノードと接続要求ノード間をどうやって暗号化するかということである。
実はこれもDHTを使えば簡単である。各ノードは電子証明書を発行し、それをDHT内に蓄積する。
接続要求ノードはDHTからGWノードの電子証明書を入手し、それを元に共有鍵をGWノードの公開鍵で暗号化する。これを中間プロキシを通して、GWノードに渡せば良い。暗号通信はこの共通鍵で行う。
なお、GWノードの証明書はGWノードのニックネームをnameとした場合、Node_ID=hash(name)に格納している。
この電子証明書は自己証明書でも良いし、PKIやPGPのようにしても良い。
自己証明書でも良い理由はハッシュ値を検証することにある。
いま、GWノードはNode_ID=hash(name)である。
GWノードと思える電子証明書を取得した場合、当然電子証明書にはニックネームnameが書いてる。
このnameのハッシュ値がhash(url)であれば、これがurlにアクセスする真のGWノードあることがわかる。これはハッシュ値からハッシュを計算するもとの文字列を計算するのが非常に困難であることを利用している。結局GWノードと接続要求ノード間の中間侵入攻撃は電子証明書とこのハッシュ値の検証を使えば困難であることがわかる。
これでP2P分散プロキシの匿名性についての議論はひとまず終わりにする。
次回は分散プロキシにおける匿名と非匿名のバランスについて考えてみよう。
| 固定リンク
「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)
この記事へのコメントは終了しました。
コメント