P2Pでの匿名通信路(実践編)


さて、匿名通信路「DC-net」をP2Pに適用した研究を見てみました。 Star DC-netは興味深いシステムですが残念ながら大量のトラフィックを 効率的に処理する訳には行けません。そこで、先ほど紹介した 「MIX-net」 を使ってP2Pの匿名通信路を考えて見ましょう。

MIX-netの適用


MIX-netは通常電子選挙等に使われるもので、基本的にはIPアドレス等を FIXにして考えるのが普通です。しかしながら、P2Pネットワークのトポロジー (ネットワーク形状)は頻繁に変更しますから、MIX-netをより変動の激しい ネットワーク構造に適したモデルに修正する必要があります。

さて、MIXサーバをどこに設置するかと言うのが問題になります。MIXサーバ をどこかの場所に固定してしまうと、MIXサーバのありかがすぐに判明して しまいますから、スマートではありません。そこでユーザ自体がMIXサーバ になることが自然に考えられます。

例えば、下記のネットワークの場合ユーザA⇔ユーザDで通信を行う場合、最短経路上にあるユーザB,ユーザCがMIXサーバとなるのです。

ところで、ユーザDがユーザAに通信を行う場合、MIX-netの方針に従うと、 MIXサーバであるユーザC、ユーザBからそれぞれ公開鍵を入手する必要があります。 仮にユーザDがユーザAに送るコンテンツをcon,ユーザC、ユーザBの公開鍵を それぞれpub_C,pub_B,公開鍵pubを使ってコンテンツconを暗号化する関数を K(pub,con)とすると、ユーザDはユーザCに次のような暗号文を送ります。

(式1)con_c=K(pub_c,K(pub_b,con))

暗号化が2回重ねて行われていることに注意して下さい。
ちなみにユーザCがユーザBに送るコンテンツcon_bは MIXサーバであるユーザCがcon_cの一部を復号化することに注意すると

(式2)con_b=K(pub_b,con))

と表わされます。

さて、問題はユーザDが公開鍵pub_b,pub_cをどのように取得するかです。 例えば、公開鍵をどこかの掲示板で公開することも考えられます。 しかしこれはスマートではありません。その理由として

と言う事が挙げられます。そこで、経路上のMIXサーバの公開鍵はバケツリレーの よって公開鍵をエンドユーザ通知することになります。まず、 ユーザBはユーザCにpub_Bを渡します。 ユーザCはユーザDにpub_C,pub_Bを渡します。これなら、経路途中のMIXサーバ の情報をユーザDから隠蔽しつつ鍵を送信することができます。

しかし、まだ問題は残っています。式1を見て下さい。これを見るとわかるように ユーザDはpub_bを使って暗号化し、それをpub_cを使ってさらに暗号化 しています。このこと(つまりMIX-netの暗号化システム)によって次のことが ユーザDに分かってしまいます。

匿名性を高めるには上記の情報をユーザDに渡さないようにする事が必要 です。そこで、この検討結果を元により暗号における数学的なテクニックを使いながら より匿名性が高いシステムを説明しましょう。


Star MIX-net


それではこれから私の研究を紹介します。 さて、ツリー状(Star構造)のネットワークにMIX-netを適用するので、 これから説明するシステムをStar MIX-netと呼ぶことにします。

まず、Star MIX-netでは各リンク間 (例えばユーザA⇔ユーザB、ユーザC⇔ユーザD) を暗号通信とします。これは、ユーザ間の通信内容を他者から隠蔽させる目的 があります。各リンク間は共通鍵を使って暗号化しますが、各リンク間の共通鍵 は異なります。例えばユーザA⇔ユーザB間を暗号化するとすれば、ユーザA、ユーザB においてDiffie-Hellman鍵交換によって共通鍵を共有します。 Diffie-Hellman鍵交換を行う代わりにそもそもDiffie-Hellman鍵交換を利用するIPsec を使う手もあります。IPv6であれば、IPSecは標準で実装されています。


