P2Pでの匿名通信路(原理編)


P2Pの世界では、ユーザ同時が直接通信を行うため、相手のIPアドレス等 の情報が他方に伝わってしまい、DOS攻撃を行われたり、自分の組織を知られる 可能性があります。特にNAT変換を行わないIPv6の世界ではこの問題をより 意識する必要があります。 そこでP2Pでお互いに匿名で通信できる方法を 説明します。
(筆者注:IPv6では乱数を使ってアドレスを降り割り当てる 匿名IPアドレスがあるが、外部から匿名IPアドレスに通信するには向いていない。)
【参考】http://itpro.nikkeibp.co.jp/free/v6start/confer_v6/20021105/1/index.shtml

まず、一般的なネットワークで匿名通信路を実現する方法として

が代表的な技術として挙げられます。一つ一つ原理を 説明していきます

多段プロキシ

大学、会社でインターネット接続すると、「プロキシ」の設定を する場合があります。組織内部のパソコンからインターネット への応答をプロキシサーバが代理します。そのため、インターネット サーバから見るとプロキシを設定するとプロキシサーバから接続している ように見えます。

このようにプロキシサーバがあると、接続元のIPアドレス等の情報を 隠蔽でき、接続先にはプロキシサーバの情報しかわかりません。 ただし、接続先がプロキシサーバの管理者の承諾を得れば接続元の情報を 入手することができます。

このプロキシの原理を応用してみましょう。今、プロキシサーバを複数 設置したとします。例として2つプロキシサーバを立てたとします。 この全てのプロキシサーバを通してインターネット通信することを 多段プロキシと言います。ネットワーク図は下図を参照して下さい。

この場合、接続先サーバはプロキシ2の情報しかわかりません。プロキシ2 はプロキシ1の情報しかわかりません。プロキシ1は接続元の端末情報を 知っています。よって、接続先サーバはプロキシ1、プロキシ2の管理人 の協力がなければ、接続元端末を知る事ができません。これが多段プロキシ の匿名通信路の原理です。プロキシを挟む数が多ければ匿名性は高くなります。

メールにおいてもこのような多段プロキシの概念は応用できます。 有名なのが「Remailer」というシステムで、これはメールヘッダー (送信者のIP情報などが書いてる)を書き換えてしまい、メールの 受取人から送信者の情報を隠蔽するシステムです。

この多段プロキシ原理はWinnyの原理に近いです。しかしWinnyで逮捕者が出た事から さらに匿名性が高い通信路を検討する動きが出てきました。今度はプロキシ の原理をさらにパワーアップしたMix-netの原理を説明します。

Mix-net

Mix-netは電子投票でも使われている強力な匿名通信路です。 Mix-netではある特殊なサーバを設置する必要があります。これを Mixサーバということにしましょう。

接続元端末はまず各MIXサーバから公開鍵をもらいます。MIXサーバ毎に 公開鍵は異なります。また接続先サーバからも公開鍵をもらいます。 まず、端末は通信したい内容を次のように暗号化します。

通信内容⇒サーバ公開鍵で暗号⇒公開鍵2で暗号化⇒公開鍵1で暗号化⇒暗号化通信内容

まず、暗号化通信内容をMIXサーバ1に渡します。MIXサーバ1は公開鍵1の ペアである秘密鍵1で復号化します。(復号化した内容を暗号化通信内容1と呼ぶことにします。 次にMIXサーバ1は暗号化通信内容をMIXサーバ2に渡します。MIXサーバ2 はMIXサーバ1と同様、秘密鍵2で復号化します。(暗号化通信内容2と呼びます。) MIXサーバ2は暗号化通信内容2を接続先サーバに渡します。接続先サーバは秘密鍵で 復号化して通信内容を把握できるのです。MIXサーバ1、MIXサーバ2は通信内容を 知る事はできません。

これだけでは匿名通信路といえず、先ほど説明した多段プロキシの応用になってしまいます。 ではMIXネットはどのような工夫をしているのでしょうか?

MIXサーバではまず、多くの人から来た通信内容を一旦蓄積します。ある程度溜まると 、それをランダムに次のMIXサーバに渡します。また、通信内容の長さを揃えるために、 わざと情報内容に「詰め物」をします。このようにすれば、MIXサーバの前後で通信を 盗聴されても「だれの通信がいつMIXサーバから送出されたか」さっぱりわからないわけです。

このようにMIXネットは匿名性が高いことがわかりました。では何が問題点なのでしょうか? 短所として

などが挙げられます。後の章でP2PにMIX-netを応用した私の研究を紹介 しています。

DC-net

今度はDC-netを説明しましょう。これは足し算を使った非常にユニークな匿名通信路です。

まず、第1ステップとして2つの端末間で数を共有することを始めます。 まず端末1と端末2でランダムに親と子の関係を決めます。今、端末1が親、端末2が子 とします。端末1がランダムで数(保持数と呼ぶ事にしましょう。)を決めます。親で ある端末1は子の端末2にこの保持数の符号を変えた数(つまりマイナス1を掛ける) を与えます。子はこの数を保持数とします。この操作を各端末間全てで行います。

さて、各端末はこの操作で得られた保持数を全て足します。これを端末保持数と 言う事にしましょう。ある端末の端末保持数を知るためにはその端末以外の全ての端末 の協力が必要です。また、各端末の端末保持数を全て足すと0になることも注目して下さい。

さて、第2ステップに行きましょう。各端末は端末保持数に接続先サーバに知らせたい数 (これを意味数と呼びましょう)を 足します。これを通信保持数を呼びましょう。各端末は通信保持数を接続サーバに知らせます。 さて、接続サーバは通信保持数を全て足し挙げると各端末の意味数の総和を知ることが できます。接続サーバは誰がそのような意味数を送信しているかはわかりません。

このようにDC-netは足し算を使うだけで匿名で「ある数」を送信することができました。 特徴をまとめましょう。

DC-netの単純な応用として選挙が挙げられます。各端末が賛成であれば意味数を1、 反対であれば意味数を0とします。そうすれば、接続先サーバは賛成した端末数 を把握できます。しかしながら、ある賛成派端末がズルをして意味数を3としても 接続先サーバは不正をしたことがわかりません。検証性がDC-netのネックとも 言えるかも知れません。

さて次にこのDC-netをP2Pでの匿名通信路に応用した私の研究を説明します。

NEXT

TOPページに戻る