(57)【特許請求の範囲】
【請求項１】
第一のヘッダ部と、第二のヘッダ部と、ペイロードデータ部とを含むパケットを、複数のノード間で転送するアドホックネットワークシステムにおいて、
前記複数のノードの内の第一のノードは、
前記ペイロードデータ部に設定されるペイロードデータ、及び前記第一のヘッダ部に設定される最終送信先アドレスを含む第一のヘッダ情報に対して、第一の論理関係である第一の値を算出する算出部と、
前記ペイロードデータと、前記第一のヘッダ情報と、前記第二のヘッダ部に設定される送信先アドレスを含む第二のヘッダ情報と、前記第一の値と、該ペイロードデータと該第一のヘッダ情報と該第二のヘッダ情報とに対して第二の論理関係であって、該送信先アドレスに応じた鍵を用いて算出された第二の値とを含むパケットを、第二のノードへ送信する通信部と、
前記送信先アドレス毎に、前記第二の値を算出する為の前記鍵を管理する鍵管理テーブルを記憶する記憶部とを有し、
前記第二のノードは、
パケットを受信する通信部と、
受信したパケット内における前記ペイロードデータ部、前記第一のヘッダ部、および前記第二のヘッダ部に格納された情報に対して前記第二の論理関係となる値が、前記第二の値と一致せず、かつ、該受信したパケットにおける前記ペイロードデータ部および前記第一のヘッダ部に格納された情報に対して前記第一の論理関係である値が、前記第一の値と一致する場合、前記受信したパケットに基づくパケットを第三のノードへ送信させる制御を行う検証部とを有することを特徴とするアドホックネットワークシステム。
【請求項２】
アドホックネットワーク内で、第一のヘッダ部と、第二のヘッダ部と、ペイロードデータ部とを含むパケットを送信するノードにおいて、
前記ペイロードデータ部に設定されるペイロードデータ、及び前記第一のヘッダ部に設定される最終送信先アドレスを含む第一のヘッダ情報に対して、第一の論理関係である第一の値を算出する算出部と、
前記ペイロードデータと、前記第一のヘッダ情報と、前記第二のヘッダ部に設定される送信先アドレスを含む第二のヘッダ情報と、前記第一の値と、該ペイロードデータと該第一のヘッダ情報と該第二のヘッダ情報とに対して第二の論理関係であって、該送信先アドレスに応じた鍵を用いて算出された第二の値と、を含むパケットを送信する通信部と、
前記送信先アドレス毎に、前記第二の値を算出する為の前記鍵を管理する鍵管理テーブルを記憶する記憶部と
を有することを特徴とするノード。
【請求項３】
前記ノードは、さらに、
前記ノードに対してデータを出力するセンサから、該データを取得する取得部を備え、
前記算出部は、前記データを取得した場合に、該データを含む前記ペイロードデータおよび前記第二の情報に対する前記第二の値を算出することを特徴とする請求項２記載のノード。
【請求項４】
前記ノードは、さらに、
前記取得部が、前記データを取得した場合に、前記ペイロードデータを暗号化する暗号化部を備え、
前記算出部は、暗号化された前記ペイロードデータおよび前記第一のヘッダ情報に対して、前記第一の値を算出することを特徴とする請求項３記載のノード。
【請求項５】
前記ノードにおいて、前記暗号化部は、さらに、
暗号化された前記ペイロードデータおよび前記第二のヘッダ情報をさらに、暗号化することを特徴とする請求項４記載のノード。
【請求項６】
前記ノードは、さらに、
前記アドホックネットワークにおいて、前記パケットの最終送信先アドレスごとに、該最終送信先アドレスまでの転送ルートを示すルーティングテーブルを記憶する記憶部を有し、
前記ルーティングテーブルに基づいて、前記送信先アドレスを決定する生成部を有することを特徴とする請求項２乃至請求項５のいずれか一項に記載のノード。
【請求項７】
前記算出部は、予め設定されたアルゴリズムに基づいて、前記ペイロードデータ及び前記第一のヘッダ情報に対するメッセージ認証コードを、前記第一の値として算出することを特徴とする請求項２乃至請求項６のいずれか一項に記載のノード。
【請求項８】
前記算出部は、予め設定されたアルゴリズムに基づいて、前記ペイロードデータと、前記第一のヘッダ情報と、前記第二のヘッダ情報と、前記第一の値とに対するメッセージ認証コードを、前記第二の値として算出することを特徴とする請求項２乃至請求項７のいずれか一項に記載のノード。
【請求項９】
パケットを受信した場合に、該パケットを送信したノードにより該パケット内に設定された値を用いた検証を行うノードであって、
ペイロードデータ部に設定されたペイロードデータと、第一のヘッダ部に設定された送信先アドレスを含む第一のヘッダ情報と、第二のヘッダ部に設定される最終送信先アドレスを含む第二のヘッダ情報と、第一の値と、第二の値とを含む前記パケットを、前記送信したノードから受信する通信部と、
前記送信先アドレスに応じた鍵を用いて、前記ペイロードデータと前記第一のヘッダ情報と前記第二のヘッダ情報と前記第二の値とに対して第一の論理関係となる値が、前記第一の値と一致するかを検証すると共に、
一致しなかった場合、前記ペイロードデータおよび前記第二のヘッダ情報に対して第二の論理関係となる値が、前記第二の値と一致するか検証し、前記第二の論理関係となる値が、前記第二の値と一致した場合に、前記パケットに基づくパケットを送信する制御を行う検証部とを有することを特徴とするノード。
【請求項１０】
前記ノードにおいて、前記検証部は、
前記第二の論理関係となる値が、前記第二の値と一致しなかった場合に、前記パケットを破棄することを特徴とする請求項９記載のノード。
【請求項１１】
前記ノードにおいて、前記検証部は、予め設定されたアルゴリズムに基づいて、前記ペイロードデータと前記第一のヘッダ情報と前記第二のヘッダ情報と前記第二の値に対するメッセージ認証コードを、前記第一の論理関係となる値として算出することを特徴とする請求項９または１０記載のノード。
【請求項１２】
前記ノードは、さらに、前記検証部による前記制御に応じて、前記通信部は、他のノードへ、前記ペイロードデータと前記第二のヘッダ情報を含む他のパケットを送信することを特徴とする請求項９乃至請求項１１のいずれか一項に記載のノード。
【請求項１３】
アドホックネットワーク内で、第一のヘッダ部と、第二のヘッダ部と、ペイロードデータ部とを含むパケットを送信するノードが実行する通信方法であって、
前記ノードが、
前記ペイロードデータ部に設定されるペイロードデータ、及び前記第一のヘッダ部に設定される最終送信先アドレスを含む第一のヘッダ情報に対して、第一の論理関係である第一の値を算出し、
前記ペイロードデータと、前記第一のヘッダ情報と、前記第二のヘッダ部に設定される送信先アドレスを含む第二のヘッダ情報と、前記第一の値と、該ペイロードデータと該第一のヘッダ情報と該第二のヘッダ情報とに対して第二の論理関係であって、該送信先アドレスに応じた鍵を用いて算出された第二の値と、を含むパケットを送信する処理を実行することを特徴とする通信方法。
【請求項１４】
パケットを受信した場合に、該パケットを送信したノードにより該パケット内に設定された値を用いた検証を行うノードが実行する通信方法であって、
前記ノードが、
ペイロードデータ部に設定されたペイロードデータと、第一のヘッダ部に設定された送信先アドレスを含む第一のヘッダ情報と、第二のヘッダ部に設定される最終送信先アドレスを含む第二のヘッダ情報と、第一の値と、第二の値とを含む前記パケットを、前記送信するノードから受信し、
前記送信先アドレスに応じた鍵を用いて、前記ペイロードデータと前記第一のヘッダ情報と前記第二のヘッダ情報と前記第二の値とに対して第一の論理関係となる値が、前記第一の値と一致するかを検証し、
一致しなかった場合、前記ペイロードデータおよび前記第二のヘッダ情報に対して第二の論理関係となる値が、前記第二の値と一致するか検証し、
前記第二の論理関係となる値が、前記第二の値と一致した場合に、前記パケットに基づくパケットを送信する制御を行う処理を実行することを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に開示する技術は、アドホックネットワークシステムにおいて、ノード間でパケット送受信する技術に関する。
【背景技術】
【０００２】
アドホックネットワークとは、無線又は有線通信によってリンクする自己構成型のネットワークの一種である。アドホックネットワークは、通信機能を有する複数の装置により構成される。なお、アドホックネットワークにおける、通信機能を有する装置は、ノードと呼ばれる。また、アドホックネットワーク内の各ノードは、マルチホップ通信によりパケットを送受信する。マルチホップ通信は、互いの通信圏内に存在しないノード同士であっても、各ノードの通信圏内に存在する別のノードを介して通信を可能にする技術である。【０００３】
例えば、アドホックネットワークを利用したシステムとして、各家庭の電力メータに無線通信可能なノードを組み込むことにより、アドホックネットワーク経由で各家庭の消費電力量などを収集する検針システムがある。検針システムでは、各電気メータが検出した各家庭の消費電力量を含むパケットが、各家庭の電気メータが備える各ノードから電力会社のシステムまで転送される。このように、検針システムで転送されるパケットに、各家庭の電力使用に係る個人情報が含まれる。【０００４】
また、秘匿性、改ざん防止などの観点から、アドホックネットワークを利用した通信では、セキュアな通信を行うことが要求される。セキュアな通信の一例としては、パケットの全体または一部を暗号化して転送する手法などが用いられる。さらに、パケットに、当該パケットに対する符号情報の一種であるメッセージ認証コード（ＭＡＣ値）を格納して転送する手法などが知られている。【０００５】
そして、パケットを受信したノードが算出したＭＡＣ値と、パケットに含まれるＭＡＣ値とを照合することで、当該ノードがパケットを検証する技術がある（特許文献１）。【０００６】
ここで、特許文献１における、パケットを検証する手法について説明する。なお、パケットは、通信ヘッダとデータ部とＭＡＣ値格納部とを有する。通信ヘッダは、送信元のアドレス、宛先のアドレス、転送元のアドレス、転送先のアドレス等の各種情報を含む。
まず、パケットを転送するノードＸは、通信ヘッダとデータ部とを対象として、所定のアルゴリズムに従って、ＭＡＣ値Ａを算出する。所定のアルゴリズムには、符号情報の算出方法が定義される。さらに、ノードＸは、ＭＡＣ値Ａを、ＭＡＣ値格納部に格納する。そして、ノードＸは、転送先のノードＹへパケットを送信する。【０００７】
次に、パケットを受信したノードＹは、パケットに含まれる通信ヘッダとデータ部とを対象として、所定のアルゴリズムに従って、ＭＡＣ値Ｂを算出する。次に、パケット内のＭＡＣ格納部に格納されたＭＡＣ値Ａと、算出したＭＡＣ値Ｂとを比較する。そして、比較した結果、ＭＡＣ値ＡとＭＡＣ値Ｂとが一致した場合に、ノードＹは、新たな転送先となるノードＺへパケットを転送する。【０００８】
一方、ＭＡＣ値ＡとＭＡＣ値Ｂとが一致しない場合は、ノードＹは、受信したパケットを破棄する。以上の手法により、パケットを受信したノードは、ＭＡＣ値を利用して、パケットを検証する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】国際公開２０１１−１２１７１３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ＭＡＣ値のように、パケット内のデータに対して所定の論理関係を有する値を利用して、パケットを検証することによって、ネットワークシステム内の各ノードは、完全性が証明されないパケットを破棄することができる。しかし、転送の過程で、パケットに含まれる一部のデータが欠落したり、何らかの要因で書き変わってしまう場合がある。ネットワークシステムは、マルチホップ通信により、ペイロードデータを含むパケットを、目的のアドレスまで送信することを目的とするが、従来の方式では、転送されるべきパケットも、破棄されてしまう可能性があった。なお、ペイロードデータは、パケットを構成するデータの内、ヘッダやトレーラなどの付加的情報を除いたデータである。【００１１】
そこで、本実施の形態に開示の技術は、パケット内のデータと所定の論理関係を有する値を利用してパケット内のデータの完全性を検証する場合に、転送すべきパケットについては、一部の完全性が証明された場合に、転送を優先することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一観点によれば、第一のヘッダ部と、第二のヘッダ部と、ペイロードデータ部とを含むパケットを、複数のノード間で転送するアドホックネットワークシステムにおいて、前記複数のノードの内の第一のノードは、前記ペイロードデータ部に設定されるペイロードデータ、及び前記第一のヘッダ部に設定される最終送信先アドレスを含む第一のヘッダ情報に対して、第一の論理関係である第一の値を算出する算出部と、前記ペイロードデータと、前記第一のヘッダ情報と、前記第二のヘッダ部に設定される送信先アドレスを含む第二のヘッダ情報と、前記第一の値と、該ペイロードデータと該第一のヘッダ情報と該第二のヘッダ情報とに対して第二の論理関係であって、該送信先アドレスに応じた鍵を用いて算出された第二の値とを含むパケットを、第二のノードへ送信する通信部と、前記送信先アドレス毎に、前記第二の値を算出する為の前記鍵を管理する鍵管理テーブルを記憶する記憶部とを有し、前記第二のノードは、パケットを受信する通信部と、受信したパケット内における前記ペイロードデータ部、前記第一のヘッダ部、および前記第二のヘッダ部に格納された情報に対して前記第二の論理関係となる値が、前記第二の値と一致せず、かつ、該受信したパケットにおける前記ペイロードデータ部および前記第一のヘッダ部に格納された情報に対して前記第一の論理関係である値が、前記第一の値と一致する場合、前記受信したパケットに基づくパケットを第三のノードへ送信させる制御を行う検証部とを有する。
【発明の効果】
【００１３】
本発明の一観点によれば、パケットを効果的に目的の送信先まで送信することが可能になる。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施の形態にかかるネットワークシステムの一実施例を示す説明図である。
【図２】図２は、パケットのデータ構成例を示す図である。
【図３】図３は、第一の値および第二の値を説明する為の図である。
【図４】図４は、実施例１におけるノードの機能ブロック図である。
【図５】図５は、ルーティングテーブル記憶部１３１が記憶するルーティングテーブルのデータ構成例である。
【図６】図６Ａ乃至図６Ｅは、鍵情報記憶部１３２が備える各種データテーブルの例である。
【図７】図７は、実施例１におけるパケットの生成処理のフローチャートである。
【図８】図８は、実施例１におけるパケットの検証処理のフローチャートである。
【図９】図９は、アドホックネットワーク内をパケットが送信される流れを示すシーケンス図である。
【図１０】図１０は、実施例２におけるパケットの生成処理のフローチャートである。
【図１１】図１１は、実施例２におけるパケットの検証処理のフローチャートである。
【図１２】図１２は、ノードのハードウェア構成例である。
【発明を実施するための形態】
【００１５】
以下に添付図面を参照して、この発明にかかる通信装置、通信方法、およびシステムの実施の形態を詳細に説明する。
【００１６】
（実施例１）
図１は、実施の形態にかかるネットワークシステムの一実施例を示す説明図である。ネットワークシステムは、複数のノードＮと、シンクノードＳＮと、サーバＳとを含む。まず、図１を用いて、本実施の形態に係るネットワークシステムおよび、ネットワークシステムにおけるパケットの送信について、説明する。また、本実施の形態に係るネットワークシステムは、アドホックネットワークシステムである。
【００１７】
サーバＳとシンクノードＳＮとはインターネット、ＬＡＮ、ＷＡＮなどの通常ネットワーク１０１を介して接続されている。シンクノードＳＮとノードＮａ〜Ｎｈとは、アドホックネットワーク１００を介して接続されている。
【００１８】
アドホックネットワーク１００内には、複数のノードＮが設けられている。図１では、代表としてノードＮａ〜Ｎｈを示している。
【００１９】
シンクノードＳＮは、アドホックネットワーク１００と通常ネットワーク１０１とを接続する中継機器である。シンクノードＳＮは、アドホックネットワーク１００のプロトコルの形式の情報と通常ネットワーク１０１のプロトコルの形式の情報の両方を送受信可能である。
【００２０】
また、シンクノードＳＮは、アドホックネットワーク１００と通常ネットワーク１０１との間で情報をプロトコル変換することにより、通信を行う。例えば、アドホックネットワーク１００内のノードＮのいずれかからサーバＳ宛に送信されたパケットは、シンクノードＳＮにてプロトコル変換される。その後、シンクノードＳＮが、当該パケットを、通常ネットワーク１０１に送信することで、パケットはサーバＳに到達する。
【００２１】
また、サーバＳやシンクノードＳＮからそれぞれのノードＮ宛てに送信されたデータは、シンクノードＳＮにてプロトコル変換され、シンクノードＳＮからアドホックネットワーク１００内の各ノードＮにパケットとして送信される。
【００２２】
なお、シンクノードＳＮは、各ノードＮ間の通信の可否をルーティングテーブルにより把握する。そして、シンクノードＳＮは、ルーティングテーブルの情報を元に、パケットの送信ルートを、自律的に生成する。
【００２３】
また、各ノードＮは、個別にルーティングテーブルを生成してもよい。各ノードＮは、周囲のノードＮと通信状況に関する情報を交換する。そして、各ノードＮは、通信状況に関する情報に基づいて、ルーティングテーブルを生成する。例えば、ノードＮｆとノードＮｇが通信不能となった場合でも、新たな送信ルートの設定が可能となる。例えば、ノードＮｇは、ノードＮｅを経由する新たなルートを構築することができる。本実施の形態においては、各ノードがルーティングテーブルを生成するとして、以下説明を行う。
【００２４】
各ノードは、所定の通信圏内で通信可能な他ノードとマルチホップ通信が可能な装置である。アドホックネットワーク１００では、すべてのノードＮａ〜Ｎｈが直接シンクノードＳＮと通信できる必要はなく、他のノードを経由する事で、各ノードＮａ〜Ｎｈは、シンクノードＳＮと通信する。
【００２５】
このため、アドホックネットワーク１００では、一部のノードがシンクノードＳＮと通信可能であればよい。図１では、シンクノードＳＮと直接通信可能なノードは、ノードＮａ，Ｎｄであるとする。
【００２６】
なお、図１の例では、アドホックネットワーク１００内に１台のシンクノードＳＮを設ける構成としたが、一つのアドホックネットワーク１００内に複数台のシンクノードＳＮを設ける構成としてもよい。また、図１ではアドホックネットワーク１００は一つであるが、複数のアドホックネットワークを含む場合もある。複数のアドホックネットワークを含む場合、複数のアドホックネットワークにはそれぞれ少なくとも一つのシンクノードＳＮが含まれており、サーバＳは当該シンクノードＳＮと通常ネットワークを介して接続する。この構成により、サーバＳと全てのノードＮとのデータ送受信が可能になる。
【００２７】
本実施例のアドホックネットワークシステムは、たとえば各家庭の電力の使用量を収集するシステムに適用される。このようなシステムの場合、各ノードＮは、各家庭の電力の使用量を検出するための各家庭の電力メータに設置される。各ノードＮが検出した電力の使用量を、シンクノードＳＮを経由してサーバＳに送信することで、サーバＳは、各家庭の電力の使用量を収集することが可能になる。
【００２８】
具体的には、例えば、各家庭の電力メータにそれぞれノードＮが組み込まれているとする。各ノードＮは、各家庭の電力や使用量を、アドホックネットワーク１００を介してサーバＳに送信する。
【００２９】
なお、各家庭の電力の使用量は、各ノードが計測してもよく、また、各ノードが電力メータから取得してもよい。また、各ノードは、自身の記憶領域に、検出した電力使用量を記憶する。シンクノードＳＮは、アドホックネットワーク１００内の各ノードから受信した各家庭の電力や使用量を、通常ネットワーク１０１を介して電力会社のサーバＳに送信する。これにより、作業員が現地に出向くことなく電力の使用量を収集することができる。
【００３０】
また、本ネットワークシステムは、電力の使用量の収集だけでなく、各ノードに温度，湿度，光量などを検知するセンサ機能を持たせて、例えば、環境などの調査に使用することも可能である。
図１では、アドホックネットワーク１００を構成するノードＮａ〜Ｎｈにより、４つの経路Ｒ１〜Ｒ４が設定されているものとする。具体的には、経路Ｒ１は、ノードＮｃとノードＮｂとノードＮａとシンクノードＳＮとを含むルートである。経路Ｒ２は、ノードＮｅとノードＮｄとシンクノードＳＮとを含むルートである。経路Ｒ３は、ノードＮｇとノードＮｆとノードＮｄとシンクノードＳＮとを含むルートである。経路Ｒ４は、ノードＮｈとノードＮｆとノードＮｄとシンクノードＳＮとを含むルートである。なお、ノードＮａやノードＮｄはシンクノードと直接通信するノードである。
【００３１】
シンクノードＳＮに近いノードを上流側のノードと呼ぶ。なお、アドホックネットワーク１００の規模によっては、ノードＮｂやノードＮｅも上流側のノードとなる。各ノードＮａ〜ＮｈからサーバＳへデータが送信される場合は、各ノードＮａ〜Ｎｈは、各々検出したデータをルーティングされた経路Ｒ１〜Ｒ４に従ってシンクノードＳＮに送信する。
【００３２】
ここで、パケットのデータ構成例について、説明する。図２は、パケットのデータ構成例を示す図である。
【００３３】
パケット２０には、第一のヘッダ部２１、第二のヘッダ部２２、ペイロードデータ部２３、第一の値格納部２４、第二の値格納部２５が、それぞれ割り当てられる。第一のヘッダ部２１には、第一のヘッダ情報が記述される。第一のヘッダ情報は、ローカル送信元アドレス、ローカル送信先アドレス、付加情報を含む。
【００３４】
ローカル送信元アドレスは、パケット２０を送信する装置のアドレスに関する情報である。ローカル送信先アドレスは、パケット２０の宛先となる装置のアドレスに関する情報である。なお、本実施例においては、ローカル送信元アドレスおよびローカル送信先アドレスは、ノード、シンクノードのアドレスである。
【００３５】
付加情報は、ローカル送信元アドレス、ローカル送信先アドレス、グローバル送信元アドレス、グローバル送信先アドレス以外のヘッダ情報である。例えば、送信日時や転送回数などの情報である。なお、グローバル送信元アドレス、グローバル送信先アドレスについては、後述する。
【００３６】
第二のヘッダ部２２には、第二のヘッダ情報が記述される。第二のヘッダ情報は、グローバル送信元アドレス、グローバル送信先アドレスを含む。グローバル送信元アドレスは、ペイロードデータ部２３に記述されるペイロードデータを生成した装置のアドレスに関する情報である。グローバル送信先アドレスは、ペイロードデータ部２３に記述されるペイロードデータを最終的に受信する装置のアドレスに関する情報である。なお、本実施例においては、グローバル送信元アドレスおよびグローバル送信先アドレスは、ノード、シンクノード、サーバのアドレスである。
【００３７】
ペイロードデータ部２３には、ペイロードデータが記述される。例えば、検針システムにおいては、ペイロードデータには、各家庭の消費電力量の情報等が含まれる。第一の値格納部２４には、パケット２０の完全性を検証する為の第一の値が記述される。第二の値格納部２５には、パケット２０の完全性を検証する為の第二の値が記述される。なお、完全性を検証するとは、パケット生成時におけるデータ内容とパケット受信時におけるデータ内容とが一致するか否かを検証することである。
【００３８】
図３は、第一の値および第二の値を説明する為の図である。ここでは、ノードＮが取得したデータを含むパケットに、第一の値および第二の値を設定する場合について、説明する。
【００３９】
まず、ノードＮは、取得したデータを含むペイロードデータを、ペイロードデータ部２３に設定する。ここで、ノードＮは、ペイロードデータを暗号鍵により暗号化することで、ペイロードデータの機密性を確保する。暗号鍵は、各ノードとサーバとが共有する鍵である。また、暗号鍵は、各ノードごとに異なる鍵であってもよいし、全ノードで共通の鍵であってもよい。
【００４０】
さらに、ノードＮは、グローバル送信元アドレスとグローバル送信先アドレスを含む第二のヘッダ情報を、生成する。そして、ノードＮは、第二のヘッダ部に、第二のヘッダ情報を格納する。そして、ノードＮは、第二のヘッダ情報および暗号化されたペイロードデータの完全性を検証する為の第二の値を、予め規定されたアルゴリズムに基づいて、算出する。そして、ノードＮは、第二の値を第二の値格納部２５に設定する。第二のヘッダ情報と暗号化されたペイロードデータとを含むデータを、以下、アプリケーションデータと称する。
【００４１】
第二の値は、アプリケーションデータに対して所定の論理関係にある値である。例えば、第二の値は、アプリケーションデータを一定の長さの文字列に圧縮した値であって、ハッシュ値や、ＭＡＣ値、ＭＤＣ値などである。以下、本実施例では、第二の値は、アプリケーションデータ用ＭＡＣ鍵を用いて算出されたＭＡＣ値である。
【００４２】
つまり、本実施例において、ノードＮは、アプリケーションデータ用ＭＡＣ鍵を用いて、アプリケーションデータのＭＡＣ値を算出する。アプリケーションデータ用ＭＡＣ鍵は、予め各ノード、シンクノード、サーバ間で共有された鍵が用いられる。
【００４３】
次に、ノードＮは、ローカル送信元アドレスとローカル送信先アドレスとを含む第一のヘッダ情報を生成する。そして、ノードＮは、第一のヘッダ情報を第一のヘッダ部に格納する。そして、ノードＮは、第一のヘッダ情報およびアプリケーションデータの完全性を検証する為の第一の値を、予め規定されたアルゴリズムに基づいて、算出する。そして、ノードＮは、第一の値を第一の値格納部２４に設定する。第一のヘッダ情報とアプリケーションデータと第二の値とを含むデータを、以下、アドホックデータと称する。
【００４４】
第一の値は、アドホックデータに対して所定の論理関係にある値である。例えば、第一の値は、アドホックデータを一定の長さの文字列に圧縮した値であって、ハッシュ値や、ＭＡＣ値、ＭＤＣ値などである。以下、本実施例では、第一の値は、アドホックデータ用ＭＡＣ鍵を用いて算出されたＭＡＣ値である。
【００４５】
つまり、本実施例において、ノードＮは、アドホックデータ用ＭＡＣ鍵を用いて、アドホックデータのＭＡＣ値を算出する。アドホックデータ用ＭＡＣ鍵は、少なくとも２つのノード間で共有される。２つのノードとは、ローカル送信元アドレスに対応するノードと、ローカル送信先アドレスに対応するノードである。ただし、アドホックデータ用ＭＡＣ鍵は、アプリケーションデータ用ＭＡＣ鍵と同一であって、全ノードで共有されている鍵であってもよい。
【００４６】
以上の通り、第一のヘッダ情報、第二のヘッダ情報、ペイロードデータ、第一の値、第二の値が、パケット２０内に予め割り当てられた各位置に設定され、ノードＮから他のノードへ送信される。
【００４７】
図１における、ノードＮｃにより取得された消費電力量のデータを、サーバＳまでアドホックネットワーク経由で送信する場合を例に、説明する。ノードＮｃは、取得した消費電力量のデータを含むペイロードデータを、ペイロードデータ部２３に設定する。ここで、ノードＮｃは、暗号鍵を用いて、ペイロードデータを暗号化する。
【００４８】
さらに、ノードＮｃは、グローバル送信元アドレスとして、消費電力量のデータを取得したノードＮｃのアドレスを、第二のヘッダ部２２に設定する。また、ノードＮｃは、グローバル送信先アドレスとしてシンクノードＳＮのアドレスを、第二のヘッダ部２２に設定する。
【００４９】
そして、ノードＮｃは、アプリケーションデータ用ＭＡＣ鍵を用いてアプリケーションデータに対するＭＡＣ値を算出し、第二の値格納部２５に設定する。続いて、ノードＮｃは、ローカル送信元アドレスとしてノードＮｃのアドレスを、第一のヘッダ部２１に設定する。ローカル送信先アドレスとしてノードＮｂのアドレスを、第一のヘッダ部２１に設定する。さらに、送信日時等の情報が、さらに第一のヘッダ部２１に記述されてもよい。
【００５０】
また、ノードＮｃは、予め生成されたルートＲ１に関するルーティングテーブルを参照し、送信先となるノードを特定する。ルーティングテーブルの詳細については、後述する。
【００５１】
次に、ノードＮｃは、アドホックデータ用ＭＡＣ鍵を用いて、アドホックデータに対するＭＡＣ値を算出し、第一の値格納部２４に設定する。例えば、ノードＮｃとノードＮｂとの間で予め共有した鍵が、アドホックデータ用ＭＡＣ鍵として採用される。そして、ノードＮｃは、パケット２０をノードＮｂへ送信する。
【００５２】
一方、パケットを受信したノードＮｂは、受信したパケットを検証する。ノードＮｂは、受信したパケット内のアドホックデータに対して、ノードＮｂが保持するアドホックデータ用ＭＡＣ鍵を用いて、ＭＡＣ値を算出する。そして、ノードＮｂは、パケット内の第一の値格納部に格納されているＭＡＣ値と、算出したＭＡＣ値とを比較する。
【００５３】
２つのＭＡＣ値が一致した場合、ノードＮｂが受信したパケットにおけるアドホックデータの完全性が肯定されたこととなる。よって、ノードＮｂは、受信したパケットを、さらに送信することを許容する。したがって、ノードＮｂは、ルートＲ１に従って第一のヘッダ情報を書き換えるとともに、新たに第一の値を設定し、ノードＮａへパケットを送信する。
【００５４】
パケット内の第一の値格納部に格納されているＭＡＣ値と、算出したＭＡＣ値とが一致しなかった場合、ノードＮｂは、受信したパケットにおけるアドホックデータの完全性が否定する。ここで、従来の手法によれば、ノードＮｂは、受信したパケットを破棄する。つまり、ノードＮｂに到達したパケットに含まれているペイロードデータは、サーバＳへ到達することはない。
【００５５】
しかし、本実施例によれば、ノードＮｂは、さらにアプリケーションデータの完全性を検証する。具体的には、ノードＮｂは、アプリケーションデータに対して、アプリケーションデータ用ＭＡＣ鍵を用いてＭＡＣ値を算出する。そして、ノードＮｂは、受信したパケット内の第二の値格納部に格納されているＭＡＣ値と、算出したＭＡＣ値とを比較する。
【００５６】
２つのＭＡＣ値が一致した場合、ノードＮｂが受信したパケットにおけるアプリケーションデータの完全性が肯定されたこととなる。よって、ノードＮｂは、受信したパケット内のアプリケーションデータについては、転送することを許容する。したがって、ノードＮｂは、アプリケーションデータに新たな第一のヘッダ情報を付与した後に、ルートＲ１に従って、ノードＮａへパケットを転送する。 
【００５７】
受信したパケット内の第二の値格納部に格納されているＭＡＣ値と、算出したＭＡＣ値が一致しなかった場合、ノードＮｂは、受信したパケットにおけるアプリケーションデータの完全性を否定する。つまり、ペイロードデータや第二のヘッダ情報の完全性が否定証明されたため、ノードＮｂは、受信したパケットを破棄する。
【００５８】
以上のように、パケットを送信するノードは、アプリケーションデータの完全性を検証する為の第二の値と、アドホックデータの完全性を検証する為の第一の値とを、パケットに設定することができる。さらに、パケットを送信するノードは、ペイロードデータを暗号化することができる為、秘匿性を確保することができる。
【００５９】
一方、パケットを受信したノードは、第一の値および第二の値に基づいて、アプリケーションデータの完全性が確認できた場合には、パケットを転送することを許容する。さらに、ノードは、アプリケーションデータの完全性が確認できなかった場合でも、アドホックデータについての完全性が確認できた時点で、パケットを転送することができる。
【００６０】
図４は、本実施例におけるノードの機能ブロック図である。なお、図４に示すノードは、送信用のパケットを生成する機能と、受信したパケットの完全性を検証する機能とを有する。
【００６１】
ノード１０は、通信部１１、制御部１２、記憶部１３、取得部１４を含む。通信部１１は、他のノードまたはシンクノードＳＮと無線通信する処理部である。例えば、通信部１１は、他のノードからパケットを受信する。また、通信部１１は、他のノードへパケットを送信する。
【００６２】
制御部１２は、ノード１０の各種処理を制御する処理部である。例えば、ノード１０が、パケットを送信する際に、送信用のパケットを生成する。また、ノード１０が、パケットを受信した場合に、パケットの完全性を検証する。
【００６３】
記憶部１３は、各種情報を記憶する。例えば、記憶部１３は、暗号化処理に用いられる暗号鍵、第一の値および第二の値の算出処理に用いられる鍵、ルーティングテーブルなどを記憶する。
【００６４】
取得部１４は、送信データを取得する処理部である。例えば、取得部１４は、ノード１０と通信可能なセンサから、消費電力量や温度等のデータを取得する。なお、取得されたデータは、ペイロードデータの一部として、他のノードまたはシンクノードへ送信される。
【００６５】
さらに、制御部１２は、生成部１２１、算出部１２２、暗号化部１２３、検証部１２４、復号化部１２５を含む。生成部１２１は、送信用のパケットを生成する処理部である。例えば、生成部１２１は、記憶部１３に記憶されたルーティングテーブルを参照し、送信先のノードを特定する。さらに生成部１２１は、ローカル送信先アドレスに、特定したノードのアドレスを設定する。
【００６６】
算出部１２２は、少なくとも第一の値を算出する処理部であって、第二の値を算出する場合もある。算出部１２２は、アドホックデータに対して所定の論理関係を有する第一の値を算出する。本実施例においては、例えば、算出部１２２は、アドホックデータ用ＭＡＣ鍵を用いて、アドホックデータに対するＭＡＣ値を算出する。
【００６７】
また、取得部１４が取得したデータをペイロードデータの一部として含むパケットを生成する場合は、アプリケーションデータに対して所定の論理関係を有する第二の値を算出する。本実施例においては、例えば、算出部１２２は、アプリケーションデータ用ＭＡＣ鍵を用いて、アプリケーションデータに対するＭＡＣ値を算出する。
【００６８】
なお、第一の値に係る所定の論理関係と、第二の値に関する所定の論理関係とは、同一であっても異なってもよい。したがって、アドホックデータ用ＭＡＣ鍵と、アプリケーションデータ用ＭＡＣ鍵は同一であっても異なっても良い。本実施例においては、両者は異なるとして説明する。
【００６９】
暗号化部１２３は、必要に応じて、ペイロードデータの暗号化処理を実行する。例えば、暗号化部１２３は、ペイロードデータを含むアプリケーションデータを、暗号鍵を用いて暗号化する。
【００７０】
検証部１２４は、通信部１１は他のノードからパケットを受信した場合に、パケットの完全性を検証するとともに、検証の結果におうじて、パケットの転送を制御する処理部である。例えば、検証部１２４は、パケット内のアドホックデータの完全性を、パケット内の第一の値格納部に格納された第一の値を用いて検証する。つまり、受信したパケット内のアドホックデータに対して第一の論理関係に当たる値が、受信したパケット内に格納される第一の値と一致するか否かを検証する。一致する場合には、受信したパケット内のアドホックデータの完全性が証明される。したがって、検証部１２４は、パケットの転送を許可する。
【００７１】
本実施例においては、検証部１２４は、アドホックデータ用ＭＡＣ鍵を用いて、アドホックデータを対象としたＭＡＣ値を算出する。そして、算出したＭＡＣ値と、第一の値格納部に格納されているＭＡＣ値とを比較する事で、アドホックデータの完全性を検証する。
【００７２】
また、アドホックデータの完全性が否定された場合には、検証部１２４は、さらにアプリケーションデータの完全性を、パケット内の第二の値格納部に格納された第二の値を用いて、検証する。つまり、受信したパケット内のアプリケーションデータに対して第二の論理関係に当たる値が、受信したパケット内に格納される第二の値と一致するか否かを検証する。一致する場合には、受信したパケット内のアプリケーションデータの完全性が証明される。したがって、検証部１２４は、パケットの転送を許可する。
【００７３】
なお、アドホックデータの完全性が否定された場合にさらにアプリケーションデータの完全性を検証する転送優先モードと、アドホックデータの完全性のみを検証するセキュリティ優先モードとを、検証部１２４は、選択可能としてもよい。
【００７４】
例えば、検証部１２４は、転送優先モードとセキュリティ優先モードのいずれかであるかを判定し、転送優先モードである場合に、第一の値および第二の値を用いた検証を実施する。アドホックデータの完全性が否定された場合でも、アプリケーションデータの完全性が肯定された場合に、アプリケーションデータの送信を許容することで、ノード１０は、パケットの送信を優先することができる。
【００７５】
一方、セキュリティ優先モードである場合は、検証部１２４は、アドホックデータの完全性が否定された場合は、当該パケットを破棄する。このように、アドホックデータの完全性が証明されない限り、送信を許容しないことで、セキュリティを向上させることができる。
【００７６】
いずれかのモードを選択可能とすることにより、本実施例のノード１０は、必要に応じて、送信を優先する場合と、セキュリティを優先する場合を切り替えることができる。
【００７７】
次に、復号化部１２５は、必要に応じて、暗号化されたペイロードデータを復号する。例えば、復号化部１２５は、パケット内の第二のヘッダ部を参照し、グローバル送信先アドレスが自ノードのアドレスであるか判定する。グローバル送信先アドレスが自ノードのアドレスである場合は、復号化部１２５は、アプリケーションデータを、復号鍵で復号する。
【００７８】
以上の通り、取得部１４がペイロードデータとして送信するデータを取得した場合に、制御部１２は、生成部１２１、算出部１２２、暗号化部１２３として機能する。一方、他のノードから受信したパケットに含まれるペイロードデータを転送する場合は、制御部１２は、生成部１２１、算出部１２２、検証部１２４として機能する。
【００７９】
また、他のノードから受信したパケットが自ノード宛である場合は、制御部１２は、検証部１２４、復号化部１２５として機能する。
【００８０】
次に、記憶部１３について、説明する。記憶部１３は、ルーティングテーブル記憶部１３１と鍵情報記憶部１３２とを含む。
【００８１】
図５は、ルーティングテーブル記憶部１３１が記憶するルーティングテーブルのデータ構成例である。ルーティングテーブルは、グローバル送信先アドレスとローカル送信先アドレスと評価値とを対応付けて記憶する。例えば、図５は、ノードＮｃが有するルーティングテーブルを示している。
【００８２】
グローバル送信先アドレスは、最終的に、パケットを受信する装置のアドレスの情報である。グローバル送信先アドレスには、他のノードＮのアドレスの情報またはシンクノードＳＮのアドレスの情報が記憶される。
【００８３】
ローカル送信先アドレスは、送信されたパケットを直接受信する装置のアドレスの情報である。ローカル送信先アドレスには、他のノードＮのアドレスの情報またはシンクノードＳＮのアドレスの情報が記憶される。
【００８４】
評価値は、グローバル送信先アドレスとローカル送信先アドレスとの組み合わせにおいて、直近のパケットの送信先を、いずれのローカル送信先アドレスとすることが好ましいかを示す値である。評価値は、周囲のノードとの通信強度等に基づいて算出される。評価値は、従来のルーティングと同様の手法で得られる。
【００８５】
図５の例では、グローバル送信先アドレスが「ＳＮのアドレス」である場合には、評価値が最も高い「Ｎｂのアドレス」がローカル送信先アドレスとして特定される。図１の例では、各ノードのルーティングテーブルにおいて、もっとも評価値の高いローカル送信先アドレスを、採用した結果、ルートＲ１のようなルートとなることを示している。
【００８６】
例えば、ノードＮｃにおいて取得部１４で取得したデータを、シンクノードＳＮを経由してサーバまで送信する為に、まず、生成部１２１は、グローバス送信先アドレスとして、「ＳＮのアドレス」を第二のヘッダ部に設定する。さらに、生成部１２１は、ルーティングテーブルを参照し、「ＳＮのアドレス」に対応する複数のローカル送信先アドレスの内、もっとも評価値が高いノードのアドレス「Ｎｂのアドレス」を特定する。そして、生成部１２１は、特定した「Ｎｂのアドレス」をローカル送信先アドレスとして、第一のヘッダ部に設定する。
【００８７】
図６は、鍵情報記憶部１３２が備える各種データテーブルの例である。鍵情報記憶部１３２は、アドホックデータ用ＭＡＣ鍵管理テーブル、アプリケーションデータ用ＭＡＣ鍵管理テーブル、暗号鍵管理テーブル、検証用ＭＡＣ鍵管理テーブル、復号鍵管理テーブルを記憶する。 
【００８８】
図６Ａは、アドホックデータ用ＭＡＣ鍵管理テーブルのデータ構成例である。アドホックデータ用ＭＡＣ鍵管理テーブルは、ローカル送信先アドレスと、アドホックデータ用ＭＡＣ鍵の情報とを対応付けて記憶する。ローカル送信先アドレスは、パケット内の第一のヘッダ部に設定されるローカル送信先アドレスである。なお、ローカル送信先アドレスの代わりに、ノードを一意に識別するＩＤなどであってもよい。
アドホック用ＭＡＣ鍵は、ローカル送信先アドレスへパケットを送信する際に利用されるＭＡＣ鍵である。例えば、生成部１２１により、ローカル送信先アドレスとして、ノードＮｂのアドレスが特定された場合、算出部１２２は、アドホックデータ用ＭＡＣ鍵管理テーブルから、ローカル送信先アドレス「Ｎｂのアドレス」に対応するアドホックデータ用ＭＡＣ鍵「Ｋｅｙ＿Ｎｂ」を取得する。そして、算出部１２２は、選択したアドホックデータ用ＭＡＣ鍵を用いて、第一の値となるＭＡＣ値を算出する。
【００８９】
図６Ｂは、アプリケーションデータ用ＭＡＣ鍵管理テーブルのデータ構成例である。アプリケーションデータ用ＭＡＣ鍵管理テーブルは、アプリケーションデータ用ＭＡＣ鍵の情報を記憶する。算出部１２２は、アプリケーションデータ用ＭＡＣ鍵をもちいて、アプリケーションデータに対するＭＡＣ値を算出する。なお、アプリケーションデータ用ＭＡＣ鍵管理テーブルは、グローバル送信先アドレスに応じて、複数のアプリケーションデータ用ＭＡＣ鍵を記憶してもよい。
【００９０】
図６Ｃは、暗号鍵管理テーブルのデータ構成例である。暗号鍵管理テーブルは、暗号鍵の情報を記憶する。なお、暗号鍵管理テーブルは、グローバル送信先アドレスに応じて、複数の暗号鍵を記憶してもよい。
【００９１】
図６Ｄは、検証用ＭＡＣ鍵管理テーブルのデータ構成例である。検証用ＭＡＣ鍵管理テーブルは、検証用ＭＡＣ鍵の情報を記憶する。検証用ＭＡＣ鍵は、パケットを受信した場合に、受信したパケット内のアドホックデータの完全性を検証する為に利用するＭＡＣ鍵である。
【００９２】
なお、本実施例においては、アプリケーションデータの完全性を検証する為には、アプリケーションデータ用ＭＡＣ鍵を利用することができる。一方、アドホックデータの完全性を検証する為には、パケットを送信したノードで採用されたアドホックデータ用ＭＡＣ鍵を用いる必要がある。 
【００９３】
上記のとおり、本実施例においては、パケットの送信側のノードは、パケットのローカル送信先に応じたアドホックデータ用ＭＡＣ鍵を利用して、第一の値であるＭＡＣ値を算出する。したがって、検証用ＭＡＣ鍵管理テーブルは、自ノードから他ノードへ共有したアドホックデータ用ＭＡＣ鍵を記憶する。
【００９４】
事前に、ノードＮｂは、ノードＮｂの検証用ＭＡＣ鍵をノードＮｃ等の周囲のノードに共有する。ノードＮｂは、自身の鍵情報記憶部１３２の検証用ＭＡＣ鍵管理テーブルに、他のノードＮｃと共有したＭＡＣ鍵を、検証用ＭＡＣ鍵として記憶する。
【００９５】
一方、ノードＮｃは、ノードＮｂのアドホックデータ用ＭＡＣ鍵を、ノードＮｂのアドレスと対応付けて格納する。
【００９６】
なお、図６Ｄは、ノードＮｃにおける検証用ＭＡＣ鍵管理テーブルであり、ノードＮｃが他のノードへ共有したアドホックデータ用ＭＡＣ鍵である「Ｋｅｙ＿Ｎｃ」が、検証用ＭＡＣ鍵として記憶されている。
【００９７】
図６Ｅは、復号鍵管理テーブルのデータ構成例である。復号鍵管理テーブルは、暗号化されたペイロードデータを復号する為の情報を記憶する。なお、復号鍵管理テーブルは、グローバル送信元アドレスに応じて、複数の復号鍵を記憶してもよい。また、鍵情報記憶部１３２は、復号鍵管理テーブルを有さず、暗号鍵管理テーブルに記憶された暗号鍵を用いて、復号を行う事としてもよい。 
【００９８】
図７は、パケットの生成処理のフローチャートである。まず、取得部１４は、データを取得したかを判定する（Ｏｐ．１）。例えば、センサから出力値を受信することで、取得部１４はデータを取得する。
【００９９】
取得部１４がデータを取得していない場合は（Ｏｐ．１  ＮＯ）、生成処理を終了する。一方、取得部１４がデータを取得した場合は（Ｏｐ．１  ＹＥＳ）、暗号化部１２３は、取得したデータを含むペイロードデータを暗号化する（Ｏｐ．２）。そして、暗号化されたペイロードデータは、ペイロードデータ部に格納される。なお、ペイロードデータには、取得したデータ以外に、データを取得した時刻や、期間などの情報が含まれてもよい。
【０１００】
生成部１２１は、第二のヘッダ情報を、パケットの第二のヘッダ部に格納する（Ｏｐ．３）。例えば、生成部１２１は、グローバル送信元アドレスとして、自ノードのアドレスを設定する。さらに、生成部１２１は、グローバル送信先アドレスとして、シンクノードＳＮのアドレスを設定する。
【０１０１】
次に、算出部１２２は、アプリケーションデータを対象として、アプリケーションデータ用ＭＡＣ鍵を用いて、第二の値となるＭＡＣ値を算出する（Ｏｐ．４）。アプリケーションデータは、第二のヘッダ部に格納された第二のヘッダ情報と、ペイロードデータ部に格納されたペイロードデータとを含む。算出されたＭＡＣ値は、第二の値格納部に格納される。
【０１０２】
生成部１２１は、第一のヘッダ情報を、パケットの第一のヘッダ部に格納する（Ｏｐ．５）。例えば、生成部１２１は、ローカル送信元アドレスとして、自ノードのアドレスを設定する。さらに、生成部１２１は、ルーティングテーブルを参照し、ローカル送信先アドレスを設定する。また、パケットの送信日時や、転送回数などの情報も第一のヘッダ部に格納されても良い。
【０１０３】
例えば、生成部１２１は、ルーティングテーブル記憶部１３１を参照し、グローバル送信先アドレスと対応付けられた複数のローカル送信先アドレスの内、もっとも評価値が高いローカル送信先アドレスを特定する。生成部１２１は、特定されたローカル送信先アドレスを、第一のヘッダ部２１に設定する。 
【０１０４】
次に、算出部１２２は、アドホックデータを対象として、アドホックデータ用ＭＡＣ鍵を用いて、第一の値となるＭＡＣ値を算出する（Ｏｐ．６）。アドホックデータは、第一のヘッダ部に格納された第一のヘッダ情報と、第二のヘッダ部に格納された第二のヘッダ情報と、ペイロードデータ部に格納されたペイロードデータとを含む。算出されたＭＡＣ値は、第一の値格納部に格納される。
【０１０５】
具体的には、算出部１２２は、アドホックデータ用ＭＡＣ鍵管理テーブルから、先に特定されたローカル送信先アドレスに対応するアドホックデータ用ＭＡＣ鍵を取得する。そして、取得したアドホックデータ用ＭＡＣ鍵を用いて、ＭＡＣ値を算出する。
【０１０６】
そして通信部１１は、生成されたパケットを、他のノードへ送信する（Ｏｐ．７）。
【０１０７】
次に、図８は、パケットを受信したノードにより実行される検証処理のフローチャートである。
【０１０８】
通信部１１は、パケットを受信する（Ｏｐ．１０）。そして、検証部１２４は、受信したパケットの第一の値格納部に格納されている第一の値を用いて、アドホックデータの完全性を検証する（Ｏｐ．１１）。
【０１０９】
具体的には、検証部１２４は、検証用ＭＡＣ鍵を用いて、受信したパケット内のアドホックデータに対するＭＡＣ値を算出する。そして、検証部１２４は、受信したパケット内の第一の値格納部に格納されているＭＡＣ値と、算出したＭＡＣ値とを比較する。両者が一致した場合は、受信したパケット内のアドホックデータは、他のノードから当該パケットが送信された時点と同一であることが証明される。つまり、アドホックデータの完全性が肯定される。
【０１１０】
一方、両者が一致しなかった場合は、受信したパケット内のアドホックデータは、他のノードから当該パケットが送信された時点と同一であることが否定される。つまり、アドホックデータの完全性が否定される。
【０１１１】
また、本実施例においては、ローカル送信元となるノードは、ローカル送信先となるノードに応じて、アドホックデータ用ＭＡＣ鍵を選択する。よって、ローカル送信先となったノードにおいて、パケット内の第一の値格納部に格納されているＭＡＣ値と算出したＭＡＣ値とが一致しなかった場合は、検証用ＭＡＣ鍵とは異なるアドホックデータ用ＭＡＣ鍵が、ローカル送信元ノードで使用された可能性を検知できる。さらには、ローカル送信先アドレスとして指定されたノード以外のノードが、当該パケットを受信した可能性を検知できる。
【０１１２】
アドホックデータの完全性が証明された場合は（Ｏｐ．１１  ＹＥＳ）、検証部１２４は、パケット内のグローバル送信先アドレスが、自ノードのアドレスと一致するか判定する（Ｏｐ．１２）。一致した場合は（Ｏ．１２  ＹＥＳ）、復号化部１２５は、復号鍵管理テーブルから復号鍵を取得し、受信したパケット内のペイロードデータ部に格納されたペイロードデータを、復号鍵で復号する（Ｏｐ．１３）。そして、ノード１０は、検証処理を終了する。
【０１１３】
なお、Ｏｐ．１２でＹＥＳの判定がなされる場合は、例えば、サーバから特定のノードに向けて送信されたパケットが、特定のノードまで到達した場合である。通常、各ノードＮの取得部１４が取得したデータを含むパケットを、サーバへ送信する場合は、グローバル送信先アドレスは、サーバと直接通信可能なシンクノードのアドレスとなる。 
【０１１４】
一方、パケット内のグローバル送信先アドレスが、自ノードのアドレスと一致しなかった場合（Ｏｐ．１２  ＮＯ）、生成部１２１および算出部１２２は、パケット内のデータの一部を更新する（Ｏｐ．１４）。例えば、生成部１２１は、第一のヘッダ部に、新たな第一のヘッダ情報を設定する。さらに、算出部１２２が算出した第一の値を、第一の値格納部２４に格納する。 
【０１１５】
具体的には、生成部１２１は、ローカル送信元アドレスに、自ノードのアドレスを設定するとともに、ローカル送信先アドレスに、次の送信先となるノードのアドレスを設定する。算出部１２２は、新たな第一のヘッダ情報と、予めパケット内に含まれているアプリケーションデータとに基づいて、第一の値を算出する。そして、生成部１２１は、算出された第一の値を、第一の値格納部に格納する。
【０１１６】
通信部１１は、更新されたパケットを転送する（Ｏｐ．１５）。
【０１１７】
次に、Ｏｐ．１１において、アドホックデータの完全性が証明されなかった場合（Ｏｐ．１１  ＮＯ）、検証部１２４は、転送優先モードであるか否かを判定する（Ｏｐ．１６）。転送優先モードとは、アドホックデータの完全性が否定された場合にさらにアプリケーションデータの完全性を検証するモードであって、パケットの転送を優先するモードである。
【０１１８】
転送優先モードである場合は（Ｏｐ．１６ＹＥＳ）、検証部１２４は、受信したパケット内のアプリケーションデータの完全性を検証する（Ｏｐ．１７）。
【０１１９】
具体的には、検証部１２４は、アプリケーションデータ用ＭＡＣ鍵を用いて、受信したパケット内のアドホックデータに対するＭＡＣ値を算出する。なお、本実施の形態においては、パケットの送信元であるノードにおいて、アプリケーションデータ用データは、予め全ノードで共有されているアプリケーションデータ用ＭＡＣ鍵が用いられる。よって、パケットを受信したノードは、予め全ノードで共有されているアプリケーションデータ用ＭＡＣ鍵を、アプリケーションデータの検証に用いる。
【０１２０】
そして、検証部１２４は、受信したパケット内の第二の値格納部に格納されているＭＡＣ値と、算出したＭＡＣ値とを比較する。両者が一致した場合は、受信したパケット内のアプリケーションデータは、他のノードから当該パケットが送信された時点と同一であることが証明される。つまり、アプリケーションデータの完全性が肯定される。
【０１２１】
一方、両者が一致しなかった場合は、受信したパケット内のアプリケーションデータは、他のノードから当該パケットが送信された時点と同一であることが否定される。つまり、アプリケーションデータの完全性が否定される。
【０１２２】
アプリケーションデータの完全性が証明された場合（Ｏｐ．１７  ＹＥＳ）、検証部１２４は、処理をＯｐ．１２へ進める。なお、以降の処理は、先に述べたとおりである。
【０１２３】
一方、アプリケーションデータの完全性が証明されなかった場合（Ｏｐ．１７ＮＯ）、検証部１２４は、受信したパケットを破棄する（Ｏｐ．１８）。また、Ｏｐ．１６において、ノード１０は、転送優先モードでない場合（Ｏｐ．１６ＮＯ）、パケットを破棄する（Ｏｐ．１８）。つまり、アドホックデータの完全性のみを検証するセキュリティ優先モードである場合は、検証部１２４は、アドホックデータが完全でないパケットの転送を許容しないことで、アドホックネットワーク全体のセキュリティを保つ。 
【０１２４】
以上の処理により、ノード１０がパケットを受信した場合に、ノード１０は、アドホックデータの検証とアプリケーションデータの検証とを個別に行うことができる。つまり、ノード１０は、アドホックデータの完全性を検証した後、さらにアプリケーションデータの完全性を検証することができる。
【０１２５】
よって、アドホックデータの完全性が証明されなかった場合でも、ノード１０は、さらにアプリケーションデータの完全性を検証することで、例えば、パケット内のペイロードデータを、グローバル送信先アドレスへ到達させることを優先することができる為、パケットがむやみに破棄されることを防ぐことができる。
【０１２６】
例えば、第一のヘッダ情報に含まれる、送信日時や転送回数等の付加情報が一部、何らかの理由で送信中に書き変わってしまった場合でも、パケットを受信したノードで、当該パケットが破棄されることを防ぐことができる。また、第一のヘッダ情報に含まれる、ローカル送信元アドレスやローカル送信先アドレスが書き変わってしまった場合でも、同様である。
【０１２７】
一方、パケットを送信する場合、各ノード１０は、第一の値として、ローカル送信先のノードに応じたアドホックデータ用ＭＡＣ鍵を選択することができる。よって、セキュリティ優先モードが各ノードに設定されている場合は、パケットを受信したノードは、自身の検証用ＭＡＣ鍵を予め共有していないノードから送信されてきたパケットを破棄することができる。例えば、不正なノードが、パケットを生成および送信した場合には、不正ノードは、送信先となるノードのアドホックデータ用ＭＡＣ鍵を知らない。よって、パケット内に設定されたＭＡＣ値と、パケットを受信したノードが算出したＭＡＣ値は一致しないため、各ノードは、不正なノードからのパケットを破棄することができる。
【０１２８】
次に、アドホックネットワーク内を、パケットが送信される流れを、シーケンス図を用いて説明する。図９は、アドホックネットワーク内を、パケットが送信される流れを示すシーケンス図である。また、図９は、図１のノードＮｃが、アドホックネットワークを用いて、サーバＳへペイロードデータを送信する場合のシーケンス図である。図１のルートＲ１に従って、ノードＮｃが生成したペイロードデータを含むパケットが、ノードＮｂおよびＮａを経由して、シンクノードＳＮまで送信される。その後、シンクノードＳＮとサーバＳとが通信する事で、ペイロードデータは、サーバＳにより受信される。
【０１２９】
まず、ノードＮｃは、センサ等からデータを取得する（Ｏｐ．１００）。次に、ノードＮｃは、取得したデータを含むペイロードデータを生成し、ペイロードデータを含むパケットを生成する（Ｏｐ．１０１）。なお、パケットを生成する処理は、図７に示した通りである。 
【０１３０】
続いて、ノードＮｃは、生成したパケットを送信する（Ｏｐ．１０２）。ノードＮｃのように、パケットを生成するノードを第一のノードと称する。各ノードが、第一のノードとして機能する場合は、各ノードは、図４における、通信部１１、生成部１２１、算出部１２２、暗号化部１２３、記憶部１３を有する。
【０１３１】
次に、ノードＮｃと通信可能なノードＮｂは、パケットを受信する（Ｏｐ．１０３）。そして、ノードＮｂは、パケット内に含まれる第一の値を用いて、パケット内のアドホックデータの完全性を検証するとともに、必要に応じて、第二の値を用いて、アプリケーションデータの完全性を検証する（Ｏｐ．１０４）。 
【０１３２】
ノードＮｂは、受信したパケット内のアプリケーションデータの完全性が証明された場合、当該アプリケーションデータを含む、新たなパケットを生成し、パケットを転送する（Ｏｐ．１０５）。なお、ノードＮｂにより転送されたパケットは、ノードＮｂと通信可能なノードＮａにより受信される。そして、ノードＮａは、ノードＮｂと同様の処理を行う。
【０１３３】
ただし、ノードＮｂおよびノードＮａは、受信したパケット内のアドホックデータの完全性が証明されない場合であって、かつアプリケーションデータの完全性が証明されない場合は、受信したパケットを破棄する。
【０１３４】
ノードＮｂやＮａのように、パケットを検証して、さらに転送するノードを第二のノードと称する。各ノードが第二のノードとして機能する場合は、各ノードは、図４における、通信部１１、生成部１２１、算出部１２２、検証部１２４、記憶部１３、取得部１４を有する。なお、図９には示していないが、各ノードが最終送信先アドレスに対応するノードである場合は、各ノードは、図４における、通信部１１、検証部１２４、復号化部１２５、記憶部１３を有する。 
【０１３５】
次に、シンクノードＳＮは、パケットを受信する（Ｏｐ．１０６）。なお、シンクノードＳＮは、ノード１０と同様に、受信したパケットの検証を行う（Ｏｐ．１０７）。例えば、シンクノードは、図８に示すノード１０の検証処理フローを実行する。つまり、シンクノードＳＮは、少なくとも、ノード１０の処理部の内、通信部１１、生成部１２１、検証部１２４、復号化部１２５、記憶部１３を有する。
【０１３６】
シンクノードＳＮは、受信したパケット内のペイロードデータを、復号する。そして、復号したペイロードデータを含むアプリケーションデータを、サーバＳへ送信する（Ｏｐ．１０９）。なお、ペイロードデータは、暗号化されたままサーバＳへ送信されてもよい。その場合は、シンクノードＳＮは、暗号化されたペイロードデータを含むアプリケーションデータを、サーバＳへ送信する。そして、サーバＳは、アプリケーションデータを受信する（Ｏｐ．１１０）。
【０１３７】
以上の処理によって、送信ルートを形成するノードＮｂおよびＮａにおいて、アプリケーションデータの完全性が証明されたパケットは、グローバル送信先であるシンクノードまで到達する。したがって、ノードＮｃで取得されたデータを含むペイロードデータは、アプリケーションデータの一部として、シンクノードを経由して、サーバＳにより受信される。つまり、サーバは、アプリケーションデータに含まれる、グローバル送信元アドレスおよびペイロードデータを取得することができる。
【０１３８】
（実施例２）
実施例２は、パケットがアドホックネットワークを送信される中で、不正なノードにパケットが取得される場合を想定し、よりセキュリティを高くするための実施例である。
【０１３９】
図１０は、実施例２におけるパケット生成処理のフローチャートである。なお、実施例１と同様の処理については、図７と同じ符号を付し、説明を省略する。また、実施例２における各ノードの機能構成は、実施例１と同様である。
【０１４０】
実施例２において、算出部１２２が第二の値を算出した後、暗号化部１２３は、アプリケーションデータと第二の値とを、暗号化する（Ｏｐ．８）。なお、予め設定されたアルゴリズムにしたがって、暗号化は実行される。
【０１４１】
例えば、本実施例においては、暗号化部１２３は、ローカル送信先のアドホックデータ用ＭＡＣ鍵を用いて、アプリケーションデータおよび第二の値を暗号化する。なお、アドホックデータ用ＭＡＣ鍵は、予め正規のノード同士で共有される。また、全ノードで共有しているアプリケーションデータ用ＭＡＣ鍵や、他の暗号鍵が、暗号鍵として用いられても良い。
【０１４２】
そして、生成部１２１が第一のヘッダ情報を生成した後、算出部１２２は、暗号化されたアプリケーションデータと、暗号化された第二の値と、第一のヘッダ情報とを対象として、第一の値を算出する（Ｏｐ．９）。その後、通信部１１は、パケットを送信する（Ｏｐ．７）。
【０１４３】
以上の通り、実施例２においては、ペイロードデータ以外に、アプリケーションデータも暗号化される。したがって、グローバル送信元アドレスおよびグローバル送信先アドレスも、暗号化される。よって、本実施例によれば、不正なノードを操作する第三者に、グローバル送信元アドレスやグローバル送信先アドレスが取得されることを防ぐことができる。
【０１４４】
図１１は、実施例２におけるパケットの検証処理のフローチャートである。なお、実施例１と同様の処理については、図８と同じ符号を付し、説明を省略する。
【０１４５】
まず、Ｏｐ．１１においてアドホックデータの完全性が証明された場合（Ｏｐ．１１  ＹＥＳ）、復号化部１２５は、暗号化されたアプリケーションデータおよび暗号化された第二の値を、復号する（Ｏｐ．１９）。なお、予め設定されたアルゴリズムにしたがって、復号化は実行される。
【０１４６】
例えば、本実施例においては、パケットを送信したノードは、ローカル送信先のアドホックデータ用ＭＡＣ鍵を用いて、アプリケーションデータおよび第二の値を暗号化する。したがって、パケットを受信したノードは、予めパケットを送信したノードと共有した検証用ＭＡＣ鍵を利用して、復号化を行う。また、復号化できない場合は、復号化部１２５は、受信したパケットを破棄する。
【０１４７】
続いて、復号化されたアプリケーションデータを参照することで、検証部１２４は、Ｏｐ．１２を実行する。なお、以降の処理は、実施例１と同様である。
【０１４８】
一方、アドホックデータの完全性が証明されなかった場合（Ｏｐ．１１  ＮＯ）であって、さらに、転送優先モードである場合（Ｏｐ．１６  ＹＥＳ）、復号化部１２５は、暗号化されたアプリケーションデータおよび暗号化された第二の値を、復号する（Ｏｐ．２０）。なお、予め設定されたアルゴリズムにしたがって、復号化は実行される。また、復号化できない場合は、受信したパケットを破棄する。
【０１４９】
そして、検証部１２４は、復号化された第二の値を参照することで、Ｏｐ．１７を実行する。なお、以降の処理は、実施例１と同様である。
【０１５０】
以上の処理により、パケット内のアプリケーションデータを暗号化した状態で、パケットが送信される。したがって、不正なノードにパケットが搾取された場合であっても、アプリケーションデータが取得されることを防ぐことができる。
【０１５１】
（実施例３）
図１２は、ノードＮのハードウェア構成例である。ノード２００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０２と、フラッシュメモリ２０３と、インターフェース（Ｉ／Ｆ）２０４と、暗号化回路２０５と、センサ２０６と、バス２０７とを備えている。ＣＰＵ２０１乃至センサ２０６は、バス２０７よってそれぞれ接続されている。
【０１５２】
ＣＰＵ２０１は、ノード２００の全体の制御を司る。ＣＰＵ２０１は、ＲＡＭ２０２に展開されたプログラムを実行することにより、通信部１１、制御部１２、取得部１４などとして機能する。
【０１５３】
ＲＡＭ２０２は、ＣＰＵ２０１のワークエリアとして使用される。フラッシュメモリ２０３は、プログラムや、各種鍵の情報、ルーティングテーブルを記憶している。なお、フラッシュメモリ２０３は、記憶装置１３の一例である。プログラムには、例えば、フローチャートに示したノードにおける各処理を実行させる為のプログラムが含まれる。例えば、パケットの生成処理およびパケットの検証処理を、ノードに実行させる為の制御プログラムが、フラッシュメモリ２０３に記憶される。
【０１５４】
フラッシュメモリ２０３に記憶されたプログラムを、ＲＡＭ２０２に展開し、ＣＰＵ２０１が実行することで、ノード２００は、図４に記載した各種処理部として機能する。また、ノード２００は、図７および図８の処理を実行する。
【０１５５】
Ｉ／Ｆ２０４は、マルチホップ通信によりパケットを送受信する。Ｉ／Ｆ２０４は、通信部１１の一例である。
【０１５６】
暗号化回路２０５は、データを暗号化する場合に暗号鍵によりデータを暗号化する回路である。例えば、パケットを暗号化して送信する場合は、暗号化回路２０５が機能する。暗号化をソフトウェア的に実行する場合は、暗号化回路２０５に相当するプログラムをフラッシュメモリ２０３に記憶させておくことで、暗号化回路２０５は不要となる。
【０１５７】
センサ２０６は、センサ２０６固有のデータを検出する。たとえば、温度、湿度、水位、降水量、風量、音量、電力使用量、時間、時刻、加速度など、測定対象にあったデータを検出する。なお、ＣＰＵ２０１が、取得部１４として機能する際には、センサからデータを取得する。
【符号の説明】
【０１５８】
１０      ノード
１１      通信部
１２      制御部
１３      記憶部
１４      取得部
２００    ノード
２０１    ＣＰＵ
２０２    ＲＡＭ
２０３    フラッシュメモリ
２０４    Ｉ／Ｆ
２０５    暗号化回路
２０６    センサ
２０７    バス
【図１】
0005962750.tif 000002
【図２】
0005962750.tif 000003
【図３】
0005962750.tif 000004
【図４】
0005962750.tif 000005
【図５】
0005962750.tif 000006
【図６】
0005962750.tif 000007
【図７】
0005962750.tif 000008
【図８】
0005962750.tif 000009
【図９】
0005962750.tif 000010
【図１０】
0005962750.tif 000011
【図１１】
0005962750.tif 000012
【図１２】
0005962750.tif 000013