(※筆者補足:
Diffie-Hellman鍵交換は後述する離散対数問題を利用します。 今、ユーザAとユーザBがある数を共有したいとします。まず、ユーザAは素数pと ランダムな数gを決めます。ここで、t mod u とはtをuで余った余りを 意味します。すなわち 5 mod 3 = 2です。 確かにユーザA,ユーザBもKを共有することができましたね。)

次にMIX-netをより機動的なP2Pネットワークにチューニングします。 今、説明のため以下のようにネットワーク構成を簡略化しましょう。

ユーザDはユーザAに匿名で通信をしたいと考えています。 さて、先ほどの章の検討から、ユーザD⇔ユーザAの経路上にあるユーザB, ユーザCがMIXサーバになります。そこで、ユーザB、ユーザCはMIXサーバとしての 公開鍵をユーザDに送信しなければなりません。 ここで一工夫しましょう。

MIX-netでは異なる複数の公開鍵でコンテンツを暗号化します。 今、公開鍵をpub,コンテンツをcon,暗号化関数をK(pub,con)と定義すると、 一般にK(pub_1,K(pub_2,con))=K(pub_2,K(pub_1,con))は成り立ちません。 上記の関係が成り立たないと、pub_2を渡すユーザとpub_1を渡すユーザ のネットワーク上の位置関係がユーザDにバレてしまいます。 そこで次の式がなりたつ暗号化関数を検討する必要があります。

(式3)K(pub_1,K(pub_2,con))=K(pub_2,K(pub_1,con))

では式3が成り立つ暗号方式を紹介します。それはElGamal暗号を 変形するものです。まずElGamal暗号を説明しましょう。

まず数学的準備をします。今、素数pを選びます。その時にある数gを ランダムに選び、次の式を計算します。

(式4)y= gx mod p

さて、公開鍵は(p,g,y),秘密鍵はxとなります。 ここで、あるユーザが公開鍵を使ってメッセージmを 暗号化するには次のように計算します。乱数rにおいて

(式5)c_1=gr mod p
(式6)c_2=yr m mod p

これを秘密鍵を使って復号化しましょう。

(式7)m = c_2/(c_1)x mod p

ElGamal暗号の原理については暗号の解説書をご覧になって下さい。 さて、ElGamal暗号を変形させて、P2Pに適したMIX-netを作っていきます。


(※筆者補足:
ElGamal暗号は離散対数問題を解く事が困難であることを 利用します。今回紹介するシステムもこの離散対数問題の困難性を利用しています。 離散対数問題とはある素数pにおいて、

y= gx mod p

とするとき、yとgが分かっている時にxを求めること。)


まず、ユーザDはユーザA、ユーザB、ユーザCから公開鍵を入手する必要 があります。ここでまず、ユーザDはユーザA及び経路上のユーザB、ユーザCに ユーザD自身の公開鍵pub_D及びある素数pを通知します。 ユーザA、ユーザB、ユーザCの公開鍵pub_A,pub_B,pub_Cはそれぞれpub_D で暗号化して先ほどの章のバケツリレー方式でユーザDに届けられます。 これによりユーザDはpub_A,pub_B,pub_Cを入手することができました。 ユーザの公開鍵はpub_Dによって暗号化されているので他のユーザは自分が持っている 公開鍵以外はわかりません。なお、各ユーザの公開鍵はその都度ランダムに 生成すれば匿名性が高くなります。

(筆者注:この方法だとMIXサーバはユーザDバケツリレーで送られる公開鍵  の数からユーザAまでの距離がバレてしまうことが考えられます。そのため 各MIXサーバがダミーの公開鍵などを生成する、あるいは1つのMIXサーバが 複数の公開鍵を生成したり、またはあるMIXサーバが復号化作業を行わない (つまり公開鍵を生成しない)ことにより各MIXサーバがユーザAまでの 距離を把握することを防止することが必要です。)

ここでユーザDはコンテンツmを暗号化します。ユーザCに 渡す暗号化コンテンツ con_cは次のとおりです。rをある乱数とします。 また、ある素数をpとします。

