見出し画像

金子勇とWinnyの夢を見た 第8話 Winnyの技術

※この記事は、Advent Calendar 2023 『金子勇とWinnyの夢を見た』の九日目の記事です。

 この記事では、2005年10月20日に出版された金子勇さん著『Winnyの技術』を参考にしています。この本は、東京大学の平木敬教授(※1)の尽力により企画され、被告人質問の3日後の2005年10月6日に出版されました。

2ちゃんねる

 2002年4月1日、2ちゃんねるダウンロード板の「MXの次はなんだ?Part60」のスレッドでWinnyの開発が宣言されました。

 それ以降、発言番号の47氏と呼ばれ、スレッドには次のようなお約束が決められました。

 2ちゃんねるは、1995年5月30日に開始した掲示板サービスです。スレッドフロート型掲示板で、内容は「カテゴリ」と呼ばれる分野単位で分けられています。カテゴリはジャンルごとに「」が作られており、板の中に話題ごとの「スレッド」を作り、その中に書き込みが行われます。

 当初は完全匿名で、「気兼ねなく,会社,学校,座敷牢からアクセスできるように,発信元は一切分かりません。お気楽ご気楽に書き込んで下さい。」と書かれており、IPアドレスを原則として保存しないことを約束し、発言を書き込んだ者が誰であるかを特定することが困難又は不可能であることを保証していました。

 しかし、広くSNS上で名誉毀損や殺害予告などの違法な書き込みが発生しており、掲示板の運営に対し発言の削除やIPアドレスの公開が求められるようになります。2002年5月に「プロバイダ責任制限法」が施行され、「発信者情報開示請求」に対応するため、2003年1月に全ての書き込みについてIPアドレスの記録および保存を開始します。2ちゃんねるは匿名掲示板ではなくなりました。

 2002年5月6日に最初のWinny1β1が公開されてから12月30日にWinny1正式版1.00が公開されるまでの間の書き込みは、IPアドレスが記録されていないため、金子さんが自分で書き込みをしたと認めない限り証拠にはなりません。実際、なりすましで書き込まれた記事もあるようです。

 加えて、Winny1正式版の公開時には、以下の書き込みも行っています。

Winny開発履歴

ざっくり、Winnyの開発は、以下のような変遷がありました。

  • 2002/04/01 Winnyの開発を宣言

  • 2002/05/06 Winny1β1公開

  • 2002/07/25 Winny1β18.0 簡易BBS機能を追加

  • 2002/12/30 Winny1正式版公開

  • 2003/04/07 Winny公開サイトを閉鎖(最終バージョン 1.14)

  • 2003/04/09 Winny2の開発を宣言

  • 2003/05/05 Winny2β1公開

  • 2003/11/27 警察の家宅捜査で開発停止(最終バージョン Winny2β7.1)

 金子さんは、ネットワークまわりのプログラミングは初めてだったのですが、2002年4月1日の開発宣言の後、4月5日には詳細設計が完了し、4月10日にはファイル交換ソフトとしての動作チェックが行われ、6割程度まで完成してしまいました。

 金子さんは、Winnyを暇なので作ったと言っていますが、彼の当時の生活は、仕事を1日で片付けてあと5日プログラミングし、1日休むという状況繰り返しており、殆ど寝てない状態だったようです。それでも、プログラミングを楽しみ、自分の作品が話題になっていくことで更に没頭していきました。

2ちゃんねるのダウンロード板への書き込み数は以下のようになっています。

Winnyの開発コンセプト

 Winnyの開発コンセプトとして、以下の3つが挙げられています。

  • 匿名性

  • ファイルの共有効率

  • 低レベルでのチューニング

匿名性

 ここで言う匿名性とは「情報の第一発信者を隠すこと」です。Winnyでは、公開されたファイルを細かいブロックに分割して暗号化し、他のノードに拡散させています。複数のノードに情報が分散し、間接的にやり取りすることで最初の発信者を特定できない様になっています。

