ノードレイティングP2P

(これは、あるアイディアに関するメモです。まだよく考えて検証したものではありません。後日、整理してもう少し詳しく書き直します)

概略

P2Pネットワークを管理しようとした場合、本質的な問題は「偽装ノード」の問題である。つまり、ソフトに実装されている管理の仕組みをバイパスするような改造を加えたソフトの流通をどう防ぐかということになる。集中的、一元的管理以外の方式で、これを防ぐことが難しい。

これに対して、「ノードレイティングP2P」という方式で対応する。

この方式によって、ユーザの総意によって不当に放流されたデータをP2Pネットワークから実質的に削除することを可能にする。

レイティングサーバ

この方式は、WinnyFreenetのような、多数のノードが平等に分散して自律的に動作するネットワークを前提とする。そこに複数の「レイティングサーバ」を追加する。レイティングサーバの機能は、ノードを「採点」することである。

レイティングサーバは、固定のIPアドレス(ホスト名)を持ち、固有のレイティングポリシーと不法データリストを持っている。レイティングポリシーとは「どのようなデータの流通を禁止すべきか」という倫理的な基準である。不法データリストは、そのレイティングポリシーに反するデータの識別子(Winnyにおけるハッシュ)のリストである。

例えば、「現行著作権法に違反するデータを流通すべきでない」というポリシーを持つレイティングサーバは、そのような著作物の音楽データや映画のデータを不法データリストとして保持している。

ユーザは、レイティングポリシーによっていくつかのレイティングサーバを選択する。

各ノードは、ユーザの選択に従い、レイティングサーバに定期的に接続し、自ノードに関する情報を報告し、不法データリストとレイティング情報を入手する。

ノードからレイティングサーバへ報告する情報

ノードは、以下の情報をレイティングサーバに報告する

  • 自分の隣接ノードに関する情報
  • 不法データを配信してきた隣接ノードの情報

不法データとは、そのレイティングサーバの「不法データリスト」に含まれるデータである。

レイティングサーバが管理する情報

レイティングサーバの不法データリストは、管理者が手動でメンテナンスする。

レイティングサーバは、各ノードからの隣接ノードに関する報告を合成し、ノードの地図を組み立てて、それをダイナミックに維持する。地図には、自分に接続しているノードの情報と、接続していないノードの情報が両方含まれている。

そして、「不法データを配信してきた隣接ノードの情報」を地図にあてはめて、その地図の情報でわかる範囲でその配信元を推測する。

全てのノードがこのレイティングサーバに接続していればその推測は正確であるが、そうでなければ、その配信元が単に中継しているノードであるか、本当の一次配信元であるかは判断がつかない。この場合、レイティングサーバは「疑わしき他人はクロ」という原則でレイティングを行なう。

つまり、「自分に接続してなくて悪いデータを流す奴はクロ」ということになる。

ノードの動作

ノードは、従来のP2Pの機能に加え以下の処理を実施する。

  • 不法データを送ってきた隣接ノードを記録する
  • 定期的にレイティングサーバに接続し情報を交換する
  • 不法データリストに含まれるデータは中継しない
  • レイティングに応じたペナルティ処理

レイティングによって「クロ」とされたサーバには、ペナルティ処理を行なう。ペナルティ処理とは、通信を遅らせたり接続を切断することである。

複数のレイティングサーバに接続する場合は、各ノードがレイティングサーバごとに優先度を設定する。優先度の高いサーバから「クロ」認定を受けたノードには、より厳しいペナルティ処理(切断など)を行ない、優先度の低いサーバからの「クロ」認定には、やや緩やかないペナルティ処理(遅延のみ)を行なう

何が起こるか?

まず、ユーザの大半が同意するポリシーを持つサーバがあってそこに接続するとした場合、そこに接続しないユーザ、すなわち、合意されたポリシーに同意しないノードは、不法なデータの一次配信元であるかないかに関わらず、「クロ」のレーティングを受けてしまう。その結果、ネットワークから自動的に排除されていくので、それを避ける為には、そのレイティングサーバに接続せざるを得ない。

