以下、本発明の実施の形態を図面を参照して説明する。
まず、実施の形態に適用される発明の概要について説明し、その後、実施の形態の具体的な内容を説明する。
図1は、実施の形態に適用される発明の概念図である。図1には、ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索装置1が示されている。この情報検索装置1は、公開情報格納手段1a、公開情報記憶手段1b、情報公開要求転送手段1c、検索条件格納手段1d、検索条件記憶手段1e、情報検索要求転送手段1f、検索手段1g、および検索結果通知手段1hを有している。
また、ネットワーク上の装置間の関係が木構造で定義されている。たとえば、情報検索装置1に対する子装置4,5や親装置6が定義されている。そして、木構造を構成している各装置に対して、情報公開要求7や情報検索要求8が渡される。図1の例では、公開元装置2から情報公開要求7を送信され、検索元装置3から情報検索要求8が送信されている。
公開情報格納手段1aは、他の装置から公開情報を含む情報公開要求7を受け取った場合、公開情報記憶手段1bに対して公開情報を格納する。たとえば、木構造における子装置4から情報公開要求7が渡される。
公開情報記憶手段1bは、コンピュータによって読み取り可能な情報を記憶可能な記録媒体内の記憶領域である。公開情報記憶手段1bに格納された公開情報は、情報のキャッシュ処理と同様に、一定期間使用されない等の所定の条件を満たしたときに削除することができる。
情報公開要求転送手段1cは、受け取った情報公開要求7を木構造における親装置6に対して転送する。このように木構造を構成する各装置が情報公開要求7をその親装置に対して転送していくことで、情報公開要求7が木構造における最上位(ルート)の装置まで転送される。
検索条件格納手段1dは、他の装置から検索条件を含む情報検索要求8を受け取った場合、検索条件記憶手段1eに対して検索条件を格納する。たとえば、木構造における子装置5から情報検索要求8が渡される。
検索条件記憶手段1eは、コンピュータによって読み取り可能な情報を記憶可能な記録媒体内の記憶領域である。検索条件記憶手段1eに格納された検索条件は、情報のキャッシュ処理と同様に、一定期間使用されない等の所定の条件を満たしたときに削除することができる。
情報検索要求転送手段1fは、情報検索要求8を木構造における親装置6に対して転送する。このように木構造を構成する各装置が情報検索要求8をその親装置に対して転送していくことで、情報検索要求8が木構造における最上位(ルート)の装置まで転送される。
検索手段1gは、検索条件記憶手段1eに記憶された検索条件に基づいて、公開情報記憶手段1bに記憶された公開情報を検索する。たとえば、検索手段1gは、新たな検索条件が検索条件記憶手段1eに格納されたとき、その検索条件に合致する公開情報を、公開情報記憶手段1b内から検索する。また、検索手段1gは、新たな公開情報が公開情報記憶手段1bに格納されたとき、その公開情報が検索条件記憶手段1eに格納されている各検索条件に合致するか否かを判断する。
検索結果通知手段1hは、検索条件に公開情報が合致した場合、該当する検索条件の情報検索要求8の送信元である検索元装置3に対して検索結果を送信する。検索結果には、たとえば、検索条件に合致した公開情報の全部または一部を含める。また、公開情報と共に、公開情報の送信元である公開元装置2の識別情報が格納されている場合、その識別情報を検索結果として検索元装置3に送信すればよい。検索元装置3は、公開元装置2の識別情報に基づいて公開元装置2にアクセスし、公開情報を取得することができる。
このような構成の情報検索装置1によれば、子装置4から情報公開要求7を受け取った場合、公開情報格納手段1aによって、公開情報記憶手段1bに公開情報が格納される。また、情報公開要求転送手段1cによって、情報公開要求7が親装置6に対して転送される。
また、子装置5から情報検索要求8を受け取った場合、検索条件格納手段1dによって、検索条件記憶手段1eに対して検索条件が格納される。また、情報検索要求転送手段1fによって、情報検索要求8が親装置6に対して転送される。
その後、検索手段1gによって、検索条件記憶手段1eに記憶された検索条件に基づいて、公開情報記憶手段1bに記憶された公開情報が検索される。検索によって公開情報が合致した場合、検索結果通知手段1hによって、情報検索要求8の送信元である検索元装置3に対して検索結果が送信される。
このように、情報公開要求7と情報検索要求8とを、木構造の上位の装置に順次転送すると共に、それらの要求を中継した装置に置いて公開情報や検索条件を格納するようにした。そのため、公開元装置2は、木構造を構成する何れかの装置に情報公開要求7を送信すれば、その情報公開要求7は最上位の装置まで転送される。同様に、検索元装置3は、木構造を構成する何れかの装置の情報検索要求8を送信すれば、その情報検索要求8は最上位の装置まで転送される。従って、情報公開要求7に含まれる公開情報は、木構造上の何れかの装置において、必ず情報検索要求8に含まれる検索条件に基づく検索の対象となる。すなわち、公開されている情報の検索漏れは無くなる。
しかも、木構造を構成する全ての装置に対して情報検索要求を送信する必要は無いため、検索効率が向上する。さらに、各装置において検索条件を記憶しておき、後で公開された情報があっても、先に格納されていた検索条件に基づいて検索するようにすることで、検索元装置3のユーザは、目的の情報を適宜受け取ることが可能となる。
ところで、公開元装置2から木構造内の装置(たとえば子装置4)に対して情報公開要求7を送信する際に、匿名通信路を経由して送信することができる。同様に、検索元装置3から木構造内の装置(たとえば子装置5)に対して情報検索要求8を送信する際に、匿名通信路を経由して送信することができる。匿名通信路による匿名通信は、たとえば、オニオンルーティングの技術によって行うことができる。オニオンルーティングでは、パケットを中継する各装置が、自分の暗号鍵で所定の情報を復号することで、パケットの次の転送先を知ることができる。すなわち、暗号化の鍵を不特定多数に分散することができる。そのため、暗号鍵の一極集中による匿名化の脆弱性を無くすることができる。
匿名通信路を経由して情報公開要求7や情報検索要求8が転送された場合、公開情報や検索条件と共に、匿名通信路の情報を格納しておく。そして、公開情報が検索でヒットしたとき、検索結果通知手段1hは、その公開情報が転送されてきたときの匿名通信路や子装置4の識別情報を含めて検索元装置3に送信する。この際、検索条件と共に格納されていた匿名通信路を経由して送信される。これにより、検索元装置3は、公開元装置2にアクセスするための匿名通信路を知ることができる。その結果、検索後に公開元装置2と検索元装置3との間で匿名的に双方向のコミュニケーションを行うことができる。
次に本発明の実施の形態について具体的に説明する。なお、以下の実施の形態では、公開される情報のメタデータをオニオンリファレンスと呼び、このオニオンリファレンスをP2Pネットワーク上の各ノードでキャッシュする。また、情報を検索する側のノードは、各ノード内の情報を検索する検索エージェントを送信し、この検索エージェントをP2Pネットワーク上の各ノードでキャッシュする。
図2は、本実施の形態のネットワーク構成例を示す図である。P2Pネットワーク10は、複数のノード100,200,310,320,330,340,350によって構成されている。各ノード100,200,310,320,330,340,350は、隣接ノードと接続されている。ノード100,200,310,320,330,340,350は、コンピュータとしての機能を備えた装置である。
図3は、本発明の実施の形態に用いるノードのハードウェア構成例を示す図である。ノード100は、CPU(Central Processing Unit)101によって装置全体が制御されている。CPU101には、バス107を介してRAM(Random Access Memory)102、ハードディスクドライブ(HDD:Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105、および通信インタフェース106が接続されている。
RAM102には、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。HDD103には、OSやアプリケーションプログラムが格納される。オニオンリファレンスや検索エージェントは、RAM102やHDD103に格納される。
グラフィック処理装置104には、モニタ11が接続されている。グラフィック処理装置104は、CPU101からの命令に従って、画像をモニタ11の画面に表示させる。入力インタフェース105には、キーボード12とマウス13とが接続されている。入力インタフェース105は、キーボード12やマウス13から送られてくる信号を、バス107を介してCPU101に送信する。
通信インタフェース106は、P2Pネットワーク10に接続されている。通信インタフェース106は、P2Pネットワーク10を介して、他のノードとの間でデータの送受信を行う。
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図3にはノード100のハードウェア構成を示したが、他のノード200,310,320,330,340,350も同様のハードウェア構成で実現できる。
まずオニオンリファレンスと検索エージェントとをキャッシュすることによる検索システムの概念を説明する。
図4は、本発明の実施の形態における情報検索を示す概念図である。本発明に係る匿名P2P情報共有システムは、P2Pネットワークの各ノードが保持する発信情報を、匿名的に効率よく検索する機構である。ノード間の検索機能は、オニオンルーティング等の匿名機能を利用して行われる。
図4の例では、ノード100が情報を公開し、ノード200が公開された情報を検索するものとする。
情報の公開は、ノード100内の情報公開処理部110に対する情報公開者の指示に基づいて行われる。公開される情報は、ノード100内に格納される。また、ノード100からネットワークを介してオニオンリファレンス311,321,331が送信され、各ノード310,320,330で登録される。オニオンリファレンス311,321,331は、公開された情報の特徴を示す情報(メタデータ)である。オニオンリファレンス311,321,331には、公開された情報の作成日等の管理情報や、情報内のキーワードなどが含まれる。また、オニオンリファレンス311,321,331は、情報の公開元であるノード100までの通信ルートに関する情報を含んでいる。なお、オニオンリファレンス311,321,331に、公開する情報全体を含めることも可能である。
登録されたオニオンリファレンス311,321,331は検索の対象となる。さらに、登録されたオニオンリファレンス311,321,331は所定の条件を満たしたとき(たとえば、最後に利用されてからの経過時間が所定時間を超えたとき)に削除される。すなわち、オニオンリファレンス311,321,331は、ノード310,320,330にキャッシュされた情報である。
情報の検索は、ノード200内の情報検索処理部210に対する情報検索者の指示に基づいて行われる。ノード200に対して検索条件が入力されると、ノード200からネットワークを介して検索エージェント341,351,332が送信され、他のノード340,350,330に検索エージェント341,351,332が登録される。検索エージェント341,351,332は、指定された検索条件に基づいて、登録されたノード内のオニオンリファレンスを検索する機能である。なお、検索エージェント341,351,332は、情報の検索元であるノード200までの通信ルートに関する情報を含んでいる。
検索エージェント341,351,332は、登録時にノード340,350,330内のオニオンリファレンスを検索する。また、検索エージェント341,351,332は、後から登録されたオニオンリファレンスを検索する。検索条件に合致するオニオンリファレンスを検出した場合、検索エージェント341,351,332は、そのオニオンリファレンスの情報を、検索元のノード200に通知する。なお、登録された検索エージェント341,351,332は、所定の条件を満たしたとき(たとえば、最後に利用されてからの経過時間が所定時間を超えたとき)に削除される。すなわち、検索エージェント341,351,332は、ノード340,350,330にキャッシュされた情報である。
オニオンリファレンスと検索エージェントとは、ネットワーク上の何れかのノード上で同時にキャッシュされる。図4の例では、ノード330において、オニオンリファレンス331と検索エージェント332とがキャッシュされている。すると、検索エージェント332による検索処理によって、オニオンリファレンス331が対象となる。そのとき、検索エージェント332における検索条件にオニオンリファレンス331が合致すれば、オニオンリファレンス331が検出される(検索ヒットする)。
オニオンリファレンス331を検出した検索エージェント332は、オニオンリファレンス331とノード200からノード330までの通信ルートの情報とを、ノード200の情報検索処理部210に通知する。これにより、ノード200を利用する検索者は、ノード100において検索条件を満たす情報が公開されていることを知ることができる。
また、オニオンリファレンス331には、ノード330からノード100までの通信ルートの情報が含まれており、検索エージェント332からノード330からノード200までの通信ルートが通知されるため、ノード200は、ノード200からノード100までの通信ルートを知ることができる。
ところで、本発明の実施の形態では、検索エージェントによるオニオンリファレンスの検索を効率よく実行するために、ノード間の接続関係に対して、木構造上の親子関係を定義する。たとえば、P2Pネットワークに新たに参加するノードは、既にP2Pネットワークに参加している何れかのノードに対して接続要求を送信する。送信した接続要求が許可されることで、接続要求を出力したノードが新たにP2Pネットワーク上のノードとなる。そこで、本実施の形態では、接続要求を送信したノードを、子ノード、接続を許可したノードを親ノードとして定義する。
図5は、ネットワークの木構造を示す図である。図5に示すP2Pネットワークは、複数のノード21〜33で構成されている。通信可能なノード間は実線で結ばれている。また、木構造における親子関係がある場合、その親子関係がノード間を接続する実線の矢印で示されている。矢印は、親ノードから子ノードを指し示している。
図5の例では、ノード21が木構造上の最上位のノード(ルートノード)である。ルートノードは、たとえば、P2Pネットワークの運用を開始する際に、サービス提供を管理する機関によって設置される。P2Pネットワークに参加するノードは、ルートノードに対して直接接続するか、あるいはP2Pネットワークに既に参加しているノードに対して接続する必要がある。
ノード21には、ノード22,23が子ノードとして接続されている。ノード22には、ノード24,25が子ノードとして接続されている。ノード23には、ノード26,27が子ノードとして接続されている。ノード24には、ノード28が子ノードとして接続されている。ノード25には、ノード29が子ノードとして接続されている。ノード26には、ノード30が子ノードとして接続されている。ノード27には、ノード31が子ノードとして接続されている。ノード29には、ノード32が子ノードとして接続されている。ノード31には、ノード33が子ノードとして接続されている。
本実施の形態では、中央で木構造を管理するサーバを用意せず、ノード同士の情報交換により次のように自律的に木構造を構成する。
基本的には、新たにP2Pネットワークにノードが接続されるとき、接続要求を出力したノードが子ノード、接続要求を受け付けたノードが親ノードとして関係付けられる。
また、木構造を構成する際、基本構成はn分岐とする(nは自然数)。n分岐とは、1つのノードに隣接した接続されるノードの数がn個であることを意味する。構成遷移の途中など瞬間的にはn分岐にならない場合もあるがルーティングテーブル更新などで時間経過とともにn分岐で安定させることができる。n分岐で安定させる方法としては、なるべく兄弟となるノードの数を少なくすることと、木構造の階層を深くしないこととが考えられる。
すなわち、各ノードは、少なくとも、自分に隣接するノードとの間の親子関係を管理する。また、各ノードに対して、自分がどの階層にいるのか、子ノードはいくつかといった情報を持たせてルーティングテーブル交換時にその情報も共有する。各ノードが階層を管理することで、新たに接続してきた相手に対し、なるべく上位で子ノードの少ないノードへ接続しに行くように通知する。認識したノードの子ノードの数が制限値いっぱいの場合は、上位ノード、下位ノード両方の情報を通知する。その場合接続するノードはまず下位のノードへ接続を試みる。
さらに、階層に限界値を持たせてそれ以上下側に接続しない。限界値としては、たとえば初期値を6とし、そのノードの管理者が所定の範囲内で変更できるようにする。新たなノードを接続するとき、認識しているノード内に子ノードを持てるノードがない場合が考えられる。その場合、新たに木構造に参加するノードは、認識しているノードの上位ノードへ接続対象を換えながら接続を試みる。同様に最上位まで行った場合は、新たに木構造に参加するノードは、最上位のノードから下位のノードへ接続対象を換えながら接続を試みる。
子ノードを持っているノードがネットワーク上から消失した場合(たとえば、ノードの動作が停止した場合)、各子ノードは、消失したノードの親ノードへ接続を試みる。先に受け付けられたノードが、木構造における消失ノードの位置に配置される。遅れて受け付けられたノードは新規ノードの接続ロジックと同じ扱いになる。
なお、木構造は、以下のような処理を行うことで最適化される。
プライベートIPノードが木構造においてグローバルIPノードより上位にある場合は、プライベートIPノードを下位へ移動させる。さらに、プライベートIPノードもポーリング等によりサーバノードとして機能させる。
また、隣接ノード間の通信時間(セッション接続開始から終了まで)を測定し、速度が速く高性能なノードほど上位へ、速度が遅いノードほど下位へ移動させる。
このようにして、木構造を最適化できる。ノード間の関係が木構造で定義されると、オニオンリファレンスの伝送や検索エージェントの伝送を、木構造の上位のノードに向けて行うことができる。これにより、オニオンリファレンスの伝送や検索エージェントをブロードキャストで送信しなくても、確実にオニオンリファレンスと検索エージェントとを、何れかのノード上で合流させることができる。
しかも、本実施の形態では、公開元と検索元との匿名性を保つために、仮の公開元と仮の検索元とを設定することができる。公開元と仮の公開元との間のデータ通信は、オニオンルーティングによって匿名性が高められている。同様に、検索元と仮の検索元との間のデータ通信は、オニオンルーティングによって匿名性が高められている。
図6は、木構造を利用した情報検索の概念図である。図6の例には、複数のノード41〜63を含むP2Pネットワークが示されている。このP2Pネットワークには、ノード41をルートノードとする木構造が定義されている。ここで、ノード42が公開元であり、ノード51が検索元である。
ノード42は、公開する情報を送信する場合、まず、仮の公開元を選択する。P2Pネットワーク内の任意のノードを仮の公開元とすることができる。たとえば、ノード42は、ノード42自身が存在を認識している他のノードから、そのノードが認識しているノードの情報を取得する。そして、ノード42は、取得したノードの情報(たとえばノードIDやIPアドレス)から任意のノードを選択し、仮の公開元とする。この例では、ノード52を仮の公開元として選択したものとする。
次に、ノード42は仮の公開元までの匿名通信路を探索する。図6の例では、ノード56、ノード57、ノード58、ノード59、ノード52の順でパケットを受け渡すことができる。ノード42は、ルート探索の際に、各ノード52,56〜59の公開鍵を取得する。そして、ノード42は、検出したルートに沿って転送されるパケットを生成する。この際、各ノード52,56〜59の公開鍵を利用し、オニオンルーティングの技術を適用したパケットが生成される。生成されたパケットには、公開情報のオニオンリファレンスが含まれる。
ノード42は、生成したパケットを匿名通信路上で隣接するノード56に渡す。すると、そのパケットがオニオンルーティングによって転送され、仮の公開元として選択されたノード52に渡される。
オニオンルーティングでは、中継する各ノードがパケットのルート情報(オニオンルート)を自分自身の秘密鍵で復号することにより、次の転送先となるノードを知ることができる。この際、中継するノードにおいて知ることができるのは、パケットを転送してきた隣接ノードと、パケットを渡すべき隣接ノードだけである。すなわち、そのパケットの公開元のノードや宛先のノードについては、中継ノードでは知ることができない。これにより、パケットの送信元と宛先の匿名性が確保される。
また、中継する各ノードは、パケットの逆方向に転送する際の戻りルート情報を生成しながら、パケットを転送する。すなわち、各ノードは、自分の識別情報(IPアドレス等)を、パケット転送先の隣接ノードの公開鍵で暗号化して、転送するパケットに追加する。このように、各ノードが自分の識別情報を隣接ノードのみが復号可能な形式のデータでパケットに含めていくことで、戻りルート情報が構築される。戻りルート情報は、逆方向のパケット転送の際に、オニオンルートとして使用される。
宛先のノード52は、受け取ったパケットを、自分自身の秘密鍵で復号することにより、宛先が自分自身であることを知ることができるとともに、オニオンリファレンスを取得できる。ノード52は、自分宛のオニオンリファレンスを受け取ると、そのオニオンリファレンスをキャッシュする。その結果、ノード52にオニオンリファレンス71が保持される。このオニオンリファレンス71には、公開元のノード42までの戻りルート情報が含まれる。
さらにノード52は、戻りルート情報を含むオニオンリファレンスを、木構造における親に当たるノード46に渡す。ノード46は、受け取ったオニオンリファレンスをキャッシュする。その結果、ノード46にオニオンリファレンス72が保持される。
同様に、ノード46は、戻りルート情報を含むオニオンリファレンスを、親に当たるノード43に渡す。ノード43は、受け取ったオニオンリファレンスをキャッシュする。その結果、ノード43にオニオンリファレンス73が保持される。
同様に、ノード43は、戻りルート情報を含むオニオンリファレンスを、親に当たるノード41に渡す。ノード41は、受け取ったオニオンリファレンスをキャッシュする。その結果、ノード41にオニオンリファレンス74が保持される。
このようにして、仮の公開元であるノード52からルートのノード41までの経路上の各ノードに、オニオンリファレンスがキャッシュされる。
次に、情報検索手順を説明する。
ノード51は、情報を検索する場合、まず、仮の検索元を選択する。P2Pネットワーク内の任意のノードを仮の検索元とすることができる。たとえば、ノード51は、ノード51自身が存在を認識している他のノードから、他のノードが認識しているノードの情報を取得する。そして、ノード51は、取得したノードの情報(たとえばIPアドレス)から任意のノードを選択し、仮の検索元とする。この例では、ノード55を仮の検索元として選択したものとする。
次に、ノード51は仮の検索元までの匿名通信路を探索する。図6の例では、ノード60、ノード61、ノード62、ノード63、ノード55の順でパケットを受け渡すことができる。ノード51は、ルート探索の際に、各ノード55,60〜63の公開鍵を取得する。そして、ノード51は、検出したルートに沿って転送されるパケットを生成する。この際、ノード51は、各ノード55,60〜63の公開鍵を利用して、オニオンルーティングの技術を適用したパケットを生成する。生成したパケットには、検索エージェントが含まれる。
ノード51は、生成したパケットを隣接するノード60に渡す。すると、そのパケットがオニオンルーティングによって転送され、仮の検索元として選択されたノード55に渡される。オニオンルーティングの手法は、オニオンリファレンスを送信する場合と同様である。また、パケットが中継される際には、同じルートを逆方向に転送するための戻りルート情報が生成され、パケットに追加される。
宛先のノード55は、受け取ったパケットを、自分自身の秘密鍵で復号することにより、宛先が自分自身であることを知ることができるとともに、検索エージェントを取得できる。ノード55は、自分宛の検索エージェントを受け取ると、その検索エージェントをキャッシュする。その結果、ノード55に検索エージェント81が保持される。この検索エージェント81には、検索元のノード51までの戻りルート情報が含まれる。
さらにノード55は、戻りルート情報を含む検索エージェントを、木構造における親に当たるノード47に渡す。ノード47は、受け取った検索エージェントをキャッシュする。その結果、ノード47に検索エージェント82が保持される。
同様に、ノード47は、戻りルート情報を含む検索エージェントを、親に当たるノード43に渡す。ノード43は、受け取った検索エージェントをキャッシュする。その結果、ノード43に検索エージェント83が保持される。
同様に、ノード43は、戻りルート情報を含む検索エージェントを、親に当たるノード41に渡す。ノード41は、受け取った検索エージェントをキャッシュする。その結果、ノード41に検索エージェント84が保持される。
このようにして、仮の公開元であるノード52からルートのノード41までの経路上の各ノードに、検索エージェントがキャッシュされる。
各ノードにキャッシュされた検索エージェントは、対応するノード内にキャッシュされているオニオンリファレンスを検索対象として、検索処理を実行する。情報検索者がノード51に対して指示した検索条件に、ノード42で公開されている情報が合致している場合、ノード43の検索エージェント83がオニオンリファレンス73を検出する。
オニオンリファレンス73が検出されると、検索エージェント83に含まれる戻りルート情報を用いて、検索元のノード51に検索結果を転送するためのパケットが生成される。そのパケットには、オニオンリファレンス73の内容が含められる。生成されたパケットは、ノード63、ノード62、ノード61、ノード60、ノード51の順で転送される。その結果、ノード51においてオニオンリファレンスが取得できる。
オニオンリファレンスには、ノード42からノード52までの戻りルート情報が関連付けられており、この戻りルート情報も検索結果に含まれる。これにより、ノード51は、ノード42までの匿名通信路を取得することができ、匿名通信路を介してノード42で公開されている情報にアクセス可能となる。
このように、本実施の形態では全件検索を全P2Pマルチキャストメッセージ送信によらず効率よく行うために、P2Pネットワークのノード構成の部分構造として階層的な木構造を構築している。オニオンリファレンスは、最初にランダムに選択したノードから上位のノードへ向かって順次キャッシュされる。検索側も検索エージェントは、最初にランダムに選択したノードから上位のノードへ向かって順次キャッシュされる。キャッシュされた検索エージェントは、キャッシュされたノードの内のオニオンリファレンスの検索を行う。
オニオンリファレンスと検索エージェントとの双方が、木構造の上位へ順次転送されると共に、中継したノードでキャッシュされることで、オニオンリファレンスと検索エージェントとは、木構造内の何れかのノード上で出逢うことができる。すなわち、オニオンリファレンスや検索エージェントをブロードキャストで送信しなくても、ノード42で公開された情報をノード51から検出することができる。その結果、P2Pネットワーク上での効率の良い情報検索が可能となる。
しかも、仮の公開元と仮の検索元を設定するため、情報提供者や情報検索者の匿名性が守られる。すなわち、公開元のノード42と仮の公開元のノード52との間は、匿名通信が行われるため、中継する各ノード56〜59は公開元と仮の公開元とを知ることはできない。
さらに、公開元のノード42から仮の公開元のノード52への匿名通信を行う際に戻りオニオン情報を生成することで、検索ヒット後、検索元から公開元への匿名通信路を生成することができる。
なお、検索でヒットしたノードから上位側へは、ヒットした検索エージェントへの検索中止のメッセージを伝播させるなど、検索元のノードへの2重通知を防ぐことができる。また、検索でヒットしたノードは、発見したオニオンリファレンスを使用して公開元のノードから実体の情報を入手することもできる。そして、入手した公開情報の実体を、検索元のノードへのオニオンルート(オニオンルーティングにおける匿名通信路を示す)を使用して、検索元のノードへ送信してもよい。
次に、木構造の関係を利用した情報検索を実現するために各ノードが有すべき処理機能について具体的に説明する。
図7は、ノード内の処理機能を示すブロック図である。ノード100は、情報公開処理部110、情報検索処理部120、検索エンジン130、公開情報キャッシュ部140、仮公開元ノード選択部150、検索エージェントキャッシュ部160、仮検索元ノード選択部170、ルーティング部180、およびノード管理テーブル190を有している。
これらの要素のうち、情報公開処理部110、検索エンジン130、公開情報キャッシュ部140、および仮公開元ノード選択部150によって情報公開機能が構成される。また、情報検索処理部120、検索エンジン130、検索エージェントキャッシュ部160、および仮検索元ノード選択部170によって、情報検索機能が構成される。
情報公開処理部110は、情報公開者からの操作入力等に基づいて、情報公開処理を行う。具体的には、情報公開処理部110は、公開する情報を保持し、他のノードからの要求に応じてその情報を送信する。なお、公開する情報は、たとえば、HDD等に格納される。
さらに、情報公開処理部110は、仮公開元ノード選択部150に対して、仮公開元として動作するノードの選択処理を依頼する。また、情報公開処理部110は、情報公開の指示を受けたとき、公開情報キャッシュ部140に対して、オニオンリファレンスの送信を依頼する。
情報検索処理部120は、情報検索者からの操作入力等に基づいて、P2Pネットワークを介した情報検索を行う。具体的には、情報検索処理部120は、検索条件の入力を受け付ける。情報検索処理部120は、情報検索の実行指示を受けると、仮検索元ノード選択部170に対して、仮検索元として動作するノードの選択処理を依頼する。また、情報検索処理部120は、検索エージェントキャッシュ部160に対して、検索エージェントの送信処理を依頼する。
検索エンジン130は、オニオンリファレンスを検索対象として、検索エージェントに従った情報の検索を実行する。具体的には、検索エンジン130は、公開情報キャッシュ部140からオニオンリファレンスを受け取ると、そのオニオンリファレンスを記憶する(たとえば、RAM102やHDD103等の記憶装置に格納する)。また、検索エンジン130は、検索エージェントキャッシュ部160から検索エージェントを受け取ると、その検索エージェントを記憶する(たとえば、RAM102やHDD103等の記憶装置に格納する)。
そして、検索エンジン130は、記憶した検索エージェントを所定のタイミングで起動し、記憶しているオニオンリファレンスの検索を実行させる。具体的には、検索エンジン130は、新たに検索エージェントを記憶したときに、その検索エージェントを起動する。その際の検索対象は、既に記憶している全てのオニオンリファレンスである。
また、検索エンジン130は、新たなオニオンリファレンスを記憶したとき、そのとき既に記憶している全ての検索エージェントを起動する。その際の検索対象は、新たに記憶したオニオンリファレンスである。
検索エンジン130は、検索エージェントによる検索で検索条件に合致するオニオンリファレンスが検出された場合、検索元のノードに対して検索結果を通知する。検索結果には、オニオンリファレンスや、公開元のノードまでの匿名通信路の情報などが含まれる。
公開情報キャッシュ部140は、情報公開処理部110からオニオンリファレンスの送信依頼を受け取ると、公開する情報に関するメタデータ(作成日やキーワード等)を含むオニオンリファレンスを生成する。
また、公開情報キャッシュ部140は、仮公開元ノード選択部150から仮公開元ノードとして選択したノードのノードIDまたはIPアドレスを取得する。すると、公開情報キャッシュ部140は、ルーティング部180に対して、仮公開元ノードまでの匿名通信路の探索を依頼する。公開情報キャッシュ部140は、ルーティング部180から匿名通信路を受け取ると、仮公開元ノード宛に匿名通信路を介してオニオンリファレンスを送信する。
また、公開情報キャッシュ部140は、他のノードからオニオンリファレンスを受け取ると、そのオニオンリファレンスを検索エンジン130に渡し、キャッシュさせる。その後、公開情報キャッシュ部140は、受け取ったオニオンリファレンスを親ノードに対して送信する。キャッシュされたオニオンリファレンスは、以下の情報を有する。
・キャッシュされているノードから公開元ノードまでのオニオンルート
・複数のリファレンスが同一の実体を表すことを示すための一時識別子
・発信される情報、または、情報の内容を示すメタデータ。後者の場合、情報の実体は公開元のノードに置かれる。
オニオンリファレンスは、木構造における親ノードに順次転送されることで、P2Pネットワーク上の複数のノードにキャッシュされる。ここで、オニオンリファレンスのキャッシュには2種類の寿命が設定できるようにする。
・投稿者が最初に投稿した時間から設定時間を経過すると消滅する(いつか全部消える)。
・新しくキャッシュされた時間から設定時間を経過すると消滅する(検索対象は残る)。
公開情報キャッシュ部140は、寿命に達したオニオンリファレンスを、検索エンジン130内から削除する。
仮公開元ノード選択部150は、情報公開処理部110から仮公開元とするノードの選択要求を受け取ると、仮公開元とするノードの選択処理を行う。たとえば、仮公開元ノード選択部150は、ノード管理テーブル190を参照し、自分自身から7ホップ離れた位置にあるノードのIPアドレスを取得する。そして、仮公開元ノード選択部150は、取得したIPアドレスに基づき、7ホップ離れたノードに対し、そのノードからさらに7ホップ離れた位置にあるノードのIPアドレスのリスト(仮公開元ノード選択候補リスト)を要求する。仮公開元ノード選択候補リストが返されると、仮公開元ノード選択部150は、仮公開元ノード選択候補リストの中からIPアドレスを1つ選択する。選択したIPアドレスに対応するノードが仮公開元ノードとなる。仮公開元ノードを選択したら、仮公開元ノード選択部150は、仮公開元ノードのIPアドレスを公開情報キャッシュ部140に通知する。
また、仮公開元ノード選択部150は、他のノードから仮公開元ノード選択候補リストの取得要求を受け取ると、仮公開元ノード選択候補リストを生成して要求元に応答する。具体的には、仮公開元ノード選択部150は、仮公開元ノード選択候補リストの取得要求に応答してノード管理テーブル190を参照し、7ホップ離れたノードのIPアドレスを抽出する。そして、仮公開元ノード選択部150は、そのIPアドレスのリストを仮公開元選択候補リストとして、取得要求の送信元に対する応答として送信する。
検索エージェントキャッシュ部160は、情報公開処理部110から検索エージェントの送信依頼を受け取ると、指定された検索条件に該当するオニオンリファレンスの検索を行う検索エージェントを生成する。また、検索エージェントキャッシュ部160は、仮検索元ノード選択部170から仮検索元ノードとして選択したノードのIPアドレスを取得する。すると、検索エージェントキャッシュ部160は、ルーティング部180に対して、仮検索元ノードまでの匿名通信路の探索を依頼する。検索エージェントキャッシュ部160は、ルーティング部180から匿名通信路を受け取ると、仮検索元ノード宛に匿名通信路を介して検索エージェントを送信する。
また、検索エージェントキャッシュ部160は、他のノードから検索エージェントを受け取ると、その検索エージェントを検索エンジン130に渡し、キャッシュさせる。その後、検索エージェントキャッシュ部160は、受け取った検索エージェントを親ノードに対して送信する。
検索エージェントは、木構造の上位のノードに転送されながら、各ノードにキャッシュされる。検索エージェントキャッシュ部160は、検索エージェントをキャッシュしたとき、検索元ノードへの匿名通信路を示すオニオンルートも同時に格納する。キャッシュされた検索エージェントは、キャッシュ時に、検索エンジン130内のオニオンリファレンスを検索する。また、検索エージェントのキャッシュより後に、オニオンリファレンスが格納されたら、そのオニオンリファレンスが検索条件に合致するかどうかと判断する。検索条件にヒットしたら、検索エンジン130が、検索元ノードに検索結果を通知する。
なお、検索エージェントのキャッシュには寿命が設定できる。たとえば、検索者が最初に検索した時間から設定時間を経過すると消滅する(いつか全部消える)。具体的には、検索エージェントキャッシュ部160が、寿命に達した検索エージェントを検索エンジン130内から削除する。
仮検索元ノード選択部170は、情報公開処理部110から仮検索元とするノードの選択要求を受け取ると、仮検索元とするノードの選択処理を行う。具体的には、仮検索元ノード選択部170は、ノード管理テーブル190を参照し、自分自身から7ホップ離れた位置にあるノードのIPアドレスを取得する。そして、仮検索元ノード選択部170は、取得したIPアドレスに基づき、7ホップ離れたノードに対し、そのノードからさらに7ホップ離れた位置にあるノードのIPアドレスのリスト(仮検索元ノード選択候補リスト)を要求する。仮検索元ノード選択候補リストが返されると、仮検索元ノード選択部170は、仮検索元ノード選択候補リストの中からIPアドレスを1つ選択する。選択したIPアドレスに対応するノードが仮検索元ノードとなる。仮検索元ノードを選択したら、仮検索元ノード選択部170は、仮検索元ノードのIPアドレスを検索エージェントキャッシュ部160に通知する。
また、仮検索元ノード選択部170は、他のノードから仮検索元ノード選択候補リストの取得要求を受け取ると、仮検索元ノード選択候補リストを生成して要求元に応答する。具体的には、仮検索元ノード選択部170は、仮検索元ノード選択候補リストの取得要求に応答してノード管理テーブル190を参照し、7ホップ離れたノードのIPアドレスを抽出する。そして、仮検索元ノード選択部170は、そのIPアドレスのリストを仮検索元選択候補リストとして、取得要求の送信元に対する応答として送信する。
ルーティング部180は、パケットのルーティングを行う。たとえば、オニオンルーティングを技術により、発信者や宛先の匿名性を確保したルーティングを行うことができる。ルーティング部180は、接続された他のノードとの間でP2Pネットワーク上のノードの情報を交換し合っている。そして、ルーティング部180は、存在が確認されたノードの情報をノード管理テーブル190に登録する。
また、ルーティング部180は、指定されたノードまでの匿名通信路を探索することができる。たとえば、ルーティング部180は、仮公開元ノードまでの匿名通信路の探索要求を公開情報キャッシュ部140から受け取ると、匿名通信路の探索を行い、匿名通信路を示すオニオンルートを公開情報キャッシュ部140に渡す。同様に、ルーティング部180は、仮検索元ノードまでの匿名通信路の探索要求を検索エージェントキャッシュ部160から受け取ると、匿名通信路の探索を行い、匿名通信路を示すオニオンルートを検索エージェントキャッシュ部160に渡す。
ノード管理テーブル190は、P2Pネットワーク上で存在が確認されているノードに関する情報が登録された管理テーブルである。なお、本実施の形態におけるノード管理テーブル190は、パケットルーティングのためのルーティングテーブルを兼ねている。P2Pネットワークでは、IPアドレスは固定とならない場合が多いため、各ノードはノード管理テーブルの情報を互いに交換することで、各ノードの最新のIPアドレスを取得することができる。
図8は、ノード管理テーブルのデータ構造例を示す図である。ノード管理テーブル190には、ノードID、IPアドレス、ポート番号、ホップ数、テーブルをマージした隣接ノード、自ノードとの通信速度、ノードの設定速度あるいは固定サーバとの通信速度、データの暗号処理速度、単位時間あたりのメッセージ中継数、プライベートかグローバルか、自分との親子関係、階層レベル、及び子ノード数の情報が、存在が確認されたノード毎に登録されている。図8において横方向に並べられている情報同士が互いに関連付けられて、1つのノードのレコードを構成している。以下、各項目内の情報の説明において、その情報に対応するノードを、該当ノードと呼ぶこととする。また、ノード管理テーブル190が設けられているノード100を、自ノードと呼ぶこととする。
ノードIDは、P2Pネットワーク上で各ノードを一意に識別するための名称である。
IPアドレスは、各ノードのネットワーク上のアドレスである。
ポート番号は、該当するノードから通信が行われたときの、通信に使用されたアプリケーションを示す識別番号である。
ホップ数は、自ノードから該当するノードまでのホップ数(ホップカウント)である。ホップ数は、該当するノードにパケットが到達するまでにいくつのノードを経由するのかを示す数値である。自ノードのホップ数は0であり、隣接するノードのホップ数は1である。
テーブルをマージした隣接ノードとは、該当するノードと通信するためのパケットを渡すべき隣接ノードである。この項目には、該当する隣接ノードのノードIDが設定される。
自ノードとの通信速度は、該当するノードと自ノードとの間の通信速度である。
ノードの設定速度あるいは固定サーバとの通信速度の項目には、該当するノードにおいて通信速度が予め設定されている場合、その通信速度が登録される。たとえば、100Mbpsの速度で通信可能なネットワークであっても、あるノードと他のノードの間の通信に関して、最大で20Mbpsしか使用できないように制限されている場合がある。その場合、制限された通信速度が設定される。また、該当するノードに対して固定サーバを経由してアクセスする場合、その固定サーバとの間の通信速度が予め設定されている場合がある。その場合は、予め設定された固定サーバとの間の通信速度が、この項目に設定される。
データの暗号処理速度は、該当するノードにおいてデータの暗号処理が行われた場合に、どの程度の速度で暗号処理(データの暗号化や復号)が行われるかを示している。
単位時間あたりのメッセージ中継数は、単位時間あたりに何個のメッセージを中継できるのかを示している。
プライベートかグローバルかの項目には、該当するノードのIPアドレスがプライベートIPなのか、グローバルIPアドレスなのかが設定される。
自分との親子関係の項目には、自ノードから該当ノードに達するまでの木構造上での親子関係が設定される。親子関係は、自ノードの先祖であれば何代前の先祖であるのかが示され、自ノードの子孫であれば、何代後の子孫なのかが示される。
階層レベルには、該当ノードが、ルート(木構造の最上位)ノードから何代後のノードなのかが示される。
子ノード数には、該当ノードの子として接続されたノードの数が設定される。
なお、図7、図8には、ノード100の機能構成について説明したが、他のノードも同様の構成を有している。以下の説明では、ノード100以外の各ノードの構成要素は、図7内の同名の構成要素と同じ機能を有しているものとする。
このような機能を有するノードで木構造が構成されることにより、オニオンリファレンスと検索エージェントとによる情報検索が効率的に行われる。
次に、図7に示す各要素が情報公開および情報検索時にどのように動作するのかを具体的に説明する。まず、情報公開時に各ノードで行われる処理について説明する。
図9は、情報公開時の処理を示す図である。図9の例では、ノード100が公開情報の公開元ノードであり、ノード410が仮公開元ノードである。ノード100では、情報公開処理部110によって、仮公開元ノード選択要求と情報公開要求とが出される。仮公開元選択要求は、仮公開元ノード選択部150に渡される。仮公開元ノード選択部150は、P2Pネットワークから仮の公開元とするノードを選択する。この例では、ノード410が選択されたものとする。仮公開元ノード選択部150は、選択したノード410のIPアドレスを公開情報キャッシュ部140に渡す。
情報公開要求を受け取った公開情報キャッシュ部140は、仮公開元ノード選択部150から渡されたIPアドレスに該当するノード410までの匿名通信路を探索する。そして、公開情報キャッシュ部140は、匿名通信路に沿って、ノード410宛にオニオンリファレンスを送信する。
オニオンリファレンスがノード410に渡されると、ノード410内の公開情報キャッシュ部414がオニオンリファレンスを検索エンジン413に渡す。検索エンジン413は、受け取ったオニオンリファレンス413aを保持する。また、公開情報キャッシュ部414は、木構造における親ノードに対して、オニオンリファレンスを転送する。
図10は、情報検索時の処理を示す図である。図10の例では、ノード200が情報検索の検索元ノードであり、ノード420が仮検索元ノードである。ノード200では、情報検索処理部220によって、仮検索元ノード選択要求と情報検索要求とが出される。仮検索元選択要求は、仮検索元ノード選択部270に渡される。仮検索元ノード選択部270は、P2Pネットワークから仮の検索元とするノードを選択する。この例では、ノード420が選択されたものとする。仮検索元ノード選択部270は、選択したノード420のIPアドレスを検索エージェントキャッシュ部260に渡す。
情報検索要求を受け取った検索エージェントキャッシュ部260は、仮検索元ノード選択部270から渡されたIPアドレスに該当するノード420までの匿名通信路を探索する。そして、検索エージェントキャッシュ部260は、匿名通信路に沿って、ノード420宛に検索エージェントを送信する。
検索エージェントがノード420に渡されると、ノード420内の検索エージェントキャッシュ部426が検索エージェントを検索エンジン423に渡す。検索エンジン423は、受け取った検索エージェント423aを保持する。また、検索エージェントキャッシュ部426は、木構造における親ノードに対して、検索エージェントを転送する。
図11は、検索ヒット時の処理を示す図である。図11の例では、ノード430において、ノード200による検索に、ノード100が公開した情報がヒットした場合を示している。ノード430内の検索エンジン433では、検索エージェント433aで示される検索条件に合致するオニオンリファレンスの検索が行われる。この検索にオニオンリファレンス433bがヒットした場合、検索エンジン433は、検索元であるノード200に対して、オニオンリファレンス433bの内容を匿名通信路経由で送信する。そして、ノード200において、公開元ノードと検索元ノードとの間の匿名通信路が形成される。
図12は、匿名通信路形成過程の状態遷移を示す図である。図12の例では、ノード90をルートノードとした木構造が形成されている。
最初の状態(ST1)は、初期状態である。ここで、公開元をノード91、検索元をノード92とする。仮公開元はノード93であり、仮検索元はノード94である。
次の状態(ST2)は、情報公開要求に応じてオニオンリファレンスが配付された状況を示している。オニオンリファレンスは、仮公開元のノード93からルートのノード90までの経路上の各ノードにキャッシュされる。
次の状態(ST3)は、情報検索要求に応じて検索エージェントが配備された状況を示している。検索エージェントは、仮検索元のノード94からルートのノード90までの経路上の各ノードにキャッシュされる。
次の状態(ST4)は、形成された匿名通信路を示している。この例では、ノード95からルートのノード90までの経路上の各ノードで検索がヒットする。その場合、検索がヒットしたノードのうち木構造上で最も下位の要素となるノード95を経由した匿名通信路が形成される。
ところで、通信の匿名性は、公開元ノードと仮公開元ノードとの間でオニオンルーティングが行われること、および検索元ノードと仮検索元ノードとの間でオニオンルーティングが行われることによって強化される。ただし、P2Pネットワークは構成が動的に変わるため、任意のノード間の通信ルートを予めサーバ上で決めておくことは難しい。そこで、P2Pネットワークにおいてオニオンルーティングを行うには、宛先のノードまでのルート探索処理を行う必要がある。以下に、ルート探索処理を具体的に説明する。
図13は、ルート探索開始処理の手順を示すフローチャートである。ルート探索開始処理は、公開元ノードが仮公開元ノードまでの匿名通信路を探索する際に、公開元ノードのルーティング部において実行される。また、検索元ノードが仮検索元ノードまでの匿名通信路を探索する際にも、検索元ノードのルーティング部においてルート探索開始処理が実行される。以下、図7に示すノード100が公開元ノードであるものとして、図13に示す処理をステップ番号に沿って説明する。
[ステップS11]ルーティング部180は、ノード管理テーブル190に登録されているノードのうち、ホップ数が一番遠いノードの1つを、仮公開元ノードとして選択する。さらに、ルーティング部180は、仮公開元ノードまでの匿名通信路を探索するためのルート探索パケットを生成する。
[ステップS12]ルーティング部180は、自分の匿名IDを生成する。生成した匿名IDは、RAMやHDD等の記録媒体に記録しておく。以後、他のノードからパケットを受け取った際には、そのパケットの宛先の匿名IDと記録してある自分の匿名IDとを比較することで、そのパケットが自分宛か否かを判断可能となる。そして、ルーティング部180は、生成した匿名IDをパケットの転送履歴として設定する共に、その匿名IDをルート探索パケットの送信元とする。さらに、ルーティング部180は戻りオニオンを生成し、ルート探索パケット内に設定する。なお、匿名IDとは、一連の匿名通信毎に個別に設定する識別情報である。また、戻りオニオンとしては、たとえば、自分のノードIDを自分の公開鍵で暗号化し、さらに自分のノードIDを付加した情報を設定する。
[ステップS13]ルーティング部180は、プライベートIP以外の(グローバルアドレス)隣接ノード全てにルート探索パケットを送信する。
図14は、ルート探索パケットのデータ構造例を示す図である。ルート探索パケット510は、メッセージフラグ511、宛先(To)512、送信元(From)513、宛先オニオン514、戻りオニオン515、返信暗号化用一時鍵情報516および転送履歴517で構成される。
メッセージフラグ511は、パケットの種別を示している。ルート探索パケット510の場合には、ルート探索ブロードキャスト送信用のパケットであることを示す情報が設定される。
宛先512には、ルート探索パケット510の宛先が設定される。宛先は、仮公開元ノードの識別情報(公開ID)等で示される。
送信元513には、送信元ノードの匿名IDが設定される。
宛先オニオン514は、宛先までのルートを示す情報であるが、ルート探索パケット510では空欄となる。
戻りオニオン515には、ルート探索パケット510に対してルート通知パケットを返信する際の通信経路が、多重に暗号化されて設定される。
返信暗号化用一時鍵情報516は、ルート通知パケットを返信する際に使用される公開元ノードの一時公開鍵と暗号化された一時秘密鍵である。一時公開鍵と一時秘密鍵とは、ルート探索毎に生成される鍵である。
転送履歴517には、パケットの送信元のノードや、パケットを中継したノードで生成された匿名IDが設定される。パケットを受け取った各ノードは、転送履歴517内の匿名IDと自分が過去に生成した匿名IDとを比較し、一致する匿名IDがある場合、そのパケットを過去に転送したことがあることを認識できる。
ルート探索パケットを受信したノードは、ルート探索パケットの中継またはルート通知パケットの返信を行う。
図15は、ルート探索パケットの受信処理の手順を示すフローチャートである。以下、図7に示すノード100がルート探索パケットを受信した場合を想定して、図15に示す処理をステップ番号に沿って説明する。
[ステップS21]ルーティング部180は、ルート探索パケットを受信する。
[ステップS22]ルーティング部180は、自ノード宛のルート探索パケットかどうかを確認する。ルート探索パケットの宛先のフィールドを参照することで、自ノード宛か否かが判別できる。
[ステップS23]ルーティング部180は、自ノード宛であれば、処理をステップS24に進める。また、ルーティング部180は、自ノード宛でなければ、処理をステップS27に進める。
[ステップS24]ルーティング部180は、ルート探索パケットの戻りオニオンを宛先オニオンとして、ルート通知パケットを生成する。
[ステップS25]ルーティング部180は、ノード管理テーブル190内の自ノードのレコード情報を、探索者(公開元ノード)の暗号鍵で暗号化して、ルート通知パケットに設定する。
[ステップS26]ルーティング部180は、公開元ノードに対してルート通知パケットを返信する。その後、処理が終了する。
[ステップS27]ルーティング部180は、ルート探索パケットの転送履歴のフィールドに自ノードの匿名IDが登録されているかどうかを確認する。
[ステップS28]ルーティング部180は、自ノードを通過済のルート探索パケットか否かを判断する。すなわち、転送履歴のフィールドに自ノードの匿名IDが設定されていれば、自ノード通過済である。自ノード通過済であれば、処理がステップS29に進められる。自ノード通過済でなければ、処理がステップS30に進められる。
[ステップS29]ルーティング部180は、受信したルート探索パケットを破棄し、処理を終了する。
[ステップS30]ルーティング部180は、自分の匿名IDを転送履歴に設定する。さらに、ルーティング部180は、元の戻りオニオンを自ノードの秘密鍵で暗号化し、暗号化されたデータに自分のノードIDを加えた情報を新たな戻りオニオンとする。
[ステップS31]ルーティング部180は、ルート探索パケットを送信してきたノードとプライベートIPのノードを除く隣接ノード全てに、ルート探索パケットを送信する。その後、処理が終了する。
図16は、ルート通知パケットのデータ構造例を示す図である。ルート通知パケット520は、メッセージフラグ521、宛先(To)522、送信元(From)523、宛先オニオン524、戻りオニオン525、ルート情報526、および返信暗号化用一時鍵情報527で構成される。
メッセージフラグ521は、パケットの種別を示している。ルート通知パケット520の場合には、ルート探索返信用のパケットであることを示す情報が設定される。
宛先522には、ルート通知パケット520の宛先が設定される。宛先は、ルート探索パケット510の送信元513に設定されている送信元ノードの匿名IDである。
送信元523には、仮送信元ノードの公開されたID(公開ID)が設定される。
宛先オニオン524は、宛先までのルートを示す情報である。これは、受信Peerにおいてルート探索パケット510の戻りオニオン515を転記したものである。ただし、宛先オニオン524は、パケットが中継される毎に過去の伝送経路を示す情報が削除される。
戻りオニオン525は、ルート通知パケット520においては空欄となる。
ルート情報526は、匿名通信の伝送ルートを示す情報である。ルート情報には、伝送ルート上の各P2PオニオンノードのノードIDと固定公開鍵とが、送信元ノードの固定公開鍵で暗号化されて設定されている。また、ルート情報526には、ルート探索パケット510の返信暗号化用一時鍵情報516も含まれている。
返信暗号化用一時鍵情報527は、ルート探索パケット510の返信暗号化用一時鍵情報516の内容がそのまま設定される。
ルート通知パケットを受信したノードは、他のノード宛であればルート通知パケットの中継処理を行い、自分宛であれば最適ルートの生成処理を行う。
図17は、ルート通知パケット受信処理を示すフローチャートである。以下、図7に示すノード100がルート通知パケットを受信した場合を想定して、図17に示す処理をステップ番号に沿って説明する。
[ステップS41]ルーティング部180は、ルート通知パケットを受信する。
[ステップS42]ルーティング部180は、自ノード宛のルート通知パケットか否かを確認する。自ノード宛か否かは、宛先のフィールドに自分の匿名IDが設定されているか否かで判断できる。
[ステップS43]ルーティング部180は、自ノード宛のルート通知パケットであれば処理をステップS44に進める。また、ルーティング部180は、自ノード宛のルート通知パケットでなければ、処理をステップS45に進める。
[ステップS44]ルーティング部180は、ルート通知パケットのルート情報フィールド内の情報を復号し、最適ルートを生成する。すなわち、ルート情報には、自ノード(仮公開元ノードまでのルート探索を行った検索元ノード)の公開鍵で暗号化された状態で、匿名通信路上の各ノードのノードIDと公開鍵とが含まれている。また、ルート情報内での各ノードの情報の配列が、そのまま匿名通信路上のノードの配列になっている。そこで、復号して得られるノードIDの配列が最適ルートとなる。
[ステップS45]ルーティング部180は、宛先オニオンで示される次のノードをパケット送信先として決定する。
[ステップS46]ルーティング部180は、ノード管理テーブル190内の自ノードのレコード情報を探索者(公開元ノード)の暗号鍵で暗号化して、ルート通知パケットに設定する。
[ステップS47]ルーティング部180は、ルート通知パケットを宛先オニオンで示された次のノードに返信する。その後、処理が終了する。
以上のようにして、公開元ノードから仮公開元ノードまでの匿名通信路を探索することができる。送信元ノードは、この匿名通信路に沿って通信されるオニオンルーティングのパケット(データパケット)を生成し、その内容(ペイロード)として公開情報のオニオンリファレンスを設定する。データパケットを匿名通信路を介して仮公開元ノードに送ることで、送信元ノードの匿名性を保つことができる。
上記の例は、送信元ノードと仮送信元ノードとの間の匿名通信であるが、検索元ノードと仮検索元ノードとの間の匿名通信も同様の手順で行うことができる。仮送信元ノードから木構造上の上位のノードへオニオンリファレンスが転送され、仮想検索元ノードから上位のノードへ検索エージェントが転送されることで、木構造の何れかのノードにおいて、検索エージェントによる検索に、オニオンリファレンスがヒットする。その結果、送信元ノードと検索元ノードとの間の匿名通信路が生成される。
図18は、データパケットのデータ構造例を示す図である。データパケット530は、メッセージフラグ531、宛先(To)532、送信元(From)533、宛先オニオン534、戻り&バックトラックオニオン535、およびペイロード536で構成される。
メッセージフラグ531は、パケットの種別を示している。データパケット530の場合には、データ通信用のパケット(通常のパケット)であることを示す情報が設定される。
宛先532には、データパケット530の宛先が設定される。宛先は、通信相手のノードの公開IDである。
送信元533には、パケット送信元となるノードの匿名IDが設定される。この匿名IDは、匿名通信路探索時とは別のものが使用される。
宛先オニオン534は、宛先までのルートを示す情報である。これは、取得した匿名通信路情報に基づいて生成される。宛先オニオン534は、匿名通信路上の各ノードにおいて、次のノードのみが認識できるように各ノードの公開鍵でルート情報を暗号化したものである。
戻り&バックトラックオニオン535は、戻りルートおよびバックトラック処理を行うときのルートを示すルート情報である。バックトラック処理は、予定したルートでの通信ができなかった場合に、他のルート経由でパケットを伝送する処理である。
ペイロード536は、転送すべきメッセージを受信側のノードの公開鍵で暗号化したデータを含む実データである。たとえば、ペイロード536には、オニオンリファレンスや検索エージェントが含められる。
このようなデータパケットが、匿名通信路を介して、送信元ノードと検索元ノードとの間で送受信される。これにより、通信の匿名性が保たれる。
このような機能を利用すれば、匿名性の高い電子掲示板システムを提供することができる。
図19は、匿名性の高い電子掲示板の構成例を示す図である。この例では、掲示板への投稿者がノード601を使用し、掲示板の検索者がノード602を使用しているものとする。ノード611〜617によって木構造が構成されており、これらのノード611〜617によって、情報公開を行うための電子掲示板としての機能が提供される。また、ノード601は、ノード616を仮公開元ノードとして選択している。また、ノード602は、ノード617を仮検索元ノードとして選択している。
なお、ノード601のノードIDを「A」、ノード602のノードIDを「B」、ノード611のノードIDを「P」、ノード612のノードIDを「S」、ノード613のノードIDを「H」、ノード614のノードIDを「T」、ノード615のノードIDを「R」、ノード616のノードIDを「X」、ノード617のノードIDを「Y」、ノード621のノードIDを「K」、ノード622のノードIDを「L」、ノード623のノードIDを「G」、ノード624のノードIDを「E」、ノード625のノードIDを「W」、ノード626のノードIDを「V」とする。
掲示板への投稿者は、ノード601からノード616に対して、オニオンルーティングの技術を利用した匿名通信で、オニオンリファレンスを送信する。オニオンリファレンスは、ノード616から順次木構造上の親ノードに転送されていく。オニオンリファレンスを転送した各ノード616,614,613,612,611は、オニオンリファレンスをキャッシュする。
オニオンリファレンスには、投稿者が公開した情報のメタデータ(キーワードや作成日等)と共に、ノード601までの戻りルート情報が含まれている。このようにオニオンリファレンスが公開されたことによって、投稿者が投稿した情報が公開されたこととなる。
掲示板内の情報の検索者は、ノード602からノード617に対して、オニオンルーティングの技術を利用した匿名通信で、検索エージェントを送信する。検索エージェントは、ノード617から順次木構造上の親ノードに転送されていく。検索エージェントを転送した各ノード617,615,613,612,611は、検索エージェントをキャッシュする。
検索エージェントは、検索者が指定した検索キーワード等に基づいた検索条件を含んでいる。検索エージェントがキャッシュされたノードにおいて、検索エージェント内の検索条件に合致するオニオンリファレンスが検索される。その検索条件に、ノード601のユーザが投稿した情報が合致する場合、ノード613において検索がヒットする。このとき、ノード613にキャッシュされたオニオンリファレンスの戻りオニオンと、ノード613にキャッシュされた検索エージェントの戻りオニオンとを繋げることで、ノード601とノード602との間の匿名通信路が生成できる。
図20は、各ノードがキャッシュする情報を示す図である。なお、以下の説明において、戻りオニオンのルートを、戻りルート上の各ノードのノードIDの配列で示している。
ノード611がキャッシュする情報の1つは、ノード自身の匿名ID、ノードID「A」が投稿した公開情報(オニオンリファレンス)、P−S−H−T−X−A間の戻りオニオンである。また、ノード611は、ノード自身の匿名ID、ノードID「B」の検索エージェント、P−S−H−R−Y−B間の戻りオニオンもキャッシュしている。
ノード612がキャッシュする情報の1つは、ノード自身の匿名ID、ノードID「A」が投稿した公開情報(オニオンリファレンス)、S−H−T−X−A間の戻りオニオンである。また、ノード612は、ノード自身の匿名ID、ノードID「B」の検索エージェント、S−H−R−Y−B間の戻りオニオンもキャッシュしている。
ノード613がキャッシュする情報の1つは、ノード自身の匿名ID、ノードID「A」が投稿した公開情報(オニオンリファレンス)、H−T−X−A間の戻りオニオンである。また、ノード613は、ノード自身の匿名ID、ノードID「B」の検索エージェント、H−R−Y−B間の戻りオニオンもキャッシュしている。
ノード614がキャッシュする情報は、ノード自身の匿名ID、ノードID「A」が投稿した公開情報(オニオンリファレンス)、T−X−A間の戻りオニオンである。ノード615がキャッシュする情報は、ノード自身の匿名ID、ノードID「B」の検索エージェント、R−Y−B間の戻りオニオンである。
ノード616がキャッシュする情報は、ノード自身の匿名ID、ノードID「A」が投稿した公開情報(オニオンリファレンス)、X−A間の戻りオニオンである。ノード617がキャッシュする情報は、ノード自身の匿名ID、ノードID「B」の検索エージェント、Y−B間の戻りオニオンである。
図21は、生成された匿名通信路を示す図である。匿名通信路は、ノード613において、オニオンリファレンス側の戻りオニオンと、検索エージェント側の戻りオニオンとを繋げることで作成される。
ここで、ノード601とノード616との間は、ノード622を経由するルートとなっている。これは、オニオンリファレンスをノード616に送信した際に実際に通ったルートである。すなわち、戻りオニオンは、パケットを伝送しながら、その伝送を行ったノードの情報を付加していくことで作成されるため、送信時に実際に通ったルートが戻りルートとなる。
同様に、ノード602とノード617との間は、ノード626を経由するルートとなっている。これは、検索エージェントをノード617に送信した際に実際に通ったルートである。
このような匿名通信路を経由して、ノード601とノード602との間で通信を行うことができる。すなわち、ノード601が公開した情報の内容(ノード601内に保存されている)を、ノード602から参照することができる。
ところで、ノード622とノード626とを直接結ぶような匿名通信路を生成することもできる。
図22は、経路長を短縮させた匿名通信路生成例を示す図である。この例では、オニオンリファレンスを仮送信元ノードから親ノードへ転送する際に、オニオンリファレンスを送ってきた隣接ノードのノードID、IPアドレス、ポート番号等を含む中継ノード情報を同時に送信する。オニオンリファレンスを受け取った各ノードは、オニオンリファレンスと共に、中継ノード情報もキャッシュする。
状態ST11に示す例では、オニオンリファレンスがノードID「L」のノード622を介して送信されている。そこで、ノード622のノードID「L」やIPアドレス等の中継ノード情報をキャッシュの対象とする。そして、検索ヒットした場合には、検索エージェントは、オニオンリファレンスや各種戻りオニオンと共に、中継ノード情報を検索元ノードに送信する。
検索元のノード602は、ノード622の情報を取得したことで、ノード601との間の匿名通信を行う際に、ノード624〜626の何れかから、ノード622にパケットを転送するような匿名通信路を生成することができる。すなわち、検索エージェントを送信したときに中継したノードは、ノード626であっても、ノード624またはノード625を経由した匿名通信路を生成することが可能となる。
このとき、ノード624〜625に対して、ノード622のノードID、IPアドレス、ポート番号を通知する必要がある。
状態ST12に示すように、ノード625を経由した匿名通信路を生成して、その匿名通信路を介してノード601に対してパケットを送信すれば、実際にそのパケットが通った1本の通信路がノード601とノード602との間の匿名通信路として確定する。この例ではノード625とノード622とが直接パケットを受け渡すような匿名通信路が生成されている。
このようにして、仮送信元ノードと仮検索元ノードとの間を抜かした匿名通信路を生成することができる。これにより、匿名通信が木構造の上位のノードを経由せずに済み、上位のノードに係る負荷を軽減することができる。
なお、匿名通信を行う技術として、匿名ルート上の各ノードに通知するルート情報(ノード別ルート情報)を、該当ノードの公開鍵で暗号化してパケットに含める技術がある。ノード別ルート情報は、各ノードに対応するブロックに格納される。ノード別ルート情報には、対応するノードに隣接するノード(送信方向に隣接するノードと返信方向に隣接するノード)の識別情報と、隣接ノードが復号すべきブロックの位置とが含まれる。
さらに、送信元がパケットを送信する場合、隣接するノードが復号すべきブロックの位置を指定する情報(ブロック指定)パケットに含める。このパケットを受け取った中継ノードは、ブロック指定で示されるブロックを復号することで、隣接ノードと、その隣接ノードが復号すべきブロックの位置を認識する。そこで、中継ノードは、ブロック指定の内容を隣接ノードに対応するブロックの位置に変更し、その後、パケットを隣接ノードに転送する。その後、同様にパケットが中継される。
このようなパケット転送を行えば、各中継ノードでは、匿名ルートのうち、自分に隣接するノードしか認識できない。したがって、送信元や宛先を隠した状態でのパケット転送が可能となる。以下、このような匿名通信方法を、グレープルーティングと呼ぶこととする。
このようなグレープルーティングの技術を利用すれば、仮送信元ノードと仮検索元ノードとの間を抜かした匿名通信路を生成することができる。
図23は、グレープルーティングを行う際のデータパケットの構造例を示す図である。グレープルーティング用のデータパケット540は、メッセージフラグ541、宛先(To)542、送信元(From)543、ブロック指定544、グレープルート545、およびペイロード546で構成される。
メッセージフラグ541は、パケットの種別を示している。データパケット540の場合には、グレープルーティング用のデータパケットであることを示す情報が設定される。
宛先542には、データパケット540の宛先が設定される。宛先は、ルート探索パケット510の送信元513に設定されている送信元ノードの匿名IDである。
送信元543には、仮送信元ノードの公開されたID(公開ID)が設定される。
ブロック指定544には、そのパケットを受け取ったノードが復号すべきグレープルート内のブロックの位置が設定される。
グレープルート545は、匿名通信路上の各ノードに通知すべき情報が、ブロックに分けて格納されている。たとえば、各ブロックは、対応するノードの公開鍵で暗号化されている。データパケット540を受け取ったノードは、ブロック指定544によって、自分が復号すべきブロックを認識できる。
復号したブロックには、たとえば、匿名通信路上の次の隣接ノードのノードIDや、次の隣接ノードが復号するブロック位置等が含まれている。したがって、データパケット540を受け取ったノードは、復号したブロックに含まれるノードIDに対応する隣接ノードに対して、データパケット540を転送する。この際、ブロック指定544の内容を、次の隣接ノードが復号するブロック位置に置き換える。
ペイロード546は、転送すべきメッセージを受信のノードの公開鍵で暗号化したデータを含む実データである。
図24は、グレープルーティングを行うときのキャッシュ内容を示す図である。グレープルーティングを行う場合、オニオンリファレンスや検索エージェントをキャッシュする各ノードは、グレープルートや隣接ノードに関する情報も同時にキャッシュする。
図24の例では、仮送信元であるノード616から上位の各ノードは、ノード自身の一時識別子、ノードID「A」のノード601が投稿したオニオンリファレンス、ノードID「X」のノード616とノードID「A」のノード601との間の匿名グレープルート、ノード616,621〜623のノードIDやIPアドレスなどテーブル情報をキャッシュする。なお、キャッシュする匿名グレープルートには、グレープルート内のノード616,621〜623が復号すべきブロックの位置を示す情報も含まれている。
また、仮検索元であるノード617から上位の各ノードは、ノード自身の一時識別子、ノードID「B」の検索エージェント、ノードID「Y」のノード617とノードID「B」のノード602との間の匿名グレープルート、ノード617,624〜626のノードIDやIPアドレスなどテーブル情報をキャッシュする。なお、キャッシュする匿名グレープルートには、グレープルート内のノード617,624〜626が復号すべきブロックの位置を示す情報も含まれている。
ここでノードID「H」のノード613で検索がヒットすれば、ノード613は、仮検索元ノード617に対して検索結果を送信する。この際、ノード615を経由せずに直接送信することができる。
図25は、検索結果通知の様子を示す図である。ノード613は、ノード602とノード617との間のグレープルートに基づいて、ノード613からノード602にグレープルーティングで検索結果を送信するためのデータパケットを生成する。生成したデータパケットは、ノード617に対して送信される。そして、データパケットは、ノード617からノード602への匿名通信路を介し、グレープルーティングによって転送される。
検索結果には、オニオンリファレンスに加え、そのオニオンリファレンスや検索エージェントと共にキャッシュされていた情報も含まれる。すなわち、ノード601とノード616との間のグレープルート、ノード602とノード617との間のグレープルートや、ノード616,617,621〜626のノードIDやIPアドレスなどテーブル情報が検索結果に含まれる。
なお、ノード613は、ノード624〜ノード626のノードID、IPアドレス、およびグレープルート中の復号すべきブロックの位置を認識しているため、ノード624〜ノード626の何れかに対して、検索結果を示すデータパケットを送信することもできる。すなわち、ノード617を経由しないルート(図中、破線の矢印で示す)で検索結果を送信することができる。
なお、ノード602は、検索結果を受け取ったとき、検索結果を受け取ったことを示す応答を返す。このときは、常にノード617を経由する匿名通信路でグレープルーティングが行われる。すなわち、ノード624〜626では、グレープルーティングにおける隣接ノードであるノード617の情報しか認識できない。そのため、ノード602からノード613宛のパケットは、ノード624〜626の何れかを経由してノード617に渡される。そして、ノード617を介して、そのパケットがノード613に渡される。
なお、ノード602とノード617との間は、グレープルーティングであるため、複数のルートが存在する。同様に、ノード601とノード616との間も、グレープルーティングであるため、複数のルートが存在する。
検索結果を受け取ったノード602は、検索結果に含まれる情報に基づいて、ノード601までのグレープルートを生成する。なお、ノード602は、検索結果としてノード616からノード601にパケットを送信するためのグレープルートを受け取っているとともに、ルート616のIPアドレスやノードID等を受け取っている。したがって、ノード602からノード601宛にパケットを送信する場合、ノード616を経由した匿名通信路で送信される。
図26は、検索元ノードと公開元ノードとの間の匿名通信路を示す図である。検索元のノード602は、ノード616,621〜623のノードIDやIPアドレスなどのテーブル情報に基づいて、匿名グレープルートを作成する。たとえば、ノード602は、ノード616とノード601との間の匿名グレープルートに、ノード616からノード624〜626へのルート(図中、一点鎖線で示す)と、ノード621〜623へ戻る方向でのノード624〜626のルート(図中、破線で示す)などを作成する。作成したルートに、ノード624〜626とノード602との間の匿名グレープルートを追加すれば、ノード601からノード602向きの匿名グレープルートが作成される。
ノード602によるノード624〜626からノード602向きの匿名グレープルート作成は、検索結果受信時に行うことができる。また、ノード624〜626からノード602向きの匿名グレープルートを検索エージェントに予め持たせて送信して、検索結果と共に受け取ることもできる。
このとき、ノード624〜626に対して、ノード621〜623のノードIDやIPアドレスなどのテーブル情報を通知することで、ノード624〜626からノード621〜623へのパケット転送が可能となる。
結果的に、ノード624〜626とノード616との間は双方向の通信が可能となる。ノード624〜626からノード621〜623へはパケットの転送が可能であるが、逆方向のパケット転送はできない。これは、ノード601とノード621との間の匿名グレープルートでは、ノード624〜626に対して隣接ノード616に対して送信することしか示されていないためである。そのため、ノード601からノード602へ匿名通信を行う際には、ノード616を経由する必要が生じる。
ところで、グレープルーティングでは、ノードの結託による不正への対応策として、「データを受け取るべきノードの集合以外からのものは破棄する」という処理を行わせることができる。たとえば、ノード621〜623は、ノード601からの通信路上の隣接ノードおよびノード616以外のノードからのパケットを破棄する。同様に、ノード624〜626は、ノード602からの通信路上の隣接ノードおよびノード616以外のノードからのパケットを破棄する。
図27は、ノードの結託を防止した場合の匿名通信路の例を示す図である。図27に示すように、ノード601とノード602との間の通信路は、常にノード616を経由して行われる。これにより、ノード621〜623の管理者とノード624〜626の管理者とが結託して、ノード601とノード602との間の匿名通信路を解析する行為を防止できる。
また、グレープルーティングの匿名性や安全性のレベルを落とし、可用性(availability)を優先することができる。その場合、キャッシュ開始ノード(仮公開元ノードや仮検索元ノード)の直前のグレープ(直前のノード宛のルーティングに関する情報が登録されたブロック)は暗号化しないで書き換えが可能なようにする。なお、可用性とは、通信をダウンさせることなく継続稼働させる能力である。
図28は、可用性を重視したときの匿名通信路の例を示す図である。このように、グレープルート中のノード621〜626に対応するブロックを平文にしておくことで、その内容を適宜書き換えることができる。その結果、ノード621〜623とノード624〜626との間の相互の直接のパケットの受け渡しが可能となる。すなわち、ノード601とノード602との間のルートに多様性を持たせることができる。ルートに可用性があれば、通信路上の1つのノードが停止したとしても、別ルートを経由して通信が可能となる。
以上説明したような実施の形態により、以下のような効果が得られる。
P2Pネットワークの全体あるいは部分的なノード間の関係を木構造で定義したことにより、P2Pネットワーク上の情報の全件検索を効率よく行うことが可能となる。このとき、発信された情報(オニオンリファレンスや検索エージェント)はP2Pネットワーク上にキャッシュされている。しかも、オニオンリファレンスや検索エージェントは、匿名通信路を介して送信元と関連付けられている。そのため、木構造にしたことで匿名性が損なわれることはない。
また、仮公開元ノードや仮検索元ノードを設定し、公開元ノードと仮公開元ノードとの間で匿名通信を行い、検索元ノードと仮検索元ノードとの間で匿名通信を行っている。これにより、仮公開元ノードと仮検索元ノードとの上記の木構造で匿名性が十分でなくても、公開元ノードと検索元ノードとの匿名性を保つことができる。
また、匿名通信にオニオンルーティングを利用しているため、暗号化されたルート情報を復号するための鍵が不特定多数に分散する。そのため、鍵の一極集中による匿名化の脆弱性を無くすることができる。
また、検索にヒットしたとき、公開情報の送信元のノードまでの匿名通信路に関する情報を検索元のノードに送信するようにしたため、検索後に情報発信者と情報検索者とが匿名的に双方向のコミュニケーションを行うことが可能となる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、各ノードが有すべき機能の処理内容を記述した情報検索プログラムが提供される。その情報検索プログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述した情報検索プログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM(Random Access Memory)、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
情報検索プログラムを流通させる場合には、たとえば、その情報検索プログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、情報検索プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにその情報検索プログラムを転送することもできる。
情報検索プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録された情報検索プログラムもしくはサーバコンピュータから転送された情報検索プログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置から情報検索プログラムを読み取り、情報検索プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接情報検索プログラムを読み取り、その情報検索プログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータから情報検索プログラムが転送される毎に、逐次、受け取った情報検索プログラムに従った処理を実行することもできる。
(付記1) ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索方法において、
前記ネットワークに接続された情報検索装置の公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
前記ネットワーク内の装置間の関係が木構造で定義されており、前記情報検索装置の情報公開要求転送手段が、前記情報公開要求を前記木構造における親装置に対して転送し、
前記情報検索装置の検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
前記情報検索装置の情報検索要求転送手段が、前記情報検索要求を前記木構造における前記親装置に対して転送し、
前記情報検索装置の検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
前記情報検索装置の検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する、
ことを特徴とする情報検索方法。
(付記2) 前記情報公開要求には情報公開要求の送信元である公開元装置までの通信路情報が含まれており、前記公開情報格納手段は、前記情報公開要求を受け取った際には、前記通信路情報を前記公開情報記憶手段に格納し、
前記検索結果通知手段は、前記検索条件に前記公開情報が合致した場合、前記検索元装置に対して、前記公開情報と前記公開元装置までの前記通信路情報とを送信する、
ことを特徴とする付記1記載の情報検索方法。
(付記3) 前記情報公開要求の送信元である公開元装置が、情報の公開指示に応じて、前記木構造を構成する複数の前記情報検索装置の中から少なくとも1つの前記情報検索装置を選択し、選択した前記情報検索装置に対して前記情報公開要求を匿名通信によって送信する、
ことを特徴とする付記1記載の情報検索方法。
(付記4) 前記情報検索要求の送信元である検索元装置が、情報の検索指示に応じて、前記木構造を構成する複数の前記情報検索装置の中から少なくとも1つの前記情報検索装置を選択し、選択した前記情報検索装置に対して、検索条件を含む前記情報検索要求を匿名通信によって送信する、
ことを特徴とする付記1記載の情報検索方法。
(付記5) 前記検索手段は、新たな前記検索条件が前記検索条件記憶手段に記憶されたとき、新たに記憶された前記検索条件に合致する前記公開情報を、前記公開情報記憶手段から検索することを特徴とする付記1記載の情報検索方法。
(付記6) 前記検索手段による検索は、新たな前記公開情報が前記公開情報記憶手段に記憶されたとき、新たに記憶された前記公開情報が、既に前記検索条件記憶手段に記憶されている前記検索条件に合致するか否かを判断することを特徴とする付記1記載の情報検索方法。
(付記7) 前記公開情報格納手段は、前記公開情報記憶手段に記憶された前記公開情報が所定の条件を満たしたとき、前記公開情報を削除することを特徴とする付記1記載の情報検索方法。
(付記8) 前記検索条件格納手段は、前記検索条件記憶手段に記憶された前記検索条件が所定の条件を満たしたとき、前記検索条件を削除することを特徴とする付記1記載の情報検索方法。
(付記9) ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索方法において、
前記情報公開要求の送信元である公開元装置が、情報の公開指示に応じて、前記ネットワーク内の複数の情報検索装置の中から少なくとも1つの前記情報検索装置を選択し、選択した前記情報検索装置に対して前記情報公開要求を匿名通信によって送信し、
前記情報検索要求の送信元である検索元装置が、情報の検索指示に応じて、前記ネットワーク内の複数の前記情報検索装置の中から少なくとも1つの前記情報検索装置を選択し、選択した前記情報検索装置に対して、検索条件を含む前記情報検索要求を匿名通信によって送信し、
前記ネットワークを構成する前記情報検索装置それぞれにおいて、
公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
情報公開要求転送手段が、前記情報公開要求を隣接する他の情報検索装置に対して転送し、
検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
情報検索要求転送手段が、前記情報検索要求を隣接する他の情報検索装置に対して転送し、
検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記検索元装置に対して前記公開情報を匿名通信によって送信する、
ことを特徴とする情報検索方法。
(付記10) ピアツーピア方式のネットワーク上で公開されている情報を検索する情報検索装置において、
他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納する公開情報格納手段と、
前記ネットワーク内の装置間の関係が木構造で定義されており、前記情報公開要求を前記木構造における親装置に対して転送する情報公開要求転送手段と、
他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納する検索条件格納手段と、
前記情報検索要求を前記木構造における前記親装置に対して転送する情報検索要求転送手段と、
前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索する検索手段と、
前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する検索結果通知手段と、
を有することを特徴とする情報検索装置。
(付記11) ピアツーピア方式のネットワーク上で公開されている情報を検索するための情報検索プログラムにおいて、
コンピュータに、
公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
前記ネットワーク内の装置間の関係が木構造で定義されており、情報公開要求転送手段が、前記情報公開要求を前記木構造における親装置に対して転送し、
検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
情報検索要求転送手段が、前記情報検索要求を前記木構造における前記親装置に対して転送し、
検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する、
処理を実行させることを特徴とする情報検索プログラム。
(付記12) ピアツーピア方式のネットワーク上で公開されている情報を検索するための情報検索プログラムを記録したコンピュータ読み取り可能な記録媒体において、
コンピュータに、
公開情報格納手段が、他の装置から公開情報を含む情報公開要求を受け取った場合、公開情報記憶手段に対して前記公開情報を格納し、
前記ネットワーク内の装置間の関係が木構造で定義されており、情報公開要求転送手段が、前記情報公開要求を前記木構造における親装置に対して転送し、
検索条件格納手段が、他の装置から検索要求を含む情報検索要求を受け取った場合、検索条件記憶手段に対して前記検索条件を格納し、
情報検索要求転送手段が、前記情報検索要求を前記木構造における前記親装置に対して転送し、
検索手段が、前記検索条件記憶手段に記憶された検索条件に基づいて、前記公開情報記憶手段に記憶された前記公開情報を検索し、
検索結果通知手段が、前記検索条件に前記公開情報が合致した場合、前記情報検索要求の送信元である検索元装置に対して検索結果を送信する、
処理を実行させることを特徴とする情報検索プログラムを記録したコンピュータ読み取り可能な記録媒体。