プロキシ

 匿名化の技法で参考になったのは、プロキシサーバで使われている技術です。

 プロキシサーバ1980年代に登場した技術で、SquidDeleGateなどが有名です。特にDeleGateは、産業技術研究所の佐藤豊によって開発された、日本製汎用マルチプロキシサーバでした。初版は1994年です。おそらく、CERN Httpd Proxyが1994年で一番早いように記憶していますが、DeleGateも同年の1994年に発表されています。厳密なデータではありませんが、Apacheのmod_proxyが1995年、Squidは1996年などよりも先行していたと思います。

 プロキシサーバは、ファイアウォール・マシン上でHTTPプロトコルを中継します。加えて、中継する際にデータをキャッシュしておき、同一のリクエストが来たら、再度外部への通信をしないで、既にキャッシュしておいたデータを返すという機能が加わり、ネットワークの負荷を軽減する役割もありました。

 DeleGateは、漢字変換機能も備えていました。当時の主流のブラウザだったNCSA MosaicやMosaic NetscapeではShift-JISの漢字コードしか扱えなかったため、Proxyサーバー側で漢字コードを変換して表示させていたので、当時のインターネット利用者には非常に馴染みがあります。(※2)

 このプロキシ技術が日本初で生まれたことは、非常に興味深く、重要な意味があると思っています。そして、ネットワークの様々なパフォーマンス向上や、セキュリティ等のアクセス制御などの他、後に出てくる様々なインターネット技術で使われることになります。

キャッシュ

 FreenetとWinnyは、ファイルを小さなブロックに分割して暗号化しますが、そのファイルを拡散させる方法が異なっています。

 Freenetは、暗黙的に(あるいは強制的に)周囲のノードへ伝搬させますが、Winnyは、リクエストによってファイルが転送された際にキャッシュが残されます。人気のあるファイルほどネットワーク上に多くのキャッシュが作成され、全く人気のないファイルのキャッシュはどこにも作成されません。この方法で、不要なキャッシュの転送を減らしています。

 アップロードされるファイルはキーとキャッシュファイルが作成されます。キーにはファイル名やファイルサイズ、完全なキャッシュファイルを持っているノードのIPアドレスとポート番号などのメタデータが書かれており、キャッシュファイルから元のファイルに変換するために使用されます。キャッシュファイルは、ファイル本体を64Kバイトごとのブロックに分割し暗号化します。各ブロックにはヘッダがつけられており、非同期に送信され、ダウンロードされたブロックはキャッシュフォルダに置かれます。キャッシュされたブロックは、全てが揃っていなくても他のノードへそのまま送信できます。全てのブロックがダウンロードされると、完全なファイルを復元します。

 キーにはIPアドレスという位置情報が書かれているため、そのままだと発信者が特定されてしまいます。しかし、ファイルが拡散され別のノードに完全なキャッシュが出来上がると中継ノードとなり、キー内のIPアドレスが書き換わります。また、完全でなくても比較的多くのキャッシュが集まった場合、ある確率でIPアドレスが書き換わるようになっています。

 また、ファイルを持っていないノードのIPアドレスをキーファイルに書き込むことがあります。間違えられたノードは、正しいノードを探し出してキャッシュを転送する「橋渡し」をします。その時のキャッシュは、橋渡ししたノードに残され、新たな中継ノードとして機能します。

 中継ノードが増えることによって本来の発信者を特定しにくくなり、匿名性が上昇します。Freenetのように強制的にファイルを拡散させるほうが匿名性は高いのですが、共有効率を優先した結果の選択となっています。

BBSの匿名性

 Winnyの設計では、効率を重視し、敢えて匿名性を犠牲にしている部分があります。暗号化についても、当時と比べて現在は大きく進化しており、今の水準で評価するのは酷に思えます。後に開発されたSkeedCastは、Winnyをベースにしながら、更に洗練された技術が搭載されているようです。

 Winny2は、大規模匿名BBSシステムでもあります。手本とされたのは2ちゃんねるの掲示板です。2001年8月25日は、転送量の増大によって掲示板が消されるという「8月危機」が起こりました(※3)。P2Pで掲示板を作成すれば解決できると、ある種の義務感から開発されました。(※4)

 Winny2のBBS機能は開発途上にあったため、書き込みした人に対しての匿名性は確保されていましたが、スレッドを最初に立てた人に対しては、全く匿名性がありませんでした。これは、スレッド作成者が発言の管理するという発想から、作成者のIPアドレスが書き込まれていたからです。

 この点に関しては、今後のバージョンアップで解決していく予定でしたが、未実装のまま開発中止になってしまいました。

 2003年11月27日に京都府警はWinny利用者2名を逮捕していますが、この時点でWinnyの通信を解読していた訳ではありませんでした。

「府警はウィニー本体に対して暗号解読も試みたが、歯が立たなかった。このため別の方法を探したのです」

asahi.com ネット最前線

利用者が違法ファイルをアップロードしたことを知らせるスレッドを立てていたため、そのIPアドレスから違法ファイルがダウンロードできることを確認し、利用者を特定しました。

共有効率

