PR

2. P2PとShare

 P2Pネットワークは、サーバーとしてもクライアントとしても動作するノードの集合によって構成されています。クライアントサーバーモデルと異なり、一般的に、ネットワークに参加するコンピュータはそれぞれ同等の役割を担います。Winnyと同様、ShareもP2P型のファイル交換・共有システムであり、中央サーバーが存在せず、全ての処理をP2Pで行うピュアP2Pシステムです。

 このため、Shareアプリケーションは、不特定多数からの能動的な通信を受け付けるという性質があります。Shareプロトコルが実装されたプリケーションは、任意のShareノードに接続し、Shareプロトコルに則って通信を行う事ができます。よって、必要なShareプロトコルを実装したアプリケーションを作成すれば、対象システムでShareが動作しているか否かをネットワーク越しに判定する事ができます。また、対象ノードが保持している他のノードの一覧を取得できれば、それらノードに次々と接続を繰り返していく事で、原理的にShareネットワーク内のほぼ全てのノードを列挙する事が可能となります。さらに、ファイルの所在を示すキー情報を同時に収集する事で、指定されたファイルを所持しているノードの情報、つまり、指定ファイルの完全キャッシュを保持しているIPアドレスを列挙することもできます。

 これらシステムを実現するためには、Shareプロトコルの実装が必須です。Shareは、いくつかの暗号方式を組み合わせて通信を暗号化しているため、プロトコルを実装するためには、暗号アルゴリズムとその利用法を詳細に知る必要があります。

3. Shareプロトコルの概要

 ShareのプロトコルはTCPベースであり、ユーザーが設定する任意のポートで接続を聴取(Listen)します。ユーザーは、自らのIPアドレスとポート番号の対に特殊なエンコードを施した「ノード情報」をwebなどで公開し、他者の接続を促します。既にShareネットワークに存在しているノードが接続を受け付けると、接続元に他のノード情報を提供します。このため、ネットワークはどんどん広がっていきます。そして、このネットワーク上でファイルの検索や転送が行われます。

 ご存知の方も多いと思いますが、Shareのパケットは暗号化されています。このため、パケットをキャプチャするなどして、簡単にプロトコルの概要を把握したり、やりとりしている情報を確認したりする事はできません。Shareは、1024ビットRSA公開鍵暗号とRC6を併用しています(ハッシュアルゴリズムは、CRC-32とSHA-1を使っています)。基本的に公開鍵暗号がベースになっているため、Winnyと異なり、ネットワークに流れるトラフィックを傍受(sniff)して、やりとりしているファイルの情報を把握する事はできません。キーペアもシステム起動時に毎回ランダムに生成されるため、利用者にとっては本人同定のリスクも比較的少ないと言えます。このように、暗号化アルゴリズムは適切に利用・実装されていると言えます。

 しかし、公開鍵より前に送信される情報を分析する事で、ネットワークトラフィックからShareの通信を特定する事ができます。このため、技術的には、Shareの通信のみを効率的に遮断する事ができます。

 Shareネットワーク可視化システムについては、Winnyの可視化システム同様、あくまでノードの当事者となって相手ノードと通信すれば良いため、ネットワークトラフィックの分析は必要はありません。このため、詳細なトラフィック分析は不要です。

Shareのパケット暗号化は、あくまで第三者による盗聴を防ぐためのものであり、通信の遮断やネットワーク分析(ネットワーク内のノードやファイルキーの列挙)を意識したものではありません。