ポリシーに関して意見が二分された場合、それぞれのポリシーを代弁するサーバに各ノードが接続する。この場合は、ネットワークが実質的に二つに分断され、それぞれの内部でのみデータが流通することになる。

それぞれのグループは、より多くのユーザを獲得することで、より効率的なデータの流通が得られるので、より多くのユーザが合意するようなポリシーを選択するような圧力を受けることになる。

すなわち、レイティングサーバ(+ユーザグループ)同士のユーザ獲得競争が発生し、ユーザは、自分の納得できるポリシーの範囲で、有力なサーバを選択するよう動機づけられる。確たるポリシーのないユーザもレイティングサーバの選択を誤ると、実質的にネットワークから切断されてしまうからである。

削除の意味

有力なレイティングサーバの不法データリストに載せることは、実質的にネットワークからのデータの削除を意味する。なぜなら、それを配信した場合に、隣接ノードからペナルティ処理を受け、ネットワークから切断されてしまうからである。よって、データのコピーは制限され、ネットワークからは削除される。

理想的な状況は、ある程度の支持を持つ異るポリシーのサーバが並立していて、そのサーバ全てが「不法」と認定した場合のみ、それが削除されてしまうことである。有力なサーバが互いのポリシーを尊重して、協力する場合には、そのようにパラメータを調整することが可能と思われる。

不当な削除の防止

レイティングサーバが、公開されたポリシーと整合しないような削除(Google八分的な恣意的な削除)を行なった場合、ユーザは、抗議の意思を示す為に、別のレイティングサーバを立ちあげ、そこに接続することができる。

新しいレイティングサーバは、元のサーバから入手した不法データリストを初期データとして、「不当に削除されたデータ」を不法データリストからはずして公開する。

もし、この抗議の主旨に大半のユーザが同意した場合、あるいはその「不当に削除されたデータ」を入手したいと望むユーザが多い場合には、大半のユーザが前のレイティングサーバへの接続をやめて、新しいレイティングサーバに接続する。(あるいは、そのように優先度を設定し直す)。

これによって、新しいレイティングサーバは急速に信頼度の高い地図を構築できて、元のレイティングサーバを置きかえることが可能となる。

偽装防止の仕組み

各ノードは、固有の秘密鍵を保持する。レイティングサーバに報告する情報は、秘密鍵で署名する。同時に、隣接ノードとも秘密鍵で署名した情報を交換し、それをそれぞれがサーバに報告する。レイティングサーバは、報告の中の署名を確認することで、隣接ノードに関する情報の正当性を確認できる。

データにも同じ署名を含めることで、実際に来てないのに「隣から不法データが来た」という嘘を防ぐことができる。ただし、全データを署名することは、負荷の問題が発生する為に、ここには負荷低減の工夫が必要である。(署名と署名確認を確率的に行なうとか、レイティングサーバの要求で行なう等)

不法データリストのメンテナンス

不法データリストのメンテナンスは、手動で行なうので、ある程度のコストがかかる。しかし、このリストは完全なものである必要はなく、そのポリシーから見て、代表的な「悪のデータ」を部分的に持っていれば、ほぼレイティングの目的は達することができる。

また、ユーザがポリシーに積極的に同意している場合には、ユーザからのチクリを期待できる。「チクリ機能」として、ユーザが発見した「悪のデータ」をサーバに報告できるようにすれば、レイティングサーバの管理者は、それを承認するだけでよくなるので、かなり負荷は削減できる。

実装上の工夫(他のP2Pとの競合)

レイティングサーバは、上記の本来の機能の他に、自分の保持するトポロジーの情報によって、ネットワークの効率化に関するヒントを配信することもできる。

これは、完全分散型のP2Pネットワークに対する技術的な優位点となる。