(57)【要約】【課題】  送信者や受信者までの距離を隠すことができるようにする。【解決手段】  送信ノード１において、格納ブロック決定手段１ｂにより、匿名ルートに含まれる各ノードがブロックに対応付けられる。ノード別ルート情報生成手段１ｃにより、ノード毎にノード別ルート情報が生成され、それらが暗号化手段１ｄにより暗号化され、ノード別ルート情報設定手段１ｅによりブロックに設定される。さらに、ブロック指定手段１ｆにより、隣接ノードに対応するブロックの位置がパケットに設定され、パケット送信手段１ｇによりパケットが送信される。すると、中継ノード２の復号手段２ａにより、指定されたブロックのノード別ルート情報が復号され、転送先決定手段２ｂにより、転送先のノードが決定される。さらに、ブロック指定変更手段２ｃにより、ブロック指定が変更される。そして、パケット送信手段２ｄによりパケットが送信される。【選択図】  図１
2005159912.tif 000002
【特許請求の範囲】
【請求項１】
匿名ルートを介してパケットを送信するための匿名データ送信方法において、
格納ブロック決定手段が、前記パケット内のルート情報格納領域を複数のブロックに分割し、匿名ルート記憶手段に予め格納されている匿名ルート情報に基づいて、前記匿名ルートに含まれる各ノードを前記ブロックに対応付け、
ノード別ルート情報生成手段が、前記匿名ルート情報に基づいて、前記匿名ルート上のノード毎に、隣接ノードの識別情報および前記隣接ノードに対応する前記ブロックの位置を示すブロック指定を含むノード別ルート情報を生成し、
暗号化手段が、前記ノード別ルート情報を暗号化し、
ノード別ルート情報設定手段が、暗号化されたノード毎の前記ノード別ルート情報を、前記パケット内の各ノードに対応する前記ブロックに設定し、
ブロック指定手段が、前記匿名ルート上の隣接する前記隣接ノードに対応する前記ブロックの位置を前記パケットに設定し、
パケット送信手段が、前記パケットを前記隣接ノードに対して送信する、
ことを特徴とする匿名データ送信方法。
【請求項２】
前記暗号化手段は、前記ノード別ルート情報を、対応するノードの公開鍵で暗号化することを特徴とする請求項１記載の匿名データ送信方法。
【請求項３】
前記ノード別ルート情報生成手段は、前記ノード別ルート情報内に、前記匿名ルートを宛先に向かって転送する場合の隣接ノードに関する識別情報と前記ブロック指定、および前記匿名ルートを送信元に向かって返信する場合の隣接ノードに関する識別情報と前記ブロック指定を含んでいることを特徴とする請求項１記載の匿名データ送信方法。
【請求項４】
前記ノード別ルート情報生成手段は、宛先までの複数の匿名ルートが存在するとき、全ての匿名ルート上の各ノードに対応する前記ノード別ルート情報を生成することを特徴とする請求項１記載の匿名データ送信方法。
【請求項５】
前記ノード別ルート情報生成手段は、データ送信方向の隣接ノードとデータ返信方向の隣接ノードとをフラグによって指定することを特徴とする請求項１記載の匿名データ送信方法。
【請求項６】
匿名のデータを中継するための匿名データ中継方法において、
各ノードの隣接ノードの識別情報および前記隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報が、ルート情報格納領域内の各ノードに対応するブロックに設定されていると共に、自分宛のブロック指定を含むパケットを受信すると、復号手段が、自分宛の前記ブロック指定で指定されたブロックに設定されている前記ノード別ルート情報を復号し、
転送先決定手段が、復号された前記ノード別ルート情報に基づいて、前記パケットの転送先のノードを決定し、
ブロック指定変更手段が、復号された前記ノード別ルート情報に基づいて、前記ブロック指定の内容を、前記転送先のノードに対応するブロックに変更し、
パケット送信手段が、前記転送先のノードに前記パケットを送信する、
ことを特徴とする匿名データ中継方法。
【請求項７】
匿名ルートを介してパケットを送信する匿名データ送信装置において、
前記パケット内のルート情報格納領域を複数のブロックに分割し、匿名ルート記憶手段に予め格納されている匿名ルート情報に基づいて、前記匿名ルートに含まれる各ノードを前記ブロックに対応付ける格納ブロック決定手段と、
前記匿名ルート情報に基づいて、前記匿名ルート上のノード毎に、隣接ノードの識別情報および前記隣接ノードに対応する前記ブロックの位置を示すブロック指定を含むノード別ルート情報を生成するノード別ルート情報生成手段と、
前記ノード別ルート情報を暗号化する暗号化手段と、
暗号化されたノード毎の前記ノード別ルート情報を、前記パケット内の各ノードに対応する前記ブロックに設定するノード別ルート情報設定手段と、
前記匿名ルート上の隣接する前記隣接ノードに対応する前記ブロックの位置を前記パケットに設定するブロック指定手段と、
前記パケットを前記隣接ノードに対して送信するパケット送信手段と、
を有することを特徴とする匿名データ送信装置。
【請求項８】
匿名のデータを中継する匿名データ中継装置において、
各ノードの隣接ノードの識別情報および前記隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報が、ルート情報格納領域内の各ノードに対応するブロックに設定されていると共に、自分宛のブロック指定を含むパケットを受信すると、自分宛の前記ブロック指定で指定されたブロックに設定されている前記ノード別ルート情報を復号する復号手段と、
復号された前記ノード別ルート情報に基づいて、前記パケットの転送先のノードを決定する転送先決定手段と、
復号された前記ノード別ルート情報に基づいて、前記ブロック指定の内容を、前記転送先のノードに対応するブロックに変更するブロック指定変更手段と、
前記転送先のノードに前記パケットを送信するパケット送信手段と、
を有することを特徴とする匿名データ中継装置。
【請求項９】
匿名ルートを介してパケットを送信するための匿名データ送信プログラムにおいて、
コンピュータに、
格納ブロック決定手段が、前記パケット内のルート情報格納領域を複数のブロックに分割し、匿名ルート記憶手段に予め格納されている匿名ルート情報に基づいて、前記匿名ルートに含まれる各ノードを前記ブロックに対応付け、
ノード別ルート情報生成手段が、前記匿名ルート情報に基づいて、前記匿名ルート上のノード毎に、隣接ノードの識別情報および前記隣接ノードに対応する前記ブロックの位置を示すブロック指定を含むノード別ルート情報を生成し、
暗号化手段が、前記ノード別ルート情報を暗号化し、
ノード別ルート情報設定手段が、暗号化されたノード毎の前記ノード別ルート情報を、前記パケット内の各ノードに対応する前記ブロックに設定し、
ブロック指定手段が、前記匿名ルート上の隣接する前記隣接ノードに対応する前記ブロックの位置を前記パケットに設定し、
パケット送信手段が、前記パケットを前記隣接ノードに対して送信する、
処理を実行させることを特徴とする匿名データ送信プログラム。
【請求項１０】
匿名のデータを中継するための匿名データ中継プログラムにおいて、
コンピュータに、
各ノードの隣接ノードの識別情報および前記隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報が、ルート情報格納領域内の各ノードに対応するブロックに設定されていると共に、自分宛のブロック指定を含むパケットを受信すると、復号手段が、自分宛の前記ブロック指定で指定されたブロックに設定されている前記ノード別ルート情報を復号し、
転送先決定手段が、復号された前記ノード別ルート情報に基づいて、前記パケットの転送先のノードを決定し、
ブロック指定変更手段が、復号された前記ノード別ルート情報に基づいて、前記ブロック指定の内容を、前記転送先のノードに対応するブロックに変更し、
パケット送信手段が、前記転送先のノードに前記パケットを送信する、
処理を実行させることを特徴とする匿名データ中継プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータの送受信者の匿名性を守った匿名データ送信方法、匿名データ中継方法、匿名データ送信装置、匿名データ中継装置、匿名データ送信プログラム、および匿名データ中継プログラムに関し、特にデータの送受信経路を動的に変更することができる匿名データ送信方法、匿名データ中継方法、匿名データ送信装置、匿名データ中継装置、匿名データ送信プログラム、および匿名データ中継プログラムに関する。
【背景技術】
【０００２】
インターネットを介した様々な情報交換が盛んに行われている。インターネットにおいて一般に利用されている技術では、伝送されているパケットを解析すれば、パケットのヘッダから受信者が割り出せると共に、パケットルートの追跡も可能である。その結果、インターネットの利用者個人のプライバシが侵害される虞がでてきている。たとえば、匿名の掲示板への投稿内容から、投稿者の使用している端末の所在（ＩＰアドレス等）が分かってしまうと、悪意の第三者から嫌がらせを受ける危険性がある。
【０００３】
そこで、インターネット上のデータの送受信者の匿名性を守るための様々な技術が考えられている。データの送受信の匿名性を守るためには、全てのデータ通信を暗号化すると共に、パケットの伝送経路も漏洩しないようにする必要がある。
【０００４】
パケットの伝送経路の漏洩を防止するには、複数の中継地（ルータ）を活用することにより、通信中のパケットの受信元や転送先等の情報の漏洩をシャットアウトする必要がある。このような伝送経路の漏洩防止手法としては、「オニオンルーティング」と名付けられた手法が知られている（たとえば、特許文献１参照）。
【０００５】
オニオンルーティングの手法では、オニオンルータと呼ばれる堅牢で固定的なルータがルーティングを司る。送信端末では、送信相手までの伝送経路を予め決定し、パケットを中継する各オニオンルータの公開鍵を用いてパケットの伝送経路に関する情報を暗号化する。
【０００６】
パケットを受信したオニオンルータは、自身の秘密鍵で伝送経路に関する情報を復号する。この復号によりパケットの次の転送先が判別され、オニオンルータは、次のノード（オニオンルータ若しくは受信端末）にパケットを転送する。このように、各オニオンルータでは、次の転送先以外隠蔽された状態を保つことができるため、最終的な受信端末の情報を特定することができない。また、オニオンルータにおいて、パケットを送出する際に、それまでの伝送経路に関する情報をパケットに付加しないことで、送信元の漏洩を防止できる。
【０００７】
このように、オニオンルーティングでは、データパケットが目的地までの経路情報を多重に暗号化して保持することで、ルーティングを行う各ノードやネットワーク上でのスキミングを行う者に対して経路情報の一部しか参照できないようにしている。
【０００８】
ところが、特許文献１記載のオニオンルーティングの手法は、ノード構成が動的に変化する環境に適用するのが困難である。ノード構成が動的に変化する環境としては、特にピアツーピア（Ｐ２Ｐ：Peer to Peer）ネットワークがある。
【０００９】
Ｐ２Ｐネットワークでは、ノードのネットワークへの参加やネットワークからの退場は任意である。このため、Ｐ２Ｐネットワーク上で通信を行う場合、その時点で参加しているノード間でＰ２Ｐの通信を行いながら、送信相手のPeerノードへパケットを転送する。このようなＰ２Ｐ環境に対してオニオンルーティングの手法を適用する場合、次の問題が生ずる。
【００１０】
・固定のルータ及び固定の経路を予め決定することができない。
・ルーティング途中でのノード構成変更に対して動的に対処するのが困難である。
このため、Ｐ２Ｐネットワークなど不安定なネットワークで匿名通信を行うには、経路発見を動的且つ匿名的に行い、ルーティング途中でのノード構成変更に適宜対処できることが望まれる。
【００１１】
そこで、Ｐ２Ｐネットワークにおける任意のノードまでの匿名通信路の探索機能を提供することで、ノード構成の動的変化に対応することを可能とする技術が考え出されている（たとえば、非特許文献１参照）。以下、匿名通信路の探索機能が提供されたＰ２Ｐネットワーク上のオニオンルーティングを、Ｐ２Ｐオニオンルーティングと呼ぶ。
【特許文献１】米国特許第６、２６６、７０４号
【非特許文献１】國米  仁、外４名  “個人情報を保護する匿名Ｐ２Ｐネットワーク基盤”、［online］、２００３年  情報処理振興事業会  ２００２年度成果報告集  第二版  ［平成１５年１１月１４日検索］、インターネット<URL:http://www.ipa.go.jp/SPC/report/02fy-pro/report/1512/paper.pdf>
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかし、Ｐ２Ｐオニオンルーティングには以下に述べる課題がある。
課題１：Ｐ２Ｐオニオンルーティングでは通信パケットの中継するノードの公開鍵で多重にネスト暗号化（入れ子構造の暗号化）した経路情報を使用する。そして、中継ノードが自分の秘密鍵で次の中継先ノードＩＤを取り出しながら中継して行く。これによって通信パケットの送受信者の匿名性が保たれる。ところが、この方式では中継ノードが次のノードＩＤを取り出しながら先へ進めば進むほど次のノードＩＤが含まれる暗号化された経路情報のブロックサイズが小さくなっていく。その結果、目的ノードの直前のノードでは、次が受信ノードであると推測される可能性がある。
【００１３】
図３１は、従来のＰ２Ｐオニオンルーティングの例を示す図である。図３１に示すように、複数のノード９０１，９０２，９１１〜９１５がピアツーピアで接続されている。ここで、ノード９０１が送信者、ノード９０２が受信者であるものとする。なお、ノード９０１のノードＩＤを「Ｓ」、ノード９０２のノードＩＤを「Ｒ」、ノード９１１のノードＩＤを「１」、ノード９１２のノードＩＤを「２」、ノード９１３のノードＩＤを「３」、ノード９１４のノードＩＤを「４」、ノード９１５のノードＩＤを「５」とする。
【００１４】
ノード９０１からノード９０２までは、ノード９１１、ノード９１３、ノード９１５を経由した通信路でパケットを送信することができる。この場合、ノード９０１からノード９１１にパケット９２１が渡される。ノード９１１は、パケット９２１内のルート情報（オニオンルート）を自分の秘密鍵で復号することで、次にノード９１３に転送すべきことを認識する。そして、ノード９１１は、パケット９２２をノード９１３に転送する。以後、同様にノード９１３からノード９１５へパケット９２３が渡され、ノード９１５からノード９０２にパケット９２４が渡される。
【００１５】
図３２は、従来技術によるパケットのサイズを示す図である。ノード９０１からノード９１１に渡されるパケット９２１にはオニオンルート情報９２１ａが含まれる。このオニオンルート情報９２１ａは、ノード９１１の公開鍵Ｐ１で暗号化されている。ノード９１１が自分の秘密鍵でオニオンルート情報９２１ａを復号すると、次のノードに渡すべきオニオンルート情報と、匿名通信路上の次のノードのノードＩＤが得られる。これらの情報に基づいて、パケット９２２が生成され、ノード９１３に渡される。
【００１６】
パケット９２２にはオニオンルート情報９２２ａと戻りルート情報（戻りオニオン）９２２ｂが含まれる。戻りルート情報９２２ｂは、送信時の匿名通信路を逆方向に辿るための匿名通信路を示す情報である。戻りルート情報９２２ｂは、各ノードで中継されるときに、逆方向の経路情報が追加される。オニオンルート情報９２２ａは、ノード９１３の公開鍵Ｐ３で暗号化されている。ノード９１３が自分の秘密鍵でオニオンルート情報９２２ａを復号すると、次のノードに渡すべきオニオンルート情報と、匿名通信路上の次のノードのノードＩＤが得られる。これらの情報に基づいて、パケット９２３が生成され、ノード９１５に渡される。
【００１７】
パケット９２３にはオニオンルート情報９２３ａと戻りルート情報９２３ｂが含まれる。オニオンルート情報９２３ａは、ノード９１５の公開鍵Ｐ５で暗号化されている。ノード９１５が自分の秘密鍵でオニオンルート情報９２３ａを復号すると、次のノードに渡すべきオニオンルート情報と、匿名通信路上の次のノードのノードＩＤが得られる。これらの情報に基づいて、パケット９２４が生成され、ノード９０２に渡される。
【００１８】
パケット９２４にはオニオンルート情報９２４ａと戻りルート情報９２４ｂが含まれる。オニオンルート情報９２４ａは、ノード９０２の公開鍵ＰＲで暗号化されている。ノード９０２が自分の秘密鍵でオニオンルート情報９２４ａを復号すると、次の転送先が無いことを示す情報（Ｎｕｌｌ）が得られる。ノード９０２は、戻りルート情報９２４ｂをオニオンルート情報としたパケットを生成することで、ノード９０１に対して応答することができる。
【００１９】
このように、オニオンルート情報は、パケットが転送される度に復号され、データ長が短くなる。そのため、パケットを中継するノードでは、オニオンルート情報のデータ長から、受信者のノードまでの距離を想定することが可能である。ここでいう距離とは、パケットがいくつのノードで中継されるかを示す数（ホップ数）である。
【００２０】
課題２：Ｐ２Ｐオニオンルーティングでは、メッセージの送信者から受信者までのルート情報に関して送信者を頂点、受信者を末端としたツリー構造で保持していた。このツリー構造では、送信者から受信者までの匿名通信路が多数あれば、匿名通信路分のノードの配列が登録される。Ｐ２Ｐオニオンルーティングにおいて、検出されている複数の匿名通信路の情報をパケットに含めておけば、最初に選択した匿名通信路での通信に失敗したときに、自動的に他の匿名通信路経由の通信を行うことが可能となる。
【００２１】
この場合、匿名通信路毎に、その通信路上のノード情報を、伝送されるパケットに含める必要がある。そのためダミーを除いても、パケット内に多くのヘッダが必要となり、パケットのデータ長が肥大化していた。なお、ダミーとは、受信者のノードが他のノードに無効なパケットを送信する際のヘッダである。
【００２２】
図３３は、送信者から受信者までのルート情報を示す図である。これは、図３１に示す構成のＰ２Ｐネットワークにおいて、ノード９０１が送信者であり、ノード９０２が受信者の場合の例である。この図では、ルート探索によって得られた匿名通信路を、ノードＩＤの配列で示している。この例では、ノード９０１からノード９０２までは６つの匿名通信路が存在する。ノードのヘッダ情報を匿名通信路毎にまとめると、３０ノード分のヘッダが必要となる。
【００２３】
課題３：従来のＰ２Ｐオニオンルーティングでは、中継ノードがメッセージを中継するときに自分へ中継してきたノードのノードＩＤを暗号化し、返信時にルートを逆にたどるための匿名ルート情報（戻りオニオンルート）をメッセージパケット内に埋め込んでいた。そのため中継時にその処理分の時間がかかってしまう。また、メッセージパケットも中継数が多いほど長くなってしまう。この長さからも課題１と同様な理由で、送信ノードの次の中継ノードに送信ノードを推測される虞がある。
【００２４】
たとえば、図３１のデータ転送例では、図３２に示すように受信者であるノード９０２に近づくほど戻りオニオンルートが長くなっている。
本発明はこのような点に鑑みてなされたものであり、送信者や受信者までの距離を隠すことができる匿名データ送信方法、匿名データ中継方法、匿名データ送信装置、匿名データ中継装置、匿名データ送信プログラム、および匿名データ中継プログラムを提供することを目的とする。
【課題を解決するための手段】
【００２５】
本発明の第１の態様では上記課題を解決するために、図１に示すような、匿名データ送信方法が提供される。本発明に係る匿名データ送信方法は、匿名ルートを介してパケットを送信するためのものである。この匿名データ送信方法では、以下の処理が行われる。
【００２６】
格納ブロック決定手段１ｂが、パケット内のルート情報格納領域を複数のブロックに分割し、匿名ルート記憶手段１ａに予め格納されている匿名ルート情報に基づいて、匿名ルートに含まれる各ノードをブロックに対応付ける。次に、ノード別ルート情報生成手段１ｃが、匿名ルート情報に基づいて、匿名ルート上のノード毎に、隣接ノードの識別情報および隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報を生成する。次に、暗号化手段１ｄが、ノード別ルート情報それぞれを暗号化する。ノード別ルート情報設定手段１ｅが、暗号化されたノード毎のノード別ルート情報を、パケット内の各ノードに対応するブロックに設定する。次に、ブロック指定手段１ｆが、匿名ルート上の隣接する隣接ノードに対応するブロックの位置をパケットに設定する。そして、パケット送信手段１ｇが、パケットを隣接ノードに対して送信する。
【００２７】
このような匿名データ送信方法によれば、格納ブロック決定手段１ｂにより、匿名ルートに含まれる各ノードがブロックに対応付けられる。次に、ノード別ルート情報生成手段１ｃにより、匿名ルート上のノード毎にノード別ルート情報が生成される。次に、暗号化手段１ｄにより、ノード別ルート情報が暗号化される。次に、ノード別ルート情報設定手段１ｅにより、ノード毎のノード別ルート情報が、各ノードに対応するブロックに設定される。次に、ブロック指定手段１ｆにより、匿名ルート上の隣接する隣接ノードに対応するブロックの位置がパケットに設定される。そして、パケット送信手段１ｇにより、パケットが隣接ノードに対して送信される。
【００２８】
本発明の第２の態様では上記課題を解決するために、図１に示すように匿名データ中継方法が提供される。本発明に係る匿名データ中継方法は、匿名のデータを中継するためのものである。この匿名データ中継方法では、以下の処理が行われる。
【００２９】
各ノードの隣接ノードの識別情報および隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報が、ルート情報格納領域内の各ノードに対応するブロックに設定されていると共に、自分宛のブロック指定を含むパケットを受信すると、復号手段２ａが、自分宛のブロック指定で指定されたブロックに設定されているノード別ルート情報を復号する。次に、転送先決定手段２ｂが、復号されたノード別ルート情報に基づいて、パケットの転送先のノードを決定する。さらに、ブロック指定変更手段２ｃが、復号されたノード別ルート情報に基づいて、ブロック指定の内容を、転送先のノードに対応するブロックに変更する。そして、パケット送信手段２ｄが、転送先のノードにパケットを送信する。
【００３０】
このような匿名データ中継方法によれば、パケットを受信すると、復号手段２ａにより、ブロック指定で指定されたブロックに設定されているノード別ルート情報が復号される。次に、転送先決定手段２ｂにより、復号されたノード別ルート情報に基づいて、パケットの転送先のノードが決定される。さらに、ブロック指定変更手段２ｃにより、ブロック指定の内容が、転送先のノードに対応するブロックに変更される。そして、パケット送信手段２ｄにより、転送先のノードにパケットが送信される。
【００３１】
本発明の第３の態様では、匿名ルートを介してパケットを送信する匿名データ送信装置において、前記パケット内のルート情報格納領域を複数のブロックに分割し、匿名ルート記憶手段に予め格納されている匿名ルート情報に基づいて、前記匿名ルートに含まれる各ノードを前記ブロックに対応付ける格納ブロック決定手段と、前記匿名ルート情報に基づいて、前記匿名ルート上のノード毎に、隣接ノードの識別情報および前記隣接ノードに対応する前記ブロックの位置を示すブロック指定を含むノード別ルート情報を生成するノード別ルート情報生成手段と、前記ノード別ルート情報を暗号化する暗号化手段と、暗号化されたノード毎の前記ノード別ルート情報を、前記パケット内の各ノードに対応する前記ブロックに設定するノード別ルート情報設定手段と、前記匿名ルート上の隣接する前記隣接ノードに対応する前記ブロックの位置を前記パケットに設定するブロック指定手段と、前記パケットを前記隣接ノードに対して送信するパケット送信手段と、を有することを特徴とする匿名データ送信装置が提供される。
【００３２】
このような匿名データ送信装置によれば、上記の本発明の第１の態様に係る匿名データ送信方法と同様の処理が実行される。
本発明の第４の態様では、各ノードの隣接ノードの識別情報および前記隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報が、ルート情報格納領域内の各ノードに対応するブロックに設定されていると共に、自分宛のブロック指定を含むパケットを受信すると、自分宛の前記ブロック指定で指定されたブロックに設定されている前記ノード別ルート情報を復号する復号手段と、復号された前記ノード別ルート情報に基づいて、前記パケットの転送先のノードを決定する転送先決定手段と、復号された前記ノード別ルート情報に基づいて、前記ブロック指定の内容を、前記転送先のノードに対応するブロックに変更するブロック指定変更手段と、前記転送先のノードに前記パケットを送信するパケット送信手段と、を有することを特徴とする匿名データ中継装置が提供される。
【００３３】
このような匿名データ中継装置によれば、上記の本発明の第２の態様に係る匿名データ中継方法と同様の処理が実行される。
本発明の第５の態様によれば、匿名ルートを介してパケットを送信するための匿名データ送信プログラムにおいて、コンピュータに、格納ブロック決定手段が、前記パケット内のルート情報格納領域を複数のブロックに分割し、匿名ルート記憶手段に予め格納されている匿名ルート情報に基づいて、前記匿名ルートに含まれる各ノードを前記ブロックに対応付け、ノード別ルート情報生成手段が、前記匿名ルート情報に基づいて、前記匿名ルート上のノード毎に、隣接ノードの識別情報および前記隣接ノードに対応する前記ブロックの位置を示すブロック指定を含むノード別ルート情報を生成し、暗号化手段が、前記ノード別ルート情報を暗号化し、ノード別ルート情報設定手段が、暗号化されたノード毎の前記ノード別ルート情報を、前記パケット内の各ノードに対応する前記ブロックに設定し、ブロック指定手段が、前記匿名ルート上の隣接する前記隣接ノードに対応する前記ブロックの位置を前記パケットに設定し、パケット送信手段が、前記パケットを前記隣接ノードに対して送信する、処理を実行させることを特徴とする匿名データ送信プログラムが提供される。
【００３４】
このような匿名データ送信プログラムをコンピュータに実行させることで、上記の本発明の第１の態様に係る匿名データ送信方法と同様の処理がコンピュータによって実行される。
【００３５】
本発明の第６の態様によれば匿名のデータを中継するための匿名データ中継プログラムにおいて、コンピュータに、各ノードの隣接ノードの識別情報および前記隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報が、ルート情報格納領域内の各ノードに対応するブロックに設定されていると共に、自分宛のブロック指定を含むパケットを受信すると、復号手段が、自分宛の前記ブロック指定で指定されたブロックに設定されている前記ノード別ルート情報を復号し、転送先決定手段が、復号された前記ノード別ルート情報に基づいて、前記パケットの転送先のノードを決定し、ブロック指定変更手段が、復号された前記ノード別ルート情報に基づいて、前記ブロック指定の内容を、前記転送先のノードに対応するブロックに変更し、パケット送信手段が、前記転送先のノードに前記パケットを送信する、処理を実行させることを特徴とする匿名データ中継プログラムが提供される。
【００３６】
このような匿名データ中継プログラムをコンピュータに実行させることで、上記の本発明の第２の態様に係る匿名データ中継方法と同様の処理がコンピュータによって実行される。
【発明の効果】
【００３７】
以上説明したように本発明の第１、第３、第５の態様では、匿名ルート上のノード毎のブロックにノード別ルート情報を設定し、各ノード別ルート情報内に隣接ノードの識別情報および隣接ノードに対応するブロックの位置を示すブロック指定を含めるようにした。そのため、パケットを中継するノードは、ブロック指定で示されたブロックに対応するノード別ルート情報に基づいて次の転送先を認識できるとともに、転送先のノードに対して対応するブロックの位置を指定することができる。その結果、データが中継されてもパケットのデータ長が変更されず、送信元や宛先までの距離（中継回数）を隠蔽することができる。
【００３８】
また、本発明の第２、第４、第６の態様では、パケットのブロック指定に応じたノード別ルート情報を復号して、隣接ノードの識別情報および隣接ノードに対応するブロックの位置を示すブロック指定を取得し、ブロック指定を変更してパケットを転送するようにした。その結果、データが中継されてもパケットのデータ長が変更されず、送信元や宛先までの距離を隠蔽することができる。
【発明を実施するための最良の形態】
【００３９】
以下、本発明の実施の形態を図面を参照して説明する。
まず、実施の形態に適用される発明の概要について説明し、その後、実施の形態の具体的な内容を説明する。
【００４０】
図１は、実施の形態に適用される発明の概念図である。図１には、送信ノード１に係る発明と、中継ノード２に係る発明とが示されている。送信ノード１から送信されるパケットは、１以上の中継ノード２で中継され受信ノード３に渡される。この際、本発明を適用することで、送信ノード１と受信ノード３とを匿名にしたままパケットを中継させることができると共に、パケットが中継されてもパケットのデータ長を一定に保つことができる。このような匿名データ転送を実現するために、送信ノード１と中継ノード２とは、それぞれ以下のような機能を有している。
【００４１】
送信ノード１は、匿名ルート記憶手段１ａ、格納ブロック決定手段１ｂ、ノード別ルート情報生成手段１ｃ、暗号化手段１ｄ、ノード別ルート情報設定手段１ｅ、ブロック指定手段１ｆ、およびパケット送信手段１ｇを有している。
【００４２】
匿名ルート記憶手段１ａは、予め探索された匿名ルートを示す匿名ルート情報が格納された記憶装置である。たとえば、半導体記憶装置や磁気記憶装置内の少なくとも一部の記憶領域を、匿名ルート記憶手段１ａとして利用することができる。
【００４３】
格納ブロック決定手段１ｂは、パケット内のルート情報格納領域を複数のブロックに分割し、匿名ルート記憶手段１ａに予め格納されている匿名ルート情報に基づいて、任意の宛先までの匿名ルートに含まれる各ノードをブロックに対応付ける。たとえば、受信ノード３までの匿名ルート上に中継ノード２が存在する場合、中継ノード２や受信ノード３に対してブロックが対応付けられる。受信ノード３までの匿名ルートが複数ある場合、各匿名ルート上の全てのノードに対して、ブロックを対応付けることができる。
【００４４】
ノード別ルート情報生成手段１ｃは、匿名ルート記憶手段１ａ内の匿名ルート情報に基づいて、匿名ルート上のノード毎に、隣接ノードの識別情報および隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報を生成する。
【００４５】
暗号化手段１ｄは、ノード別ルート情報それぞれを暗号化する。たとえば、暗号化手段１ｄは、各ブロック内のノード別ルート情報を、そのブロックに対応するノードの公開鍵で暗号化する。これにより、各ブロックに対応するノードのみが、そのノード内のノード別ルート情報を復号することができる。
【００４６】
ノード別ルート情報設定手段１ｅは、暗号化されたノード毎のノード別ルート情報を、パケット内の各ノードに対応するブロックに設定する。
ブロック指定手段１ｆは、匿名ルート上の隣接する隣接ノードに対応するブロックの位置をパケットに設定する。
【００４７】
パケット送信手段１ｇは、パケットを隣接ノードに対して送信する。
中継ノード２は、復号手段２ａ、転送先決定手段２ｂ、ブロック指定変更手段２ｃ、およびパケット送信手段２ｄを有している。
【００４８】
復号手段２ａは、送信ノード１から送信されたパケットを受信すると、ブロック指定で指定されたブロックに設定されているノード別ルート情報を復号する。たとえば、ノード別ルート情報が中継ノード２の公開鍵で暗号化されていた場合、対応する秘密鍵で復号することができる。復号されたノード別ルート情報は、たとえば、半導体記憶装置等の記憶手段に一時的に記憶される。
【００４９】
転送先決定手段２ｂが、復号されたノード別ルート情報に基づいて、パケットの転送先のノードを決定する。ノード別ルート情報には、匿名ルート上で隣接するノードの識別情報と、そのノードに対応するブロックの位置とが含まれている。隣接するノードには、送信ノード１側に隣接するノードと受信ノード３側に隣接するノードとがあり得る。このとき、パケットを送信してきたノードと逆方向に隣接するノードを、そのパケットの転送先として決定することができる。
【００５０】
ブロック指定変更手段２ｃは、復号されたノード別ルート情報に基づいて、記憶手段に記憶されたブロック内のブロック指定の内容を、転送先のノードに対応するブロックに変更する。転送先のノードに対応するブロックの位置は、ノード別ルート情報を参照することで判別できる。
【００５１】
パケット送信手段２ｄは、転送先のノードにパケットを送信する。
このような匿名データ送信方法によれば、格納ブロック決定手段１ｂにより、匿名ルートに含まれる各ノードがブロックに対応付けられる。次に、ノード別ルート情報生成手段１ｃにより、匿名ルート上のノード毎にノード別ルート情報が生成される。次に、暗号化手段１ｄにより、ノード別ルート情報が暗号化される。次に、ノード別ルート情報設定手段１ｅにより、ノード毎のノード別ルート情報が、各ノードに対応するブロックに設定される。次に、ブロック指定手段１ｆにより、匿名ルート上の隣接する隣接ノードに対応するブロックの位置がパケットに設定される。そして、パケット送信手段１ｇにより、パケットが隣接ノードに対して送信される。
【００５２】
送信ノード１から送信されたパケットを中継ノード２が受信すると、復号手段２ａにより、ブロック指定で指定されたブロックに設定されているノード別ルート情報が復号される。次に、転送先決定手段２ｂにより、復号されたノード別ルート情報に基づいて、パケットの転送先のノードが決定される。さらに、ブロック指定変更手段２ｃにより、ブロック指定の内容が、転送先のノードに対応するブロックに変更される。そして、パケット送信手段２ｄにより、転送先のノードにパケットが送信される。
【００５３】
このように、複数の中継ノードによってパケットが匿名ルートに沿って転送され、受信ノード３に渡される。受信ノード３は、パケットの宛先を参照して、自分宛であることを認識し、そのパケットを受け取る。
【００５４】
以上のようにして、パケットのデータ長を変更せずに匿名データ通信が可能となる。その結果、ノード間を流れる経路情報のデータの大きさやその変化等からリンクを推定されない。さらに、複数の匿名ルートに関する情報をパケットに載せたとしても、ヘッダサイズが少なくて済む。すなわち、１つのノードを経由する複数の匿名ルートが存在した場合でも、そのノードに対応するノード別ルート情報を１つ設定すればよいため、ヘッダサイズの肥大化が防止される。
【００５５】
しかも、中継ノード２では、パケットに対してはブロック指定の変更を加えるだけで転送することができる。すなわち、返信を行うための戻る匿名ルートを中継ノードで中継時に作る必要がないため、メッセージの到達時間やサイズが短くなる。その結果、中継ノード２にかかる負荷も少なくて済む。
【００５６】
さらに、ネットワークの突然の切断に耐えるための迂回機能を強化することができる。すなわち、複数の匿名ルートの情報をパケットに載せることが可能であるため、最低限のネットワークパスが存在する限りメッセージを転送することができる。
【００５７】
ところで、本発明で転送されるパケットのルート情報格納領域には、匿名ルート上の各ノードのノード別ルート情報が対等の関係で格納されている。ここでいう対等の関係とは、対応するノードが有している鍵のみで復号できることを意味する。すなわち、オニオンルーティングでは、個別のノードが有する複数の鍵を用いて所定の順番で復号しない限り、各ノードは自分宛のノード別ルート情報（次の転送先に関する情報）を参照することができない。一方、本発明を採用することにより、各ノードに対して復号すべきブロックを指示することで、パケットを受け取ったノードは、自分宛のノード別ルート情報を参照することが可能である。
【００５８】
そこで、本発明を適用した匿名データ通信を、オニオンルーティングと対比する意味で、グレープルーティングと呼ぶこととする。また、グレープルーティングにおける匿名ルートの情報を、グレープルートと呼ぶ。
【００５９】
グレープルーティングは、Ｐ２Ｐネットワークのようなネットワーク構成が動的に変化する場合にも適用することができる。そこで、以下、グレープルーティングをＰ２Ｐネットワークに適用した場合の例を、本発明の実施の形態として具体的に説明する。すなわち、以下の実施の形態では、Ｐ２Ｐネットワークのような不安定なネットワークにおいて、データの送受信者の匿名性を守ると共に、データの送受信経路を動的に変更することができる独自の匿名通信機能を実現する仕組みを提供する。
【００６０】
Ｐ２Ｐネットワーク上の匿名通信を実現するために、本発明の実施の形態では、主に以下の処理が実行される。
〔第１のステップ〕送信ノードは、受信ノードまでの経路情報を発見し、経路情報を匿名的に収集する。
【００６１】
〔第２のステップ〕送信ノードは、発見した幾つかの経路に含まれるノードからグレープルータとして用いるノードを複数個選択して、グレープルートを構築する。
〔第３のステップ〕送信ノードは、データパケットにグレープルートを設定して、グレープルータに送信を依頼する。
【００６２】
〔第４のステップ〕中継ノードは、グレープルートの情報に応じて次のグレープルータにデータを送信する。ノード構成に変更がある等してデータ送信に失敗すると、グレープルート中の他の経路に再送を行う。
【００６３】
上記〔第１のステップ〕―〔第２のステップ〕の過程を匿名経路発見機能、〔第３のステップ〕―〔第４のステップ〕の過程をグレープルーティング機能と呼ぶ。匿名経路発見機能は、送信ノードから受信ノードまでのルート情報を匿名的に収集し、収集したルート情報からグレープルートを構築する機能である。グレープルーティング機能は、グレープルータがデータパケット中のグレープルートを用いて、送信ノードから受信ノードまで匿名的にデータを転送する機能である。
【００６４】
図２は、グレープルートのデータ構造例を示す図である。図２の例では、ノード４ａ，４ｂ、ノード５ａ〜５ｅで構成されるＰ２Ｐネットワークを想定している。この例では、ノード４ａが送信ノードであり、ノード４ｂが受信ノードである。ここで、ノード５ｄからノード５ｃに渡されるパケット６の例が示されている。なお、ノード４ａのノードＩＤを「Ｓ」、ノード４ｂのノードＩＤを「Ｒ」、ノード５ａのノードＩＤを「１」、ノード５ｂのノードＩＤを「２」、ノード５ｃのノードＩＤを「３」、ノード５ｄのノードＩＤを「４」、ノード５ｅのノードＩＤを「５」とする。
【００６５】
パケット６には、複数のブロックを有するグレープルート６ａと、ブロック指定を含む制御情報６ｂとが含まれる。
グレープルート６ａには、匿名ルート上の各ノード５ａ〜５ｅと受信ノード４ｂとに対応するブロック６ａａ〜６ａｆが設けられている。この例では、各ブロック６ａａ〜６ａｆがマトリックス状に配置されており、行番号（縦方向の順番）と列番号（横方向の順番）とによってブロック位置を指定できる。各ブロック６ａａ〜６ａｆには、対応するノードの公開鍵で暗号化されたノード別ルート情報が設定されている。図中、Ｐ１はノード５ａの公開鍵を示している。Ｐ２はノード５ｂの公開鍵を示している。Ｐ３はノード５ｃの公開鍵を示している。Ｐ４はノード５ｄの公開鍵を示している。Ｐ５はノード５ｅの公開鍵を示している。ＰＲはノード４ｂの公開鍵を示している。
【００６６】
ノード５ａのノード別ルート情報では、送信方向に隣接するノードとして、ノードＩＤ「２」のノード５ｂとノードＩＤ「３」のノード５ｃとが存在していることが示されている。また、ノード５ｂとノード５ｃとに対応するブロックの位置が示されている。
【００６７】
ノード５ｂのノード別ルート情報では、送信方向に隣接するノードとして、ノードＩＤ「４」のノード５ｄが存在していることが示されている。また、ノード５ｄに対応するブロックの位置が示されている。
【００６８】
ノード５ｃのノード別ルート情報では、送信方向に隣接するノードとして、ノードＩＤ「４」のノード５ｄとノードＩＤ「５」のノード５ｅとが存在していることが示されている。また、ノード５ｄとノード５ｅとに対応するブロックの位置が示されている。
【００６９】
ノード５ｄのノード別ルート情報では、送信方向に隣接するノードとして、ノードＩＤ「Ｒ」のノード４ｂが存在していることが示されている。また、ノード４ｂに対応するブロックの位置が示されている。
【００７０】
ノード５ｅのノード別ルート情報では、送信方向に隣接するノードとして、ノードＩＤ「Ｒ」のノード４ｂが存在していることが示されている。また、ノード４ｂに対応するブロックの位置が示されている。
【００７１】
制御情報６ｂには、パケットの状態等の情報が含まれている。たとえば、｛blockaddress,forward or backward,flip or nonflip｝という情報が含まれる。｛blockadress｝は、受け取ったノードが参照すべきノードの位置（ブロック指定）である。｛forward or backward｝は、パケットが送信ノードから受信ノードへ前進中（forward）か、逆方向に後退中（backward）かを示している。｛flip or nonflip｝は、パケットが迂回中｛flip｝か、そうでない｛nonflip｝かを示している。図２に示すパケット６は、ブロック指定が行番号と列番号とによって、｛（1,3）｝（１行３列のブロック６ａｃ）と指定されている。また、パケット６が前進中｛forward｝、且つ迂回中｛flip｝であることを示している。
【００７２】
次に、ノード別ルート情報の内容の具体例について説明する。図２には、ブロック６ａｃに設定されたノード別ルート情報の内容が示されている。なお、このノード別ルート情報は、ノード５ｃの公開鍵「Ｐ３」で暗号化されており、ノード５ｃのみが参照可能である。
【００７３】
このノード別ルート情報には、暗号化された｛forward:4 or 5,backward:1,flip（4）or5,address1（1,1）,4（2,1）,5（2,2）｝という情報や、暗号化されていない,｛from4:valid｝｛destruction？｝という情報が設定されている。
【００７４】
｛forward:4 or 5｝は、前進方向の隣接ノードとして、ノードＩＤ「４」のノード５ｄとノードＩＤ「５」のノード５ｅとがあることを示している。
｛backward:1｝は、後退方向に隣接するノードとして、ノードＩＤ「１」のノード５ａがあることを示している。
【００７５】
｛flip（4）or5｝は、送信先を指定する情報であり、前進中ならノードＩＤ「４」のノード５ｄとノードＩＤ「５」のノード５ｅとの何れかが送信先となることが示されている。なお、前進迂回中の場合、ノードＩＤ「４」のノード５ｄが送信先となることが、（４）で示されている。このとき、ノードＩＤ「４」のノード５ｄから戻ってきたパケットであれば、送信先はノードＩＤ「５」のノード５ｅとなる。
【００７６】
｛address1:（1,1）,4:（2,1）,5:（2,2）｝は、次のノードに対応するブロックのアドレス（位置）を指定している。ノードＩＤ「１」のノード５ａに対応するブロックのアドレスは（1,1）である。ノードＩＤ「４」のノード５ｄに対応するブロックのアドレスは（2,1）である。ノードＩＤ「５」のノード５ｅに対応するブロックのアドレスは（2,2）である。
【００７７】
｛from4:valid｝は、ノードＩＤ「４」のノード４ｄからの有効がパケットであれば、そのパケットは有効であることを示している。すなわち、悪意のある第三者によって、パケットの複製が目的外のノードに転送された場合であっても、この項目を参照することによって不正なパケットを検出できる。
【００７８】
｛destruction？｝は、受信者のカモフラージュのため、受信者にパケットが到着してもダミーのパケットをしばらく続ける場合の、そのダミーパケットの削除の有無を示している。｛destruction？｝に「Ｙ」が設定されていたとき、そのパケットを受信したノードによってパケットが削除される（次のノードへの転送が行われない）。
【００７９】
すなわち、データパケットを送信する際には、受信ノードより先のノードまでデータ転送が行われるように、グレープルートを設定することができる。その場合、受信ノードは、受信したデータパケットの内容を受け取って、それに応じた処理を実行するとともに、他のノードにダミーのデータパケットを送信する。ダミーのデータパケットを受け取ったノードは、｛destruction？｝が「Ｙ」のときは、そのデータパケットを破棄する。｛destruction？｝が「Ｙ」でなければ、さらに他のノードへダミーのデータパケットを送信する。
【００８０】
このような内容のパケットを各Ｐ２Ｐネットワークを構成するノード間で受け渡すことで、匿名性の高い通信が可能となる。
すなわち、グレープルーティングでは、送信ノードにおいて、受信ノードまでの転送ルートを形成する中継ノードの候補から選択したそれぞれの中継ノードに関して、中継する一つ先と１つ前のノード情報（次に中継するノードＩＤ、戻る方向のノードＩＤ、送信方向で迂回先となるノードＩＤ候補など）をその中継ノードしか復号できないように暗号化したブロックを、中継ノード数（＋ダミーデータ数）だけ複数並べて保持したグレープルートを構築する。
【００８１】
このグレープルートには最初の中継ノードが復号するブロックが指定してあり、各暗号ブロック内にも復号されたときに得られるノード情報内の各ノードが復号できる暗号ブロックがどれであるかを指定する情報が含まれる。そこで、送信ノードは、最初の中継ノードに対して復号するブロックを指定して、パケットを送信する。すると、パケットを受信した中継ノードは、指定されたブロックを復号して、メッセージを送信すべきノードの集合とメッセージに対する返信を返すべきノードの集合を得ることができる。
【００８２】
中継ノードは、送信中か、返信中か、迂回中か否かに応じて、メッセージを送信すべきノードの集合か、メッセージに対する返信を返すべきノードの集合（戻りルート）かのどちらかのノードの集合か選択することができる。選択したノードの集合の中から、中継ノードがネットワークの状況など独自の判断に応じて、次に送信すべき最適なノードを動的に選択することができる。
【００８３】
また、中継ノードや受信ノードは、受け取るべきノードの集合以外からデータが送られた場合には、そのデータを破棄することができる。これにより、不正なパケットの伝送を防止することができる。
【００８４】
さらに、ダミーブロックを利用することにより、目的地の受信者がデータを受け取った場合でも、さらに通常のノードと同様にダミーのデータを転送することができる。ダミーのデータ転送を行うことで、誰が目的の受信者であるかをカモフラージュすることが可能となる。
【００８５】
なお、Ｐ２Ｐネットワークにグレープルーティングを適用する場合、まず、匿名通信路の探索処理が必要である。すなわち、Ｐ２Ｐネットワークでは、ネットワークの構成が動的に変化する。そのため、特定のサーバ等に予め匿名ルートを定義しておくことはできず、随時匿名ルートを探索する必要がある。そこで、本発明の実施の形態では、Ｐ２Ｐオニオンルーティングの技術を利用した匿名ルートの探索を行うものとする。
【００８６】
また、本発明の実施の形態では、各ノードがパケットを送信するとき、送信元の指定に匿名識別子と送信元公開鍵を用いる。匿名識別子や送信元公開鍵は、適宜変更することができる。たとえば、匿名ルートを探索するためのパケット（ルート探索パケット）を送出する度に、異なる匿名識別子、異なる送信元公開鍵を用いることができる。送信元公開鍵を固定化しないことで、送信元の匿名性を高めることができる。すなわち、匿名識別子と公開鍵を常に送信者に対して固定にすると以下の問題が生じてしまう。
【００８７】
〔第１の問題点〕同一匿名識別子を持つ暗号化されないメッセージ（掲示板への投稿等）が複数集まると、その内容から発信者を特定できる可能性が生じる。
〔第２の問題点〕暗号化されたメッセージでも、暗号化を解いた人（例えば、匿名掲示板の投稿に対する返信を投稿者が読む場合）が内容から発信者を特定できる可能性が生じる。
【００８８】
そこで、同一送信者の匿名識別子と公開鍵をメッセージ間で固定にしないことで、匿名掲示板を検索するノードや、ネットワーク上のスキミング、或いは、返信メッセージの受信者がメッセージの送信者を特定するのを防ぐことができる。すなわち、ノードの匿名識別子、公開鍵の使い捨て管理を行うことで、メッセージ間のアンリンカビリティ（unlinkability）を高めることができる。これを電子掲示板に利用すれば、データの送信者や受信者の匿名性を守った匿名掲示板機能を実現できる。なお、アンリンカビリティとは、二種類の処理が同じユーザによって行われたことを決定できないことを示す。
【００８９】
以上のような機能を実現するための具体例を、本発明の実施の形態として以下に説明する。なお、以下の実施の形態は、Ｐ２Ｐネットワークに本発明を適用したものであり、匿名通信機能を、主としてＰ２Ｐルート探索プロキシとグレープルータによって実現する。ここで、Ｐ２Ｐルート探索プロキシは、ノードの匿名経路発見機能を司る機能単位である。また、グレープルータは、ノードのグレープルーティング処理を司る機能単位である。なお、グレープルーティングのための匿名ルートを示す情報をグレープルートと呼ぶこととする。グレープルートは、中継ノード情報を暗号ブロック単位で有している。
【００９０】
各ノードのルート探索プロキシによりＰ２Ｐオニオンルート発見プロトコルに応じたルート探索が行われる。また、各ノードのグレープルータにより、Ｐ２Ｐオニオンルーティングが行われ、匿名ルートが検出される。検出された匿名ルートに基づいて、グレープルートが生成される。
【００９１】
ここで、Ｐ２Ｐオニオンルート発見プロトコルは、受信側のノードまでの匿名ルートを発見するプロトコルである。ルート探索プロキシは、ノードのＰ２Ｐオニオンルート発見プロトコルを司る機能単位である。Ｐ２Ｐオニオンルートは、多重に暗号化され、且つ、ノード構成変更に対処可能な経路情報である。グレープルータは、ノードにおいて、グレープルート情報に従ったＰ２Ｐオニオンルーティング処理を司る機能単位である。
【００９２】
図３は、匿名通信網の概念図である。本実施の形態では、ノード１００が、ノード２００，３００，４１０，４２０，４３０，４４０，４５０を含む匿名通信網１０に参加する。ここで、ノード１００のノード名を「Ａ」、ノード２００のノード名を「Ｂ」、ノード４１０のノード名を「Ｃ」、ノード４２０のノード名を「Ｄ」、ノード４３０のノード名を「Ｅ」、ノード４４０のノード名を「Ｆ」、ノード４５０のノード名を「Ｇ」、ノード３００のノード名を「Ｘ」とする。
【００９３】
ノード１００は、ノード２００との間でＰ２Ｐ通信接続を行うことで匿名通信網１０に参加する。
ノード２００は、他のノード４１０，４２０，４４０，４５０との間でＰ２Ｐ通信接続が確立している。ノード４１０は、さらにノード４３０との間でＰ２Ｐ通信接続が確立している。ノード４２０も同様に、ノード４３０との間でＰ２Ｐ通信接続が確立している。ノード４３０は、さらにノード３００との間でＰ２Ｐ通信接続が確立している。
【００９４】
このようにＰ２Ｐネットワークでは、多数のノード間でのＰ２Ｐ接続の連鎖によって通信網が確立している。
図４は、本発明の実施の形態に用いるノードのハードウェア構成例を示す図である。ノード１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、および通信インタフェース１０６が接続されている。
【００９５】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションプログラムが格納される。
【００９６】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。
【００９７】
通信インタフェース１０６は、他のノード２００との間でデータの送受信を行う。
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図４には、ノード１００のハードウェア構成例を示したが、他のノード２００，３００，４１０，４２０，４３０，４４０，４５０も同様のハードウェア構成で実現可能である。
【００９８】
本実施の形態に係る各ノードは、大別して、セキュア通信路形成機能、匿名通信基盤接続認証機能、匿名経路発見機能、および匿名通信機能を有している。
図５は、ノードの概略機能構成を示すブロック図である。ノード１００は、セキュア通信路形成機能１００ａ、匿名通信基盤接続認証機能１１０ａ、匿名経路発見機能１１０ｂ、および匿名通信機能１２０ａを有している。匿名通信基盤接続認証機能１１０ａと匿名経路発見機能１１０ｂとは、ルート探索プロキシ１１０が有する機能である。また、匿名通信機能１２０ａは、グレープルータ１２０が有する機能である。
【００９９】
同様に、ノード２００は、セキュア通信路形成機能２００ａ、匿名通信基盤接続認証機能２１０ａ、匿名経路発見機能２１０ｂ、および匿名通信機能２２０ａを有している。匿名通信基盤接続認証機能２１０ａと匿名経路発見機能２１０ｂとは、ルート探索プロキシ２１０が有する機能である。また、匿名通信機能２２０ａは、グレープルータ２２０が有する機能である。
【０１００】
また、ノード１００は、複数のアプリケーション１３１，１３２を有している。アプリケーション１３１，１３２は、ユーザからの操作入力等に応答して、メッセージの送信や受信を行う。図５の例では、アプリケーション１３１がメッセージを送信し、アプリケーション１３２がメッセージを受信する場合を示している。
【０１０１】
このような機能構成のノード１００，２００間では、たとえば、アプリケーション１３１，１３２から匿名通信網１０への接続要求が出されると、ノード１００のルート探索プロキシ１１０とノード２００のルート探索プロキシ２１０との匿名通信基盤接続認証機能１１０ａ，２１０ａが連携して動作することで、接続相互認証が行われる。
【０１０２】
また、アプリケーション１３１がユーザからのメッセージ送信依頼を受け付けると、ルート探索プロキシ１１０に対して、Ｐ２Ｐオニオンルートの探索と獲得依頼が出される。すると、ノード１００のルート探索プロキシ１１０とノード２００のルート探索プロキシ２１０との匿名経路発見機能１１０ｂ，２１０ｂがＰ２Ｐオニオンルート発見プロトコルに従って連携動作することで、ルート探索処理が行われる。ルート探索が終了すると、アプリケーション１３１からグレープルータ１２０に対して、メッセージ送信要求が出される。すると、ノード１００のグレープルータ１２０とノード２００のグレープルータ２２０との匿名通信機能１２０ａ，２２０ａが連携して動作することで、オニオンルーティングが行われ、データパケットによってメッセージが送信される。
【０１０３】
また、他のノードからノード１００に対するメッセージがオニオンルーティングによって送られると、グレープルータ１２０からアプリケーション１３２にメッセージが渡される。
【０１０４】
セキュア通信路形成機能１００ａ，２００ａは、匿名通信基盤接続認証機能１１０ａ，２１０ａにより接続された２つのノード間に暗号化されたセキュアな通信路を形成する機能である。実現方法としては、たとえば、ランダムな暗号共通秘密鍵を共有するといったＳＳＬ（Secure Sockets Layer）と同様な手法を用いる。
【０１０５】
匿名通信基盤接続認証機能１１０ａ，２１０ａは、ノードがこの匿名通信基盤に参加するために第１ノードへ接続するための機能である。具体的には、匿名通信基盤接続認証機能１１０ａ，２１０ａは、自身が匿名通信網１０に参加するための認証要求機能、および他のノードが匿名通信網１０に参加する際にそのノードを認証するための機能である。匿名通信網１０に参加するノードに対して接続認証を行うことで、予め会員登録された者以外が匿名通信網１０に参加することを防止できる。
【０１０６】
匿名経路発見機能１１０ｂ，２１０ｂは、Ｐ２Ｐオニオンルート発見プロトコルに従って、送信相手までの伝送路を探索する機能である。具体的には、匿名経路発見機能１１０ｂ，２１０ｂにより、送信ノードから受信ノードまでのルート情報を匿名的に収集し、収集したルート情報（匿名ルート情報）からグレープルートを構築することができる。匿名ルート情報は受信ノードまでの経路を構成する各ノードの識別子と公開鍵などを含む。
【０１０７】
なお、本実施の形態では、匿名経路発見機能１１０ｂ，２１０ｂは、Ｐ２Ｐオニオンルーティングの機能を備えているものとする。たとえば、グレープルートの探索の際には、ルート探索パケットがブロードキャストで送信されるが、そのルート探索パケットに応答するルート通知パケットは、匿名経路発見機能１１０ｂ，２１０ｂによるＰ２Ｐオニオンルーティングによって返信される。
【０１０８】
グレープルートの探索手順は以下の通りである。たとえば、ノード１００がデータの送信者の場合、ルート探索プロキシ１１０が以下の処理を行う。
〔ルート探索の第１のステップ〕ルート探索プロキシ１１０は、Ｐ２Ｐオニオンルート発見プロトコルで受信ノードまでの転送ルートを形成する中継ノードの候補を匿名的に収集する。
【０１０９】
〔ルート探索の第２のステップ〕ルート探索プロキシ１１０は、収集したルート候補から最適なルートを選択する。
〔ルート探索の第３のステップ〕ルート探索プロキシ１１０は、それぞれの中継ノードに関して、中継する１つ先と１つ手前のノード情報（次に中継するノードＩＤ、戻る方向のノードＩＤ、送信方向で迂回先となるノードＩＤ候補など）をその中継ノードしか復号できないように暗号化した暗号ブロックを生成する。
【０１１０】
〔ルート探索の第４のステップ〕ルート探索プロキシ１１０は、中継ノード数（＋ダミーデータ数）だけ暗号ブロックを並べてＲＡＭ等に保持する。この保持された暗号ブロック群がグレープルートとなる。なお、各暗号ブロック内は、復号されたときに得られる１つ先と１つ手前の周辺ノードのそれぞれが復号できる暗号ブロックがどれであるかを指定する情報が含まれる。
【０１１１】
〔ルート探索の第５のステップ〕ルート探索プロキシ１１０は、グレープルートにおいて、最初の中継ノードが復号する暗号ブロックを指定する。なお、グレープルートの暗号ブロックには、常時稼動状態の固定的なサーバの集合を中継ノードの候補として設定できる。その場合、固定的なサーバが復号する暗号ブロックには、中継する方向の情報はなく、受信ノードを含む全ての中継ノードの集合が含まれる。
【０１１２】
匿名通信機能１２０ａ，２２０ａは、グレープルータがデータパケットに設定されたグレープルートを用いて、送信ノードから受信ノードまで匿名的にデータを転送する機能である。ノード１００が送信ノードでノード２００が中継ノードの場合、グレープルータ１２０，２２０は以下の手順で送信ノードから受信ノードまで匿名的にデータを転送する。
【０１１３】
〔データ転送の第１のステップ〕ルート探索プロキシ１１０は最初の中継ノードのグレープルータ２２０に対してグレープルートを設定してデータパケットを送信する。
〔データ転送の第２のステップ〕中継ノードのグレープルータ２２０は、受信したデータパケットに設定されているグレープルート内の指定された暗号ブロックを自ノードが保持する秘密鍵で復号する。暗号ブロックの復号により、データパケットを送信すべきノードの集合とデータパケットに対する返信を返すべきノードの集合が得られる。
【０１１４】
〔データ転送の第３のステップ〕中継ノードのグレープルータ２２０は送信中か、返信中か、迂回中か否かに応じて、データパケットを送信すべきノードの集合か、データパケットに対する返信を返すべきノードの集合かのどちらかのノードの集合を選択し、選択したノードの集合の中からネットワークの状況など独自の判断に応じて次に中継する最適なノードを動的に選択する。
【０１１５】
〔データ転送の第４のステップ〕中継ノードのグレープルータ２２０は、次の中継ノードのグレープルータに対して復号する暗号ブロックを指定したグレープルートを設定してデータパケットを送信する。
【０１１６】
〔データ転送の第２のステップ〕〜〔データ転送の第４のステップ〕が各中継ノードで繰り返される事により、受信ノードにデータパケットが到達する。なお、ノードの構成変更等で次のノードへの転送に失敗した場合は、中継ノードは、グレープルートとから得たノードの集合から、次の最適な中継ノード候補を選択して、再送を試みる。この再送処理はバックトラックと呼ばれ、候補がなくなるまで行われる。常時稼動状態の固定的なサーバが候補として設定してある場合は最後に選択する。
【０１１７】
なお、常時稼動状態の固定的なサーバのグレープルータは、受信したデータパケットに設定されているグレープルートから得られたノードの集合からデータパケットを送信可能である中継ノードへ送信する（同じデータパケットを送信したことのあるノードには送信しない）。その中継ノードから上記〔データ転送の第２のステップ〕〜〔データ転送の第４のステップ〕を繰り返す事により受信ノードが稼動状態である限り必ずデータパケットを到達させることができる。
【０１１８】
受信ノードは送信ノードの匿名性を保持したまま、受信メッセージに対する返信を行うことができる。返信経路はグレープルート内にデータパケットに対する返信を返すべきノードの集合として保持されているため、受信ノードは送信ノードに対して返信する場合、送信者から受信したグレープルートをデータパケットに設定し、返信中であることを示す設定を行った上で返信のグレープルーティングを開始する。返信時のグレープルーティングは中継ノードが次の中継ノードを決めるときに選択するノードの集合をデータパケットに対する返信を返すべきノードの集合にする以外は送信時のグレープルーティングと同等である。
【０１１９】
次に、本発明の実施の形態を実現するための各ノードの機能を詳細に説明する。なお、各ノードは、パケットの発信者（発信ノード）となる場合、パケットの受信者（受信ノード）となる場合、およびパケットのルーディングを行うルータ（中継ノード）となる場合があり得る。従って、各ノードは、発信ノード、受信ノード、および中継ノードとしての機能を備えている必要がある。
【０１２０】
図６は、ノードの機能構成を示すブロック図である。ノード１００は、ルート探索プロキシ１１０、グレープルータ１２０、アプリケーション１３１、会員証情報保持部１４１、固定鍵保持部１４２、匿名ルート情報保持部１４３、一時鍵生成部１５１、および匿名ＩＤ生成部１５２を有している。
【０１２１】
ルート探索プロキシ１１０は、匿名通信接続部１１１、匿名ルート探索要求部１１２、ルート探索要求中継部１１３、およびルート探索要求応答部１１４を有している。
匿名通信接続部１１１は、匿名通信基板接続認証処理を実行する。具体的には、匿名通信接続部１１１は、アプリケーション１３１から匿名基板への接続要求を受け取ると、会員証情報保持部１４１から会員証情報を取得するとともに、固定鍵保持部１４２から固定公開鍵１４２ａを取得する。そして、匿名通信接続部１１１は、接続可能な他のノードとの間で、会員証情報と固定公開鍵１４２ａとを用いて接続認証を行う。また、匿名通信接続部１１１は、他のノードから接続認証要求を受け取った際にも、会員証情報と固定公開鍵１４２ａとを用いて接続認証を行う。
【０１２２】
匿名ルート探索要求部１１２は、Ｐ２Ｐオニオンルート発見プロトコルにおけるルート探索要求送信機能を実現する。具体的には匿名ルート探索要求部１１２は、アプリケーション１３１からＰ２Ｐオニオンルート探索要求を受け取ると、固定鍵保持部１４２から固定公開鍵１４２ａを取得すると共に、一時鍵生成部１５１から一時公開鍵と一時秘密鍵とを受け取る。また、匿名ルート探索要求部１１２は、匿名ＩＤ生成部１５２から匿名ＩＤを取得する。そして、匿名ルート探索要求部１１２は、取得した鍵情報、匿名ＩＤおよび自分のノードＩＤ等を含むルート探索パケットを生成し、ブロードバンドで送信する。なお、ノードＩＤは、公開鍵で暗号化された状態で、ルート探索パケット内に設定される。
【０１２３】
ルート探索要求中継部１１３は、Ｐ２Ｐオニオンルート発見プロトコルにおけるルート探索要求の中継機能を実現する。具体的には、他のノードからルート探索パケットを受け取ると、ルート探索要求中継部１１３は、固定鍵保持部１４２から固定公開鍵１４２ａを取得する。次に、ルート探索要求中継部１１３は、ルート探索パケット内の戻りオニオン（ルートスタック：それまでの伝送経路を示している）内の情報を自分の固定公開鍵１４２ａで暗号化する。その後、ルート探索要求中継部１１３は、暗号化された情報に自分のノードＩＤを付加して、新たな戻りオニオンとする。そして、ルート探索要求中継部１１３は、ルートスタックが更新されたルート探索パケットを、他のノード（ルート探索パケットの送信元を除く）に対して転送する。
【０１２４】
また、ルート探索要求中継部１１３は、ルート探索パケットに対する応答であるルート通知パケットを受け取ると、固定鍵保持部１４２から固定公開鍵１４２ａを取得する。次に、ルート探索要求中継部１１３は、自分のノードＩＤと固定公開鍵とを、ルートを探索しているノードの一時公開鍵で暗号化してルート通知パケットのルート情報に追加する。宛先オニオンを復号して、次の転送先のノードを認識すると共に、復号後の宛先オニオンをルート通知パケットの新たな宛先オニオンとして設定する。そして、ルート探索要求中継部１１３は、ルート通知パケットを次のノードに対して転送する。
【０１２５】
ルート探索要求応答部１１４は、Ｐ２Ｐオニオンルート発見プロトコルにおけるルート探索要求への応答機能を実現する。具体的には、ルート探索要求応答部１１４は、他のノードから送られたルート探索パケットにおける探索対象ノードとして自分が指定されていたとき、そのノードに対するルート通知パケットを生成する。応答する際には、ルート探索要求応答部１１４は、固定鍵保持部１４２から固定公開鍵１４２ａを取得する。そして、ルート探索要求応答部１１４は、ルート探索パケット送信元の一時公開鍵を用いて、自分のノードＩＤと固定公開鍵１４２ａとを暗号化してルート通知パケットに含める。ルート通知パケットは、ルート探索パケットに対する応答として送信される。
【０１２６】
グレープルータ１２０は、匿名データ送信部１２１、匿名データ中継部１２２、および匿名データ受信部１２３を有している。
匿名データ送信部１２１は、匿名通信機能における匿名通信データパケットの送信機能を実現する。具体的には、匿名データ送信部１２１は、アプリケーション１３１等からの要求に応答して匿名通信のデータパケットを生成し、送信する。データパケットには、匿名ルートを示すグレープルートが含まれる。グレープルートは、匿名経路上の各ノードの公開鍵を用いて、各ノードの次の伝送先の情報を暗号化したものである。
【０１２７】
匿名データ中継部１２２は、匿名通信機能における匿名通信のデータパケットの中継機能を実現する。具体的には、匿名データ中継部１２２は、データパケット内の宛先オニオンを自分の秘密鍵で復号し、次の伝送先を確認する。そして、匿名データ中継部１２２は、次の伝送先へデータパケットを転送する。
【０１２８】
匿名データ受信部１２３は、匿名通信機能における匿名通信のデータパケットの受信機能を実現する。具体的には、匿名データ受信部１２３は、データパケットの送信先の匿名ＩＤが自分のＩＤであれば、自分宛のデータパケットであることを認識し、アプリケーション１３１にパケット内のデータ（ペイロード内のデータ）を渡す。なお、匿名データ受信部１２３は、受信した自分宛のパケットがルート通知パケットの場合、その内容から匿名ルートを認識し、匿名ルート情報保持部１４３に格納する。
【０１２９】
アプリケーション１３１は、ユーザの操作入力等に応じて、匿名通信を利用した各種処理を実行する。
会員証情報保持部１４１は、匿名通信網１０に参加するための所定の手続きを行ったユーザに渡される情報である。会員証情報を有しているノードのみが匿名通信網１０に参加可能となる。
【０１３０】
固定鍵保持部１４２は、予め用意された鍵情報を格納している。鍵情報は、固定公開鍵１４２ａと固定秘密鍵１４２ｂである。固定公開鍵１４２ａで暗号化した暗号データは、固定秘密鍵１４２ｂでのみ復号することができる。なお、固定公開鍵１４２ａと固定秘密鍵１４２ｂとは、会員証情報の一部として供給することもできる。
【０１３１】
匿名ルート情報保持部１４３は、探索された匿名ルート情報を格納している。
一時鍵生成部１５１は、匿名ルート探索要求部１１２等からの要求に応答して、一時鍵を生成する。一時鍵は、一時公開鍵と一時秘密鍵の組である。
【０１３２】
匿名ＩＤ生成部１５２は、匿名ルート探索要求部１１２等からの要求に応答して、匿名ＩＤを生成する。匿名ＩＤは、一連の匿名通信（匿名ルート探索とその匿名ルートによる匿名通信）毎に個別に設定する識別情報である。
【０１３３】
以上のような構成のノード１００によって、本実施の形態に係るセキュア通信路形成機能、匿名通信基盤接続認証機能、匿名経路発見機能、および匿名通信機能が実現される。なお、図６には、ノード１００が有する機能の構成要素を示したが、他のノード２００，３００，４１０，４２０，４３０，４４０，４５０も同様の機能を有している。以下、匿名通信基盤接続認証機能、匿名経路発見機能、および匿名通信機能を詳細に説明する。
【０１３４】
［匿名通信基盤接続認証機能］
まず、匿名通信基盤接続認証機能について説明する。
図７は、匿名通信基盤接続認証機能を示す図である。匿名通信基盤接続認証機能は、あるノード（図７の例では、ノード１００）が、匿名通信網１０に参加するために他のノード（図７の例では、ノード２００）へ接続するための機能である。なお、接続先となるノード２００を、ノード１００から見たときの第１接続ノードと呼ぶこととする。ここでは、ノード１００は、接続する第１接続ノードのＩＰアドレスやポート番号などを最初から分かっているものとする。たとえば、任意に接続可能なノード（第１接続ノードとなり得るノード）が予め公開されているものとする。
【０１３５】
匿名通信網１０で使用するＰ２Ｐオニオンルートなどの暗号方式にはＲＳＡ暗号を用いる。ＲＳＡ暗号の公開鍵とその証明書（公開鍵証明書）、秘密鍵などは既に各ノードが持っている状態を前提とする。この公開鍵証明書はこの匿名通信基盤の会員証として使用し、ノードがこの匿名通信基盤に参加するための認証に使用する。公開鍵証明書は、会員証情報保持部１４１に格納される。
【０１３６】
ここで、図７を参照して、ノード１００がノード２００を第１接続ノードとして匿名通信網１０に参加するときの匿名通信基盤接続認証機能の処理手順を説明する。このとき、匿名通信基盤接続認証機能は、ノード１００のルート探索プロキシ１１０内の匿名通信接続部１１１と、ノード２００のルート探索プロキシ２１０内の匿名通信接続部２１１との間で実行される。
【０１３７】
［第１の処理］ノード１００内の匿名通信接続部１１１は、第１接続ノードを決定する。ここで、第１接続ノードは、隣接するノード２００であり、複数の場合もある。第１接続ノードとして指定可能なノードのＩＰアドレス等は、会員証情報保持部１４１に予め格納しておくことができる。また、第１接続ノードのＩＰアドレス等を、ＧＵＩによりユーザが直接入力することもできる。
【０１３８】
［第２の処理］新規参加ノード（ノード１００）のルート探索プロキシ（ルート探索プロキシ１１０内の匿名通信接続部１１１）は第１接続ノード（ノード２００）へ接続を開始して、自分の固定公開鍵１４２ａと会員証１４１ａとを渡す。
【０１３９】
［第３の処理］接続された第１接続ノード（ノード２００）のルート探索プロキシ（ルート探索プロキシ２１０内の匿名通信接続部２１１）も自分の固定公開鍵２４２ａと会員証２４１ａを新規参加ノード（ノード１００）へ渡す。
【０１４０】
［第４の処理］新規参加ノード（ノード１００）および第１接続ノード（ノード２００）の双方で会員証の確認を行う。失効しているなど問題があれば通信を停止する。
［第５の処理］新規参加ノード（ノード１００）および第１接続ノード（ノード２００）で、互いに相手の固定公開鍵で暗号化したデータを交換する。そして、双方のノードが、受け取ったデータを復号して相手に返す。各ノード１００，２００は、相手方に送信したデータが正しく復号されて戻ってくれば匿名Ｐ２Ｐネットワーク基盤上サービス利用資格保有者と判断する。以後、ノード１００は、ノード２００を介して、匿名通信網１０に参加できる。すなわち、ノード１００が匿名通信基盤上のノードとなる。その結果、図３に示すような匿名通信網１０が形成される。
【０１４１】
［匿名経路発見機能］
次に、匿名経路発見機能について、ノード１００からノード３００に対してデータを送信する際の匿名経路探索例を用いて説明する。
【０１４２】
図８は、匿名経路発見機能を示す図である。匿名経路発見機能は、Ｐ２Ｐオニオンルート発見プロトコルを用いて、送信ノード（図８の例では、ノード１００）から受信ノード（図８の例では、ノード３００）までのルート情報を匿名的に収集し、収集したルート情報からＰ２Ｐオニオンルートを構築する機能である。ルート情報は受信ノードまでの経路を構成する各Peerの識別子と公開鍵からなる。Ｐ２Ｐオニオンルート発見プロトコルは以下の手順でＰ２Ｐオニオンルートを構築する。なお、匿名経路発見機能は、各ノード１００，２００，３００のルート探索プロキシ１１０，２１０，３１０とグレープルータ１２０，２２０，３２０によって実現される。特に送信ノード（ノード１００）ではルート探索プロキシ１１０の匿名ルート探索要求部１１２が処理を実行し、中継ノード（ノード２００）ではルート探索プロキシ２１０のルート探索要求中継部２１３が処理を実行し、受信ノード（ノード３００）では、ルート探索要求応答部３１４が処理を実行する。
【０１４３】
ルート探索の際には、送信ノード（ノード１００）からルート探索パケット２０がブロードキャスト送信され、そのルート探索パケット２０を受信した受信ノード（ノード３００）からルート通知パケット３０が返信される。
【０１４４】
図９は、ルート探索パケットのデータ構造例を示す図である。ルート探索パケット２０は、メッセージフラグ２１、宛先（Ｔｏ）２２、送信元（Ｆｒｏｍ）２３、宛先オニオン２４、戻りオニオン２５、および返信暗号化用一時鍵情報２６で構成される。
【０１４５】
メッセージフラグ２１は、パケットの種別を示している。ルート探索パケット２０の場合には、ルート探索ブロードキャスト送信用のパケットであることを示す情報が設定される。
【０１４６】
宛先２２には、ルート探索パケット２０の宛先が設定される。宛先は、予め公開された受信ノードの識別情報（公開ＩＤ）等で示される。
送信元２３には、送信ノードの匿名ＩＤが設定される。
【０１４７】
宛先オニオン２４は、宛先までのルートを示す情報であるが、ルート探索パケット２０では空欄となる。
戻りオニオン２５には、ルート探索パケット２０に対してルート通知パケット３０を返信する際の伝送経路が、多重に暗号化されて設定される。
【０１４８】
返信暗号化用一時鍵情報２６は、ルート通知パケット３０を返信する際に使用される送信ノードの一時公開鍵と暗号化された一時秘密鍵である。
図１０は、ルート通知パケットのデータ構造例を示す図である。ルート通知パケット３０は、メッセージフラグ３１、宛先（Ｔｏ）３２、送信元（Ｆｒｏｍ）３３、宛先オニオン３４、戻りオニオン３５、ルート情報３６、および返信暗号化用一時鍵情報３７で構成される。
【０１４９】
メッセージフラグ３１は、パケットの種別を示している。ルート通知パケット３０の場合には、ルート探索返信用のパケットであることを示す情報が設定される。
宛先３２には、ルート通知パケット３０の宛先が設定される。宛先は、ルート探索パケット２０の送信元２３に設定されている送信ノードの匿名ＩＤである。
【０１５０】
送信元３３には、受信ノードの公開されたＩＤ（公開ＩＤ）が設定される。
宛先オニオン３４は、宛先までのルートを示す情報である。これは、受信ノードにおいてルート探索パケット２０の戻りオニオン２５を転記したものである。ただし、宛先オニオン３４は、パケットが中継される毎に過去の伝送経路を示す情報が削除される。
【０１５１】
戻りオニオン３５は、ルート通知パケット３０においては空欄となる。
ルート情報３６は、匿名通信の伝送ルートを示す情報である。ルート情報には、伝送ルート上の各ノードのノードＩＤと固定公開鍵とが、送信ノードの固定公開鍵で暗号化されて設定されている。また、ルート情報３６には、ルート探索パケット２０の返信暗号化用一時鍵情報２６も含まれている。
【０１５２】
返信暗号化用一時鍵情報３７は、ルート探索パケット２０の返信暗号化用一時鍵情報２６の内容がそのまま設定される。
図１１は、匿名経路発見機能の処理手順を示すシーケンス図である。以下、図１１に示す処理をステップ番号に沿って説明する。
【０１５３】
［ステップＳ２１］送信ノード（ノード１００）の匿名ルート探索要求部１１２は、アプリケーション１３１からメッセージの送信依頼を受け取る。なお、ノード１００のユーザは、受信ノードであるノード３００のノードＩＤを予め知っているものとする。
【０１５４】
［ステップＳ２２］匿名ルート探索要求部１１２は、ルート探索パケット２０を生成する。ルート探索パケット２０には、受信ノードの公開ＩＤ、送信ノードの匿名ＩＤ、送信ノードの一時鍵（一時公開鍵と一時秘密鍵）等が含まれる。受信ノードの公開ＩＤは、ユーザからの操作入力等に基づいて、アプリケーション１３１が取得する。送信ノードの匿名ＩＤは、匿名ＩＤ生成部１５２から取得する。送信ノードのノードＩＤは、ノード１００の一般の通信機能（通信プロトコル）から取得する。送信ノードの一時鍵は、一時鍵生成部１５１から取得する。
【０１５５】
ルート探索パケット２０の戻りオニオン２５は、送信ノードのノードＩＤと固定公開鍵とから生成される。具体的には、匿名ルート探索要求部１１２は、固定鍵保持部１４２から固定公開鍵１４２ａを取得する。次に、匿名ルート探索要求部１１２は、送信ノードのノードＩＤを、固定公開鍵１４２ａで暗号化する。そして、匿名ルート探索要求部１１２は、暗号化された送信ノードのノードＩＤと、暗号化されていない送信ノードのノードＩＤとの組を、戻りオニオン２５とする。この際、暗号化されていない送信ノードのノードＩＤには、戻りフラグ（本実施の形態では「^」の記号）が付加される。戻りフラグは、送信元に戻るためのルートであることを示している。
【０１５６】
返信暗号化用一時鍵情報２６は、送信ノードの一時鍵と固定公開鍵１４２ａとから生成される。具体的には、匿名ルート探索要求部１１２は、送信ノードの一時秘密鍵を固定公開鍵１４２ａで暗号化する。そして、匿名ルート探索要求部１１２は、暗号化された一時秘密鍵と、暗号化されていない一時公開鍵との組を、返信暗号化用一時鍵情報２６とする。
【０１５７】
［ステップＳ２３］匿名ルート探索要求部１１２は、ルート探索パケットをブロードキャストで送信する。本実施の形態では、ノード１００に接続されたノードは、ノード２００のみであるため、一段目としては、ノード２００のみに転送される。
【０１５８】
［ステップＳ２４］中継ノード（ノード２００）のルート探索要求中継部２１３は、ルート探索パケット２０を受け取ると、宛先２２に設定されている受信ノードの公開ＩＤを確認する。自分宛のルート探索パケット２０でなければ、パケット中継のためにステップＳ２５に処理を進める。なお、各ノードは、自身の公開ＩＤについては、予めメモリ等（たとえば、会員証情報保持部）に保持している。
【０１５９】
［ステップＳ２５］ルート探索要求中継部２１３は、戻りオニオンを更新する。具体的には、ルート探索要求中継部２１３は、受信したルート探索パケット２０内の戻りオニオン２５に中継ノードの固定公開鍵で暗号化する。そして、ルート探索要求中継部２１３は、暗号化された情報に中継ノードのノードＩＤ（戻りフラグ付き）を付加して、新たな戻りオニオン２５とする。
【０１６０】
［ステップＳ２６］ルート探索要求中継部２１３は、ルート探索パケット２０をブロードキャストで送信する。本実施の形態では、ノード２００に対して、送信ノード（ノード１００）以外に４台のノード４１０，４２０，４４０，４５０が接続されているため、それら４台のノード４１０，４２０，４４０，４５０に対して、ルート探索パケット２０が送信される。
【０１６１】
以後、各ノード４１０，４２０，４４０，４５０において、ルート探索パケット２０が中継され、最終的に受信ノード（ノード３００）に到達する。ルート探索パケット２０を受け取った受信ノード（ノード３００）では、以下の処理が行われる。
【０１６２】
［ステップＳ２７］ルート探索要求応答部３１４は、ルート探索パケット２０を受け取ると、宛先２２を確認する。自分宛のルート探索パケット２０であれば、応答するためにステップＳ２８に処理を進める。
【０１６３】
なお、各ノードにおけるルート探索パケット２０の宛先２２の確認機能は、各ノードのルート探索要求中継部とルート探索要求応答部とが共用する機能である。すなわち、実際には、ルート探索パケット２０受信時に宛先２２の確認機能が動作し、自分宛であればその旨の確認結果がルート探索要求応答部に伝えられ、自分宛でなければその旨の確認結果がルート探索要求中継部に伝えられる。
【０１６４】
［ステップＳ２８］ルート探索要求応答部３１４は、ルート通知パケット３０を生成する。ルート通知パケット３０には、ルート探索パケット２０に含まれる情報以外に、受信ノードのノードＩＤと固定公開鍵とが含まれる。
【０１６５】
具体的には、ルート探索要求応答部３１４は、ルート探索パケット２０の送信元２３の情報をルート通知パケット３０の宛先３２に設定する。ルート探索要求応答部３１４は、ルート探索パケット２０の宛先２２の情報を、ルート通知パケット３０の送信元３３に設定する。ルート探索要求応答部３１４は、ルート探索パケット２０の戻りオニオン２５の情報を、ルート通知パケット３０の宛先オニオン３４に設定する。ルート探索要求応答部３１４は、ルート探索パケット２０の返信暗号化用一時鍵情報２６内の送信ノードの一時公開鍵を用いて、受信ノードのノードＩＤと固定公開鍵との組を暗号化し、ルート情報３６に設定する。そして、ルート探索要求応答部３１４は、ルート探索パケット２０の返信暗号化用一時鍵情報２６の情報を、ルート通知パケット３０の返信暗号化用一時鍵情報３７に設定する。
【０１６６】
［ステップＳ２９］ルート探索要求応答部３１４は、ルート通知パケット３０の送信先をルート探索パケット２０の戻りオニオン２５に基づいて判断し、その送信先へルート通知パケット３０を送信する。具体的には、戻りオニオン２５には、暗号化されていないノードＩＤ（隣のノードのノードＩＤ）と、暗号化された情報（隣のノードに到達するまでの経路が暗号化されたもの）が含まれている。そこで、ルート探索要求応答部３１４は、暗号化されていないノードＩＤのノードに対して、ルート通知パケット３０を送信する。
【０１６７】
ルート通知パケット３０は、各ノードにおいて中継される。ノード２００における中継処理を以下に示す。
［ステップＳ３０］中継ノード（ノード２００）のルート探索プロキシ２１０内のルート探索要求中継部２１３は、宛先を確認する。なお、各ノードは、自身が発行した匿名ＩＤのリストを記憶しており、その匿名ＩＤのリストとパケットの宛先とを比較することで、そのパケットが自分宛か否かを判断することができる。他のノード宛のルート通知パケット３０の場合、ルート探索要求中継部２１３は、処理をステップＳ３１に進める。
【０１６８】
［ステップＳ３１］ルート探索要求中継部２１３は、ルート通知パケット３０の宛先オニオン３４を更新する。具体的には、ルート探索要求中継部２１３は、宛先オニオン３４に付加されている自分のノードＩＤを削除し、暗号化されている情報を、固定秘密鍵を用いて復号する。そして、ルート探索要求中継部２１３は、復号した情報を新たな宛先オニオン３４とする。
【０１６９】
［ステップＳ３２］ルート探索要求中継部２１３は、ルート通知パケット３０のルート情報３６を更新する。具体的には、ルート探索要求中継部２１３は、自分のノードＩＤと固定公開鍵とを送信ノードの一時公開鍵で暗号化し、ルート情報３６にスタックする（本実施の形態では、それまでのルート情報の後に、暗号化した情報を追加格納する）。これにより、ルート情報３６には、伝送経路上の各ノードに関する情報（ノードＩＤと固定公開鍵）が経路に沿った順番で並べられていく。
【０１７０】
［ステップＳ３３］ルート探索要求中継部２１３は、ルート通知パケット３０の送信先を宛先オニオン３４に基づいて判断し、その送信先へルート通知パケット３０を送信する。具体的には、宛先オニオン３４には、暗号化されていないノードＩＤ（隣のノードのノードＩＤ）と、暗号化された情報（隣のノードに到達するまでの経路が暗号化されたもの）が含まれている。そこで、ルート探索要求中継部２１３は、暗号化されていないノードＩＤのノードに対して、ルート通知パケット３０を送信する。
【０１７１】
これにより、ルート通知パケット３０が送信ノードであるノード１００に渡される。ノード１００では、以下の処理が行われる。
［ステップＳ３４］送信ノードのルート探索プロキシ１１０の匿名ルート探索要求部１１２は、宛先を確認する。自分宛のルート通知パケット３０の場合、匿名ルート探索要求部１１２は、処理をステップＳ３５に進める。
【０１７２】
なお、各ノードにおけるルート通知パケット３０の宛先３２の確認機能は、匿名データ中継部と匿名データ受信部とが共用する機能である。すなわち、実際には、ルート通知パケット３０受信時に宛先３２の確認機能が動作し、自分宛であればその旨の確認結果が匿名データ受信部に伝えられ、自分宛でなければその旨の確認結果が匿名データ中継部に伝えられる。
【０１７３】
［ステップＳ３５］匿名ルート探索要求部１１２は、ルート通知パケット３０内のルート情報３６から受信ノードまでの匿名ルート情報を取得し、匿名ルート情報保持部１４３に格納する。具体的には、匿名ルート探索要求部１１２は、返信暗号化用一時鍵情報３７に含まれる暗号化された情報（一時秘密鍵を固定公開鍵１４２ａで暗号化したもの）を、固定秘密鍵１４２ｂを用いて復号する。これにより、一時秘密鍵が取得できる。なお、固定秘密鍵１４２ｂは、固定鍵保持部１４２から取得できる。
【０１７４】
次に、匿名ルート探索要求部１１２は、取得した一時秘密鍵を用いて、ルート情報３６に含まれる各情報を復号する。これにより、受信ノードまでの経路上のノードのノードＩＤのリスト（経路に沿った順番に並べられている）が得られる。匿名ルート探索要求部１１２は、取得したリストを、匿名ルート情報として匿名ルート情報保持部１４３に格納する。
【０１７５】
以上のようにして、匿名経路の探索が完了する。
図１２は、ルート探索パケットの伝送経路を示す図である。図１２には、送信ノードであるノード１００から出力されたルート探索パケット２０ａが内容の変更を受けながら中継され、受信ノードであるノード３００に到達するまでの様子を示している。
【０１７６】
ノード１００から出力されたルート探索パケット２０ａを受け取ったノード２００は、戻りオニオンに自分の情報を付加したルート探索パケット２０ｂ，２０ｅを生成し、ノード４１０やノード４２０等に送信する。
【０１７７】
ノード４１０は、戻りオニオンに自分の情報を付加したルート探索パケット２０ｃを生成し、ノード４３０に対して送信する。ノード４３０は、戻りオニオンに自分の情報を付加したルート探索パケット２０ｄを生成し、ノード３００に対して送信する。
【０１７８】
同様に、ノード４２０は、戻りオニオンに自分の情報を付加したルート探索パケット２０ｆを生成し、ノード４３０に対して送信する。ノード４３０は、戻りオニオンに自分の情報を付加したルート探索パケット２０ｇを生成し、ノード３００に対して送信する。
【０１７９】
このように、受信ノードであるノード３００には、２つのルート探索パケット２０ｄ，２０ｇが到達する。すなわち、受信ノードには、様々な経路を通ってルート探索パケットが届く。そのため、ルート通知パケットも複数個返信される。
【０１８０】
ここで、ノード４２０を経由して伝送されるルート探索パケットの内部情報について詳細に説明する。
図１３は、ルート探索パケットの状態遷移状況を示す図である。なお、以下の説明において、鍵の記号の右に括弧で他の情報を示した場合、括弧内の情報をその鍵で暗号化した情報を示す。
【０１８１】
ノード１００からノード２００に渡されるルート探索パケット２０ａには、メッセージフラグ"ルート探索ブロードキャスト"、宛先（Ｔｏ）"ノード「Ｘ」の公開ＩＤ"、送信元（Ｆｒｏｍ）"ノード「Ａ」の匿名ＩＤ＃１"、宛先オニオン（無し）、戻りオニオン"^Aid+APk（Aid）"、返信暗号化用一時鍵情報"ATPk,APk（ATSk）"が登録されている。ここで、戻りオニオンにおける「＾」は戻りフラグである。Aidは、ノード「Ａ」のノードＩＤである。APkは、ノード「Ａ」の固定公開鍵である。また、返信暗号化用一時鍵情報において、ATPkはノード「Ａ」の一時公開鍵を示し、ATSkはノード「Ａ」の一時秘密鍵を示す。
【０１８２】
ノード２００からノード４２０に渡されるルート探索パケット２０ｅでは、戻りオニオンが"^Bid+BPk｛^Aid+APk（Aid）｝"に変更されている。ここで、戻りオニオンにおけるBidはノード「Ｂ」のノードＩＤであり、BPkはノード「Ｂ」の固定公開鍵である。このように、ノード「Ｂ」の固定公開鍵でノード「Ａ」の情報を暗号化することで、送信元が隠される。
【０１８３】
ノード４２０からノード４３０に渡されるルート探索パケット２０ｆでは、戻りオニオンが"^Did+DPk｛^Bid+BPk｛^Aid+APk（Aid）｝｝"に変更されている。ここで、戻りオニオンにおけるDidはノード「Ｄ」のノードＩＤであり、DPkはノード「Ｄ」の固定公開鍵である。
【０１８４】
ノード４３０からノード３００に渡されるルート探索パケット２０ｇでは、戻りオニオンが"^Eid+EPk｛^Did+DPk｛^Bid+BPk｛^Aid+APk（Aid）｝｝｝"に変更されている。ここで、戻りオニオンにおけるEidはノード「Ｅ」のノードＩＤであり、EPkはノード「Ｅ」の固定公開鍵である。
【０１８５】
ルート探索パケット２０ｇを受け取ったノード３００は、宛先によって、自分宛であることを認識できる。しかし、どのような経路で送られてきたのかは、ノード名「Ｅ」のノード４３０から送られてきたことしか認識できない。
【０１８６】
次に、ノード３００から送信されるルート通知パケットの伝送経路について説明する。
図１４は、ルート通知パケットの伝送経路を示す図である。図１４には、受信ノードであるノード３００から出力された２つのルート通知パケット３０ａ，３０ｅが内容の変更を受けながら中継され、送信ノードであるノード１００に到達するまでの様子を示している。
【０１８７】
ノード３００から出力されたルート通知パケット３０ａを受け取ったノード４３０は、戻りオニオンから自分の情報を削除して、ルート情報に自分の情報を付加したルート通知パケット３０ｂを生成し、ノード４１０に送信する。ノード４１０は、戻りオニオンから自分の情報を削除して、ルート情報に自分の情報を付加したルート通知パケット３０ｃを生成し、ノード２００に送信する。ノード２００は、戻りオニオンから自分の情報を削除して、ルート情報に自分の情報を付加したルート通知パケット３０ｄを生成し、ノード１００に送信する。
【０１８８】
また、ノード３００から出力されたルート通知パケット３０ｅを受け取ったノード４３０は、戻りオニオンから自分の情報を削除して、ルート情報に自分の情報を付加したルート通知パケット３０ｆを生成し、ノード４２０に送信する。ノード４２０は、戻りオニオンから自分の情報を削除して、ルート情報に自分の情報を付加したルート通知パケット３０ｇを生成し、ノード２００に送信する。ノード２００は、戻りオニオンから自分の情報を削除して、ルート情報に自分の情報を付加したルート通知パケット３０ｈを生成し、ノード１００に送信する。
【０１８９】
このように、送信ノードであるノード１００には、２つのルート通知パケット３０ｄ，３０ｈが到達する。
ここで、ノード４２０を経由して伝送されるルート探索パケットの内部情報について詳細に説明する。
【０１９０】
図１５は、ルート通知パケットの状態遷移状況を示す図である。
ノード３００からノード４３０に渡されるルート通知パケット３０ｅには、メッセージフラグ"ルート探索返信"、宛先（Ｔｏ）"ノード「Ａ」の匿名ＩＤ＃１"、送信元（Ｆｒｏｍ）"ノード「Ｘ」の公開ＩＤ"、宛先オニオン"^Eid+EPk｛^Did+DPk｛^Bid+BPk｛^Aid+APk（Aid）｝｝｝"、戻りオニオン（無し）、ルート情報"ATPk（Xid,XPk）"、返信暗号化用一時鍵情報"ATPk,APk（ATSk）"が登録されている。ここで、ルート情報におけるXidはノード「Ｘ」のノードＩＤであり、XPkはノード「Ｘ」の固定公開鍵である。
【０１９１】
ノード４３０からノード４２０に渡されるルート通知パケット３０ｆでは、宛先オニオンが"^Did+DPk｛^Bid+BPk｛^Aid+APk（Aid）｝｝"に変更されている。このように、ノード名「Ｅ」のノード４３０では、自分のノードＩＤを宛先オニオンから削除し、残りの情報を自分の固定秘密鍵で復号している。これにより、ルート通知パケットの伝送経路が秘匿されると共に、次の転送先（Did）のみが認識可能となる。また、ルート情報には、ATPk（Eid,EPk）がスタックされている。
【０１９２】
ノード４２０からノード２００に渡されるルート通知パケット３０ｇでは、宛先オニオンが"^Bid+BPk｛^Aid+APk（Aid）｝"に変更されている。また、ルート情報には、ATPk（Did,DPk）がスタックされている。
【０１９３】
ノード２００からノード１００に渡されるルート通知パケット３０ｈでは、宛先オニオンが"^Aid+APk（Aid）"に変更されている。また、ルート情報には、ATPk（Bid,BPk）がスタックされている。
【０１９４】
ルート通知パケット３０ｈを受け取ったノード１００は、宛先によって、自分宛であることを認識できる。また、ルート情報を、一時秘密鍵で復号すれば匿名通信の伝送経路（匿名ルート）を認識できる。その結果、匿名ルート情報保持部１４３には、１以上の匿名ルート情報が格納される。
【０１９５】
図１６は、匿名ルート情報保持部内のデータ構造例を示す図である。図１６には、図１４に示した２つの経路で返信されたルート通知パケット３０ｄ，３０ｈに基づいて格納された匿名ルート情報１４３ａ，１４３ｂを示している。
【０１９６】
匿名ルート情報１４３ａには、ルート情報として「Bid→Cid→Eid→Xid」が設定されている。これは、左側のノードＩＤで示されるノード程、送信ノードであるノードに近いことを示している。すなわち、ルート情報で示されるノードＩＤの配列の左から右に向かってパケットを転送することで、ノードＩＤ「Xid」のノード３００にパケットが到達する。
【０１９７】
また、匿名ルート情報１４３ａには、ルート上の各ノードの固定公開鍵「BPk,CPk,EPk,XPk」が登録されている。この固定公開鍵を利用することで、オニオンルーティングを行うためのパケットの暗号化が可能となる。
【０１９８】
匿名ルート情報１４３ｂには、ルート情報として「Bid→Did→Eid→Xid」と、ルート上の各ノードの固定公開鍵「BPk,DPk,EPk,XPk」とが登録されている。
［匿名通信機能］
次に、取得した匿名ルート経由の匿名通信機能について説明する。
【０１９９】
図１７は、匿名通信機能を示す概念図である。図１７には、ノード１００からノード２００を経由してノード３００宛のデータパケット４０を送信する場合の例を示している。このとき、送信ノードであるノード１００では匿名データ送信部１２１が処理を実行し、中継ノードであるノード２００では匿名データ中継部２２２が処理を実行し、受信ノードであるノード３００では匿名データ受信部３２３が処理を実行する。
【０２００】
図１８は、データパケットのデータ構造例を示す図である。データパケット４０は、メッセージフラグ４１、宛先（Ｔｏ）４２、送信元（Ｆｒｏｍ）４３、ブロック指定４４、グレープルート４５、およびペイロード４６で構成される。
【０２０１】
メッセージフラグ４１は、パケットの種別を示している。データパケット４０の場合には、データ通信用のパケット（通常のパケット）であることを示す情報が設定される。
宛先４２には、データパケット４０の宛先が設定される。宛先は、受信ノードの公開ＩＤである。
【０２０２】
送信元４３には、送信ノードの匿名ＩＤが設定される。この匿名ＩＤは、匿名ルート探索時とは別のものが使用される。
ブロック指定４４は、次のノードが復号すべき暗号ブロックの位置を示す情報である。これは、ブロック指定４４の内容は、データパケット４０が中継される度に変更される。
【０２０３】
グレープルート４５は、暗号ブロックの集合である。具体的には、グレープルート４５には、検出された複数の匿名ルート情報に含まれる各ノードに対応する暗号ブロックが含まれる。暗号ブロックには、対応するノードが行うべき処理（パケットの中継や、パケットの内のデータの取得）が定義されている。また、暗号ブロックには、パケットを中継する際の次のノードに対応する暗号ブロックの位置も含まれている。
【０２０４】
ペイロード４６は、転送すべきメッセージを受信ノードの固定公開鍵で暗号化したデータを含む実データである。
次に、匿名通信機能の処理手順について説明する。
【０２０５】
図１９は、匿名通信機能の処理手順を示すシーケンス図である。以下、図１９に示す処理をステップ番号に沿って説明する。
［ステップＳ４１］送信ノードであるノード１００のグレープルータ１２０内の匿名データ送信部１２１は、アプリケーション１３１からメッセージ送信の指示を受け付ける。
【０２０６】
［ステップＳ４２］匿名データ送信部１２１は、匿名ルート情報保持部１４３の中から送信相手のノードまでの匿名ルートを選択する。この際、多数の匿名ルートがある場合、その中から所定の数の匿名ルートを選択する。たとえば、中継するノード数が少ない匿名ルートを優先的に選択する。
【０２０７】
［ステップＳ４３］匿名データ送信部１２１は、データパケット４０を生成する。データパケット４０には、受信ノードの公開ＩＤ、自分の匿名ＩＤ、匿名ルート情報、メッセージデータ、自分の一時鍵（一時公開鍵と一時秘密鍵）等の情報が含められる。
【０２０８】
具体的には、匿名データ送信部１２１は、メッセージフラグ４１に、データパケットであることを示す情報を設定する。宛先４２には、ノード３００の公開ＩＤが設定される。送信元４３には、匿名ＩＤが設定される。設定される匿名ＩＤは、匿名ＩＤ生成部１５２によって新たに生成されたものである。
【０２０９】
ブロック指定４４には、選択した匿名ルート上で自分に隣接するノードに対応する暗号ブロックの位置が設定される。
グレープルート４５には、選択した匿名ルート上の各ノードに対応する暗号ブロックが設定される。
【０２１０】
ペイロード４６には、アプリケーション１３１から渡されたメッセージデータに加え、所定の情報を受信ノードの固定公開鍵で暗号化した情報が設定される。暗号化対象の情報は、メッセージヘッダ、自分の一時公開鍵、および自分の一時秘密鍵を固定公開鍵で暗号化した情報である。なお、このときの一時公開鍵と一時秘密鍵とは、一時鍵生成部１５１によって新たに生成されたものである。
【０２１１】
［ステップＳ４４］匿名データ送信部１２１は、データパケットを匿名ルートに従って送信する。この例では、ノード２００に送信される。
［ステップＳ４５］ノード２００のグレープルータ２２０内の匿名データ中継部２２２は、データパケット４０の受け取り宛先４２を確認する。他のノード宛であれば、以下の処理を行う。
【０２１２】
［ステップＳ４６］匿名データ中継部２２２は、次のルートを選択する。具体的には、匿名データ中継部２２２は、ブロック指定４４を参照して、復号すべき暗号ブロックを決定する。そして、匿名データ中継部２２２は、決定した暗号ブロックを自分の固定公開鍵で復号する。その結果、次に転送すべきノードのノードＩＤと、そのノードに対応する暗号ブロックの位置を取得することができる。
【０２１３】
［ステップＳ４７］匿名データ中継部２２２は、ブロック指定を更新する。すなわち、匿名データ中継部２２２は、次に転送すべきノードに対応する暗号ブロックの位置を、ブロック指定に設定する。
【０２１４】
［ステップＳ４８］匿名データ中継部２２２は、データパケット４０を送信する。データパケット４０の送信先は、ステップＳ４６における復号処理で取得したノードＩＤで示される隣接ノードである。
【０２１５】
［ステップＳ４９］匿名データ中継部２２２は、送信したデータパケット４０が次のノードに正しく伝送されたかどうかを判断する。正常に伝送されていれば、処理を終了する。伝送に失敗したときは、ステップＳ５０に処理を進める。なお、データパケット４０送信前に、送信先のノードへの通信が途絶えていることが分かっている場合、ステップＳ４８の送信処理を行わずに処理がステップＳ５０に進められる。
【０２１６】
［ステップＳ５０］匿名データ中継部２２２は、別の匿名ルート情報があるか否かを判断する。送信に失敗したデータパケット４０の匿名ブロックに、別の匿名ルート情報があれば、処理がステップＳ５１に進められる。別の匿名ルート情報がない場合、処理がステップＳ５３に進められる。
【０２１７】
［ステップＳ５１］匿名データ中継部２２２は、データパケット４０のブロック指定４４を更新する。具体的には、匿名データ中継部２２２は、別の匿名ルート上の隣接ノードに対応する匿名ブロックの位置を、ブロック指定４４に設定する。
【０２１８】
［ステップＳ５２］匿名データ中継部２２２は、データパケット４０を送信する。このときのデータパケット４０の送信先は、別の匿名ルート上の隣接ノードである。その後、処理がステップＳ４９に進められる。
【０２１９】
［ステップＳ５３］匿名データ中継部２２２は、別の匿名ルート情報が無い場合、データパケットをマルチキャストで、そのとき認識している全ての接続先に送信する。その後、処理が終了する。
【０２２０】
［ステップＳ５４］データパケット４０が受信ノードであるノード３００に到達すると、ノード３００のグレープルータ３２０内の匿名データ受信部３２３は宛先を確認する。自分宛のデータパケット４０であれば、処理がステップＳ５５に進められる。
【０２２１】
［ステップＳ５５］匿名データ受信部３２３は、自分の固定秘密鍵でペイロード４６を復号する。
［ステップＳ５６］匿名データ受信部３２３は、復号されたメッセージヘッダ、送信ノードの鍵情報（一時公開鍵と暗号化された一時秘密鍵）、およびメッセージをアプリケーションに渡す。
【０２２２】
このようにして、データパケット４０が受信ノードに送信される。受信ノードから返信手順は、ルート通知パケット３０の送信手順と同様である。
図２０は、データパケットの伝送経路を示す図である。図１９に示すように、ノード１００から出力されたデータパケット４０ａは、ルート探索時に発見された匿名ルートの伝送経路が存続していれば、中継ノードである複数のノード２００，４１０，４３０で内容の変更を受けながら、受信ノードであるノード３００に渡される。
【０２２３】
データパケット４０ａを受け取ったノード２００は、ブロック指定を更新したデータパケット４０ｂをノード４１０に送信する。データパケット４０ｂを受け取ったノード４１０は、ブロック指定を更新したデータパケット４０ｃをノード４３０に送信する。データパケット４０ｃを受け取ったノード４３０は、ブロック指定を更新したデータパケット４０ｄをノード３００に送信する。
【０２２４】
ここで、受信ノードであるノード３００は、ダミーノードに対してダミーのデータパケット４０ｅを送信することができる。このデータパケット４０ｅを送信することで、データ伝送がノード３００で途切れずに済み、ノード３００が受信ノードであることを隠すことができる。
【０２２５】
以下、図２１，図２２を参照して、データパケットの状態遷移状況について説明する。
図２１は、データパケットの初期状態を示す図である。ノード１００から出力されるデータパケット４０ａは、メッセージフラグ"通常"、宛先（Ｔｏ）"ノード「Ｘ」の公開ＩＤ"、送信元（Ｆｒｏｍ）"ノード「Ａ」の匿名ＩＤ＃２"、ブロック指定"Bid+Bが復号するブロック位置"が設定されている。
【０２２６】
グレープルートには、複数の暗号ブロックが設定されている。たとえば、ノード「Ａ」のノード１００に対応する暗号ブロック"APk｛Aid,ダミーパケットを投げるノードＩＤ＋そのノードが復号するブロック位置,・・・｝"や、ノード「Ｂ」のノード２００に対応する暗号ブロック"BPk｛^Aid+Aが復号するブロック位置，Cid+Cが復号するブロック位置，Did+Dが復号するブロック位置｝"が設定されている。オニオンルーティングの場合と同様に、戻りフラグ「^」によって戻りルートが示されている。したがって、返信のパケットを中継ノードが受け取った場合、戻りルートに従って、パケットを転送する。これにより、送信ノードが作成したグレープルートによって、データの送信とデータの返信が可能となる。
【０２２７】
また、本実施の形態では、グレープルート内にダミーノードに対応する暗号ブロック"ダミーノードPk｛ダミー情報,ダミーノードＩＤ，ダミーパケットを投げるノードＩＤ+そのノードが復号するブロック位置,・・・｝"も設けられている。
【０２２８】
ペイロードには、"XPk｛メッセージヘッダ、ATPk,APk（ATSk）、メッセージデータ｝"が設定されている。
図２２は、データパケットの状態遷移状況を示す図である。ノード２００からノード４１０に渡されるデータパケット４０ｂでは、ブロック指定が"Did+Dが復号するブロック位置"に変更されている。
【０２２９】
ノード４１０からノード４３０に渡されるデータパケット４０ｃでは、ブロック指定が"Eid+Eが復号するブロック位置"に変更されている。
ノード４３０からノード３００に渡されるデータパケット４０ｄでは、ブロック指定が"Xid+Xが復号するブロック位置"に変更されている。
【０２３０】
ノード３００からダミーノードに渡されるデータパケット４０ｅでは、ブロック指定が"ダミーノードＩＤ+ダミーノードが復号するブロック位置"に変更されている。
このように、中継される毎にブロック指定が変更されることで、各中継ノードや受信ノードに対して、匿名通信における転送先の情報等を通知することができる。
【０２３１】
ここで、ノード４１０からノード４３０へのデータパケット４０ｃの送信に失敗した場合を考える。そのとき、ノード４１０では、バックトラック処理が行われる。
図２３は、バックトラック処理におけるデータパケットの伝送経路を示す図である。ノード４１０においてデータパケット４０ｃの送信に失敗すると、ノード４１０からノード２００に対してデータパケット４０ｅが送信される。
【０２３２】
ノード２００は、別ルートであるノード４２０に対してデータパケット４０ｆを送信する。ノード４２０はノード４３０に対してデータパケット４０ｇを送信する。ノード４３０は、ノード３００に対してデータパケット４０ｈを送信する。
【０２３３】
さらに、ノード４２０からノード４３０へのデータパケット４０ｇの送信に失敗したとき、ノード４２０では、他の匿名ルートの有無を判断する。他の匿名ルートがない場合、ノード４２０は、マルチキャスト送信が必要と判断する。
【０２３４】
図２４は、マルチキャストにおけるデータパケットの伝送経路を示す図である。ノード４３０においてデータパケット４０ｇの送信に失敗すると、ノード４２０からそのとき接続されている他のノード４６０（ノード名「Ｆ」）に対してデータパケット４０ｉが送信される。ノード４６０からノード３００までの経路が存在していれば、データパケットがノード３００に伝送される。この場合でも、送信ノードや受信ノードの匿名性は保たれる。
【０２３５】
以上のようにして、データパケットが受信ノードに渡される。受信ノードでは、グレープルートの戻り方向へ向けてパケットを送信すれば、応答パケットを送信ノードに対して送信することができる。たとえば、メッセージフラグにおいて、応答のデータパケットであることを指定することができる。中継ノードでは、応答のデータパケットを受け取った場合、戻り方向の隣接ノードへパケットを転送する。これにより、データ通信パケットを受信した受信ノードから送信ノードへの応答を、匿名性を保持したまま行うことができる。
【０２３６】
［匿名掲示板への適用例］
上記のような匿名通信網を電子掲示板に適用すれば、不特定多数のユーザ間の匿名の情報交換を安全に行うことができる。
【０２３７】
図２５は、匿名掲示板システムに適用した匿名通信網の構成例を示す図である。図２４の例では、Ｐ２Ｐネットワークで構成される匿名通信網１０内のノード３００にデータベース（ＤＢ）３６０が接続され、掲示板システムが構築されている。この掲示板システムは、一般に公開された公開ＤＢである。この場合、ノード３００の公開ＩＤは、雑誌やインターネットのウェブページ等で公開されているものとする。
【０２３８】
このように、匿名掲示板機能では、匿名通信網１０上のノード３００に匿名掲示板（公開ＤＢ）を実装し、他のノードから、匿名掲示板システム（公開ＤＢ）に投稿された情報を利用する。
【０２３９】
掲示板システム（公開ＤＢ）を利用するノードは、主に以下の機能を実現する。
１．匿名掲示板システム（公開ＤＢ）に投稿できる。
２．匿名掲示板システム（公開ＤＢ）の投稿データを検索できる。
３．匿名掲示板システム（公開ＤＢ）に投稿された情報に返信できる。
【０２４０】
匿名掲示板システム（公開ＤＢ）は、匿名通信網１０上の１つのノード３００上で動作するアプリケーションとして実装される。各ノードには、この掲示板（公開ＤＢ）ノード（ノード３００）に上記３つの機能を行うためのメッセージを匿名通信網１０経由で通知するための機能が実装される。掲示板（公開ＤＢ）ノード（ノード３００）には、匿名通信網１０経由で通知されたメッセージに応答した投稿データの格納、投稿データの検索、検索結果の返信機能が実現される。
【０２４１】
以下に匿名掲示板システムが実現する機能を示す。
１．投稿された書き込みが誰によってなされたか探知できない（投稿者の秘匿機能）。
２．投稿された情報を指定時間経過すると自動的に消去する。
３．検索が誰によってなされたか探知できない（検索者の秘匿機能）。
４．検索したときに探している投稿データがなかった場合でも目的の投稿データが後から投稿された場合に通知されるよう予約可能とする。
５．検索予約は指定時間経過すると自動的にキャンセルされる。
【０２４２】
なお、ＤＢ３６０としては、たとえば、ＸＳＲ（XML Service Registry）を利用して実現できる。ＸＳＲは株式会社富士通プライムソフトテクノロジが所有するオブジェクトデータベース技術である。本ソフトの機能は以下の通りである。
【０２４３】
・ＵＰ機能：オブジェクトを保存する機能。
オブジェクトの保存期間に有効期限が設定できる。有効期限が切れたオブジェクトはＸＳＲから自動的に消去される。
【０２４４】
・LOOKUP機能：ユーザが探しているオブジェクトを検索できる。
検索を予約する機能を有する。
・RESPONSE機能：予約された検索にマッチする情報があればユーザに非同期に通知する。
【０２４５】
また、メッセージ間のアンリンカビリティを高めるために、Peerノードの匿名識別子、公開鍵の使い捨て管理を以下の様に行う。
１．秘密鍵とランダムな数値を使用して匿名識別子を生成する。その秘密鍵をもつ自分だけがその匿名識別子に対して自分の識別子である確認ができる。
２．一時公開鍵・一時秘密鍵ペアを生成する。その一時秘密鍵を会員証の公開鍵で暗号化し、一時公開鍵と一緒に返信情報としてメッセージに付加する。返信者はその一時公開鍵で返信メッセージを暗号化し返信する。返信された暗号化データは会員証の秘密鍵を持つ自分だけが復号できる。
３．緊急事態において匿名識別子の匿名性を暴くには、上記「匿名通信基盤接続認証機能」での認証局へ匿名識別子（生成に使用したランダム数を含む）を持込み、登録されている全ての秘密鍵総当たりで匿名識別子に含まれるランダム数を使用して匿名識別子を生成し、一致する秘密鍵を特定する。
【０２４６】
以上のような構成の匿名掲示板システムを匿名通信網１０上に設置することで、匿名のメッセージ交換が可能となる。
たとえば、ユーザは、ノード１００を用いてノード３００に投稿データを含むデータパケット５１を送信し、ＤＢ３６０に投稿データを登録することができる。投稿データは、たとえば、ノード４２０を用いて、ノード３００に検索要求を含むデータパケット５２を送信し、ＤＢ３６０に格納されている投稿データの検索を行うことができる。
【０２４７】
ノード３００は検索要求に応じてＤＢ３６０内の投稿データを検索し、検索結果を取得する。そして、ノード３００は、ノード４２０に対して検索結果を含むデータパケット５３を送信する。これにより、ノード４２０に検索結果が渡される。
【０２４８】
なお、検索結果には、掲示板ノード（ノード３００）から投稿者のノードまでの匿名ルート情報（グレープルートの戻り方向情報）や、投稿者のノード用の一時公開鍵などが含められる。これにより、検索要求を出力したノードにおいて、投稿者のノードまでの匿名ルート情報を得ることができると共に、投稿者宛のメッセージを投稿者のノードでのみ復号可能な形式で暗号化することができる。
【０２４９】
このようなデータパケット５１を受け取ったノード３００は、ＤＢ３６０に所定の情報を格納する。
図２６は、ＤＢ内のデータ構造例を示す図である。ＤＢ３６０内には、匿名ＩＤ、戻りブロック指定、グレープルート、返信暗号化用一時鍵情報、及びメッセージデータの項目が、互いに関連付けて登録されている。たとえば、データパケット５１に基づいて、匿名ＩＤの項目には、"ノード「Ａ」の匿名ＩＤ＃３"が登録されている。戻りブロック指定には、"^Eid+Eが復号するブロック位置"が登録されている。グレープルートには、"ノード「A」作成グレープルート"が登録されている。返信暗号化用一時鍵情報には、"ATPk,APk（ATSk）"が登録されている。メッセージデータの項目には、"投稿リクエスト、アップ日時、実データ"などの情報が登録されている。
【０２５０】
その後、ノード４２０からノード３００に対して、検索要求を含むデータパケット５２が送信される。
図２７は、検索要求を含むデータパケットの例を示す図である。ノード４２０で生成されるデータパケット５２ａは、メッセージフラグ"通常"、宛先（Ｔｏ）"ノード「Ｘ」の公開ＩＤ"、送信元（Ｆｒｏｍ）"ノード「Ｄ」の匿名ＩＤ＃４"、ブロック指定"Eid+Eが復号するブロック位置"、グレープルート"ノード「Ｄ」作成グレープルート"、ペイロード"XPk｛メッセージヘッダ、DTPk,DPk（DTSk）、メッセージデータ｝"が設定されている。
【０２５１】
このようなデータパケット５２ａが伝送途中で一度も送信に失敗せずにノード３００に到達したとき、そのときのデータパケット５２ｂでは、ブロック指定が"Xid+Xが復号するブロック位置"に変更される。ここで、ペイロード内のデータは「メッセージヘッダ、DTPk、DPk（DTSk）、メッセージデータ（検索リクエスト、アップ日時、・・・）」である。
【０２５２】
データパケット５２ｂを受け取ったノード３００は、検索リクエスト（検索キーワード等が示される）の指示に従ってＤＢ３６０を検索する。ここで、検索結果としてデータパケット５１ｂによって投稿された投稿データが得られたものとする。すると、ノード３００は、ノード４２０に対して、検索結果を含むデータパケット５３を送信する。
【０２５３】
図２８は、検索結果を含むデータパケットの例を示す図である。ノード３００で生成されるデータパケット５３ａは、メッセージフラグ"リクエストレスポンス"、宛先（Ｔｏ）"ノード「Ｄ」の匿名ＩＤ＃４"、送信元（Ｆｒｏｍ）"ノード「Ｘ」の公開ＩＤ"、ブロック指定"^Eid+Eが復号するブロック位置"、グレープルート"ノード「Ｄ」作成グレープルート"、ペイロード"メッセージヘッダ、DPk（DTSk）、DTPk｛ノード「A」匿名ＩＤ＃３、^Eid+Eが復号するブロック位置、ノード「A」作成グレープルート、ATPk、APk（ATSk）、実データ、・・・｝"が設定されている。
【０２５４】
このようなデータパケット５３ａが伝送途中で一度も送信に失敗せずにノード３００に到達したとき、そのときのデータパケット５３ｂでは、ブロック指定が"^Did+Dが復号するブロック位置"に変更される。
【０２５５】
なお、ペイロード内のDPk（DTSk）は、ノード４２０の一時復号鍵を固定公開鍵で暗号化したものである。メッセージデータは検索結果であり、この例では、データパケット５１に含まれる実データである。また、ペイロードには、ノード「Ａ」匿名ID＃３、^Eid+Eが復号するブロック位置、ノード「Ａ」作成グレープルート、ATPk、APk（ATSk）、実データなどがノード「Ｄ」の一時公開鍵で暗号化されている。ノード４２０は、ペイロード内の暗号化されたデータを、ノード４２０の一時秘密鍵（DTSk）で復号することで、検索結果を参照できる。ノード４２０を使用しているユーザは、検索結果を参照することで、投稿データの内容を確認する。投稿内容に対して応答する場合、ユーザは、ノード４２０に対して返信メッセージを入力し、その後、返信の指示を入力する。
【０２５６】
すると、ノード４２０は、投稿データへの返信メッセージを含むデータパケットをノード４３０に対して送信する。
図２９は、返信メッセージを含むデータパケットの例を示す図である。ノード４２０で生成されるデータパケット６１は、メッセージフラグ"返信"、宛先（Ｔｏ）"ノード「Ａ」の匿名ＩＤ＃３"、送信元（Ｆｒｏｍ）"ノード「Ｄ」の匿名ＩＤ＃５"、ブロック指定"^Eid+Eが復号するブロック位置"、グレープルート"ノード「Ａ」作成グレープルート＋ノード「Ａ」作成グレープルートと一緒に取得した戻りノードからノード「Ｄ」までのグレープルート"、ペイロード"メッセージヘッダ、DTPk、DPk（DTSk）、ATPk（返信メッセージ）、APk（ATSk）"が設定されている。
【０２５７】
ここで、グレープルート内には、ノード１００が作成したグレープルートに含まれる暗号ブロックと、ノード４２０からノード４３０（ノード３００の戻りノード）までのグレープルートに含まれる暗号ブロックとが設定される。すなわち、返信メッセージを含むデータパケットを送信するノードから、公開掲示板を有するノードの手前のノード（戻りノード）を経由し、情報を公開したノードに至るまでの匿名ルート上の各ノードに対応する暗号ブロックが、データパケット６１のグレープルートに設定される。
【０２５８】
また、ペイロード内の「DTPk、DPk（DTSk）」は、返信暗号化用一時鍵情報であり、ノード１００からノード４２０への返信用に利用される。「ATPk（返信メッセージ）」は、ノード１００宛の返信メッセージをノード１００の一時公開鍵で暗号化していることを示している。
【０２５９】
そのデータパケット６１は、ブロック指定の変更処理を受けながら中継され、ノード１００に入力される。ノード１００に入力されるデータパケット６４は、ブロック指定が"^Aid+Aが復号するブロック位置"に変更されている。
【０２６０】
図３０は、返信内容を含むデータパケットの伝送経路を示す図である。ノード４２０からノード４３０に送信されたデータパケット６１は、ブロック指定の更新を受けながら中継される。ノード４３０は、データパケット６２をノード４１０に送信する。ノード４１０は、データパケット６３をノード２００に送信する。ノード２００は、データパケット６４をノード１００に送信する。
【０２６１】
このようにして、掲示板を介したユーザ間の互いに匿名の通信が可能となる。しかも、本発明を適用した掲示板を利用することにより、不特定多数のユーザ間で匿名の情報交換が行える。さらには、ノードＩＤや一時公開鍵が使い捨てであり、所定の手続き毎に別の値が使用されるため、同一投稿者が掲示板へ投稿した複数のメッセージに関して、投稿者の同一性を隠しておくことができる。
【０２６２】
このようなシステムを利用すれば、個人的な情報を交換しても、その情報に対応する個人を悪意のある第三者から隠すことができる。そのため、このような匿名掲示板システムの技術は、ネットワーク技術を活用した予防医療・ヘルスケアサービス（ＨＣＳ）に応用することができる。ＨＣＳ事業を実現するためには受益者本人の体調、生理データ等、秘匿の必要性の高いデータに対するセキュリティが非常に重要な要因となる。そこで、ＨＣＳに上記匿名掲示板システムを適用すると、ユーザの生理データを、ノード１００を用いて匿名のままノード３００に登録することができる。そして、登録された生理データを他のノード４２０を使用する医者が参照し、生活習慣のアドバイス等をユーザに対して匿名のまま送信することができる。
【０２６３】
以上説明したように、本発明の実施の形態によれば、匿名ルート上の各ノードに通知すべきルート情報がブロック毎にグレープルートに設定されている。そして、パケットを中継する際には、受信したノードが参照すべきブロック指定を変更するだけでよい。したがって、パケットが中継されてもパケットのデータ長が変更されず、データ長に基づいてそのパケットが送信元に近いか、宛先に近いか等の情報を判別することが困難となる。すなわち、匿名性が向上する。
【０２６４】
また、パケットの中継の際に戻りオニオンのような返信用のルート情報を構築する必要もないため、送信元や宛先が露呈する危険性がさらに低下する。
さらに、グレープルーティングのパケットを中継する際の主な処理は、指定されたブロックの復号とブロック指定の変更である。これは、Ｐ２Ｐオニオンルーティングに比べて処理負荷が少なくて済む。すなわち、Ｐ２Ｐオニオンルーティングでは、パケットの中継の際に戻りルートを構築する。この戻りルートを作成するのには暗号化処理が必要である。一方、グレープルーティングでは、パケットを中継する際に戻りルートを構築する必要が無いため、処理負荷が軽減される。
【０２６５】
しかも、データ送信前に、送信相手までのルートを探索し、そのルート経由で匿名通信を行うための情報（各ノードの公開鍵）を収集する。そのため、ネットワーク構成が動的に変更する場合でも、匿名通信が可能となる。その結果、Ｐ２Ｐネットワークシステムなどの不安定なネットワークシステムにおいて、データを送受信する場合に、送信経路を動的に検索できると共に、送受信者の匿名性を守ることができるという効果を奏する。
【０２６６】
さらに、匿名通信を行う際のデータパケットには、転送中の匿名ルートとは別の匿名ルートの情報が含まれているため、送信に失敗した場合には、別の匿名ルート経由でデータを伝送させることができる。これにより、データ伝送の確実性が増す。
【０２６７】
また、データパケットに含まれる全ての匿名ルート経由でのデータ伝送に失敗した場合には、マルチキャストで他のルート経由でのデータ送信を試みるようにした。そのため、ルート探索時には存在していないが、データ送信時には存在している別のルートがある場合、そのルート経由で宛先のノードにパケットを送信することが可能となる。
【０２６８】
さらに、通信の際の匿名性を高めるために、他のノードに通知する公開鍵を一時公開鍵とし、所定の通信（たとえば、要求の送信とその要求に対する応答）毎に一時公開鍵を作り直すようにしたため、公開鍵の内容を監視しても、複数のパケットが同一のノードから出力されたか否かを同定することができない。
【０２６９】
さらに、匿名ＩＤによって自分宛のパケットであるか否かを判断し、しかも匿名ＩＤを、所定の通信（たとえば、要求の送信とその要求に対する応答）毎に作り直すようにしたため、これらの識別情報によってノードを同定することはできない。
【０２７０】
なお、上記の説明では返信暗号化用一時鍵情報の中に、固定公開鍵で暗号化された送信ノードの一時秘密鍵を含めているが、これは、一時公開鍵と一時秘密鍵との組を送信ノードで管理せずに済むようにするための処理である。
【０２７１】
また、上記の処理機能はコンピュータによって実現することができ、その場合、ノードが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０２７２】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２７３】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０２７４】
（付記１）  匿名ルートを介してパケットを送信するための匿名データ送信方法において、
格納ブロック決定手段が、前記パケット内のルート情報格納領域を複数のブロックに分割し、前記匿名ルートに含まれる各ノードを前記ブロックに対応付け、
ノード別ルート情報生成手段が、匿名ルート記憶手段に予め格納されている匿名ルート情報に基づいて、前記匿名ルート上のノード毎に、隣接ノードの識別情報および前記隣接ノードに対応する前記ブロックの位置を示すブロック指定を含むノード別ルート情報を生成し、
暗号化手段が、前記ノード別ルート情報を暗号化し、
ノード別ルート情報設定手段が、暗号化されたノード毎の前記ノード別ルート情報を、前記パケット内の各ノードに対応する前記ブロックに設定し、
ブロック指定手段が、前記匿名ルート上の隣接する前記隣接ノードに対応する前記ブロックの位置を前記パケットに設定し、
パケット送信手段が、前記パケットを前記隣接ノードに対して送信する、
ことを特徴とする匿名データ送信方法。
【０２７５】
（付記２）  前記暗号化手段は、前記ノード別ルート情報を、対応するノードの公開鍵で暗号化することを特徴とする付記１記載の匿名データ送信方法。
（付記３）  前記ノード別ルート情報生成手段は、前記ノード別ルート情報内に、前記匿名ルートを宛先に向かって転送する場合の隣接ノードに関する識別情報と前記ブロック指定、および前記匿名ルートを送信元に向かって返信する場合の隣接ノードに関する識別情報と前記ブロック指定を含んでいることを特徴とする付記１記載の匿名データ送信方法。
【０２７６】
（付記４）  前記ノード別ルート情報生成手段は、宛先までの複数の匿名ルートが存在するとき、全ての匿名ルート上の各ノードに対応する前記ノード別ルート情報を生成することを特徴とする付記１記載の匿名データ送信方法。
【０２７７】
（付記５）  前記ノード別ルート情報生成手段は、データ送信方向の隣接ノードとデータ返信方向の隣接ノードとをフラグによって指定することを特徴とする付記１記載の匿名データ送信方法。
【０２７８】
（付記６）  前記ノード別ルート情報生成手段は、前記パケットの宛先である受信ノードに対応する前記ノード別ルート情報に、ダミーパケットを転送するための前記隣接ノードの識別情報および前記隣接ノードに対応する前記ブロックの位置を示すブロック指定を含めることを特徴とする付記１記載の匿名データ送信方法。
【０２７９】
（付記７）  匿名のデータを中継するための匿名データ中継方法において、
各ノードの隣接ノードの識別情報および前記隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報が、ルート情報格納領域内の各ノードに対応するブロックに設定されていると共に、自分宛のブロック指定を含むパケットを受信すると、復号手段が、自分宛の前記ブロック指定で指定されたブロックに設定されている前記ノード別ルート情報を復号し、
転送先決定手段が、復号された前記ノード別ルート情報に基づいて、前記パケットの転送先のノードを決定し、
ブロック指定変更手段が、復号された前記ノード別ルート情報に基づいて、前記ブロック指定の内容を、前記転送先のノードに対応するブロックに変更し、
パケット送信手段が、前記転送先のノードに前記パケットを送信する、
ことを特徴とする匿名データ中継方法。
【０２８０】
（付記８）  匿名ルートを介してパケットを送信する匿名データ送信装置において、
前記パケット内のルート情報格納領域を複数のブロックに分割し、前記匿名ルートに含まれる各ノードを前記ブロックに対応付ける格納ブロック決定手段と、
匿名ルート記憶手段に予め格納されている匿名ルート情報に基づいて、前記匿名ルート上のノード毎に、隣接ノードの識別情報および前記隣接ノードに対応する前記ブロックの位置を示すブロック指定を含むノード別ルート情報を生成するノード別ルート情報生成手段と、
前記ノード別ルート情報を暗号化する暗号化手段と、
暗号化されたノード毎の前記ノード別ルート情報を、前記パケット内の各ノードに対応する前記ブロックに設定するノード別ルート情報設定手段と、
前記匿名ルート上の隣接する前記隣接ノードに対応する前記ブロックの位置を前記パケットに設定するブロック指定手段と、
前記パケットを前記隣接ノードに対して送信するパケット送信手段と、
を有することを特徴とする匿名データ送信装置。
【０２８１】
（付記９）  匿名のデータを中継する匿名データ中継装置において、
各ノードの隣接ノードの識別情報および前記隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報が、ルート情報格納領域内の各ノードに対応するブロックに設定されていると共に、自分宛のブロック指定を含むパケットを受信すると、自分宛の前記ブロック指定で指定されたブロックに設定されている前記ノード別ルート情報を復号する復号手段と、
復号された前記ノード別ルート情報に基づいて、前記パケットの転送先のノードを決定する転送先決定手段と、
復号された前記ノード別ルート情報に基づいて、前記ブロック指定の内容を、前記転送先のノードに対応するブロックに変更するブロック指定変更手段と、
前記転送先のノードに前記パケットを送信するパケット送信手段と、
を有することを特徴とする匿名データ中継装置。
【０２８２】
（付記１０）  匿名ルートを介してパケットを送信するための匿名データ送信プログラムにおいて、
コンピュータに、
格納ブロック決定手段が、前記パケット内のルート情報格納領域を複数のブロックに分割し、前記匿名ルートに含まれる各ノードを前記ブロックに対応付け、
ノード別ルート情報生成手段が、匿名ルート記憶手段に予め格納されている匿名ルート情報に基づいて、前記匿名ルート上のノード毎に、隣接ノードの識別情報および前記隣接ノードに対応する前記ブロックの位置を示すブロック指定を含むノード別ルート情報を生成し、
暗号化手段が、前記ノード別ルート情報を暗号化し、
ノード別ルート情報設定手段が、暗号化されたノード毎の前記ノード別ルート情報を、前記パケット内の各ノードに対応する前記ブロックに設定し、
ブロック指定手段が、前記匿名ルート上の隣接する前記隣接ノードに対応する前記ブロックの位置を前記パケットに設定し、
パケット送信手段が、前記パケットを前記隣接ノードに対して送信する、
処理を実行させることを特徴とする匿名データ送信プログラム。
【０２８３】
（付記１１）  匿名のデータを中継するための匿名データ中継プログラムにおいて、
コンピュータに、
各ノードの隣接ノードの識別情報および前記隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報が、ルート情報格納領域内の各ノードに対応するブロックに設定されていると共に、自分宛のブロック指定を含むパケットを受信すると、復号手段が、自分宛の前記ブロック指定で指定されたブロックに設定されている前記ノード別ルート情報を復号し、
転送先決定手段が、復号された前記ノード別ルート情報に基づいて、前記パケットの転送先のノードを決定し、
ブロック指定変更手段が、復号された前記ノード別ルート情報に基づいて、前記ブロック指定の内容を、前記転送先のノードに対応するブロックに変更し、
パケット送信手段が、前記転送先のノードに前記パケットを送信する、
処理を実行させることを特徴とする匿名データ中継プログラム。
【０２８４】
（付記１２）  匿名ルートを介してパケットを送信するための匿名データ送信プログラムを記録したコンピュータ読み取り可能な記録媒体において、
コンピュータに、
格納ブロック決定手段が、前記パケット内のルート情報格納領域を複数のブロックに分割し、前記匿名ルートに含まれる各ノードを前記ブロックに対応付け、
ノード別ルート情報生成手段が、匿名ルート記憶手段に予め格納されている匿名ルート情報に基づいて、前記匿名ルート上のノード毎に、隣接ノードの識別情報および前記隣接ノードに対応する前記ブロックの位置を示すブロック指定を含むノード別ルート情報を生成し、
暗号化手段が、前記ノード別ルート情報を暗号化し、
ノード別ルート情報設定手段が、暗号化されたノード毎の前記ノード別ルート情報を、前記パケット内の各ノードに対応する前記ブロックに設定し、
ブロック指定手段が、前記匿名ルート上の隣接する前記隣接ノードに対応する前記ブロックの位置を前記パケットに設定し、
パケット送信手段が、前記パケットを前記隣接ノードに対して送信する、
処理を実行させることを特徴とする匿名データ送信プログラムを記録したコンピュータ読み取り可能な記録媒体。
【０２８５】
（付記１３）  匿名のデータを中継するための匿名データ中継プログラムを記録したコンピュータ読み取り可能な記録媒体において、
コンピュータに、
各ノードの隣接ノードの識別情報および前記隣接ノードに対応するブロックの位置を示すブロック指定を含むノード別ルート情報が、ルート情報格納領域内の各ノードに対応するブロックに設定されていると共に、自分宛のブロック指定を含むパケットを受信すると、復号手段が、自分宛の前記ブロック指定で指定されたブロックに設定されている前記ノード別ルート情報を復号し、
転送先決定手段が、復号された前記ノード別ルート情報に基づいて、前記パケットの転送先のノードを決定し、
ブロック指定変更手段が、復号された前記ノード別ルート情報に基づいて、前記ブロック指定の内容を、前記転送先のノードに対応するブロックに変更し、
パケット送信手段が、前記転送先のノードに前記パケットを送信する、
処理を実行させることを特徴とする匿名データ中継プログラムを記録したコンピュータ読み取り可能な記録媒体。
【図面の簡単な説明】
【０２８６】
【図１】実施の形態に適用される発明の概念図である。
【図２】グレープルートのデータ構造例を示す図である。
【図３】匿名通信網の概念図である。
【図４】本発明の実施の形態に用いるノードのハードウェア構成例を示す図である。
【図５】ノードの概略機能構成を示すブロック図である。
【図６】ノードの機能構成を示すブロック図である。
【図７】匿名通信基盤接続認証機能を示す図である。
【図８】匿名経路発見機能を示す図である。
【図９】ルート探索パケットのデータ構造例を示す図である。
【図１０】ルート通知パケットのデータ構造例を示す図である。
【図１１】匿名経路発見機能の処理手順を示すシーケンス図である。
【図１２】ルート探索パケットの伝送経路を示す図である。
【図１３】ルート探索パケットの状態遷移状況を示す図である。
【図１４】ルート通知パケットの伝送経路を示す図である。
【図１５】ルート通知パケットの状態遷移状況を示す図である。
【図１６】匿名ルート情報保持部内のデータ構造例を示す図である。
【図１７】匿名通信機能を示す概念図である。
【図１８】データパケットのデータ構造例を示す図である。
【図１９】匿名通信機能の処理手順を示すシーケンス図である。
【図２０】データパケットの伝送経路を示す図である。
【図２１】データパケットの初期状態を示す図である。
【図２２】データパケットの状態遷移状況を示す図である。
【図２３】バックトラック処理におけるデータパケットの伝送経路を示す図である。
【図２４】マルチキャストにおけるデータパケットの伝送経路を示す図である。
【図２５】匿名掲示板システムに適用した匿名通信網の構成例を示す図である。
【図２６】ＤＢ内のデータ構造例を示す図である。
【図２７】検索要求を含むデータパケットの例を示す図である。
【図２８】検索結果を含むデータパケットの例を示す図である。
【図２９】返信メッセージを含むデータパケットの例を示す図である。
【図３０】返信内容を含むデータパケットの伝送経路を示す図である。
【図３１】従来のＰ２Ｐオニオンルーティングの例を示す図である。
【図３２】従来技術によるパケットのサイズを示す図である。
【図３３】送信者から受信者までのルート情報を示す図である。
【符号の説明】
【０２８７】
１  送信ノード
１ａ  匿名ルート記憶手段
１ｂ  格納ブロック決定手段
１ｃ  ノード別ルート情報生成手段
１ｄ  暗号化手段
１ｅ  ノード別ルート情報設定手段
１ｆ  ブロック指定手段
１ｇ  パケット送信手段
２  中継ノード
２ａ  復号手段
２ｂ  送信先決定手段
２ｃ  ブロック指定変更手段
２ｄ  パケット送信手段
３  受信ノード
【図１】
2005159912.tif 000003
【図２】
2005159912.tif 000004
【図３】
2005159912.tif 000005
【図４】
2005159912.tif 000006
【図５】
2005159912.tif 000007
【図６】
2005159912.tif 000008
【図７】
2005159912.tif 000009
【図８】
2005159912.tif 000010
【図９】
2005159912.tif 000011
【図１０】
2005159912.tif 000012
【図１１】
2005159912.tif 000013
【図１２】
2005159912.tif 000014
【図１３】
2005159912.tif 000015
【図１４】
2005159912.tif 000016
【図１５】
2005159912.tif 000017
【図１６】
2005159912.tif 000018
【図１７】
2005159912.tif 000019
【図１８】
2005159912.tif 000020
【図１９】
2005159912.tif 000021
【図２０】
2005159912.tif 000022
【図２１】
2005159912.tif 000023
【図２２】
2005159912.tif 000024
【図２３】
2005159912.tif 000025
【図２４】
2005159912.tif 000026
【図２５】
2005159912.tif 000027
【図２６】
2005159912.tif 000028
【図２７】
2005159912.tif 000029
【図２８】
2005159912.tif 000030
【図２９】
2005159912.tif 000031
【図３０】
2005159912.tif 000032
【図３１】
2005159912.tif 000033
【図３２】
2005159912.tif 000034
【図３３】
2005159912.tif 000035