TCP上で動作する暗号機能付き独自プロトコルです。順を追って,説明しましょう。

 Winnyは,相手との通信にTCPを使います。P2Pでデータをやりとりするためには,自分から相手にTCPで接続しに行くだけでなく,通信相手からの接続を待ち受けるTCPポート番号が必要になります。WebサーバーがTCPの80番ポートでWebブラウザからの接続要求を待ち受けているのと同じです。Winnyの場合,待ち受けポート番号は1024番以上からランダムに選ばれます。

 そしてWinny同士の通信内容はすべて暗号化されています。暗号化と復号に同じ鍵を使うRC4という共通鍵暗号方式を使って,やりとりするデータを暗号化します。このため,流れるパケットをのぞいても,内容がどんなものなのかだけでなく,Winnyの通信なのかどうかも,ひと目ではわかりません。RC4は,Webアクセスや無線LANの暗号化でも使われているように,正しく使えば簡単には解読できない暗号アルゴリズムです。ただWinny作者の金子勇氏が著書『Winnyの技術』でも認めている通り,Winnyでは暗号のかけ方が甘いので,実際には比較的簡単に解読できます。つまり,Winnyの暗号化はのぞき見を防止できるという程度の効果しかありません。

 それは,不特定多数の相手と共通鍵暗号を使って通信し,クライアント・ソフトがお互いの手元にある(プログラムを解析できる)以上,どんなに強力な暗号を施しても絶対に解読できるため,最低限の秘匿性を守れるように設計されたためです。つまり,不特定多数のクライアント・ソフト間で暗号化と復号を可能にするには,事前に暗号鍵(あるいは暗号鍵を作る元データ)をソフトに組み込んでおく必要があるため,クライアント・ソフトを解析すれば暗号鍵を探し出して通信データを解読できるというわけです。実際,日経NETWORK編集部は,簡単なツールを使ってWinnyの通信データの解読に成功しました。

 また,WinnyがほかのWinnyパソコンと接続を試みる際にやりとりするパケットには,自分がつながっている回線のスピードや,接続状態(インターネットに直接つながっているか,ブロードバンド・ルーター経由かなど)を表すパラメータも書き込まれています。Winnyはこうしたパラメータを見て,最適な通信相手(より高速に接続できる相手など)を探し出すのです。


本記事は,日経NETWORK2006年5月号特集1『徹底解明 Winny&暴露ウイルス』に掲載した内容の一部をITpro向けに編集したものです