(式8)con_c = pub_Arpub_Brpub_Cr m mod p

ユーザDはcon_c及びr,pをユーザCに渡します。ここでユーザCは次の処理をしてユーザB にcon_bとr,pを渡します。

(式9)con_b = con_c /pub_Cr mod p =pub_Arpub_Br m mod p

ユーザBは次の処理をしてユーザAにcon_aとr,pを渡します。

(式10)con_a = con_b /pub_Br mod p =pub_Ar m mod p

最後にユーザAは次の処理をしてコンテンツmを入手します。

(式11)m = con_a /pub_Ar mod p

これで、ユーザDからユーザAへに対して、MIXサーバであるユーザB、ユーザCが 内容mを分からないままコンテンツを送る事に成功しました。

もう少し工夫をしてみましょう。MIXサーバでは匿名性を高めるために MIXサーバに入ってくるデータ長とMIXサーバから抜けるパケット長を 変えることがあります。これは、Ethereal等のネットワークモニタリング ソフトを使うと、通信を暗号化してもMIXサーバを流れるデータ長が わかってしまうからです。そのデータ長を調査すると、MIXサーバに入ってきた データがMIXサーバからどの宛先に抜けていくかバレてしまいます。 そこで、先ほどのコンテンツ(con_a,con_bなど)に適当なダミーデータを付けて データ長を変化させる必要があります。 この作業をpaddingと呼びます。

MIXサーバは暗号化をするだけではありません。先ほどのpaddingの他に MIXサーバから出力するデータをMIXして匿名性を高めることを行います。 このMIXする作業を MIX機構と呼ぶ事にしましょう。

MIX機構とpaddingを説明します。上の図を見て下さい。 いまデータM1がデータ長L1で、時刻T1にMIX サーバに入ってきます。またデータM2がデータ長L2で時刻T2にMIXサーバ に入ってきます。ここでpaddinやMIXサーバの復号化作業でデータM1のデータ長 はL3、データM2のデータ長はL4となります。このデータをT3(T1,T2 ところで、MIXサーバはMIX機構を行うために、複数のデータがMIXサーバに届くまで 待機させる必要があります。このことはデータの遅延を意味します。これは VoIPなどの遅延を嫌がるアプリケーションには向いていません。そこで、 MIXサーバに充分なデータが送信されなければ、MIX機能はうまく作動しません。 そこでVoIPのようなアプリケーションやトラフィックが少ない場合ではMIX機構 以外でデータの宛先を隠蔽する機構が必要です。そこで次のような「ダミー機構」 を考えました。

データM1がMIXサーバ1で処理されてMIXサーバBに渡したいと 考えます。ここで、MIXサーバBにデータが渡された事をカムフラージュ するため、同時刻に隣接しているMIXサーバ(ユーザ)にダミーパケット を送ります。するとMIXサーバ1のパケットをモニタリングしても データがMIXサーバA、MIXサーバB、MIXサーバCのどこに行ったかわかりません。 もちろんデータM1はMIXサーバ1でpadding処理をされています。 この方法はMIX機構よりも遅延時間を大幅に削減する事が可能です。ただし、 ダミートラフィックのためネットワークに負荷がかかります。

また、これ以外にも不定期にユーザがダミーパケットを隣接するユーザ等に送れば 匿名性をさらに高める事ができます。しかしながらこれもネットワークに 大きな負荷がかかります。

これでP2PネットワークにMIXネットをチューンナップすることができました。 最後にこのシステムの匿名性の検討をしてみましょう。


(※追記※)
MIXサーバをP2Pに応用する試みは多くの人が取り組んでいます。 例えばgoogleで探すと このような論文もあります。

今後の研究の方向性の一つとして、匿名性を通常保障するが、ある条件下 ではその匿名性が失われる(例えば不正利用した場合はその利用者の 情報が判明する)ということが考えられます。


次にP2P掲示板に対する考察を説明します。

NEXT

TOPページに戻る