「Winny作者事件二審無罪判決で今後どうなるか」といったエントリを書かなくてはと思っていたが、まだ書いていない。書きたいのは次の点など。
ところで、開発中の「Nyzilla」は、かなり開発が進み、残すところあと1つを実装すれば、機能的には完成といったところとなった。
最初の接続時には注意書きが出る。*1
このプログラムは、いわゆる「クローラ」ではなく、アドレスバーの「接続先」に入力されたホストにしか接続しないものであり、接続先のWinnyノードから受信した情報だけをもとに表示する。*2
今回、「ファイル保持の真偽」を判定する機能を付けた。図2のように、緑背景に「(+)」と表示されているのは、保持している(「Cache」フォルダないしアップロード用フォルダに入っている)らしいと推定(「陽性判定」)したファイルで、「?」と表示されているのは、まだ判別できておらず、不明なファイルである。
この判別は、受信した「キー消滅判定タイマー」の値*3(単位は秒)の変化に基づいている。一次放流者のアップロード用フォルダに入っているファイルと、共有者の「Cache」フォルダに入っているファイルについては、この値が、1500〜1599の間でランダムにセットされるようで、セットされるタイミングは謎なのだが、頻繁に再セットされているようである。ただし、消滅タイマー値がこの範囲内だからといって、このノードが本当にそれを保持しているとは限らない。Winnyにはいわゆる「中継機能」があり、最低でも4%の確率で起きるとされる*4ソースIPアドレスの書き換えによって、他のノードからのキーを(ここがソースのキーとして)受信したという可能性がある。しかし、その場合、消滅タイマーの値は時間とともに減少し、再びそのキーを観測したときに1499以下になっていくようだ。したがって、同じファイルのキーを何回も受信するのを待てば、アドレス書き換えキーか否かを判別できるというわけである。
図3のように、1499以下になったファイルは、「陰性判定」として灰色背景に「(-)」で表示される。
メニューから、判定結果ごとに表示することができる(図4)。
次の図5は、判定が変化した場合の様子である。「(-)+」は、一度は陽性判定されたものが、現在は陰性判定になっていることを表しており、「(+)-」は、陰性判定されたものが現在陽性判定になっていることを表している。
このような判定の変化は、判定アルゴリズムが不十分なために起きた誤判定*5という可能性のほかに、実際にファイルが削除されたり、追加されたとき(ダウンロードの最中だったとき)にも起き得る。また、持っているのに持っていないと判定される事態(偽陰性判定)は、当該ノードが、保持しているのと同じファイルのキーを他ノードから受信した際にも起きているのではないかと考えられる*6が、これについてはまだ確認できていない。(その結果として、陽性→陰性→陽性という経過をたどることがあるようだ。)
こうした判定に用いた「消滅タイマー」値の直近の履歴を、以下の図のようにして、ツールチップで閲覧することができる。
図6上は、最初に消滅タイマー値「1529」として受信したキーを、44秒後に「1484」として、さらにその453秒後に「1054」として再び受信したことを意味している。この場合はこの時点では陰性判定である。同様に同図下は、消滅タイマー値が、97秒後、3秒後、195秒後、85秒後にそれぞれ、「1562」、「1554」、「1526」、「1554」、「1561」として観測されたことを意味しており、値が時刻に関係なく前後していることから、陽性判定となっている。
観測結果は、文字列検索でフィルタして表示することもできる。次の図(上)は、陽性判定のもののうち「仁義」または「殺人」をファイル名等に含むものを抽出して閲覧した様子である。表を任意の列で並べ替えることもできるので、同じファイル名で異なるIDのファイルの存在も把握できる(図7の下)。
このようにして、流出ファイルを共有している輩の実態を知ることができるようになる。
一方、「他のノード」機能では、アドレスバーに表示中の接続先から受信した情報から得た、他のWinnyノードの一覧を表示しており、次の図のように、「フィルタ」欄に文字列を入力することで、「marunouchi」のWinnyユーザを一覧することができる。
ここから行を選んで、ダブルクリックすることで、そのノードを接続先とした新しいウィンドウを開くことができる。
次の図は、ここから辿ってたまたま訪れた、成年コミックを専門に共有しているサイトの様子である。
陽性判定のものの全てが「成年コミック」であり、約8,700個、675ギガバイトものファイルが共有されている。無駄なファイルの共有がないことから、「Cache」フォルダが管理されているのではないかと考えられ、明確な意思を持ってこれらを共有状態に供している様子が窺える。
こうした大量のファイルを共有しているサイトの実態を調査するには、大量のキーを受信する必要があるが、このくらいの規模でも、30分から1時間ほどで全貌を把握することができるようである(「接続積極度」が「中」の設定でも)。
次の図は、図9のサイトの「陽性判定」以外のファイルも閲覧した様子で、灰色の部分を見ると、「成年コミック」でないものがちゃんと陰性判定されている(他のノードから流れてきたキーと判断されている)ことがわかる。
次の図は、別のサイトで、ここは専門性なく無差別に共有状態にしていると考えられるサイトの様子である。「wmv」や「rar」といった拡張子で無差別に集めたように見受けられる。
ここで重要なのは、こうしたタイプのサイトでは、(おそらく本人が望んだものではなく)児童ポルノまで共有してしまっていることがある点である。次の図は、図11の画面で、英語圏の小児性愛者らの間で通用する隠語と思しき英字の略語で検索した様子である。
2つの該当ファイルが紛れ込んでいる。こうした事態が生ずることが、他の(諸外国で広く利用されている)ファイル交換・共有ソフトにない、Winny等の固有の問題性である。この実態が(利用者にも利用者以外にも)広く知られるべきである。
ちなみに、何かを専門に共有しているサイトというのはかなり多くあるようで、てきとうにブラウズしているだけで、そういったサイトに行き当たる。次の図13は、別のコミック専門の共有サイトである。ここでは、99.9%が陽性と判定されるまで受信した様子である。出現回数がそれぞれのファイルで40回前後となっており、ここが保持していることは確実といえる。
次の図は、8月16日の日記の図6に示していた、固定IPアドレスのサイトをブラウズした様子である。2テラバイトを超えるファイルを共有している様子が窺える。
こういったサイトがファイルの安定供給源となっていると考えられる。
なお、このサイトの場合は、次の図のように、ある種のファイルは大量に共有しているが、流出ファイルは共有していない様子が窺える。
最後に、「完成まで残すところあと1つ」というのは、次の機能である。
これができたらリリースに向けて最終デバッグをしたい。
なお、Nyzillaをリリースする趣旨は、以前から述べている通りである。
また、金子氏も著書で以下のように述べている。
しかしWinnyの場合、通信相手は不特定であり、Winnyプロトコルを使う誰もが通信相手になれます。たとえば、Winnyプロトコルを真似てWinnyノードに接続するようなプログラムの作成ができれば、接続相手のキャッシュファイルを観察することも可能です。このため、たとえどんなに強い暗号方式で通信内容を暗号化したとしても、通信相手は解読可能であり、通信内容は隠しようがありません。
また、Winnyのキャッシュファイルは、そもそも公開されているデータと考えるべきです。
金子勇著「Winnyの技術」(アスキー出版、2005年)p.151より
*1 もう少し書き足さないといけないと思っているところ。
*2 そのほかに、DNSへ逆引きの問合せは発生する。
*3 Winnyでは、ファイルのありかを示す「キー」について、存在しなくなったWinnyノード発のキーがいつまでも還流しないようにするために、キー消滅判定タイマーの値を時間とともに減らしていくことで、25分ほどの有効期限が設けられている。「Winnyの技術」p.120 参照。
*4 「Winnyの技術」p.111 参照。
*5 判定アルゴリズムは改良しており、現在の版では、図5の画面のときより判定の変化は少なくなっている。
*6 情報処理学会論文誌 Vol.50, No.9「Winnyネットワークに対するインデックスポイズニングを用いたファイル流通制御方式」参照。
高木浩光@自宅の日記
日記予定、Nyzillaの進捗 より
『接続先のWinnyノードから受信した情報だけをもとに表示する。*2』機能をつくれるとこが..