多重ダウンロード

 1つのファイルを複数のノードから同時にダウンロードすることで高速にダウンロードできます。

 速度の早いタスクは、前方から後方に向かって集中的にダウンロードし、遅いタスクはできるだけ離れたブロックをダウンロードしていきます。

階層システム

 Winnyは、回線速度によって「上流/下流」という階層を持っています。より能力の高いノードに、なるべく多くのキーとキャッシュファイルを集め、効率よくファイル共有を行います。

クラスタリング

 Winnyには「自動ダウンロード機能」があり、ダウンロードしたいファイル名の一部を登録すれば、一致するファイルを検索してダウンロードできます。このキーワードの最初の3語が類似しているノードを選んでグループ分けしたものがクラスタリングです。

 この機能により、興味が似通ったノード同士が近くに配置され、検索やダウンロードを効率的にできます。

 この便利な機能のお陰でWinnyを起動し続けるノードが増え、ノードの維持率と検索効率を高めることに繋がりました。

低レベルでのチューニング

 Winnyは、Java VMやインタープリタのようなオーバーヘッドが大きいものを使用せず、Windows上のC++を使用し、低レベルでのチューニングができるようにしました。

 金子さんは、シミュレータの作成が得意なのです。Winnyのプログラミングを始める前に、階層化やクラスタリングがどのように行われるかを可視化するシミュレータを作成し、1万ノード程度の動作まで確認しています。

 この検証によって、実際のネット上で動かす前に大量のノード数できちんと動作する確認ができました。そして、公開後もネットワークが停止することなく稼働できたことが、Winnyの成功の大きな要因となりました。

 しかし、実際のネットワークでは、利用者のPCスペックや回線環境は多様で、どのようなファイルがどれだけ公開されるかは予測できません。実際二運用していく中で、各種パラメータを決定していきました。

海外での広まり

 Winnyのインターフェースは日本語が使用されており、多言語対応はしていません。したがって、海外で利用するためには、コンピュータ言語を日本語にプリセットするか、特別なプラグイン「W2kXpCJK」(Windows 2000/XPの地域エミュレーションと地域化)を使用することになります。

 そのような言語の制限もあり、日本語圏以外への広がりは多くなく、各国の利用状況は2008年にネットエージェントが公開したものに限られています。調査方法の詳細や調査結果についてのページは削除されており、どれほどの信憑性があるのかは不明です。

 また、Windows 7以降では動作しないため、欧米のユーザーは完全にいなくなりました。

まとめ

 Winnyの一番目を引くところは、大容量ファイルの転送効率の高さです。多重送信や中断した転送を再開できる機能は、とても便利でした。自動ダウンロード機能で、目的のファイルがどこからか集まってくる様子も、なかなかです。

 一方で、Winnyはダウンロード速度の制限なく、回線の下り帯域いっぱいまで利用する爆速アプリでした。結果として、企業、団体だけでなく、日本全体のネットワークインフラに高負荷を与えることとなってしまいました。

 また、自動ダウンロードを使っていると、常にディスクのアクセスが大量に発生し、ディスクの寿命を縮めるという問題もありました。当時は、大容量、高性能なディスクがよく売れたという話があります。

 利用者は2005年をすぎると減少していきます。安倍晋三官房長官の「Winnyを使わないで」(※3)キャンペーンがありましたが、当時は違法ファイルのダウンロードは犯罪でなかったので、どれほどの効果があったのかわかりません。それよりも利用者減少の大きな要因は、次第にウイルスに感染したファイルや、悪意のある実行ファイル、更にファイル名に関係ない偽ファイルが大量に流れるなど、期待するファイルがダウンロードしにくくなっていったことです。加えて、金子勇さんが2005年10月出版した「Winnyの技術」を受けてWinnyプロトコルが解析できるようになり、一部プロバイダーではWinnyのプロトコルをブロックしたり、転送量が多すぎるユーザーの制限するなどの対策が取られたことも要因になります。


※1

※2 『WWW大航海記』, インターネットマガジン バックナンバーアーカイブ、https://iwparchives.jp/wp-content/themes/twentytwelve/bn/pdf/im199412-028-sp1.pdf

※3 『8月危機』, Monapedia

※4 講演 金子勇,『「Winnyの技術」をもとに当時の到達点を明らかにする』, 「Winnyの技術と倫理」シンポジウム, 2006-01-28, https://www.glocom.ac.jp/wp-content/uploads/2020/10/chijo106_042-053.pdf

※4Do'nt Use the Winny


この記事が気に入ったらサポートをしてみませんか?