(57)【要約】【課題】不正なパケットの検出処理をアドホックネットワークのノードに効率的に分散することを課題とする。【解決手段】ノードは、カウンタ値とパケットが不正か否かを検証する処理を実行するか否かを定めた検証情報とを対応づけて記憶する記憶部と、メッセージと、転送先アドレスおよびカウンタ値を含むヘッダと、パケットが不正か否かを検証するための符号情報とを含むパケットを受信すると、該受信したパケットに含まれるカウンタ値に対応する該メモリに記憶された該カウンタ値に対応付けられた該検証情報に基づき検証処理を実行するか否かを判断する判断部と、該検証処理を実行すると判別した場合に受信した該パケットの検証処理を実行してカウンタ値を初期値に変更したパケットを生成する生成部と、該転送先アドレスに該生成部で生成された該パケットを送信する送信部とを有する。
2013072973.tif 000002
【特許請求の範囲】
【請求項１】
マルチホップ通信によりパケットを送受信するアドホックネットワーク内のノードであって、
転送元のノードからのパケットを受信する受信部と、
パケットが不正か否かを検証する処理を実行するか否かを決定するために用いるカウンタ値と、カウンタ値ごとにパケットが不正か否かを検証する処理を実行するか否かを定めた検証情報とを対応づけて記憶する記憶部と、
メッセージと、転送先アドレスおよびカウンタ値を含むヘッダと、パケットが不正か否かを検証するために用いる符号情報とを含むパケットを前記受信部が受信すると、該受信したパケットに含まれるカウンタ値に対応する該記憶部に記憶された該カウンタ値に対応付けられた該検証情報に基づき検証処理を実行するか否かを判断する判断部と、
該検証処理を実行すると判別した場合に受信した該パケットの検証処理を実行してカウンタ値を初期値に変更したパケットを生成する生成部と、
該転送先アドレスに該生成部で生成された該パケットを送信する送信部と
を有することを特徴とする通信ノード。
【請求項２】
該判断部は、該検証処理を実行しないと判断した場合、カウンタ値を変更したパケットを生成することを特徴とする請求項１に記載の通信ノード。
【請求項３】
該検証情報は、該カウンタ値と検証処理を実行する確率とを関連付けた情報であることを特徴とする請求項１または請求項２に記載の通信ノード。
【請求項４】
自ノードの負荷量を検出する検出部を更に有し、
該判断部は、該検出部で検出された該負荷量が所定量よりも高い場合に、カウンタ値に基づく検証処理を実行するか否かの判断を行なうことを特徴とする請求項１または請求項２に記載の通信ノード。
【請求項５】
マルチホップ通信によりパケットを送受信するアドホックネットワーク内のノードによる通信制御方法であって、
メッセージと、転送先アドレスおよびパケットが不正か否かを検証する処理を実行するか否かを決定するために用いるカウンタ値を含むヘッダと、パケットが不正か否かを検証するために用いる符号情報とを含むパケットを受信し、
カウンタ値に予め対応づけて記憶された、パケットが不正か否かを検証する処理を実行するか否かを定めた検証情報に基づき、該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断し、
該検証処理を実行すると判断した場合に受信した該パケットの検証処理を実行してカウンタ値を初期値に変更したパケットを生成し、
該転送先アドレスに生成した該パケットを送信する
ことを特徴とする通信制御方法。
【請求項６】
該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断する際に、該検証処理を実行しないと判断した場合、カウンタ値を変更したパケットを生成することを特徴とする請求項５に記載の通信制御方法。
【請求項７】
該検証情報は、該カウンタ値と検証処理を実行する確率とを関連付けた情報であることを特徴とする請求項５または請求項６に記載の通信制御方法。
【請求項８】
該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断する際に、該検出された該負荷量が所定量よりも高い場合に、カウンタ値に基づく検証処理を実行するか否かの判断を行なうことを特徴とする請求項５または請求項６に記載の通信制御方法。
【請求項９】
マルチホップ通信によりパケットを送受信するアドホックネットワーク内のノードで処理を実行させるための制御プログラムであって、
該ノードに
メッセージと、転送先アドレスおよびパケットが不正か否かを検証する処理を実行するか否かを決定するために用いるカウンタ値を含むヘッダと、パケットが不正か否かを検証するために用いる符号情報とを含むパケットを受信し、
カウンタ値に予め対応づけて記憶された、パケットが不正か否かを検証する処理を実行するか否かを定めた検証情報に基づき、該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断し、
該検証処理を実行すると判断した場合に受信した該パケットの検証処理を実行してカウンタ値を初期値に変更したパケットを生成し、
該転送先アドレスに生成した該パケットを送信する
処理を実行させるための制御プログラム。
【請求項１０】
該ノードに、該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断させる際に、該検証処理を実行しないと判断した場合、カウンタ値を変更したパケットを生成させることを特徴とする請求項９に記載の制御プログラム。
【請求項１１】
該検証情報は、該カウンタ値と検証処理を実行する確率とを関連付けた情報であることを特徴とする請求項９または請求項１０に記載の制御プログラム。
【請求項１２】
該ノードに、該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断させる際に、該検出された該負荷量が所定量よりも高い場合に、カウンタ値に基づく検証処理を実行するか否かの判断を行なわせることを特徴とする請求項９または請求項１０に記載の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に開示する技術は、通信ノード、通信制御方法、および通信ノードの制御プログラムに関する。
【背景技術】
【０００２】
アドホックネットワークとは、無線又は有線通信によってリンクする自己構成型のネットワークの一種である。アドホックネットワークは複数のノードにより構成される。また、アドホックネットワーク内の各ノードは、マルチホップ通信によりパケットを送受信する。マルチホップ通信は、互いの通信圏内に存在しないノード同士が、各ノードの通信圏内に存在する別のノードを介して通信を可能にする技術である。【０００３】
アドホックネットワークを利用したシステムとして、各家庭の電力メータに無線通信可能なノードを組み込むことにより、作業員が現地に出向くことなく、アドホックネットワーク経由でメータ検針などの業務を行うシステムがある。このようなシステムでは、アドホックネットワークにおいて各家庭の電力の使用量などの個人情報を扱うため、秘匿性、改ざん防止などの観点からセキュアな通信（暗号化技術を用いた通信）を行うことが要求される。【０００４】
従来のアドホック通信システムとして、アドホックネットワーク内のノード間で送受信されるパケットを暗号化したり、パケットに対する符号情報の一種であるメッセージ認証コード（ＭＡＣ）を添付することで、セキュアな通信の確保が行ったりする手法がある（例えば、下記特許文献１〜４参照）。【０００５】
アドホックネットワークでは、アドホックネットワーク内に送信される正規パケットは誰でもキャプチャすることができる。そのため、攻撃者は、キャプチャした正規パケットをアドホックネットワーク内に再送することで、ネットワークを輻輳させる攻撃（再送攻撃）を容易に実行することができる。前述したパケットの暗号化やメッセージ認証コードの添付では再送攻撃を防ぐことができないため、アドホックネットワークでは、ネットワークとしての通信品質を確保するために、再送攻撃に備える必要がある。【０００６】
そこで、ヘッダにパケットの送信時刻情報を保持し、ノードがそのパケットを受信した時刻とヘッダ内の送信時刻を比較し、その差が大きい場合には、再送攻撃が実行されたと見なして、そのパケットを破棄するという技術もあった。この技術の場合、再送攻撃が実行され、特定のノード付近に不正なパケットが集中すると、ノードの処理能力ではパケットの廃棄処理を大量に実行する必要がある。この結果、当該ノードで処理遅延が発生してしまい、アドホックネットワーク全体の処理遅延を発生させるという問題があった。この問題に対して、ノードが受信したパケットを別のノードに送信する際、ヘッダ検証やメッセージ認証コード検証を確率的に選択することで、ノードの負荷をアドホックネットワーク全体に分散させるという先行技術があった。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−３４８０７２号公報
【特許文献２】特開２０１０−９８５９７号公報
【特許文献３】特開２００７−８８７９９号公報
【特許文献４】特開２００９−８１８５４号公報
【特許文献５】国際公開ＷＯ２０１１／１２１７１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した先行技術では、複数回のホップを経ても検証されない不正なパケットが存在することとなり、アドホックネットワークの伝送効率の低下を招いていた。他方、毎ホップごとに検証される正規なパケットが存在することとなり、再送攻撃が実行されているという状況下では、無駄な検証を処理しているという問題も生じていた。【０００９】
本発明は、上述した先願技術による問題点を解消するため、不正なパケットの検出処理をアドホックネットワークのノードに効率的に分散することを課題とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本発明の一観点によれば、ノードは、カウンタ値とパケットが不正か否かを検証する処理を実行するか否かを定めた検証情報とを対応づけて記憶する記憶部と、メッセージと、転送先アドレスおよびカウンタ値を含むヘッダと、パケットが不正か否かを検証するための符号情報とを含むパケットを受信すると、該受信したパケットに含まれるカウンタ値に対応する該メモリに記憶された該カウンタ値に対応付けられた該検証情報に基づき検証処理を実行するか否かを判断する判断部と、該検証処理を実行すると判別した場合に受信した該パケットの検証処理を実行してカウンタ値を初期値に変更したパケットを生成する生成部と、該転送先アドレスに該生成部で生成された該パケットを送信する送信部とを有する。
【発明の効果】
【００１１】
本発明の一観点によれば、不正なパケットの検出処理をアドホックネットワークのノードに効率的に分散することが可能になる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態にかかるネットワークシステムの一実施例を示す説明図である。
【図２】本実施の形態での不正パケットの破棄の説明図である。
【図３】実施の形態にかかるパケットの構成例を示す説明図である。
【図４】各ノードが記憶するルーティングテーブルの一例を示す説明図である。
【図５】本実施の形態にかかるノードの機能ブロック図である。
【図６】送信処理手順を示すフローチャートである。
【図７】パケットの受信時の処理のフローチャートである。
【図８】基準テーブル３５０である。
【図９】判定処理のフローチャートである。
【図１０】新しいパケット３１０の構成例である。
【図１１】確率テーブル３６０である。
【図１２】検証確率を使用する場合の判定処理のフローチャートである。
【図１３】ノードＮ３の機能ブロック図である。
【図１４】ＭＡＣ検証を実行するか否かを判別する処理のフローチャートである。
【図１５】ノードのハードウェア構成例である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、この発明にかかる通信方法、ノード、およびネットワークシステムの実施の形態を詳細に説明する。
【００１４】
（実施例１）
［ネットワークシステム］
図１は、実施の形態にかかるネットワークシステムの一実施例を示す説明図である。ネットワークシステムは、管理サーバＳと、シンクノードＳＮと、ノードＮａ〜Ｎｈとを含む。管理サーバＳとシンクノードＳＮとはインターネット、ＬＡＮ、ＷＡＮなどの通常ネットワーク１０１を介して接続されている。シンクノードＳＮとノードＮａ〜Ｎｈとは、アドホックネットワーク１００を介して接続されている。
【００１５】
シンクノードＳＮは、アドホックネットワーク１００と通常ネットワーク１０１とを接続する中継機器である。シンクノードＳＮは、アドホックネットワーク１００のプロトコルの形式の情報と通常ネットワーク１０１のプロトコルの形式の情報の両方を送受信可能であり、アドホックネットワーク１００と通常ネットワーク１０１との間で情報をプロトコル変換することにより、通信の転送を行う。例えば、アドホックネットワーク１００内の各ノードから管理サーバＳ宛に送信されたパケットは、シンクノードＳＮにてプロトコル変換され、通常ネットワーク１０１にパケットとして転送されて管理サーバＳに到達する。また、管理サーバＳやシンクノードＳＮからそれぞれのノード宛てに送信されたデータは、シンクノードＳＮにてプロトコル変換され、シンクノードＳＮからアドホックネットワーク１００内の各ノードにパケットとして転送される。
【００１６】
なお、シンクノードＳＮは、各ノード間の通信の可否をルーティングテーブルにより把握しており、ルーティングテーブルの情報を元に、シンクノードＳＮは自律的にルーティングする。各ノードは、シンクノードＳＮのルーティングにより、マルチホップ通信を行う際の転送元と転送先が設定される。
【００１７】
アドホックネットワーク１００内には、複数のノードが設けられている。図１では、代表としてノードＮａ〜Ｎｈを示している。
【００１８】
各ノードは、所定の通信圏内で通信可能な他ノードとマルチホップ通信が可能な無線通信装置である。アドホックネットワーク１００では、すべてのノードＮａ〜Ｎｈが直接シンクノードＳＮと通信できる必要はなく、マルチホップを繰り返すことにより、最終的にすべてのノードＮａ〜ＮｈがシンクノードＳＮと通信できればよい。このため、アドホックネットワーク１００では、一部のノードがシンクノードＳＮと通信可能であればよい。図１では、シンクノードＳＮと直接通信可能なノードは、ノードＮａ，Ｎｄである。
【００１９】
本実施例のネットワークシステムは、たとえば各家庭の電力やガスの使用量を収集するシステムに適用される。このようなシステムの場合、各ノードは、各家庭の電力やガスの使用量を検出するための各家庭の電力メータやガスメータに設置される。管理サーバＳは、各ノードが検出した電力やガスの使用量を収集して、管理サーバＳに送信することで、各家庭の電力やガスの使用量を収集することが可能になる。
【００２０】
具体的には、例えば、各家庭の電力メータやガスメータにそれぞれノードが組み込まれているとする。各ノードは、各ノードが検出した各家庭の電力やガスの使用量を、アドホックネットワーク１００を介して管理サーバＳに送信する。なお、各家庭の電力やガスの使用量は、各ノードが計測してもよく、また、各ノードが電力メータやガスメータから取得してもよい。シンクノードＳＮは、アドホックネットワーク１００内の各ノードから受信した各家庭の電力やガスの使用量を、通常ネットワーク１０１を介して電力会社やガス会社のサーバ（例えば、管理サーバＳ）に送信する。これにより、作業員が現地に出向くことなく電力やガスの使用量を収集することができる。
【００２１】
また、本実施形態のネットワークシステムでは、暗号鍵を用いてパケットを暗号化する。あるいは、ＭＡＣ鍵を用いてパケットに対するメッセージ認証コード（ＭＡＣ）を生成・付加する。これにより、アドホックネットワーク１００のセキュア通信（データ秘匿性、改ざん防止など）を確保する。
【００２２】
なお、図１の例では、アドホックネットワーク１００内に１台のシンクノードＳＮを設ける構成としたが、一つのアドホックネットワーク１００内に複数台のシンクノードＳＮを設ける構成としてもよい。
【００２３】
また、図１ではアドホックネットワーク１００は一つであるが、複数のアドホックネットワークを含む場合もある。複数のアドホックネットワークを含む場合、複数のアドホックネットワークにはそれぞれ少なくとも一つのシンクノードが含まれており、管理サーバＳは当該シンクノードと通常ネットワークを介して接続する。この構成により、管理サーバＳと全てのノードとのデータ送受信が可能になる。
【００２４】
また、本ネットワークシステムは、電力、ガスの使用量の収集だけでなく、各ノードに温度，湿度，光量などを検知するセンサ機能を持たせて、例えば、環境などの調査に使用することも可能である。
【００２５】
図１では、アドホックネットワーク１００を構成するノードＮａ〜Ｎｈにより、４つの経路Ｒ１〜Ｒ４が設定されているものとする。具体的には、経路Ｒ１は、ノードＮｃ→ノードＮｂ→ノードＮａ→シンクノードＳＮというルート（逆方向の通信も可）である。経路Ｒ２は、ノードＮｅ→ノードＮｄ→シンクノードＳＮ（逆方向の通信も可）である。経路Ｒ３は、ノードＮｇ→ノードＮｆ→ノードＮｄ→シンクノードＳＮというルート（逆方向も可）である。経路Ｒ４は、ノードＮｈ→ノードＮｆ→ノードＮｄ→シンクノードＳＮというルート（逆方向も可）である。なお、ノードＮａやノードＮｄはシンクノードと直接通信するノードである。
【００２６】
シンクノードＳＮに近いノードを上流側のノードと呼ぶ。なお、アドホックネットワーク１００の規模によっては、ノードＮｂやノードＮｅも上流側のノードとなる。
【００２７】
各ノードＮａ〜Ｎｈは、各々検出されたデータをルーティングされた経路Ｒ１〜Ｒ４に従ってシンクノードＳＮに送信する。したがって、シンクノードＳＮに近い上流のノードほど、下流のノードの検出データをさらに上流に転送することとなる。すなわち、転送元のノードからのパケットを転送先に送信する頻度が高くなり、転送負荷が高くなる。
【００２８】
［本実施例の不正パケットの検出と破棄］
図２は、本実施の形態での不正パケットの破棄の説明図である。
【００２９】
なお、不正パケットの検出には、種々の方式がある。例えば、ＭＡＣ鍵を有さないノードからのパケットに対してＭＡＣ検証を実行すると、ノードはＭＡＣ検証に失敗する。このようなＭＡＣ検証で失敗するパケットを不正パケットと判定する。また、正当なパケットのコピーを大量に送付するような攻撃を受ける場合もある。このような場合、パケットはヘッダに当該パケットの送信時刻情報を保持させる。ノードがパケットを受信した時刻とヘッダに保持した送信時刻とを比較し、その差が大きい場合には、再送攻撃が実行されたと判定することも可能である。
【００３０】
本実施の形態では、アドホックネットワーク１００内をマルチホップ通信により転送されるパケットは、経路上のノードにより、ＭＡＣ鍵ＫによるＭＡＣ値の認証（ＭＡＣ認証）をされる場合とされない場合がある。
【００３１】
例えば、本実施例の各ノードは、ＭＡＣ認証を実施する確率（認証実施確率Ｐ）を５０％と設定しておく。これにより、不正パケット群を受信したノードは、不正パケット群のうち半分（５０％）の個数の不正パケットをＭＡＣ認証し、残余の半分の個数の不正パケットを転送先ノードに転送する。
【００３２】
また、パケットを受信したノードは、パケットのヘッダに格納されたカウンタ値を抽出し、当該カウンタ値が一定の値（本実施の形態では「３」）以上になった場合にＭＡＣ認証を実行する。このＭＡＣ認証をするか否かを決定する「一定の値」は、不正パケットを転送するために要する処理量とＭＡＣ検証を行うために要する処理量のバランスによって決定される。ＭＡＣ認証をするか否かを決定する「一定の値」は、例えば、ネットワークの規模、アドホックネットワーク１００のノードのホップ数、全パケットに対して存在する不正パケットの割合、ノードの負荷状況等に応じて適宜決定される。例えば、ノードの負荷が常に低い場合には、全ノードでＭＡＣ検証を行ってもよい。また、不正パケットの割合が低い場合、ＭＡＣ認証をするか否かを決定する「一定の値」を大きくしてもよい。
【００３３】
このように、ＭＡＣ認証の処理を実行するノードを分散させることにより、シンクノードＳＮやパケットを直接受信するノードにかかるＭＡＣ認証の処理の負荷が軽減される。この結果、アドホックネットワーク１００の通信の効率化を図ることができる。
【００３４】
図２のアドホックネットワーク１００は、ノードＮａ、Ｎｂ、Ｎｃ、Ｎｄ、ＮｅとシンクノードＳＮとを含む。シンクノードＳＮのアドホックルーティングにより、パケットは、ノードＮｃ→ノードＮｄ→ノードＮｅ→ノードＮｂ→ノードＮａ→シンクノードＳＮの順序で、転送されるものとする。
【００３５】
各ノードＮａ〜Ｎｅは、メッセージを認証するためのＭＡＣ鍵、すなわちパケットが不正であるか否かを判別する際に使用するＭＡＣ鍵を共有する。各ノードＮａ〜Ｎｅは、パケットにＭＡＣ（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ；メッセージ認証子。以下、「ＭＡＣ値」と称す。）を付けて転送する。
【００３６】
たとえば、ノードＮｃでデータが検出されると、ノードＮｃは検出データを含むメッセージを暗号化する。ここで、ノードＮｃが不正ノードからの１００個の不正パケットを受信したとする。図２の例では各ノードの認証実施確率Ｐ＝５０％であるため、ノードＮｃは５０個の不正パケットをＭＡＣ認証する。ノードＮｃは、残余の５０個の不正パケットを転送先のノードＮｄに転送する。ＭＡＣ認証をおこなう５０個の不正パケットの各々から得られるＭＡＣ値は、ノードＮｃが有する認証鍵により生成されるＭＡＣ値とは異なる。したがって、ＭＡＣ認証の対象となった５０個の不正パケットはノードＮｃに破棄される。
【００３７】
各ノードが送信元になる場合、各ノードが有する暗号鍵によりメッセージを暗号化して、暗号化メッセージを生成する。図２の場合、ノードＮｃは暗号鍵Ｋｃ、ノードＮｄは暗号鍵Ｋｄ、ノードＮｅは暗号鍵Ｋｅ、ノードＮｂは暗号鍵Ｋｂ、ノードＮａは暗号鍵Ｋａを有し、管理サーバＳは、各ノードが有する暗号鍵Ｋｅ、Ｋｄ、Ｋｃ，Ｋｂ，Ｋａを有する。これら暗号鍵は異なる運用をすることも可能であるし、全て同じ鍵として運用することも可能である。本実施の形態では、パケットの送信元と送信先とが暗号鍵を有する。
【００３８】
暗号化したメッセージは暗号化メッセージという。  次に、ノードＮｃはパケットのヘッダを生成する。このときノードＮｃは、ヘッダのカウンタ値を初期値に設定する。ノードＮｃは暗号化メッセージとヘッダとからＭＡＣ値を生成し、ヘッダ、暗号化メッセージ、およびＭＡＣ値を含むパケットのヘッダを更新してノードＮｄに転送する。
【００３９】
ノードＮｄはノードＮｃから転送されてきたパケットをノードＮｅに転送する。ノードＮｄは、認証実施確率Ｐ＝５０％により、ノードＮｃからの５０個の不正パケットのうち２５個をＭＡＣ認証し、残余の２５個の不正パケットを転送先となるノードＮｅに転送する。ＭＡＣ認証をおこなう２５個の不正パケットの各々から得られるＭＡＣ値は、ノードＮｄが有する認証鍵により生成されるＭＡＣ値とは異なる。したがって、ＭＡＣ認証の対象となった２５個の不正パケットはノードＮｄに破棄される。
【００４０】
また、ノードＮｄは、パケットのヘッダに格納されたカウンタ値を抽出し、当該カウンタ値が「３」以上のパケットについてＭＡＣ認証を実行する。図２の例では、ノードＮｄが受信した不正パケットのカウンタ値は、「０」となっている。したがって、ノードＮｄは、残余の不正パケットについてＭＡＣ認証を実施することなく転送する。なお、ノードＮｄは、不正パケットを転送する際、当該不正パケットのカウンタ値「０」を１だけインクリメントし「１」にする。
【００４１】
ノードＮｅは、認証実施確率Ｐ＝５０％により、ノードＮｄからの２５個の不正パケットのうち１３個をＭＡＣ認証し、残余の１２個の不正パケットを転送先となるノードＮｂに転送する。ＭＡＣ認証をおこなう２５個の不正パケットの各々から得られるＭＡＣ値は、ノードＮｄが有する認証鍵により生成されるＭＡＣ値とは異なる。したがって、ＭＡＣ認証の対象となった１３個の不正パケットはノードＮｄに破棄される。
【００４２】
また、ノードＮｅは、パケットのヘッダに格納されたカウンタ値を抽出し、当該カウンタ値が「３」以上のパケットについてＭＡＣ認証を実行する。図２の例では、ノードＮｅが受信した不正パケットのカウンタ値は、「１」となっている。したがって、ノードＮｅは、残余の不正パケットについてＭＡＣ認証を実施することなく転送する。なお、ノードＮｄは、不正パケットを転送する際、当該不正パケットのカウンタ値「１」を１だけインクリメントし「２」にする。
【００４３】
ノードＮｂは、認証実施確率Ｐ＝５０％により、ノードＮｂからの１２個の不正パケットのうち６個をＭＡＣ認証し、残余の６個の不正パケットを転送先となるノードＮａに転送する。ＭＡＣ認証をおこなう６個の不正パケットの各々から得られるＭＡＣ値は、ノードＮｂが有する認証鍵により生成されるＭＡＣ値とは異なる。したがって、ＭＡＣ認証の対象となった６個の不正パケットはノードＮｂに破棄される。
【００４４】
また、ノードＮｂは、パケットのヘッダに格納されたカウンタ値を抽出し、当該カウンタ値が「３」以上のパケットについてＭＡＣ認証を実行する。図２の例では、ノードＮｂが受信した不正パケットのカウンタ値は、「２」となっている。したがって、ノードＮｂは、残余の不正パケットについてＭＡＣ認証を実施することなく転送する。なお、ノードＮｂは、不正パケットを転送する際、当該不正パケットのカウンタ値「２」を１だけインクリメントし「３」にする。
【００４５】
ノードＮａは、認証実施確率Ｐ＝５０％により、ノードＮｂからの６個の不正パケットのうち３個をＭＡＣ認証する。
【００４６】
ノードＮａは、パケットのヘッダに格納されたカウンタ値を抽出し、当該カウンタ値が「３」以上のパケットについてＭＡＣ認証を実行する。図２の例では、ノードＮａが受信した不正パケットのカウンタ値は、「３」となっている。したがって、ノードＮａは、残余の全ての不正パケットについてＭＡＣ認証を実施する。この結果、ノードＮｃで検出した全ての不正パケットは、ノードＮａを通過することなく、破棄されることになる。
【００４７】
同様に、ノードＮｂでデータが検出されると、ノードＮｂは検出データに基づき暗号化メッセージを生成する。また、ノードＮｂはパケットのヘッダを生成する。ノードＮｂは暗号化メッセージとヘッダとからＭＡＣ値を生成し、ヘッダ、暗号化メッセージ、およびＭＡＣ値を含むパケットのヘッダを更新してノードＮａに転送する。ノードＮａはノードＮｂから転送されてきたパケットをシンクノードＳＮに転送する。
【００４８】
図２の場合、ノードＮｃが送信元となるパケットのカウンタ値は初期値として「０」に設定される。その後、マルチホップ通信が行われ、転送処理を実行するノードは、パケットについてＭＡＣ検証を実行しない場合、カウンタ値をインクリメントする。図２の場合、ノードＮｄ，Ｎｅ，Ｎｂが、パケットについてカウンタ値に基づくＭＡＣ検証を実行しないノードに相当する。
【００４９】
一方、パケットについてＭＡＣ検証を実行したノードは、カウンタ値を初期化する。図２の場合、ノードＮａが、パケットについてＭＡＣ検証を実行するノードに相当する。
【００５０】
以上の構成にすることで、各ノードは、認証確率Ｐに基づきＭＡＣ認証を実施するとともにカウンタ値が一定値以上になったパケットについてＭＡＣ検証を実行すればよいため、アドホックネットワーク１００全体でのＭＡＣ検証の処理量が低減する。また、カウンタ値が所定数以上のパケットについては必ずＭＡＣ検証が実行されるので、不正パケットの早期の除去が可能になる。
【００５１】
［パケットの構成］
図３は、実施の形態にかかるパケットの構成例を示す説明図である。
【００５２】
パケット３００は、アドホックデータ３０４、およびＭＡＣ３０５で構成される。アドホックデータ３０４はヘッダ３０３と暗号化メッセージ３０２とを含む。
【００５３】
ヘッダ３０３は、暗号化メッセージ３０２の送信元のアドレス、宛先のアドレス、転送元のアドレス、転送先のアドレス、およびカウンタ値の情報を含む。それぞれのアドレスは、例えば、送信元のノードのＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレス、宛先のノードのＭＡＣアドレス、転送元のノードのＭＡＣアドレス、転送先のノードのＭＡＣアドレスが使用される。以降本実施例では、アドレスにＭＡＣアドレスを用いた場合を説明する。
【００５４】
ヘッダ３０３は、転送元ＭＡＣアドレス３１１、転送先ＭＡＣアドレス３１２、送信元ＭＡＣアドレス３１３、宛先ＭＡＣアドレス３１４、およびカウンタ値３０８を含む。
【００５５】
転送元ＭＡＣアドレス３１１は、パケット３００のマルチホップ通信元となるノードのＭＡＣアドレスである。転送先ＭＡＣアドレス３１２は、パケット３００のマルチホップ通信先となるノードのＭＡＣアドレスである。転送元ＭＡＣアドレス３１１および転送先ＭＡＣアドレス３１２は、マルチホップ通信により転送される都度、パケット３００を受信したノードによって、転送先のノードからみた転送元および転送先のＭＡＣアドレスになるように書き換えられる。送信元ＭＡＣアドレス３１３は、パケット３００内のメッセージ３０１の検出元となるノードのＭＡＣアドレスである。宛先ＭＡＣアドレス３１４は、パケット３００内のメッセージ３０１の宛先となるノードのＭＡＣアドレスである。例えば、ノードが送信元となる場合、宛先ＭＡＣアドレス３１４はシンクノードＳＮのＭＡＣアドレスまたは管理サーバＳのＭＡＣアドレスとなる。
【００５６】
転送先ＭＡＣアドレス３１２と宛先ＭＡＣアドレス３１４が一致する場合、宛先ＭＡＣアドレス３１４で特定されるノードにパケットが到達したこととなり、マルチホップ通信が終了する。
【００５７】
カウンタ値３０８は、ＭＡＣ検証を行うか否かを判断するための情報である。本実施例のカウンタ値３０８は、過去にＭＡＣ検証が行われた以降に、パケット３００がＭＡＣ検証をされずに通過したノードの数に相当する。カウンタ値は、ノードを通過する際にノードによって検証されなかった場合に、「１」増加される。一方ＭＡＣ検証がなされると、カウンタ値は「０」に初期化される。
【００５８】
暗号化メッセージ３０２は、メッセージ３０１が暗号化されたものである。メッセージ３０１は例えば、送信元のノードがサーバに送信するデータである。送信元となるノードは、メッセージ３０１の秘匿性を確保するために、暗号鍵３０７を用いてメッセージ３０１を暗号化することで、暗号化メッセージ３０２を作成する。本実施例の暗号鍵３０７はノード毎に一意であるものとする。
【００５９】
ＭＡＣ３０５は、メッセージ認証コード（ＭＡＣ）の値である。ＭＡＣ３０５は、アドホックデータ３０４を、アドホックネットワーク１００の全ノードで共有するＭＡＣ鍵（ＭＡＣ鍵３０６）で暗号化したメッセージ認証子である。送信元のノードは、あるいは転送元のノードは、アドホックデータ３０４に改竄がないことを転送先のノードで検証可能にするために、ＭＡＣ鍵によってアドホックデータ３０４のＭＡＣ３０５を生成し、アドホックデータ３０４に生成したＭＡＣ３０５を付加したパケット３００を生成する。
【００６０】
各ノードはパケット３００を受信した場合、パケット３００をアドホックデータ３０４とＭＡＣ３０５に分離し、アドホックデータ３０４に対してＭＡＣ検証を実行する。検証に失敗した場合には、パケット３００を廃棄する。
【００６１】
［ルーティングテーブル］
図４は、各ノードが記憶するルーティングテーブルの一例を示す説明図である。図４の（Ａ）は、ノードＮａのルーティングテーブル３２０を示す。図４の（Ｂ）は、ノードＮｂのルーティングテーブル３２５を示す。なお、図４では、便宜上、ノードの符号をＭＡＣアドレスの代わりとして説明する。例えば、ルーティングテーブルに「Ｎａ」とある場合は、ノードＮａのＭＡＣアドレスを示すものとする。
【００６２】
ルーティングテーブルの１行目のレコードは、シンクノードＳＮへ向かう上り方向に転送する場合に用いるレコードであり、２行目のレコードは、末端へ向かう下り方向に転送する場合に用いるレコードである。２行目のレコードは、例えば、シンクノードＳＮからブロードキャストされた場合に適用される。
【００６３】
具体的には、ノードＮａは、ルーティングテーブル３２０の転送元のＭＡＣアドレス３２１により特定されるノードからパケットが転送されてくると、ルーティングテーブル３２０を参照して、転送元のＭＡＣアドレス３２１に対応する転送先のＭＡＣアドレス３２２を特定する。そして、ノードＮａは、受信したパケット３００のヘッダ３０３の転送先ＭＡＣアドレス３１２を、ルーティングテーブル３２０の転送先のＭＡＣアドレス３２２で特定されたＭＡＣアドレスに書き換える。また、ノードＮａは、受信したパケット３００のヘッダ３０３の転送元ＭＡＣアドレス３１１を、ノードＮａのＭＡＣアドレスに書き換える。
【００６４】
ノードＮａは、転送元のＭＡＣアドレスが「Ｎｂ」、転送先のＭＡＣアドレスが「Ｎａ」のパケットが、ノードＮｂから転送されてくると、ルーティングテーブル３２０にしたがって、ヘッダ３０３の転送元ＭＡＣアドレス３１１を「Ｎｂ」から「Ｎａ」に書き換え、転送先ＭＡＣアドレス３１２を「Ｎａ」から「ＳＮ」に書き換える。
【００６５】
また、ノードＮａは、転送元のＭＡＣアドレスが「ＳＮ」、転送先のＭＡＣアドレスが「Ｎｂ」のパケットが、シンクノードＳＮから転送されてくると、ルーティングテーブル３２０にしたがって、ヘッダ３０３の転送元ＭＡＣアドレス３１１を「ＳＮ」から「Ｎａ」に書き換え、転送先ＭＡＣアドレス３１２を「Ｎａ」から「Ｎｂ」に書き換える。
【００６６】
同様にノードＮｂは、ルーティングテーブル３２５の転送元のＭＡＣアドレス３２６により特定されるノードからパケットが転送されてくると、ルーティングテーブル３２５を参照して、転送元のＭＡＣアドレス３２６に対応する転送先のＭＡＣアドレス３２７を特定する。そして、ノードＮｂは、受信したパケット３００のヘッダ３０３の転送先ＭＡＣアドレス３１２を、ルーティングテーブル３２５の転送先のＭＡＣアドレス３２７で特定されたＭＡＣアドレスに書き換える。また、ノードＮｂは、受信したパケット３００のヘッダ３０３の転送元ＭＡＣアドレス３１１を、ノードＮｂのＭＡＣアドレスに書き換える。
【００６７】
ノードＮｂは、転送元のＭＡＣアドレスが「Ｎｅ」、転送先のＭＡＣアドレスが「Ｎｂ」のパケット３００が、ノードＮｅから転送されてくると、ルーティングテーブル３２５にしたがって、ヘッダ３０３の転送元ＭＡＣアドレス３１１を「Ｎｅ」から「Ｎｂ」に書き換え、転送先ＭＡＣアドレス３１２を「Ｎｂ」から「Ｎａ」に書き換える。
【００６８】
また、転送元のＭＡＣアドレスが「Ｎａ」、転送先のＭＡＣアドレスが「Ｎｅ」のパケット３００がノードＮａから転送されてくると、ノードＮｂはルーティングテーブル３２５にしたがって、ヘッダ３０３の転送元ＭＡＣアドレス３１１を「Ｎａ」から「Ｎｂ」に書き換え、転送先ＭＡＣアドレス３１２を「Ｎｂ」から「Ｎｅ」に書き換える。
【００６９】
［ノードの機能説明］
図５は、本実施の形態にかかるノードの機能ブロック図である。
【００７０】
ノードＮは、アドホック通信部１１１、ヘッダ生成部１０２、ＭＡＣ生成部１０３、暗号処理部１０４、検証判断部１０５、鍵情報記憶部１０６、送信先判定部１０７、ＭＡＣ検証部１０８、記憶部１１３、および復号処理部１０９を含む。
【００７１】
アドホック通信部１１１は、送信部１１５及び受信部１１６を含む。送信部１１５は、アドホックネットワーク１００を介して送信先のノードにパケット３００を送信する。また、受信部１１６は、アドホックネットワーク１００を介して送信元のノードからパケット３００を受信する。本実施の形態では、特に記載がない限り、アドホック通信部１１１による送信は、送信部１１５によって行われており、アドホック通信部１１１の受信は、受信部１１６によって行われているものとする。
【００７２】
ヘッダ生成部１０２は、ヘッダ３０３を生成する。また、ヘッダ生成部１０２は暗号化メッセージ３０２にヘッダ３０３を付加することにより、アドホックデータ３０４を生成する。
【００７３】
ＭＡＣ生成部１０３は、鍵情報記憶部１０６からＭＡＣ鍵３０６を取り出し、アドホックデータ３０４に対するＭＡＣ３０５を生成する。また、ＭＡＣ生成部１０３は、アドホックデータ３０４に生成したＭＡＣ３０５を付加してパケット３００を生成する。
【００７４】
暗号処理部１０４は、暗号鍵３０７を用いてメッセージ３０１を暗号化することで、暗号化メッセージ３０２を生成する。
【００７５】
検証判断部１０５は、ヘッダ３０３内のカウンタ値３０８に応じてパケット３００を検証するか否かを判断する。また、検証判断部１０５は認証確率Ｐに基づきＭＡＣ認証をするか否かを判別する。
【００７６】
鍵情報記憶部１０６は、暗号鍵３０７、ＭＡＣ鍵３０６、および復号鍵３０９を記憶する。
【００７７】
送信先判定部１０７は、ヘッダ３０３に基づき、自ノードが、受信したパケット３００の最終的な送信先であるか否かを判定する。
【００７８】
ＭＡＣ検証部１０８は、ＭＡＣ鍵３０６を読み出し、アドホックデータ３０４に対するＭＡＣ３０５を検証する。
【００７９】
記憶部１１３は、ルーティングテーブル、基準テーブル、確率テーブルなどを記憶する。
【００８０】
復号処理部１０９は鍵情報記憶部１０６から復号鍵３０９を取り出し、暗号化メッセージ３０２を復号してメッセージ３０１を入手する。なお、システムによって、復号鍵３０９は暗号鍵３０７と同じ場合もある。また、送信元のノード毎の復号鍵を記憶する場合もある。
【００８１】
［データ検出〜パケット生成〜パケット送信処理］
次に、あるノード（ここではノードＮ１とする）がメッセージ３０１を送信する場合の処理を説明する。
【００８２】
図６は、アドホックネットワーク１００に含まれるそれぞれのノードが実行する検出データの送信処理手順を示すフローチャートである。本処理では、ノードＮ１は、センサが検出したデータをシンクノードＳＮに送信するためのパケットを生成する処理を説明する。
【００８３】
まず、ノードＮ１は、センサ７０６により対象となるデータが検出されるのを待ち受け（Ｓ９０１：Ｎｏ）、データが検出されると（Ｓ９０１：Ｙｅｓ）、ノードＮは、データを含む送信対象のメッセージ３０１を暗号処理部１０４に送信する。
【００８４】
暗号処理部１０４は、送信対象のメッセージ３０１を受信すると鍵情報記憶部１０６から暗号鍵３０７を読み出し、メッセージ３０１を暗号化して（Ｓ９０２）、暗号化メッセージ３０２を生成する。暗号処理部１０４は、生成した暗号化メッセージ３０２をヘッダ生成部１０２に送信する。
【００８５】
ヘッダ生成部１０２は、ヘッダ３０３の情報を生成する（Ｓ９０３）。ノードＮ１は、ヘッダ３０３の転送元ＭＡＣアドレス３１１には自ノードのＭＡＣアドレスを設定し、転送先ＭＡＣアドレス３１２には、ノードＮ１が記憶するルーティングテーブルに規定された転送先のＭＡＣアドレスのうち上り側（図４のルーティングテーブルの一行目のレコードに相当する）のＭＡＣアドレスを設定する。また、ノードＮ１は、ヘッダ３０３の送信元ＭＡＣアドレス３１３には自ノードのＭＡＣアドレスを設定し、宛先ＭＡＣアドレス３１４には、シンクノードＳＮのＭＡＣアドレスを設定する。
【００８６】
ヘッダ生成部１０２は、カウンタ値に初期値を設定する（Ｓ９０４）。その後、ヘッダ生成部１０２は暗号化メッセージ３０２に生成したヘッダ３０３を付加してアドホックデータ３０４を生成する。ヘッダ生成部１０２は、生成したアドホックデータ３０４をＭＡＣ生成部１０３に送信する。
【００８７】
ＭＡＣ生成部１０３は鍵情報記憶部１０６からＭＡＣ鍵３０６を読み出し、受信したアドホックデータ３０４に対するＭＡＣ３０５を算出する（Ｓ９０５）。ＭＡＣ生成部１０３は、アドホックデータ３０４に生成したＭＡＣ３０５を付加してパケット３００を生成する。ＭＡＣ生成部１０３は生成したパケット３００をアドホック通信部１１１に送信する。
【００８８】
アドホック通信部１１１はＭＡＣ生成部１０３から受信したパケット３００（すなわち、ＭＡＣ付アドホックデータ）を、アドホックネットワーク１００を介して転送先ＭＡＣアドレス３１２宛に送信する（Ｓ９０６）。以上により、ノードＮ１の検出データの送信処理を終了する。
【００８９】
次に、あるノード（ノードＮ２とする）がパケット３００を受信した場合の処理を説明する。
【００９０】
［パケット転送処理］
図７は、ノードＮ２によるパケットの受信時の処理のフローチャートである。図７において、ノードはアドホック通信部１１１によりパケット３００を受信するのを待ち受け（Ｓ１００１：Ｎｏ）、パケット３００を受信した場合（Ｓ１００１：Ｙｅｓ）、パケット３００を送信先判定部１０７に送信する。
【００９１】
送信先判定部１０７は、受信したパケット３００からアドホックデータ３０４とＭＡＣ３０５とを抽出する。送信先判定部１０７は、アドホックデータ３０４に含まれるヘッダ３０３を解析し（Ｓ１００２）、自ノードＮ２が受信したパケット３００の最終的な送信先であるか否かを判定する（Ｓ１００３）。送信先判定部１０７は、自ノードＮ２が最終的な送信先であると判定した場合（Ｓ１００３：Ｙｅｓ）、受信したパケット３００が不正パケットか否かを判別するため、抽出したアドホックデータ３０４とＭＡＣ３０５をＭＡＣ検証部１０８に送信する。
【００９２】
ＭＡＣ検証部１０８は、鍵情報記憶部１０６からＭＡＣ鍵３０６を読み出し、ＭＡＣ鍵３０６と受信したアドホックデータ３０４とからＭＡＣを算出する（Ｓ１００４）。ＭＡＣ検証部１０８は、Ｓ１００４で算出したＭＡＣと受信したパケット３００に含まれるＭＡＣ３０５の値とが一致するか否かを判別する（以下、この一致または不一致の判定処理をＭＡＣ検証とする）（Ｓ１００５）。
【００９３】
ＭＡＣ検証に失敗した場合、すなわち両者のＭＡＣ値が一致しない場合（Ｓ１００５：Ｎｏ）、ＭＡＣ検証部１０８はパケット３００を破棄する（Ｓ１００６）。ＭＡＣ検証に成功した場合、すなわちＭＡＣ値が一致する場合（Ｓ１００５：Ｙｅｓ）、ＭＡＣ検証部１０８は復号処理部１０９にアドホックデータ３０４を送信する。復号処理部１０９は、鍵情報記憶部１０６から復号鍵３０９を取り出し、暗号化メッセージ３０２を復号してメッセージ３０１を取得する（Ｓ１００７）。
【００９４】
次に送信先判定部１０７は、自ノードＮ２が受信したパケット３００の最終的な送信先ではないと判定した場合（Ｓ１００３：Ｎｏ）、ノードＮ２はパケット３００を宛先のノードに送信するための転送処理を行う。送信先判定部１０７は、アドホックデータ３０４とＭＡＣ３０５を検証判断部１０５に送信する。
【００９５】
検証判断部１０５はアドホックデータ３０４に含まれるヘッダ３０３内のカウンタ値３０８を抽出する（Ｓ１００８）。検証判断部１０５は、抽出したカウンタ値３０８に応じてＭＡＣ検証を実行するか否かを判定する（Ｓ１００９）。
【００９６】
なお、Ｓ１００９では、検証判断部１０５は、カウンタ値３０８だけでなく、認証確率Ｐに基づきＭＡＣ検証を実行するか否かを判別してもよい。カウンタ値３０８によるＭＡＣ検証の実行の可否判断と認証確率ＰによるＭＡＣ検証の実行の可否判断は、どちらが先であってもよい。
【００９７】
また、検証判断部１０５は、認証確率ＰによりＭＡＣ検証を実行しないと判断したパケットについてのみカウンタ値によるＭＡＣ検証の実行の可否を判断してもよい。
【００９８】
［カウンタ値］
ここで、本実施の形態のノードＮ２におけるカウンタ値を用いたＭＡＣ検証の実行の有無の判定処理について説明する。
【００９９】
図８は、カウンタ値とＭＡＣ検証を実行するか否かの判定基準を定めた基準テーブル３５０である。各ノードは図８で示す基準テーブルを予め格納しているものとする。各ノードが予め格納する基準テーブルは、システムによっては全て同じでも良いし、別のシステムではノードごとに異なっていても構わない。基準テーブル３５０はカウンタ値と検証の有無を判定する情報とを含む。検証の有無を識別する情報は、カウンタ値に対応する情報であり、ＭＡＣ検証を行うか否かを示す情報である。図８では、カウンタ値が「３」以上の場合に、ノードＮ２はＭＡＣ検証が実施することを示す。
【０１００】
図９は、判定処理のフローチャートである。検証判断部１０５は、Ｓ１００８で抽出したカウンタ値３０８と基準テーブル３５０に基づき、ＭＡＣ検証をするか否かを判断する（Ｓ１４０１）。具体的には、Ｓ１００８で抽出したカウンタ値３０８に対応する基準テーブル３５０の該カウンタ値に対応付けられたＭＡＣの検証をするか否かの判定基準が検証処理を実行するか否かを特定する。判定基準が検証処理を実行することを示す場合（Ｓ１４０１：Ｙｅｓ）、検証判断部１０５は、ＭＡＣ検証を実行すると決定する（Ｓ１４０２）。判定基準が検証処理を実行しないことを示す場合（Ｓ１４０１：Ｎｏ）、検証判断部１０５は、ＭＡＣ検証を実行しないと決定する（Ｓ１４０３）。
【０１０１】
例えばカウンタ値３０８が「１」である場合、基準テーブル３５０では「検証の有無を識別する情報」が検証を「しない」ことを示しているため、検証判断部１０５はＭＡＣ検証を実行しないと判定する。また、カウンタ値３０８が「４」である場合、「検証の有無を識別する情報」が検証を「する」とする基準が「３以上」であるため、検証判断部１０５はＭＡＣ検証を行うと判断する。
【０１０２】
基準テーブル３５０の値は、各ノードで個別の値を設定することが可能である。したがって、処理能力の高いノードでは基準テーブル３５０の「検証の有無を識別する情報」の値を小さくすることで、多くのパケットについてＭＡＣ検証を実施し、処理能力の低いノードでは基準テーブル３５０の「検証の有無を識別する情報」の値を大きくすることで、ＭＡＣ検証の実施の頻度を下げることが可能になる。この結果、より効果的なＭＡＣ検証の負荷の分散が可能になる。
【０１０３】
［ＭＡＣ検証］
Ｓ１００９においてＭＡＣ検証を実行すると判断した場合（Ｓ１００９：Ｙｅｓ）、検証判断部１０５はアドホックデータ３０４とＭＡＣ３０５をＭＡＣ検証部１０８に送信する。
【０１０４】
ＭＡＣ検証部１０８は、鍵情報記憶部１０６からＭＡＣ鍵３０６を読み出す。ＭＡＣ検証部１０８はパケット３００から抽出したアドホックデータ３０４と、読み出したＭＡＣ鍵３０６とからＭＡＣを算出する（Ｓ１０１２）。ＭＡＣ検証部１０８は、具体的には、たとえば、ＭＡＣ値を用いて、ＳＨＡ１、ＳＨＡ２などのハッシュ関数を使ったＨＭＡＣ（Ｋｅｙｅｄ−Ｈａｓｈｉｎｇ  ｆｏｒ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ   Ｃｏｄｅ）アルゴリズムによりＭＡＣ値を求める。また、共通鍵認証鍵暗号を使ったＡＥＳ−ＣＢＣ−ＭＡＣアルゴリズムによりＭＡＣ値を求めてもよい。
【０１０５】
ＭＡＣ検証部１０８は、Ｓ１０１２で算出したＭＡＣとパケット３００に格納されたＭＡＣ３０５とが一致するか否かを判別する（Ｓ１０１３）。ＭＡＣ検証部１０８は、ＭＡＣ値が一致しなかった場合、すなわちＭＡＣ検証に失敗した場合（Ｓ１０１３：Ｎｏ）、そのパケット３００を破棄する（Ｓ１０１４）。ＭＡＣ検証部１０８は、ＭＡＣ値が一致した場合、すなわちＭＡＣ検証に成功した場合（Ｓ１０１３：Ｙｅｓ）、アドホックデータ３０４をヘッダ生成部１０２に送信する。
【０１０６】
ヘッダ生成部１０２は、ヘッダ３０３のカウンタ値３０８の値を初期値に設定する（Ｓ１０１５）。ヘッダ生成部１０２は、ヘッダ３０３を新しいヘッダ３２３に変更する（Ｓ１０１６）。ヘッダ生成部１０２は、具体的には、パケット３００の「転送元ＭＡＣアドレス３１１」に対応するルーティングテーブルの「転送元」を特定し、特定したルーティングテーブルの「転送元」項目に対応する「転送先」項目から転送先のノードを特定する。ヘッダ生成部１０２は、転送先ＭＡＣアドレス３１２に特定したノードのＭＡＣアドレスを設定する。ヘッダ生成部１０２は、転送元ＭＡＣアドレス３１１には、自ノードＮ２のＭＡＣアドレスを設定する。
【０１０７】
ヘッダ生成部１０２は、暗号化メッセージ３０２に新しいヘッダ３２３を付加することで新しいアドホックデータ３２４を生成する。ヘッダ生成部１０２は、生成した新しいアドホックデータ３２４をＭＡＣ生成部１０３に送信する。
【０１０８】
ＭＡＣ生成部１０３は、鍵情報記憶部１０６からＭＡＣ鍵３０６を読み出し、ＭＡＣ鍵３０６を用いて新しいアドホックデータ３２４に対する新しいＭＡＣ３１５を生成する。ＭＡＣ生成部１０３は生成したＭＡＣ３１５をアドホックデータ３２４に付加することで新しいパケット３１０を生成する。
【０１０９】
ＭＡＣ生成部１０３は、生成した新しいパケット３１０をアドホック通信部１１１に送信する。
【０１１０】
アドホック通信部１１１はパケット３１０を、アドホックネットワーク１００を介して送信先のノードに送信する（Ｓ１０１７）。
【０１１１】
次にＭＡＣ検証が不要な場合の処理を説明する。ＭＡＣ検証不要と判断された場合（Ｓ１００９：Ｎｏ）、検証判断部１０５は、アドホックデータ３０４をヘッダ３０３と暗号化メッセージ３０２とに分割する。検証判断部１０５は暗号化メッセージ３０２をヘッダ生成部１０２に送信する。
【０１１２】
検証判断部１０５は、自ノードでは検証を行うことなくパケットを転送するため、ヘッダ３０３のカウンタ値３０８の値をインクリメントする（Ｓ１０１８）。ヘッダ生成部１０２は、パケット３００のヘッダ３０３を新しいヘッダ３２３に変更する。（Ｓ１０１０）。
【０１１３】
ヘッダ生成部１０２は、暗号化メッセージ３０２に新しいヘッダ３２３を付加することで、新しいアドホックデータ３２４を生成する。ヘッダ生成部１０２は、生成したアドホックデータ３２４をＭＡＣ生成部１０３に送信する。
【０１１４】
ＭＡＣ生成部１０３は鍵情報記憶部１０６からＭＡＣ鍵３０６を読み出す。ＭＡＣ生成部１０３は、読み出した新しいＭＡＣ鍵３０６を用いて新しいアドホックデータ３２４に対する新しいＭＡＣ３１５を生成する。
【０１１５】
なお、ＭＡＣを算出する対象のデータの範囲は、適宜変更可能である。例えば、送信元、送信先、暗号化メッセージを含む範囲でＭＡＣを算出するように構成すると、パケットを転送するのみの場合、ＭＡＣは変わらない。よって、送信元、送信先、暗号化メッセージを含む範囲でＭＡＣを算出するシステムであって、ＭＡＣ検証を実行することなくパケットを転送する場合、ノードは、パケットの転送元ＭＡＣアドレス、転送先ＭＡＣアドレス、カウンタ値を変更するだけでよい。この結果、ＭＡＣを再計算することなく、転送可能になるため、転送を実行するノードの処理の負荷が軽減する効果がある。
【０１１６】
ＭＡＣ生成部１０３は生成したＭＡＣ３１５をアドホックデータ３２４に付加することで、新しいＭＡＣ３１５と新しいアドホックデータ３２４とを含む新しいパケット３１０を生成する。ＭＡＣ生成部１０３は生成した新しいパケット３１０をアドホック通信部１１１に送信する。
【０１１７】
図１０は、新しいパケット３１０の構成例である。新しいパケットは、新しいアドホックデータ３２４と新しいＭＡＣ３１５を含む。新しいアドホックデータ３２４は、新しいヘッダ３２３と転送された暗号化メッセージ３０２を含む。
【０１１８】
その後、アドホック通信部１１１はＳ１０１０で新しいヘッダ３２３を書き換えた後のパケット３１０を、アドホックネットワーク１００を介して送信先のノード送信する（Ｓ１０１１）。これにより、Ｓ１００６において転送対象に決定された場合のパケット転送処理を終了する。
【０１１９】
［検証確率を使用した例］
図１１は、カウンタ値とＭＡＣ検証を実行する確率とを対応付けた確率テーブル３６０である。確率テーブル３６０はカウンタ値と検証確率とを含む。検証確率は、カウンタ値に対応する情報であり、ＭＡＣ検証を実行するか否かの確率を示す情報である。検証確率を使用する場合、図７のＳ１００９の判断処理が変わる。以下、ノードＮ２における検証確率を用いたＭＡＣ検証の実行の有無の判定処理について説明する。各ノードは図１１で示す確率テーブル３６０を予め格納しているものとする。各ノードが予め格納する確立テーブルは、システムによっては全て同じでも良いし、別のシステムではノードごとに異なっていても構わない。
【０１２０】
図１２は、検証確率を使用する場合の判定処理のフローチャートである。検証判断部１０５は、Ｓ１００８で抽出したカウンタ値３０８と確率テーブル３６０に基づき、ＭＡＣ検証を実行するか否かを判断する（Ｓ１５０１）。図１１の確率テーブル３６０では、受信したパケット３００のカウンタ値が「０」の場合、検証判断部１０５は０．５の検証確率でＭＡＣ検証を実行すると判断する。同様に、カウンタ値が「１」では０．６５の検証確率で、カウンタ値が「２」では０．８の検証確率で、カウンタ値が「３以上」では１の検証確率で、検証判断部１０５はＭＡＣ検証を実行すると判断する。検証確率はカウンタ値３０８が大きくなるほど、大きくなるように設定している。このため、ＭＡＣ検証をされずにマルチホップを繰り返したパケットはより高い確率でＭＡＣ検証が実行される。
【０１２１】
ＭＡＣ検証を実行する場合（Ｓ１５０１：Ｙｅｓ）、検証判断部１０５は、ＭＡＣ検証を実行すると決定する（Ｓ１５０２）。ＭＡＣ検証を実行しない場合（Ｓ１５０１：Ｎｏ）、検証判断部１０５は、ＭＡＣ検証を実行しないと決定する（Ｓ１５０３）。
【０１２２】
以上により、ノードは、パケット３００のヘッダ３０３に含まれるカウンタ値３０８に基づき、あらかじめ設定された検証確率にしたがって、ＭＡＣ検証部１０８による認証を実施するか、認証を実施せずに転送先にそのまま転送するかを決定する。このような処理をアドホックネットワーク１００内の各ノードがパケットを受信する都度実行することで、シンクノードＳＮや不正パケットを直接受信したノードに負荷の集中を回避することで負荷分散が可能になる。この結果、アドホック通信の遅延やパケットの欠落が低減される。
【０１２３】
確率テーブル３６０の検証確率は、各ノードで個別の検証確率を設定することが可能である。したがって、処理能力の高いノードでは基準テーブル３５０の「検証確率」の値を大きくすることで、多くのパケットについてＭＡＣ検証を実施し、処理能力の低いノードでは基準テーブル３５０の「検証確率」の値を小さくすることで、ＭＡＣ検証の実施の頻度を下げることが可能になる。この結果、より効果的なＭＡＣ検証の負荷の分散が可能になる。
【０１２４】
［ハードウェア構成］
図１５は、アドホックネットワーク１００を構成するノードのハードウェア構成例である。図１５において、ノードは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）７０１と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）７０２と、フラッシュメモリ７０３と、インターフェース（Ｉ／Ｆ）７０４と、暗号化回路７０５と、センサ７０６と、バス７０７とを備えている。ＣＰＵ７０１〜センサ７０６は、バス７０７によってそれぞれ接続されている。
【０１２５】
ＣＰＵ７０１は、ノードの全体の制御を司る。ＣＰＵ７０１は、ＲＡＭ７０２に展開されたプログラムを実行することにより、アドホック通信部１１１、ヘッダ生成部１０２、ＭＡＣ生成部１０３、暗号処理部１０４、検証判断部１０５、鍵情報記憶部１０６、送信先判定部１０７、ＭＡＣ検証部１０８、および復号処理部１０９などとして機能する。
【０１２６】
ＲＡＭ７０２は、ＣＰＵ７０１のワークエリアとして使用される。フラッシュメモリ７０３は、プログラムや基準テーブル、確率テーブル、ルーティングテーブル、ＭＡＣ鍵や暗号鍵などの鍵情報を記憶している。Ｉ／Ｆ７０４は、マルチホップ通信によりパケットを送受信する。
【０１２７】
暗号化回路７０５は、データを暗号化する場合に暗号鍵によりデータを暗号化する回路である。暗号化をソフトウェア的に実行する場合は、暗号化回路７０５に相当するプログラムをフラッシュメモリ７０３に記憶させておくことで、暗号化回路７０５は不要となる。センサ７０６は、センサ７０６固有のデータを検出する。たとえば、温度、湿度、水位、降水量、風量、音量、電力使用量、ガス使用量、時間、時刻など、測定対象にあったデータを検出する。
【０１２８】
以上の説明により、本実施例のノードは、負荷の高いノードでの作業を低減させるため、ＭＡＣ検証の必要性の低いパケットについては、ＭＡＣ検証を行わずに転送する。ＭＡＣ検証の必要性の低いパケットは、過去に通過したノードでＭＡＣ検証がすでになされているものである。そこで、パケットにカウンタ値を含ませることにより、ＭＡＣ検証が過去に行われているか否かを自ノードが検知できるようにした。この構成により、ＭＡＣ検証を行うノードを分散することが可能になる。
【０１２９】
（実施例２）
［ノードの負荷を考慮した判定処理］
次に、ノードの処理の負荷に応じて、ＭＡＣ検証を実施するか否かを判別する処理を説明する。この処理では、ノード（ノードＮ３とする）は、ＭＡＣ検証を行うか否かを、自ノードＮ３の処理の負荷の大きさによって決定する。なお、実施例１と同様の構成については、説明を省略する。
【０１３０】
アドホックネットワークでは、パケットが特定のノードに集中する場合がある。
【０１３１】
このような場合、パケットが集中したノードはパケットの転送、ＭＡＣ検証等の処理の負荷が高いため、処理量を低減させることが望ましい。同じ経路上のノードには、ＭＡＣ検証を行っても処理が遅延しないものも存在する場合がある。
【０１３２】
そこで、各ノードに自ノードの負荷の検出機能を設け、自ノードの負荷が低い場合には、カウンタ値に関わらずＭＡＣ検証を実行し、自ノードの負荷が高い場合のみ、カウンタ値に基づきＭＡＣ検証の必要の有無を判断する。
【０１３３】
この構成によれば、負荷に余裕があるノードがＭＡＣ検証を積極的に実行することでカウンタ値が初期化されるため、負荷に余裕が無いノードでＭＡＣ検証を実行しなければならないパケット数が減少する。
【０１３４】
図１３は、自ノードの負荷の検出を考慮した実施の形態にかかるノードの機能ブロック図である。
【０１３５】
図１３において、アドホック通信部１１１、ヘッダ生成部１０２、ＭＡＣ生成部１０３、暗号処理部１０４、鍵情報記憶部１０６、送信先判定部１０７、ＭＡＣ検証部１０８、および復号処理部１０９については、図５と同様であるため、説明を省略する。
【０１３６】
負荷検出部１１２は、自ノードＮ３の現在の負荷の大きさを検出する。
【０１３７】
検証判断部１１５は、パケットに含まれるカウンタ値および負荷検出部１１２で検出した自ノードの負荷の大きさに基づき、ＭＡＣ検証の有無を判定する。
【０１３８】
なお、本実施の形態において、アドホックネットワーク１００の全ノードは、自ノードのＭＡＣ検証に要する負荷量および自ノードの処理能力が低下しない負荷量Ａを測定あるいは計算により求められており、記憶部１１３に格納されているものとする。
【０１３９】
図１４は、ノードＮ３のＭＡＣ検証を実行するか否かを判別する処理のフローチャートである。本フローチャートは、図７のＳ１００９に相当する。
【０１４０】
負荷検出部１１２は、現在の負荷量を検出する（Ｓ１１１１）。
【０１４１】
検証判断部１１５は、記憶部１１３に格納されたＭＡＣ検証に要する負荷量を記憶部１１３から読み出し、Ｓ１１１１で検出した現在の負荷量に加算することで仮想負荷量を算出する（Ｓ１１１２）。
【０１４２】
検証判断部１１５は、Ｓ１１１２で算出した仮想負荷量が記憶部１１３に格納された負荷量Ａを超えるか否かを判定する（Ｓ１１１３）。
【０１４３】
仮想負荷量が負荷量Ａを超える場合（Ｓ１１１３：Ｙｅｓ）、カウンタ値３０８を参照してＭＡＣ検証を実行するか否かを判定する（Ｓ１１１４）。ＭＡＣ検証が必要な場合（Ｓ１１１４：Ｙｅｓ）、ＭＡＣ検証を実施すると判定する（Ｓ１１１５）。ＭＡＣ検証が不要な場合（Ｓ１１１４：Ｎｏ）、ＭＡＣ検証を実施しないと判定する（Ｓ１１１６）。
【０１４４】
仮想負荷量が負荷量Ａを超えない場合（Ｓ１１１３：Ｎｏ）、ＭＡＣ検証を実施すると判定する（Ｓ１１１５）。
【０１４５】
以上の構成により、負荷のないノードでは積極的にＭＡＣ検証が実行されるため、より上流のノードでのＭＡＣ検証の要否判定の自由度が大きくなる。上流のノードでの負荷が分散可能になるため、アドホックネットワーク全体の処理の効率が上がる。
【０１４６】
なお、検証判断部１１５は、Ｓ１１１２およびＳ１１１３において仮想負荷量により、要否判定をするのではなく、自ノードＮ３の負荷量が所定の閾値（例えば、負荷８０％）を超えているか否かで判断することも可能である。
【０１４７】
また、各ノードは自ノードの負荷に応じて異なる複数の基準テーブルを予め記憶しておき、ノードの負荷状況に応じた基準テーブルを使用することも可能である。
【０１４８】
以上の説明により、各ノードは自ノードの負荷が高く且つカウンタ値が低い場合には、ＭＡＣ検証を行わずに次のノードにパケットを転送する。一方、各ノードは自ノードの負荷が低い場合、あるいは、カウンタ値が高い場合には、ＭＡＣ検証を行う。この構成により、処理の負荷に余裕のあるノードが優先してＭＡＣ検証を実行することが可能になる。
【符号の説明】
【０１４９】
１００          ネットワーク
１０８          ＭＡＣ検証部
１１１          アドホック通信部
１１３          記憶部
１１５          検証判断部
３００          パケット
３０３、３２３  ヘッダ
３０１          メッセージ
３１２          ＭＡＣアドレス
１０１          通常ネットワーク
１０２          ヘッダ生成部
１０３          ＭＡＣ生成部
１０４          暗号処理部
１０５          検証判断部
１０６          鍵情報記憶部
１０７          送信先判定部
１０８          ＭＡＣ検証部
１０９          復号処理部
１１１          アドホック通信部
１１２          負荷検出部
１１３          記憶部
１１５          送信部
１１６          受信部
３００          パケット
３０１          メッセージ
３０２          暗号化メッセージ
３０３          ヘッダ
３０４          アドホックデータ
３０５          ＭＡＣ
３０６          ＭＡＣ鍵
３０７          暗号鍵
３０８          カウンタ値
３０９          復号鍵
３１０          パケット
３１１          転送元ＭＡＣアドレス
３１２          転送先ＭＡＣアドレス
３１３          送信元ＭＡＣアドレス
３１４          宛先ＭＡＣアドレス
３１５          ＭＡＣ
３２０          ルーティングテーブル
３２１          転送元のＭＡＣアドレス
３２２          転送先のＭＡＣアドレス
３２３          新しいヘッダ
３２４          新しいアドホックデータ
３２５          ルーティングテーブル
３２６          転送元のＭＡＣアドレス
３２７          転送先のＭＡＣアドレス
３５０          基準テーブル
３６０          確率テーブル
７０１          ＣＰＵ
７０２          ＲＡＭ
７０３          フラッシュメモリ
７０４          インターフェース
７０５          暗号化回路
７０６          センサ
７０７          バス
【図１】
2013072973.tif 000003
【図２】
2013072973.tif 000004
【図３】
2013072973.tif 000005
【図４】
2013072973.tif 000006
【図５】
2013072973.tif 000007
【図６】
2013072973.tif 000008
【図７】
2013072973.tif 000009
【図８】
2013072973.tif 000010
【図９】
2013072973.tif 000011
【図１０】
2013072973.tif 000012
【図１１】
2013072973.tif 000013
【図１２】
2013072973.tif 000014
【図１３】
2013072973.tif 000015
【図１４】
2013072973.tif 000016
【図１５】
2013072973.tif 000017
【国際調査報告】
2013072973.tif 000018
2013072973.tif 000019
2013072973.tif 000020
2013072973.tif 000021