(57)【特許請求の範囲】
【請求項１】
アドホックネットワーク内のノードであって、
自ノードでの連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし前記自ノードからの送信回数を示す送信カウンタ値を下位桁とする前記連結カウンタ値を記憶する記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記データおよび前記更新手段による更新後の連結カウンタ値を前記他ノードに送信する送信手段と、
前記記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記消去カウンタ値の取得要求を前記アドホックネットワークに配信する配信手段と、
前記配信手段によって前記取得要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値を受信する受信手段と、
前記受信手段によって受信された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記記憶手段に保存する保存手段と、
を備えることを特徴とするノード。
【請求項２】
アドホックネットワーク内のノードであって、
自ノードでの連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし前記自ノードからの送信回数を示す送信カウンタ値を下位桁とする前記連結カウンタ値を記憶する記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記データおよび前記更新手段による更新後の連結カウンタ値を前記他ノードに送信する送信手段と、
前記記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記消去カウンタ値の更新要求を前記アドホックネットワークに配信する配信手段と、
前記配信手段によって前記更新要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値に１加算された加算後の消去カウンタ値を受信する受信手段と、
前記受信手段によって受信された加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記記憶手段に保存する保存手段と、
を備えることを特徴とするノード。
【請求項３】
アドホックネットワーク内のノードであって、
自ノードでの連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし前記自ノードからの送信回数を示す送信カウンタ値を下位桁とする前記連結カウンタ値を記憶する揮発性の第１の記憶手段と、
前記消去カウンタ値を記憶する不揮発性の第２の記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記第１の記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記データおよび前記更新手段による更新後の連結カウンタ値を前記他ノードに送信する送信手段と、
前記第１の記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記第２の記憶手段から前記消去カウンタ値を抽出する抽出手段と、
前記抽出手段によって抽出された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記第１の記憶手段に保存するとともに、前記第２の記憶手段に記憶されている前記消去カウンタ値に対し前記加算後の消去カウンタ値を上書き保存する保存手段と、
を備えることを特徴とするノード。
【請求項４】
自ノードおよび前記他ノードが有する共通鍵を用いて、自ノード固有の第１の識別情報を含む前記取得要求を暗号化する暗号化手段と、
前記共通鍵を用いて暗号化されたデータを、前記共通鍵を用いて復号する復号手段と、を備え、
前記配信手段は、
前記暗号化手段によって暗号化された前記取得要求を前記アドホックネットワークに配信し、
前記受信手段は、
前記共通鍵を用いて暗号化された前記消去カウンタ値と前記共通鍵を用いて暗号化された第２の識別情報とを、前記アドホックネットワークから受信し、
前記復号手段は、
前記受信手段によって受信された暗号化された前記消去カウンタ値と暗号化された前記第２の識別情報を、前記共通鍵を用いて復号し、
前記生成手段は、
前記第１の識別情報と前記復号手段によって復号された前記第２の識別情報とが一致した場合に、前記復号手段によって復号された前記消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成することを特徴とする請求項１に記載のノード。
【請求項５】
自ノードおよび前記他ノードが有する共通鍵を用いて、自ノード固有の第１の識別情報を含む前記更新要求を暗号化する暗号化手段と、
前記共通鍵を用いて暗号化されたデータを、前記共通鍵を用いて復号する復号手段と、
を備え、
前記配信手段は、
前記暗号化手段によって暗号化された前記更新要求を前記アドホックネットワークに配信し、
前記受信手段は、
前記共通鍵を用いて暗号化された前記加算後の消去カウンタ値と前記共通鍵を用いて暗号化された第２の識別情報とを、前記アドホックネットワークから受信し、
前記復号手段は、
前記受信手段によって受信された暗号化された前記加算後の消去カウンタ値と暗号化された前記第２の識別情報を、前記共通鍵を用いて復号し、
前記生成手段は、
前記第１の識別情報と前記復号手段によって復号された前記第２の識別情報とが一致した場合に、前記復号手段によって復号された前記加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成することを特徴とする請求項２に記載のノード。
【請求項６】
アドホックネットワーク内のノードであって、
他ノードでの第１の連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし前記他ノードからの送信回数を示す送信カウンタ値を下位桁とする前記第１の連結カウンタ値を、前記他ノードから受信する第１の受信手段と、
前記第１の受信手段によって受信された連結カウンタ値を記憶装置に保存する第１の保存手段と、
第２の連結カウンタ値を前記他ノードから受信する第２の受信手段と、
前記第２の受信手段によって受信された第２の連結カウンタ値が前記第１の連結カウンタ値よりも大きいか否かを判断する判断手段と、
前記判断手段によって大きいと判断された場合、前記第１の連結カウンタ値に前記第２の連結カウンタ値を上書保存する第２の保存手段と、
を備えることを特徴とするノード。
【請求項７】
前記他ノードから前記消去カウンタ値の取得要求を受信する第３の受信手段と、
前記第３の受信手段によって前記取得要求が受信された場合、前記記憶装置に記憶されている前記連結カウンタ値の中の消去カウンタ値を抽出する抽出手段と、
前記抽出手段によって抽出された消去カウンタ値を前記他ノードに送信する送信手段と、
を備えることを特徴とする請求項６に記載のノード。
【請求項８】
前記他ノードから前記消去カウンタ値の更新要求を受信する第３の受信手段と、
前記第３の受信手段によって前記更新要求が受信された場合、前記記憶装置に記憶されている前記連結カウンタ値の中の消去カウンタ値を抽出する抽出手段と、
前記抽出手段によって抽出された消去カウンタ値に１加算した加算後の消去カウンタ値を前記他ノードに送信する送信手段と、
を備えることを特徴とする請求項６に記載のノード。
【請求項９】
アドホックネットワークを構成するノードにおける通信方法であって、
前記アドホックネットワーク内の他ノードにデータを送信する場合、自ノードでの連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし自ノードからの送信回数を示す送信カウンタ値を下位桁とする前記連結カウンタ値を記憶する記憶手段に記憶されている連結カウンタ値のうち、前記送信カウンタ値を１加算し、
前記データおよび加算後の連結カウンタ値を前記他ノードに送信し、
前記記憶手段での前記連結カウンタ値の消去を検出し、
消去が検出された場合、前記消去カウンタ値の取得要求を前記アドホックネットワークに配信し、
前記取得要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値を受信し、
受信された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、
生成された連結カウンタ値を前記記憶手段に保存する、
ことを特徴とする通信方法。
【請求項１０】
アドホックネットワークを構成するノードにおける通信方法であって、
前記アドホックネットワーク内の他ノードにデータを送信する場合、自ノードでの連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし自ノードからの送信回数を示す送信カウンタ値を下位桁とする前記連結カウンタ値を記憶する記憶手段に記憶されている連結カウンタ値のうち、前記送信カウンタ値を１加算し、
前記データおよび加算後の連結カウンタ値を前記他ノードに送信し、
前記記憶手段での前記連結カウンタ値の消去を検出し、
消去が検出された場合、前記消去カウンタ値の更新要求を前記アドホックネットワークに配信し、
前記更新要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値に１加算された加算後の消去カウンタ値を受信し、
受信された加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、
生成された連結カウンタ値を前記記憶手段に保存する、
ことを特徴とする通信方法。
【請求項１１】
アドホックネットワークを構成するノードにおける通信方法であって、
前記アドホックネットワーク内の他ノードにデータを送信する場合、自ノードでの連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし自ノードからの送信回数を示す送信カウンタ値を下位桁とする前記連結カウンタ値を記憶する揮発性の第１の記憶手段に記憶されている連結カウンタ値のうち、前記送信カウンタ値を１加算し、
前記データおよび加算後の連結カウンタ値を前記他ノードに送信し、
前記第１の記憶手段での前記連結カウンタ値の消去を検出し、
消去が検出された場合、前記消去カウンタ値を記憶する不揮発性の第２の記憶手段から
前記消去カウンタ値を抽出し、
抽出された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、
生成された連結カウンタ値を前記第１の記憶手段に保存するとともに、前記第２の記憶手段に記憶されている前記消去カウンタ値に対し前記加算後の消去カウンタ値を上書き保存する、
ことを特徴とする通信方法。
【請求項１２】
アドホックネットワークを構成するノードにおける通信方法であって、
他ノードでの第１の連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし前記他ノードからの送信回数を示す送信カウンタ値を下位桁とする前記第１の連結カウンタ値を、前記他ノードから受信し、
受信された連結カウンタ値を記憶装置に保存し、
第２の連結カウンタ値を前記他ノードから受信し、
前記第２の連結カウンタ値が前記第１の連結カウンタ値よりも大きいか否かを判断し、
大きいと判断された場合、前記第１の連結カウンタ値に前記第２の連結カウンタ値を上書保存する、
ことを特徴とする通信方法。
【請求項１３】
アドホックネットワーク内の第１のノードと第２のノードとが通信するシステムであって、
前記第１のノードは、
前記第１のノードでの連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし前記第１のノードからの送信回数を示す送信カウンタ値を下位桁とする前記連結カウンタ値を記憶する記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記第２のノードを宛先にする第１のデータおよび前記更新手段による更新後の第１の連結カウンタ値を前記第２のノードに送信する第１の送信手段と、
前記記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記消去カウンタ値の取得要求を前記アドホックネットワークに配信する配信手段と、
前記配信手段によって前記取得要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値を受信する応答受信手段と、
前記応答受信手段によって受信された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記記憶手段に保存する生成値保存手段と、
前記生成値保存手段によって保存された後に、前記第２のノードを宛先にする第２のデータおよび前記記憶手段に記憶されている最新の連結カウンタ値について前記更新手段によって更新された第２の連結カウンタ値を、前記第２のノードに送信する第２の送信手段と、を備え、
前記第２のノードは、
前記第１の連結カウンタ値を、前記第１のノードから受信する第１の受信手段と、
前記第１の受信手段によって受信された第１の連結カウンタ値を記憶装置に保存する第１の保存手段と、
前記第２の連結カウンタ値を、前記第１のノードから受信する第２の受信手段と、
前記第２の受信手段によって受信された第２の連結カウンタ値が前記第１の連結カウンタ値よりも大きいか否かを判断する判断手段と、
前記判断手段によって大きいと判断された場合、前記第１の連結カウンタ値を前記第２の連結カウンタ値に上書保存する第２の保存手段と、
を備えることを特徴とする通信システム。
【請求項１４】
アドホックネットワーク内の第１のノードと第２のノードとが通信するシステムであって、
前記第１のノードは、
前記第１のノードでの連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし前記第１のノードからの送信回数を示す送信カウンタ値を下位桁とする前記連結カウンタ値を記憶する記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記第２のノードを宛先にする第１のデータおよび前記更新手段による更新後の第１の連結カウンタ値を前記第２のノードに送信する第１の送信手段と、
前記記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記消去カウンタ値の更新要求を前記アドホックネットワークに配信する配信手段と、
前記配信手段によって前記更新要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値に１加算された加算後の消去カウンタ値を受信する応答受信手段と、
前記応答受信手段によって受信された加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記記憶手段に保存する生成値保存手段と、
前記生成値保存手段によって保存された後に、前記第２のノードを宛先にする第２のデータおよび前記記憶手段に記憶されている最新の連結カウンタ値について前記更新手段によって更新された第２の連結カウンタ値を前記第２のノードに送信する第２の送信手段と、を備え、
前記第２のノードは、
前記第１の連結カウンタ値を、前記第１のノードから受信する第１の受信手段と、
前記第１の受信手段によって受信された第１の連結カウンタ値を記憶装置に保存する第１の保存手段と、
前記第２の連結カウンタ値を、前記第１のノードから受信する第２の受信手段と、
前記第２の受信手段によって受信された第２の連結カウンタ値が前記第１の連結カウンタ値よりも大きいか否かを判断する判断手段と、
前記判断手段によって大きいと判断された場合、前記第１の連結カウンタ値を前記第２の連結カウンタ値に上書保存する第２の保存手段と、
を備えることを特徴とする通信システム。
【請求項１５】
アドホックネットワーク内の第１のノードと第２のノードとが通信するシステムであって、
前記第１のノードは、
前記第１のノードでの連結カウンタ値の消去回数を示す消去カウンタ値を上位桁とし前記第１のノードからの送信回数を示す送信カウンタ値を下位桁とする前記連結カウンタ値を記憶する揮発性の第１の記憶手段と、
前記消去カウンタ値を記憶する不揮発性の第２の記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記第１の記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記第２のノードを宛先にする第１のデータおよび前記更新手段による更新後の第１の連結カウンタ値を前記第２のノードに送信する第１の送信手段と、
前記第１の記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記第２の記憶手段から前記消去カウンタ値を抽出する抽出手段と、
前記抽出手段によって抽出された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記第１の記憶手段に保存するとともに、前記第２の記憶手段に記憶されている前記消去カウンタ値に対し前記加算後の消去カウンタ値を上書き保存する生成値保存手段と、
前記生成値保存手段によって保存された後に、前記第２のノードを宛先にする第２のデータおよび前記第１の記憶手段に記憶されている最新の連結カウンタ値について前記更新手段によって更新された第２の連結カウンタ値を前記第２のノードに送信する第２の送信手段と、を備え、
前記第２のノードは、
前記第１の連結カウンタ値を、前記第１のノードから受信する第１の受信手段と、
前記第１の受信手段によって受信された第１の連結カウンタ値を記憶装置に保存する第１の保存手段と、
前記第２の連結カウンタ値を、前記第１のノードから受信する第２の受信手段と、
前記第２の受信手段によって受信された第２の連結カウンタ値が前記第１の連結カウンタ値よりも大きいか否かを判断する判断手段と、
前記判断手段によって大きいと判断された場合、前記第１の連結カウンタ値を前記第２の連結カウンタ値に上書保存する第２の保存手段と、
を備えることを特徴とする通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ノード、通信方法、および通信システムに関する。
【背景技術】
【０００２】
アドホックネットワークは、無線通信でリンクする自己構成型のネットワークの一種である。アドホックネットワークは複数のノードにより構成される。また、アドホックネットワーク内の各ノードは、マルチホップ通信によりパケットの送受信を行う。マルチホップ通信は、互いの通信圏内に存在しないノード同士が、各ノードの通信圏内に存在する別のノードを介して通信を行う技術である。
【０００３】
アドホックネットワークを利用した技術として、各家庭の電力メータに無線通信可能なノードを組み込んで、作業員が現地に出向くことなく、アドホックネットワーク経由でメータ検針などの業務を行うシステムがある。各家庭の電力の使用量などの個人情報を扱うアドホックネットワークでは、秘匿性、改ざん防止などの観点からセキュアな通信を行うことが要求される。
【０００４】
そこで、従来のシステムでは、アドホックネットワーク内のノード間で送受信されるパケットを暗号化することで、セキュアな通信の確保が行われている。関連する技術として、パケットの暗号化に用いる暗号鍵を、セキュアに配布する技術がある（例えば、下記特許文献１〜３参照。）。また、ノードがアドホックネットワーク内から接続するゲートウェイを発見する技術がある（例えば、下記特許文献４参照。）。また、バスマネージャになった他ノードからバスジェネレーション番号を取得しておき、自ノードがバスマネージャになったときに、取得したバスジェネレーション番号に１を加算して使用する技術がある（例えば、下記特許文献５参照。）。
【０００５】
パケットが暗号化されている場合であっても、アドホックネットワークでは、過去にアドホックネットワーク内に送信された正規パケットが、攻撃者によりキャプチャされうる。そして、攻撃者は、キャプチャした正規パケットをアドホックネットワーク内に再送することで、ネットワークを輻輳させる攻撃（再送攻撃）をすることができる。そこで、アドホックネットワークは、ネットワークとしての通信品質を確保するために、再送攻撃に備える必要がある。従来のシステムでは、パケットを送信するノードは、パケットの送信時刻をパケット内に格納するようにしている。そして、パケットを受信したノードは、自ノードの時刻と、受信したパケット内の送信時刻とを比較し、両者が大きくかけ離れている場合には、再送攻撃が行われたと見なし、そのパケットを廃棄するという技術がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−３４８０７２号公報
【特許文献２】特開２０１０−９８５９７号公報
【特許文献３】特開２００７−８８７９９号公報
【特許文献４】特開２００９−８１８５４号公報
【特許文献５】特開２００６−１２８８７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術では、アドホックネットワーク内の全ノードの時刻が同期されている必要がある。例えば、他のネットワークとの中継機器であるゲートウェイまたはアドホックネットワーク内の特定のノードが、定期的に時刻同期用のパケットをブロードキャストすることで、アドホックネットワーク内の全ノードの時刻同期を実現する。
【０００８】
そのため、メータ検針を行うアドホックネットワークでは、各メータの検針データパケット以外に、時刻同期用のブロードキャストパケットが送受信されることとなり、アドホックネットワークの通信負荷が増大するという問題がある。
【０００９】
本発明は、上述した従来技術による問題点を解消するため、通信負荷の低減化を図ることができるノード、通信方法、および通信システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、自ノードでの消去回数を示す消去カウンタ値を上位桁とし自ノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する記憶手段を備え、アドホックネットワーク内の他ノードにデータを送信する場合、記憶手段に記憶されている連結カウンタ値のうち送信カウンタ値を１加算し、データおよび加算後の連結カウンタ値を他ノードに送信し、記憶手段での連結カウンタ値の消去を検出し、消去が検出された場合、消去カウンタ値の取得要求をアドホックネットワークに配信し、取得要求が配信された結果、アドホックネットワークから消去カウンタ値を受信し、受信された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、生成された連結カウンタ値を記憶手段に保存するノードおよび通信方法が提案される。
【００１１】
また、本発明の一側面によれば、自ノードでの消去回数を示す消去カウンタ値を上位桁とし自ノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する記憶手段を備え、アドホックネットワーク内の他ノードにデータを送信する場合、記憶手段に記憶されている連結カウンタ値のうち送信カウンタ値を１加算し、データおよび加算後の連結カウンタ値を他ノードに送信し、記憶手段での連結カウンタ値の消去を検出し、消去が検出された場合、消去カウンタ値の更新要求をアドホックネットワークに配信し、更新要求が配信された結果、アドホックネットワークから消去カウンタ値に１加算された加算後の消去カウンタ値を受信し、受信された加算後の消去カウンタ値を上位桁とし消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、生成された連結カウンタ値を記憶手段に保存するノードおよび通信方法が提案される。
【００１２】
また、本発明の一側面によれば、自ノードでの消去回数を示す消去カウンタ値を上位桁とし自ノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する揮発性の第１の記憶手段と、消去カウンタ値を記憶する不揮発性の第２の記憶手段と、を備え、アドホックネットワーク内の他ノードにデータを送信する場合、第１の記憶手段に記憶されている連結カウンタ値のうち送信カウンタ値を１加算し、データおよび加算後の連結カウンタ値を他ノードに送信し、第１の記憶手段での連結カウンタ値の消去を検出し、消去が検出された場合、第２の記憶手段から消去カウンタ値を抽出し、抽出された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、生成された連結カウンタ値を第１の記憶手段に保存するとともに、第２の記憶手段に記憶されている消去カウンタ値に対し加算後の消去カウンタ値を上書き保存するノードおよび通信方法が提案される。
【００１３】
また、本発明の一側面によれば、他ノードでの消去回数を示す消去カウンタ値を上位桁とし他ノードからの送信回数を示す送信カウンタ値を下位桁とする第１の連結カウンタ値を、他ノードから受信し、受信された連結カウンタ値を記憶装置に保存し、第２の連結カウンタ値を他ノードから受信し、第２の連結カウンタ値が第１の連結カウンタ値よりも大きいか否かを判断し、大きいと判断された場合、第１の連結カウンタ値に第２の連結カウンタ値を上書保存するノードおよび通信方法が提案される。
【００１４】
また、本発明の一側面によれば、アドホックネットワーク内の第１のノードと第２のノードとが通信するシステムであって、第１のノードは、第１のノードでの消去回数を示す消去カウンタ値を上位桁とし第１のノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する記憶手段を備え、アドホックネットワーク内の他ノードにデータを送信する場合、記憶手段に記憶されている連結カウンタ値のうち送信カウンタ値を１加算し、第２のノードを宛先にする第１のデータおよび加算後の第１の連結カウンタ値を第２のノードに送信し、記憶手段での連結カウンタ値の消去を検出し、消去が検出された場合、消去カウンタ値の取得要求をアドホックネットワークに配信し、取得要求が配信された結果、アドホックネットワークから消去カウンタ値を受信し、受信された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、生成された連結カウンタ値を記憶手段に保存し、保存された後に、第２のノードを宛先にする第２のデータおよび記憶手段に記憶されている最新の連結カウンタ値のうち送信カウンタ値を１加算した第２の連結カウンタ値を、第２のノードに送信し、第２のノードは、第１の連結カウンタ値を、第１のノードから受信し、受信された第１の連結カウンタ値を記憶装置に保存し、第２の連結カウンタ値を、第１のノードから受信し、受信された第２の連結カウンタ値が第１の連結カウンタ値よりも大きいか否かを判断し、大きいと判断された場合、第１の連結カウンタ値を第２の連結カウンタ値に上書保存する通信システムが提案される。
【００１５】
また、本発明の一側面によれば、アドホックネットワーク内の第１のノードと第２のノードとが通信するシステムであって、第１のノードは、第１のノードでの消去回数を示す消去カウンタ値を上位桁とし第１のノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する記憶手段を備え、アドホックネットワーク内の他ノードにデータを送信する場合、記憶手段に記憶されている連結カウンタ値のうち送信カウンタ値を１加算し、第２のノードを宛先にする第１のデータおよび加算後の第１の連結カウンタ値を第２のノードに送信し、記憶手段での連結カウンタ値の消去を検出し、消去が検出された場合、消去カウンタ値の更新要求をアドホックネットワークに配信し、更新要求が配信された結果、アドホックネットワークから消去カウンタ値に１加算された加算後の消去カウンタ値を受信し、受信された加算後の消去カウンタ値を上位桁とし消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、生成された連結カウンタ値を記憶手段に保存し、保存された後に、第２のノードを宛先にする第２のデータおよび記憶手段に記憶されている最新の連結カウンタ値のうち送信カウンタ値を１加算した第２の連結カウンタ値を第２のノードに送信し、第２のノードは、第１の連結カウンタ値を、第１のノードから受信し、受信された第１の連結カウンタ値を記憶装置に保存し、第２の連結カウンタ値を、第１のノードから受信し、受信された第２の連結カウンタ値が第１の連結カウンタ値よりも大きいか否かを判断し、大きいと判断された場合、第１の連結カウンタ値を第２の連結カウンタ値に上書保存する通信システムが提案される。
【００１６】
また、本発明の一側面によれば、アドホックネットワーク内の第１のノードと第２のノードとが通信するシステムであって、第１のノードは、第１のノードでの消去回数を示す消去カウンタ値を上位桁とし第１のノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する揮発性の第１の記憶手段と、消去カウンタ値を記憶する不揮発性の第２の記憶手段と、を備え、アドホックネットワーク内の他ノードにデータを送信する場合、第１の記憶手段に記憶されている連結カウンタ値のうち送信カウンタ値を１加算し、第２のノードを宛先にする第１のデータおよび加算後の第１の連結カウンタ値を第２のノードに送信し、第１の記憶手段での連結カウンタ値の消去を検出し、消去が検出された場合、第２の記憶手段から消去カウンタ値を抽出し、抽出された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、生成された連結カウンタ値を第１の記憶手段に保存するとともに、第２の記憶手段に記憶されている消去カウンタ値に対し加算後の消去カウンタ値を上書き保存し、保存された後に、第２のノードを宛先にする第２のデータおよび第１の記憶手段に記憶されている最新の連結カウンタ値のうち送信カウンタ値を１加算した第２の連結カウンタ値を第２のノードに送信し、第２のノードは、第１の連結カウンタ値を、第１のノードから受信し、受信された第１の連結カウンタ値を記憶装置に保存し、第２の連結カウンタ値を、第１のノードから受信し、受信された第２の連結カウンタ値が第１の連結カウンタ値よりも大きいか否かを判断し、大きいと判断された場合、第１の連結カウンタ値を第２の連結カウンタ値に上書保存する通信システムが提案される。
【発明の効果】
【００１７】
本発明の一側面によれば通信負荷の低減化を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１８】
【図１】図１は、ノードによるアドホックネットワークへの復帰処理例を示す説明図である。
【図２】図２は、実施の形態にかかるノードＮのハードウェア構成例を示すブロック図である。
【図３】図３は、ノードＤＢ（ＤａｔａＢａｓｅ）の記憶内容の一例を示す説明図である。
【図４】図４は、ノードＮの送信側としての機能的構成例を示す機能ブロック図である。
【図５】図５は、ノードＮの受信側としての機能的構成例を示す機能ブロック図である。
【図６】図６は、アクセス鍵ＡＫを用いた暗号化通信の一例を示す説明図である。
【図７】図７は、アクセス鍵ＡＫを用いた暗号化通信の詳細を示す説明図である。
【図８】図８は、暗号化通信におけるパケット送信処理の詳細な処理手順を示すフローチャートである。
【図９】図９は、暗号化通信におけるパケット受信処理の詳細な処理手順を示すフローチャートである。
【図１０】図１０は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例１を示す説明図（その１）である。
【図１１】図１１は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例１を示す説明図（その２）である。
【図１２】図１２は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例１を示す説明図（その３）である。
【図１３】図１３は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例１を示す説明図（その４）である。
【図１４】図１４は、動作例１における連結カウンタ値生成処理の詳細な処理手順を示すフローチャートである。
【図１５】図１５は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例２を示す説明図（その１）である。
【図１６】図１６は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例２を示す説明図（その２）である。
【図１７】図１７は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例２を示す説明図（その３）である。
【図１８】図１８は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例２を示す説明図（その４）である。
【図１９】図１９は、動作例２における連結カウンタ値生成処理の詳細な処理手順を示すフローチャート（その１）である。
【図２０】図２０は、動作例２における連結カウンタ値生成処理の詳細な処理手順を示すフローチャート（その２）である。
【図２１】図２１は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例３を示す説明図（その１）である。
【図２２】図２２は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例３を示す説明図（その２）である。
【図２３】図２３は、動作例３における連結カウンタ値生成処理の詳細な処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１９】
以下に添付図面を参照して、この発明にかかるノード、通信方法、および通信システムの実施の形態を詳細に説明する。
【００２０】
（ノードによるアドホックネットワークへの復帰処理例）
図１は、ノードによるアドホックネットワークへの復帰処理例を示す説明図である。図１において、ノードＮ１、ノードＮ２およびノードＮ３は、互いの通信圏内に存在する近隣ノードＮである。ノードＮ１、ノードＮ２およびノードＮ３は、アドホックネットワーク内の各ノードＮで共有される共通鍵（以下、「固定鍵」という）や、アドホックネットワーク内のノードＮ間で一定時間ごとに更新される共通鍵（以下、「アクセス鍵」という）を保持している。ノードＮ１、ノードＮ２およびノードＮ３は、固定鍵やアクセス鍵を用いてパケットを暗号化して得られた暗号化パケットＥＰの送受信を行っている。
【００２１】
ここでは、簡単のため、ノードＮ１は、暗号化パケットＥＰを近隣ノードＮに送信する送信側のノードＮであるとする。また、ノードＮ２およびノードＮ３は、暗号化パケットＥＰを近隣ノードＮから受信する受信側のノードＮであるとする。
【００２２】
ノードＮ１は、連結カウンタ値ＪＣを保持している。連結カウンタ値ＪＣは、上位桁のカウンタ値と下位桁のカウンタ値とが連結されたカウンタ値である。ここで、下位桁のカウンタ値は、今までにノードＮ１が暗号化パケットＥＰを送信した回数を示す送信カウンタ値Ｓである。上位桁のカウンタ値は、ノードＮ１において連結カウンタ値ＪＣが消去された回数を示す消去カウンタ値Ｒである。図１の例では、ノードＮ１は、消去カウンタ値Ｒ「０ｘ００」と、送信カウンタ値Ｓ「０ｘ００５６７８」と、を連結した連結カウンタ値ＪＣ「０ｘ００００５６７８」を保持している。なお、「０ｘ」は１６進数表記を示す。
【００２３】
ノードＮ１は、他ノードＮを宛先にするデータの送信イベントがあると、連結カウンタ値ＪＣに１を加算する。そして、ノードＮ１は、他ノードＮ（例えば、ノードＮ２，Ｎ３）を宛先にするデータと、加算後の連結カウンタ値ＪＣと、を含むパケットを生成し、生成したパケットを暗号化して得られた暗号化パケットＥＰを、他ノードＮに送信する。
【００２４】
また、ノードＮ１は、連結カウンタ値ＪＣが消去されたことを検知すると、消去カウンタ値Ｒの取得要求を他ノードＮに送信する。ノードＮ１は、取得要求を送信した結果、消去以前の連結カウンタ値ＪＣの消去カウンタ値Ｒを他ノードＮから受信する。そして、ノードＮ１は、受信した消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒと、送信カウンタ値Ｓの初期値と、を連結した連結カウンタ値ＪＣを生成する。このとき、消去カウンタ値Ｒは上位桁であるから、消去以前の消去カウンタ値Ｒに１加算した加算後の消去カウンタ値Ｒから生成された新たな連結カウンタ値ＪＣは、送信カウンタ値Ｓの大小に関わらず、消去以前の連結カウンタ値ＪＣより大きい値になる。
【００２５】
ノードＮ２およびノードＮ３は、他ノードＮ（例えば、ノードＮ１）から暗号化パケットＥＰを受信する。ノードＮ２およびノードＮ３は、受信した暗号化パケットＥＰを復号して得られたパケットから他ノードＮでの連結カウンタ値ＪＣを抽出する。そして、ノードＮ２およびノードＮ３は、抽出した連結カウンタ値ＪＣを、受信カウンタ値ＲＣとして保持する。
【００２６】
図１の例では、ノードＮ２は、過去にノードＮ１から受信した暗号化パケットＥＰを復号して抽出した連結カウンタ値ＪＣ「０ｘ００００１２３０」を、受信カウンタ値ＲＣとして保持している。また、ノードＮ３は、過去にノードＮ１から受信した暗号化パケットＥＰを復号して抽出した連結カウンタ値ＪＣ「０ｘ００００５６７８」を、受信カウンタ値ＲＣとして保持している。
【００２７】
ここで、ノードＮ１では、送信ごとに連結カウンタ値ＪＣに１を加算し、連結カウンタ値ＪＣの消去後には消去前の連結カウンタ値より大きい値になる新たな連結カウンタ値を生成している。そのため、ノードＮ２およびノードＮ３が、ノードＮ１からの正規パケットを受信し続けている限り、今回受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣは、前回受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣより大きくなる。なお、上述したように、前回受信した暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣは、受信カウンタ値ＲＣとして保持されている。一方で、ノードＮが再送攻撃による不正パケットを受信した場合、再送攻撃では過去に送信されたパケットをそのまま送信しているため、ノードＮが今回受信したパケットに含まれる連結カウンタ値ＪＣは、受信カウンタ値ＲＣ以下となる。
【００２８】
そのため、ノードＮ２およびノードＮ３は、今回受信した暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣが受信カウンタ値ＲＣより大きければ、暗号化パケットＥＰを正規パケットと判断する。一方、ノードＮ２およびノードＮ３は、今回受信した暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣが受信カウンタ値ＲＣ以下であれば、暗号化パケットＥＰを不正パケットと判断する。
【００２９】
ここで、図１において、停電によりノードＮ１に電力が供給されず、ノードＮ１が保持していた連結カウンタ値ＪＣ「０ｘ００００５６７８」が消去されてしまったとする。そのため、他ノードＮ（例えば、ノードＮ２，Ｎ３）に送信するパケットに含むべき連結カウンタ値ＪＣが不明になり、ノードＮ１は、他ノードＮにパケットを送信することができない。
【００３０】
（１）まず、ノードＮ１は、停電が回復し電力が供給されると、連結カウンタ値ＪＣが消去されたことを検出する。
【００３１】
（２）次に、ノードＮ１は、連結カウンタ値ＪＣが消去されたことを検出すると、消去カウンタ値Ｒの取得要求を含むパケットを生成し、生成したパケットを固定鍵を用いて暗号化する。そして、ノードＮ１は、暗号化により得られた取得要求を含む暗号化パケットＥＰを他ノードＮに送信する。図１の例では、ノードＮ１は、取得要求を含む暗号化パケットＥＰを、ノードＮ２に送信できている。
【００３２】
（３）しかし、ノードＮ１は、ノードＮ３と通信不能の状態になっており、取得要求を含む暗号化パケットＥＰをノードＮ３に送信できていない。例えば、ノードＮ３と通信不能の状態になる原因としては、ノードＮ１とノードＮ３との間に障害物が存在することが挙げられる。
【００３３】
（４）ノードＮ２は、ノードＮ１から暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰを固定鍵を用いて復号する。次に、ノードＮ２は、復号により得られたパケットに取得要求が含まれることを検出すると、受信カウンタ値ＲＣ「０ｘ００００１２３０」から消去カウンタ値Ｒ「０ｘ００」を抽出する。そして、ノードＮ２は、抽出した消去カウンタ値Ｒ「０ｘ００」を含むパケットを生成し、生成したパケットを固定鍵を用いて暗号化する。次に、ノードＮ２は、暗号化により得られた暗号化パケットＥＰをノードＮ１に送信する。
【００３４】
（５）ノードＮ１は、ノードＮ２から暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰを固定鍵を用いて復号する。次に、ノードＮ１は、復号により得られたパケットから、消去カウンタ値Ｒ「０ｘ００」を取得する。そして、ノードＮ１は、連結カウンタ値ＪＣの消去以前での消去カウンタ値Ｒを示す取得した消去カウンタ値Ｒ「０ｘ００」に、１を加算する。次に、ノードＮ１は、加算後の消去カウンタ値Ｒ「０ｘ０１」と、送信カウンタ値Ｓの初期値「０ｘ００００００」と、を連結して連結カウンタ値ＪＣ「０ｘ０１００００００」を生成する。
【００３５】
ここで、ノードＮ１は、ノードＮ３と通信可能の状態になったとする。例えば、ノードＮ３と通信可能の状態になる原因としては、ノードＮ１とノードＮ３との間に存在した障害物が移動して、ノードＮ１とノードＮ３との間に障害物が存在しなくなったことが挙げられる。
【００３６】
（６）ノードＮ１は、ノードＮ３を宛先にするデータの送信イベントがあると、連結カウンタ値ＪＣ「０ｘ０１００００００」に１を加算する。次に、ノードＮ１は、ノードＮ３を宛先にするデータと、加算後の連結カウンタ値ＪＣ「０ｘ０１０００００１」と、を含むパケットを生成し、生成したパケットを固定鍵を用いて暗号化する。そして、ノードＮ１は、暗号化により得られた暗号化パケットＥＰを、データの宛先になるノードＮ３に送信する。
【００３７】
（７）ノードＮ３は、ノードＮ１から暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰの正当性の判断を行う。具体的には、ノードＮ３は、受信した暗号化パケットＥＰを、固定鍵を用いて復号する。次に、ノードＮ３は、復号により得られたパケットから連結カウンタ値ＪＣ「０ｘ０１０００００１」を取得する。そして、ノードＮ３は、前回受信した暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣを示す受信カウンタ値ＲＣ「０ｘ００００５６７８」と、取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」と、の大小比較を行う。
【００３８】
ここで、ノードＮ３は、取得した連結カウンタ値ＪＣが受信カウンタ値ＲＣよりも大きいため、受信した暗号化パケットＥＰは正規パケットであると判断する。そして、ノードＮ３は、受信カウンタ値ＲＣ「０ｘ００００５６７８」を取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」で更新する。
【００３９】
（８）また、ノードＮ１は、ノードＮ２を宛先にするデータの送信イベントがあると、連結カウンタ値ＪＣ「０ｘ０１０００００１」に１を加算する。次に、ノードＮ１は、ノードＮ２を宛先にするデータと、加算後の連結カウンタ値ＪＣ「０ｘ０１０００００２」と、を含むパケットを生成し、生成したパケットを固定鍵を用いて暗号化する。そして、ノードＮ１は、暗号化により得られた暗号化パケットＥＰを、データの宛先になるノードＮ２に送信する。
【００４０】
（９）ノードＮ２は、ノードＮ１から暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰの正当性の判断を行う。具体的には、ノードＮ２は、受信した暗号化パケットＥＰを、固定鍵を用いて復号する。次に、ノードＮ２は、復号により得られたパケットから連結カウンタ値ＪＣ「０ｘ０１０００００２」を取得する。そして、ノードＮ２は、前回受信した暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣを示す受信カウンタ値ＲＣ「０ｘ００００１２３０」と、取得した連結カウンタ値ＪＣ「０ｘ０１０００００２」と、の大小比較を行う。
【００４１】
ここで、ノードＮ２は、取得した連結カウンタ値ＪＣが受信カウンタ値ＲＣよりも大きいため、受信した暗号化パケットＥＰは正規パケットであると判断する。そして、ノードＮ２は、受信カウンタ値ＲＣ「０ｘ００００１２３０」を取得した連結カウンタ値ＪＣ「０ｘ０１０００００２」で更新する。
【００４２】
このように、ノードＮ１は、連結カウンタ値ＪＣを保持し、連結カウンタ値ＪＣが消去されると、他ノードＮに取得要求を送信することにより、消去以前の消去カウンタ値Ｒを他ノードＮから取得する。そして、ノードＮ１は、消去以前の消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを上位桁とする新たな連結カウンタ値ＪＣを生成する。これにより、過去にノードＮ１により送信された暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣより、ノードＮ１により生成された新たな連結カウンタ値ＪＣが大きい値になる。そのため、ノードＮ１は、他ノードＮが保持している受信カウンタ値ＲＣより大きい値になっている連結カウンタ値ＪＣを、他ノードＮに送信する暗号化パケットＥＰに含むことができる。
【００４３】
結果として、ノードＮ２およびノードＮ３は、保持している受信カウンタ値ＲＣより、ノードＮ１から受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣが大きいため、ノードＮ１から受信した暗号化パケットＥＰを正規パケットと判断することができるようになる。そして、ノードＮ１は、他ノードＮに送信する暗号化パケットＥＰが、他ノードＮで不正パケットと判断されないようになるため、アドホックネットワークに復帰することができる。
【００４４】
また、従来のように、時刻情報を用いて不正パケットか否かを判断する場合、各ノードＮが基準時刻との同期を、定期的または不定期に、アドホックネットワークを介して行う必要がある。この場合、時刻同期用のパケット量がアドホックネットワークに通信負荷をかける。一方、連結カウンタ値ＪＣは自ノードＮ内の処理のみで更新が可能な相対的な値であるから、各ノードＮは、アドホックネットワークへの通信負荷を削減することができる。そのため、ノードＮ２およびノードＮ３は、時刻同期を必要とせずに、暗号化パケットＥＰ内の連結カウンタ値ＪＣが受信ごとに増加することを監視して、ノードＮ１から受信した暗号化パケットＥＰが不正パケットか否かを判断することができる。よって、アドホックネットワークには、時刻同期用のパケットによる通信負荷が生じない。さらに、不正パケットか否かの判断に時刻同期を必要としないため、時刻同期用のパケットを送信するゲートウェイが、アドホックネットワーク内に存在しなくてもよい。
【００４５】
なお、ノードＮ１は、送信カウンタ値Ｓが最大値「０ｘＦＦＦＦＦＦ」になったとき、送信カウンタ値Ｓを初期値「０ｘ００００００」に戻してもよい。このとき、ノードＮ１は、ノードＮ２およびノードＮ３に、送信カウンタ値Ｓを初期値に戻したことを示すパケットを送信する。そして、ノードＮ２およびノードＮ３は、受信カウンタ値ＲＣ内の送信カウンタ値Ｓを、初期値に戻す。また、ノードＮ１は、消去カウンタ値Ｒが最大値「０ｘＦＦ」になったとき、消去カウンタ値Ｒを初期値「０ｘ００」に戻してもよい。このとき、ノードＮ１は、ノードＮ２およびノードＮ３に、消去カウンタ値Ｒを初期値に戻したことを示すパケットを送信する。そして、ノードＮ２およびノードＮ３は、受信カウンタ値ＲＣ内の消去カウンタ値Ｒを、初期値に戻す。
【００４６】
また、ノードＮ１は、送信カウンタ値Ｓが最大値「０ｘＦＦＦＦＦＦ」になり、かつ、消去カウンタ値Ｒが最大値「０ｘＦＦ」未満であり増加可能であるとき、送信カウンタ値Ｓを初期値「０ｘ００００００」に戻すとともに、消去カウンタ値Ｒに１を加算してもよい。これにより、過去にノードＮ１により送信された暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣより大きい値で、連結カウンタ値ＪＣを更新することができる。結果として、ノードＮ１は、他ノードＮに送信する暗号化パケットＥＰが、他ノードＮで不正パケットと判断されないようになるため、アドホックネットワークに復帰することができる。このとき、ノードＮ１は、ノードＮ２およびノードＮ３に、消去カウンタ値Ｒを初期値に戻したことを示すパケットを送信しなくて済む。
【００４７】
なお、ノード２およびノード３は、ノードＮ１から受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣと保持している受信カウンタ値ＲＣとの差がしきい値以上である場合に、受信した暗号化パケットＥＰを不正パケットと判断してもよい。これにより、ノードＮ１により過去に送信された暗号化パケットＥＰ内の連結カウンタ値ＪＣを書き換えて攻撃者が再送攻撃に使用した場合に、書き換えにより消去カウンタ値Ｒが大きく変化していれば、不正パケットと判断することができる。
【００４８】
（ノードＮのハードウェア構成例）
図２は、実施の形態にかかるノードＮのハードウェア構成例を示すブロック図である。図２において、ノードＮは、ＣＰＵ２０１と、ＲＡＭ２０２と、フラッシュメモリ２０３と、Ｉ／Ｆ２０４と、暗号化回路２０５と、を備えている。ＣＰＵ２０１〜暗号化回路２０５は、バス２００によってそれぞれ接続されている。
【００４９】
ここで、ＣＰＵ２０１は、ノードＮの全体の制御を司る。ＲＡＭ２０２は、ＣＰＵ２０１のワークエリアとして使用される。ＲＡＭ２０２は、揮発性の記憶装置である。ＲＡＭ２０２には、書き換えが頻繁に行われる連結カウンタ値ＪＣや暗号鍵（例えばアクセス鍵）の鍵情報が記憶される。フラッシュメモリ２０３は、不揮発性の記憶装置である。フラッシュメモリ２０３には、プログラムや暗号鍵（例えば固定鍵）の鍵情報が記憶される。Ｉ／Ｆ２０４は、ユニホップ通信またはマルチホップ通信によりパケットを送受信する。
【００５０】
暗号化回路２０５は、暗号鍵を用いてデータを暗号化する回路である。また、暗号化回路２０５は、暗号化されたデータを復号鍵を用いて復号する回路でもある。暗号化および復号をソフトウェア的に実行する場合は、暗号化回路２０５に相当するプログラムをフラッシュメモリ２０３に記憶させておくことで、暗号化回路２０５は不要となる。
【００５１】
（ノードＤＢの記憶内容）
図３は、ノードＤＢ（ＤａｔａＢａｓｅ）の記憶内容の一例を示す説明図である。図３に示すように、ノードＤＢ３００は、ノード項目のそれぞれに対応付けて、アクセス鍵項目と、受信カウンタ値項目と、を有する。ノードＤＢ３００は、ノードＮが暗号化パケットＥＰを受信するごとにレコードを構成する。
【００５２】
ノード項目には、アドホックネットワーク内のノードＮを示す識別子が記憶される。例えば、識別子としては、ノード番号が採用できる。また、識別子としては、ノードＮ固有のネットワークアドレスであるＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスやＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスを採用してもよい。図３の例では、ノードＮ１が有するノードＤＢを示している。ここで、ノード項目には、他ノードＮのノード番号（Ｎ２〜）が記憶されている。
【００５３】
アクセス鍵項目には、ノード項目の識別子が示すノードＮから受信したアクセス鍵ＡＫが記憶される。アクセス鍵ＡＫは、ノード項目の識別子が示すノードＮへ送信するパケットの暗号化に使用される。アクセス鍵ＡＫは、例えば、１２８〜２５６ビット程度のバイナリデータである。受信カウンタ値項目には、ノード項目の識別子が示すノードＮから受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣが記憶される。
【００５４】
（ノードＮの機能的構成例）
次に、図４および図５を用いて、ノードＮの機能的構成例について説明する。ここで、図４は、ノードＮの送信側としての機能的構成例を示している。また、図５は、ノードＮの受信側としての機能的構成例を示している。ここでは、便宜的に受信側としての機能と送信側としての機能を分けて説明しているが、ノードＮは受信側としての機能および送信側としての機能の両方を有する。
【００５５】
図４は、ノードＮの送信側としての機能的構成例を示す機能ブロック図である。図４に示すように、ノードＮは、第１の記憶部４０１と、更新部４０２と、送信部４０３と、暗号化部４０４と、乱数生成部４０５と、検出部４０６と、受信部４０７と、復号部４０８と、生成部４０９と、保存部４１０と、第２の記憶部４１１と、抽出部４１２と、を備える。更新部４０２〜保存部４１０および抽出部４１２は、具体的には、例えば、図２に示したフラッシュメモリ２０３などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０４により、その機能を実現する。
【００５６】
第１の記憶部４０１は、自ノードＮでの消去回数を示す消去カウンタ値Ｒを上位桁とし自ノードＮからの送信回数を示す送信カウンタ値Ｓを下位桁とする連結カウンタ値ＪＣを記憶する。具体的には、例えば、頻繁に書き換えが行われる連結カウンタ値ＪＣを記憶するため、データの読み書きを高速に行うことができる揮発性の記憶装置が採用される。第１の記憶部４０１は、例えば、上述したＲＡＭ２０２である。例えば、図１では、ノードＮ１の第１の記憶部４０１（ＲＡＭ２０２）は、連結カウンタ値ＪＣ「０ｘ００００５６７８」を保持している。
【００５７】
更新部４０２は、アドホックネットワーク内の他ノードＮにデータを送信する場合、第１の記憶部４０１に記憶されている連結カウンタ値ＪＣのうち送信カウンタ値Ｓを１加算する。ここで、データとは、例えば、ノードＮが家庭に備え付けられた消費電力計である場合は、当該家庭の消費電力量である。データの送信は、送信イベントの発生をトリガに実行される。送信イベントは、例えば、ノードＮのユーザからの他ノードＮを宛先にするデータの入力を受けることにより発生する。また、送信イベントは、ノードＮが、一定時間ごとに自動的に発生させてもよい。
【００５８】
更新部４０２は、具体的には、例えば、アドホックネットワーク内の他ノードＮを宛先にするデータの送信イベントが検出された場合、ＲＡＭ２０２に保持されている連結カウンタ値ＪＣに１を加算する。これにより、更新部４０２は、ＲＡＭ２０２に保持されている連結カウンタ値ＪＣのうち送信カウンタ値Ｓを、最新の送信カウンタ値Ｓに更新することができる。例えば、図１の（６）では、ノードＮ１の更新部４０２は、送信に先立って、連結カウンタ値ＪＣ「０ｘ０１００００００」に１を加算し、連結カウンタ値ＪＣ「０ｘ０１０００００１」に更新している。
【００５９】
送信部４０３は、データおよび更新部４０２による更新後の連結カウンタ値ＪＣを他ノードＮに送信する。送信部４０３は、具体的には、例えば、他ノードＮを宛先とするデータと更新部４０２による更新後の連結カウンタ値ＪＣとを含むパケットを生成する。そして、送信部４０３は、生成したパケットを、データの宛先である他ノードＮに送信する。ここで、パケットには、送信元である自ノードＮを示す識別子が含まれてもよい。なお、ここでは、送信部４０３は、生成したパケットを、他ノードＮにユニキャスト送信している。例えば、図１の（６）では、ノードＮ１の送信部４０３は、暗号化パケットＥＰを送信しているが、連結カウンタ値ＪＣ「０ｘ０１０００００１」を含む暗号化されないパケットをノードＮ３に送信してもよい。
【００６０】
なお、パケットの他ノードＮへのユニキャスト送信は、送信部４０３がパケットを近隣ノードＮに配信し、宛先の他ノードＮ以外の近隣ノードＮが受信したパケットを廃棄し、宛先になる他ノードＮが受信したパケットの内容に従って処理を実行することで実現される。ここで、処理としては、例えば、パケットのＲＡＭ２０２やフラッシュメモリ２０３への保存が挙げられる。これにより、送信部４０３は、正当性の判断に使用する連結カウンタ値ＪＣを含むパケットを、他ノードＮに送信することができる。例えば、図１の（６）で、ノードＮ１の送信部４０３は、近隣ノードとなるノードＮ２およびノードＮ３に、ノードＮ３を宛先にする暗号化パケットＥＰを送信する。そして、ノードＮ２は、自ノードＮが宛先でないため、受信した暗号化パケットＥＰを廃棄する。また、ノードＮ３は、受信した暗号化パケットＥＰの内容に従って処理を行う。
【００６１】
また、送信部４０３は、暗号化部４０４と乱数生成部４０５とを有する。暗号化部４０４は、自ノードＮおよび他ノードＮが有する共通鍵を用いて、データおよび更新部４０２による更新後の連結カウンタ値ＪＣを暗号化する。ここで、自ノードＮおよび他ノードＮが有する共通鍵とは、例えば、アドホックネットワーク内のノードＮで共有される共通鍵（固定鍵）であってもよいし、ノードＮ間で一定時間ごとに更新される共通鍵（アクセス鍵ＡＫ）であってもよい。
【００６２】
ここで、一定時間ごとに更新されるアクセス鍵ＡＫのほうが固定鍵よりセキュアであるため、アクセス鍵ＡＫを有しているときは、アクセス鍵ＡＫが暗号化部４０４による暗号化に用いられる。一方、アクセス鍵ＡＫを有していないときは、固定鍵が暗号化部４０４による暗号化に用いられる。例えば、図１で、停電によりノードＮ１に電力供給されなくなったため、ＲＡＭ２０２に保持されていたアクセス鍵ＡＫが消去され、フラッシュメモリ２０３に保持されていた固定鍵が残っている状態であれば、固定鍵が暗号化部４０４による暗号化に用いられる。
【００６３】
暗号化部４０４は、具体的には、例えば、送信部４０３によって生成されたパケット内の他ノードＮを宛先とするデータと更新部４０２による更新後の連結カウンタ値ＪＣとを、固定鍵またはアクセス鍵ＡＫを用いて暗号化する。例えば、図１の（６）または（８）では、ノードＮ１の暗号化部４０４は、連結カウンタ値ＪＣを含むパケットを固定鍵を用いて暗号化している。ここで、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に、送信元である自ノードＮを示す識別子が含まれてもよい。
【００６４】
この場合、送信部４０３は、暗号化部４０４による暗号化により得られた暗号化パケットＥＰを、データの宛先である他ノードＮに送信する。これにより、送信部４０３は、正当性の判断に使用する連結カウンタ値ＪＣを含むパケットを、他ノードＮに送信することができる。また、送信部４０３は、暗号化により得られた暗号化パケットＥＰを送信するため、通信の安全性を担保することができる。例えば、図１の（６）では、ノードＮ１の送信部４０３は、連結カウンタ値ＪＣ「０ｘ０１０００００１」を含む暗号化パケットＥＰを、ノードＮ３に送信している。また、図１の（８）では、送信部４０３は、連結カウンタ値ＪＣ「０ｘ０１０００００２」を含む暗号化パケットＥＰを、ノードＮ２に送信している。
【００６５】
乱数生成部４０５は、第１の識別情報となる乱数を生成する。ここで、第１の識別情報とは、通信ごとに生成される一時的な乱数である。乱数生成部４０５は、具体的には、例えば、ハードウェア乱数生成器を用いて乱数を生成する。なお、生成された乱数は、例えば、ＲＡＭ２０２などの記憶領域に記憶される。例えば、図１の（２）では、乱数が生成されていないが、ノードＮ１の乱数生成部４０５は乱数を生成してもよい。
【００６６】
検出部４０６は、第１の記憶部４０１での連結カウンタ値ＪＣの消去を検出する。検出部４０６は、具体的には、例えば、停電によりノードＮに電力が供給されずに第１の記憶部４０１に保持されている連結カウンタ値ＪＣが消去された場合、停電が回復しノードＮに電力供給された後に連結カウンタ値ＪＣが消去されていることを検出する。検出部４０６は、より具体的には、例えば、連結カウンタ値ＪＣの保持先に設定されている記憶領域の記憶内容が、電力供給されたときの初期化処理により「０ｘ００００００００」になっていることを検出する。
【００６７】
また、検出部４０６は、ノードＮのユーザによる操作により、第１の記憶部４０１に保持されている連結カウンタ値ＪＣが初期化されたことを検出してもよい。これにより、検出部４０６は、以後送信するパケットに含むべき連結カウンタ値ＪＣが不明になったことを検出し、アドホックネットワークへの復帰処理を開始するトリガを発生させることができる。ノードＮ１の検出部４０６は、例えば、図１の（１）においては、連結カウンタ値ＪＣが消去されたことを検出している。
【００６８】
検出部４０６によって連結カウンタ値ＪＣの消去が検出された場合、暗号化パケットＥＰを他ノードＮに正規パケットと判断させるための連結カウンタ値ＪＣが不明であるため、連結カウンタ値ＪＣを復旧する必要がある。復旧する方法としては、例えば、下記の３通りの方法がある。
【００６９】
第１の復旧方法は、他ノードＮに消去カウンタ値Ｒの取得要求を送信することにより、連結カウンタ値ＪＣを復旧する方法である。第２の復旧方法は、取得要求ではなく、消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒの取得を要求する更新要求を送信することにより、連結カウンタ値ＪＣを復旧する方法である。第３の復旧方法は、消去カウンタ値Ｒを揮発性メモリではなく不揮発性の第２の記憶部４１１に保存しておくことにより、消去カウンタ値Ｒを読み出して連結カウンタ値ＪＣを復旧する方法である。ここでは、第１の復旧方法について説明し、第２，第３の復旧方法については後述する。
【００７０】
第１の復旧方法では、送信部４０３は、検出部４０６によって消去が検出された場合、消去カウンタ値Ｒの取得要求をアドホックネットワークに配信する。ここで、取得要求とは、他ノードＮに、自ノードＮが過去に送信した送信カウンタ値Ｓを示す他ノードＮが保持している受信カウンタ値ＲＣから消去カウンタ値Ｒを抽出させて、抽出させた消去カウンタ値Ｒを自ノードＮへ送信させるためのリクエストである。
【００７１】
そして、送信部４０３は、具体的には、例えば、取得要求を含むパケットを生成し、生成したパケットを、他ノードＮに送信する。ここで、パケットには、送信元である自ノードＮを示す識別子が含まれてもよい。例えば、図１の（２）では、ノードＮ１の送信部４０３は、取得要求を含む暗号化パケットＥＰをノードＮ２に送信しているが、取得要求を含む暗号化されないパケットを送信してもよい。これにより、送信部４０３は、消去カウンタ値Ｒを取得要求元のノードＮへ送信するトリガを他ノードＮに与えることができる。
【００７２】
ここで、通信の安全性を担保するために、送信部４０３によって送信されるパケットは、暗号化されていてもよい。また、通信の安全性を担保するために、送信部４０３によって送信されるパケットは、さらに一時的な識別情報が含まれた上で、暗号化されていてもよい。一時的な識別情報とは、例えば、上述した乱数生成部４０５によって生成された乱数である。まず、送信部４０３によって送信されるパケットが暗号化されている場合について説明する。
【００７３】
この場合、暗号化部４０４は、具体的には、例えば、送信部４０３によって生成されたパケット内の取得要求を、固定鍵またはアクセス鍵ＡＫを用いて暗号化する。例えば、図１の（２）では、ノードＮ１の暗号化部４０４は、取得要求を含むパケットを固定鍵を用いて暗号化している。ここで、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に、送信元である自ノードＮを示す識別子が含まれてもよい。
【００７４】
そして、送信部４０３は、暗号化部４０４によって暗号化された取得要求をアドホックネットワークに配信する。具体的には、例えば、送信部４０３は、暗号化部４０４による暗号化により得られた取得要求を含む暗号化パケットＥＰを、他ノードＮに送信する。例えば、図１の（２）では、ノードＮ１の送信部４０３は、取得要求を含む暗号化パケットＥＰをノードＮ２に送信している。なお、送信部４０３は、暗号化パケットＥＰを、近隣ノードＮにマルチキャスト送信してもよいし、他ノードＮにユニキャスト送信してもよい。
【００７５】
これにより、送信部４０３は、消去カウンタ値Ｒを取得要求元のノードＮへ送信するトリガを他ノードＮに与えることができる。また、送信部４０３は、暗号化により得られた暗号化パケットＥＰを送信するため、通信の安全性を担保することができる。
【００７６】
次に、通信の安全性を担保するために、送信部４０３によって送信されるパケットが一時的な識別情報を含んだ上で、暗号化されている場合について説明する。この場合、送信部４０３は、取得要求と乱数生成部４０５によって生成された乱数とを含むパケットを生成する。例えば、図１の（２）では、取得要求を含むパケットが生成されているが、ノードＮ１の送信部４０３は、乱数と取得要求とを含むパケットを生成してもよい。
【００７７】
また、この場合、暗号化部４０４は、自ノードＮおよび他ノードＮが有する共通鍵を用いて、自ノードＮ固有の第１の識別情報を含む取得要求を暗号化する。暗号化部４０４は、具体的には、例えば、送信部４０３によって生成された取得要求と乱数とを含むパケットを、固定鍵またはアクセス鍵ＡＫを用いて暗号化する。例えば、図１の（２）では、取得要求を含むパケットが暗号化されているが、ノードＮ１の暗号化部４０４は、取得要求と乱数とを含むパケットを固定鍵を用いて暗号化してもよい。
【００７８】
この場合、送信部４０３は、暗号化部４０４による暗号化により得られた暗号化パケットＥＰを他ノードに送信する。例えば、図１の（２）では、取得要求を含む暗号化パケットＥＰが送信されているが、ノードＮ１の送信部４０３は、乱数と取得要求を含む暗号化パケットＥＰを送信してもよい。
【００７９】
なお、取得要求により消去カウンタ値Ｒが取得されてから、連結カウンタ値ＪＣが復旧するまでの処理については後述する。
【００８０】
受信部４０７は、他ノードＮから送信されたデータを受信する。受信部４０７は、具体的には、例えば、送信部４０３によって送信された要求（例えば、取得要求）に対する他ノードＮからの応答を受信する。受信部４０７は、より具体的には、例えば、送信部４０３によって取得要求が配信された結果、アドホックネットワークから消去カウンタ値Ｒを受信する。これにより、受信部４０７は、新たな連結カウンタ値ＪＣの生成に使用される消去以前の消去カウンタ値Ｒを取得することができる。
【００８１】
また、受信部４０７は、復号部４０８を有する。復号部４０８は、共通鍵を用いて暗号化されたデータを、共通鍵を用いて復号する。また、復号部４０８は、アクセス鍵ＡＫを用いて暗号化されたデータを、アクセス鍵ＡＫを用いて復号する。
【００８２】
ここで、通信の安全性を担保するために、受信部４０７によって受信される消去カウンタ値Ｒを含むパケットは、暗号化されていてもよい。この場合、復号部４０８は、受信部４０７によって受信された消去カウンタ値Ｒを含む暗号化パケットＥＰを、共通鍵を用いて復号する。
【００８３】
この場合、受信部４０７は、復号部４０８による復号により得られたパケットから、消去カウンタ値Ｒを取得する。これにより、受信部４０７は、新たな連結カウンタ値ＪＣの生成に使用される消去以前の消去カウンタ値Ｒを取得することができる。例えば、図１の（５）では、ノードＮ１の受信部４０７は、ノードＮ２から消去カウンタ値Ｒ「０ｘ００」を含む暗号化パケットＥＰを受信している。なお、復号により得られたパケットは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【００８４】
また、受信部４０７は、送信部４０３によって第１の識別情報を含む暗号化パケットＥＰが送信された結果、共通鍵を用いて暗号化された消去カウンタ値Ｒと共通鍵を用いて暗号化された第２の識別情報とを、アドホックネットワークから受信する。ここで、第２の識別情報とは、送信部４０３によって送信された第１の識別情報を含む暗号化パケットＥＰを受信したノードＮで生成されるデータであり、第１の識別情報がそのまま第２の識別情報として使用される。第２の識別情報とは、例えば、乱数である。
【００８５】
受信部４０７は、具体的には、例えば、送信部４０３によって取得要求が配信された結果、固定鍵を用いて暗号化された消去カウンタ値Ｒと乱数とを含む暗号化パケットＥＰを受信する。ここで、暗号化パケットＥＰ内の暗号化されない部分（例えば、暗号化パケットＥＰのヘッダ部分）に、送信元である他ノードＮを示す識別子が含まれてもよい。
【００８６】
例えば、図１の（５）では、消去カウンタ値Ｒ「０ｘ００」を含む暗号化パケットＥＰが受信されているが、ノードＮ１の受信部４０７は、消去カウンタ値Ｒ「０ｘ００」と乱数を含む暗号化パケットＥＰを受信してもよい。なお、受信された暗号化パケットＥＰは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【００８７】
また、この場合、復号部４０８は、具体的には、例えば、受信部４０７によって受信された消去カウンタ値Ｒと第２の識別情報を含む暗号化パケットＥＰを、共通鍵を用いて復号する。そして、受信部４０７は、復号部４０８による復号により得られたパケットから、消去カウンタ値Ｒと第２の識別情報とを取得する。例えば、図１の（５）では、消去カウンタ値Ｒを含む暗号化パケットＥＰを復号したが、ノードＮ１の復号部４０８は、消去カウンタ値Ｒと乱数とを含む暗号化パケットＥＰを復号してもよい。そして、復号部４０８は、復号により得られたパケットから、消去カウンタ値Ｒと乱数とを取得してもよい。
【００８８】
これにより、受信部４０７は、新たな連結カウンタ値ＪＣの生成に使用される消去以前の消去カウンタ値Ｒを取得することができる。また、受信部４０７は、第１の識別情報との一致判断により受信したパケットの正当性判断に使用される第２の識別情報を取得することができる。なお、復号により得られたパケットは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【００８９】
生成部４０９は、受信部４０７によって受信された消去カウンタ値Ｒに１加算した加算後の消去カウンタ値Ｒを上位桁とし、消去により送信回数が０になったことを示す消去後の送信カウンタ値Ｓを下位桁とする連結カウンタ値ＪＣを生成する。生成部４０９は、具体的には、例えば、受信部４０７によって受信された消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを上位桁とし、送信カウンタ値Ｓの初期値を下位桁とする連結カウンタ値ＪＣを生成する。
【００９０】
例えば、図１の（５）では、ノードＮ１の生成部４０９は、受信した消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒ「０ｘ０１」と送信カウンタ値Ｓの初期値「０ｘ００００００」を連結した連結カウンタ値ＪＣ「０ｘ０１００００００」を生成している。これにより、生成部４０９は、消去以前の連結カウンタ値ＪＣより大きい値であって、以後送信するパケットに含むべき連結カウンタ値ＪＣを生成することができる。
【００９１】
また、この場合、生成部４０９は、第１の識別情報と復号部４０８によって復号された第２の識別情報との一致判断を行う。生成部４０９は、一致した場合に、復号部４０８によって復号された消去カウンタ値Ｒに１加算した加算後の消去カウンタ値Ｒを上位桁とし消去により送信回数が０になったことを示す消去後の送信カウンタ値Ｓを下位桁とする連結カウンタ値ＪＣを生成する。
【００９２】
生成部４０９は、具体的には、例えば、ＲＡＭ２０２に保持されている乱数と受信部４０７によって取得された乱数との一致判断を行う。そして、生成部４０９は、一致すると判断された場合、受信部４０７によって取得された消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを上位桁とし、送信カウンタ値Ｓの初期値を下位桁とする連結カウンタ値ＪＣを生成する。例えば、図１の（５）では、乱数を用いた暗号化パケットＥＰの正当性の判断は行わなかったが、ノードＮ１の生成部４０９は、送信した暗号化パケットＥＰに含めた乱数と受信した乱数との一致判断から、暗号化パケットＥＰが不正パケットか否かを判断してもよい。これにより、生成部４０９は、消去以前の連結カウンタ値ＪＣより大きい値であって、以後送信するパケットに含むべき連結カウンタ値ＪＣを生成することができる。
【００９３】
保存部４１０は、生成部４０９によって生成された連結カウンタ値ＪＣを第１の記憶部４０１に保存する。保存部４１０は、具体的には、生成部４０９によって生成された連結カウンタ値ＪＣを、消去された連結カウンタ値ＪＣの代わりにＲＡＭ２０２に保存する。例えば、図１の（５）では、ノードＮ１の保存部４１０は、消去された連結カウンタ値の代わりに、生成した連結カウンタ値ＪＣ「０ｘ０１００００００」を保存している。
【００９４】
第２の記憶部４１１は、消去カウンタ値Ｒを記憶する。第２の記憶部４１１としては、具体的には、例えば、不揮発性の記憶装置が採用される。第２の記憶部４１１とは、例えば、上述したフラッシュメモリ２０３である。例えば、図１では、連結カウンタ値ＪＣのみが保持されているが、ノードＮ１の第２の記憶部４１１は、消去カウンタ値Ｒを連結カウンタ値ＪＣとは別に保持していてもよい。これにより、第２の記憶部４１１は、自ノードＮに電力が供給されない状態であっても、消去カウンタ値Ｒを記憶しておくことができる。
【００９５】
抽出部４１２は、検出部４０６によって消去が検出された場合、第２の記憶部４１１から消去カウンタ値Ｒを抽出する。抽出部４１２は、具体的には、例えば、検出部４０６によって消去が検出された場合、フラッシュメモリ２０３から消去カウンタ値Ｒを読み出す。例えば、図１では、他ノードＮから消去カウンタ値Ｒを取得したが、ノードＮ１の抽出部４１２は、自ノードＮ内のフラッシュメモリ２０３から、消去カウンタ値Ｒを抽出してもよい。これにより、抽出部４１２は、消去以前の消去カウンタ値Ｒを抽出することができる。なお、抽出された消去カウンタ値Ｒは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【００９６】
次に、第２の復旧方法について説明する。第２の復旧方法は、取得要求ではなく、消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒの取得を要求する更新要求を送信することにより、連結カウンタ値ＪＣを復旧する方法である。第２の復旧方法は、送信部４０３と、暗号化部４０４と、乱数生成部４０５と、受信部４０７と、復号部４０８と、生成部４０９と、保存部４１０と、によって実行される。
【００９７】
具体的には、送信部４０３は、検出部４０６によって消去が検出された場合、消去カウンタ値Ｒの更新要求をアドホックネットワークに配信する。ここで、更新要求とは、他ノードＮに、自ノードＮが過去に送信した送信カウンタ値Ｓを示す受信カウンタ値ＲＣから、消去カウンタ値Ｒを抽出させる要求である。また、更新要求とは、他ノードＮに、抽出させた消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを自ノードＮへ送信させる要求である。
【００９８】
そして、送信部４０３は、具体的には、例えば、更新要求を含むパケットを生成する。そして、送信部４０３は、生成したパケットを、他ノードＮに送信する。ここで、パケットには、送信元である自ノードＮを示す識別子が含まれてもよい。例えば、図１の（２）では、取得要求を含むパケットが生成されたが、ノードＮ１の送信部４０３は、取得要求ではなく更新要求を含むパケットを生成してもよい。そして、図１の（２）では、暗号化パケットＥＰがノードＮ２に送信されたが、ノードＮ１の送信部４０３は、更新要求を含む暗号化されないパケットをノードＮ２に送信してもよい。これにより、送信部４０３は、消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを更新要求元のノードＮへ送信するトリガを他ノードＮに与えることができる。
【００９９】
ここで、通信の安全性を担保するために、送信部４０３によって送信されるパケットは、暗号化されていてもよい。また、送信部４０３によって送信されるパケットは、さらに一時的な識別情報が含まれた上で、暗号化されていてもよい。まず、送信部４０３によって送信されるパケットが暗号化されている場合について説明する。
【０１００】
この場合、暗号化部４０４は、自ノードＮおよび他ノードＮが有する共通鍵を用いて、更新要求を暗号化する。暗号化部４０４は、具体的には、例えば、送信部４０３によって生成された更新要求を含むパケットを、固定鍵またはアクセス鍵ＡＫを用いて暗号化する。例えば、図１の（２）では、取得要求を含むパケットが暗号化されたが、ノードＮ１の暗号化部４０４は、更新要求と乱数を含むパケットを暗号化してもよい。
【０１０１】
そして、送信部４０３は、暗号化部４０４によって暗号化された更新要求をアドホックネットワークに配信する。送信部４０３は、具体的には、例えば、暗号化部４０４による暗号化により得られた更新要求を含む暗号化パケットＥＰを、他ノードＮに送信する。なお、送信部４０３は、暗号化パケットＥＰを、近隣ノードＮにマルチキャスト送信してもよいし、他ノードＮにユニキャスト送信してもよい。例えば、図１の（２）では、取得要求を含む暗号化パケットＥＰが送信されたが、ノードＮ１の送信部４０３は、更新要求を含む暗号化パケットＥＰをノードＮ２に送信してもよい。
【０１０２】
これにより、送信部４０３は、消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを更新要求元のノードＮへ送信するトリガを他ノードＮに与えることができる。また、送信部４０３は、暗号化により得られた暗号化パケットＥＰを送信するため、通信の安全性を担保することができる。
【０１０３】
また、この場合、受信部４０７は、送信部４０３によって更新要求が配信された結果、アドホックネットワークから消去カウンタ値Ｒに１加算された加算後の消去カウンタ値Ｒを受信する。受信部４０７は、具体的には、例えば、送信部４０３によって更新要求が配信された結果、加算後の消去カウンタ値Ｒを含む暗号化パケットＥＰを受信する。ここで、暗号化パケットＥＰ内の暗号化されない部分（例えば、暗号化パケットＥＰのヘッダ部分）に、送信元である他ノードＮを示す識別子が含まれてもよい。なお、受信された暗号化パケットＥＰは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。例えば、図１の（４）では、消去カウンタ値Ｒ「０ｘ００」を含む暗号化パケットＥＰが受信されたが、ノードＮ１の受信部４０７は、加算後の消去カウンタ値Ｒ「０ｘ０１」を含む暗号化パケットＥＰを受信してもよい。
【０１０４】
また、この場合、復号部４０８は、具体的には、例えば、受信部４０７によって受信された加算後の消去カウンタ値Ｒを含む暗号化パケットＥＰを、共通鍵を用いて復号する。そして、受信部４０７は、復号部４０８による復号により得られたパケットから、消去カウンタ値Ｒを取得する。これにより、受信部４０７は、新たな連結カウンタ値ＪＣの生成に使用される消去以前の消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを取得することができる。
【０１０５】
なお、復号により得られたパケットは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。例えば、図１の（４）では、消去カウンタ値Ｒ「０ｘ００」を含む暗号化パケットＥＰを復号したが、ノードＮ１の復号部４０８は、加算後の消去カウンタ値Ｒ「０ｘ０１」を含む暗号化パケットＥＰを復号してもよい。そして、ノードＮ１の受信部４０７は、復号したパケット内の加算後の消去カウンタ値Ｒを取得する。
【０１０６】
また、この場合、生成部４０９は、受信部４０７によって受信された加算後の消去カウンタ値Ｒを上位桁とし、消去により送信回数が０になったことを示す消去後の送信カウンタ値Ｓを下位桁とする連結カウンタ値ＪＣを生成する。
【０１０７】
具体的には、例えば、生成部４０９は、受信部４０７によって取得された加算後の消去カウンタ値Ｒを上位桁とし、送信カウンタ値Ｓの初期値を下位桁とする連結カウンタ値ＪＣを生成する。例えば、図１の（５）では、受信した消去カウンタ値Ｒ「０ｘ００」に１を加算して得た加算後の消去カウンタ値Ｒ「０ｘ０１」を用いて連結カウンタ値を生成したが、ノードＮ１の生成部４０９は、受信した加算後の消去カウンタ値Ｒ「０ｘ０１」を用いて連結カウンタ値を生成してもよい。これにより、生成部４０９は、消去以前の連結カウンタ値ＪＣより大きい値であって、以後送信するパケットに含むべき連結カウンタ値ＪＣを生成することができる。なお、生成された連結カウンタ値ＪＣは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１０８】
この場合、保存部４１０は、生成部４０９によって生成された連結カウンタ値ＪＣを第１の記憶部４０１に保存する。保存部４１０は、具体的には、生成部４０９によって生成された連結カウンタ値ＪＣを、消去された連結カウンタ値ＪＣの代わりにＲＡＭ２０２に保存する。
【０１０９】
上述のように、送信部４０３によって送信されるパケットは、暗号化されていてもよいが、さらに一時的な識別情報を含んでもよい。次に、送信部４０３によって送信されるパケットが一時的な識別情報を含んだ上で、暗号化されている場合について説明する。
【０１１０】
この場合、送信部４０３は、乱数生成部４０５によって生成された一時的な識別情報になる乱数と更新要求とを含むパケットを生成する。例えば、図１の（２）では、取得要求を含むパケットが生成されたが、ノードＮ１の送信部４０３は、乱数と更新要求とを含むパケットを生成してもよい。
【０１１１】
そして、暗号化部４０４は、自ノードＮおよび他ノードＮが有する共通鍵を用いて、自ノードＮ固有の第１の識別情報を含む更新要求を暗号化する。暗号化部４０４は、具体的には、例えば、送信部４０３によって生成された更新要求と乱数とを含むパケットを、固定鍵またはアクセス鍵ＡＫを用いて暗号化する。例えば、図１の（２）では、取得要求を含むパケットが暗号化されたが、ノードＮ１の暗号化部４０４は、乱数と更新要求を含むパケットを暗号化してもよい。
【０１１２】
そして、送信部４０３は、暗号化部４０４による暗号化により得られた暗号化パケットＥＰを他ノードＮに送信する。例えば、図１の（２）では、取得要求を含む暗号化パケットＥＰが送信されたが、ノードＮ１の送信部４０３は、乱数と更新要求を含む暗号化パケットＥＰを送信してもよい。
【０１１３】
これにより、送信部４０３は、消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを更新要求元のノードＮへ送信するトリガを他ノードＮに与えることができる。また、送信部４０３は、暗号化により得られた暗号化パケットＥＰを送信するため、通信の安全性を担保することができる。また、送信部４０３は、送信するパケットに一時的な識別情報を含むことにより、通信の安全性を担保することができる。
【０１１４】
また、この場合、受信部４０７は、共通鍵を用いて暗号化された加算後の消去カウンタ値Ｒと共通鍵を用いて暗号化された第２の識別情報とを、アドホックネットワークから受信する。具体的には、例えば、受信部４０７は、送信部４０３によって更新要求が配信された結果、固定鍵を用いて暗号化された加算後の消去カウンタ値Ｒと乱数とを含む暗号化パケットＥＰを受信する。ここで、暗号化パケットＥＰ内の暗号化されない部分（例えば、暗号化パケットＥＰのヘッダ部分）に、送信元である他ノードＮを示す識別子が含まれてもよい。例えば、図１の（５）では、消去カウンタ値Ｒ「０ｘ００」を含む暗号化パケットＥＰが受信されたが、ノードＮ１の受信部４０７は、加算後の消去カウンタ値Ｒ「０ｘ０１」と乱数を含む暗号化パケットＥＰを受信してもよい。なお、受信された暗号化パケットＥＰは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１１５】
また、この場合、復号部４０８は、具体的には、例えば、受信部４０７によって受信された加算後の消去カウンタ値Ｒと第２の識別情報を含む暗号化パケットＥＰを、共通鍵を用いて復号する。そして、受信部４０７は、復号部４０８による復号により得られたパケットから、加算後の消去カウンタ値Ｒと第２の識別情報とを取得する。例えば、図１の（５）では、消去カウンタ値Ｒを含む暗号化パケットＥＰが復号されたが、ノードＮ１の復号部４０８は、加算後の消去カウンタ値Ｒと乱数とを含む暗号化パケットＥＰを復号してもよい。そして、復号部４０８は、復号により得られたパケットから、加算後の消去カウンタ値Ｒ「０ｘ０１」と乱数とを取得してもよい。
【０１１６】
これにより、受信部４０７は、新たな連結カウンタ値ＪＣの生成に使用される消去以前の消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを取得することができる。また、受信部４０７は、第１の識別情報との一致判断により受信したパケットの正当性判断に使用される第２の識別情報を取得することができる。なお、復号により得られたパケットは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１１７】
また、この場合、生成部４０９は、第１の識別情報と復号部４０８によって復号された第２の識別情報との一致判断を行う。そして、生成部４０９は、一致した場合に、復号部４０８によって復号された加算後の消去カウンタ値Ｒを上位桁とし、消去により送信回数が０になったことを示す消去後の送信カウンタ値Ｓを下位桁とする連結カウンタ値ＪＣを生成する。
【０１１８】
また、この場合、生成部４０９は、具体的には、例えば、ＲＡＭ２０２に保持されている乱数と受信部４０７によって取得された乱数との一致判断を行う。そして、生成部４０９は、一致すると判断された場合、受信部４０７によって受信された加算後の消去カウンタ値Ｒを上位桁とし、送信カウンタ値Ｓの初期値を下位桁とする連結カウンタ値ＪＣを生成する。
【０１１９】
例えば、図１の（５）では、乱数を用いた暗号化パケットＥＰの正当性の判断を行わなかったが、ノードＮ１の生成部４０９は、受信した暗号化パケットＥＰに含まれている乱数と保持しておいた乱数との一致判断を行ってもよい。そして、生成部４０９は、一致した場合、暗号化パケットＥＰが正規パケットと判断して、受信した消去カウンタ値Ｒ「０ｘ０１」と送信カウンタ値Ｓの初期値「０ｘ００００００」を連結した連結カウンタ値ＪＣ「０ｘ０１００００００」を生成する。
【０１２０】
これにより、生成部４０９は、消去以前の連結カウンタ値ＪＣより大きい値であって、以後送信するパケットに含むべき連結カウンタ値ＪＣを生成することができる。なお、生成された連結カウンタ値ＪＣは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１２１】
この場合、保存部４１０は、生成部４０９によって生成された連結カウンタ値ＪＣを第１の記憶部４０１に保存する。保存部４１０は、具体的には、生成部４０９によって生成された連結カウンタ値ＪＣを、消去された連結カウンタ値ＪＣの代わりにＲＡＭ２０２に保存する。
【０１２２】
次に、第３の復旧方法について説明する。第３の復旧方法は、消去カウンタ値Ｒを揮発性メモリではなく不揮発性の第２の記憶部４１１に保存しておくことにより、消去カウンタ値Ｒを読み出して連結カウンタ値ＪＣを復旧する方法である。第３の復旧方法は、生成部４０９と、保存部４１０と、第２の記憶部４１１と、抽出部４１２と、により実行される。
【０１２３】
抽出部４１２は、具体的には、例えば、検出部４０６によって消去が検出された場合、第２の記憶部４１１から消去カウンタ値Ｒを抽出する。抽出部４１２は、具体的には、例えば、検出部４０６によって消去が検出された場合、フラッシュメモリ２０３から消去カウンタ値Ｒを読み出す。例えば、図１では、他ノードＮから消去カウンタ値Ｒを取得したが、ノードＮ１の抽出部４１２は、自ノードＮ内のフラッシュメモリ２０３から、消去カウンタ値Ｒを抽出してもよい。これにより、抽出部４１２は、消去以前の消去カウンタ値Ｒを抽出することができる。なお、抽出された消去カウンタ値Ｒは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１２４】
この場合、生成部４０９は、抽出部４１２によって抽出された消去カウンタ値Ｒに１加算した加算後の消去カウンタ値Ｒを上位桁とし消去により送信回数が０になったことを示す消去後の送信カウンタ値Ｓを下位桁とする連結カウンタ値ＪＣを生成する。
【０１２５】
具体的には、例えば、生成部４０９は、抽出部４１２によって抽出された消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを上位桁とし、送信カウンタ値Ｓの初期値を下位桁とする連結カウンタ値ＪＣを生成する。例えば、ノードＮ１の生成部４０９は、図１の（５）で、他ノードＮから受信した消去カウンタ値Ｒではなく、抽出した消去カウンタ値Ｒ「０ｘ００」に１を加算する。そして、生成部４０９は、加算後の消去カウンタ値Ｒ「０ｘ０１」と送信カウンタ値Ｓの初期値「０ｘ００００００」を連結した連結カウンタ値ＪＣ「０ｘ０１００００００」を生成する。
【０１２６】
これにより、生成部４０９は、消去以前の連結カウンタ値ＪＣより大きい値であって、以後送信するパケットに含むべき連結カウンタ値ＪＣを生成することができる。なお、生成された連結カウンタ値ＪＣは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１２７】
また、この場合、保存部４１０は、生成部４０９によって生成された連結カウンタ値ＪＣを第１の記憶部４０１に保存するとともに、第２の記憶部４１１に記憶されている消去カウンタ値Ｒに対し加算後の消去カウンタ値Ｒを上書き保存する。例えば、図１の（５）で、ノードＮ１の保存部４１０は、消去された連結カウンタ値の代わりに、生成した連結カウンタ値ＪＣ「０ｘ０１００００００」を保存してもよい。これにより、保存部４１０は、以後送信するパケットに含むべき連結カウンタ値ＪＣを保存することができる。また、保存部４１０は、フラッシュメモリ２０３に保持されている消去カウンタ値Ｒを、最新の消去カウンタ値Ｒに更新することができる。
【０１２８】
また、受信部４０７は、上述した暗号化部４０４による暗号化または復号部４０８による復号に使用されるアクセス鍵ＡＫを、他ノードＮから受信する。このとき、アクセス鍵ＡＫは、他ノードＮにより一定時間ごとに更新されてノードＮに送信される。そして、更新後には、更新前のアクセス鍵ＡＫを用いて暗号化された暗号化パケットＥＰは、不正パケットと判断されるようになる。そのため、攻撃者がアクセス鍵ＡＫを解析しても、一定時間経過後には当該アクセス鍵ＡＫを使用した通信が不可能になり、通信の安全性を担保することができる。
【０１２９】
この場合、受信部４０７は、アドホックネットワーク内の近隣ノードＮが有する第１の共通鍵を用いて暗号化された近隣ノードＮが有する第２の共通鍵を、近隣ノードＮから受信する。ここで、第１の共通鍵とは、上述した固定鍵である。第２の共通鍵とは、上述したアクセス鍵ＡＫである。
【０１３０】
具体的には、例えば、受信部４０７は、固定鍵を用いて暗号化されたアクセス鍵ＡＫを含む暗号化パケットＥＰを受信する。例えば、図１で、ノードＮ１の受信部４０７は、ノードＮ２からアクセス鍵ＡＫ２を含む暗号化パケットＥＰを受信してもよい。これにより、受信部４０７は、近隣ノードＮへパケットを送信する際に、パケットの暗号化に使用するアクセス鍵ＡＫを含む暗号化パケットＥＰを受信することができる。なお、受信された暗号化パケットＥＰは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１３１】
また、この場合、復号部４０８は、受信部４０７によって受信された暗号化された第２の共通鍵を、第１の共通鍵を用いて復号する。復号部４０８は、具体的には、例えば、アクセス鍵ＡＫを含む暗号化パケットＥＰを固定鍵を用いて復号する。そして、復号部４０８は、復号により得られたパケットからアクセス鍵ＡＫを取得する。例えば、図１で、ノードＮ１の復号部４０８は、アクセス鍵ＡＫ２を含む暗号化パケットＥＰを復号してもよい。そして、ノードＮ１の復号部４０８は、アクセス鍵ＡＫ２を取得してもよい。
【０１３２】
これにより、復号部４０８は、近隣ノードＮへパケットを送信する際に、パケットの暗号化に使用するアクセス鍵ＡＫを取得することができる。なお、復号により得られたパケットは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。なお、取得されたアクセス鍵ＡＫは、送信元を示す識別子と関連付けてノードＤＢ３００に記憶される。
【０１３３】
このとき、送信元を示す識別子と関連付けてノードＤＢ３００にアクセス鍵ＡＫが保持されている場合、保持されているアクセス鍵ＡＫが取得されたアクセス鍵ＡＫで更新される。また、送信元を示す識別子と関連付けてノードＤＢ３００にアクセス鍵ＡＫが保持されていない場合、送信元を示す識別子と取得されたアクセス鍵ＡＫとを関連付けたレコードがノードＤＢ３００に追加される。
【０１３４】
図５は、ノードＮの受信側としての機能的構成例を示す機能ブロック図である。図５に示すように、ノードＮは、第１の受信部５０１と、第１の保存部５０２と、第２の受信部５０３と、判断部５０４と、第２の保存部５０５と、データ処理部５０６と、第３の受信部５０７と、抽出部５０８と、送信部５０９と、を備える。第１の受信部５０１〜データ処理部５０６は、具体的には、例えば、図２に示したフラッシュメモリ２０３などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０４により、その機能を実現する。
【０１３５】
第１の受信部５０１は、他ノードＮでの消去回数を示す消去カウンタ値Ｒを上位桁とし他ノードＮからの送信回数を示す送信カウンタ値Ｓを下位桁とする第１の連結カウンタ値ＪＣを、他ノードＮから受信する。具体的には、例えば、第１の受信部５０１は、連結カウンタ値ＪＣを含むパケットを受信する。そして、第１の受信部５０１は、受信したパケットから連結カウンタ値ＪＣを取得する。これにより、第１の受信部５０１は、以後に受信するパケットの正当性の判断に使用する受信カウンタ値ＲＣになる連結カウンタ値ＪＣを取得することができる。
【０１３６】
また、第１の受信部５０１によって受信されるパケットは、暗号化により得られた暗号化パケットＥＰであってもよい。このとき、第１の受信部５０１は、暗号化パケットＥＰを固定鍵ＦＫまたはアクセス鍵ＡＫを用いて復号する。例えば、ノードＮ２の第１の受信部５０１は、図１でノードＮ２に保持されている受信カウンタ値ＲＣになる連結カウンタ値ＪＣを含む暗号化パケットＥＰを、過去に受信している。
【０１３７】
第１の保存部５０２は、第１の受信部５０１によって受信された連結カウンタ値ＪＣを記憶装置に保存する。ここで、記憶装置とは、例えば、上述したＲＡＭ２０２である。具体的には、例えば、第１の保存部５０２は、第１の受信部５０１によって取得された連結カウンタ値ＪＣを、受信カウンタ値ＲＣとしてＲＡＭ２０２に保存する。例えば、図１では、ノードＮ２の第１の保存部５０２は、過去にノードＮ１から受信した暗号化パケットＥＰを復号して抽出した連結カウンタ値ＪＣ「０ｘ００００１２３０」を、受信カウンタ値ＲＣとして保持している。これにより、第１の保存部５０２は、以後に受信するパケットの正当性の判断に使用する連結カウンタ値ＪＣを、以後にパケットが受信されるまで受信カウンタ値ＲＣとしてＲＡＭ２０２に保持しておくことができる。
【０１３８】
第２の受信部５０３は、第２の連結カウンタ値ＪＣを他ノードＮから受信する。具体的には、例えば、第２の受信部５０３は、第１の受信部５０１によってパケットが受信された後に、連結カウンタ値ＪＣを含むパケットを受信する。そして、第２の受信部５０３は、受信したパケットから連結カウンタ値ＪＣを取得する。なお、受信されたパケットは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。例えば、図１の（９）では、暗号化パケットＥＰを受信しているが、ノードＮ２の第２の受信部５０３は、連結カウンタ値ＪＣ「０ｘ０１０００００２」を含む暗号化されないパケットを受信してもよい。これにより、第２の受信部５０３は、受信したパケットの正当性の判断に使用される連結カウンタ値ＪＣを取得することができる。
【０１３９】
また、第２の受信部５０３によって受信されるパケットは、暗号化により得られた暗号化パケットＥＰであってもよい。このとき、第２の受信部５０３は、暗号化パケットＥＰを固定鍵ＦＫまたはアクセス鍵ＡＫを用いて復号する。例えば、図１の（９）では、ノードＮ２の第２の受信部５０３は、連結カウンタ値ＪＣ「０ｘ０１０００００２」を含む暗号化パケットＥＰを受信している。そして、第２の受信部５０３は、暗号化パケットＥＰを固定鍵を用いて復号している。
【０１４０】
判断部５０４は、第２の受信部５０３によって受信された第２の連結カウンタ値ＪＣが第１の連結カウンタ値ＪＣよりも大きいか否かを判断する。ここで、第１の連結カウンタ値ＪＣとは、上述した受信カウンタ値ＲＣである。具体的には、例えば、判断部５０４は、第２の受信部５０３によって取得された連結カウンタ値ＪＣが、ＲＡＭ２０２に保持されている受信カウンタ値ＲＣよりも大きいか否かを判断する。そして、判断部５０４は、判断結果から、第２の受信部５０３によって受信されたパケットが不正パケットであるか否かを判断する。なお、判断結果は、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１４１】
ここで、送信元のノードＮでは、送信ごとに連結カウンタ値ＪＣに１を加算し、連結カウンタ値ＪＣの消去後には消去前の連結カウンタ値より大きい値になる新たな連結カウンタ値を生成している。そのため、ノードＮが、ある送信元のノードＮからの正規パケットを受信し続けている限り、今回受信したパケットに含まれる連結カウンタ値ＪＣは、前回受信したパケットに含まれる連結カウンタ値ＪＣ（すなわち、受信カウンタ値ＲＣ）より大きくなる。一方で、ノードＮが再送攻撃による不正パケットを受信した場合、再送攻撃では過去に送信されたパケットをそのまま送信しているため、ノードＮが今回受信したパケットに含まれる連結カウンタ値ＪＣは、受信カウンタ値ＲＣ以下となる。
【０１４２】
そのため、判断部５０４は、第２の受信部５０３によって取得された連結カウンタ値ＪＣが、ＲＡＭ２０２に保持されている受信カウンタ値ＲＣよりも大きい場合、第２の受信部５０３によって受信されたパケットを正規パケットと判断する。一方、判断部５０４は、第２の受信部５０３によって取得された連結カウンタ値ＪＣが、ＲＡＭ２０２に保持されている受信カウンタ値ＲＣ以下の場合、第２の受信部５０３によって受信されたパケットを不正パケットと判断する。例えば、図１の（９）では、ノードＮ２の判断部５０４は、受信カウンタ値ＲＣ「０ｘ００００５６７８」と、取得した連結カウンタ値ＪＣ「０ｘ０１０００００２」と、の大小比較を行っている。そして、ノードＮ２の判断部５０４は、連結カウンタ値ＪＣが受信カウンタ値ＲＣよりも大きいため、受信した暗号化パケットＥＰは正規パケットであると判断している。これにより、判断部５０４は、第２の受信部５０３によって受信されたパケットが、不正パケットであるか否かを判断することができる。
【０１４３】
第２の保存部５０５は、判断部５０４によって大きいと判断された場合、第１の連結カウンタ値ＪＣに第２の連結カウンタ値ＪＣを上書保存する。具体的には、第２の保存部５０５は、判断部５０４によって大きいと判断された場合、ＲＡＭ２０２に保持されている受信カウンタ値ＲＣに、第２の受信部５０３によって取得された連結カウンタ値ＪＣを上書き保存する。例えば、図１の（９）では、ノードＮ２の第２の保存部５０５は、受信カウンタ値ＲＣ「０ｘ００００５６７８」を、取得した連結カウンタ値ＪＣ「０ｘ０１０００００２」で更新している。これにより、第２の保存部５０５は、受信カウンタ値ＲＣを、最新の受信カウンタ値ＲＣに更新することができる。
【０１４４】
データ処理部５０６は、判断部５０４によって大きくないと判断された場合、第２の連結カウンタ値ＪＣとともに受信されたデータを廃棄する。具体的には、例えば、データ処理部５０６は、判断部５０４によって大きくないと判断され、第２の受信部５０３によって受信されたパケットが不正パケットであると判断された場合、不正パケットの内容が処理要求であっても処理を実行しない。また、データ処理部５０６は、不正パケットの内容が転送要求であってもマルチホップ通信せずに廃棄する。
【０１４５】
例えば、図１の（９）で、ノードＮ２のデータ処理部５０６は、不正パケットと判断された場合、受信した暗号化パケットＥＰを廃棄する。これにより、データ処理部５０６は、不正パケットが他ノードＮへ転送されることを防止でき、また、不正パケットの内容を実行することによるノードＮの処理負担を軽減できる。
【０１４６】
また、データ処理部５０６は、判断部５０４によって大きいと判断された場合、第２の連結カウンタ値ＪＣとともに受信されたデータを処理する。具体的には、例えば、データ処理部５０６は、判断部５０４によって大きいと判断され、第２の受信部５０３によって受信されたパケットが正規パケットであると判断された場合、正規パケットの内容が処理要求であれば、処理要求に従って処理を行う。また、データ処理部５０６は、正規パケットの内容が転送要求であれば、マルチホップ通信により他ノードＮへ正規パケットを転送する。これにより、データ処理部５０６は、正規パケットにはパケットの内容に応じた処理を行うことができる。
【０１４７】
第３の受信部５０７は、消去カウンタ値Ｒについての取得要求や更新要求を受信する。まず、第３の受信部５０７が取得要求を受信する場合について説明する。ここで、取得要求とは、他ノードＮに、自ノードＮが過去に送信した送信カウンタ値Ｓを示す他ノードＮが保持している受信カウンタ値ＲＣから消去カウンタ値Ｒを抽出させて、抽出させた消去カウンタ値Ｒを自ノードＮへ送信させる要求である。
【０１４８】
この場合、第３の受信部５０７は、他ノードＮから消去カウンタ値Ｒの取得要求を受信する。具体的には、例えば、第３の受信部５０７は、他ノードＮから、取得要求を含むパケットを受信する。例えば、図１の（２）では、暗号化パケットＥＰを受信しているが、ノードＮ２の第３の受信部５０７は、取得要求を含む暗号化されないパケットを受信してもよい。これにより、第３の受信部５０７は、ＲＡＭ２０２に保持されている受信カウンタ値ＲＣの中から、消去カウンタ値Ｒを抽出するトリガを発生させることができる。なお、受信されたパケットは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１４９】
また、第３の受信部５０７によって受信されるパケットは、暗号化により得られた暗号化パケットＥＰであってもよい。このとき、第３の受信部５０７は、暗号化パケットＥＰを固定鍵ＦＫまたはアクセス鍵ＡＫを用いて復号する。例えば、図１の（９）では、ノードＮ２の第３の受信部５０７は、取得要求を含む暗号化パケットＥＰを受信している。そして、第３の受信部５０７は、暗号化パケットＥＰを固定鍵を用いて復号している。
【０１５０】
また、この場合、抽出部５０８は、第３の受信部５０７によって取得要求が受信された場合、記憶装置に記憶されている連結カウンタ値ＪＣの中の消去カウンタ値Ｒを抽出する。具体的には、例えば、抽出部５０８は、第３の受信部５０７によって取得要求が取得された場合、ＲＡＭ２０２に保持されている受信カウンタ値ＲＣの中から、消去カウンタ値Ｒを抽出する。例えば、図１の（４）では、ノードＮ２の抽出部５０８は、保持している受信カウンタ値ＲＣ「０ｘ００００１２３０」の中から、消去カウンタ値Ｒ「０ｘ００」を抽出している。これにより、抽出部５０８は、他ノードＮに送信する消去カウンタ値Ｒを抽出することができる。なお、抽出された消去カウンタ値Ｒは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１５１】
また、この場合、送信部５０９は、抽出部５０８によって抽出された消去カウンタ値Ｒを他ノードＮに送信する。具体的には、送信部５０９は、抽出部５０８によって抽出された消去カウンタ値Ｒを含むパケットを生成する。そして、送信部５０９は、生成したパケットを他ノードＮに送信する。
【０１５２】
なお、ここでは、送信部５０９は、生成したパケットを、他ノードＮにユニキャスト送信している。なお、パケットの他ノードＮへのユニキャスト送信は、送信部５０９がパケットを近隣ノードに配信し、宛先の他ノードＮ以外の近隣ノードＮが受信したパケットを廃棄し、宛先になる他ノードＮが受信したパケットを処理することで実現される。例えば、図１の（４）では、ノードＮ２の送信部５０９は、消去カウンタ値Ｒ「０ｘ００」を含む暗号化パケットＥＰを送信している。これにより、送信部５０９は、他ノードＮでの連結カウンタ値ＪＣの生成に使用される消去カウンタ値Ｒを送信することができる。
【０１５３】
次に、第３の受信部５０７が更新要求を受信する場合について説明する。ここで、更新要求とは、他ノードＮに、自ノードＮが過去に送信した送信カウンタ値Ｓを示す受信カウンタ値ＲＣから、消去カウンタ値Ｒを抽出させる要求である。また、更新要求とは、他ノードＮに、抽出させた消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを自ノードＮへ送信させる要求である。
【０１５４】
この場合、第３の受信部５０７は、他ノードＮから消去カウンタ値Ｒの更新要求を受信する。具体的には、例えば、第３の受信部５０７は、他ノードＮから、更新要求を含むパケットを受信する。なお、受信されたパケットは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。例えば、図１の（２）では、取得要求を含む暗号化パケットＥＰを受信しているが、ノードＮ２の第３の受信部５０７は、取得要求を含む暗号化されないパケットを受信してもよい。これにより、第３の受信部５０７は、ＲＡＭ２０２に保持されている受信カウンタ値ＲＣの中から、消去カウンタ値Ｒを抽出するトリガを発生させることができる。
【０１５５】
また、第３の受信部５０７によって受信されるパケットは、暗号化により得られた暗号化パケットＥＰであってもよい。このとき、第３の受信部５０７は、暗号化パケットＥＰを固定鍵ＦＫまたはアクセス鍵ＡＫを用いて復号する。例えば、図１の（２）では、ノードＮ２の第３の受信部５０７は、取得要求を含む暗号化パケットＥＰを受信している。そして、第３の受信部５０７は、暗号化パケットＥＰを固定鍵を用いて復号している。
【０１５６】
また、この場合、抽出部５０８は、第３の受信部５０７によって更新要求が受信された場合、記憶装置に記憶されている連結カウンタ値ＪＣの中の消去カウンタ値Ｒを抽出する。ここで、記憶装置とは、ＲＡＭ２０２である。具体的には、例えば、抽出部５０８は、第３の受信部５０７によって更新要求が取得された場合、ＲＡＭ２０２に保持されている受信カウンタ値ＲＣの中から、消去カウンタ値Ｒを抽出する。例えば、図１の（４）では、ノードＮ２の抽出部５０８は、保持している受信カウンタ値ＲＣ「０ｘ００００１２３０」の中から、消去カウンタ値Ｒ「０ｘ００」を抽出している。これにより、抽出部５０８は、他ノードＮに送信する消去カウンタ値Ｒを抽出することができる。なお、抽出された消去カウンタ値Ｒは、例えば、ＲＡＭ２０２などの記憶領域に記憶される。
【０１５７】
また、この場合、送信部５０９は、抽出部５０８によって抽出された消去カウンタ値Ｒに１加算した加算後の消去カウンタ値Ｒを他ノードＮに送信する。具体的には、送信部５０９は、抽出部５０８によって抽出された消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを含むパケットを生成する。そして、送信部５０９は、生成したパケットを他ノードＮに送信する。なお、ここでは、送信部５０９は、生成したパケットを、他ノードＮにユニキャスト送信している。
【０１５８】
例えば、図１の（４）では、ノードＮ２の送信部５０９は、生成したパケットをノードＮ１に送信している。これにより、送信部５０９は、他ノードＮでの連結カウンタ値ＪＣの生成に使用される加算後の消去カウンタ値Ｒを送信することができる。また、送信部４０３によって送信されるパケットは、暗号化されてもよい。このとき、送信部４０３は、パケットを固定鍵ＦＫまたはアクセス鍵ＡＫを用いて暗号化する。
【０１５９】
（アクセス鍵ＡＫを用いた暗号化通信）
次に、図６および図７を用いて、アクセス鍵ＡＫを用いた暗号化通信の一例について説明する。
【０１６０】
図６は、アクセス鍵ＡＫを用いた暗号化通信の一例を示す説明図である。なお、図１で説明した箇所と同様の箇所についての説明は省略する。図６の例では、ノードＮ１は、ノードＮ２へ送信するパケットの暗号化に使用されるアクセス鍵ＡＫ２と、ノードＮ３へ送信するパケットの暗号化に使用されるアクセス鍵ＡＫ３と、を保持している。
【０１６１】
また、ノードＮ１は、連結カウンタ値ＪＣ「０ｘ００００１２３０」を保持している。ノードＮ２は、過去にノードＮ１から受信した暗号化パケットＥＰを復号して得られたパケットから抽出した連結カウンタ値ＪＣ「０ｘ００００１２３０」を、受信カウンタ値ＲＣとして保持している。ノードＮ３は、過去にノードＮ１から受信した暗号化パケットＥＰを復号して得られたパケットから抽出した連結カウンタ値ＪＣ「０ｘ００００１２２９」を、受信カウンタ値ＲＣとして保持している。
【０１６２】
ここでは、ノードＮ１からノードＮ２およびノードＮ３に、アクセス鍵ＡＫを用いて暗号化された暗号化パケットＥＰが送信される場合を例に挙げて、アクセス鍵ＡＫを用いた暗号化通信について説明する。
【０１６３】
（１１）ノードＮ１は、ノードＮ２を宛先にするデータの送信イベントがあると、連結カウンタ値ＪＣ「０ｘ００００１２３０」に１を加算する。
【０１６４】
（１２）次に、ノードＮ１は、ノードＮ２を宛先にするデータと、加算後の連結カウンタ値ＪＣ「０ｘ００００１２３１」と、を含むパケットを生成し、生成したパケットをアクセス鍵ＡＫ２を用いて暗号化する。そして、ノードＮ１は、暗号化により得られた暗号化パケットＥＰを、データの宛先になるノードＮ２に送信する。
【０１６５】
（１３）ノードＮ２は、ノードＮ１から暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰを、アクセス鍵ＡＫ２を用いて復号する。そして、ノードＮ２は、復号により得られたパケットに含まれる連結カウンタ値ＪＣ「０ｘ００００１２３１」と、前回受信した連結カウンタ値ＪＣを示す受信カウンタ値ＲＣ「０ｘ００００１２３０」と、の大小比較を行う。
【０１６６】
ここで、ノードＮ２は、復号により得られたパケットに含まれる連結カウンタ値ＪＣが受信カウンタ値ＲＣよりも大きいため、受信した暗号化パケットＥＰが正規パケットであると判断する。そして、ノードＮ２は、受信カウンタ値ＲＣ「０ｘ００００１２３０」を、復号により得られたパケットに含まれる連結カウンタ値ＪＣ「０ｘ００００１２３１」で更新する。
【０１６７】
（１４）また、ノードＮ１は、ノードＮ３を宛先にするデータの送信イベントがあると、連結カウンタ値ＪＣ「０ｘ００００１２３１」に１を加算する。
【０１６８】
（１５）次に、ノードＮ１は、ノードＮ３を宛先にするデータと、加算後の連結カウンタ値ＪＣ「０ｘ００００１２３２」と、を含むパケットを生成し、生成したパケットをアクセス鍵ＡＫ３を用いて暗号化する。そして、ノードＮ１は、暗号化により得られた暗号化パケットＥＰを、データの宛先になるノードＮ３に送信する。
【０１６９】
（１６）ノードＮ３は、ノードＮ１から暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰを、アクセス鍵ＡＫ３を用いて復号する。そして、ノードＮ３は、復号により得られたパケットに含まれる連結カウンタ値ＪＣ「０ｘ００００１２３２」と、前回受信した連結カウンタ値ＪＣを示す受信カウンタ値ＲＣ「０ｘ００００１２２９」と、の大小比較を行う。ここで、ノードＮ３は、復号により得られたパケットに含まれる連結カウンタ値ＪＣが受信カウンタ値ＲＣよりも大きいため、受信した暗号化パケットＥＰが正規パケットであると判断する。そして、ノードＮ３は、受信カウンタ値ＲＣ「０ｘ００００１２９９」を、復号により得られたパケットに含まれる連結カウンタ値ＪＣ「０ｘ００００１２３２」で更新する。
【０１７０】
（アクセス鍵ＡＫを用いた暗号化通信の詳細）
次に、図７を用いて、図６に示したアクセス鍵ＡＫを用いた暗号化通信の詳細について説明する。
【０１７１】
図７は、アクセス鍵ＡＫを用いた暗号化通信の詳細を示す説明図である。図７では、図６に示したノードＮ１とノードＮ２との間の暗号化通信の詳細について説明する。
【０１７２】
（２１）ノードＮ１は、ノードＮ１のユーザからのノードＮ２を宛先にするデータの入力を受けると、ノードＮ２との暗号化通信を開始する。ここでは、ノードＮ１は、ユーザからのデータの入力をトリガにして暗号化通信を開始したが、ノードＮ１が自動的に発生させたデータ送信イベントをトリガにして暗号化通信を開始してもよい。（２２）次に、ノードＮ１は、ノードＮ２を宛先にするデータの入力を受けると、連結カウンタ値ＪＣ「０ｘ００００１２３０」に１を加算する。
【０１７３】
（２３）そして、ノードＮ１は、送信元を示す識別子「Ｎ１」と、ノードＮ２を宛先にするデータと、加算後の連結カウンタ値ＪＣ「０ｘ００００１２３１」と、を含むパケットを生成する。このとき、送信元を示す識別子は、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に含まれる。以下の説明においても、同様に、送信元を示す識別子はパケット内の暗号化されない部分に含まれる。また、パケット内の暗号化される部分に、さらに送信元を示す識別子を含んでもよい。
【０１７４】
（２４）次に、ノードＮ１は、生成したパケット内のノードＮ２を宛先にするデータと加算後の連結カウンタ値ＪＣ「０ｘ００００１２３１」とをアクセス鍵ＡＫ２を用いて暗号化する。
【０１７５】
（２５）そして、ノードＮ１は、暗号化により得られた暗号化パケットＥＰを、データの宛先になるノードＮ２に送信する。
【０１７６】
（２６）ノードＮ２は、ノードＮ１から暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰから送信元を示す識別子「Ｎ１」を取得し、受信した暗号化パケットＥＰをアクセス鍵ＡＫ２を用いて復号する。そして、ノードＮ２は、復号により得られたパケットから、ノードＮ２を宛先にするデータと連結カウンタ値ＪＣ「０ｘ００００１２３１」とを取得する。
【０１７７】
（２７）次に、ノードＮ２は、取得した「Ｎ１」が示す送信元のノードＮ１に関連付けられた受信カウンタ値ＲＣを、ノードＤＢ３００から抽出する。（２８）そして、ノードＮ２は、取得した連結カウンタ値ＪＣ「０ｘ００００１２３１」と、抽出した受信カウンタ値ＲＣ「０ｘ００００１２３０」との大小比較を行う。ここで、ノードＮ２は、取得した連結カウンタ値ＪＣが、抽出した受信カウンタ値ＲＣよりも大きいため、受信した暗号化パケットＥＰが正規パケットであると判断する。
【０１７８】
（２９）次に、ノードＮ２は、暗号化パケットＥＰが正規パケットであると判断されると、ノードＤＢ３００の受信カウンタ値ＲＣ「０ｘ００００１２３０」を連結カウンタ値ＪＣ「０ｘ００００１２３１」で更新する。そして、ノードＮ２は、暗号化パケットＥＰが正規パケットであると判断されると、正規パケットの内容が処理要求であれば、処理要求に従って処理を行う。また、データ処理部は、正規パケットの内容が転送要求であれば、マルチホップ通信により他ノードＮへ正規パケットを転送する。これにより、ノードＮ２は、正規パケットには、パケットの内容に応じた処理を行うことができる。
【０１７９】
一方、ノードＮ２は、取得した連結カウンタ値ＪＣが、抽出した受信カウンタ値ＲＣ以下である場合は、受信した暗号化パケットＥＰが不正パケットであると判断する。そして、ノードＮ２は、不正パケットであると判断されると、復号により得られたパケットを廃棄する。
【０１８０】
具体的には、ノードＮ２は、不正パケットの内容が処理要求であっても処理を実行せずに、復号により得られたパケットを廃棄する。また、ノードＮ２は、不正パケットの内容が転送要求であってもマルチホップ通信せずに、復号により得られたパケットを廃棄する。これにより、ノードＮ２は、不正パケットが他ノードＮへ転送されることを防止でき、また、不正パケットの内容を実行することによるノードＮの処理負担を軽減できる。そして、ノードＮ２は、通信の安全性を担保することができる。
【０１８１】
（パケット送信処理の処理内容）
次に、図８を用いて、図６および図７に示した暗号化通信におけるパケット送信処理について説明する。パケット送信処理は、図６および図７に示したノードＮ１が実行する処理である。ここでは、例としてノードＮ１を実行主体として説明する。
【０１８２】
図８は、暗号化通信におけるパケット送信処理の詳細な処理手順を示すフローチャートである。まず、ノードＮ１は、他ノードＮを宛先にするデータの送信イベントが発生したか否かを判定する（ステップＳ８０１）。ここで、送信イベントが発生していない場合（ステップＳ８０１：Ｎｏ）、ＣＰＵ２０１は、ステップＳ８０１に戻り、送信イベントの発生を待つ。
【０１８３】
一方、送信イベントが発生した場合（ステップＳ８０１：Ｙｅｓ）、ノードＮ１は、連結カウンタ値ＪＣに１を加算する（ステップＳ８０２）。次に、ノードＮ１は、送信元になる自ノードＮを示す識別子と、他ノードＮを宛先にするデータと、加算後の連結カウンタ値ＪＣと、を含むパケットを生成する（ステップＳ８０３）。
【０１８４】
そして、ノードＮ１は、データの宛先になるノードＮの識別子に関連付けてノードＤＢ３００に保持されているアクセス鍵ＡＫがあるか否かを判定する（ステップＳ８０４）。ここで、アクセス鍵ＡＫがある場合（ステップＳ８０４：Ｙｅｓ）、ノードＮ１は、生成したパケットを、アクセス鍵ＡＫを用いて暗号化する（ステップＳ８０５）。
【０１８５】
一方、アクセス鍵ＡＫがない場合（ステップＳ８０４：Ｎｏ）、ノードＮ１は、生成したパケットを、固定鍵を用いて暗号化する（ステップＳ８０６）。そして、ノードＮ１は、暗号化により得られた暗号化パケットＥＰを、データの宛先になるノードＮに送信し（ステップＳ８０７）、パケット送信処理を終了する。これにより、ノードＮは、送信するパケットを暗号化して、通信の安全性を担保することができる。
【０１８６】
（パケット受信処理の処理内容）
次に、図９を用いて、図６および図７に示した暗号化通信におけるパケット受信処理について説明する。パケット受信処理は、図６および図７に示したノードＮ２またはノードＮ３が実行する処理である。ここでは、例としてノードＮ２を実行主体として説明する。
【０１８７】
図９は、暗号化通信におけるパケット受信処理の詳細な処理手順を示すフローチャートである。まず、ノードＮ２は、暗号化パケットＥＰを受信したか否かを判定する（ステップＳ９０１）。ここで、暗号化パケットＥＰを受信していない場合（ステップＳ９０１：Ｎｏ）、ノードＮ２は、ステップＳ９０１に戻り、暗号化パケットＥＰの受信を待つ。
【０１８８】
一方、暗号化パケットＥＰを受信した場合（ステップＳ９０１：Ｙｅｓ）、ノードＮ２は、暗号化パケットＥＰ内の暗号化されない部分（例えば、パケットのヘッダ部分）から、送信元を示す識別子を取得する（ステップＳ９０２）。
【０１８９】
次に、ノードＮ２は、自ノードＮのアクセス鍵ＡＫまたは固定鍵を用いて、受信した暗号化パケットＥＰを復号する（ステップＳ９０３）。次に、ノードＮ２は、正常に復号できたか否かを判定する（ステップＳ９０４）。ここで、正常に復号できない場合（ステップＳ９０４：Ｎｏ）、ノードＮ２は、受信した暗号化パケットＥＰが不正パケットであると判断して、暗号化パケットＥＰを廃棄し（ステップＳ９０７）、パケット受信処理を終了する。
【０１９０】
一方、正常に復号できた場合（ステップＳ９０４：Ｙｅｓ）、ノードＮ２は、復号により得られたパケット内の連結カウンタ値ＪＣが、送信元を示す識別子に関連付けてノードＤＢ３００に保持されている受信カウンタ値ＲＣより大きいか否かを判定する（ステップＳ９０５）。
【０１９１】
ここで、受信カウンタ値ＲＣ以下の場合（ステップＳ９０５：Ｎｏ）、ノードＮ２は、受信した暗号化パケットＥＰが不正パケットであるとして、暗号化パケットＥＰを廃棄し（ステップＳ９０７）、パケット受信処理を終了する。
【０１９２】
一方、受信カウンタ値ＲＣより大きい場合（ステップＳ９０５：Ｙｅｓ）、ノードＮ２は、受信した暗号化パケットＥＰが正規パケットであると判断する。そして、ノードＮ２は、送信元を示す識別子に関連付けてノードＤＢ３００に保持されている受信カウンタ値ＲＣを、復号により得られたパケット内の連結カウンタ値ＪＣに更新して（ステップＳ９０６）、パケット受信処理を終了する。これにより、ノードＮは、受信した暗号化パケットＥＰが不正パケットであるか否かを判断して、暗号化パケットＥＰが不正パケットと判断された場合、暗号化パケットＥＰを廃棄し、通信の安全性を担保する。
【０１９３】
（連結カウンタ値ＪＣが消去された場合の処理）
次に、連結カウンタ値ＪＣが消去された場合について説明する。例えば、連結カウンタ値ＪＣが消去された場合とは、停電によりノードＮに電力が供給されず、ＲＡＭ２０２に保持されている連結カウンタ値ＪＣが消去された場合である。また、連結カウンタ値ＪＣが消去された場合とは、ノードＮのユーザからの操作によってＲＡＭ２０２の記憶内容が初期化された場合であってもよい。
【０１９４】
この場合、ノードＮは、以後送信する暗号化パケットＥＰに含むべき連結カウンタ値ＪＣが不明であるため、以後送信する暗号化パケットＥＰを他ノードＮで正規パケットと判断させることができず、アドホックネットワークへ復帰することができない。以下では、新たな連結カウンタ値ＪＣを生成してアドホックネットワークに復帰する際のノードＮの動作例について説明する。
【０１９５】
（ノードＮの連結カウンタ値ＪＣが消去された場合の動作例１）
まず、図１０〜図１３を用いて、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例１について説明する。
【０１９６】
図１０〜図１３は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例１を示す説明図である。なお、図１で説明した箇所と同様の箇所についての説明は省略する。図１０の例では、ノードＮ１は、ノードＮ２から受信され、ノードＮ２へ送信するパケットの暗号化に使用されるアクセス鍵ＡＫ２「０ｘ２２２２」を保持している。
【０１９７】
また、ノードＮ１は、連結カウンタ値ＪＣ「０ｘ００００１２３０」を保持している。ノードＮ２は、過去にノードＮ１から受信した暗号化パケットＥＰを復号して得られたパケットから連結カウンタ値ＪＣを抽出し、抽出した連結カウンタ値ＪＣ「０ｘ００００１２３０」を、受信カウンタ値ＲＣとして保持している。
【０１９８】
図１０において、停電によりノードＮ１に電力が供給されず、ノードＮ１が保持していた連結カウンタ値ＪＣ「０ｘ００００１２３０」およびアクセス鍵ＡＫ２が消去されてしまったとする。そのため、他ノードＮに送信するパケットに含むべき連結カウンタ値ＪＣが不明になり、ノードＮ１は、他ノードＮにパケットを送信することができない。
【０１９９】
（３１）ここで、ノードＮ１は、停電が回復し電力が供給されると、保持していた連結カウンタ値ＪＣが消去されたことを検出する。
【０２００】
（３２）ノードＮ１は、連結カウンタ値ＪＣが消去されたことを検出すると、一時的な識別情報になる乱数を生成する。図１０の例では、ノードＮ１は、乱数として「０ｘ５８１９」を生成する。このとき、ノードＮ１は、生成した乱数「０ｘ５８１９」をＲＡＭ２０２に保持しておく。
【０２０１】
（３３）ノードＮ１は、乱数を生成すると、送信元を示す識別子「Ｎ１」と、消去カウンタ値Ｒの取得要求を示す連結カウンタ値ＪＣとして設定されている「０ｘ００００００００」と、生成した乱数「０ｘ５８１９」と、を含むパケットを生成する。このとき、送信元を示す識別子は、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に含まれる。
【０２０２】
（３４）ノードＮ１は、パケットを生成すると、生成したパケット内の連結カウンタ値ＪＣ「０ｘ００００００００」と乱数「０ｘ５８１９」とを、固定鍵ＦＫを用いて暗号化する。（３５）そして、ノードＮ１は、暗号化により得られた暗号化パケットＥＰを、ノードＮ２を含む近隣ノードＮに送信する。次に、図１１に移る。
【０２０３】
（３６）ノードＮ２は、（３５）でノードＮ１から送信された暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰから送信元を示す識別子「Ｎ１」を取得し、受信した暗号化パケットＥＰを固定鍵ＦＫを用いて復号する。そして、ノードＮ２は、復号により得られたパケットから、連結カウンタ値ＪＣ「０ｘ００００００００」と乱数「０ｘ５８１９」とを取得する。
【０２０４】
（３７）ノードＮ２は、取得した連結カウンタ値ＪＣが、消去カウンタ値Ｒの取得要求を示す連結カウンタ値ＪＣとして設定されている「０ｘ００００００００」であることを検出する。そして、ノードＮ２は、取得した送信元を示す識別子「Ｎ１」に関連付けられた受信カウンタ値ＲＣをノードＤＢ３００から抽出し、抽出した受信カウンタ値ＲＣから消去カウンタ値Ｒ「０ｘ００」を抽出する。
【０２０５】
（３８）ノードＮ２は、消去カウンタ値Ｒを抽出すると、送信元を示す識別子「Ｎ２」と、抽出した消去カウンタ値Ｒ「０ｘ００」と、取得した乱数「０ｘ５８１９」と、を含むパケットを生成する。このとき、送信元を示す識別子は、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に含まれる。
【０２０６】
（３９）ノードＮ２は、生成したパケット内の消去カウンタ値Ｒ「０ｘ００」と乱数「０ｘ５８１９」とを固定鍵ＦＫを用いて暗号化する。
【０２０７】
（４０）ノードＮ２は、暗号化により得られた暗号化パケットＥＰを、取得した識別子「Ｎ１」が示すノードＮ１に送信する。次に、図１２に移る。
【０２０８】
（４１）ノードＮ１は、（４０）でノードＮ２から送信された暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰから送信元を示す識別子「Ｎ２」を取得し、受信した暗号化パケットＥＰを、固定鍵ＦＫを用いて復号する。そして、ノードＮ１は、復号により得られたパケットから、消去カウンタ値Ｒ「０ｘ００」と乱数「０ｘ５８１９」とを取得する。
【０２０９】
（４２）ノードＮ１は、乱数を取得すると、取得した乱数と（３２）でＲＡＭ２０２に保持しておいた乱数との一致判断を行う。ここで、ノードＮ１は、取得した乱数「０ｘ５８１９」とＲＡＭ２０２に保持しておいた乱数「０ｘ５８１９」とが一致するため、（４１）で受信した暗号化パケットＥＰは正規パケットであると判断する。
【０２１０】
（４３）ノードＮ１は、正規パケットであると判断されると、連結カウンタ値ＪＣが消去される以前の消去カウンタ値Ｒを示す取得した消去カウンタ値Ｒ「０ｘ００」に、１を加算する。そして、ノードＮ１は、加算後の消去カウンタ値Ｒ「０ｘ０１」と送信カウンタ値Ｓの初期値「０ｘ００００００」とを連結して、連結カウンタ値ＪＣ「０ｘ０１００００００」を生成する。これにより、ノードＮ１は、消去された連結カウンタ値ＪＣの代わりに、新たな連結カウンタ値ＪＣを生成する。
【０２１１】
一方、ノードＮ１は、取得した乱数と（３２）でＲＡＭ２０２に保持しておいた乱数とが一致しない場合は、（４１）で受信した暗号化パケットＥＰは不正パケットであると判断する。そして、ノードＮ１は、不正パケットであると判断されると、復号により得られたパケットを廃棄することで、通信の安全性を担保する。次に、図１３に移る。
【０２１２】
（４４）ノードＮ１は、ノードＮ１のユーザからのノードＮ２を宛先にするデータの入力を受けると、ノードＮ２との暗号化通信を開始する。ここでは、ノードＮ１は、ユーザからのデータの入力をトリガにして暗号化通信を開始したが、ノードＮ１が自動的に発生させたデータ送信イベントをトリガにして暗号化通信を開始してもよい。
【０２１３】
（４５）ノードＮ１は、ノードＮ２を宛先にするデータの入力を受けると、（４３）で生成された新たな連結カウンタ値ＪＣ「０ｘ０１００００００」に１を加算する。
【０２１４】
（４６）ノードＮ１は、送信元を示す識別子「Ｎ１」と、ノードＮ２を宛先にするデータと、加算後の連結カウンタ値ＪＣ「０ｘ０１０００００１」と、を含むパケットを生成する。このとき、送信元を示す識別子は、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に含まれる。
【０２１５】
（４７）ノードＮ１は、パケットを生成すると、生成したパケット内のノードＮ２を宛先にするデータと加算後の連結カウンタ値ＪＣ「０ｘ０１０００００１」とを固定鍵ＦＫを用いて暗号化する。
【０２１６】
（４８）ノードＮ１は、暗号化により得られた暗号化パケットＥＰを、データの宛先であるノードＮ２に送信する。
【０２１７】
（４９）ノードＮ２は、ノードＮ１から送信された暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰから送信元を示す識別子「Ｎ１」を取得し、受信した暗号化パケットＥＰを、固定鍵ＦＫを用いて復号する。そして、ノードＮ２は、復号により得られたパケットから、ノードＮ２を宛先にするデータと連結カウンタ値ＪＣ「０ｘ０１０００００１」とを取得する。
【０２１８】
（５０）ノードＮ２は、連結カウンタ値ＪＣ「０ｘ０１０００００１」を取得すると、取得した送信元を示す識別子「Ｎ１」に関連付けられた受信カウンタ値ＲＣをノードＤＢ３００から抽出する。
【０２１９】
（５１）そして、ノードＮ２は、取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」と、抽出した受信カウンタ値ＲＣ「０ｘ００００１２３０」と、の大小比較を行う。ここで、ノードＮ２は、取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」が、抽出した受信カウンタ値ＲＣ「０ｘ００００１２３０」よりも大きいため、受信した暗号化パケットＥＰが正規パケットであると判断する。
【０２２０】
（５２）ノードＮ２は、正規パケットであると判断されると、ノードＤＢ３００において識別子「Ｎ１」に関連付けられた受信カウンタ値ＲＣ「０ｘ００００１２３０」を、取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」で更新する。
【０２２１】
一方、ノードＮ２は、取得した連結カウンタ値ＪＣが、抽出した受信カウンタ値ＲＣ以下である場合は、受信した暗号化パケットＥＰが不正パケットであると判断する。そして、ノードＮ２は、不正パケットであると判断されると、復号により得られたパケットを廃棄することで、通信の安全性を担保する。
【０２２２】
このように、ノードＮ１は、消去カウンタ値Ｒを上位桁とし、送信カウンタ値Ｓを下位桁として連結した連結カウンタ値ＪＣを保持し、連結カウンタ値ＪＣが消去されると、消去以前の消去カウンタ値Ｒを他ノードＮから取得する。そして、ノードＮ１は、消去以前の消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを上位桁とする新たな連結カウンタ値ＪＣを生成する。
【０２２３】
これにより、過去にノードＮ１により送信された暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣより、ノードＮ１により生成された新たな連結カウンタ値ＪＣが大きい値になる。そのため、ノードＮ１は、他ノードＮが保持している受信カウンタ値ＲＣより大きい値になっている連結カウンタ値ＪＣを、他ノードＮに送信する暗号化パケットＥＰに含むことができる。
【０２２４】
これにより、ノードＮ２は、保持している受信カウンタ値ＲＣより、ノードＮ１から受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣが大きいため、ノードＮ１から受信した暗号化パケットＥＰを正規パケットと判断することができる。そして、ノードＮ１は、他ノードＮに送信する暗号化パケットＥＰが、他ノードＮで不正パケットと判断されないようになるため、アドホックネットワークに復帰することができる。
【０２２５】
また、ノードＮ１は、取得要求を含むパケットを、固定鍵ＦＫを用いて暗号化するため、固定鍵ＦＫを有さない攻撃者による要求パケットの解析を防止することができる。また、ノードＮ１は、取得要求を含むパケットに、近隣ノードＮとの通信ごとに生成した一時的な識別情報になる乱数を含める。これにより、ノードＮ１は、自ノードＮが送信した暗号化パケットＥＰに含めた乱数と受信した暗号化パケットＥＰに含まれる乱数との一致判断により、正規パケットか否かを通信ごとに判断することができる。
【０２２６】
ここで、通信ごとに異なる乱数が生成されるため、前回の取得要求に対する応答として近隣ノードＮが送信した暗号化パケットＥＰを今回の取得要求に対する応答と偽って攻撃者が再送攻撃に使用しても、それぞれの暗号化パケットＥＰに含まれる乱数は不一致になる。そのため、ノードＮ１は、乱数の不一致から、今回の取得要求に対する応答として受信された暗号化パケットＥＰが再送攻撃による不正パケットと判断でき、通信の安全性を担保することができる。
【０２２７】
また、ノードＮ１は、一度使用した乱数に有効期間を設定しておくことで、今回の通信で近隣ノードＮが応答した暗号化パケットＥＰを攻撃者が再送攻撃に利用した場合に、有効期間を過ぎていれば不正パケットと判断でき、通信の安全性を担保することができる。
【０２２８】
（動作例１における連結カウンタ値生成処理の処理内容）
次に、図１４を用いて、図１０〜図１３に示した動作例１における連結カウンタ値生成処理の詳細な処理手順について説明する。連結カウンタ値生成処理は、図１０〜図１３に示したノードＮ１が実行する処理である。ここでは、例としてノードＮ１を実行主体として説明する。
【０２２９】
図１４は、動作例１における連結カウンタ値生成処理の詳細な処理手順を示すフローチャートである。まず、ノードＮ１は、連結カウンタ値ＪＣの消去が検出されたか否かを判定する（ステップＳ１４０１）。ここで、連結カウンタ値ＪＣの消去が検出されていない場合（ステップＳ１４０１：Ｎｏ）、ノードＮ１は、ステップＳ１４０１に戻り、連結カウンタ値ＪＣの消去が検出されるのを待つ。
【０２３０】
一方、連結カウンタ値ＪＣの消去が検出された場合（ステップＳ１４０１：Ｙｅｓ）、ノードＮ１は、一時的な識別情報になる乱数を生成する（ステップＳ１４０２）。次に、ノードＮ１は、送信元になる自ノードＮを示す識別子と、生成した乱数と、送信カウンタ値Ｓの取得要求と、を含むパケットを生成する（ステップＳ１４０３）。
【０２３１】
そして、ノードＮ１は、生成したパケットを固定鍵ＦＫを用いて暗号化する（ステップＳ１４０４）。次に、ＣＰＵ２０１は、暗号化により得られた暗号化パケットＥＰを近隣ノードＮに送信する（ステップＳ１４０５）。
【０２３２】
そして、ノードＮ１は、取得要求に対する応答になる暗号化パケットＥＰを近隣ノードＮから受信したか否かを判定する（ステップＳ１４０６）。ここで、暗号化パケットＥＰを受信していない場合（ステップＳ１４０６：Ｎｏ）、ノードＮ１は、ステップＳ１４０６に戻り、暗号化パケットＥＰの受信を待つ。
【０２３３】
一方、暗号化パケットＥＰを受信した場合（ステップＳ１４０６：Ｙｅｓ）、ノードＮ１は、受信した暗号化パケットＥＰを固定鍵ＦＫを用いて復号する（ステップＳ１４０７）。そして、ノードＮ１は、復号により得られたパケットから乱数を抽出し、抽出した乱数が、ステップＳ１４０２で生成した乱数と一致するか否かを判定する（ステップＳ１４０８）。
【０２３４】
ここで、一致する場合（ステップＳ１４０８：Ｙｅｓ）、ノードＮ１は、復号により得られたパケットから消去カウンタ値Ｒを抽出し、抽出した消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒと送信カウンタ値Ｓの初期値とを連結して連結カウンタ値ＪＣを生成する（ステップＳ１４０９）。そして、ノードＮ１は、生成した連結カウンタ値ＪＣをＲＡＭ２０２に保存して（ステップＳ１４１０）、連結カウンタ値生成処理を終了する。
【０２３５】
一方、一致しない場合（ステップＳ１４０８：Ｎｏ）、ノードＮ１は、受信した暗号化パケットＥＰが不正パケットであると判断して、復号により得られたパケットを廃棄し（ステップＳ１４１１）、連結カウンタ値生成処理を終了する。
【０２３６】
これにより、ノードＮは、連結カウンタ値ＪＣが消去された場合であっても、消去された連結カウンタ値ＪＣより大きい値の新たな連結カウンタ値ＪＣを生成することができる。そして、ノードＮは、送信するパケットが他ノードＮに廃棄されないようになり、アドホックネットワークに復帰できる。
【０２３７】
また、ノードＮは、取得要求を含むパケットを固定鍵ＦＫを用いて暗号化するため、固定鍵ＦＫを有さない攻撃者による要求パケットの解析を防止できる。また、ノードＮは、取得要求を含むパケットに、近隣ノードＮとの通信ごとに生成した一時的な識別情報になる乱数を含める。これにより、ノードＮは、自ノードＮが送信した暗号化パケットＥＰに含めた乱数と受信した暗号化パケットＥＰに含まれる乱数との一致判断により、正規パケットか否かを通信ごとに判断することができる。
【０２３８】
ここで、通信ごとに異なる乱数が生成されるため、前回の取得要求に対する応答として近隣ノードＮが送信した暗号化パケットＥＰを今回の取得要求に対する応答と偽って攻撃者が再送攻撃に使用しても、それぞれの暗号化パケットＥＰに含まれる乱数は不一致になる。そのため、ノードＮは、乱数の不一致から、今回の取得要求に対する応答として受信された暗号化パケットＥＰが再送攻撃による不正パケットと判断でき、通信の安全性を担保することができる。
【０２３９】
また、ノードＮは、一度使用した乱数に有効期間を設定しておくことで、今回の通信で近隣ノードＮが応答した暗号化パケットＥＰを攻撃者が再送攻撃に利用した場合に、有効期間を過ぎていれば不正パケットと判断でき、通信の安全性を担保することができる。
【０２４０】
（ノードＮの連結カウンタ値ＪＣが消去された場合の動作例２）
次に、図１５〜図１８を用いて、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例２について説明する。図１０〜図１３に示した動作例１では、消去カウンタ値Ｒの取得要求を含むパケットを、固定鍵ＦＫを用いて暗号化したが、動作例２では、消去カウンタ値Ｒの取得要求を含むパケットをアクセス鍵ＡＫを用いて暗号化する。これにより、暗号化により得られた消去カウンタ値Ｒの取得要求を含む暗号化パケットＥＰが、固定鍵を用いて暗号化する場合よりセキュアになり、通信の安全性を担保することができる。
【０２４１】
図１５〜図１８は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例２を示す説明図である。なお、図１で説明した箇所と同様の箇所についての説明は省略する。図１５の例では、また、ノードＮ１は、ノードＮ２から受信され、ノードＮ２へ送信するパケットの暗号化に使用されるアクセス鍵ＡＫ２「０ｘ２２２２」を保持している。
【０２４２】
また、ノードＮ１は、連結カウンタ値ＪＣ「０ｘ００００１２３０」を保持している。ノードＮ２は、過去にノードＮ１から受信した暗号化パケットＥＰを復号して得られたパケットから連結カウンタ値ＪＣを抽出し、抽出した連結カウンタ値ＪＣ「０ｘ００００１２３０」を受信カウンタ値ＲＣとして保持している。
【０２４３】
図１５において、停電によりノードＮ１に電力が供給されず、ノードＮ１が保持していた連結カウンタ値ＪＣ「０ｘ００００１２３０」およびアクセス鍵ＡＫ２が消去されてしまったとする。そのため、他ノードＮに送信するパケットに含むべき連結カウンタ値ＪＣが不明になり、ノードＮ１は、他ノードＮにパケットを送信することができない。
【０２４４】
（６１）ここで、ノードＮ１は、停電が回復し電力が供給されると、保持していた連結カウンタ値ＪＣが消去されたことを検出する。このとき、ノードＮ１は、近隣ノードＮからアクセス鍵ＡＫが送信されてくるまで待機する。
【０２４５】
（６２）一方、ノードＮ２は、一定時間ごとにノードＮ２自体が自動的に発生させるアクセス鍵ＡＫ生成イベントをトリガにして、新たなアクセス鍵ＡＫ２「０ｘ６６６６」を生成する。
【０２４６】
（６３）ノードＮ２は、アクセス鍵ＡＫ２を生成すると、送信元を示す識別子「Ｎ２」と、ノードＮ２の連結カウンタ値ＪＣ「０ｘ００００２２２２」と、生成したアクセス鍵ＡＫ２「０ｘ６６６６」と、を含むパケットを生成する。このとき、送信元を示す識別子は、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に含まれる。
【０２４７】
（６４）ノードＮ２は、パケットを生成すると、生成したパケット内の連結カウンタ値ＪＣ「０ｘ００００２２２２」とアクセス鍵ＡＫ２「０ｘ６６６６」とを、固定鍵ＦＫを用いて暗号化する。
【０２４８】
（６５）そして、ノードＮ２は、暗号化により得られた暗号化パケットＥＰを、ノードＮ１を含む近隣ノードＮに送信する。
【０２４９】
（６６）ノードＮ１は、ノードＮ２から送信された暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰから送信元を示す識別子「Ｎ２」を取得し、受信した暗号化パケットＥＰを固定鍵ＦＫを用いて復号する。そして、ノードＮ１は、復号により得られたパケットから、連結カウンタ値ＪＣ「０ｘ００００２２２２」とアクセス鍵ＡＫ２「０ｘ６６６６」とを取得する。
【０２５０】
このとき、停電によりノードＤＢ３００の記憶内容が消去されており、ノードＤＢ３００にノードＮ２についてのレコードが存在しない。
【０２５１】
（６７）そのため、ノードＮ１は、取得した連結カウンタ値ＪＣ「０ｘ００００２２２２」とアクセス鍵ＡＫ２「０ｘ６６６６」とを、取得した識別子「Ｎ２」に関連付けたレコードを、ノードＤＢ３００に追加しておく。
【０２５２】
（６８）ノードＮ１は、ノードＤＢ３００にレコードを追加すると、一時的な識別情報になる乱数を生成する。図１５の例では、ノードＮ１は、乱数として「０ｘ５８１９」を生成する。このとき、ノードＮ１は、生成した乱数「０ｘ５８１９」をＲＡＭ２０２に保持しておく。
【０２５３】
（６９）ノードＮ１は、乱数を生成すると、送信元を示す識別子「Ｎ１」と、消去カウンタ値Ｒの取得要求を示す連結カウンタ値ＪＣとして設定されている「０ｘ００００００００」と、生成した乱数「０ｘ５８１９」と、を含むパケットを生成する。このとき、送信元を示す識別子は、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に含まれる。
【０２５４】
（７０）ノードＮ１は、パケットを生成すると、生成したパケット内の連結カウンタ値ＪＣ「０ｘ００００００００」と乱数「０ｘ５８１９」とを、アクセス鍵ＡＫ２を用いて暗号化する。
【０２５５】
（７１）そして、ノードＮ１は、暗号化により得られた暗号化パケットＥＰをノードＮ２に送信する。次に、図１６に移る。
【０２５６】
（７２）ノードＮ２は、（７１）でノードＮ１から送信された暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰから送信元を示す識別子「Ｎ１」を取得し、受信した暗号化パケットＥＰをアクセス鍵ＡＫ２を用いて復号する。そして、ノードＮ２は、復号により得られたパケットから、連結カウンタ値ＪＣ「０ｘ００００００００」と乱数「０ｘ５８１９」とを取得する。
【０２５７】
（７３）ノードＮ２は、取得した連結カウンタ値ＪＣが、消去カウンタ値Ｒの取得要求を示す連結カウンタ値ＪＣとして設定されている「０ｘ００００００００」であることを検出する。そして、ノードＮ２は、取得した送信元を示す識別子「Ｎ１」に関連付けられた受信カウンタ値ＲＣをノードＤＢ３００から抽出し、抽出した受信カウンタ値ＲＣから消去カウンタ値Ｒ「０ｘ００」を抽出する。
【０２５８】
（７４）ノードＮ２は、消去カウンタ値Ｒを抽出すると、送信元を示す識別子「Ｎ２」と、抽出した消去カウンタ値Ｒ「０ｘ００」と、取得した乱数「０ｘ５８１９」と、を含むパケットを生成する。このとき、送信元を示す識別子は、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に含まれる。
【０２５９】
（７５）ノードＮ２は、生成したパケット内の消去カウンタ値Ｒ「０ｘ００」と乱数「０ｘ５８１９」とを固定鍵ＦＫを用いて暗号化する。
【０２６０】
（７６）ノードＮ２は、暗号化により得られた暗号化パケットＥＰを、取得した識別子「Ｎ１」が示すノードＮ１に送信する。次に、図１７に移る。
【０２６１】
（７７）ノードＮ１は、（７６）でノードＮ２から送信された暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰから送信元を示す識別子「Ｎ２」を取得し、受信した暗号化パケットＥＰを固定鍵ＦＫを用いて復号する。そして、ノードＮ１は、復号により得られたパケットから、消去カウンタ値Ｒ「０ｘ００」と乱数「０ｘ５８１９」とを取得する。
【０２６２】
（７８）ノードＮ１は、乱数を取得すると、取得した乱数と（６８）でＲＡＭ２０２に保持しておいた乱数との一致判断を行う。ここで、ノードＮ１は、取得した乱数「０ｘ５８１９」とＲＡＭ２０２に保持しておいた乱数「０ｘ５８１９」とが一致するため、（７７）で受信した暗号化パケットＥＰは正規パケットであると判断する。
【０２６３】
（７９）ノードＮ１は、正規パケットであると判断されると、連結カウンタ値ＪＣが消去される以前の消去カウンタ値Ｒを示す取得した消去カウンタ値Ｒ「０ｘ００」に、１を加算する。そして、ノードＮ１は、加算後の消去カウンタ値Ｒ「０ｘ０１」と送信カウンタ値Ｓの初期値「０ｘ００００００」とを連結して、連結カウンタ値ＪＣ「０ｘ０１００００００」を生成する。これにより、ノードＮ１は、消去された連結カウンタ値ＪＣの代わりに、新たな連結カウンタ値ＪＣを生成する。
【０２６４】
一方、ノードＮ１は、取得した乱数と（６８）でＲＡＭ２０２に保持しておいた乱数とが一致しない場合は、（７７）で受信した暗号化パケットＥＰは不正パケットであると判断する。そして、ノードＮ１は、不正パケットであると判断されると、復号により得られたパケットを廃棄することで、通信の安全性を担保する。次に、図１８に移る。
【０２６５】
（８０）ノードＮ１は、ノードＮ１のユーザからのノードＮ２を宛先にするデータの入力を受けると、ノードＮ２との暗号化通信を開始する。ここでは、ノードＮ１は、ユーザからのデータの入力をトリガにして暗号化通信を開始したが、ノードＮ１が自動的に発生させたデータ送信イベントをトリガにして暗号化通信を開始してもよい。
【０２６６】
（８１）ノードＮ１は、ノードＮ２を宛先にするデータの入力を受けると、（７９）で生成された新たな連結カウンタ値ＪＣ「０ｘ０１００００００」に１を加算する。
【０２６７】
（８２）ノードＮ１は、送信元を示す識別子「Ｎ１」と、ノードＮ２を宛先にするデータと、加算後の連結カウンタ値ＪＣ「０ｘ０１０００００１」と、を含むパケットを生成する。このとき、送信元を示す識別子は、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に含まれる。
【０２６８】
（８３）ノードＮ１は、パケットを生成すると、データの宛先であるノードＮ２を示す識別子「Ｎ２」に関連付けられたアクセス鍵ＡＫ２「０ｘ６６６６」を、ノードＤＢ３００から取得する。そして、ノードＮ１は、生成したパケット内のノードＮ２を宛先にするデータと加算後の連結カウンタ値ＪＣ「０ｘ０１０００００１」とを、アクセス鍵ＡＫ２を用いて暗号化する。
【０２６９】
（８４）ノードＮ１は、暗号化により得られた暗号化パケットＥＰを、データの宛先であるノードＮ２に送信する。
【０２７０】
（８５）ノードＮ２は、ノードＮ１から送信された暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰから送信元を示す識別子「Ｎ１」を取得し、受信した暗号化パケットＥＰをアクセス鍵ＡＫ２を用いて復号する。そして、ノードＮ２は、復号により得られたパケットから、ノードＮ２を宛先にするデータと連結カウンタ値ＪＣ「０ｘ０１０００００１」とを取得する。
【０２７１】
（８６）ノードＮ２は、連結カウンタ値ＪＣ「０ｘ０１０００００１」を取得すると、取得した送信元を示す識別子「Ｎ１」に関連付けられた受信カウンタ値ＲＣをノードＤＢ３００から抽出する。
【０２７２】
（８７）そして、ノードＮ２は、取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」と、抽出した受信カウンタ値ＲＣ「０ｘ００００１２３０」と、の大小比較を行う。ここで、ノードＮ２は、取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」が、抽出した受信カウンタ値ＲＣ「０ｘ００００１２３０」よりも大きいため、受信した暗号化パケットＥＰが正規パケットであると判断する。
【０２７３】
（８８）ノードＮ２は、正規パケットであると判断されると、ノードＤＢ３００において識別子「Ｎ１」に関連付けられた受信カウンタ値ＲＣ「０ｘ００００１２３０」を、取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」で更新する。
【０２７４】
一方、ノードＮ２は、取得した連結カウンタ値ＪＣが、抽出した受信カウンタ値ＲＣ以下である場合は、受信した暗号化パケットＥＰが不正パケットであると判断する。そして、ノードＮ２は、不正パケットであると判断されると、復号により得られたパケットを廃棄することで、通信の安全性を担保する。
【０２７５】
このように、ノードＮ１は、消去カウンタ値Ｒを上位桁とし、送信カウンタ値Ｓを下位桁として連結した連結カウンタ値ＪＣを保持し、連結カウンタ値ＪＣが消去されると、消去以前の消去カウンタ値Ｒを他ノードＮから取得する。そして、ノードＮ１は、消去以前の消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを上位桁とする新たな連結カウンタ値ＪＣを生成する。
【０２７６】
これにより、過去にノードＮ１により送信された暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣより、ノードＮ１により生成された新たな連結カウンタ値ＪＣが大きい値になる。そのため、ノードＮ１は、他ノードＮが保持している受信カウンタ値ＲＣより大きい値になっている連結カウンタ値ＪＣを、他ノードＮに送信する暗号化パケットＥＰに含むことができる。
【０２７７】
そして、ノードＮ２は、前回受信した暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣを示す受信カウンタ値ＲＣより、今回受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣが大きいため、正規パケットと判断することができる。なお、前回受信した暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣは、受信カウンタ値ＲＣとして保持されている。そして、ノードＮ１は、他ノードＮに送信する暗号化パケットＥＰが、他ノードＮで不正パケットと判断されないようになるため、アドホックネットワークに復帰することができる。
【０２７８】
また、ノードＮ１は、取得要求を含むパケットをアクセス鍵ＡＫを用いて暗号化するため、アクセス鍵ＡＫを有さない攻撃者による要求パケットの解析を防止することができる。また、ノードＮ１は、取得要求を含むパケットに、近隣ノードＮとの通信ごとに生成した一時的な識別情報になる乱数を含める。これにより、ノードＮ１は、自ノードＮが送信した暗号化パケットＥＰに含めた乱数と受信した暗号化パケットＥＰに含まれる乱数との一致判断により、正規パケットか否かを通信ごとに判断することができる。
【０２７９】
ここで、通信ごとに異なる乱数が生成されるため、前回の取得要求に対する応答として近隣ノードＮが送信した暗号化パケットＥＰを今回の取得要求に対する応答と偽って攻撃者が再送攻撃に使用しても、それぞれの暗号化パケットＥＰに含まれる乱数は不一致になる。そのため、ノードＮ１は、乱数の不一致から、今回の取得要求に対する応答として受信された暗号化パケットＥＰが再送攻撃による不正パケットと判断でき、通信の安全性を担保することができる。
【０２８０】
また、ノードＮ１は、一度使用した乱数に有効期間を設定しておくことで、今回の通信で近隣ノードＮが応答した暗号化パケットＥＰを攻撃者が再送攻撃に利用した場合に、有効期間を過ぎていれば不正パケットと判断でき、通信の安全性を担保することができる。
【０２８１】
（動作例２における連結カウンタ値生成処理の処理内容）
次に、図１９および図２０を用いて、図１５〜図１８に示した動作例２における連結カウンタ値生成処理の詳細な処理手順について説明する。連結カウンタ値生成処理は、図１５〜図１８に示したノードＮ１が実行する処理である。ここでは、例としてノードＮ１を実行主体として説明する。
【０２８２】
図１９および図２０は、動作例２における連結カウンタ値生成処理の詳細な処理手順を示すフローチャートである。まず、ノードＮ１は、連結カウンタ値ＪＣの消去が検出されたか否かを判定する（ステップＳ１９０１）。ここで、連結カウンタ値ＪＣの消去が検出されていない場合（ステップＳ１９０１：Ｎｏ）、ノードＮ１は、ステップＳ１９０１に戻り、連結カウンタ値ＪＣの消去が検出されるのを待つ。
【０２８３】
一方、連結カウンタ値ＪＣの消去が検出された場合（ステップＳ１９０１：Ｙｅｓ）、ノードＮ１は、アクセス鍵ＡＫを含む暗号化パケットＥＰを近隣ノードＮから受信したか否かを判定する（ステップＳ１９０２）。ここで、アクセス鍵ＡＫを含む暗号化パケットＥＰを受信していない場合（ステップＳ１９０２：Ｎｏ）、ノードＮ１は、ステップＳ１９０２に戻り、アクセス鍵ＡＫを含む暗号化パケットＥＰの受信を待つ。
【０２８４】
一方、アクセス鍵ＡＫを含む暗号化パケットＥＰを受信した場合（ステップＳ１９０２：Ｙｅｓ）、ノードＮ１は、暗号化パケットＥＰ内の暗号化されない部分（例えば、パケットのヘッダ部分）から、送信元を示す識別子を取得する（ステップＳ１９０３）。
【０２８５】
そして、ノードＮ１は、受信した暗号化パケットＥＰを固定鍵ＦＫを用いて復号する（ステップＳ１９０４）。次に、ノードＮ１は、復号により得られたパケットからアクセス鍵ＡＫを抽出し、抽出したアクセス鍵ＡＫと取得した送信元を示す識別子と関連付けたレコードを、ノードＤＢ３００に追加する（ステップＳ１９０５）。
【０２８６】
そして、ノードＮ１は、一時的な識別情報になる乱数を生成する（ステップＳ１９０６）。次に、ノードＮ１は、送信元になる自ノードＮを示す識別子と、生成した乱数と、送信カウンタ値Ｓの取得要求と、を含むパケットを生成する（ステップＳ１９０７）。
【０２８７】
そして、ノードＮ１は、生成したパケットを、ステップＳ１９０５で抽出されたアクセス鍵ＡＫを用いて暗号化する（ステップＳ１９０８）。次に、ＣＰＵ２０１は、暗号化により得られた暗号化パケットＥＰを、ステップＳ１９０３で取得された識別子が示すノードＮに送信する（ステップＳ１９０９）。そして、ノードＮ１は、図２０のステップＳ２００１に移行する。
【０２８８】
図２０において、ノードＮ１は、取得要求に対する応答になる暗号化パケットＥＰを、ステップＳ１９０３で取得された識別子が示すノードＮから受信したか否かを判定する（ステップＳ２００１）。ここで、暗号化パケットＥＰを受信していない場合（ステップＳ２００１：Ｎｏ）、ノードＮ１は、ステップＳ２００１に戻り、暗号化パケットＥＰの受信を待つ。
【０２８９】
一方、暗号化パケットＥＰを受信した場合（ステップＳ２００１：Ｙｅｓ）、ノードＮ１は、暗号化パケットＥＰ内の暗号化されない部分（例えば、パケットのヘッダ部分）から、送信元を示す識別子を取得する（ステップＳ２００２）。
【０２９０】
次に、ノードＮ１は、受信した暗号化パケットＥＰを固定鍵ＦＫを用いて復号する（ステップＳ２００３）。そしてノードＮ１は、復号により得られたパケットから乱数を抽出し、抽出した乱数が、ステップＳ１９０６で生成した乱数と一致するか否かを判定する（ステップＳ２００４）。
【０２９１】
ここで、一致する場合（ステップＳ２００４：Ｙｅｓ）、ノードＮ１は、復号により得られたパケットから消去カウンタ値Ｒを抽出し、抽出した消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒと送信カウンタ値Ｓの初期値とを連結して連結カウンタ値ＪＣを生成する（ステップＳ２００５）。そして、ノードＮ１は、生成した連結カウンタ値ＪＣをＲＡＭ２０２に保存して（ステップＳ２００６）、連結カウンタ値生成処理を終了する。
【０２９２】
一方、一致しない場合（ステップＳ２００４：Ｎｏ）、ノードＮ１は、受信した暗号化パケットＥＰが不正パケットであると判断して、復号により得られたパケットを廃棄し（ステップＳ２００７）、連結カウンタ値生成処理を終了する。
【０２９３】
これにより、ノードＮは、連結カウンタ値ＪＣが消去された場合であっても、消去された連結カウンタ値ＪＣより大きい値の新たな連結カウンタ値ＪＣを生成することができる。そして、ノードＮは、送信するパケットが他ノードＮに廃棄されないようになり、アドホックネットワークに復帰できる。
【０２９４】
また、ノードＮは、取得要求を含むパケットをアクセス鍵ＡＫを用いて暗号化するため、アクセス鍵ＡＫを有さない攻撃者による要求パケットの解析を防止することができる。また、ノードＮは、取得要求を含むパケットに、近隣ノードＮとの通信ごとに生成した一時的な識別情報になる乱数を含める。これにより、ノードＮは、自ノードＮが送信した暗号化パケットＥＰに含めた乱数と受信した暗号化パケットＥＰに含まれる乱数との一致判断により、正規パケットか否かを通信ごとに判断することができる。
【０２９５】
ここで、通信ごとに異なる乱数が生成されるため、前回の取得要求に対する応答として近隣ノードＮが送信した暗号化パケットＥＰを今回の取得要求に対する応答と偽って攻撃者が再送攻撃に使用しても、それぞれの暗号化パケットＥＰに含まれる乱数は不一致になる。そのため、ノードＮは、乱数の不一致から、今回の取得要求に対する応答として受信された暗号化パケットＥＰが再送攻撃による不正パケットと判断でき、通信の安全性を担保することができる。
【０２９６】
また、ノードＮは、一度使用した乱数に有効期間を設定しておくことで、今回の通信で近隣ノードＮが応答した暗号化パケットＥＰを攻撃者が再送攻撃に利用した場合に、有効期間を過ぎていれば不正パケットと判断でき、通信の安全性を担保することができる。
【０２９７】
（ノードＮの連結カウンタ値ＪＣが消去された場合の動作例３）
次に、図２１および図２２を用いて、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例３について説明する。動作例１および動作例２は自ノードＮに電力供給されなくなると連結カウンタ値ＪＣとともに消去カウンタ値Ｒも消去されたが、動作例３は自ノードＮに電力供給されない状態でも消去されないように不揮発性メモリに消去カウンタ値Ｒを保持しておく。これにより、他ノードＮから消去カウンタ値Ｒを取得しないため、再送攻撃の危険性を低減し、通信の安全性を担保することができる。
【０２９８】
図２１および図２２は、ノードＮの連結カウンタ値ＪＣが消去された場合の動作例３を示す説明図である。なお、図１で説明した箇所と同様の箇所についての説明は省略する。図２１において、ノードＮ１は、ノードＮ２から受信され、ノードＮ２へ送信するパケットの暗号化に使用されるアクセス鍵ＡＫ２「０ｘ２２２２」を保持している。
【０２９９】
また、ノードＮ１は、連結カウンタ値ＪＣ「０ｘ００００１２３０」を保持している。ここで、連結カウンタ値ＪＣは、頻繁に書き換えが行われるため、揮発性であるＲＡＭ２０２に保持されている。ノードＮ１は、連結カウンタ値ＪＣとは別に、消去カウンタ値Ｒ「０ｘ００」を保持している。ここで、消去カウンタ値Ｒは、不揮発性であるフラッシュメモリ２０３に保持されている。
【０３００】
ノードＮ２は、過去にノードＮ１から受信した暗号化パケットＥＰを復号して得られたパケットから連結カウンタ値ＪＣを抽出し、抽出した連結カウンタ値ＪＣ「０ｘ００００１２３０」を受信カウンタ値ＲＣとして保持している。
【０３０１】
図２１において、停電によりノードＮ１に電力が供給されず、ノードＮ１が保持していた連結カウンタ値ＪＣ「０ｘ００００１２３０」およびアクセス鍵ＡＫ２が消去されてしまったとする。そのため、他ノードＮに送信するパケットに含むべき連結カウンタ値ＪＣが不明になり、ノードＮ１は、他ノードＮにパケットを送信することができない。
【０３０２】
（９１）ここで、ノードＮ１は、停電が回復し電力が供給されると、保持していた連結カウンタ値ＪＣが消去されたことを検出する。
【０３０３】
（９２）ノードＮ１は、連結カウンタ値ＪＣが消去されたことを検出すると、フラッシュメモリ２０３に保持されている消去カウンタ値Ｒ「０ｘ００」に１を加算する。
【０３０４】
（９３）そして、ノードＮ１は、フラッシュメモリ２０３に保持されている加算後の消去カウンタ値Ｒ「０ｘ０１」と送信カウンタ値Ｓの初期値「０ｘ００００００」とを連結して、連結カウンタ値ＪＣ「０ｘ０１００００００」を生成する。これにより、ノードＮ１は、消去された連結カウンタ値ＪＣの代わりに、新たな連結カウンタ値ＪＣを生成する。次に、図２２に移る。
【０３０５】
（９４）ノードＮ１は、ノードＮ１のユーザからのノードＮ２を宛先にするデータの入力を受けると、ノードＮ２との暗号化通信を開始する。ここでは、ノードＮ１は、ユーザからのデータの入力をトリガにして暗号化通信を開始したが、ノードＮ１が自動的に発生させたデータ送信イベントをトリガにして暗号化通信を開始してもよい。
【０３０６】
（９５）ノードＮ１は、ノードＮ２を宛先にするデータの入力を受けると、（９３）で生成された新たな連結カウンタ値ＪＣ「０ｘ０１００００００」に１を加算する。
【０３０７】
（９６）ノードＮ１は、送信元を示す識別子「Ｎ１」と、ノードＮ２を宛先にするデータと、加算後の連結カウンタ値ＪＣ「０ｘ０１０００００１」と、を含むパケットを生成する。このとき、送信元を示す識別子は、パケット内の暗号化されない部分（例えば、パケットのヘッダ部分）に含まれる。
【０３０８】
（９７）ノードＮ１は、パケットを生成すると、生成したパケット内のノードＮ２を宛先にするデータと加算後の連結カウンタ値ＪＣ「０ｘ０１０００００１」とを固定鍵ＦＫを用いて暗号化する。
【０３０９】
（９８）ノードＮ１は、暗号化により得られた暗号化パケットＥＰを、データの宛先であるノードＮ２に送信する。
【０３１０】
（９９）ノードＮ２は、ノードＮ１から送信された暗号化パケットＥＰを受信すると、受信した暗号化パケットＥＰから送信元を示す識別子「Ｎ１」を取得し、受信した暗号化パケットＥＰを、固定鍵ＦＫを用いて復号する。そして、ノードＮ２は、復号により得られたパケットから、ノードＮ２を宛先にするデータと連結カウンタ値ＪＣ「０ｘ０１０００００１」とを取得する。
【０３１１】
（１００）ノードＮ２は、連結カウンタ値ＪＣ「０ｘ０１０００００１」を取得すると、取得した送信元を示す識別子「Ｎ１」に関連付けられた受信カウンタ値ＲＣをノードＤＢ３００から抽出する。
【０３１２】
（１０１）そして、ノードＮ２は、取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」と、抽出した受信カウンタ値ＲＣ「０ｘ００００１２３０」と、の大小比較を行う。ここで、ノードＮ２は、取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」が、抽出した受信カウンタ値ＲＣ「０ｘ００００１２３０」よりも大きいため、受信した暗号化パケットＥＰが正規パケットであると判断する。
【０３１３】
（１０２）ノードＮ２は、正規パケットであると判断されると、ノードＤＢ３００において識別子「Ｎ１」に関連付けられた受信カウンタ値ＲＣ「０ｘ００００１２３０」を、取得した連結カウンタ値ＪＣ「０ｘ０１０００００１」で更新する。
【０３１４】
一方、ノードＮ２は、取得した連結カウンタ値ＪＣが、抽出した受信カウンタ値ＲＣ以下である場合は、受信した暗号化パケットＥＰが不正パケットであると判断する。そして、ノードＮ２は、不正パケットであると判断されると、復号により得られたパケットを廃棄することで、通信の安全性を担保する。
【０３１５】
このように、ノードＮ１は、揮発性メモリ（例えばＲＡＭ２０２）に連結カウンタ値ＪＣを保持しておくことで、送信時の連結カウンタ値ＪＣの読み出し処理や、受信時の連結カウンタ値ＪＣの更新処理を高速に実行できる。
【０３１６】
また、ノードＮ１は、不揮発性メモリ（例えばフラッシュメモリ２０３）に、書き換え頻度の低い消去カウンタ値Ｒのみを、連結カウンタ値ＪＣとは別に保持しておく。ノードＮ１は、連結カウンタ値ＪＣが消去されると、消去以前の消去カウンタ値Ｒを不揮発性メモリから取得する。そして、ノードＮ１は、消去以前の消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを上位桁とする新たな連結カウンタ値ＪＣを生成する。これにより、過去にノードＮ１により送信された暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣより、ノードＮ１により生成された新たな連結カウンタ値ＪＣが大きい値になる。そのため、ノードＮ１は、他ノードＮが保持している受信カウンタ値ＲＣより大きい値になっている連結カウンタ値ＪＣを、他ノードＮに送信する暗号化パケットＥＰに含むことができる。
【０３１７】
これにより、ノードＮ２は、保持している受信カウンタ値ＲＣより、ノードＮ１から受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣが大きいため、ノードＮ１から受信した暗号化パケットＥＰを正規パケットと判断することができる。そして、ノードＮ１は、他ノードＮに送信する暗号化パケットＥＰが、他ノードＮで不正パケットと判断されないようになるため、アドホックネットワークに復帰することができる。また、他ノードＮから消去カウンタ値Ｒを取得しないため、再送攻撃の危険性を低減し、通信の安全性を担保することができる。
【０３１８】
（動作例３における連結カウンタ値生成処理の処理内容）
次に、図２３を用いて、図２１および図２２に示した動作例３における連結カウンタ値生成処理の詳細な処理手順を示すフローチャートである。連結カウンタ値生成処理は、図２１および図２２に示したノードＮ１が実行する処理である。ここでは、例としてノードＮ１を実行主体として説明する。
【０３１９】
図２３は、動作例３における連結カウンタ値生成処理の詳細な処理手順を示すフローチャートである。まず、ノードＮ１は、連結カウンタ値ＪＣの消去が検出されたか否かを判定する（ステップＳ２３０１）。連結カウンタ値ＪＣの消去が検出されていない場合（ステップＳ２３０１：Ｎｏ）、ノードＮ１は、ステップＳ２３０１に戻り、連結カウンタ値ＪＣの消去が検出されるのを待つ。
【０３２０】
一方、連結カウンタ値ＪＣの消去が検出された場合（ステップＳ２３０１：Ｙｅｓ）、ノードＮ１は、不揮発性メモリから消去カウンタ値Ｒを読み出す（ステップＳ２３０２）。そして、ノードＮ１は、読み出した消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒと送信カウンタ値Ｓの初期値とを連結した連結カウンタ値ＪＣを生成する（ステップＳ２３０３）。
【０３２１】
そして、ノードＮ１は、生成した連結カウンタ値ＪＣをＲＡＭ２０２に保存して（ステップＳ２３０４）、連結カウンタ値生成処理を終了する。これにより、ノードＮは、連結カウンタ値ＪＣが消去された場合であっても、消去された連結カウンタ値ＪＣより大きい値の新たな連結カウンタ値ＪＣを生成することができる。そして、ノードＮは、送信するパケットが他ノードＮに廃棄されないようになり、アドホックネットワークに復帰できる。
【０３２２】
以上説明したように、ノードＮは、連結カウンタ値ＪＣを保持し、連結カウンタ値ＪＣが消去されると、消去以前の消去カウンタ値Ｒを他ノードＮから取得する。そして、ノードＮは、消去以前の消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを上位桁とする新たな連結カウンタ値ＪＣを生成する。これにより、過去にノードＮにより送信された暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣより、新たな連結カウンタ値ＪＣが大きい値になる。そのため、ノードＮは、他ノードＮが保持している受信カウンタ値ＲＣより大きい値になっている連結カウンタ値ＪＣを、他ノードＮに送信する暗号化パケットＥＰに含むことができる。
【０３２３】
これにより、他ノードＮは、保持している受信カウンタ値ＲＣより、ノードＮから受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣが大きいため、ノードＮから受信した暗号化パケットＥＰを正規パケットと判断することができる。そして、ノードＮは、他ノードＮに送信する暗号化パケットＥＰが、他ノードＮで不正パケットと判断されないようになるため、アドホックネットワークに復帰することができる。このように、連結カウンタ値ＪＣが復旧されるため、時刻同期パケットによる同期が不要になり、アドホックネットワーク内の通信負荷の低減を図ることができる。
【０３２４】
また、ノードＮは、取得要求を含むパケットを固定鍵ＦＫを用いて暗号化するため、固定鍵ＦＫを有さない攻撃者による要求パケットの解析を防止することができる。また、ノードＮは、取得要求を含むパケットに、近隣ノードＮとの通信ごとに生成した一時的な識別情報になる乱数を含める。これにより、ノードＮは、自ノードＮが送信した暗号化パケットＥＰに含めた乱数と受信した暗号化パケットＥＰに含まれる乱数との一致判断により、正規パケットか否かを通信ごとに判断することができる。
【０３２５】
ここで、通信ごとに異なる乱数が生成されるため、前回の取得要求に対する応答として近隣ノードＮが送信した暗号化パケットＥＰを今回の取得要求に対する応答と偽って攻撃者が再送攻撃に使用しても、それぞれの暗号化パケットＥＰに含まれる乱数は不一致になる。そのため、ノードＮは、乱数の不一致から、今回の取得要求に対する応答として受信された暗号化パケットＥＰが再送攻撃による不正パケットと判断でき、通信の安全性を担保することができる。
【０３２６】
また、ノードＮは、連結カウンタ値ＪＣを保持し、連結カウンタ値ＪＣが消去されると、消去以前の消去カウンタ値Ｒを他ノードＮから取得する。そして、ノードＮは、消去以前の消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを上位桁とする新たな連結カウンタ値ＪＣを生成する。これにより、過去にノードＮにより送信された暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣより、ノードＮにより生成された新たな連結カウンタ値ＪＣが大きい値になる。そのため、ノードＮは、他ノードＮが保持している受信カウンタ値ＲＣより大きい値になっている連結カウンタ値ＪＣを、他ノードＮに送信する暗号化パケットＥＰに含むことができる。
【０３２７】
これにより、他ノードＮは、保持している受信カウンタ値ＲＣより、ノードＮから受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣが大きいため、ノードＮから受信した暗号化パケットＥＰを正規パケットと判断することができる。そして、ノードＮは、他ノードＮに送信する暗号化パケットＥＰが、他ノードＮで不正パケットと判断されないようになるため、アドホックネットワークに復帰することができる。
【０３２８】
また、ノードＮは、取得要求を含むパケットをアクセス鍵ＡＫを用いて暗号化するため、アクセス鍵ＡＫを有さない攻撃者による要求パケットの解析を防止できる。また、ノードＮは、取得要求を含むパケットに、近隣ノードＮとの通信ごとに生成した一時的な識別情報になる乱数を含める。これにより、ノードＮは、自ノードＮが送信した暗号化パケットＥＰに含めた乱数と受信した暗号化パケットＥＰに含まれる乱数との一致判断により、正規パケットか否かを通信ごとに判断することができる。
【０３２９】
ここで、通信ごとに異なる乱数が生成されるため、前回の取得要求に対する応答として近隣ノードＮが送信した暗号化パケットＥＰを今回の取得要求に対する応答と偽って攻撃者が再送攻撃に使用しても、それぞれの暗号化パケットＥＰに含まれる乱数は不一致になる。そのため、ノードＮは、乱数の不一致から、今回の取得要求に対する応答として受信された暗号化パケットＥＰが再送攻撃による不正パケットと判断でき、通信の安全性を担保することができる。
【０３３０】
また、ノードＮは、揮発性メモリ（例えばＲＡＭ２０２）に連結カウンタ値ＪＣを保持しておくことで、送信時の連結カウンタ値ＪＣの読み出し処理や、受信時の連結カウンタ値ＪＣの更新処理を高速に実行できる。また、ノードＮは、不揮発性メモリ（例えばフラッシュメモリ２０３）に、書き換え頻度の低い消去カウンタ値Ｒのみを、連結カウンタ値ＪＣとは別に保持しておく。
【０３３１】
ノードＮは、連結カウンタ値ＪＣが消去されると、消去以前の消去カウンタ値Ｒを不揮発性メモリから取得する。そして、ノードＮは、消去以前の消去カウンタ値Ｒに１を加算した加算後の消去カウンタ値Ｒを上位桁とする新たな連結カウンタ値ＪＣを生成する。これにより、過去にノードＮにより送信された暗号化パケットＥＰに含まれていた連結カウンタ値ＪＣより、ノードＮにより生成された新たな連結カウンタ値ＪＣが大きい値になる。そのため、ノードＮは、他ノードＮが保持している受信カウンタ値ＲＣより大きい値になっている連結カウンタ値ＪＣを、他ノードＮに送信する暗号化パケットＥＰに含むことができる。
【０３３２】
これにより、他ノードＮは、保持している受信カウンタ値ＲＣより、ノードＮから受信した暗号化パケットＥＰに含まれる連結カウンタ値ＪＣが大きいため、ノードＮから受信した暗号化パケットＥＰを正規パケットと判断することができる。そして、ノードＮは、他ノードＮに送信する暗号化パケットＥＰが、他ノードＮで不正パケットと判断されないようになるため、アドホックネットワークに復帰することができる。また、他ノードＮから消去カウンタ値Ｒを取得しないため、再送攻撃の危険性を低減し、通信の安全性を担保することができる。
【０３３３】
なお、本実施の形態で説明した通信方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本通信プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本通信プログラムは、インターネット等のネットワークを介して配布してもよい。
【０３３４】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０３３５】
（付記１）アドホックネットワーク内のノードであって、
自ノードでの消去回数を示す消去カウンタ値を上位桁とし前記自ノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記データおよび前記更新手段による更新後の連結カウンタ値を前記他ノードに送信する送信手段と、
前記記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記消去カウンタ値の取得要求を前記アドホックネットワークに配信する配信手段と、
前記配信手段によって前記取得要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値を受信する受信手段と、
前記受信手段によって受信された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記記憶手段に保存する保存手段と、
を備えることを特徴とするノード。
【０３３６】
（付記２）アドホックネットワーク内のノードであって、
自ノードでの消去回数を示す消去カウンタ値を上位桁とし前記自ノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記データおよび前記更新手段による更新後の連結カウンタ値を前記他ノードに送信する送信手段と、
前記記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記消去カウンタ値の更新要求を前記アドホックネットワークに配信する配信手段と、
前記配信手段によって前記更新要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値に１加算された加算後の消去カウンタ値を受信する受信手段と、
前記受信手段によって受信された加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記記憶手段に保存する保存手段と、
を備えることを特徴とするノード。
【０３３７】
（付記３）アドホックネットワーク内のノードであって、
自ノードでの消去回数を示す消去カウンタ値を上位桁とし前記自ノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する揮発性の第１の記憶手段と、
前記消去カウンタ値を記憶する不揮発性の第２の記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記第１の記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記データおよび前記更新手段による更新後の連結カウンタ値を前記他ノードに送信する送信手段と、
前記第１の記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記第２の記憶手段から前記消去カウンタ値を抽出する抽出手段と、
前記抽出手段によって抽出された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記第１の記憶手段に保存するとともに、前記第２の記憶手段に記憶されている前記消去カウンタ値に対し前記加算後の消去カウンタ値を上書き保存する保存手段と、
を備えることを特徴とするノード。
【０３３８】
（付記４）自ノードおよび前記他ノードが有する共通鍵を用いて、自ノード固有の第１の識別情報を含む前記取得要求を暗号化する暗号化手段と、
前記共通鍵を用いて暗号化されたデータを、前記共通鍵を用いて復号する復号手段と、を備え、
前記配信手段は、
前記暗号化手段によって暗号化された前記取得要求を前記アドホックネットワークに配信し、
前記受信手段は、
前記共通鍵を用いて暗号化された前記消去カウンタ値と前記共通鍵を用いて暗号化された第２の識別情報とを、前記アドホックネットワークから受信し、
前記復号手段は、
前記受信手段によって受信された暗号化された前記消去カウンタ値と暗号化された前記第２の識別情報を、前記共通鍵を用いて復号し、
前記生成手段は、
前記第１の識別情報と前記復号手段によって復号された前記第２の識別情報とが一致した場合に、前記復号手段によって復号された前記消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成することを特徴とする付記１に記載のノード。
【０３３９】
（付記５）自ノードおよび前記他ノードが有する共通鍵を用いて、自ノード固有の第１の識別情報を含む前記更新要求を暗号化する暗号化手段と、
前記共通鍵を用いて暗号化されたデータを、前記共通鍵を用いて復号する復号手段と、を備え、
前記配信手段は、
前記暗号化手段によって暗号化された前記更新要求を前記アドホックネットワークに配信し、
前記受信手段は、
前記共通鍵を用いて暗号化された前記加算後の消去カウンタ値と前記共通鍵を用いて暗号化された第２の識別情報とを、前記アドホックネットワークから受信し、
前記復号手段は、
前記受信手段によって受信された暗号化された前記加算後の消去カウンタ値と暗号化された前記第２の識別情報を、前記共通鍵を用いて復号し、
前記生成手段は、
前記第１の識別情報と前記復号手段によって復号された前記第２の識別情報とが一致した場合に、前記復号手段によって復号された前記加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成することを特徴とする付記２に記載のノード。
【０３４０】
（付記６）前記第１の識別情報は乱数であることを特徴とする付記４または５に記載のノード。
【０３４１】
（付記７）アドホックネットワーク内のノードであって、
他ノードでの消去回数を示す消去カウンタ値を上位桁とし前記他ノードからの送信回数を示す送信カウンタ値を下位桁とする第１の連結カウンタ値を、前記他ノードから受信する第１の受信手段と、
前記第１の受信手段によって受信された連結カウンタ値を記憶装置に保存する第１の保存手段と、
第２の連結カウンタ値を前記他ノードから受信する第２の受信手段と、
前記第２の受信手段によって受信された第２の連結カウンタ値が前記第１の連結カウンタ値よりも大きいか否かを判断する判断手段と、
前記判断手段によって大きいと判断された場合、前記第１の連結カウンタ値に前記第２の連結カウンタ値を上書保存する第２の保存手段と、
を備えることを特徴とするノード。
【０３４２】
（付記８）前記他ノードから前記消去カウンタ値の取得要求を受信する第３の受信手段と、
前記第３の受信手段によって前記取得要求が受信された場合、前記記憶装置に記憶されている前記連結カウンタ値の中の消去カウンタ値を抽出する抽出手段と、
前記抽出手段によって抽出された消去カウンタ値を前記他ノードに送信する送信手段と、
を備えることを特徴とする付記７に記載のノード。
【０３４３】
（付記９）前記他ノードから前記消去カウンタ値の更新要求を受信する第３の受信手段と、
前記第３の受信手段によって前記更新要求が受信された場合、前記記憶装置に記憶されている前記連結カウンタ値の中の消去カウンタ値を抽出する抽出手段と、
前記抽出手段によって抽出された消去カウンタ値に１加算した加算後の消去カウンタ値を前記他ノードに送信する送信手段と、
を備えることを特徴とする付記７に記載のノード。
【０３４４】
（付記１０）前記判断手段によって大きくないと判断された場合、前記第２の連結カウンタ値とともに受信されたデータを廃棄する廃棄手段を備えることを特徴とする付記７〜９のいずれか一つに記載のノード。
【０３４５】
（付記１１）アドホックネットワークを構成するノードにおける通信方法であって、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記ノードでの消去回数を示す消去カウンタ値を上位桁とし自ノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する記憶手段に記憶されている連結カウンタ値のうち、前記送信カウンタ値を１加算し、
前記データおよび加算後の連結カウンタ値を前記他ノードに送信し、
前記記憶手段での前記連結カウンタ値の消去を検出し、
消去が検出された場合、前記消去カウンタ値の取得要求を前記アドホックネットワークに配信し、
前記取得要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値を受信し、
受信された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、
生成された連結カウンタ値を前記記憶手段に保存する、
ことを特徴とする通信方法。
【０３４６】
（付記１２）アドホックネットワークを構成するノードにおける通信方法であって、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記ノードでの消去回数を示す消去カウンタ値を上位桁とし自ノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する記憶手段に記憶されている連結カウンタ値のうち、前記送信カウンタ値を１加算し、
前記データおよび加算後の連結カウンタ値を前記他ノードに送信し、
前記記憶手段での前記連結カウンタ値の消去を検出し、
消去が検出された場合、前記消去カウンタ値の更新要求を前記アドホックネットワークに配信し、
前記更新要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値に１加算された加算後の消去カウンタ値を受信し、
受信された加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、
生成された連結カウンタ値を前記記憶手段に保存する、
ことを特徴とする通信方法。
【０３４７】
（付記１３）アドホックネットワークを構成するノードにおける通信方法であって、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記ノードでの消去回数を示す消去カウンタ値を上位桁とし自ノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する揮発性の第１の記憶手段に記憶されている連結カウンタ値のうち、前記送信カウンタ値を１加算し、
前記データおよび加算後の連結カウンタ値を前記他ノードに送信し、
前記第１の記憶手段での前記連結カウンタ値の消去を検出し、
消去が検出された場合、前記消去カウンタ値を記憶する不揮発性の第２の記憶手段から前記消去カウンタ値を抽出し、
抽出された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成し、
生成された連結カウンタ値を前記第１の記憶手段に保存するとともに、前記第２の記憶手段に記憶されている前記消去カウンタ値に対し前記加算後の消去カウンタ値を上書き保存する、
ことを特徴とする通信方法。
【０３４８】
（付記１４）アドホックネットワークを構成するノードにおける通信方法であって、
他ノードでの消去回数を示す消去カウンタ値を上位桁とし前記他ノードからの送信回数を示す送信カウンタ値を下位桁とする第１の連結カウンタ値を、前記他ノードから受信し、
受信された連結カウンタ値を記憶装置に保存し、
第２の連結カウンタ値を前記他ノードから受信し、
前記第２の連結カウンタ値が前記第１の連結カウンタ値よりも大きいか否かを判断し、
大きいと判断された場合、前記第１の連結カウンタ値に前記第２の連結カウンタ値を上書保存する、
ことを特徴とする通信方法。
【０３４９】
（付記１５）アドホックネットワーク内の第１のノードと第２のノードとが通信するシステムであって、
前記第１のノードは、
前記第１のノードでの消去回数を示す消去カウンタ値を上位桁とし前記第１のノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記第２のノードを宛先にする第１のデータおよび前記更新手段による更新後の第１の連結カウンタ値を前記第２のノードに送信する第１の送信手段と、
前記記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記消去カウンタ値の取得要求を前記アドホックネットワークに配信する配信手段と、
前記配信手段によって前記取得要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値を受信する応答受信手段と、
前記応答受信手段によって受信された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記記憶手段に保存する生成値保存手段と、
前記生成値保存手段によって保存された後に、前記第２のノードを宛先にする第２のデータおよび前記記憶手段に記憶されている最新の連結カウンタ値について前記更新手段によって更新された第２の連結カウンタ値を、前記第２のノードに送信する第２の送信手段と、を備え、
前記第２のノードは、
前記第１の連結カウンタ値を、前記第１のノードから受信する第１の受信手段と、
前記第１の受信手段によって受信された第１の連結カウンタ値を記憶装置に保存する第１の保存手段と、
前記第２の連結カウンタ値を、前記第１のノードから受信する第２の受信手段と、
前記第２の受信手段によって受信された第２の連結カウンタ値が前記第１の連結カウンタ値よりも大きいか否かを判断する判断手段と、
前記判断手段によって大きいと判断された場合、前記第１の連結カウンタ値を前記第２の連結カウンタ値に上書保存する第２の保存手段と、
を備えることを特徴とする通信システム。
【０３５０】
（付記１６）アドホックネットワーク内の第１のノードと第２のノードとが通信するシステムであって、
前記第１のノードは、
前記第１のノードでの消去回数を示す消去カウンタ値を上位桁とし前記第１のノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記第２のノードを宛先にする第１のデータおよび前記更新手段による更新後の第１の連結カウンタ値を前記第２のノードに送信する第１の送信手段と、
前記記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記消去カウンタ値の更新要求を前記アドホックネットワークに配信する配信手段と、
前記配信手段によって前記更新要求が配信された結果、前記アドホックネットワークから前記消去カウンタ値に１加算された加算後の消去カウンタ値を受信する応答受信手段と、
前記応答受信手段によって受信された加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記記憶手段に保存する生成値保存手段と、
前記生成値保存手段によって保存された後に、前記第２のノードを宛先にする第２のデータおよび前記記憶手段に記憶されている最新の連結カウンタ値について前記更新手段によって更新された第２の連結カウンタ値を前記第２のノードに送信する第２の送信手段と、を備え、
前記第２のノードは、
前記第１の連結カウンタ値を、前記第１のノードから受信する第１の受信手段と、
前記第１の受信手段によって受信された第１の連結カウンタ値を記憶装置に保存する第１の保存手段と、
前記第２の連結カウンタ値を、前記第１のノードから受信する第２の受信手段と、
前記第２の受信手段によって受信された第２の連結カウンタ値が前記第１の連結カウンタ値よりも大きいか否かを判断する判断手段と、
前記判断手段によって大きいと判断された場合、前記第１の連結カウンタ値を前記第２の連結カウンタ値に上書保存する第２の保存手段と、
を備えることを特徴とする通信システム。
【０３５１】
（付記１７）アドホックネットワーク内の第１のノードと第２のノードとが通信するシステムであって、
前記第１のノードは、
前記第１のノードでの消去回数を示す消去カウンタ値を上位桁とし前記第１のノードからの送信回数を示す送信カウンタ値を下位桁とする連結カウンタ値を記憶する揮発性の第１の記憶手段と、
前記消去カウンタ値を記憶する不揮発性の第２の記憶手段と、
前記アドホックネットワーク内の他ノードにデータを送信する場合、前記第１の記憶手段に記憶されている連結カウンタ値のうち前記送信カウンタ値を１加算する更新手段と、
前記第２のノードを宛先にする第１のデータおよび前記更新手段による更新後の第１の連結カウンタ値を前記第２のノードに送信する第１の送信手段と、
前記第１の記憶手段での前記連結カウンタ値の消去を検出する検出手段と、
前記検出手段によって消去が検出された場合、前記第２の記憶手段から前記消去カウンタ値を抽出する抽出手段と、
前記抽出手段によって抽出された消去カウンタ値に１加算した加算後の消去カウンタ値を上位桁とし前記消去により送信回数が０になったことを示す消去後の送信カウンタ値を下位桁とする連結カウンタ値を生成する生成手段と、
前記生成手段によって生成された連結カウンタ値を前記第１の記憶手段に保存するとともに、前記第２の記憶手段に記憶されている前記消去カウンタ値に対し前記加算後の消去カウンタ値を上書き保存する生成値保存手段と、
前記生成値保存手段によって保存された後に、前記第２のノードを宛先にする第２のデータおよび前記第１の記憶手段に記憶されている最新の連結カウンタ値について前記更新手段によって更新された第２の連結カウンタ値を前記第２のノードに送信する第２の送信手段と、を備え、
前記第２のノードは、
前記第１の連結カウンタ値を、前記第１のノードから受信する第１の受信手段と、
前記第１の受信手段によって受信された第１の連結カウンタ値を記憶装置に保存する第１の保存手段と、
前記第２の連結カウンタ値を、前記第１のノードから受信する第２の受信手段と、
前記第２の受信手段によって受信された第２の連結カウンタ値が前記第１の連結カウンタ値よりも大きいか否かを判断する判断手段と、
前記判断手段によって大きいと判断された場合、前記第１の連結カウンタ値を前記第２の連結カウンタ値に上書保存する第２の保存手段と、
を備えることを特徴とする通信システム。
【符号の説明】
【０３５２】
Ｎ，Ｎ１〜３  ノード
ＪＣ  連結カウンタ値
Ｒ  消去カウンタ値
Ｓ  送信カウンタ値
ＲＣ  受信カウンタ値
４０１  第１の記憶部
４０２  更新部
４０３  送信部
４０４  暗号化部
４０５  乱数生成部
４０６  検出部
４０７  受信部
４０８  復号部
４０９  生成部
４１０  保存部
４１１  第２の記憶部
４１２  抽出部
５０１  第１の受信部
５０２  第１の保存部
５０３  第２の受信部
５０４  判断部
５０５  第２の保存部
５０６  データ処理部
５０７  第３の受信部
５０８  抽出部
５０９  送信部
【図１】
0005900509.tif 000002
【図２】
0005900509.tif 000003
【図３】
0005900509.tif 000004
【図４】
0005900509.tif 000005
【図５】
0005900509.tif 000006
【図６】
0005900509.tif 000007
【図７】
0005900509.tif 000008
【図８】
0005900509.tif 000009
【図９】
0005900509.tif 000010
【図１０】
0005900509.tif 000011
【図１１】
0005900509.tif 000012
【図１２】
0005900509.tif 000013
【図１３】
0005900509.tif 000014
【図１４】
0005900509.tif 000015
【図１５】
0005900509.tif 000016
【図１６】
0005900509.tif 000017
【図１７】
0005900509.tif 000018
【図１８】
0005900509.tif 000019
【図１９】
0005900509.tif 000020
【図２０】
0005900509.tif 000021
【図２１】
0005900509.tif 000022
【図２２】
0005900509.tif 000023
【図２３】
0005900509.tif 000024