(57)【要約】【課題】  Ｐ２Ｐネットワークでの情報検索効率を向上させる。【解決手段】  子装置４から情報公開要求７を受け取った場合、公開情報格納手段１ａにより、公開情報記憶手段１ｂに公開情報が格納される。情報公開要求転送手段１ｃにより、情報公開要求７が親装置６に対して転送される。また、子装置５から情報検索要求８を受け取った場合、検索条件格納手段１ｄにより、検索条件記憶手段１ｅに対して検索条件が格納される。情報検索要求転送手段１ｆにより、情報検索要求８が親装置６に対して転送される。その後、検索条件記憶手段１ｅに記憶された検索条件に基づいて、公開情報記憶手段１ｂに記憶された公開情報が検索される。検索によって公開情報が合致した場合、情報検索要求８の送信元である検索元装置３に対して公開情報が送信される。【選択図】  図１
2005159911.tif 000002
【特許請求の範囲】
【請求項１】
ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索方法において、
前記ネットワークに接続された情報検索装置の公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
前記ネットワーク内の装置間の関係が木構造で定義されており、前記情報検索装置の情報公開要求転送手段が、前記情報公開要求を前記木構造における親装置に対して転送し、
前記情報検索装置の検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
前記情報検索装置の情報検索要求転送手段が、前記情報検索要求を前記木構造における前記親装置に対して転送し、
前記情報検索装置の検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
前記情報検索装置の検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する、
ことを特徴とする情報検索方法。
【請求項２】
前記情報公開要求には情報公開要求の送信元である公開元装置までの通信路情報が含まれており、前記公開情報格納手段は、前記情報公開要求を受け取った際には、前記通信路情報を前記公開情報記憶手段に格納し、
前記検索結果通知手段は、前記検索条件に前記公開情報が合致した場合、前記検索元装置に対して、前記公開情報と前記公開元装置までの前記通信路情報とを送信する、
ことを特徴とする請求項１記載の情報検索方法。
【請求項３】
前記情報公開要求の送信元である公開元装置が、情報の公開指示に応じて、前記木構造を構成する複数の前記情報検索装置の中から少なくとも１つの前記情報検索装置を選択し、選択した前記情報検索装置に対して前記情報公開要求を匿名通信によって送信する、
ことを特徴とする請求項１記載の情報検索方法。
【請求項４】
前記情報検索要求の送信元である検索元装置が、情報の検索指示に応じて、前記木構造を構成する複数の前記情報検索装置の中から少なくとも１つの前記情報検索装置を選択し、選択した前記情報検索装置に対して、検索条件を含む前記情報検索要求を匿名通信によって送信する、
ことを特徴とする請求項１記載の情報検索方法。
【請求項５】
前記検索手段は、新たな前記検索条件が前記検索条件記憶手段に記憶されたとき、新たに記憶された前記検索条件に合致する前記公開情報を、前記公開情報記憶手段から検索することを特徴とする請求項１記載の情報検索方法。
【請求項６】
前記検索手段による検索は、新たな前記公開情報が前記公開情報記憶手段に記憶されたとき、新たに記憶された前記公開情報が、既に前記検索条件記憶手段に記憶されている前記検索条件に合致するか否かを判断することを特徴とする請求項１記載の情報検索方法。
【請求項７】
前記公開情報格納手段は、前記公開情報記憶手段に記憶された前記公開情報が所定の条件を満たしたとき、前記公開情報を削除することを特徴とする請求項１記載の情報検索方法。
【請求項８】
ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索方法において、
前記情報公開要求の送信元である公開元装置が、情報の公開指示に応じて、前記ネットワーク内の複数の情報検索装置の中から少なくとも１つの前記情報検索装置を選択し、選択した前記情報検索装置に対して前記情報公開要求を匿名通信によって送信し、
前記情報検索要求の送信元である検索元装置が、情報の検索指示に応じて、前記ネットワーク内の複数の前記情報検索装置の中から少なくとも１つの前記情報検索装置を選択し、選択した前記情報検索装置に対して、検索条件を含む前記情報検索要求を匿名通信によって送信し、
前記ネットワークを構成する前記情報検索装置それぞれにおいて、
公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
情報公開要求転送手段が、前記情報公開要求を隣接する他の情報検索装置に対して転送し、
検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
情報検索要求転送手段が、前記情報検索要求を隣接する他の情報検索装置に対して転送し、
検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記検索元装置に対して検索結果を匿名通信によって送信する、
ことを特徴とする情報検索方法。
【請求項９】
ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索装置において、
他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納する公開情報格納手段と、
前記ネットワーク内の装置間の関係が木構造で定義されており、前記情報公開要求を前記木構造における親装置に対して転送する情報公開要求転送手段と、
他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納する検索条件格納手段と、
前記情報検索要求を前記木構造における前記親装置に対して転送する情報検索要求転送手段と、
前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索する検索手段と、
前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する検索結果通知手段と、
を有することを特徴とする情報検索装置。
【請求項１０】
ピアツーピア方式のネットワーク上で公開されている情報を検索するための情報検索プログラムにおいて、
コンピュータに、
公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
前記ネットワーク内の装置間の関係が木構造で定義されており、情報公開要求転送手段が、前記情報公開要求を前記木構造における親装置に対して転送し、
検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
情報検索要求転送手段が、前記情報検索要求を前記木構造における前記親装置に対して転送し、
検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する、
処理を実行させることを特徴とする情報検索プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ピアツーピア（Ｐ２Ｐ：Peer to Peer）ネットワーク上で共有する情報を検索するための情報検索方法、情報検索装置、および情報検索プログラムに関し、特に多数の装置において公開された情報を一括して検索するための情報検索方法、情報検索装置、および情報検索プログラムに関する。
【背景技術】
【０００２】
近年の情報通信技術の発達に伴い、ネットワークを介した様々なサービスが提供されている。このとき、提供されるサービスの形態も多種多様であり、新たな形態のサービスを提供するには、そのサービスに応じたネットワーク上の構成要素の追加や変更が必要となる場合もある。
【０００３】
また、インターネットのような広域ネットワークでは、伝送されるパケットが悪意の第三者に渡る危険性がある。そのような場合でも、パケットの内容の秘匿性や通信相手の匿名性を保つ必要がある。
【０００４】
そこで、ネットワークを介したサービス提供の普及に伴い、ネットワーク構成が容易に変更できること、およびネットワークを介した通信に関する匿名性を保つことが望まれている。
【０００５】
・ネットワーク構成の変更の容易性について
構成を容易に変更できるネットワークとしてＰ２Ｐネットワークがある。Ｐ２Ｐネットワークとは、平等な機能を持ったノード（Peer）同士がブローカレス（中央集権的な管理部が無いこと）で直接通信する形態のネットワークである。
【０００６】
Ｐ２Ｐネットワークは、構成を動的に変更可能であるという特徴を持つ。すなわち、Ｐ２Ｐネットワークでは、ノードのネットワークへの参加やネットワークからの退場は任意である。そのため、Ｐ２Ｐネットワーク上で通信を行う場合、その時点で参加しているノード間でＰ２Ｐの通信を行いながら、送信相手のノードへパケットを転送する。Ｐ２Ｐネットワークを用いれば、特定のサーバを経由せずにコンピュータ同士の情報共有が可能となる。
【０００７】
・情報漏洩防止について
インターネット上のデータの送受信者の匿名性を守るための様々な技術が考えられている。データの送受信の匿名性を守るためには、全てのデータ通信を暗号化すると共に、パケットの伝送経路も漏洩しないようにする必要がある。
【０００８】
パケットの伝送経路の漏洩を防止するには、複数の中継地（ルータ）を活用することにより、通信中のパケットの受信元や転送先等の情報の漏洩をシャットアウトする必要がある。このような伝送経路の漏洩防止手法としては、「オニオンルーティング」と名付けられた手法が知られている（たとえば、特許文献１参照）。
【０００９】
オニオンルーティングの手法では、オニオンルータと呼ばれる堅牢で固定的なルータがルーティングを司る。送信端末では、送信相手までの伝送経路を予め決定し、パケットを中継する各オニオンルータの公開鍵を用いてパケットの伝送経路に関する情報を暗号化する。
【００１０】
パケットを受信したオニオンルータは、自身の秘密鍵で伝送経路に関する情報を復号する。この復号によりパケットの次の転送先が判別され、オニオンルータは次のノード（オニオンルータ若しくは受信端末）にパケットを転送する。このように、各オニオンルータでは、次の転送先以外隠蔽された状態を保つことができるため、最終的な受信端末の情報を特定することができない。また、オニオンルータにおいて、パケットを送出する際に、それまでの伝送経路に関する情報をパケットに付加しないことで、送信元の漏洩を防止できる。
【００１１】
このように、オニオンルーティングでは、データパケットが目的地までの経路情報を多重に暗号化して保持することで、ルーティングを行う各ノードやネットワーク上でのスキミングを行う者に対して経路情報の一部しか参照できないようにしている。
【特許文献１】米国特許第６、２６６、７０４号
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかし、前述したＰ２Ｐネットワークにおける情報共有技術では、Ｐ２Ｐネットワーク上での検索の効率化が考慮されていなかった。そのため、ネットワーク上の情報の検索をリアルタイムに効率よく行うことができなかった。
【００１３】
たとえば、Ｐ２Ｐネットワーク上で公開されている全ての情報の中から、任意の検索条件を満たす情報を検索する場合、検索要求をブロードキャストにより全てのノードに対して送信する必要がある。このような検索をＰ２Ｐネットワーク内の多数のノードが同時に行うと、ネットワークの通信効率が低下してしまう。
【００１４】
また、Ｐ２Ｐネットワークに対してオニオンルーティング等の匿名性強化を行うと、ネットワーク上での情報のキャッシュを有効に行うことができないという問題が生じる。すなわち、Ｐ２Ｐ以外のネットワークでは、通信される情報を、その情報を中継したノードでキャッシュしておくことで、同一情報に対する以後のアクセスの効率化を図ることができる。ところが、Ｐ２Ｐネットワーク上の通信において情報発信者の匿名性の強化を行った場合、発信された情報がＰ２Ｐネットワーク上の不特定多数のノードにキャッシュされていても、キャッシュされた情報は情報発信者との関係付けを失っている。そのため、キャッシュされた情報を通じて情報発信者と受信者との間で双方向コミュニケーションを行うことができない。
【００１５】
しかも、ネットワーク上での情報量は増大化する傾向にあり、公開されている情報をそのまま各ノードでキャッシュしていたのでは、各ノードにかかる負荷が過大となる。そのため、公開情報のメタデータ（公開情報の特徴等を示すデータ）をキャッシュすることが考えられる。公開情報のメタデータをキャッシュさせた場合、そのメタデータを参照した情報受信側のノードから、情報発信側のノードにアクセスし、公開情報の実体を取得できることが必要である。
【００１６】
ところが、前述のように匿名性を強化していると、キャッシュされた情報と情報の発信者との間の関係付けが失われている。そのため、情報受信側のノードから情報発信者側のノードにアクセスし、公開情報の実体を取得することができなかった。すなわち、匿名性を強化したＰ２Ｐネットワークでは、情報のキャッシュによる情報検索の効率化を図ることが困難だった。
【００１７】
本発明はこのような点に鑑みてなされたものであり、Ｐ２Ｐネットワークでの情報検索効率を向上させることができる情報検索方法、情報検索装置、および情報検索プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１８】
本発明の第１の態様では上記課題を解決するために、図１に示すようなピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索方法が提供される。この情報検索方法では、情報検索装置１の公開情報格納手段１ａが、他の装置から公開情報を含む情報公開要求７を受け取った場合、公開情報記憶手段１ｂに対して公開情報を格納する。このとき、ネットワーク内の装置間の関係が木構造で定義されており、情報検索装置１の情報公開要求転送手段１ｃが、情報公開要求７を木構造における親装置６に対して転送する。また、情報検索装置１の検索条件格納手段１ｄが、他の装置から検索条件を含む情報検索要求８を受け取った場合、検索条件記憶手段１ｅに対して検索条件を格納する。このとき、情報検索装置１の情報検索要求転送手段１ｆが、情報検索要求８を木構造における親装置６に対して転送する。その後、情報検索装置１の検索手段１ｇが、検索条件記憶手段１ｅに記憶された検索条件に基づいて、公開情報記憶手段１ｂに記憶された公開情報を検索する。そして、検索によって公開情報が合致した場合、情報検索装置１の検索結果通知手段１ｈが、情報検索要求８の送信元である検索元装置３に対して公開情報を送信する。
【００１９】
このような情報検索方法によれば、他の装置から情報公開要求７を受け取った場合、公開情報記憶手段１ｂに公開情報が格納され、情報公開要求７が親装置６に対して転送される。また、他の装置から情報検索要求８を受け取った場合、検索条件記憶手段１ｅに対して検索条件が格納され、情報検索要求８が親装置６に対して転送される。その後、検索条件記憶手段１ｅに記憶された検索条件に基づいて、公開情報記憶手段１ｂに記憶された公開情報が検索される。検索によって公開情報が合致した場合、情報検索要求８の送信元である検索元装置３に対して公開情報が送信される。
【００２０】
また、本発明の第２の態様では上記課題を解決するために、ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索方法において、前記情報公開要求の送信元である公開元装置が、情報の公開指示に応じて、前記ネットワーク内の複数の情報検索装置の中から少なくとも１つの前記情報検索装置を選択し、選択した前記情報検索装置に対して前記情報公開要求を匿名通信によって送信し、前記情報検索要求の送信元である検索元装置が、情報の検索指示に応じて、前記ネットワーク内の複数の前記情報検索装置の中から少なくとも１つの前記情報検索装置を選択し、選択した前記情報検索装置に対して、検索条件を含む前記情報検索要求を匿名通信によって送信し、前記ネットワークを構成する前記情報検索装置それぞれにおいて、公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、情報公開要求転送手段が、前記情報公開要求を隣接する他の情報検索装置に対して転送し、検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、情報検索要求転送手段が、前記情報検索要求を隣接する他の情報検索装置に対して転送し、検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記検索元装置に対して検索結果を匿名通信によって送信する、ことを特徴とする情報検索方法が提供される。
【００２１】
このような情報検索方法によれば、公開元装置により、情報の公開指示に応じて、複数の情報検索装置の中から少なくとも１つの情報検索装置が選択され、選択された情報検索装置に対して情報公開要求が匿名通信によって送信される。また、検索元装置により、情報の検索指示に応じて、複数の情報検索装置の中から少なくとも１つの情報検索装置が選択され、選択された情報検索装置に対して検索条件を含む情報検索要求が匿名通信によって送信される。そして、情報検索装置それぞれでは、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して公開情報が格納され、情報公開要求が隣接する他の情報検索装置に対して転送される。また、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して検索条件が格納され、情報検索要求が隣接する他の情報検索装置に対して転送される。さらに、検索条件記憶手段に記憶された検索条件に基づいて、公開情報記憶手段に記憶された公開情報が検索され、公開情報が合致した場合、検索元装置に対して検索結果が匿名通信によって送信される。
【００２２】
また、本発明の第３の態様では上記課題を解決するために、ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索装置において、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納する公開情報格納手段と、前記ネットワーク内の装置間の関係が木構造で定義されており、前記情報公開要求を前記木構造における親装置に対して転送する情報公開要求転送手段と、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納する検索条件格納手段と、前記情報検索要求を前記木構造における前記親装置に対して転送する情報検索要求転送手段と、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索する検索手段と、前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する検索結果通知手段と、を有することを特徴とする情報検索装置が提供される。
【００２３】
このような情報検索装置によれば、上記第１の態様に示す情報検索方法に係る処理が情報検索装置上で実現される。
また、本発明の第４の態様では上記課題を解決するために、ピアツーピア方式のネットワーク上で公開されている情報を検索するための情報検索プログラムにおいて、コンピュータに、公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、前記ネットワーク内の装置間の関係が木構造で定義されており、情報公開要求転送手段が、前記情報公開要求を前記木構造における親装置に対して転送し、検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、情報検索要求転送手段が、前記情報検索要求を前記木構造における前記親装置に対して転送し、検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する、処理を実行させることを特徴とする情報検索プログラムが提供される。
【００２４】
このような情報検索プログラムに従ってコンピュータを動作させれば、上記第１の態様に示す情報検索方法に係る処理がコンピュータ上で実現される。
【発明の効果】
【００２５】
以上説明したように本発明の第１、第３、第４の態様では、ネットワーク内の装置間の関係を木構造で定義し、受け取った公開情報を記憶すると共に親装置へ送信し、受け取った検索条件を記憶すると共に親装置へ送信するようにした。さらに、記憶した検索条件に合致する公開情報が記憶されていたとき、情報検索要求の送信元に対して公開情報を送信するようにした。これにより、ピアツーピアのネットワークにおいて、検索元装置の木構造で上位に位置する装置に記憶された公開情報を検索するだけで、ネットワーク内で公開されている全ての情報の検索が可能となる。その結果、検索効率が向上する。
【００２６】
また、本発明の第２の態様では、公開元装置は、匿名通信により複数の情報検索装置のうちの１つに対して情報公開要求を送信し、検索元装置は、匿名通信により複数の情報検索装置の内の１つに対して情報検索要求を送信するようにした。各情報検索装置は、受け取った情報公開要求と情報検索要求とを記憶し、他の隣接する装置に転送する。そして、検索条件に公開情報が合致したとき、検索結果を検索元装置に対して送信するようにした。これにより、匿名性を保ったまま、ピアツーピアのネットワーク上での効率的な情報検索を行うことができる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明の実施の形態を図面を参照して説明する。
まず、実施の形態に適用される発明の概要について説明し、その後、実施の形態の具体的な内容を説明する。
【００２８】
図１は、実施の形態に適用される発明の概念図である。図１には、ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索装置１が示されている。この情報検索装置１は、公開情報格納手段１ａ、公開情報記憶手段１ｂ、情報公開要求転送手段１ｃ、検索条件格納手段１ｄ、検索条件記憶手段１ｅ、情報検索要求転送手段１ｆ、検索手段１ｇ、および検索結果通知手段１ｈを有している。
【００２９】
また、ネットワーク上の装置間の関係が木構造で定義されている。たとえば、情報検索装置１に対する子装置４，５や親装置６が定義されている。そして、木構造を構成している各装置に対して、情報公開要求７や情報検索要求８が渡される。図１の例では、公開元装置２から情報公開要求７を送信され、検索元装置３から情報検索要求８が送信されている。
【００３０】
公開情報格納手段１ａは、他の装置から公開情報を含む情報公開要求７を受け取った場合、公開情報記憶手段１ｂに対して公開情報を格納する。たとえば、木構造における子装置４から情報公開要求７が渡される。
【００３１】
公開情報記憶手段１ｂは、コンピュータによって読み取り可能な情報を記憶可能な記録媒体内の記憶領域である。公開情報記憶手段１ｂに格納された公開情報は、情報のキャッシュ処理と同様に、一定期間使用されない等の所定の条件を満たしたときに削除することができる。
【００３２】
情報公開要求転送手段１ｃは、受け取った情報公開要求７を木構造における親装置６に対して転送する。このように木構造を構成する各装置が情報公開要求７をその親装置に対して転送していくことで、情報公開要求７が木構造における最上位（ルート）の装置まで転送される。
【００３３】
検索条件格納手段１ｄは、他の装置から検索条件を含む情報検索要求８を受け取った場合、検索条件記憶手段１ｅに対して検索条件を格納する。たとえば、木構造における子装置５から情報検索要求８が渡される。
【００３４】
検索条件記憶手段１ｅは、コンピュータによって読み取り可能な情報を記憶可能な記録媒体内の記憶領域である。検索条件記憶手段１ｅに格納された検索条件は、情報のキャッシュ処理と同様に、一定期間使用されない等の所定の条件を満たしたときに削除することができる。
【００３５】
情報検索要求転送手段１ｆは、情報検索要求８を木構造における親装置６に対して転送する。このように木構造を構成する各装置が情報検索要求８をその親装置に対して転送していくことで、情報検索要求８が木構造における最上位（ルート）の装置まで転送される。
【００３６】
検索手段１ｇは、検索条件記憶手段１ｅに記憶された検索条件に基づいて、公開情報記憶手段１ｂに記憶された公開情報を検索する。たとえば、検索手段１ｇは、新たな検索条件が検索条件記憶手段１ｅに格納されたとき、その検索条件に合致する公開情報を、公開情報記憶手段１ｂ内から検索する。また、検索手段１ｇは、新たな公開情報が公開情報記憶手段１ｂに格納されたとき、その公開情報が検索条件記憶手段１ｅに格納されている各検索条件に合致するか否かを判断する。
【００３７】
検索結果通知手段１ｈは、検索条件に公開情報が合致した場合、該当する検索条件の情報検索要求８の送信元である検索元装置３に対して検索結果を送信する。検索結果には、たとえば、検索条件に合致した公開情報の全部または一部を含める。また、公開情報と共に、公開情報の送信元である公開元装置２の識別情報が格納されている場合、その識別情報を検索結果として検索元装置３に送信すればよい。検索元装置３は、公開元装置２の識別情報に基づいて公開元装置２にアクセスし、公開情報を取得することができる。
【００３８】
このような構成の情報検索装置１によれば、子装置４から情報公開要求７を受け取った場合、公開情報格納手段１ａによって、公開情報記憶手段１ｂに公開情報が格納される。また、情報公開要求転送手段１ｃによって、情報公開要求７が親装置６に対して転送される。
【００３９】
また、子装置５から情報検索要求８を受け取った場合、検索条件格納手段１ｄによって、検索条件記憶手段１ｅに対して検索条件が格納される。また、情報検索要求転送手段１ｆによって、情報検索要求８が親装置６に対して転送される。
【００４０】
その後、検索手段１ｇによって、検索条件記憶手段１ｅに記憶された検索条件に基づいて、公開情報記憶手段１ｂに記憶された公開情報が検索される。検索によって公開情報が合致した場合、検索結果通知手段１ｈによって、情報検索要求８の送信元である検索元装置３に対して検索結果が送信される。
【００４１】
このように、情報公開要求７と情報検索要求８とを、木構造の上位の装置に順次転送すると共に、それらの要求を中継した装置に置いて公開情報や検索条件を格納するようにした。そのため、公開元装置２は、木構造を構成する何れかの装置に情報公開要求７を送信すれば、その情報公開要求７は最上位の装置まで転送される。同様に、検索元装置３は、木構造を構成する何れかの装置の情報検索要求８を送信すれば、その情報検索要求８は最上位の装置まで転送される。従って、情報公開要求７に含まれる公開情報は、木構造上の何れかの装置において、必ず情報検索要求８に含まれる検索条件に基づく検索の対象となる。すなわち、公開されている情報の検索漏れは無くなる。
【００４２】
しかも、木構造を構成する全ての装置に対して情報検索要求を送信する必要は無いため、検索効率が向上する。さらに、各装置において検索条件を記憶しておき、後で公開された情報があっても、先に格納されていた検索条件に基づいて検索するようにすることで、検索元装置３のユーザは、目的の情報を適宜受け取ることが可能となる。
【００４３】
ところで、公開元装置２から木構造内の装置（たとえば子装置４）に対して情報公開要求７を送信する際に、匿名通信路を経由して送信することができる。同様に、検索元装置３から木構造内の装置（たとえば子装置５）に対して情報検索要求８を送信する際に、匿名通信路を経由して送信することができる。匿名通信路による匿名通信は、たとえば、オニオンルーティングの技術によって行うことができる。オニオンルーティングでは、パケットを中継する各装置が、自分の暗号鍵で所定の情報を復号することで、パケットの次の転送先を知ることができる。すなわち、暗号化の鍵を不特定多数に分散することができる。そのため、暗号鍵の一極集中による匿名化の脆弱性を無くすることができる。
【００４４】
匿名通信路を経由して情報公開要求７や情報検索要求８が転送された場合、公開情報や検索条件と共に、匿名通信路の情報を格納しておく。そして、公開情報が検索でヒットしたとき、検索結果通知手段１ｈは、その公開情報が転送されてきたときの匿名通信路や子装置４の識別情報を含めて検索元装置３に送信する。この際、検索条件と共に格納されていた匿名通信路を経由して送信される。これにより、検索元装置３は、公開元装置２にアクセスするための匿名通信路を知ることができる。その結果、検索後に公開元装置２と検索元装置３との間で匿名的に双方向のコミュニケーションを行うことができる。
【００４５】
次に本発明の実施の形態について具体的に説明する。なお、以下の実施の形態では、公開される情報のメタデータをオニオンリファレンスと呼び、このオニオンリファレンスをＰ２Ｐネットワーク上の各ノードでキャッシュする。また、情報を検索する側のノードは、各ノード内の情報を検索する検索エージェントを送信し、この検索エージェントをＰ２Ｐネットワーク上の各ノードでキャッシュする。
【００４６】
図２は、本実施の形態のネットワーク構成例を示す図である。Ｐ２Ｐネットワーク１０は、複数のノード１００，２００，３１０，３２０，３３０，３４０，３５０によって構成されている。各ノード１００，２００，３１０，３２０，３３０，３４０，３５０は、隣接ノードと接続されている。ノード１００，２００，３１０，３２０，３３０，３４０，３５０は、コンピュータとしての機能を備えた装置である。
【００４７】
図３は、本発明の実施の形態に用いるノードのハードウェア構成例を示す図である。ノード１００は、ＣＰＵ(Central Processing Unit)１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ(Random Access Memory)１０２、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、および通信インタフェース１０６が接続されている。
【００４８】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。オニオンリファレンスや検索エージェントは、ＲＡＭ１０２やＨＤＤ１０３に格納される。
【００４９】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。
【００５０】
通信インタフェース１０６は、Ｐ２Ｐネットワーク１０に接続されている。通信インタフェース１０６は、Ｐ２Ｐネットワーク１０を介して、他のノードとの間でデータの送受信を行う。
【００５１】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図３にはノード１００のハードウェア構成を示したが、他のノード２００，３１０，３２０，３３０，３４０，３５０も同様のハードウェア構成で実現できる。
【００５２】
まずオニオンリファレンスと検索エージェントとをキャッシュすることによる検索システムの概念を説明する。
図４は、本発明の実施の形態における情報検索を示す概念図である。本発明に係る匿名Ｐ２Ｐ情報共有システムは、Ｐ２Ｐネットワークの各ノードが保持する発信情報を、匿名的に効率よく検索する機構である。ノード間の検索機能は、オニオンルーティング等の匿名機能を利用して行われる。
【００５３】
図４の例では、ノード１００が情報を公開し、ノード２００が公開された情報を検索するものとする。
情報の公開は、ノード１００内の情報公開処理部１１０に対する情報公開者の指示に基づいて行われる。公開される情報は、ノード１００内に格納される。また、ノード１００からネットワークを介してオニオンリファレンス３１１，３２１，３３１が送信され、各ノード３１０，３２０，３３０で登録される。オニオンリファレンス３１１，３２１，３３１は、公開された情報の特徴を示す情報（メタデータ）である。オニオンリファレンス３１１，３２１，３３１には、公開された情報の作成日等の管理情報や、情報内のキーワードなどが含まれる。また、オニオンリファレンス３１１，３２１，３３１は、情報の公開元であるノード１００までの通信ルートに関する情報を含んでいる。なお、オニオンリファレンス３１１，３２１，３３１に、公開する情報全体を含めることも可能である。
【００５４】
登録されたオニオンリファレンス３１１，３２１，３３１は検索の対象となる。さらに、登録されたオニオンリファレンス３１１，３２１，３３１は所定の条件を満たしたとき（たとえば、最後に利用されてからの経過時間が所定時間を超えたとき）に削除される。すなわち、オニオンリファレンス３１１，３２１，３３１は、ノード３１０，３２０，３３０にキャッシュされた情報である。
【００５５】
情報の検索は、ノード２００内の情報検索処理部２１０に対する情報検索者の指示に基づいて行われる。ノード２００に対して検索条件が入力されると、ノード２００からネットワークを介して検索エージェント３４１，３５１，３３２が送信され、他のノード３４０，３５０，３３０に検索エージェント３４１，３５１，３３２が登録される。検索エージェント３４１，３５１，３３２は、指定された検索条件に基づいて、登録されたノード内のオニオンリファレンスを検索する機能である。なお、検索エージェント３４１，３５１，３３２は、情報の検索元であるノード２００までの通信ルートに関する情報を含んでいる。
【００５６】
検索エージェント３４１，３５１，３３２は、登録時にノード３４０，３５０，３３０内のオニオンリファレンスを検索する。また、検索エージェント３４１，３５１，３３２は、後から登録されたオニオンリファレンスを検索する。検索条件に合致するオニオンリファレンスを検出した場合、検索エージェント３４１，３５１，３３２は、そのオニオンリファレンスの情報を、検索元のノード２００に通知する。なお、登録された検索エージェント３４１，３５１，３３２は、所定の条件を満たしたとき（たとえば、最後に利用されてからの経過時間が所定時間を超えたとき）に削除される。すなわち、検索エージェント３４１，３５１，３３２は、ノード３４０，３５０，３３０にキャッシュされた情報である。
【００５７】
オニオンリファレンスと検索エージェントとは、ネットワーク上の何れかのノード上で同時にキャッシュされる。図４の例では、ノード３３０において、オニオンリファレンス３３１と検索エージェント３３２とがキャッシュされている。すると、検索エージェント３３２による検索処理によって、オニオンリファレンス３３１が対象となる。そのとき、検索エージェント３３２における検索条件にオニオンリファレンス３３１が合致すれば、オニオンリファレンス３３１が検出される（検索ヒットする）。
【００５８】
オニオンリファレンス３３１を検出した検索エージェント３３２は、オニオンリファレンス３３１とノード２００からノード３３０までの通信ルートの情報とを、ノード２００の情報検索処理部２１０に通知する。これにより、ノード２００を利用する検索者は、ノード１００において検索条件を満たす情報が公開されていることを知ることができる。
【００５９】
また、オニオンリファレンス３３１には、ノード３３０からノード１００までの通信ルートの情報が含まれており、検索エージェント３３２からノード３３０からノード２００までの通信ルートが通知されるため、ノード２００は、ノード２００からノード１００までの通信ルートを知ることができる。
【００６０】
ところで、本発明の実施の形態では、検索エージェントによるオニオンリファレンスの検索を効率よく実行するために、ノード間の接続関係に対して、木構造上の親子関係を定義する。たとえば、Ｐ２Ｐネットワークに新たに参加するノードは、既にＰ２Ｐネットワークに参加している何れかのノードに対して接続要求を送信する。送信した接続要求が許可されることで、接続要求を出力したノードが新たにＰ２Ｐネットワーク上のノードとなる。そこで、本実施の形態では、接続要求を送信したノードを、子ノード、接続を許可したノードを親ノードとして定義する。
【００６１】
図５は、ネットワークの木構造を示す図である。図５に示すＰ２Ｐネットワークは、複数のノード２１〜３３で構成されている。通信可能なノード間は実線で結ばれている。また、木構造における親子関係がある場合、その親子関係がノード間を接続する実線の矢印で示されている。矢印は、親ノードから子ノードを指し示している。
【００６２】
図５の例では、ノード２１が木構造上の最上位のノード（ルートノード）である。ルートノードは、たとえば、Ｐ２Ｐネットワークの運用を開始する際に、サービス提供を管理する機関によって設置される。Ｐ２Ｐネットワークに参加するノードは、ルートノードに対して直接接続するか、あるいはＰ２Ｐネットワークに既に参加しているノードに対して接続する必要がある。
【００６３】
ノード２１には、ノード２２，２３が子ノードとして接続されている。ノード２２には、ノード２４，２５が子ノードとして接続されている。ノード２３には、ノード２６，２７が子ノードとして接続されている。ノード２４には、ノード２８が子ノードとして接続されている。ノード２５には、ノード２９が子ノードとして接続されている。ノード２６には、ノード３０が子ノードとして接続されている。ノード２７には、ノード３１が子ノードとして接続されている。ノード２９には、ノード３２が子ノードとして接続されている。ノード３１には、ノード３３が子ノードとして接続されている。
【００６４】
本実施の形態では、中央で木構造を管理するサーバを用意せず、ノード同士の情報交換により次のように自律的に木構造を構成する。
基本的には、新たにＰ２Ｐネットワークにノードが接続されるとき、接続要求を出力したノードが子ノード、接続要求を受け付けたノードが親ノードとして関係付けられる。
【００６５】
また、木構造を構成する際、基本構成はｎ分岐とする（ｎは自然数）。ｎ分岐とは、１つのノードに隣接した接続されるノードの数がｎ個であることを意味する。構成遷移の途中など瞬間的にはｎ分岐にならない場合もあるがルーティングテーブル更新などで時間経過とともにｎ分岐で安定させることができる。ｎ分岐で安定させる方法としては、なるべく兄弟となるノードの数を少なくすることと、木構造の階層を深くしないこととが考えられる。
【００６６】
すなわち、各ノードは、少なくとも、自分に隣接するノードとの間の親子関係を管理する。また、各ノードに対して、自分がどの階層にいるのか、子ノードはいくつかといった情報を持たせてルーティングテーブル交換時にその情報も共有する。各ノードが階層を管理することで、新たに接続してきた相手に対し、なるべく上位で子ノードの少ないノードへ接続しに行くように通知する。認識したノードの子ノードの数が制限値いっぱいの場合は、上位ノード、下位ノード両方の情報を通知する。その場合接続するノードはまず下位のノードへ接続を試みる。
【００６７】
さらに、階層に限界値を持たせてそれ以上下側に接続しない。限界値としては、たとえば初期値を６とし、そのノードの管理者が所定の範囲内で変更できるようにする。新たなノードを接続するとき、認識しているノード内に子ノードを持てるノードがない場合が考えられる。その場合、新たに木構造に参加するノードは、認識しているノードの上位ノードへ接続対象を換えながら接続を試みる。同様に最上位まで行った場合は、新たに木構造に参加するノードは、最上位のノードから下位のノードへ接続対象を換えながら接続を試みる。
【００６８】
子ノードを持っているノードがネットワーク上から消失した場合（たとえば、ノードの動作が停止した場合）、各子ノードは、消失したノードの親ノードへ接続を試みる。先に受け付けられたノードが、木構造における消失ノードの位置に配置される。遅れて受け付けられたノードは新規ノードの接続ロジックと同じ扱いになる。
【００６９】
なお、木構造は、以下のような処理を行うことで最適化される。
プライベートＩＰノードが木構造においてグローバルＩＰノードより上位にある場合は、プライベートＩＰノードを下位へ移動させる。さらに、プライベートＩＰノードもポーリング等によりサーバノードとして機能させる。
【００７０】
また、隣接ノード間の通信時間（セッション接続開始から終了まで）を測定し、速度が速く高性能なノードほど上位へ、速度が遅いノードほど下位へ移動させる。
このようにして、木構造を最適化できる。ノード間の関係が木構造で定義されると、オニオンリファレンスの伝送や検索エージェントの伝送を、木構造の上位のノードに向けて行うことができる。これにより、オニオンリファレンスの伝送や検索エージェントをブロードキャストで送信しなくても、確実にオニオンリファレンスと検索エージェントとを、何れかのノード上で合流させることができる。
【００７１】
しかも、本実施の形態では、公開元と検索元との匿名性を保つために、仮の公開元と仮の検索元とを設定することができる。公開元と仮の公開元との間のデータ通信は、オニオンルーティングによって匿名性が高められている。同様に、検索元と仮の検索元との間のデータ通信は、オニオンルーティングによって匿名性が高められている。
【００７２】
図６は、木構造を利用した情報検索の概念図である。図６の例には、複数のノード４１〜６３を含むＰ２Ｐネットワークが示されている。このＰ２Ｐネットワークには、ノード４１をルートノードとする木構造が定義されている。ここで、ノード４２が公開元であり、ノード５１が検索元である。
【００７３】
ノード４２は、公開する情報を送信する場合、まず、仮の公開元を選択する。Ｐ２Ｐネットワーク内の任意のノードを仮の公開元とすることができる。たとえば、ノード４２は、ノード４２自身が存在を認識している他のノードから、そのノードが認識しているノードの情報を取得する。そして、ノード４２は、取得したノードの情報（たとえばノードＩＤやＩＰアドレス）から任意のノードを選択し、仮の公開元とする。この例では、ノード５２を仮の公開元として選択したものとする。
【００７４】
次に、ノード４２は仮の公開元までの匿名通信路を探索する。図６の例では、ノード５６、ノード５７、ノード５８、ノード５９、ノード５２の順でパケットを受け渡すことができる。ノード４２は、ルート探索の際に、各ノード５２，５６〜５９の公開鍵を取得する。そして、ノード４２は、検出したルートに沿って転送されるパケットを生成する。この際、各ノード５２，５６〜５９の公開鍵を利用し、オニオンルーティングの技術を適用したパケットが生成される。生成されたパケットには、公開情報のオニオンリファレンスが含まれる。
【００７５】
ノード４２は、生成したパケットを匿名通信路上で隣接するノード５６に渡す。すると、そのパケットがオニオンルーティングによって転送され、仮の公開元として選択されたノード５２に渡される。
【００７６】
オニオンルーティングでは、中継する各ノードがパケットのルート情報（オニオンルート）を自分自身の秘密鍵で復号することにより、次の転送先となるノードを知ることができる。この際、中継するノードにおいて知ることができるのは、パケットを転送してきた隣接ノードと、パケットを渡すべき隣接ノードだけである。すなわち、そのパケットの公開元のノードや宛先のノードについては、中継ノードでは知ることができない。これにより、パケットの送信元と宛先の匿名性が確保される。
【００７７】
また、中継する各ノードは、パケットの逆方向に転送する際の戻りルート情報を生成しながら、パケットを転送する。すなわち、各ノードは、自分の識別情報（ＩＰアドレス等）を、パケット転送先の隣接ノードの公開鍵で暗号化して、転送するパケットに追加する。このように、各ノードが自分の識別情報を隣接ノードのみが復号可能な形式のデータでパケットに含めていくことで、戻りルート情報が構築される。戻りルート情報は、逆方向のパケット転送の際に、オニオンルートとして使用される。
【００７８】
宛先のノード５２は、受け取ったパケットを、自分自身の秘密鍵で復号することにより、宛先が自分自身であることを知ることができるとともに、オニオンリファレンスを取得できる。ノード５２は、自分宛のオニオンリファレンスを受け取ると、そのオニオンリファレンスをキャッシュする。その結果、ノード５２にオニオンリファレンス７１が保持される。このオニオンリファレンス７１には、公開元のノード４２までの戻りルート情報が含まれる。
【００７９】
さらにノード５２は、戻りルート情報を含むオニオンリファレンスを、木構造における親に当たるノード４６に渡す。ノード４６は、受け取ったオニオンリファレンスをキャッシュする。その結果、ノード４６にオニオンリファレンス７２が保持される。
【００８０】
同様に、ノード４６は、戻りルート情報を含むオニオンリファレンスを、親に当たるノード４３に渡す。ノード４３は、受け取ったオニオンリファレンスをキャッシュする。その結果、ノード４３にオニオンリファレンス７３が保持される。
【００８１】
同様に、ノード４３は、戻りルート情報を含むオニオンリファレンスを、親に当たるノード４１に渡す。ノード４１は、受け取ったオニオンリファレンスをキャッシュする。その結果、ノード４１にオニオンリファレンス７４が保持される。
【００８２】
このようにして、仮の公開元であるノード５２からルートのノード４１までの経路上の各ノードに、オニオンリファレンスがキャッシュされる。
次に、情報検索手順を説明する。
【００８３】
ノード５１は、情報を検索する場合、まず、仮の検索元を選択する。Ｐ２Ｐネットワーク内の任意のノードを仮の検索元とすることができる。たとえば、ノード５１は、ノード５１自身が存在を認識している他のノードから、他のノードが認識しているノードの情報を取得する。そして、ノード５１は、取得したノードの情報（たとえばＩＰアドレス）から任意のノードを選択し、仮の検索元とする。この例では、ノード５５を仮の検索元として選択したものとする。
【００８４】
次に、ノード５１は仮の検索元までの匿名通信路を探索する。図６の例では、ノード６０、ノード６１、ノード６２、ノード６３、ノード５５の順でパケットを受け渡すことができる。ノード５１は、ルート探索の際に、各ノード５５，６０〜６３の公開鍵を取得する。そして、ノード５１は、検出したルートに沿って転送されるパケットを生成する。この際、ノード５１は、各ノード５５，６０〜６３の公開鍵を利用して、オニオンルーティングの技術を適用したパケットを生成する。生成したパケットには、検索エージェントが含まれる。
【００８５】
ノード５１は、生成したパケットを隣接するノード６０に渡す。すると、そのパケットがオニオンルーティングによって転送され、仮の検索元として選択されたノード５５に渡される。オニオンルーティングの手法は、オニオンリファレンスを送信する場合と同様である。また、パケットが中継される際には、同じルートを逆方向に転送するための戻りルート情報が生成され、パケットに追加される。
【００８６】
宛先のノード５５は、受け取ったパケットを、自分自身の秘密鍵で復号することにより、宛先が自分自身であることを知ることができるとともに、検索エージェントを取得できる。ノード５５は、自分宛の検索エージェントを受け取ると、その検索エージェントをキャッシュする。その結果、ノード５５に検索エージェント８１が保持される。この検索エージェント８１には、検索元のノード５１までの戻りルート情報が含まれる。
【００８７】
さらにノード５５は、戻りルート情報を含む検索エージェントを、木構造における親に当たるノード４７に渡す。ノード４７は、受け取った検索エージェントをキャッシュする。その結果、ノード４７に検索エージェント８２が保持される。
【００８８】
同様に、ノード４７は、戻りルート情報を含む検索エージェントを、親に当たるノード４３に渡す。ノード４３は、受け取った検索エージェントをキャッシュする。その結果、ノード４３に検索エージェント８３が保持される。
【００８９】
同様に、ノード４３は、戻りルート情報を含む検索エージェントを、親に当たるノード４１に渡す。ノード４１は、受け取った検索エージェントをキャッシュする。その結果、ノード４１に検索エージェント８４が保持される。
【００９０】
このようにして、仮の公開元であるノード５２からルートのノード４１までの経路上の各ノードに、検索エージェントがキャッシュされる。
各ノードにキャッシュされた検索エージェントは、対応するノード内にキャッシュされているオニオンリファレンスを検索対象として、検索処理を実行する。情報検索者がノード５１に対して指示した検索条件に、ノード４２で公開されている情報が合致している場合、ノード４３の検索エージェント８３がオニオンリファレンス７３を検出する。
【００９１】
オニオンリファレンス７３が検出されると、検索エージェント８３に含まれる戻りルート情報を用いて、検索元のノード５１に検索結果を転送するためのパケットが生成される。そのパケットには、オニオンリファレンス７３の内容が含められる。生成されたパケットは、ノード６３、ノード６２、ノード６１、ノード６０、ノード５１の順で転送される。その結果、ノード５１においてオニオンリファレンスが取得できる。
【００９２】
オニオンリファレンスには、ノード４２からノード５２までの戻りルート情報が関連付けられており、この戻りルート情報も検索結果に含まれる。これにより、ノード５１は、ノード４２までの匿名通信路を取得することができ、匿名通信路を介してノード４２で公開されている情報にアクセス可能となる。
【００９３】
このように、本実施の形態では全件検索を全Ｐ２Ｐマルチキャストメッセージ送信によらず効率よく行うために、Ｐ２Ｐネットワークのノード構成の部分構造として階層的な木構造を構築している。オニオンリファレンスは、最初にランダムに選択したノードから上位のノードへ向かって順次キャッシュされる。検索側も検索エージェントは、最初にランダムに選択したノードから上位のノードへ向かって順次キャッシュされる。キャッシュされた検索エージェントは、キャッシュされたノードの内のオニオンリファレンスの検索を行う。
【００９４】
オニオンリファレンスと検索エージェントとの双方が、木構造の上位へ順次転送されると共に、中継したノードでキャッシュされることで、オニオンリファレンスと検索エージェントとは、木構造内の何れかのノード上で出逢うことができる。すなわち、オニオンリファレンスや検索エージェントをブロードキャストで送信しなくても、ノード４２で公開された情報をノード５１から検出することができる。その結果、Ｐ２Ｐネットワーク上での効率の良い情報検索が可能となる。
【００９５】
しかも、仮の公開元と仮の検索元を設定するため、情報提供者や情報検索者の匿名性が守られる。すなわち、公開元のノード４２と仮の公開元のノード５２との間は、匿名通信が行われるため、中継する各ノード５６〜５９は公開元と仮の公開元とを知ることはできない。
【００９６】
さらに、公開元のノード４２から仮の公開元のノード５２への匿名通信を行う際に戻りオニオン情報を生成することで、検索ヒット後、検索元から公開元への匿名通信路を生成することができる。
【００９７】
なお、検索でヒットしたノードから上位側へは、ヒットした検索エージェントへの検索中止のメッセージを伝播させるなど、検索元のノードへの２重通知を防ぐことができる。また、検索でヒットしたノードは、発見したオニオンリファレンスを使用して公開元のノードから実体の情報を入手することもできる。そして、入手した公開情報の実体を、検索元のノードへのオニオンルート（オニオンルーティングにおける匿名通信路を示す）を使用して、検索元のノードへ送信してもよい。
【００９８】
次に、木構造の関係を利用した情報検索を実現するために各ノードが有すべき処理機能について具体的に説明する。
図７は、ノード内の処理機能を示すブロック図である。ノード１００は、情報公開処理部１１０、情報検索処理部１２０、検索エンジン１３０、公開情報キャッシュ部１４０、仮公開元ノード選択部１５０、検索エージェントキャッシュ部１６０、仮検索元ノード選択部１７０、ルーティング部１８０、およびノード管理テーブル１９０を有している。
【００９９】
これらの要素のうち、情報公開処理部１１０、検索エンジン１３０、公開情報キャッシュ部１４０、および仮公開元ノード選択部１５０によって情報公開機能が構成される。また、情報検索処理部１２０、検索エンジン１３０、検索エージェントキャッシュ部１６０、および仮検索元ノード選択部１７０によって、情報検索機能が構成される。
【０１００】
情報公開処理部１１０は、情報公開者からの操作入力等に基づいて、情報公開処理を行う。具体的には、情報公開処理部１１０は、公開する情報を保持し、他のノードからの要求に応じてその情報を送信する。なお、公開する情報は、たとえば、ＨＤＤ等に格納される。
【０１０１】
さらに、情報公開処理部１１０は、仮公開元ノード選択部１５０に対して、仮公開元として動作するノードの選択処理を依頼する。また、情報公開処理部１１０は、情報公開の指示を受けたとき、公開情報キャッシュ部１４０に対して、オニオンリファレンスの送信を依頼する。
【０１０２】
情報検索処理部１２０は、情報検索者からの操作入力等に基づいて、Ｐ２Ｐネットワークを介した情報検索を行う。具体的には、情報検索処理部１２０は、検索条件の入力を受け付ける。情報検索処理部１２０は、情報検索の実行指示を受けると、仮検索元ノード選択部１７０に対して、仮検索元として動作するノードの選択処理を依頼する。また、情報検索処理部１２０は、検索エージェントキャッシュ部１６０に対して、検索エージェントの送信処理を依頼する。
【０１０３】
検索エンジン１３０は、オニオンリファレンスを検索対象として、検索エージェントに従った情報の検索を実行する。具体的には、検索エンジン１３０は、公開情報キャッシュ部１４０からオニオンリファレンスを受け取ると、そのオニオンリファレンスを記憶する（たとえば、ＲＡＭ１０２やＨＤＤ１０３等の記憶装置に格納する）。また、検索エンジン１３０は、検索エージェントキャッシュ部１６０から検索エージェントを受け取ると、その検索エージェントを記憶する（たとえば、ＲＡＭ１０２やＨＤＤ１０３等の記憶装置に格納する）。
【０１０４】
そして、検索エンジン１３０は、記憶した検索エージェントを所定のタイミングで起動し、記憶しているオニオンリファレンスの検索を実行させる。具体的には、検索エンジン１３０は、新たに検索エージェントを記憶したときに、その検索エージェントを起動する。その際の検索対象は、既に記憶している全てのオニオンリファレンスである。
【０１０５】
また、検索エンジン１３０は、新たなオニオンリファレンスを記憶したとき、そのとき既に記憶している全ての検索エージェントを起動する。その際の検索対象は、新たに記憶したオニオンリファレンスである。
【０１０６】
検索エンジン１３０は、検索エージェントによる検索で検索条件に合致するオニオンリファレンスが検出された場合、検索元のノードに対して検索結果を通知する。検索結果には、オニオンリファレンスや、公開元のノードまでの匿名通信路の情報などが含まれる。
【０１０７】
公開情報キャッシュ部１４０は、情報公開処理部１１０からオニオンリファレンスの送信依頼を受け取ると、公開する情報に関するメタデータ（作成日やキーワード等）を含むオニオンリファレンスを生成する。
【０１０８】
また、公開情報キャッシュ部１４０は、仮公開元ノード選択部１５０から仮公開元ノードとして選択したノードのノードＩＤまたはＩＰアドレスを取得する。すると、公開情報キャッシュ部１４０は、ルーティング部１８０に対して、仮公開元ノードまでの匿名通信路の探索を依頼する。公開情報キャッシュ部１４０は、ルーティング部１８０から匿名通信路を受け取ると、仮公開元ノード宛に匿名通信路を介してオニオンリファレンスを送信する。
【０１０９】
また、公開情報キャッシュ部１４０は、他のノードからオニオンリファレンスを受け取ると、そのオニオンリファレンスを検索エンジン１３０に渡し、キャッシュさせる。その後、公開情報キャッシュ部１４０は、受け取ったオニオンリファレンスを親ノードに対して送信する。キャッシュされたオニオンリファレンスは、以下の情報を有する。
・キャッシュされているノードから公開元ノードまでのオニオンルート
・複数のリファレンスが同一の実体を表すことを示すための一時識別子
・発信される情報、または、情報の内容を示すメタデータ。後者の場合、情報の実体は公開元のノードに置かれる。
【０１１０】
オニオンリファレンスは、木構造における親ノードに順次転送されることで、Ｐ２Ｐネットワーク上の複数のノードにキャッシュされる。ここで、オニオンリファレンスのキャッシュには２種類の寿命が設定できるようにする。
・投稿者が最初に投稿した時間から設定時間を経過すると消滅する（いつか全部消える）。
・新しくキャッシュされた時間から設定時間を経過すると消滅する（検索対象は残る）。
【０１１１】
公開情報キャッシュ部１４０は、寿命に達したオニオンリファレンスを、検索エンジン１３０内から削除する。
仮公開元ノード選択部１５０は、情報公開処理部１１０から仮公開元とするノードの選択要求を受け取ると、仮公開元とするノードの選択処理を行う。たとえば、仮公開元ノード選択部１５０は、ノード管理テーブル１９０を参照し、自分自身から７ホップ離れた位置にあるノードのＩＰアドレスを取得する。そして、仮公開元ノード選択部１５０は、取得したＩＰアドレスに基づき、７ホップ離れたノードに対し、そのノードからさらに７ホップ離れた位置にあるノードのＩＰアドレスのリスト（仮公開元ノード選択候補リスト）を要求する。仮公開元ノード選択候補リストが返されると、仮公開元ノード選択部１５０は、仮公開元ノード選択候補リストの中からＩＰアドレスを１つ選択する。選択したＩＰアドレスに対応するノードが仮公開元ノードとなる。仮公開元ノードを選択したら、仮公開元ノード選択部１５０は、仮公開元ノードのＩＰアドレスを公開情報キャッシュ部１４０に通知する。
【０１１２】
また、仮公開元ノード選択部１５０は、他のノードから仮公開元ノード選択候補リストの取得要求を受け取ると、仮公開元ノード選択候補リストを生成して要求元に応答する。具体的には、仮公開元ノード選択部１５０は、仮公開元ノード選択候補リストの取得要求に応答してノード管理テーブル１９０を参照し、７ホップ離れたノードのＩＰアドレスを抽出する。そして、仮公開元ノード選択部１５０は、そのＩＰアドレスのリストを仮公開元選択候補リストとして、取得要求の送信元に対する応答として送信する。
【０１１３】
検索エージェントキャッシュ部１６０は、情報公開処理部１１０から検索エージェントの送信依頼を受け取ると、指定された検索条件に該当するオニオンリファレンスの検索を行う検索エージェントを生成する。また、検索エージェントキャッシュ部１６０は、仮検索元ノード選択部１７０から仮検索元ノードとして選択したノードのＩＰアドレスを取得する。すると、検索エージェントキャッシュ部１６０は、ルーティング部１８０に対して、仮検索元ノードまでの匿名通信路の探索を依頼する。検索エージェントキャッシュ部１６０は、ルーティング部１８０から匿名通信路を受け取ると、仮検索元ノード宛に匿名通信路を介して検索エージェントを送信する。
【０１１４】
また、検索エージェントキャッシュ部１６０は、他のノードから検索エージェントを受け取ると、その検索エージェントを検索エンジン１３０に渡し、キャッシュさせる。その後、検索エージェントキャッシュ部１６０は、受け取った検索エージェントを親ノードに対して送信する。
【０１１５】
検索エージェントは、木構造の上位のノードに転送されながら、各ノードにキャッシュされる。検索エージェントキャッシュ部１６０は、検索エージェントをキャッシュしたとき、検索元ノードへの匿名通信路を示すオニオンルートも同時に格納する。キャッシュされた検索エージェントは、キャッシュ時に、検索エンジン１３０内のオニオンリファレンスを検索する。また、検索エージェントのキャッシュより後に、オニオンリファレンスが格納されたら、そのオニオンリファレンスが検索条件に合致するかどうかと判断する。検索条件にヒットしたら、検索エンジン１３０が、検索元ノードに検索結果を通知する。
【０１１６】
なお、検索エージェントのキャッシュには寿命が設定できる。たとえば、検索者が最初に検索した時間から設定時間を経過すると消滅する（いつか全部消える）。具体的には、検索エージェントキャッシュ部１６０が、寿命に達した検索エージェントを検索エンジン１３０内から削除する。
【０１１７】
仮検索元ノード選択部１７０は、情報公開処理部１１０から仮検索元とするノードの選択要求を受け取ると、仮検索元とするノードの選択処理を行う。具体的には、仮検索元ノード選択部１７０は、ノード管理テーブル１９０を参照し、自分自身から７ホップ離れた位置にあるノードのＩＰアドレスを取得する。そして、仮検索元ノード選択部１７０は、取得したＩＰアドレスに基づき、７ホップ離れたノードに対し、そのノードからさらに７ホップ離れた位置にあるノードのＩＰアドレスのリスト（仮検索元ノード選択候補リスト）を要求する。仮検索元ノード選択候補リストが返されると、仮検索元ノード選択部１７０は、仮検索元ノード選択候補リストの中からＩＰアドレスを１つ選択する。選択したＩＰアドレスに対応するノードが仮検索元ノードとなる。仮検索元ノードを選択したら、仮検索元ノード選択部１７０は、仮検索元ノードのＩＰアドレスを検索エージェントキャッシュ部１６０に通知する。
【０１１８】
また、仮検索元ノード選択部１７０は、他のノードから仮検索元ノード選択候補リストの取得要求を受け取ると、仮検索元ノード選択候補リストを生成して要求元に応答する。具体的には、仮検索元ノード選択部１７０は、仮検索元ノード選択候補リストの取得要求に応答してノード管理テーブル１９０を参照し、７ホップ離れたノードのＩＰアドレスを抽出する。そして、仮検索元ノード選択部１７０は、そのＩＰアドレスのリストを仮検索元選択候補リストとして、取得要求の送信元に対する応答として送信する。
【０１１９】
ルーティング部１８０は、パケットのルーティングを行う。たとえば、オニオンルーティングを技術により、発信者や宛先の匿名性を確保したルーティングを行うことができる。ルーティング部１８０は、接続された他のノードとの間でＰ２Ｐネットワーク上のノードの情報を交換し合っている。そして、ルーティング部１８０は、存在が確認されたノードの情報をノード管理テーブル１９０に登録する。
【０１２０】
また、ルーティング部１８０は、指定されたノードまでの匿名通信路を探索することができる。たとえば、ルーティング部１８０は、仮公開元ノードまでの匿名通信路の探索要求を公開情報キャッシュ部１４０から受け取ると、匿名通信路の探索を行い、匿名通信路を示すオニオンルートを公開情報キャッシュ部１４０に渡す。同様に、ルーティング部１８０は、仮検索元ノードまでの匿名通信路の探索要求を検索エージェントキャッシュ部１６０から受け取ると、匿名通信路の探索を行い、匿名通信路を示すオニオンルートを検索エージェントキャッシュ部１６０に渡す。
【０１２１】
ノード管理テーブル１９０は、Ｐ２Ｐネットワーク上で存在が確認されているノードに関する情報が登録された管理テーブルである。なお、本実施の形態におけるノード管理テーブル１９０は、パケットルーティングのためのルーティングテーブルを兼ねている。Ｐ２Ｐネットワークでは、ＩＰアドレスは固定とならない場合が多いため、各ノードはノード管理テーブルの情報を互いに交換することで、各ノードの最新のＩＰアドレスを取得することができる。
【０１２２】
図８は、ノード管理テーブルのデータ構造例を示す図である。ノード管理テーブル１９０には、ノードＩＤ、ＩＰアドレス、ポート番号、ホップ数、テーブルをマージした隣接ノード、自ノードとの通信速度、ノードの設定速度あるいは固定サーバとの通信速度、データの暗号処理速度、単位時間あたりのメッセージ中継数、プライベートかグローバルか、自分との親子関係、階層レベル、及び子ノード数の情報が、存在が確認されたノード毎に登録されている。図８において横方向に並べられている情報同士が互いに関連付けられて、１つのノードのレコードを構成している。以下、各項目内の情報の説明において、その情報に対応するノードを、該当ノードと呼ぶこととする。また、ノード管理テーブル１９０が設けられているノード１００を、自ノードと呼ぶこととする。
【０１２３】
ノードＩＤは、Ｐ２Ｐネットワーク上で各ノードを一意に識別するための名称である。
ＩＰアドレスは、各ノードのネットワーク上のアドレスである。
ポート番号は、該当するノードから通信が行われたときの、通信に使用されたアプリケーションを示す識別番号である。
【０１２４】
ホップ数は、自ノードから該当するノードまでのホップ数（ホップカウント）である。ホップ数は、該当するノードにパケットが到達するまでにいくつのノードを経由するのかを示す数値である。自ノードのホップ数は０であり、隣接するノードのホップ数は１である。
【０１２５】
テーブルをマージした隣接ノードとは、該当するノードと通信するためのパケットを渡すべき隣接ノードである。この項目には、該当する隣接ノードのノードＩＤが設定される。
【０１２６】
自ノードとの通信速度は、該当するノードと自ノードとの間の通信速度である。
ノードの設定速度あるいは固定サーバとの通信速度の項目には、該当するノードにおいて通信速度が予め設定されている場合、その通信速度が登録される。たとえば、１００Ｍｂｐｓの速度で通信可能なネットワークであっても、あるノードと他のノードの間の通信に関して、最大で２０Ｍｂｐｓしか使用できないように制限されている場合がある。その場合、制限された通信速度が設定される。また、該当するノードに対して固定サーバを経由してアクセスする場合、その固定サーバとの間の通信速度が予め設定されている場合がある。その場合は、予め設定された固定サーバとの間の通信速度が、この項目に設定される。
【０１２７】
データの暗号処理速度は、該当するノードにおいてデータの暗号処理が行われた場合に、どの程度の速度で暗号処理（データの暗号化や復号）が行われるかを示している。
単位時間あたりのメッセージ中継数は、単位時間あたりに何個のメッセージを中継できるのかを示している。
【０１２８】
プライベートかグローバルかの項目には、該当するノードのＩＰアドレスがプライベートＩＰなのか、グローバルＩＰアドレスなのかが設定される。
自分との親子関係の項目には、自ノードから該当ノードに達するまでの木構造上での親子関係が設定される。親子関係は、自ノードの先祖であれば何代前の先祖であるのかが示され、自ノードの子孫であれば、何代後の子孫なのかが示される。
【０１２９】
階層レベルには、該当ノードが、ルート（木構造の最上位）ノードから何代後のノードなのかが示される。
子ノード数には、該当ノードの子として接続されたノードの数が設定される。
【０１３０】
なお、図７、図８には、ノード１００の機能構成について説明したが、他のノードも同様の構成を有している。以下の説明では、ノード１００以外の各ノードの構成要素は、図７内の同名の構成要素と同じ機能を有しているものとする。
【０１３１】
このような機能を有するノードで木構造が構成されることにより、オニオンリファレンスと検索エージェントとによる情報検索が効率的に行われる。
次に、図７に示す各要素が情報公開および情報検索時にどのように動作するのかを具体的に説明する。まず、情報公開時に各ノードで行われる処理について説明する。
【０１３２】
図９は、情報公開時の処理を示す図である。図９の例では、ノード１００が公開情報の公開元ノードであり、ノード４１０が仮公開元ノードである。ノード１００では、情報公開処理部１１０によって、仮公開元ノード選択要求と情報公開要求とが出される。仮公開元選択要求は、仮公開元ノード選択部１５０に渡される。仮公開元ノード選択部１５０は、Ｐ２Ｐネットワークから仮の公開元とするノードを選択する。この例では、ノード４１０が選択されたものとする。仮公開元ノード選択部１５０は、選択したノード４１０のＩＰアドレスを公開情報キャッシュ部１４０に渡す。
【０１３３】
情報公開要求を受け取った公開情報キャッシュ部１４０は、仮公開元ノード選択部１５０から渡されたＩＰアドレスに該当するノード４１０までの匿名通信路を探索する。そして、公開情報キャッシュ部１４０は、匿名通信路に沿って、ノード４１０宛にオニオンリファレンスを送信する。
【０１３４】
オニオンリファレンスがノード４１０に渡されると、ノード４１０内の公開情報キャッシュ部４１４がオニオンリファレンスを検索エンジン４１３に渡す。検索エンジン４１３は、受け取ったオニオンリファレンス４１３ａを保持する。また、公開情報キャッシュ部４１４は、木構造における親ノードに対して、オニオンリファレンスを転送する。
【０１３５】
図１０は、情報検索時の処理を示す図である。図１０の例では、ノード２００が情報検索の検索元ノードであり、ノード４２０が仮検索元ノードである。ノード２００では、情報検索処理部２２０によって、仮検索元ノード選択要求と情報検索要求とが出される。仮検索元選択要求は、仮検索元ノード選択部２７０に渡される。仮検索元ノード選択部２７０は、Ｐ２Ｐネットワークから仮の検索元とするノードを選択する。この例では、ノード４２０が選択されたものとする。仮検索元ノード選択部２７０は、選択したノード４２０のＩＰアドレスを検索エージェントキャッシュ部２６０に渡す。
【０１３６】
情報検索要求を受け取った検索エージェントキャッシュ部２６０は、仮検索元ノード選択部２７０から渡されたＩＰアドレスに該当するノード４２０までの匿名通信路を探索する。そして、検索エージェントキャッシュ部２６０は、匿名通信路に沿って、ノード４２０宛に検索エージェントを送信する。
【０１３７】
検索エージェントがノード４２０に渡されると、ノード４２０内の検索エージェントキャッシュ部４２６が検索エージェントを検索エンジン４２３に渡す。検索エンジン４２３は、受け取った検索エージェント４２３ａを保持する。また、検索エージェントキャッシュ部４２６は、木構造における親ノードに対して、検索エージェントを転送する。
【０１３８】
図１１は、検索ヒット時の処理を示す図である。図１１の例では、ノード４３０において、ノード２００による検索に、ノード１００が公開した情報がヒットした場合を示している。ノード４３０内の検索エンジン４３３では、検索エージェント４３３ａで示される検索条件に合致するオニオンリファレンスの検索が行われる。この検索にオニオンリファレンス４３３ｂがヒットした場合、検索エンジン４３３は、検索元であるノード２００に対して、オニオンリファレンス４３３ｂの内容を匿名通信路経由で送信する。そして、ノード２００において、公開元ノードと検索元ノードとの間の匿名通信路が形成される。
【０１３９】
図１２は、匿名通信路形成過程の状態遷移を示す図である。図１２の例では、ノード９０をルートノードとした木構造が形成されている。
最初の状態（ＳＴ１）は、初期状態である。ここで、公開元をノード９１、検索元をノード９２とする。仮公開元はノード９３であり、仮検索元はノード９４である。
【０１４０】
次の状態（ＳＴ２）は、情報公開要求に応じてオニオンリファレンスが配付された状況を示している。オニオンリファレンスは、仮公開元のノード９３からルートのノード９０までの経路上の各ノードにキャッシュされる。
【０１４１】
次の状態（ＳＴ３）は、情報検索要求に応じて検索エージェントが配備された状況を示している。検索エージェントは、仮検索元のノード９４からルートのノード９０までの経路上の各ノードにキャッシュされる。
【０１４２】
次の状態（ＳＴ４）は、形成された匿名通信路を示している。この例では、ノード９５からルートのノード９０までの経路上の各ノードで検索がヒットする。その場合、検索がヒットしたノードのうち木構造上で最も下位の要素となるノード９５を経由した匿名通信路が形成される。
【０１４３】
ところで、通信の匿名性は、公開元ノードと仮公開元ノードとの間でオニオンルーティングが行われること、および検索元ノードと仮検索元ノードとの間でオニオンルーティングが行われることによって強化される。ただし、Ｐ２Ｐネットワークは構成が動的に変わるため、任意のノード間の通信ルートを予めサーバ上で決めておくことは難しい。そこで、Ｐ２Ｐネットワークにおいてオニオンルーティングを行うには、宛先のノードまでのルート探索処理を行う必要がある。以下に、ルート探索処理を具体的に説明する。
【０１４４】
図１３は、ルート探索開始処理の手順を示すフローチャートである。ルート探索開始処理は、公開元ノードが仮公開元ノードまでの匿名通信路を探索する際に、公開元ノードのルーティング部において実行される。また、検索元ノードが仮検索元ノードまでの匿名通信路を探索する際にも、検索元ノードのルーティング部においてルート探索開始処理が実行される。以下、図７に示すノード１００が公開元ノードであるものとして、図１３に示す処理をステップ番号に沿って説明する。
【０１４５】
［ステップＳ１１］ルーティング部１８０は、ノード管理テーブル１９０に登録されているノードのうち、ホップ数が一番遠いノードの１つを、仮公開元ノードとして選択する。さらに、ルーティング部１８０は、仮公開元ノードまでの匿名通信路を探索するためのルート探索パケットを生成する。
【０１４６】
［ステップＳ１２］ルーティング部１８０は、自分の匿名ＩＤを生成する。生成した匿名ＩＤは、ＲＡＭやＨＤＤ等の記録媒体に記録しておく。以後、他のノードからパケットを受け取った際には、そのパケットの宛先の匿名ＩＤと記録してある自分の匿名ＩＤとを比較することで、そのパケットが自分宛か否かを判断可能となる。そして、ルーティング部１８０は、生成した匿名ＩＤをパケットの転送履歴として設定する共に、その匿名ＩＤをルート探索パケットの送信元とする。さらに、ルーティング部１８０は戻りオニオンを生成し、ルート探索パケット内に設定する。なお、匿名ＩＤとは、一連の匿名通信毎に個別に設定する識別情報である。また、戻りオニオンとしては、たとえば、自分のノードＩＤを自分の公開鍵で暗号化し、さらに自分のノードＩＤを付加した情報を設定する。
【０１４７】
［ステップＳ１３］ルーティング部１８０は、プライベートＩＰ以外の（グローバルアドレス）隣接ノード全てにルート探索パケットを送信する。
図１４は、ルート探索パケットのデータ構造例を示す図である。ルート探索パケット５１０は、メッセージフラグ５１１、宛先（Ｔｏ）５１２、送信元（Ｆｒｏｍ）５１３、宛先オニオン５１４、戻りオニオン５１５、返信暗号化用一時鍵情報５１６および転送履歴５１７で構成される。
【０１４８】
メッセージフラグ５１１は、パケットの種別を示している。ルート探索パケット５１０の場合には、ルート探索ブロードキャスト送信用のパケットであることを示す情報が設定される。
【０１４９】
宛先５１２には、ルート探索パケット５１０の宛先が設定される。宛先は、仮公開元ノードの識別情報（公開ＩＤ）等で示される。
送信元５１３には、送信元ノードの匿名ＩＤが設定される。
【０１５０】
宛先オニオン５１４は、宛先までのルートを示す情報であるが、ルート探索パケット５１０では空欄となる。
戻りオニオン５１５には、ルート探索パケット５１０に対してルート通知パケットを返信する際の通信経路が、多重に暗号化されて設定される。
【０１５１】
返信暗号化用一時鍵情報５１６は、ルート通知パケットを返信する際に使用される公開元ノードの一時公開鍵と暗号化された一時秘密鍵である。一時公開鍵と一時秘密鍵とは、ルート探索毎に生成される鍵である。
【０１５２】
転送履歴５１７には、パケットの送信元のノードや、パケットを中継したノードで生成された匿名ＩＤが設定される。パケットを受け取った各ノードは、転送履歴５１７内の匿名ＩＤと自分が過去に生成した匿名ＩＤとを比較し、一致する匿名ＩＤがある場合、そのパケットを過去に転送したことがあることを認識できる。
【０１５３】
ルート探索パケットを受信したノードは、ルート探索パケットの中継またはルート通知パケットの返信を行う。
図１５は、ルート探索パケットの受信処理の手順を示すフローチャートである。以下、図７に示すノード１００がルート探索パケットを受信した場合を想定して、図１５に示す処理をステップ番号に沿って説明する。
【０１５４】
［ステップＳ２１］ルーティング部１８０は、ルート探索パケットを受信する。
［ステップＳ２２］ルーティング部１８０は、自ノード宛のルート探索パケットかどうかを確認する。ルート探索パケットの宛先のフィールドを参照することで、自ノード宛か否かが判別できる。
【０１５５】
［ステップＳ２３］ルーティング部１８０は、自ノード宛であれば、処理をステップＳ２４に進める。また、ルーティング部１８０は、自ノード宛でなければ、処理をステップＳ２７に進める。
【０１５６】
［ステップＳ２４］ルーティング部１８０は、ルート探索パケットの戻りオニオンを宛先オニオンとして、ルート通知パケットを生成する。
［ステップＳ２５］ルーティング部１８０は、ノード管理テーブル１９０内の自ノードのレコード情報を、探索者（公開元ノード）の暗号鍵で暗号化して、ルート通知パケットに設定する。
【０１５７】
［ステップＳ２６］ルーティング部１８０は、公開元ノードに対してルート通知パケットを返信する。その後、処理が終了する。
［ステップＳ２７］ルーティング部１８０は、ルート探索パケットの転送履歴のフィールドに自ノードの匿名ＩＤが登録されているかどうかを確認する。
【０１５８】
［ステップＳ２８］ルーティング部１８０は、自ノードを通過済のルート探索パケットか否かを判断する。すなわち、転送履歴のフィールドに自ノードの匿名ＩＤが設定されていれば、自ノード通過済である。自ノード通過済であれば、処理がステップＳ２９に進められる。自ノード通過済でなければ、処理がステップＳ３０に進められる。
【０１５９】
［ステップＳ２９］ルーティング部１８０は、受信したルート探索パケットを破棄し、処理を終了する。
［ステップＳ３０］ルーティング部１８０は、自分の匿名ＩＤを転送履歴に設定する。さらに、ルーティング部１８０は、元の戻りオニオンを自ノードの秘密鍵で暗号化し、暗号化されたデータに自分のノードＩＤを加えた情報を新たな戻りオニオンとする。
【０１６０】
［ステップＳ３１］ルーティング部１８０は、ルート探索パケットを送信してきたノードとプライベートＩＰのノードを除く隣接ノード全てに、ルート探索パケットを送信する。その後、処理が終了する。
【０１６１】
図１６は、ルート通知パケットのデータ構造例を示す図である。ルート通知パケット５２０は、メッセージフラグ５２１、宛先（Ｔｏ）５２２、送信元（Ｆｒｏｍ）５２３、宛先オニオン５２４、戻りオニオン５２５、ルート情報５２６、および返信暗号化用一時鍵情報５２７で構成される。
【０１６２】
メッセージフラグ５２１は、パケットの種別を示している。ルート通知パケット５２０の場合には、ルート探索返信用のパケットであることを示す情報が設定される。
宛先５２２には、ルート通知パケット５２０の宛先が設定される。宛先は、ルート探索パケット５１０の送信元５１３に設定されている送信元ノードの匿名ＩＤである。
【０１６３】
送信元５２３には、仮送信元ノードの公開されたＩＤ（公開ＩＤ）が設定される。
宛先オニオン５２４は、宛先までのルートを示す情報である。これは、受信Peerにおいてルート探索パケット５１０の戻りオニオン５１５を転記したものである。ただし、宛先オニオン５２４は、パケットが中継される毎に過去の伝送経路を示す情報が削除される。
【０１６４】
戻りオニオン５２５は、ルート通知パケット５２０においては空欄となる。
ルート情報５２６は、匿名通信の伝送ルートを示す情報である。ルート情報には、伝送ルート上の各Ｐ２ＰオニオンノードのノードＩＤと固定公開鍵とが、送信元ノードの固定公開鍵で暗号化されて設定されている。また、ルート情報５２６には、ルート探索パケット５１０の返信暗号化用一時鍵情報５１６も含まれている。
【０１６５】
返信暗号化用一時鍵情報５２７は、ルート探索パケット５１０の返信暗号化用一時鍵情報５１６の内容がそのまま設定される。
ルート通知パケットを受信したノードは、他のノード宛であればルート通知パケットの中継処理を行い、自分宛であれば最適ルートの生成処理を行う。
【０１６６】
図１７は、ルート通知パケット受信処理を示すフローチャートである。以下、図７に示すノード１００がルート通知パケットを受信した場合を想定して、図１７に示す処理をステップ番号に沿って説明する。
【０１６７】
［ステップＳ４１］ルーティング部１８０は、ルート通知パケットを受信する。
［ステップＳ４２］ルーティング部１８０は、自ノード宛のルート通知パケットか否かを確認する。自ノード宛か否かは、宛先のフィールドに自分の匿名ＩＤが設定されているか否かで判断できる。
【０１６８】
［ステップＳ４３］ルーティング部１８０は、自ノード宛のルート通知パケットであれば処理をステップＳ４４に進める。また、ルーティング部１８０は、自ノード宛のルート通知パケットでなければ、処理をステップＳ４５に進める。
【０１６９】
［ステップＳ４４］ルーティング部１８０は、ルート通知パケットのルート情報フィールド内の情報を復号し、最適ルートを生成する。すなわち、ルート情報には、自ノード（仮公開元ノードまでのルート探索を行った検索元ノード）の公開鍵で暗号化された状態で、匿名通信路上の各ノードのノードＩＤと公開鍵とが含まれている。また、ルート情報内での各ノードの情報の配列が、そのまま匿名通信路上のノードの配列になっている。そこで、復号して得られるノードＩＤの配列が最適ルートとなる。
【０１７０】
［ステップＳ４５］ルーティング部１８０は、宛先オニオンで示される次のノードをパケット送信先として決定する。
［ステップＳ４６］ルーティング部１８０は、ノード管理テーブル１９０内の自ノードのレコード情報を探索者（公開元ノード）の暗号鍵で暗号化して、ルート通知パケットに設定する。
【０１７１】
［ステップＳ４７］ルーティング部１８０は、ルート通知パケットを宛先オニオンで示された次のノードに返信する。その後、処理が終了する。
以上のようにして、公開元ノードから仮公開元ノードまでの匿名通信路を探索することができる。送信元ノードは、この匿名通信路に沿って通信されるオニオンルーティングのパケット（データパケット）を生成し、その内容（ペイロード）として公開情報のオニオンリファレンスを設定する。データパケットを匿名通信路を介して仮公開元ノードに送ることで、送信元ノードの匿名性を保つことができる。
【０１７２】
上記の例は、送信元ノードと仮送信元ノードとの間の匿名通信であるが、検索元ノードと仮検索元ノードとの間の匿名通信も同様の手順で行うことができる。仮送信元ノードから木構造上の上位のノードへオニオンリファレンスが転送され、仮想検索元ノードから上位のノードへ検索エージェントが転送されることで、木構造の何れかのノードにおいて、検索エージェントによる検索に、オニオンリファレンスがヒットする。その結果、送信元ノードと検索元ノードとの間の匿名通信路が生成される。
【０１７３】
図１８は、データパケットのデータ構造例を示す図である。データパケット５３０は、メッセージフラグ５３１、宛先（Ｔｏ）５３２、送信元（Ｆｒｏｍ）５３３、宛先オニオン５３４、戻り＆バックトラックオニオン５３５、およびペイロード５３６で構成される。
【０１７４】
メッセージフラグ５３１は、パケットの種別を示している。データパケット５３０の場合には、データ通信用のパケット（通常のパケット）であることを示す情報が設定される。
【０１７５】
宛先５３２には、データパケット５３０の宛先が設定される。宛先は、通信相手のノードの公開ＩＤである。
送信元５３３には、パケット送信元となるノードの匿名ＩＤが設定される。この匿名ＩＤは、匿名通信路探索時とは別のものが使用される。
【０１７６】
宛先オニオン５３４は、宛先までのルートを示す情報である。これは、取得した匿名通信路情報に基づいて生成される。宛先オニオン５３４は、匿名通信路上の各ノードにおいて、次のノードのみが認識できるように各ノードの公開鍵でルート情報を暗号化したものである。
【０１７７】
戻り＆バックトラックオニオン５３５は、戻りルートおよびバックトラック処理を行うときのルートを示すルート情報である。バックトラック処理は、予定したルートでの通信ができなかった場合に、他のルート経由でパケットを伝送する処理である。
【０１７８】
ペイロード５３６は、転送すべきメッセージを受信側のノードの公開鍵で暗号化したデータを含む実データである。たとえば、ペイロード５３６には、オニオンリファレンスや検索エージェントが含められる。
【０１７９】
このようなデータパケットが、匿名通信路を介して、送信元ノードと検索元ノードとの間で送受信される。これにより、通信の匿名性が保たれる。
このような機能を利用すれば、匿名性の高い電子掲示板システムを提供することができる。
【０１８０】
図１９は、匿名性の高い電子掲示板の構成例を示す図である。この例では、掲示板への投稿者がノード６０１を使用し、掲示板の検索者がノード６０２を使用しているものとする。ノード６１１〜６１７によって木構造が構成されており、これらのノード６１１〜６１７によって、情報公開を行うための電子掲示板としての機能が提供される。また、ノード６０１は、ノード６１６を仮公開元ノードとして選択している。また、ノード６０２は、ノード６１７を仮検索元ノードとして選択している。
【０１８１】
なお、ノード６０１のノードＩＤを「Ａ」、ノード６０２のノードＩＤを「Ｂ」、ノード６１１のノードＩＤを「Ｐ」、ノード６１２のノードＩＤを「Ｓ」、ノード６１３のノードＩＤを「Ｈ」、ノード６１４のノードＩＤを「Ｔ」、ノード６１５のノードＩＤを「Ｒ」、ノード６１６のノードＩＤを「Ｘ」、ノード６１７のノードＩＤを「Ｙ」、ノード６２１のノードＩＤを「Ｋ」、ノード６２２のノードＩＤを「Ｌ」、ノード６２３のノードＩＤを「Ｇ」、ノード６２４のノードＩＤを「Ｅ」、ノード６２５のノードＩＤを「Ｗ」、ノード６２６のノードＩＤを「Ｖ」とする。
【０１８２】
掲示板への投稿者は、ノード６０１からノード６１６に対して、オニオンルーティングの技術を利用した匿名通信で、オニオンリファレンスを送信する。オニオンリファレンスは、ノード６１６から順次木構造上の親ノードに転送されていく。オニオンリファレンスを転送した各ノード６１６，６１４，６１３，６１２，６１１は、オニオンリファレンスをキャッシュする。
【０１８３】
オニオンリファレンスには、投稿者が公開した情報のメタデータ（キーワードや作成日等）と共に、ノード６０１までの戻りルート情報が含まれている。このようにオニオンリファレンスが公開されたことによって、投稿者が投稿した情報が公開されたこととなる。
【０１８４】
掲示板内の情報の検索者は、ノード６０２からノード６１７に対して、オニオンルーティングの技術を利用した匿名通信で、検索エージェントを送信する。検索エージェントは、ノード６１７から順次木構造上の親ノードに転送されていく。検索エージェントを転送した各ノード６１７，６１５，６１３，６１２，６１１は、検索エージェントをキャッシュする。
【０１８５】
検索エージェントは、検索者が指定した検索キーワード等に基づいた検索条件を含んでいる。検索エージェントがキャッシュされたノードにおいて、検索エージェント内の検索条件に合致するオニオンリファレンスが検索される。その検索条件に、ノード６０１のユーザが投稿した情報が合致する場合、ノード６１３において検索がヒットする。このとき、ノード６１３にキャッシュされたオニオンリファレンスの戻りオニオンと、ノード６１３にキャッシュされた検索エージェントの戻りオニオンとを繋げることで、ノード６０１とノード６０２との間の匿名通信路が生成できる。
【０１８６】
図２０は、各ノードがキャッシュする情報を示す図である。なお、以下の説明において、戻りオニオンのルートを、戻りルート上の各ノードのノードＩＤの配列で示している。
ノード６１１がキャッシュする情報の１つは、ノード自身の匿名ＩＤ、ノードＩＤ「Ａ」が投稿した公開情報（オニオンリファレンス）、Ｐ−Ｓ−Ｈ−Ｔ−Ｘ−Ａ間の戻りオニオンである。また、ノード６１１は、ノード自身の匿名ＩＤ、ノードＩＤ「Ｂ」の検索エージェント、Ｐ−Ｓ−Ｈ−Ｒ−Ｙ−Ｂ間の戻りオニオンもキャッシュしている。
【０１８７】
ノード６１２がキャッシュする情報の１つは、ノード自身の匿名ＩＤ、ノードＩＤ「Ａ」が投稿した公開情報（オニオンリファレンス）、Ｓ−Ｈ−Ｔ−Ｘ−Ａ間の戻りオニオンである。また、ノード６１２は、ノード自身の匿名ＩＤ、ノードＩＤ「Ｂ」の検索エージェント、Ｓ−Ｈ−Ｒ−Ｙ−Ｂ間の戻りオニオンもキャッシュしている。
【０１８８】
ノード６１３がキャッシュする情報の１つは、ノード自身の匿名ＩＤ、ノードＩＤ「Ａ」が投稿した公開情報（オニオンリファレンス）、Ｈ−Ｔ−Ｘ−Ａ間の戻りオニオンである。また、ノード６１３は、ノード自身の匿名ＩＤ、ノードＩＤ「Ｂ」の検索エージェント、Ｈ−Ｒ−Ｙ−Ｂ間の戻りオニオンもキャッシュしている。
【０１８９】
ノード６１４がキャッシュする情報は、ノード自身の匿名ＩＤ、ノードＩＤ「Ａ」が投稿した公開情報（オニオンリファレンス）、Ｔ−Ｘ−Ａ間の戻りオニオンである。ノード６１５がキャッシュする情報は、ノード自身の匿名ＩＤ、ノードＩＤ「Ｂ」の検索エージェント、Ｒ−Ｙ−Ｂ間の戻りオニオンである。
【０１９０】
ノード６１６がキャッシュする情報は、ノード自身の匿名ＩＤ、ノードＩＤ「Ａ」が投稿した公開情報（オニオンリファレンス）、Ｘ−Ａ間の戻りオニオンである。ノード６１７がキャッシュする情報は、ノード自身の匿名ＩＤ、ノードＩＤ「Ｂ」の検索エージェント、Ｙ−Ｂ間の戻りオニオンである。
【０１９１】
図２１は、生成された匿名通信路を示す図である。匿名通信路は、ノード６１３において、オニオンリファレンス側の戻りオニオンと、検索エージェント側の戻りオニオンとを繋げることで作成される。
【０１９２】
ここで、ノード６０１とノード６１６との間は、ノード６２２を経由するルートとなっている。これは、オニオンリファレンスをノード６１６に送信した際に実際に通ったルートである。すなわち、戻りオニオンは、パケットを伝送しながら、その伝送を行ったノードの情報を付加していくことで作成されるため、送信時に実際に通ったルートが戻りルートとなる。
【０１９３】
同様に、ノード６０２とノード６１７との間は、ノード６２６を経由するルートとなっている。これは、検索エージェントをノード６１７に送信した際に実際に通ったルートである。
【０１９４】
このような匿名通信路を経由して、ノード６０１とノード６０２との間で通信を行うことができる。すなわち、ノード６０１が公開した情報の内容（ノード６０１内に保存されている）を、ノード６０２から参照することができる。
【０１９５】
ところで、ノード６２２とノード６２６とを直接結ぶような匿名通信路を生成することもできる。
図２２は、経路長を短縮させた匿名通信路生成例を示す図である。この例では、オニオンリファレンスを仮送信元ノードから親ノードへ転送する際に、オニオンリファレンスを送ってきた隣接ノードのノードＩＤ、ＩＰアドレス、ポート番号等を含む中継ノード情報を同時に送信する。オニオンリファレンスを受け取った各ノードは、オニオンリファレンスと共に、中継ノード情報もキャッシュする。
【０１９６】
状態ＳＴ１１に示す例では、オニオンリファレンスがノードＩＤ「Ｌ」のノード６２２を介して送信されている。そこで、ノード６２２のノードＩＤ「Ｌ」やＩＰアドレス等の中継ノード情報をキャッシュの対象とする。そして、検索ヒットした場合には、検索エージェントは、オニオンリファレンスや各種戻りオニオンと共に、中継ノード情報を検索元ノードに送信する。
【０１９７】
検索元のノード６０２は、ノード６２２の情報を取得したことで、ノード６０１との間の匿名通信を行う際に、ノード６２４〜６２６の何れかから、ノード６２２にパケットを転送するような匿名通信路を生成することができる。すなわち、検索エージェントを送信したときに中継したノードは、ノード６２６であっても、ノード６２４またはノード６２５を経由した匿名通信路を生成することが可能となる。
【０１９８】
このとき、ノード６２４〜６２５に対して、ノード６２２のノードＩＤ、ＩＰアドレス、ポート番号を通知する必要がある。
状態ＳＴ１２に示すように、ノード６２５を経由した匿名通信路を生成して、その匿名通信路を介してノード６０１に対してパケットを送信すれば、実際にそのパケットが通った１本の通信路がノード６０１とノード６０２との間の匿名通信路として確定する。この例ではノード６２５とノード６２２とが直接パケットを受け渡すような匿名通信路が生成されている。
【０１９９】
このようにして、仮送信元ノードと仮検索元ノードとの間を抜かした匿名通信路を生成することができる。これにより、匿名通信が木構造の上位のノードを経由せずに済み、上位のノードに係る負荷を軽減することができる。
【０２００】
なお、匿名通信を行う技術として、匿名ルート上の各ノードに通知するルート情報（ノード別ルート情報）を、該当ノードの公開鍵で暗号化してパケットに含める技術がある。ノード別ルート情報は、各ノードに対応するブロックに格納される。ノード別ルート情報には、対応するノードに隣接するノード（送信方向に隣接するノードと返信方向に隣接するノード）の識別情報と、隣接ノードが復号すべきブロックの位置とが含まれる。
【０２０１】
さらに、送信元がパケットを送信する場合、隣接するノードが復号すべきブロックの位置を指定する情報（ブロック指定）パケットに含める。このパケットを受け取った中継ノードは、ブロック指定で示されるブロックを復号することで、隣接ノードと、その隣接ノードが復号すべきブロックの位置を認識する。そこで、中継ノードは、ブロック指定の内容を隣接ノードに対応するブロックの位置に変更し、その後、パケットを隣接ノードに転送する。その後、同様にパケットが中継される。
【０２０２】
このようなパケット転送を行えば、各中継ノードでは、匿名ルートのうち、自分に隣接するノードしか認識できない。したがって、送信元や宛先を隠した状態でのパケット転送が可能となる。以下、このような匿名通信方法を、グレープルーティングと呼ぶこととする。
【０２０３】
このようなグレープルーティングの技術を利用すれば、仮送信元ノードと仮検索元ノードとの間を抜かした匿名通信路を生成することができる。
図２３は、グレープルーティングを行う際のデータパケットの構造例を示す図である。グレープルーティング用のデータパケット５４０は、メッセージフラグ５４１、宛先（Ｔｏ）５４２、送信元（Ｆｒｏｍ）５４３、ブロック指定５４４、グレープルート５４５、およびペイロード５４６で構成される。
【０２０４】
メッセージフラグ５４１は、パケットの種別を示している。データパケット５４０の場合には、グレープルーティング用のデータパケットであることを示す情報が設定される。
宛先５４２には、データパケット５４０の宛先が設定される。宛先は、ルート探索パケット５１０の送信元５１３に設定されている送信元ノードの匿名ＩＤである。
【０２０５】
送信元５４３には、仮送信元ノードの公開されたＩＤ（公開ＩＤ）が設定される。
ブロック指定５４４には、そのパケットを受け取ったノードが復号すべきグレープルート内のブロックの位置が設定される。
【０２０６】
グレープルート５４５は、匿名通信路上の各ノードに通知すべき情報が、ブロックに分けて格納されている。たとえば、各ブロックは、対応するノードの公開鍵で暗号化されている。データパケット５４０を受け取ったノードは、ブロック指定５４４によって、自分が復号すべきブロックを認識できる。
【０２０７】
復号したブロックには、たとえば、匿名通信路上の次の隣接ノードのノードＩＤや、次の隣接ノードが復号するブロック位置等が含まれている。したがって、データパケット５４０を受け取ったノードは、復号したブロックに含まれるノードＩＤに対応する隣接ノードに対して、データパケット５４０を転送する。この際、ブロック指定５４４の内容を、次の隣接ノードが復号するブロック位置に置き換える。
【０２０８】
ペイロード５４６は、転送すべきメッセージを受信のノードの公開鍵で暗号化したデータを含む実データである。
図２４は、グレープルーティングを行うときのキャッシュ内容を示す図である。グレープルーティングを行う場合、オニオンリファレンスや検索エージェントをキャッシュする各ノードは、グレープルートや隣接ノードに関する情報も同時にキャッシュする。
【０２０９】
図２４の例では、仮送信元であるノード６１６から上位の各ノードは、ノード自身の一時識別子、ノードＩＤ「Ａ」のノード６０１が投稿したオニオンリファレンス、ノードＩＤ「Ｘ」のノード６１６とノードＩＤ「Ａ」のノード６０１との間の匿名グレープルート、ノード６１６，６２１〜６２３のノードＩＤやＩＰアドレスなどテーブル情報をキャッシュする。なお、キャッシュする匿名グレープルートには、グレープルート内のノード６１６，６２１〜６２３が復号すべきブロックの位置を示す情報も含まれている。
【０２１０】
また、仮検索元であるノード６１７から上位の各ノードは、ノード自身の一時識別子、ノードＩＤ「Ｂ」の検索エージェント、ノードＩＤ「Ｙ」のノード６１７とノードＩＤ「Ｂ」のノード６０２との間の匿名グレープルート、ノード６１７，６２４〜６２６のノードＩＤやＩＰアドレスなどテーブル情報をキャッシュする。なお、キャッシュする匿名グレープルートには、グレープルート内のノード６１７，６２４〜６２６が復号すべきブロックの位置を示す情報も含まれている。
【０２１１】
ここでノードＩＤ「Ｈ」のノード６１３で検索がヒットすれば、ノード６１３は、仮検索元ノード６１７に対して検索結果を送信する。この際、ノード６１５を経由せずに直接送信することができる。
【０２１２】
図２５は、検索結果通知の様子を示す図である。ノード６１３は、ノード６０２とノード６１７との間のグレープルートに基づいて、ノード６１３からノード６０２にグレープルーティングで検索結果を送信するためのデータパケットを生成する。生成したデータパケットは、ノード６１７に対して送信される。そして、データパケットは、ノード６１７からノード６０２への匿名通信路を介し、グレープルーティングによって転送される。
【０２１３】
検索結果には、オニオンリファレンスに加え、そのオニオンリファレンスや検索エージェントと共にキャッシュされていた情報も含まれる。すなわち、ノード６０１とノード６１６との間のグレープルート、ノード６０２とノード６１７との間のグレープルートや、ノード６１６，６１７，６２１〜６２６のノードＩＤやＩＰアドレスなどテーブル情報が検索結果に含まれる。
【０２１４】
なお、ノード６１３は、ノード６２４〜ノード６２６のノードＩＤ、ＩＰアドレス、およびグレープルート中の復号すべきブロックの位置を認識しているため、ノード６２４〜ノード６２６の何れかに対して、検索結果を示すデータパケットを送信することもできる。すなわち、ノード６１７を経由しないルート（図中、破線の矢印で示す）で検索結果を送信することができる。
【０２１５】
なお、ノード６０２は、検索結果を受け取ったとき、検索結果を受け取ったことを示す応答を返す。このときは、常にノード６１７を経由する匿名通信路でグレープルーティングが行われる。すなわち、ノード６２４〜６２６では、グレープルーティングにおける隣接ノードであるノード６１７の情報しか認識できない。そのため、ノード６０２からノード６１３宛のパケットは、ノード６２４〜６２６の何れかを経由してノード６１７に渡される。そして、ノード６１７を介して、そのパケットがノード６１３に渡される。
【０２１６】
なお、ノード６０２とノード６１７との間は、グレープルーティングであるため、複数のルートが存在する。同様に、ノード６０１とノード６１６との間も、グレープルーティングであるため、複数のルートが存在する。
【０２１７】
検索結果を受け取ったノード６０２は、検索結果に含まれる情報に基づいて、ノード６０１までのグレープルートを生成する。なお、ノード６０２は、検索結果としてノード６１６からノード６０１にパケットを送信するためのグレープルートを受け取っているとともに、ルート６１６のＩＰアドレスやノードＩＤ等を受け取っている。したがって、ノード６０２からノード６０１宛にパケットを送信する場合、ノード６１６を経由した匿名通信路で送信される。
【０２１８】
図２６は、検索元ノードと公開元ノードとの間の匿名通信路を示す図である。検索元のノード６０２は、ノード６１６，６２１〜６２３のノードＩＤやＩＰアドレスなどのテーブル情報に基づいて、匿名グレープルートを作成する。たとえば、ノード６０２は、ノード６１６とノード６０１との間の匿名グレープルートに、ノード６１６からノード６２４〜６２６へのルート（図中、一点鎖線で示す）と、ノード６２１〜６２３へ戻る方向でのノード６２４〜６２６のルート（図中、破線で示す）などを作成する。作成したルートに、ノード６２４〜６２６とノード６０２との間の匿名グレープルートを追加すれば、ノード６０１からノード６０２向きの匿名グレープルートが作成される。
【０２１９】
ノード６０２によるノード６２４〜６２６からノード６０２向きの匿名グレープルート作成は、検索結果受信時に行うことができる。また、ノード６２４〜６２６からノード６０２向きの匿名グレープルートを検索エージェントに予め持たせて送信して、検索結果と共に受け取ることもできる。
【０２２０】
このとき、ノード６２４〜６２６に対して、ノード６２１〜６２３のノードＩＤやＩＰアドレスなどのテーブル情報を通知することで、ノード６２４〜６２６からノード６２１〜６２３へのパケット転送が可能となる。
【０２２１】
結果的に、ノード６２４〜６２６とノード６１６との間は双方向の通信が可能となる。ノード６２４〜６２６からノード６２１〜６２３へはパケットの転送が可能であるが、逆方向のパケット転送はできない。これは、ノード６０１とノード６２１との間の匿名グレープルートでは、ノード６２４〜６２６に対して隣接ノード６１６に対して送信することしか示されていないためである。そのため、ノード６０１からノード６０２へ匿名通信を行う際には、ノード６１６を経由する必要が生じる。
【０２２２】
ところで、グレープルーティングでは、ノードの結託による不正への対応策として、「データを受け取るべきノードの集合以外からのものは破棄する」という処理を行わせることができる。たとえば、ノード６２１〜６２３は、ノード６０１からの通信路上の隣接ノードおよびノード６１６以外のノードからのパケットを破棄する。同様に、ノード６２４〜６２６は、ノード６０２からの通信路上の隣接ノードおよびノード６１６以外のノードからのパケットを破棄する。
【０２２３】
図２７は、ノードの結託を防止した場合の匿名通信路の例を示す図である。図２７に示すように、ノード６０１とノード６０２との間の通信路は、常にノード６１６を経由して行われる。これにより、ノード６２１〜６２３の管理者とノード６２４〜６２６の管理者とが結託して、ノード６０１とノード６０２との間の匿名通信路を解析する行為を防止できる。
【０２２４】
また、グレープルーティングの匿名性や安全性のレベルを落とし、可用性（availability）を優先することができる。その場合、キャッシュ開始ノード（仮公開元ノードや仮検索元ノード）の直前のグレープ（直前のノード宛のルーティングに関する情報が登録されたブロック）は暗号化しないで書き換えが可能なようにする。なお、可用性とは、通信をダウンさせることなく継続稼働させる能力である。
【０２２５】
図２８は、可用性を重視したときの匿名通信路の例を示す図である。このように、グレープルート中のノード６２１〜６２６に対応するブロックを平文にしておくことで、その内容を適宜書き換えることができる。その結果、ノード６２１〜６２３とノード６２４〜６２６との間の相互の直接のパケットの受け渡しが可能となる。すなわち、ノード６０１とノード６０２との間のルートに多様性を持たせることができる。ルートに可用性があれば、通信路上の１つのノードが停止したとしても、別ルートを経由して通信が可能となる。
【０２２６】
以上説明したような実施の形態により、以下のような効果が得られる。
Ｐ２Ｐネットワークの全体あるいは部分的なノード間の関係を木構造で定義したことにより、Ｐ２Ｐネットワーク上の情報の全件検索を効率よく行うことが可能となる。このとき、発信された情報（オニオンリファレンスや検索エージェント）はＰ２Ｐネットワーク上にキャッシュされている。しかも、オニオンリファレンスや検索エージェントは、匿名通信路を介して送信元と関連付けられている。そのため、木構造にしたことで匿名性が損なわれることはない。
【０２２７】
また、仮公開元ノードや仮検索元ノードを設定し、公開元ノードと仮公開元ノードとの間で匿名通信を行い、検索元ノードと仮検索元ノードとの間で匿名通信を行っている。これにより、仮公開元ノードと仮検索元ノードとの上記の木構造で匿名性が十分でなくても、公開元ノードと検索元ノードとの匿名性を保つことができる。
【０２２８】
また、匿名通信にオニオンルーティングを利用しているため、暗号化されたルート情報を復号するための鍵が不特定多数に分散する。そのため、鍵の一極集中による匿名化の脆弱性を無くすることができる。
【０２２９】
また、検索にヒットしたとき、公開情報の送信元のノードまでの匿名通信路に関する情報を検索元のノードに送信するようにしたため、検索後に情報発信者と情報検索者とが匿名的に双方向のコミュニケーションを行うことが可能となる。
【０２３０】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、各ノードが有すべき機能の処理内容を記述した情報検索プログラムが提供される。その情報検索プログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述した情報検索プログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ(Digital Versatile Disc)、ＤＶＤ−ＲＡＭ(Random Access Memory)、ＣＤ−ＲＯＭ(Compact Disc Read Only Memory)、ＣＤ−Ｒ(Recordable)／ＲＷ(ReWritable)などがある。光磁気記録媒体には、ＭＯ(Magneto-Optical disk)などがある。
【０２３１】
情報検索プログラムを流通させる場合には、たとえば、その情報検索プログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、情報検索プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにその情報検索プログラムを転送することもできる。
【０２３２】
情報検索プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録された情報検索プログラムもしくはサーバコンピュータから転送された情報検索プログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置から情報検索プログラムを読み取り、情報検索プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接情報検索プログラムを読み取り、その情報検索プログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータから情報検索プログラムが転送される毎に、逐次、受け取った情報検索プログラムに従った処理を実行することもできる。
【０２３３】
（付記１）  ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索方法において、
前記ネットワークに接続された情報検索装置の公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
前記ネットワーク内の装置間の関係が木構造で定義されており、前記情報検索装置の情報公開要求転送手段が、前記情報公開要求を前記木構造における親装置に対して転送し、
前記情報検索装置の検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
前記情報検索装置の情報検索要求転送手段が、前記情報検索要求を前記木構造における前記親装置に対して転送し、
前記情報検索装置の検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
前記情報検索装置の検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する、
ことを特徴とする情報検索方法。
【０２３４】
（付記２）  前記情報公開要求には情報公開要求の送信元である公開元装置までの通信路情報が含まれており、前記公開情報格納手段は、前記情報公開要求を受け取った際には、前記通信路情報を前記公開情報記憶手段に格納し、
前記検索結果通知手段は、前記検索条件に前記公開情報が合致した場合、前記検索元装置に対して、前記公開情報と前記公開元装置までの前記通信路情報とを送信する、
ことを特徴とする付記１記載の情報検索方法。
【０２３５】
（付記３）  前記情報公開要求の送信元である公開元装置が、情報の公開指示に応じて、前記木構造を構成する複数の前記情報検索装置の中から少なくとも１つの前記情報検索装置を選択し、選択した前記情報検索装置に対して前記情報公開要求を匿名通信によって送信する、
ことを特徴とする付記１記載の情報検索方法。
【０２３６】
（付記４）  前記情報検索要求の送信元である検索元装置が、情報の検索指示に応じて、前記木構造を構成する複数の前記情報検索装置の中から少なくとも１つの前記情報検索装置を選択し、選択した前記情報検索装置に対して、検索条件を含む前記情報検索要求を匿名通信によって送信する、
ことを特徴とする付記１記載の情報検索方法。
【０２３７】
（付記５）  前記検索手段は、新たな前記検索条件が前記検索条件記憶手段に記憶されたとき、新たに記憶された前記検索条件に合致する前記公開情報を、前記公開情報記憶手段から検索することを特徴とする付記１記載の情報検索方法。
【０２３８】
（付記６）  前記検索手段による検索は、新たな前記公開情報が前記公開情報記憶手段に記憶されたとき、新たに記憶された前記公開情報が、既に前記検索条件記憶手段に記憶されている前記検索条件に合致するか否かを判断することを特徴とする付記１記載の情報検索方法。
【０２３９】
（付記７）  前記公開情報格納手段は、前記公開情報記憶手段に記憶された前記公開情報が所定の条件を満たしたとき、前記公開情報を削除することを特徴とする付記１記載の情報検索方法。
【０２４０】
（付記８）  前記検索条件格納手段は、前記検索条件記憶手段に記憶された前記検索条件が所定の条件を満たしたとき、前記検索条件を削除することを特徴とする付記１記載の情報検索方法。
【０２４１】
（付記９）  ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索方法において、
前記情報公開要求の送信元である公開元装置が、情報の公開指示に応じて、前記ネットワーク内の複数の情報検索装置の中から少なくとも１つの前記情報検索装置を選択し、選択した前記情報検索装置に対して前記情報公開要求を匿名通信によって送信し、
前記情報検索要求の送信元である検索元装置が、情報の検索指示に応じて、前記ネットワーク内の複数の前記情報検索装置の中から少なくとも１つの前記情報検索装置を選択し、選択した前記情報検索装置に対して、検索条件を含む前記情報検索要求を匿名通信によって送信し、
前記ネットワークを構成する前記情報検索装置それぞれにおいて、
公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
情報公開要求転送手段が、前記情報公開要求を隣接する他の情報検索装置に対して転送し、
検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
情報検索要求転送手段が、前記情報検索要求を隣接する他の情報検索装置に対して転送し、
検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記検索元装置に対して前記公開情報を匿名通信によって送信する、
ことを特徴とする情報検索方法。
【０２４２】
（付記１０）  ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索装置において、
他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納する公開情報格納手段と、
前記ネットワーク内の装置間の関係が木構造で定義されており、前記情報公開要求を前記木構造における親装置に対して転送する情報公開要求転送手段と、
他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納する検索条件格納手段と、
前記情報検索要求を前記木構造における前記親装置に対して転送する情報検索要求転送手段と、
前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索する検索手段と、
前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する検索結果通知手段と、
を有することを特徴とする情報検索装置。
【０２４３】
（付記１１）  ピアツーピア方式のネットワーク上で公開されている情報を検索するための情報検索プログラムにおいて、
コンピュータに、
公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
前記ネットワーク内の装置間の関係が木構造で定義されており、情報公開要求転送手段が、前記情報公開要求を前記木構造における親装置に対して転送し、
検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
情報検索要求転送手段が、前記情報検索要求を前記木構造における前記親装置に対して転送し、
検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する、
処理を実行させることを特徴とする情報検索プログラム。
【０２４４】
（付記１２）  ピアツーピア方式のネットワーク上で公開されている情報を検索するための情報検索プログラムを記録したコンピュータ読み取り可能な記録媒体において、
コンピュータに、
公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
前記ネットワーク内の装置間の関係が木構造で定義されており、情報公開要求転送手段が、前記情報公開要求を前記木構造における親装置に対して転送し、
検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
情報検索要求転送手段が、前記情報検索要求を前記木構造における前記親装置に対して転送し、
検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する、
処理を実行させることを特徴とする情報検索プログラムを記録したコンピュータ読み取り可能な記録媒体。
【図面の簡単な説明】
【０２４５】
【図１】実施の形態に適用される発明の概念図である。
【図２】本実施の形態のネットワーク構成例を示す図である。
【図３】本発明の実施の形態に用いるノードのハードウェア構成例を示す図である。
【図４】本発明の実施の形態における情報検索を示す概念図である。
【図５】ネットワークの木構造を示す図である。
【図６】木構造を利用した情報検索の概念図である。
【図７】ノード内の処理機能を示すブロック図である。
【図８】ノード管理テーブルのデータ構造例を示す図である。
【図９】情報公開時の処理を示す図である。
【図１０】情報検索時の処理を示す図である。
【図１１】検索ヒット時の処理を示す図である。
【図１２】匿名通信路形成過程の状態遷移を示す図である。
【図１３】ルート探索開始処理の手順を示すフローチャートである。
【図１４】ルート探索パケットのデータ構造例を示す図である。
【図１５】ルート探索パケットの受信処理の手順を示すフローチャートである。
【図１６】ルート通知パケットのデータ構造例を示す図である。
【図１７】ルート通知パケット受信処理を示すフローチャートである。
【図１８】データパケットのデータ構造例を示す図である。
【図１９】匿名性の高い電子掲示板の構成例を示す図である。
【図２０】各ノードがキャッシュする情報を示す図である。
【図２１】生成された匿名通信路を示す図である。
【図２２】経路長を短縮させた匿名通信路生成例を示す図である。
【図２３】グレープルーティングを行う際のデータパケットの構造例を示す図である。
【図２４】グレープルーティングを行うときのキャッシュ内容を示す図である。
【図２５】検索結果通知の様子を示す図である。
【図２６】検索元ノードと送信元ノードとの間の匿名通信路を示す図である。
【図２７】ノードの結託を防止した場合の匿名通信路の例を示す図である。
【図２８】可用性を重視したときの匿名通信路の例を示す図である。
【符号の説明】
【０２４６】
１  情報検索装置
１ａ  公開情報格納手段
１ｂ  公開情報記憶手段
１ｃ  情報公開要求転送手段
１ｄ  検索条件格納手段
１ｅ  検索条件記憶手段
１ｆ  情報検索要求転送手段
１ｇ  検索手段
１ｈ  検索結果通知手段
２  公開元装置
３  検索元装置
４，５  子装置
６  親装置
７  情報公開要求
８  情報検索要求
【図１】
2005159911.tif 000003
【図２】
2005159911.tif 000004
【図３】
2005159911.tif 000005
【図４】
2005159911.tif 000006
【図５】
2005159911.tif 000007
【図６】
2005159911.tif 000008
【図７】
2005159911.tif 000009
【図８】
2005159911.tif 000010
【図９】
2005159911.tif 000011
【図１０】
2005159911.tif 000012
【図１１】
2005159911.tif 000013
【図１２】
2005159911.tif 000014
【図１３】
2005159911.tif 000015
【図１４】
2005159911.tif 000016
【図１５】
2005159911.tif 000017
【図１６】
2005159911.tif 000018
【図１７】
2005159911.tif 000019
【図１８】
2005159911.tif 000020
【図１９】
2005159911.tif 000021
【図２０】
2005159911.tif 000022
【図２１】
2005159911.tif 000023
【図２２】
2005159911.tif 000024
【図２３】
2005159911.tif 000025
【図２４】
2005159911.tif 000026
【図２５】
2005159911.tif 000027
【図２６】
2005159911.tif 000028
【図２７】
2005159911.tif 000029
【図２８】
2005159911.tif 000030