"マルチホップ通信によりパケットを送受信するアドホックネットワーク内のノードであって、転送元のノードからのパケットを受信する受信部と、パケットが不正か否かを検証する処理を実行するか否かを決定するために用いるカウンタ値と、カウンタ値ごとにパケットが不正か否かを検証する処理を実行するか否かを定めた検証情報とを対応づけて記憶する記憶部と、メッセージと、転送先アドレスおよびカウンタ値を含むヘッダと、パケットが不正か否かを検証するために用いる符号情報とを含むパケットを前記受信部が受信すると、該受信したパケットに含まれるカウンタ値に対応する該記憶部に記憶された該カウンタ値に対応付けられた該検証情報に基づき検証処理を実行するか否かを判断する判断部と、該検証処理を実行すると判別した場合に受信した該パケットの検証処理を実行してカウンタ値を初期値に変更したパケットを生成する生成部と、該転送先アドレスに該生成部で生成された該パケットを送信する送信部とを有することを特徴とする通信ノード。該判断部は、該検証処理を実行しないと判断した場合、カウンタ値を変更したパケットを生成することを特徴とする請求項1に記載の通信ノード。該検証情報は、該カウンタ値と検証処理を実行する確率とを関連付けた情報であることを特徴とする請求項1または請求項2に記載の通信ノード。自ノードの負荷量を検出する検出部を更に有し、該判断部は、該検出部で検出された該負荷量が所定量よりも高い場合に、カウンタ値に基づく検証処理を実行するか否かの判断を行なうことを特徴とする請求項1または請求項2に記載の通信ノード。マルチホップ通信によりパケットを送受信するアドホックネットワーク内のノードによる通信制御方法であって、メッセージと、転送先アドレスおよびパケットが不正か否かを検証する処理を実行するか否かを決定するために用いるカウンタ値を含むヘッダと、パケットが不正か否かを検証するために用いる符号情報とを含むパケットを受信し、カウンタ値に予め対応づけて記憶された、パケットが不正か否かを検証する処理を実行するか否かを定めた検証情報に基づき、該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断し、該検証処理を実行すると判断した場合に受信した該パケットの検証処理を実行してカウンタ値を初期値に変更したパケットを生成し、該転送先アドレスに生成した該パケットを送信することを特徴とする通信制御方法。該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断する際に、該検証処理を実行しないと判断した場合、カウンタ値を変更したパケットを生成することを特徴とする請求項5に記載の通信制御方法。該検証情報は、該カウンタ値と検証処理を実行する確率とを関連付けた情報であることを特徴とする請求項5または請求項6に記載の通信制御方法。該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断する際に、該検出された該負荷量が所定量よりも高い場合に、カウンタ値に基づく検証処理を実行するか否かの判断を行なうことを特徴とする請求項5または請求項6に記載の通信制御方法。マルチホップ通信によりパケットを送受信するアドホックネットワーク内のノードで処理を実行させるための制御プログラムであって、該ノードにメッセージと、転送先アドレスおよびパケットが不正か否かを検証する処理を実行するか否かを決定するために用いるカウンタ値を含むヘッダと、パケットが不正か否かを検証するために用いる符号情報とを含むパケットを受信し、カウンタ値に予め対応づけて記憶された、パケットが不正か否かを検証する処理を実行するか否かを定めた検証情報に基づき、該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断し、該検証処理を実行すると判断した場合に受信した該パケットの検証処理を実行してカウンタ値を初期値に変更したパケットを生成し、該転送先アドレスに生成した該パケットを送信する処理を実行させるための制御プログラム。該ノードに、該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断させる際に、該検証処理を実行しないと判断した場合、カウンタ値を変更したパケットを生成させることを特徴とする請求項9に記載の制御プログラム。該検証情報は、該カウンタ値と検証処理を実行する確率とを関連付けた情報であることを特徴とする請求項9または請求項10に記載の制御プログラム。該ノードに、該受信したパケットに含まれるカウンタ値で検証処理を実行するか否かを判断させる際に、該検出された該負荷量が所定量よりも高い場合に、カウンタ値に基づく検証処理を実行するか否かの判断を行なわせることを特徴とする請求項9または請求項10に記載の制御プログラム。しかしながら、上述した先行技術では、複数回のホップを経ても検証されない不正なパケットが存在することとなり、アドホックネットワークの伝送効率の低下を招いていた。他方、毎ホップごとに検証される正規なパケットが存在することとなり、再送攻撃が実行されているという状況下では、無駄な検証を処理しているという問題も生じていた。本発明は、上述した先願技術による問題点を解消するため、不正なパケットの検出処理をアドホックネットワークのノードに効率的に分散することを課題とする。上述した課題を解決し、目的を達成するため、本発明の一観点によれば、ノードは、カウンタ値とパケットが不正か否かを検証する処理を実行するか否かを定めた検証情報とを対応づけて記憶する記憶部と、メッセージと、転送先アドレスおよびカウンタ値を含むヘッダと、パケットが不正か否かを検証するための符号情報とを含むパケットを受信すると、該受信したパケットに含まれるカウンタ値に対応する該メモリに記憶された該カウンタ値に対応付けられた該検証情報に基づき検証処理を実行するか否かを判断する判断部と、該検証処理を実行すると判別した場合に受信した該パケットの検証処理を実行してカウンタ値を初期値に変更したパケットを生成する生成部と、該転送先アドレスに該生成部で生成された該パケットを送信する送信部とを有する。本発明の一観点によれば、不正なパケットの検出処理をアドホックネットワークのノードに効率的に分散することが可能になる。以下に添付図面を参照して、この発明にかかる通信方法、ノード、およびネットワークシステムの実施の形態を詳細に説明する。実施例1[ネットワークシステム]図1は、実施の形態にかかるネットワークシステムの一実施例を示す説明図である。ネットワークシステムは、管理サーバSと、シンクノードSNと、ノードNa~Nhとを含む。管理サーバSとシンクノードSNとはインターネット、LAN、WANなどの通常ネットワーク101を介して接続されている。シンクノードSNとノードNa~Nhとは、アドホックネットワーク100を介して接続されている。シンクノードSNは、アドホックネットワーク100と通常ネットワーク101とを接続する中継機器である。シンクノードSNは、アドホックネットワーク100のプロトコルの形式の情報と通常ネットワーク101のプロトコルの形式の情報の両方を送受信可能であり、アドホックネットワーク100と通常ネットワーク101との間で情報をプロトコル変換することにより、通信の転送を行う。例えば、アドホックネットワーク100内の各ノードから管理サーバS宛に送信されたパケットは、シンクノードSNにてプロトコル変換され、通常ネットワーク101にパケットとして転送されて管理サーバSに到達する。また、管理サーバSやシンクノードSNからそれぞれのノード宛てに送信されたデータは、シンクノードSNにてプロトコル変換され、シンクノードSNからアドホックネットワーク100内の各ノードにパケットとして転送される。なお、シンクノードSNは、各ノード間の通信の可否をルーティングテーブルにより把握しており、ルーティングテーブルの情報を元に、シンクノードSNは自律的にルーティングする。各ノードは、シンクノードSNのルーティングにより、マルチホップ通信を行う際の転送元と転送先が設定される。アドホックネットワーク100内には、複数のノードが設けられている。図1では、代表としてノードNa~Nhを示している。各ノードは、所定の通信圏内で通信可能な他ノードとマルチホップ通信が可能な無線通信装置である。アドホックネットワーク100では、すべてのノードNa~Nhが直接シンクノードSNと通信できる必要はなく、マルチホップを繰り返すことにより、最終的にすべてのノードNa~NhがシンクノードSNと通信できればよい。このため、アドホックネットワーク100では、一部のノードがシンクノードSNと通信可能であればよい。図1では、シンクノードSNと直接通信可能なノードは、ノードNa,Ndである。本実施例のネットワークシステムは、たとえば各家庭の電力やガスの使用量を収集するシステムに適用される。このようなシステムの場合、各ノードは、各家庭の電力やガスの使用量を検出するための各家庭の電力メータやガスメータに設置される。管理サーバSは、各ノードが検出した電力やガスの使用量を収集して、管理サーバSに送信することで、各家庭の電力やガスの使用量を収集することが可能になる。具体的には、例えば、各家庭の電力メータやガスメータにそれぞれノードが組み込まれているとする。各ノードは、各ノードが検出した各家庭の電力やガスの使用量を、アドホックネットワーク100を介して管理サーバSに送信する。なお、各家庭の電力やガスの使用量は、各ノードが計測してもよく、また、各ノードが電力メータやガスメータから取得してもよい。シンクノードSNは、アドホックネットワーク100内の各ノードから受信した各家庭の電力やガスの使用量を、通常ネットワーク101を介して電力会社やガス会社のサーバ例えば、管理サーバSに送信する。これにより、作業員が現地に出向くことなく電力やガスの使用量を収集することができる。また、本実施形態のネットワークシステムでは、暗号鍵を用いてパケットを暗号化する。あるいは、MAC鍵を用いてパケットに対するメッセージ認証コードMACを生成付加する。これにより、アドホックネットワーク100のセキュア通信データ秘匿性、改ざん防止などを確保する。なお、図1の例では、アドホックネットワーク100内に1台のシンクノードSNを設ける構成としたが、一つのアドホックネットワーク100内に複数台のシンクノードSNを設ける構成としてもよい。また、図1ではアドホックネットワーク100は一つであるが、複数のアドホックネットワークを含む場合もある。複数のアドホックネットワークを含む場合、複数のアドホックネットワークにはそれぞれ少なくとも一つのシンクノードが含まれており、管理サーバSは当該シンクノードと通常ネットワークを介して接続する。この構成により、管理サーバSと全てのノードとのデータ送受信が可能になる。また、本ネットワークシステムは、電力、ガスの使用量の収集だけでなく、各ノードに温度,湿度,光量などを検知するセンサ機能を持たせて、例えば、環境などの調査に使用することも可能である。図1では、アドホックネットワーク100を構成するノードNa~Nhにより、4つの経路R1~R4が設定されているものとする。具体的には、経路R1は、ノードNc→ノードNb→ノードNa→シンクノードSNというルート逆方向の通信も可である。経路R2は、ノードNe→ノードNd→シンクノードSN逆方向の通信も可である。経路R3は、ノードNg→ノードNf→ノードNd→シンクノードSNというルート逆方向も可である。経路R4は、ノードNh→ノードNf→ノードNd→シンクノードSNというルート逆方向も可である。なお、ノードNaやノードNdはシンクノードと直接通信するノードである。シンクノードSNに近いノードを上流側のノードと呼ぶ。なお、アドホックネットワーク100の規模によっては、ノードNbやノードNeも上流側のノードとなる。各ノードNa~Nhは、各々検出されたデータをルーティングされた経路R1~R4に従ってシンクノードSNに送信する。したがって、シンクノードSNに近い上流のノードほど、下流のノードの検出データをさらに上流に転送することとなる。すなわち、転送元のノードからのパケットを転送先に送信する頻度が高くなり、転送負荷が高くなる。[本実施例の不正パケットの検出と破棄]図2は、本実施の形態での不正パケットの破棄の説明図である。なお、不正パケットの検出には、種々の方式がある。例えば、MAC鍵を有さないノードからのパケットに対してMAC検証を実行すると、ノードはMAC検証に失敗する。このようなMAC検証で失敗するパケットを不正パケットと判定する。また、正当なパケットのコピーを大量に送付するような攻撃を受ける場合もある。このような場合、パケットはヘッダに当該パケットの送信時刻情報を保持させる。ノードがパケットを受信した時刻とヘッダに保持した送信時刻とを比較し、その差が大きい場合には、再送攻撃が実行されたと判定することも可能である。本実施の形態では、アドホックネットワーク100内をマルチホップ通信により転送されるパケットは、経路上のノードにより、MAC鍵KによるMAC値の認証MAC認証をされる場合とされない場合がある。例えば、本実施例の各ノードは、MAC認証を実施する確率認証実施確率Pを50と設定しておく。これにより、不正パケット群を受信したノードは、不正パケット群のうち半分50の個数の不正パケットをMAC認証し、残余の半分の個数の不正パケットを転送先ノードに転送する。また、パケットを受信したノードは、パケットのヘッダに格納されたカウンタ値を抽出し、当該カウンタ値が一定の値本実施の形態では3以上になった場合にMAC認証を実行する。このMAC認証をするか否かを決定する一定の値は、不正パケットを転送するために要する処理量とMAC検証を行うために要する処理量のバランスによって決定される。MAC認証をするか否かを決定する一定の値は、例えば、ネットワークの規模、アドホックネットワーク100のノードのホップ数、全パケットに対して存在する不正パケットの割合、ノードの負荷状況等に応じて適宜決定される。例えば、ノードの負荷が常に低い場合には、全ノードでMAC検証を行ってもよい。また、不正パケットの割合が低い場合、MAC認証をするか否かを決定する一定の値を大きくしてもよい。このように、MAC認証の処理を実行するノードを分散させることにより、シンクノードSNやパケットを直接受信するノードにかかるMAC認証の処理の負荷が軽減される。この結果、アドホックネットワーク100の通信の効率化を図ることができる。図2のアドホックネットワーク100は、ノードNa、Nb、Nc、Nd、NeとシンクノードSNとを含む。シンクノードSNのアドホックルーティングにより、パケットは、ノードNc→ノードNd→ノードNe→ノードNb→ノードNa→シンクノードSNの順序で、転送されるものとする。各ノードNa~Neは、メッセージを認証するためのMAC鍵、すなわちパケットが不正であるか否かを判別する際に使用するMAC鍵を共有する。各ノードNa~Neは、パケットにMACMessageAuthenticationCode;メッセージ認証子。以下、MAC値と称す。を付けて転送する。たとえば、ノードNcでデータが検出されると、ノードNcは検出データを含むメッセージを暗号化する。ここで、ノードNcが不正ノードからの100個の不正パケットを受信したとする。図2の例では各ノードの認証実施確率P=50であるため、ノードNcは50個の不正パケットをMAC認証する。ノードNcは、残余の50個の不正パケットを転送先のノードNdに転送する。MAC認証をおこなう50個の不正パケットの各々から得られるMAC値は、ノードNcが有する認証鍵により生成されるMAC値とは異なる。したがって、MAC認証の対象となった50個の不正パケットはノードNcに破棄される。各ノードが送信元になる場合、各ノードが有する暗号鍵によりメッセージを暗号化して、暗号化メッセージを生成する。図2の場合、ノードNcは暗号鍵Kc、ノードNdは暗号鍵Kd、ノードNeは暗号鍵Ke、ノードNbは暗号鍵Kb、ノードNaは暗号鍵Kaを有し、管理サーバSは、各ノードが有する暗号鍵Ke、Kd、Kc,Kb,Kaを有する。これら暗号鍵は異なる運用をすることも可能であるし、全て同じ鍵として運用することも可能である。本実施の形態では、パケットの送信元と送信先とが暗号鍵を有する。暗号化したメッセージは暗号化メッセージという。次に、ノードNcはパケットのヘッダを生成する。このときノードNcは、ヘッダのカウンタ値を初期値に設定する。ノードNcは暗号化メッセージとヘッダとからMAC値を生成し、ヘッダ、暗号化メッセージ、およびMAC値を含むパケットのヘッダを更新してノードNdに転送する。ノードNdはノードNcから転送されてきたパケットをノードNeに転送する。ノードNdは、認証実施確率P=50により、ノードNcからの50個の不正パケットのうち25個をMAC認証し、残余の25個の不正パケットを転送先となるノードNeに転送する。MAC認証をおこなう25個の不正パケットの各々から得られるMAC値は、ノードNdが有する認証鍵により生成されるMAC値とは異なる。したがって、MAC認証の対象となった25個の不正パケットはノードNdに破棄される。また、ノードNdは、パケットのヘッダに格納されたカウンタ値を抽出し、当該カウンタ値が3以上のパケットについてMAC認証を実行する。図2の例では、ノードNdが受信した不正パケットのカウンタ値は、0となっている。したがって、ノードNdは、残余の不正パケットについてMAC認証を実施することなく転送する。なお、ノードNdは、不正パケットを転送する際、当該不正パケットのカウンタ値0を1だけインクリメントし1にする。ノードNeは、認証実施確率P=50により、ノードNdからの25個の不正パケットのうち13個をMAC認証し、残余の12個の不正パケットを転送先となるノードNbに転送する。MAC認証をおこなう25個の不正パケットの各々から得られるMAC値は、ノードNdが有する認証鍵により生成されるMAC値とは異なる。したがって、MAC認証の対象となった13個の不正パケットはノードNdに破棄される。また、ノードNeは、パケットのヘッダに格納されたカウンタ値を抽出し、当該カウンタ値が3以上のパケットについてMAC認証を実行する。図2の例では、ノードNeが受信した不正パケットのカウンタ値は、1となっている。したがって、ノードNeは、残余の不正パケットについてMAC認証を実施することなく転送する。なお、ノードNdは、不正パケットを転送する際、当該不正パケットのカウンタ値1を1だけインクリメントし2にする。ノードNbは、認証実施確率P=50により、ノードNbからの12個の不正パケットのうち6個をMAC認証し、残余の6個の不正パケットを転送先となるノードNaに転送する。MAC認証をおこなう6個の不正パケットの各々から得られるMAC値は、ノードNbが有する認証鍵により生成されるMAC値とは異なる。したがって、MAC認証の対象となった6個の不正パケットはノードNbに破棄される。また、ノードNbは、パケットのヘッダに格納されたカウンタ値を抽出し、当該カウンタ値が3以上のパケットについてMAC認証を実行する。図2の例では、ノードNbが受信した不正パケットのカウンタ値は、2となっている。したがって、ノードNbは、残余の不正パケットについてMAC認証を実施することなく転送する。なお、ノードNbは、不正パケットを転送する際、当該不正パケットのカウンタ値2を1だけインクリメントし3にする。ノードNaは、認証実施確率P=50により、ノードNbからの6個の不正パケットのうち3個をMAC認証する。ノードNaは、パケットのヘッダに格納されたカウンタ値を抽出し、当該カウンタ値が3以上のパケットについてMAC認証を実行する。図2の例では、ノードNaが受信した不正パケットのカウンタ値は、3となっている。したがって、ノードNaは、残余の全ての不正パケットについてMAC認証を実施する。この結果、ノードNcで検出した全ての不正パケットは、ノードNaを通過することなく、破棄されることになる。同様に、ノードNbでデータが検出されると、ノードNbは検出データに基づき暗号化メッセージを生成する。また、ノードNbはパケットのヘッダを生成する。ノードNbは暗号化メッセージとヘッダとからMAC値を生成し、ヘッダ、暗号化メッセージ、およびMAC値を含むパケットのヘッダを更新してノードNaに転送する。ノードNaはノードNbから転送されてきたパケットをシンクノードSNに転送する。図2の場合、ノードNcが送信元となるパケットのカウンタ値は初期値として0に設定される。その後、マルチホップ通信が行われ、転送処理を実行するノードは、パケットについてMAC検証を実行しない場合、カウンタ値をインクリメントする。図2の場合、ノードNd,Ne,Nbが、パケットについてカウンタ値に基づくMAC検証を実行しないノードに相当する。一方、パケットについてMAC検証を実行したノードは、カウンタ値を初期化する。図2の場合、ノードNaが、パケットについてMAC検証を実行するノードに相当する。以上の構成にすることで、各ノードは、認証確率Pに基づきMAC認証を実施するとともにカウンタ値が一定値以上になったパケットについてMAC検証を実行すればよいため、アドホックネットワーク100全体でのMAC検証の処理量が低減する。また、カウンタ値が所定数以上のパケットについては必ずMAC検証が実行されるので、不正パケットの早期の除去が可能になる。[パケットの構成]図3は、実施の形態にかかるパケットの構成例を示す説明図である。パケット300は、アドホックデータ304、およびMAC305で構成される。アドホックデータ304はヘッダ303と暗号化メッセージ302とを含む。ヘッダ303は、暗号化メッセージ302の送信元のアドレス、宛先のアドレス、転送元のアドレス、転送先のアドレス、およびカウンタ値の情報を含む。それぞれのアドレスは、例えば、送信元のノードのMACMediaAccessControlアドレス、宛先のノードのMACアドレス、転送元のノードのMACアドレス、転送先のノードのMACアドレスが使用される。以降本実施例では、アドレスにMACアドレスを用いた場合を説明する。ヘッダ303は、転送元MACアドレス311、転送先MACアドレス312、送信元MACアドレス313、宛先MACアドレス314、およびカウンタ値308を含む。転送元MACアドレス311は、パケット300のマルチホップ通信元となるノードのMACアドレスである。転送先MACアドレス312は、パケット300のマルチホップ通信先となるノードのMACアドレスである。転送元MACアドレス311および転送先MACアドレス312は、マルチホップ通信により転送される都度、パケット300を受信したノードによって、転送先のノードからみた転送元および転送先のMACアドレスになるように書き換えられる。送信元MACアドレス313は、パケット300内のメッセージ301の検出元となるノードのMACアドレスである。宛先MACアドレス314は、パケット300内のメッセージ301の宛先となるノードのMACアドレスである。例えば、ノードが送信元となる場合、宛先MACアドレス314はシンクノードSNのMACアドレスまたは管理サーバSのMACアドレスとなる。転送先MACアドレス312と宛先MACアドレス314が一致する場合、宛先MACアドレス314で特定されるノードにパケットが到達したこととなり、マルチホップ通信が終了する。カウンタ値308は、MAC検証を行うか否かを判断するための情報である。本実施例のカウンタ値308は、過去にMAC検証が行われた以降に、パケット300がMAC検証をされずに通過したノードの数に相当する。カウンタ値は、ノードを通過する際にノードによって検証されなかった場合に、1増加される。一方MAC検証がなされると、カウンタ値は0に初期化される。暗号化メッセージ302は、メッセージ301が暗号化されたものである。メッセージ301は例えば、送信元のノードがサーバに送信するデータである。送信元となるノードは、メッセージ301の秘匿性を確保するために、暗号鍵307を用いてメッセージ301を暗号化することで、暗号化メッセージ302を作成する。本実施例の暗号鍵307はノード毎に一意であるものとする。MAC305は、メッセージ認証コードMACの値である。MAC305は、アドホックデータ304を、アドホックネットワーク100の全ノードで共有するMAC鍵MAC鍵306で暗号化したメッセージ認証子である。送信元のノードは、あるいは転送元のノードは、アドホックデータ304に改竄がないことを転送先のノードで検証可能にするために、MAC鍵によってアドホックデータ304のMAC305を生成し、アドホックデータ304に生成したMAC305を付加したパケット300を生成する。各ノードはパケット300を受信した場合、パケット300をアドホックデータ304とMAC305に分離し、アドホックデータ304に対してMAC検証を実行する。検証に失敗した場合には、パケット300を廃棄する。[ルーティングテーブル]図4は、各ノードが記憶するルーティングテーブルの一例を示す説明図である。図4のAは、ノードNaのルーティングテーブル320を示す。図4のBは、ノードNbのルーティングテーブル325を示す。なお、図4では、便宜上、ノードの符号をMACアドレスの代わりとして説明する。例えば、ルーティングテーブルにNaとある場合は、ノードNaのMACアドレスを示すものとする。ルーティングテーブルの1行目のレコードは、シンクノードSNへ向かう上り方向に転送する場合に用いるレコードであり、2行目のレコードは、末端へ向かう下り方向に転送する場合に用いるレコードである。2行目のレコードは、例えば、シンクノードSNからブロードキャストされた場合に適用される。具体的には、ノードNaは、ルーティングテーブル320の転送元のMACアドレス321により特定されるノードからパケットが転送されてくると、ルーティングテーブル320を参照して、転送元のMACアドレス321に対応する転送先のMACアドレス322を特定する。そして、ノードNaは、受信したパケット300のヘッダ303の転送先MACアドレス312を、ルーティングテーブル320の転送先のMACアドレス322で特定されたMACアドレスに書き換える。また、ノードNaは、受信したパケット300のヘッダ303の転送元MACアドレス311を、ノードNaのMACアドレスに書き換える。ノードNaは、転送元のMACアドレスがNb、転送先のMACアドレスがNaのパケットが、ノードNbから転送されてくると、ルーティングテーブル320にしたがって、ヘッダ303の転送元MACアドレス311をNbからNaに書き換え、転送先MACアドレス312をNaからSNに書き換える。また、ノードNaは、転送元のMACアドレスがSN、転送先のMACアドレスがNbのパケットが、シンクノードSNから転送されてくると、ルーティングテーブル320にしたがって、ヘッダ303の転送元MACアドレス311をSNからNaに書き換え、転送先MACアドレス312をNaからNbに書き換える。同様にノードNbは、ルーティングテーブル325の転送元のMACアドレス326により特定されるノードからパケットが転送されてくると、ルーティングテーブル325を参照して、転送元のMACアドレス326に対応する転送先のMACアドレス327を特定する。そして、ノードNbは、受信したパケット300のヘッダ303の転送先MACアドレス312を、ルーティングテーブル325の転送先のMACアドレス327で特定されたMACアドレスに書き換える。また、ノードNbは、受信したパケット300のヘッダ303の転送元MACアドレス311を、ノードNbのMACアドレスに書き換える。ノードNbは、転送元のMACアドレスがNe、転送先のMACアドレスがNbのパケット300が、ノードNeから転送されてくると、ルーティングテーブル325にしたがって、ヘッダ303の転送元MACアドレス311をNeからNbに書き換え、転送先MACアドレス312をNbからNaに書き換える。また、転送元のMACアドレスがNa、転送先のMACアドレスがNeのパケット300がノードNaから転送されてくると、ノードNbはルーティングテーブル325にしたがって、ヘッダ303の転送元MACアドレス311をNaからNbに書き換え、転送先MACアドレス312をNbからNeに書き換える。[ノードの機能説明]図5は、本実施の形態にかかるノードの機能ブロック図である。ノードNは、アドホック通信部111、ヘッダ生成部102、MAC生成部103、暗号処理部104、検証判断部105、鍵情報記憶部106、送信先判定部107、MAC検証部108、記憶部113、および復号処理部109を含む。アドホック通信部111は、送信部115及び受信部116を含む。送信部115は、アドホックネットワーク100を介して送信先のノードにパケット300を送信する。また、受信部116は、アドホックネットワーク100を介して送信元のノードからパケット300を受信する。本実施の形態では、特に記載がない限り、アドホック通信部111による送信は、送信部115によって行われており、アドホック通信部111の受信は、受信部116によって行われているものとする。ヘッダ生成部102は、ヘッダ303を生成する。また、ヘッダ生成部102は暗号化メッセージ302にヘッダ303を付加することにより、アドホックデータ304を生成する。MAC生成部103は、鍵情報記憶部106からMAC鍵306を取り出し、アドホックデータ304に対するMAC305を生成する。また、MAC生成部103は、アドホックデータ304に生成したMAC305を付加してパケット300を生成する。暗号処理部104は、暗号鍵307を用いてメッセージ301を暗号化することで、暗号化メッセージ302を生成する。検証判断部105は、ヘッダ303内のカウンタ値308に応じてパケット300を検証するか否かを判断する。また、検証判断部105は認証確率Pに基づきMAC認証をするか否かを判別する。鍵情報記憶部106は、暗号鍵307、MAC鍵306、および復号鍵309を記憶する。送信先判定部107は、ヘッダ303に基づき、自ノードが、受信したパケット300の最終的な送信先であるか否かを判定する。MAC検証部108は、MAC鍵306を読み出し、アドホックデータ304に対するMAC305を検証する。記憶部113は、ルーティングテーブル、基準テーブル、確率テーブルなどを記憶する。復号処理部109は鍵情報記憶部106から復号鍵309を取り出し、暗号化メッセージ302を復号してメッセージ301を入手する。なお、システムによって、復号鍵309は暗号鍵307と同じ場合もある。また、送信元のノード毎の復号鍵を記憶する場合もある。[データ検出~パケット生成~パケット送信処理]次に、あるノードここではノードN1とするがメッセージ301を送信する場合の処理を説明する。図6は、アドホックネットワーク100に含まれるそれぞれのノードが実行する検出データの送信処理手順を示すフローチャートである。本処理では、ノードN1は、センサが検出したデータをシンクノードSNに送信するためのパケットを生成する処理を説明する。まず、ノードN1は、センサ706により対象となるデータが検出されるのを待ち受けS901:No、データが検出されるとS901:Yes、ノードNは、データを含む送信対象のメッセージ301を暗号処理部104に送信する。暗号処理部104は、送信対象のメッセージ301を受信すると鍵情報記憶部106から暗号鍵307を読み出し、メッセージ301を暗号化してS902、暗号化メッセージ302を生成する。暗号処理部104は、生成した暗号化メッセージ302をヘッダ生成部102に送信する。ヘッダ生成部102は、ヘッダ303の情報を生成するS903。ノードN1は、ヘッダ303の転送元MACアドレス311には自ノードのMACアドレスを設定し、転送先MACアドレス312には、ノードN1が記憶するルーティングテーブルに規定された転送先のMACアドレスのうち上り側図4のルーティングテーブルの一行目のレコードに相当するのMACアドレスを設定する。また、ノードN1は、ヘッダ303の送信元MACアドレス313には自ノードのMACアドレスを設定し、宛先MACアドレス314には、シンクノードSNのMACアドレスを設定する。ヘッダ生成部102は、カウンタ値に初期値を設定するS904。その後、ヘッダ生成部102は暗号化メッセージ302に生成したヘッダ303を付加してアドホックデータ304を生成する。ヘッダ生成部102は、生成したアドホックデータ304をMAC生成部103に送信する。MAC生成部103は鍵情報記憶部106からMAC鍵306を読み出し、受信したアドホックデータ304に対するMAC305を算出するS905。MAC生成部103は、アドホックデータ304に生成したMAC305を付加してパケット300を生成する。MAC生成部103は生成したパケット300をアドホック通信部111に送信する。アドホック通信部111はMAC生成部103から受信したパケット300すなわち、MAC付アドホックデータを、アドホックネットワーク100を介して転送先MACアドレス312宛に送信するS906。以上により、ノードN1の検出データの送信処理を終了する。次に、あるノードノードN2とするがパケット300を受信した場合の処理を説明する。[パケット転送処理]図7は、ノードN2によるパケットの受信時の処理のフローチャートである。図7において、ノードはアドホック通信部111によりパケット300を受信するのを待ち受けS1001:No、パケット300を受信した場合S1001:Yes、パケット300を送信先判定部107に送信する。送信先判定部107は、受信したパケット300からアドホックデータ304とMAC305とを抽出する。送信先判定部107は、アドホックデータ304に含まれるヘッダ303を解析しS1002、自ノードN2が受信したパケット300の最終的な送信先であるか否かを判定するS1003。送信先判定部107は、自ノードN2が最終的な送信先であると判定した場合S1003:Yes、受信したパケット300が不正パケットか否かを判別するため、抽出したアドホックデータ304とMAC305をMAC検証部108に送信する。MAC検証部108は、鍵情報記憶部106からMAC鍵306を読み出し、MAC鍵306と受信したアドホックデータ304とからMACを算出するS1004。MAC検証部108は、S1004で算出したMACと受信したパケット300に含まれるMAC305の値とが一致するか否かを判別する以下、この一致または不一致の判定処理をMAC検証とするS1005。MAC検証に失敗した場合、すなわち両者のMAC値が一致しない場合S1005:No、MAC検証部108はパケット300を破棄するS1006。MAC検証に成功した場合、すなわちMAC値が一致する場合S1005:Yes、MAC検証部108は復号処理部109にアドホックデータ304を送信する。復号処理部109は、鍵情報記憶部106から復号鍵309を取り出し、暗号化メッセージ302を復号してメッセージ301を取得するS1007。次に送信先判定部107は、自ノードN2が受信したパケット300の最終的な送信先ではないと判定した場合S1003:No、ノードN2はパケット300を宛先のノードに送信するための転送処理を行う。送信先判定部107は、アドホックデータ304とMAC305を検証判断部105に送信する。検証判断部105はアドホックデータ304に含まれるヘッダ303内のカウンタ値308を抽出するS1008。検証判断部105は、抽出したカウンタ値308に応じてMAC検証を実行するか否かを判定するS1009。なお、S1009では、検証判断部105は、カウンタ値308だけでなく、認証確率Pに基づきMAC検証を実行するか否かを判別してもよい。カウンタ値308によるMAC検証の実行の可否判断と認証確率PによるMAC検証の実行の可否判断は、どちらが先であってもよい。また、検証判断部105は、認証確率PによりMAC検証を実行しないと判断したパケットについてのみカウンタ値によるMAC検証の実行の可否を判断してもよい。[カウンタ値]ここで、本実施の形態のノードN2におけるカウンタ値を用いたMAC検証の実行の有無の判定処理について説明する。図8は、カウンタ値とMAC検証を実行するか否かの判定基準を定めた基準テーブル350である。各ノードは図8で示す基準テーブルを予め格納しているものとする。各ノードが予め格納する基準テーブルは、システムによっては全て同じでも良いし、別のシステムではノードごとに異なっていても構わない。基準テーブル350はカウンタ値と検証の有無を判定する情報とを含む。検証の有無を識別する情報は、カウンタ値に対応する情報であり、MAC検証を行うか否かを示す情報である。図8では、カウンタ値が3以上の場合に、ノードN2はMAC検証が実施することを示す。図9は、判定処理のフローチャートである。検証判断部105は、S1008で抽出したカウンタ値308と基準テーブル350に基づき、MAC検証をするか否かを判断するS1401。具体的には、S1008で抽出したカウンタ値308に対応する基準テーブル350の該カウンタ値に対応付けられたMACの検証をするか否かの判定基準が検証処理を実行するか否かを特定する。判定基準が検証処理を実行することを示す場合S1401:Yes、検証判断部105は、MAC検証を実行すると決定するS1402。判定基準が検証処理を実行しないことを示す場合S1401:No、検証判断部105は、MAC検証を実行しないと決定するS1403。例えばカウンタ値308が1である場合、基準テーブル350では検証の有無を識別する情報が検証をしないことを示しているため、検証判断部105はMAC検証を実行しないと判定する。また、カウンタ値308が4である場合、検証の有無を識別する情報が検証をするとする基準が3以上であるため、検証判断部105はMAC検証を行うと判断する。基準テーブル350の値は、各ノードで個別の値を設定することが可能である。したがって、処理能力の高いノードでは基準テーブル350の検証の有無を識別する情報の値を小さくすることで、多くのパケットについてMAC検証を実施し、処理能力の低いノードでは基準テーブル350の検証の有無を識別する情報の値を大きくすることで、MAC検証の実施の頻度を下げることが可能になる。この結果、より効果的なMAC検証の負荷の分散が可能になる。[MAC検証]S1009においてMAC検証を実行すると判断した場合S1009:Yes、検証判断部105はアドホックデータ304とMAC305をMAC検証部108に送信する。MAC検証部108は、鍵情報記憶部106からMAC鍵306を読み出す。MAC検証部108はパケット300から抽出したアドホックデータ304と、読み出したMAC鍵306とからMACを算出するS1012。MAC検証部108は、具体的には、たとえば、MAC値を用いて、SHA1、SHA2などのハッシュ関数を使ったHMACKeyed-HashingforMessageAuthenticationCodeアルゴリズムによりMAC値を求める。また、共通鍵認証鍵暗号を使ったAES-CBC-MACアルゴリズムによりMAC値を求めてもよい。MAC検証部108は、S1012で算出したMACとパケット300に格納されたMAC305とが一致するか否かを判別するS1013。MAC検証部108は、MAC値が一致しなかった場合、すなわちMAC検証に失敗した場合S1013:No、そのパケット300を破棄するS1014。MAC検証部108は、MAC値が一致した場合、すなわちMAC検証に成功した場合S1013:Yes、アドホックデータ304をヘッダ生成部102に送信する。ヘッダ生成部102は、ヘッダ303のカウンタ値308の値を初期値に設定するS1015。ヘッダ生成部102は、ヘッダ303を新しいヘッダ323に変更するS1016。ヘッダ生成部102は、具体的には、パケット300の転送元MACアドレス311に対応するルーティングテーブルの転送元を特定し、特定したルーティングテーブルの転送元項目に対応する転送先項目から転送先のノードを特定する。ヘッダ生成部102は、転送先MACアドレス312に特定したノードのMACアドレスを設定する。ヘッダ生成部102は、転送元MACアドレス311には、自ノードN2のMACアドレスを設定する。ヘッダ生成部102は、暗号化メッセージ302に新しいヘッダ323を付加することで新しいアドホックデータ324を生成する。ヘッダ生成部102は、生成した新しいアドホックデータ324をMAC生成部103に送信する。MAC生成部103は、鍵情報記憶部106からMAC鍵306を読み出し、MAC鍵306を用いて新しいアドホックデータ324に対する新しいMAC315を生成する。MAC生成部103は生成したMAC315をアドホックデータ324に付加することで新しいパケット310を生成する。MAC生成部103は、生成した新しいパケット310をアドホック通信部111に送信する。アドホック通信部111はパケット310を、アドホックネットワーク100を介して送信先のノードに送信するS1017。次にMAC検証が不要な場合の処理を説明する。MAC検証不要と判断された場合S1009:No、検証判断部105は、アドホックデータ304をヘッダ303と暗号化メッセージ302とに分割する。検証判断部105は暗号化メッセージ302をヘッダ生成部102に送信する。検証判断部105は、自ノードでは検証を行うことなくパケットを転送するため、ヘッダ303のカウンタ値308の値をインクリメントするS1018。ヘッダ生成部102は、パケット300のヘッダ303を新しいヘッダ323に変更する。S1010。ヘッダ生成部102は、暗号化メッセージ302に新しいヘッダ323を付加することで、新しいアドホックデータ324を生成する。ヘッダ生成部102は、生成したアドホックデータ324をMAC生成部103に送信する。MAC生成部103は鍵情報記憶部106からMAC鍵306を読み出す。MAC生成部103は、読み出した新しいMAC鍵306を用いて新しいアドホックデータ324に対する新しいMAC315を生成する。なお、MACを算出する対象のデータの範囲は、適宜変更可能である。例えば、送信元、送信先、暗号化メッセージを含む範囲でMACを算出するように構成すると、パケットを転送するのみの場合、MACは変わらない。よって、送信元、送信先、暗号化メッセージを含む範囲でMACを算出するシステムであって、MAC検証を実行することなくパケットを転送する場合、ノードは、パケットの転送元MACアドレス、転送先MACアドレス、カウンタ値を変更するだけでよい。この結果、MACを再計算することなく、転送可能になるため、転送を実行するノードの処理の負荷が軽減する効果がある。MAC生成部103は生成したMAC315をアドホックデータ324に付加することで、新しいMAC315と新しいアドホックデータ324とを含む新しいパケット310を生成する。MAC生成部103は生成した新しいパケット310をアドホック通信部111に送信する。図10は、新しいパケット310の構成例である。新しいパケットは、新しいアドホックデータ324と新しいMAC315を含む。新しいアドホックデータ324は、新しいヘッダ323と転送された暗号化メッセージ302を含む。その後、アドホック通信部111はS1010で新しいヘッダ323を書き換えた後のパケット310を、アドホックネットワーク100を介して送信先のノード送信するS1011。これにより、S1006において転送対象に決定された場合のパケット転送処理を終了する。[検証確率を使用した例]図11は、カウンタ値とMAC検証を実行する確率とを対応付けた確率テーブル360である。確率テーブル360はカウンタ値と検証確率とを含む。検証確率は、カウンタ値に対応する情報であり、MAC検証を実行するか否かの確率を示す情報である。検証確率を使用する場合、図7のS1009の判断処理が変わる。以下、ノードN2における検証確率を用いたMAC検証の実行の有無の判定処理について説明する。各ノードは図11で示す確率テーブル360を予め格納しているものとする。各ノードが予め格納する確立テーブルは、システムによっては全て同じでも良いし、別のシステムではノードごとに異なっていても構わない。図12は、検証確率を使用する場合の判定処理のフローチャートである。検証判断部105は、S1008で抽出したカウンタ値308と確率テーブル360に基づき、MAC検証を実行するか否かを判断するS1501。図11の確率テーブル360では、受信したパケット300のカウンタ値が0の場合、検証判断部105は0.5の検証確率でMAC検証を実行すると判断する。同様に、カウンタ値が1では0.65の検証確率で、カウンタ値が2では0.8の検証確率で、カウンタ値が3以上では1の検証確率で、検証判断部105はMAC検証を実行すると判断する。検証確率はカウンタ値308が大きくなるほど、大きくなるように設定している。このため、MAC検証をされずにマルチホップを繰り返したパケットはより高い確率でMAC検証が実行される。MAC検証を実行する場合S1501:Yes、検証判断部105は、MAC検証を実行すると決定するS1502。MAC検証を実行しない場合S1501:No、検証判断部105は、MAC検証を実行しないと決定するS1503。以上により、ノードは、パケット300のヘッダ303に含まれるカウンタ値308に基づき、あらかじめ設定された検証確率にしたがって、MAC検証部108による認証を実施するか、認証を実施せずに転送先にそのまま転送するかを決定する。このような処理をアドホックネットワーク100内の各ノードがパケットを受信する都度実行することで、シンクノードSNや不正パケットを直接受信したノードに負荷の集中を回避することで負荷分散が可能になる。この結果、アドホック通信の遅延やパケットの欠落が低減される。確率テーブル360の検証確率は、各ノードで個別の検証確率を設定することが可能である。したがって、処理能力の高いノードでは基準テーブル350の検証確率の値を大きくすることで、多くのパケットについてMAC検証を実施し、処理能力の低いノードでは基準テーブル350の検証確率の値を小さくすることで、MAC検証の実施の頻度を下げることが可能になる。この結果、より効果的なMAC検証の負荷の分散が可能になる。[ハードウェア構成]図15は、アドホックネットワーク100を構成するノードのハードウェア構成例である。図15において、ノードは、CPUCentralProcessingUnit701と、RAMRandomAccessMemory702と、フラッシュメモリ703と、インターフェースI/F704と、暗号化回路705と、センサ706と、バス707とを備えている。CPU701~センサ706は、バス707によってそれぞれ接続されている。CPU701は、ノードの全体の制御を司る。CPU701は、RAM702に展開されたプログラムを実行することにより、アドホック通信部111、ヘッダ生成部102、MAC生成部103、暗号処理部104、検証判断部105、鍵情報記憶部106、送信先判定部107、MAC検証部108、および復号処理部109などとして機能する。RAM702は、CPU701のワークエリアとして使用される。フラッシュメモリ703は、プログラムや基準テーブル、確率テーブル、ルーティングテーブル、MAC鍵や暗号鍵などの鍵情報を記憶している。I/F704は、マルチホップ通信によりパケットを送受信する。暗号化回路705は、データを暗号化する場合に暗号鍵によりデータを暗号化する回路である。暗号化をソフトウェア的に実行する場合は、暗号化回路705に相当するプログラムをフラッシュメモリ703に記憶させておくことで、暗号化回路705は不要となる。センサ706は、センサ706固有のデータを検出する。たとえば、温度、湿度、水位、降水量、風量、音量、電力使用量、ガス使用量、時間、時刻など、測定対象にあったデータを検出する。以上の説明により、本実施例のノードは、負荷の高いノードでの作業を低減させるため、MAC検証の必要性の低いパケットについては、MAC検証を行わずに転送する。MAC検証の必要性の低いパケットは、過去に通過したノードでMAC検証がすでになされているものである。そこで、パケットにカウンタ値を含ませることにより、MAC検証が過去に行われているか否かを自ノードが検知できるようにした。この構成により、MAC検証を行うノードを分散することが可能になる。実施例2[ノードの負荷を考慮した判定処理]次に、ノードの処理の負荷に応じて、MAC検証を実施するか否かを判別する処理を説明する。この処理では、ノードノードN3とするは、MAC検証を行うか否かを、自ノードN3の処理の負荷の大きさによって決定する。なお、実施例1と同様の構成については、説明を省略する。アドホックネットワークでは、パケットが特定のノードに集中する場合がある。このような場合、パケットが集中したノードはパケットの転送、MAC検証等の処理の負荷が高いため、処理量を低減させることが望ましい。同じ経路上のノードには、MAC検証を行っても処理が遅延しないものも存在する場合がある。そこで、各ノードに自ノードの負荷の検出機能を設け、自ノードの負荷が低い場合には、カウンタ値に関わらずMAC検証を実行し、自ノードの負荷が高い場合のみ、カウンタ値に基づきMAC検証の必要の有無を判断する。この構成によれば、負荷に余裕があるノードがMAC検証を積極的に実行することでカウンタ値が初期化されるため、負荷に余裕が無いノードでMAC検証を実行しなければならないパケット数が減少する。図13は、自ノードの負荷の検出を考慮した実施の形態にかかるノードの機能ブロック図である。図13において、アドホック通信部111、ヘッダ生成部102、MAC生成部103、暗号処理部104、鍵情報記憶部106、送信先判定部107、MAC検証部108、および復号処理部109については、図5と同様であるため、説明を省略する。負荷検出部112は、自ノードN3の現在の負荷の大きさを検出する。検証判断部115は、パケットに含まれるカウンタ値および負荷検出部112で検出した自ノードの負荷の大きさに基づき、MAC検証の有無を判定する。なお、本実施の形態において、アドホックネットワーク100の全ノードは、自ノードのMAC検証に要する負荷量および自ノードの処理能力が低下しない負荷量Aを測定あるいは計算により求められており、記憶部113に格納されているものとする。図14は、ノードN3のMAC検証を実行するか否かを判別する処理のフローチャートである。本フローチャートは、図7のS1009に相当する。負荷検出部112は、現在の負荷量を検出するS1111。検証判断部115は、記憶部113に格納されたMAC検証に要する負荷量を記憶部113から読み出し、S1111で検出した現在の負荷量に加算することで仮想負荷量を算出するS1112。検証判断部115は、S1112で算出した仮想負荷量が記憶部113に格納された負荷量Aを超えるか否かを判定するS1113。仮想負荷量が負荷量Aを超える場合S1113:Yes、カウンタ値308を参照してMAC検証を実行するか否かを判定するS1114。MAC検証が必要な場合S1114:Yes、MAC検証を実施すると判定するS1115。MAC検証が不要な場合S1114:No、MAC検証を実施しないと判定するS1116。仮想負荷量が負荷量Aを超えない場合S1113:No、MAC検証を実施すると判定するS1115。以上の構成により、負荷のないノードでは積極的にMAC検証が実行されるため、より上流のノードでのMAC検証の要否判定の自由度が大きくなる。上流のノードでの負荷が分散可能になるため、アドホックネットワーク全体の処理の効率が上がる。なお、検証判断部115は、S1112およびS1113において仮想負荷量により、要否判定をするのではなく、自ノードN3の負荷量が所定の閾値例えば、負荷80を超えているか否かで判断することも可能である。また、各ノードは自ノードの負荷に応じて異なる複数の基準テーブルを予め記憶しておき、ノードの負荷状況に応じた基準テーブルを使用することも可能である。以上の説明により、各ノードは自ノードの負荷が高く且つカウンタ値が低い場合には、MAC検証を行わずに次のノードにパケットを転送する。一方、各ノードは自ノードの負荷が低い場合、あるいは、カウンタ値が高い場合には、MAC検証を行う。この構成により、処理の負荷に余裕のあるノードが優先してMAC検証を実行することが可能になる。"