ノードリストのことをすっかり忘れていたので,書いておきます.
IPアドレスの後ろにスペースを挟んでポート番号が続いた文字列を, 暗号化して,16進文字列にしたものです.
暗号鍵を探すと,"opiewf6ascxlv"という文字列が見つかりますが, 先頭の「o」の部分は実際には使わず乱数で置き換えているようです. で,RC4で暗号化したデータの頭にそのときの乱数を1バイト付加してから,16進文字列 に変換しています.で,頭に「@」を付けて完成.
Winnyは匿名性の高いシステムと言われていますが, キーが経由してきたノードや検索したノードのIPがネットワーク上を流れるので, どのユーザが何をダウンロードしようとしているのか,ある程度知ることが出来ます.
また,パケットの暗号化も公開鍵を使っているわけではなく, パケットを横取りすれば簡単に中身が見えてしまいます. まぁ,相手が誰なのか認証しているわけではないので,公開鍵を使った ところで同じことなのですが.
トリップ文字列もキャッシュの構造が分かれば,簡単に偽造できてしまいます. 一応,トリップを生成する時はまともな計算(RSA?)をしているようですが, キャッシュには生成されたトリップ文字列しか含まれないので 本物かどうか検証できません.
この辺りを改善してみれば,もう少し面白いことが出来そうですが…. 機会があれば,自分でも作ってみたいところです.
検索やキーの拡散に上流,下流という空間を意識しているようですが, クラスタ形成のしやすさを考えると,もっと次元を増やして,周囲ノードとの 相対距離や方向を持たせてみるのも,試してみたいところ. そうすれば,検索やキーの移動にベクトルを持たせて,遠方ノードに 対する検索の効率を上げられるんじゃないかなぁ…と思うのですが. 直接繋がっていないノードの識別をIPではなく,座標で認識できるし. 検索範囲の円錐の鋭さをベクトルの長さにして, グラフィカルに表示するツールなんかがあると,視覚的にも面白そう. Winnyみたいなシステムで上手く動くかどうかは知りませんが.