(57)【特許請求の範囲】
【請求項１】
暗号化データまたは復号データを記憶するデータ記憶部と、
暗号化データを復号する復号部と、
復号データを暗号化する暗号化部と、
前記暗号化部に対して、第１の暗号化データを暗号鍵に基づいて前記復号部が復号した第１の復号データを前記データ記憶部から読み出して、前記第１の復号データを前記暗号鍵に基づいて暗号化した第２の暗号化データを前記データ記憶部に書き戻すように、命令を出す判断部と、
前記暗号鍵を記憶する第１の記憶領域と、前記暗号鍵とは異なる暗号鍵を記憶する第２の記憶領域を含む鍵記憶部と、
新たな暗号鍵を第３の記憶領域に記憶し、前記第１の記憶領域に記憶されている前記暗号鍵を第４の記憶領域にコピーし、前記暗号鍵の前記第１の記憶領域から前記第４の記憶領域へのコピーの後に前記新たな暗号鍵を前記第３の記憶領域から前記第１の記憶領域にコピーし、前記第４の記憶領域にコピーされた前記暗号鍵を、前記新たな暗号鍵の前記第３の記憶領域から前記第１の記憶領域へのコピーの後に、前記第２の記憶領域にコピーする鍵管理部
を備える通信装置。
【請求項２】
前記復号部は、前記第２の暗号化データを前記データ記憶部から読み出し、前記第２の暗号化データを前記暗号鍵とは異なる暗号鍵に基づいて復号した第２の復号データを前記データ記憶部に書き戻す
ことを特徴とする請求項１記載の通信装置。
【請求項３】
前記鍵管理部は、前記暗号鍵の更新を繰り返し、
前記鍵管理部が前記暗号鍵を更新する更新間隔の半分以下の間隔で、前記鍵管理部が更新した前記暗号鍵を他の通信装置に通知する通知部
をさらに備えることを特徴とする請求項１または２に記載の通信装置。
【請求項４】
前記鍵管理部が更新した前記暗号鍵の他の通信装置への通知を繰り返し行う通知部をさらに備え、
前記鍵管理部が前記暗号鍵を更新してから、決められた許容時間が経過するまでの間でのみ、前記判断部は、前記暗号化部に対して前記命令を出し、
前記通知部が前記通知を行う通知間隔は、前記許容時間の長さの半分以下である
ことを特徴とする請求項１または２に記載の通信装置。
【請求項５】
コンピュータに、
前記コンピュータが備えるデータ記憶部に第１の暗号化データを記憶し、
記憶した前記第１の暗号化データを暗号鍵に基づいて復号することで復号データを得、
得た前記復号データを前記データ記憶部に記憶し、
記憶した前記復号データを前記データ記憶部から読み出し、
読み出した前記復号データを前記暗号鍵に基づいて暗号化することで第２の暗号化データを得、
得た前記第２の暗号化データを前記データ記憶部に書き戻し、
前記暗号鍵を記憶する第１の記憶領域とも、前記暗号鍵とは異なる暗号鍵を記憶する第２の記憶領域とも異なる第３の記憶領域に、新たな暗号鍵を記憶し、
前記第１の記憶領域に記憶されている前記暗号鍵を第４の記憶領域にコピーし、
前記暗号鍵の前記第１の記憶領域から前記第４の記憶領域へのコピーの後に、前記新たな暗号鍵を前記第３の記憶領域から前記第１の記憶領域にコピーし、
前記第４の記憶領域にコピーされた前記暗号鍵を、前記新たな暗号鍵の前記第３の記憶領域から前記第１の記憶領域へのコピーの後に、前記第２の記憶領域にコピーする
ことを含む処理を行わせるプログラム。
【請求項６】
通信装置が、
前記通信装置が備えるデータ記憶部に第１の暗号化データを記憶し、
記憶した前記第１の暗号化データを暗号鍵に基づいて復号することで復号データを得、
得た前記復号データを前記データ記憶部に記憶し、
記憶した前記復号データを前記データ記憶部から読み出し、
読み出した前記復号データを前記暗号鍵に基づいて暗号化することで第２の暗号化データを得、
得た前記第２の暗号化データを前記データ記憶部に書き戻し、
前記暗号鍵を記憶する第１の記憶領域とも、前記暗号鍵とは異なる暗号鍵を記憶する第２の記憶領域とも異なる第３の記憶領域に、新たな暗号鍵を記憶し、
前記第１の記憶領域に記憶されている前記暗号鍵を第４の記憶領域にコピーし、
前記暗号鍵の前記第１の記憶領域から前記第４の記憶領域へのコピーの後に、前記新たな暗号鍵を前記第３の記憶領域から前記第１の記憶領域にコピーし、
前記第４の記憶領域にコピーされた前記暗号鍵を、前記新たな暗号鍵の前記第３の記憶領域から前記第１の記憶領域へのコピーの後に、前記第２の記憶領域にコピーする
ことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化通信に関する。
【背景技術】
【０００２】
対称鍵暗号（symmetric cryptography）による暗号化通信に関する１つの話題は、送信者と受信者との間の鍵確立（key establishment）である。
例えば、複数のノード装置によって構成されるネットワークの中の第１のノード装置において、アクセスキー生成部は、第１のノード装置に固有の暗号鍵である第１のアクセスキーを、第１の時間ごとに変更する。そして、共通鍵生成部は、複数のノード装置で共通の共通鍵を第２の時間ごとに変更する。【０００３】
また、第１のノード装置は、生成した第１のアクセスキーを生成した共通鍵で暗号化して送信するとともに、第２のノード装置から送信されてきた、第２のノード装置の第２のアクセスキーを共通鍵で暗号化したデータを含むアクセスキー通知フレームを受信する。そして、第１のノード装置において、復号化部は、受信したアクセスキー通知フレームを、生成された共通鍵を用いて復号することにより、第２のアクセスキーを取得する。さらに、第１のノード装置の送信部からは、平文フレームから計算されるハッシュ値を含むデータを共通鍵で暗号化した署名データの付与された平文フレームを、第２のアクセスキーで暗号化した、暗号化フレームが送信される。【０００４】
また、セキュアな通信のためのアーキテクチャとして、Security Architecture for Internet Protocol（ＩＰｓｅｃ）も知られており、ＩＰｓｅｃを利用した暗号化通信システムも知られている。例えば、単一または複数の端末を接続したＩＰｓｅｃゲートウェイに、Virtual Local Area Network（ＶＬＡＮ）対応の暗号鍵を配布する監視制御サーバを含む、次のような暗号化通信システムが知られている。【０００５】
すなわち、監視制御サーバは、ＩＰｓｅｃゲートウェイに配布するＶＬＡＮ対応の暗号鍵の管理および配布を行う手段を備える。そして、ＩＰｓｅｃゲートウェイは、監視制御サーバから今回配布された暗号鍵を新鍵として保持する新鍵メモリと、前回配布された暗号鍵を旧鍵として保持する旧鍵メモリを備える。ＩＰｓｅｃゲートウェイはさらに、新鍵による暗号通信の不成功により旧鍵メモリに保持された旧鍵による暗号通信に切替える手段を備える。【０００６】
そのほかにも、無線Local Area Network（ＬＡＮ）の鍵同期メカニズムが提案されている。この鍵同期メカニズムによれば、アクセスポイントは、新たな鍵で正しく暗号化された第１のデータフレームがステーションから受信されるまで、新たな暗号化鍵を使用し始めることはない。そして、新たな鍵は、このポイントからキーリフレッシュインターバルの期限切れまで使用される。【０００７】
ところで、暗号鍵が更新される暗号化通信システムにおいては、暗号文データが送信されるタイミングと、更新された暗号鍵が送信装置と受信装置の間で確立されるタイミングのずれにより、次のような問題が生じうる。すなわち、復号に用いる暗号鍵として受信装置が認識している最新の暗号鍵では、正しくデータを復号することができないことが起こりうる。【０００８】
例えば、受信装置が暗号鍵を更新する少し前の、送信装置がまだ暗号鍵を更新していない時点で、送信装置は、更新される前の暗号鍵を用いてデータを暗号化して暗号文データを生成し、生成した暗号文データを送信することがある。そして、受信装置は、暗号文データを受信する少し前に、暗号鍵を更新していることがある。すると、受信装置は、受信した暗号文データを、復号に用いる暗号鍵として現在認識している更新後の暗号鍵によって正しく復号することはできない。【０００９】
そこで、受信装置は、正しい平文データを得るための何らかの処理を行うことが望ましい。例えば、受信装置は、最新の暗号鍵だけではなく古い暗号鍵をも保持し、最新の暗号鍵による復号に失敗した場合は、古い暗号鍵を用いて暗号文データを再度復号してもよい。すると、受信装置は、更新される前の古い暗号鍵により暗号化された暗号文データを受信した場合であっても、正しい平文データを得ることができる。【００１０】
より具体的には、受信装置は、暗号文データを受信したとき、例えば以下のように動作してもよい。すなわち、受信装置は、まず最新の暗号鍵による復号を行い、復号が終わった後も、古い暗号鍵を用いる再度の復号に備えて暗号文データを保持し続ける。そして、受信装置は、復号されたデータを検証し、復号により正しい平文データが得られなかった場合は、古い暗号鍵を用いて暗号文データの復号を行う。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】国際公開ＷＯ２００９／１３０９１７号公報
【特許文献２】特開２００７−２６７３０１号公報
【特許文献３】特表２００７−５００９７２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
古い暗号鍵を用いる再度の復号に備えるために、上述の受信装置は、最新の暗号鍵による復号の結果として得られたデータを保持する記憶領域のほかに、さらに受信した暗号文データを保持する記憶領域を必要とする。【００１３】
他方で、暗号化通信システムの利用分野によっては、受信装置の記憶容量が非常に制限される場合がある。そして、発明者らが研究の結果得た知見によれば、記憶容量の小さな受信装置にとっては、最新の暗号鍵による復号の結果として得られたデータと受信した暗号文データの双方を保持することが、メモリ不足による性能低下またはエラーに直結しかねない。【００１４】
そこで本発明は、暗号鍵が更新される暗号化通信システムにおいて、古い暗号鍵を用いた復号を、記憶容量が小さな通信装置でも容易に行えるようにするための技術を提供することを目的とする。
【課題を解決するための手段】
【００１５】
一態様により提供される通信装置は、暗号化データまたは復号データを記憶するデータ記憶部と、暗号化データを復号する復号部と、復号データを暗号化する暗号化部を備える。前記通信装置は、さらに、前記暗号化部に対して、第１の暗号化データを暗号鍵に基づいて前記復号部が復号した第１の復号データを前記データ記憶部から読み出して、前記第１の復号データを前記暗号鍵に基づいて暗号化した第２の暗号化データを前記データ記憶部に書き戻すように、命令を出す判断部を備える。
【発明の効果】
【００１６】
第１の暗号化データを第１の復号データに復号するのに用いられる暗号鍵と、第１の復号データを第２の暗号化データに暗号化するのに用いられる暗号鍵は同じなので、第２の暗号化データの内容は、第１の暗号化データと同じである。よって、上記の通信装置には、データ記憶部への書き戻しによる記憶領域の節約効果がある。つまり、第１の暗号化データと同じ内容の第２の暗号化データがデータ記憶部に書き戻されるので、上記の通信装置によれば、第１の復号データとは別に第１の暗号化データをデータ記憶部が保持し続ける必要がない。すなわち、上記の通信装置は、記憶領域の消費抑制という効果を奏する。【００１７】
また、上記通信装置における上記暗号鍵は、更新される暗号鍵でもよいし、第１の暗号化データは、上記通信装置が他の装置から受信したデータであってもよい。その場合、上記通信装置は、受信したデータを復号して得られた復号データとは別に、受信したデータそのものを保持し続けるという必要なしに、古い暗号鍵を用いた復号に備えることができる。
【図面の簡単な説明】
【００１８】
【図１】第１実施形態における通信の一例を示すタイミングチャートである。
【図２】第１実施形態が適用される環境の一例を示すシステム構成図である。
【図３】第１実施形態の通信装置のブロック構成図である。
【図４】第１実施形態の通信装置のハードウェア構成の例を示す図である。
【図５】第１実施形態の通信装置が記憶するデータの一例を示す図である。
【図６】第１実施形態において送受信されるデータの形式を説明する図である。
【図７】第１実施形態の通信装置がデータの受信を契機として行う受信処理のフローチャートである。
【図８】第１実施形態におけるメモリ上のデータの変遷の例を模式的に説明する図である。
【図９】比較例におけるメモリ上のデータの変遷の例を模式的に説明する図である。
【図１０】第１実施形態において通信装置が行う暗号鍵更新処理のフローチャートである。
【図１１】暗号鍵更新処理にともなうデータの変遷の例を模式的に説明する図である。
【図１２】暗号鍵更新処理の変形例を示すフローチャートである。
【図１３】変形された暗号鍵更新処理にともなうデータの変遷の例を模式的に説明する図である。
【図１４】第２実施形態の通信装置のブロック構成図である。
【図１５】第２実施形態の通信装置が記憶するデータの一例を示す図である。
【図１６】第２実施形態の通信装置がデータの受信を契機として行う受信処理のフローチャートである。
【図１７】第２実施形態において通信装置が行う外部由来アクセス鍵更新処理のフローチャートである。
【図１８】第２実施形態において通信装置が行う暗号化ＰＤＵ受信処理のフローチャートである。
【図１９】第２実施形態において通信装置が行う内部由来アクセス鍵配送処理のフローチャートである。
【図２０】第２実施形態における共通鍵と内部由来アクセス鍵の更新を示すタイミングチャートである。
【発明を実施するための形態】
【００１９】
以下、実施形態について、図面を参照しながら詳細に説明する。具体的には、まず図１〜１３を参照して第１実施形態について説明し、その後、図１４〜２０を参照して第２実施形態について説明する。最後に、その他の実施形態についても説明する。
【００２０】
なお、以下の本明細書の説明においては、特に断らない限り、対称鍵暗号による暗号化通信が行われるものとする。また、詳しくは図８〜９とともに後述するが、どの実施形態においても、ストリーム暗号を利用することもできるし、ブロック暗号を利用することもできる。
【００２１】
さて、図１は、第１実施形態における通信の一例を示すタイミングチャートである。図１は、通信装置１００Ｂが通信装置１００Ａに暗号化したデータを送信する例を示す。
通信装置１００Ａと１００Ｂの双方は、何らかの鍵確立の方法にしたがい、通信装置１００Ａが復号に用いる現在の暗号鍵（cryptographic key）を認識する。なお、対称鍵暗号が使われるので、通信装置１００Ａにとっての復号鍵と通信装置１００Ｂにとっての暗号化鍵は同じ暗号鍵である。
【００２２】
例えば、通信装置１００Ａと１００Ｂが同じアルゴリズムにしたがってそれぞれ暗号鍵を生成してもよい。あるいは、通信装置１００Ａが暗号鍵を生成し、生成した暗号鍵を通信装置１００Ｂに配送してもよい。例えば、通信装置１００Ａは、生成した暗号鍵を、鍵配送用の他の暗号鍵を用いて暗号化して通信装置１００Ｂに配送してもよい。配送対象の暗号鍵を暗号化するのに通信装置１００Ａが用いる鍵配送用の暗号鍵は、対称鍵暗号の暗号鍵でもよいし、公開鍵暗号における通信装置１００Ｂの公開鍵でもよい。
【００２３】
以上のように、第１実施形態は、通信装置１００Ａと１００Ｂの間の鍵確立の具体的方法によらず様々な暗号化通信システムに適用可能である。
また、暗号化通信のセキュリティ向上のため、通信装置１００Ａと１００Ｂの間では、適宜の間隔で暗号鍵が更新される。以下では説明の便宜上、更新される暗号鍵を「第１世代、第２世代、……」のように世代で区別することとし、通信装置１００Ａが復号に用いる第ａ世代の暗号鍵を“ＫＡ，ａ”と表す。
【００２４】
送信側の通信装置１００Ｂは、送信先の通信装置１００Ａを識別する情報と対応づけて、通信装置１００Ａが復号に用いる現在の暗号鍵を記憶する。以下では説明の便宜上、通信装置１００Ａを識別する情報として、通信装置１００ＡのアドレスＡｄｒＡが使われるものとするが、識別番号など、アドレスＡｄｒＡ以外の識別情報も利用可能である。
【００２５】
なお、第１実施形態の暗号化通信は、様々なレイヤのプロトコル上で実現可能である。換言すれば、第１実施形態におけるProtocol Data Unit（ＰＤＵ）は、特定のレイヤの特定のプロトコルのＰＤＵには限定されない。よって、通信装置１００ＡのアドレスＡｄｒＡも、プロトコルのレイヤに応じたアドレスでよい。
【００２６】
例えば、データリンク層での通信に第１実施形態が適用される場合、Media Access Control（ＭＡＣ）アドレスが、通信装置１００Ａを識別するためのアドレスＡｄｒＡとして用いられてもよい。あるいは、ネットワーク層での通信に第１実施形態が適用される場合、Internet Protocol（ＩＰ）アドレスが、通信装置１００Ａを識別するためのアドレスＡｄｒＡとして用いられてもよい。
【００２７】
また、第１実施形態における暗号化通信は、無線通信、有線通信、またはその組み合わせのいずれでもよい。そして、通信装置１００Ａと１００Ｂの間のホップ数は１でもよいし２以上でもよい。
【００２８】
さて、図１に示すように、例えば時刻ＴＢ１０１において通信装置１００Ｂは、通信装置１００Ａの最新の暗号鍵ＫＡ，ａを認識する。そして、通信装置１００Ｂは、通信装置１００ＡのアドレスＡｄｒＡと対応づけて記憶していた前の世代の暗号鍵ＫＡ，ａ−１を新たな暗号鍵ＫＡ，ａに置き換える。
【００２９】
他方、通信装置１００Ａも、時刻ＴＡ１０１において、最新の暗号鍵ＫＡ，ａを生成し、通信装置１００Ａ自身が現在復号のために用いる暗号鍵（以下「現在鍵」という）を、前の世代の暗号鍵ＫＡ，ａ−１から新たな暗号鍵ＫＡ，ａへと更新する。また、第１実施形態の通信装置１００Ａは、現在鍵の１つ前の世代の暗号鍵（以下「旧鍵」という）も記憶する。よって、時刻ＴＡ１０１において通信装置１００Ａは、旧鍵をＫＡ，ａ−２からＫＡ，ａ−１に更新する処理も行う。
【００３０】
時刻ＴＢ１０１とＴＡ１０１は、ほぼ同時であるが、時刻ＴＢ１０１の方が時刻ＴＡ１０１よりも早いこともありうるし、その逆の場合もありうる。いずれにせよ、時刻ＴＢ１０１と時刻ＴＡ１０１の遅い方の時点において、通信装置１００Ａと１００Ｂの間で暗号鍵ＫＡ，ａが確立される。
【００３１】
そして、通信装置１００Ｂは、例えば時刻ＴＢ１０２において、通信装置１００Ａに送信するための平文データＰ１０１を作成する。そして、通信装置１００Ｂは、時刻ＴＢ１０３において、送信先である通信装置１００ＡのアドレスＡｄｒＡと対応づけて記憶している暗号鍵ＫＡ，ａを用いて、平文データＰ１０１を暗号化し、暗号文データＣ１０１を得る。
【００３２】
なお、上記のように第１実施形態が適用されるプロトコルは任意だが、一般にＰＤＵはヘッダとペイロードを含む。平文データＰ１０１と暗号文データＣ１０１はペイロードに相当するデータである。なお、平文データＰ１０１の種類は任意である。平文データＰ１０１は、例えば、テキストデータでもよいし、画像データでもよいし、特定のアプリケーションソフトウェアのフォーマットのバイナリデータでもよい。
【００３３】
通信装置１００Ｂは、以上のようにして暗号文データＣ１０１を得ると、時刻ＴＢ１０４において、暗号文データＣ１０１を通信装置１００Ａに送信する。なお、正確には、通信装置１００Ｂが送信するのは暗号文データＣ１０１をペイロードとして含むＰＤＵだが、ヘッダは暗号化とは無関係なので、説明の簡略化のために以下ではヘッダに関する説明を適宜省略する。
【００３４】
以上のようにして通信装置１００Ｂから送信された暗号文データＣ１０１は、時刻ＴＡ１０２に、通信装置１００Ａにおいて受信される。そして、時刻ＴＡ１０２において通信装置１００Ａが現在鍵として記憶しているのは、時刻ＴＡ１０１で生成した暗号鍵ＫＡ，ａである。よって、通信装置１００Ａは、時刻ＴＡ１０２に続く時刻ＴＡ１０３において、暗号鍵ＫＡ，ａを用いて暗号文データＣ１０１を復号する。
【００３５】
上記のように、暗号文データＣ１０１は、暗号鍵ＫＡ，ａによる暗号化で得られたデータである。よって、時刻ＴＡ１０３における暗号鍵ＫＡ，ａによる復号により、通信装置１００Ｂが時刻ＴＡ１０２で生成したのと同じ平文データＰ１０１が得られる。
【００３６】
また、詳しくは図６とともに後述するが、平文データＰ１０１は２つの部分を含み、第１の部分の特徴を第２の部分が示す。以下では第１の部分の特徴を示す値を「特徴値」ということにする。第２の部分には、特徴値そのもの、または特徴値に所定の操作を施して得られる値が設定される。
【００３７】
詳しくは図６とともに後述するが、特徴値としては、例えばハッシュ値などが利用可能である。よって、通信装置１００Ａは、特徴値を用いることで平文データＰ１０１の完全性（integrity）をチェックし、復号により得た平文データＰ１０１が正しい平文データであることを確認することができる。
【００３８】
ところで、図１の例では、通信装置１００Ｂは、さらに時刻ＴＢ１０５において、通信装置１００Ａに送信するための別の平文データＰ１０２を作成する。すると、通信装置１００Ｂは、時刻ＴＢ１０６において時刻ＴＢ１０３と同様に暗号鍵ＫＡ，ａを用いて平文データＰ１０２を暗号化し、暗号文データＣ１０２を得る。そして、通信装置１００Ｂは、時刻ＴＢ１０７において時刻ＴＢ１０４と同様に暗号文データＣ１０２を送信する。
【００３９】
他方、通信装置１００Ａは、暗号文データＣ１０２を通信装置１００Ｂから受信する少し前に、時刻ＴＡ１０４において、旧鍵をＫＡ，ａ−１からＫＡ，ａに更新し、現在鍵をＫＡ，ａからＫＡ，ａ＋１に更新することがある。つまり、通信装置１００Ａは、時刻ＴＡ１０４での暗号鍵の更新の後の時刻ＴＡ１０５で、暗号文データＣ１０２を受信することがある。
【００４０】
もちろん、通信装置１００Ｂも、通信装置１００Ａが暗号鍵の更新を行う時刻ＴＡ１０４に近い時刻ＴＢ１０８において、通信装置１００ＡのアドレスＡｄｒＡに対応する暗号鍵をＫＡ，ａからＫＡ，ａ＋１に更新する。よって、時刻ＴＡ１０４と時刻ＴＢ１０８のうちの遅い方である時刻ＴＢ１０８には、新たな暗号鍵ＫＡ，ａ＋１が、通信装置１００Ａと１００Ｂの間で確立される。
【００４１】
しかし、上記のように、たまたま時刻ＴＢ１０８での更新の直前の時刻ＴＢ１０６に通信装置１００Ｂが平文データＰ１０２を暗号化することはありうる。また、通信装置１００Ａが、暗号文データＣ１０２を時刻ＴＡ１０５で受信する直前に、時刻ＴＡ１０４で現在鍵と旧鍵を更新することもありうる。
【００４２】
例えば、鍵確立の方法として、通信装置１００Ａが生成した新たな暗号鍵ＫＡ，ａ＋１を通信装置１００Ｂに配送する方法が採用される場合、鍵配送の直前に暗号文データＣ１０２の送信が行われるかもしれない。あるいは、鍵確立の方法として、通信装置１００Ａと１００Ｂがそれぞれ時刻を参照して同じアルゴリズムにしたがって暗号鍵を生成する方法が採用される場合、通信装置１００Ａの内蔵時計よりも通信装置１００Ｂの内蔵時計が遅れているかもしれない。また、たとえ通信装置１００Ａと１００Ｂの内蔵時計が正確に同期していたとしても、暗号文データＣ１０２の送信から受信までにかかる時間の間に、現在鍵の更新が行われるかもしれない。
【００４３】
以上のような様々な理由から、図１に示すように、通信装置１００Ａが暗号文データＣ１０２を受信した時刻ＴＡ１０５では既に、暗号文データＣ１０２の生成に使われた暗号鍵ＫＡ，ａよりも新しい暗号鍵ＫＡ，ａ＋１が現在鍵として記憶されていることがある。その場合、暗号文データＣ１０２を受信した通信装置１００Ａは、時刻ＴＡ１０６において、現在鍵ＫＡ，ａ＋１を用いて暗号文データＣ１０２を復号する。
【００４４】
すると、復号の結果として復号データＤ１０２が得られるが、復号データＤ１０２は、元の平文データＰ１０２とは異なる。通信装置１００Ａは、特徴値のチェックを行うことで、復号データＤ１０２が正しい平文データではないと判断することができる。
【００４５】
そして、通信装置１００Ａは、復号データＤ１０２が正しい平文データではないと判断すると、「暗号文データＣ１０２は旧鍵ＫＡ，ａによって暗号化されたデータかもしれない」と認識する。よって、通信装置１００Ａは、暗号文データＣ１０２の旧鍵ＫＡ，ａによる復号を試みる。
【００４６】
ところで、第１実施形態の通信装置１００Ａは、時刻ＴＡ１０６において、メモリの節約のため、暗号文データＣ１０２とは別の記憶領域に復号データＤ１０２を作成するのではなく、暗号文データＣ１０２を記憶した記憶領域上に復号データＤ１０２を上書きする。よって、暗号文データＣ１０２の旧鍵ＫＡ，ａによる復号を試みようとする段階では、通信装置１００Ａは暗号文データＣ１０２を保持していない。
【００４７】
そこで、通信装置１００Ａは時刻ＴＡ１０７において、現在鍵ＫＡ，ａ＋１を用いて復号データＤ１０２を再暗号化することで、暗号文データＣ１０２を復元する。なお、時刻ＴＡ１０７での再暗号化においても、通信装置１００Ａは、メモリの節約のため、復号データＤ１０２を記憶している記憶領域上に暗号文データＣ１０２を上書きする。
【００４８】
そして、通信装置１００Ａは、こうして再暗号化により暗号文データＣ１０２を復元した後、時刻ＴＡ１０８において、暗号文データＣ１０２を旧鍵ＫＡ，ａにより復号する。今度は、暗号化されたときと同じ暗号鍵ＫＡ，ａにより暗号文データＣ１０２が復号されるので、復号の結果として、時刻ＴＢ１０５に通信装置１００Ｂが作成したのと同じ平文データＰ１０２が得られる。
【００４９】
なお、時刻ＴＡ１０８における復号においても、通信装置１００Ａは、メモリの節約のため、復元した暗号文データＣ１０２を記憶している記憶領域上に平文データＰ１０２を上書きする。そして、通信装置１００Ａは、特徴値のチェックにより平文データＰ１０２が正しい平文データであることを確認することができる。
【００５０】
以上のような再暗号化と旧鍵による復号を通信装置１００Ａが行うことで、タイミングのずれに起因して現在鍵による復号では正しい平文データが得られない場合であっても、通信装置１００Ａは旧鍵による復号から正しい平文データを得ることができる。よって、データの再送は不要である。つまり、通信装置１００Ａが通信装置１００Ｂへデータの再送を依頼する必要もないし、依頼に応じて通信装置１００Ｂが平文データＰ１０２を新たな暗号鍵ＫＡ，ａ＋１で暗号化しなおし、得られた暗号文データを通信装置１００Ａに送信する必要もない。また、通信装置１００Ｂが再送に備えて平文データＰ１０２をしばらくの間保持しておく必要もない。
【００５１】
よって、第１実施形態は次の（ａ１）〜（ａ３）のような効果を奏する。
（ａ１）通信装置１００Ａと１００Ｂの間のトラフィック量が少なくて済む。
（ａ２）通信装置１００Ｂが再送に備えて余計な記憶領域を消費することもない。
（ａ３）再送依頼とデータの再送にかかる時間よりも、通信装置１００Ａ内で再暗号化と再度の復号にかかる時間の方が一般に短いので、通信装置１００Ａは速やかに正しい平文データＰ１０２を得ることができる。
【００５２】
さらに、第１実施形態の通信装置１００Ａは、上記のように、受信した暗号文データＣ１０２、復号データＤ１０２、再暗号化により復元した暗号文データＣ１０２、および平文データＰ１０２を、同じ記憶領域に次々と上書きしていく。よって、何らかの理由で通信装置１００Ａに搭載するメモリの容量が制限されている場合であっても、第１実施形態によれば、上記（ａ１）〜（ａ３）のような効果が得られる。
【００５３】
なお、図１に関しては以上のとおり通信装置１００Ｂから通信装置１００Ａへのデータの送信のみを説明したが、もちろん、通信装置１００Ａが通信装置１００Ｂにデータを送信してもよい。以下では、各通信装置がデータを受信する機能とデータを送信する機能の双方を備えるものとして説明する。
【００５４】
通信装置１００Ａと１００Ｂの間の双方向の通信のためには、通信装置１００Ａがさらに、通信装置１００Ｂを識別するための通信装置１００ＢのアドレスＡｄｒＢと対応づけて通信装置１００Ｂの最新の暗号鍵ＫＢ，ｂを記憶する。また、通信装置１００Ｂは、通信装置１００Ｂ自身が復号に用いる最新の暗号鍵ＫＢ，ｂを現在鍵として記憶するとともに、現在鍵の１つ前の世代の暗号鍵ＫＢ，ｂ−１を旧鍵として記憶する。
【００５５】
すると、双方向通信が可能となり、また、通信装置１００Ａから通信装置１００Ｂに送信されたデータに関して、通信装置１００Ｂが必要に応じて再暗号化と旧鍵による再度の復号を行うことも可能となる。よって、通信装置１００Ａと１００Ｂの双方ともに小容量のメモリしか搭載していない場合であっても、上記（ａ１）〜（ａ３）の効果が得られる。
【００５６】
なお、メモリ容量が制限される通信装置の具体例としては、例えば、センサネットワークにおける通信装置が挙げられる。センサネットワークは、適宜の場所に配置された多数のセンサから様々な情報を収集するためのネットワークであり、センサネットワーク内の各ノードは、センサと接続されるか、センサを内蔵する通信装置である。センサは、例えば、画像センサ、温度センサ、湿度センサ、圧力センサ、加速度センサなど、任意の種類のセンサでよい。
【００５７】
用途によっては、数千個〜数十万個のオーダの多数の通信装置を含むセンサネットワークが設計されるかもしれない。そして、現実社会においては、個々の通信装置が高価な場合、非常に多くの通信装置を含むセンサネットワークを構築して運用することは非現実的である。よって、センサネットワーク向けの通信装置は、製造原価が安価であることが好ましい。
【００５８】
そして、製造原価を抑えるためには、例えば、内蔵メモリの容量を制限することが有効である。なぜなら、内蔵メモリの容量を制限することで、通信装置に用いられる集積回路（Integrated Circuit；ＩＣ）の面積を小さくし、１枚の半導体ウェハからより多くのＩＣを製造することができるようになり、ＩＣの単価が下がるからである。
【００５９】
よって、第１実施形態の通信装置１００Ａと１００Ｂは、例えばセンサネットワーク内の通信装置など、何らかの理由から内蔵メモリの容量が制限されている場合の通信装置として好適である。もちろん、たとえ豊富なメモリを搭載している通信装置であっても、第１実施形態によるメモリ節約の効果と上記（ａ１）〜（ａ３）の効果は得られる。
【００６０】
このように、通信装置１００Ａと１００Ｂは、様々な環境において利用可能であるが、以下では図２を参照して、環境の例をさらに具体的に説明する。
【００６１】
図２は、第１実施形態が適用される環境の一例を示すシステム構成図である。第１実施形態は、無線通信ネットワークへの適用に限定されるものではないが、図２の例では、通信装置１００Ａと１００Ｂは無線通信を行う。
【００６２】
また、図２には、通信装置１００Ａおよび１００Ｂと同様の他の通信装置１００Ｃ〜１００Ｌも示されている。図２にはさらに、ゲートウェイ装置１２０と、サーバ１３０も図示されている。図２のアドホックネットワーク１４０は、以上の通信装置１００Ａ〜１００Ｌとゲートウェイ装置１２０が自律的に構築するネットワークである。
【００６３】
図２の例では、アドホックネットワーク１４０内において通信装置１００Ａが直接通信可能なのは、通信装置１００Ｂ〜１００Ｉである。つまり、通信装置１００Ａからのホップ数が１なのは通信装置１００Ｂ〜１００Ｉであり、通信装置１００Ａから通信装置１００Ｊ〜１００Ｌへのホップ数は２以上である。
【００６４】
アドホックネットワーク１４０は、センサネットワークとして利用されてもよい。つまり、通信装置１００Ａ〜１００Ｌのそれぞれが、センサと接続されるかまたはセンサを内蔵していてもよい。その場合、通信装置１００Ａ〜１００Ｌのそれぞれは、センサが感知したデータを含むＰＤＵを、アドホックネットワーク１４０を通じてゲートウェイ装置１２０に送信する。
【００６５】
図２の例では、通信装置１００Ｄと１００Ｆと１００Ｉがゲートウェイ装置１２０と直接通信可能である。よって、通信装置１００Ａが送信したＰＤＵは、例えば通信装置１００Ｄを介して２ホップでゲートウェイ装置１２０に到達するかもしれない。他の通信装置１００Ｂ〜１００Ｌが送信したＰＤＵも、アドホックネットワーク１４０内の適宜の経路を介してゲートウェイ装置１２０に到達する。
【００６６】
そして、ゲートウェイ装置１２０は、サーバ１３０と接続されているので、各通信装置１００Ａ〜１００Ｌが送信したＰＤＵは、ゲートウェイ装置１２０からさらにサーバ１３０へと転送される。なお、ゲートウェイ装置１２０はサーバ１３０と直接的に接続されていてもよいし、ネットワークを介して間接的に接続されていてもよい。また、ゲートウェイ装置１２０とサーバ１３０の間の接続は、有線、無線、またはその組み合わせである。
【００６７】
以上のようにして、サーバ１３０は、アドホックネットワーク１４０内の各通信装置１００Ａ〜１００Ｌから、センサが感知したデータを収集し、分析することができる。例えば、各センサが温度センサの場合、サーバ１３０は、温度分布や温度変化を調べる処理を行ってもよいし、温度予測処理を行ってもよい。
【００６８】
そして、図１に例示したように、アドホックネットワーク１４０内の通信は暗号化され、暗号鍵は適宜の間隔で更新される。具体的には、少なくとも、アドホックネットワーク１４０内で直接通信することが可能な隣接する２台の装置間では、適宜の間隔で更新される暗号鍵が何らかの方法により共有され、鍵確立が実現される。
【００６９】
例えば、１ホップで通信可能な通信装置１００Ａと１００Ｄの間では互いの暗号鍵が共有される。同様に、１ホップで通信可能な通信装置１００Ｄとゲートウェイ装置１２０の間でも互いの暗号鍵が共有される。よって、通信装置１００Ａに接続または内蔵されるセンサが感知したデータは、以下のようにして、暗号化された状態で通信装置１００Ａから通信装置１００Ｄを介してゲートウェイ装置１２０に到達する。
【００７０】
なお、アドホックネットワーク１４０におけるデータ転送経路の決定アルゴリズムは任意であるが、説明の便宜上、次のように仮定する。すなわち、通信装置１００Ａは、アドホックネットワーク１４０内の最終的な送信先がゲートウェイ装置１２０である場合は、隣接する通信装置１００Ｂ〜１００Ｉのうち通信装置１００ＤにＰＤＵを送信することに決定すると仮定する。
【００７１】
よって、この仮定のもとでは、通信装置１００Ａは、通信装置１００Ｄのアドレスに対応づけて記憶している通信装置１００Ｄの暗号鍵を用いて、センサが感知したデータを暗号化する。そして、通信装置１００Ａは、暗号化により得られた暗号文データをペイロードとして含むＰＤＵを生成し、生成したＰＤＵを送信する。
【００７２】
すると、通信装置１００ＤがＰＤＵを受信する。図１の例と同様にして、通信装置１００Ｄは、現在鍵を用いる復号によりＰＤＵから正しい平文データを得られるかもしれない。あるいは、場合によっては、鍵確立とＰＤＵの送受信のタイミングのずれが原因で、通信装置１００Ｄは、現在鍵を用いる１回目の復号では正しい平文データを得られないかもしれない。しかし、その場合も、通信装置１００Ｄは、現在鍵を用いた再暗号化と旧鍵を用いた再度の復号により、結局は正しい平文データを得ることができる。
【００７３】
よって、通信装置１００Ｄは、復号により得た平文データを、ゲートウェイ装置１２０の暗号鍵で暗号化する。そして、通信装置１００Ｄは暗号化により得られた暗号文データをペイロードとして含むＰＤＵを生成し、生成したＰＤＵをゲートウェイ装置１２０に宛てて送信する。
【００７４】
すると、ゲートウェイ装置１２０がＰＤＵを受信する。図１の例と同様にして、ゲートウェイ装置１２０は、現在鍵を用いる復号によりＰＤＵから正しい平文データを得られるかもしれない。あるいは、場合によっては、鍵確立とＰＤＵの送受信のタイミングのずれが原因で、ゲートウェイ装置１２０は、現在鍵を用いる１回目の復号では正しい平文データを得られないかもしれない。しかし、その場合も、ゲートウェイ装置１２０は、現在鍵を用いた再暗号化と旧鍵を用いた再度の復号により、結局は正しい平文データを得ることができる。
【００７５】
すると、ゲートウェイ装置１２０は、復号により得た平文データを適宜暗号化し、暗号化により得られた暗号文データをペイロードとして含むＰＤＵを生成し、生成したＰＤＵをサーバ１３０に送信する。なお、アドホックネットワーク１４０内で使われる暗号化アルゴリズムと、ゲートウェイ装置１２０とサーバ１３０の間で使われる暗号化アルゴリズムは、同じでもよいし異なっていてもよい。
【００７６】
サーバ１３０は、ゲートウェイ装置１２０からＰＤＵを受信し、受信したＰＤＵのペイロードを復号することで、通信装置１００Ａに接続された（または通信装置１００Ａに内蔵された）センサが感知したデータである平文データを得ることができる。サーバ１３０は、同様にして他の通信装置１００Ｂ〜１００Ｌからも、センサが感知したデータを収集することができる。
【００７７】
なお、上記では主にアドホックネットワーク１４０がセンサネットワークとして利用される場合を例に説明したが、アドホックネットワーク１４０はセンサネットワークでなくてもよい。
【００７８】
さて、続いて、図３〜１３を参照して、第１実施形態についてさらに詳細に説明してゆく。
図３は、第１実施形態の通信装置のブロック構成図である。なお、第１実施形態では、通信装置１００Ａ〜１００Ｌはいずれも図３の通信装置１００であり、ゲートウェイ装置１２０も図３に示す各部を有する。また、図３および後述の図１４では、矢印の線が交差している箇所があるが、線の交差は線同士の接続を意味しないので注意されたい。
【００７９】
図３の通信装置１００は、鍵管理部１０１、鍵記憶部１０２、指示部１０３、メモリ１０４、受信部１０５、復号部１０６、判断部１０７、再暗号化部１０８、平文処理部１０９、および配送部１１０を有する。そして、配送部１１０は暗号化部１１１を含み、暗号化部１１１は鍵認識部１１２を含む。通信装置１００内のこれら各部の詳細は、以下のとおりである。
【００８０】
鍵管理部１０１は、通信装置１００が復号に用いる暗号鍵を繰り返し生成する。そして、鍵記憶部１０２は、鍵管理部１０１が生成した複数の暗号鍵を記憶する第１の記憶部の一例である。
【００８１】
具体的には、第１実施形態の鍵記憶部１０２は、図１に示すように現在鍵と旧鍵という２つの暗号鍵を記憶する。しかし、実施形態によっては、鍵記憶部１０２は、２世代以上前の暗号鍵も含めた３つ以上の暗号鍵を記憶してもよい。また、鍵管理部１０１は、上記のように暗号鍵を繰り返し生成することで鍵生成部として動作するだけでなく、暗号鍵の生成にともなう旧鍵の更新など、暗号鍵に関するその他の管理も行う。
【００８２】
また、指示部１０３は、鍵記憶部１０２に記憶されている複数の暗号鍵のうちの１つを選択暗号鍵として選択する。つまり、指示部１０３は、復号または再暗号化に用いる暗号鍵を選択暗号鍵として選択する。なお、選択暗号鍵は状況に応じて異なるが、詳しくは後述する。
【００８３】
そして、メモリ１０４は、第２の記憶部の一例である。図３には、メモリ１０４上に記憶される受信データ１１４と送信データ１１５も図示されている。なお、図３では、ヘッダとペイロードを含むＰＤＵ全体のデータを、受信データ１１４および送信データ１１５として図示している。
【００８４】
図１の説明から理解されるように、受信データ１１４のペイロードは、受信された暗号文の状態の場合もあるし、暗号化されたときとは異なる暗号鍵で復号された状態の場合もありうる。さらに、受信データ１１４のペイロードは、再暗号化された状態の場合もありうるし、暗号化されたときと同じ暗号鍵で復号された正しい平文の状態の場合もある。また、後述するように、送信データ１１５のペイロードも、平文の状態の場合もあるし、暗号文の状態の場合もある。
【００８５】
換言すれば、メモリ１０４は、暗号化データまたは復号データを記憶するデータ記憶部の一例である。また、暗号化データは、換言すれば暗号文データである。復号データは、正しく復号された平文データのこともあるし、暗号化されたときとは異なる暗号鍵で復号されたデータのこともある。
【００８６】
そして、受信部１０５は、暗号文データを受信し、受信した暗号文データをメモリ１０４に格納する。つまり、図３の受信データ１１４のペイロードは、最初は、受信部１０５がメモリ１０４に受信データ１１４を格納したときの暗号文の状態である。
【００８７】
また、復号部１０６は、指示部１０３が指示する選択暗号鍵を鍵記憶部１０２から読み出し、メモリ１０４に受信データ１１４のペイロードとして記憶されている暗号文データを、選択暗号鍵を用いて復号する。なお、復号の際に、復号部１０６は、復号により得られる復号データによってメモリ１０４上の暗号文データを上書きする。その結果、受信データ１１４のペイロードは、選択暗号鍵で復号された状態となる。図１に関して説明したように、上書きによりメモリ１０４の効率的な利用が可能となる。
【００８８】
判断部１０７は、受信データ１１４のペイロードとしてメモリ１０４上に記憶されている復号データに含まれる第１の部分から、第１の部分の特徴を示す特徴値を算出する。そして、算出した特徴値と復号データに含まれる第２の部分が整合すれば、判断部１０７は、復号データが正常な平文データだと判断する。逆に、算出した特徴値と復号データに含まれる第２の部分が整合しなければ、判断部１０７は、復号データが異常だと判断する。
【００８９】
そして、再暗号化部１０８は、復号データが異常だと判断部１０７が判断したとき、指示部１０３が指示する選択暗号鍵を鍵記憶部１０２から読み出し、選択暗号鍵を用いてメモリ１０４上の復号データを暗号化する。このように、再暗号化部１０８は、復号データを暗号化する暗号化部の具体例である。
【００９０】
なお、暗号化の際、再暗号化部１０８は、暗号化により再度得られる暗号文データによってメモリ１０４上の復号データを上書きする。その結果、受信データ１１４のペイロードは元の暗号文に戻る。図１に関して説明したように、上書きによりメモリ１０４の効率的な利用が可能となる。
【００９１】
ところで、上記のように選択暗号鍵は状況に応じて異なる。
例えば、受信部１０５が暗号文データを受信したときは、指示部１０３は、鍵管理部１０１が生成した最新の暗号鍵である現在鍵を選択暗号鍵として選択する。また、受信部１０５は、受信データ１１４のペイロードの復号を復号部１０６に命令する。よって、この場合、復号部１０６は、受信データ１１４のペイロードとして記憶されている暗号文データを、現在鍵を使って復号する。
【００９２】
他方、復号データが異常だと判断部１０７が判断したときは、指示部１０３は、現在選択している選択暗号鍵とは異なる暗号鍵を選択暗号鍵として選択しなおす。なお、第１実施形態では、復号データが異常だと判断されるのは、具体的には選択暗号鍵が現在鍵の場合である。よって、指示部１０３が選択暗号鍵として選択しなおす暗号鍵は、具体的には旧鍵である。
【００９３】
また、復号データが異常だと判断部１０７が判断したときに指示部１０３が選択暗号鍵を選択しなおすタイミングは、より正確には、判断部１０７の判断にしたがって再暗号化部１０８がメモリ１０４上の復号データを暗号文データによって上書きした後である。そして、選択暗号鍵を選択しなおすと、指示部１０３は、受信データ１１４のペイロードを復号するよう復号部１０６に命令する。よって、この場合、復号部１０６は、受信データ１１４のペイロードとして記憶されている暗号文データを、旧鍵で復号する。
【００９４】
ここで、図１の通信装置１００Ａの例を参照しながら、図３の各部の具体的動作の例をさらに詳細に説明する。
図１の例では、通信装置１００Ａの鍵管理部１０１は、暗号鍵ＫＡ，ａ−１、ＫＡ，ａ、ＫＡ，ａ＋１などを生成する。鍵記憶部１０２は、時刻ＴＡ１０１から時刻ＴＡ１０４の直前までは現在鍵ＫＡ，ａと旧鍵ＫＡ，ａ−１を記憶する。また、時刻ＴＡ１０４以降、鍵管理部１０１が次に暗号鍵の更新を行うまでは、鍵記憶部１０２は、現在鍵ＫＡ，ａ＋１と旧鍵ＫＡ，ａを記憶する。
【００９５】
そして、時刻ＴＡ１０２で通信装置１００Ａの受信部１０５が暗号文データＣ１０１を受信したときは、指示部１０３は、最新の暗号鍵である現在鍵ＫＡ，ａを選択暗号鍵として選択する。よって、メモリ１０４上に受信データ１１４のペイロードとして記憶されている暗号文データＣ１０１は、時刻ＴＡ１０３において復号部１０６により復号され、平文データＰ１０１で上書きされる。
【００９６】
この場合、判断部１０７は、平文データＰ１０１の特徴値から、平文データＰ１０１が正常だと判断する。通信装置１００Ａの平文処理部１０９は、正常な平文データＰ１０１について実施形態に応じた適宜の処理を行う。
【００９７】
また、時刻ＴＡ１０５で通信装置１００Ａの受信部１０５が暗号文データＣ１０２を受信したときは、指示部１０３は、現在鍵ＫＡ，ａ＋１を選択暗号鍵として選択する。よって、メモリ１０４上に受信データ１１４のペイロードとして記憶されている暗号文データＣ１０２は、時刻ＴＡ１０６において復号部１０６により復号され、復号データＤ１０２で上書きされる。
【００９８】
この場合、判断部１０７は、復号データＤ１０２の特徴値から、復号データＤ１０２が正常な平文データではない（すなわち復号データＤ１０２が異常である）と判断する。そこで、判断部１０７による判断にしたがい、時刻ＴＡ１０７において再暗号化部１０８が、選択暗号鍵として選択されている現在鍵ＫＡ，ａ＋１を用いて復号データＤ１０２を暗号化する。その結果、メモリ１０４上の受信データ１１４のペイロードとして記憶されていた復号データＤ１０２は、暗号文データＣ１０２で上書きされる。
【００９９】
さらに、再暗号化後の時刻ＴＡ１０８では、指示部１０３が、選択暗号鍵として現在選択している現在鍵ＫＡ，ａ＋１とは異なる旧鍵ＫＡ，ａを選択暗号鍵として選択しなおし、暗号文データＣ１０２を復号するよう復号部１０６に命令する。すると、メモリ１０４上に受信データ１１４のペイロードとして記憶されている暗号文データＣ１０２は、復号部１０６により復号され、平文データＰ１０２で上書きされる。
【０１００】
この場合、判断部１０７は、平文データＰ１０２の特徴値から、平文データＰ１０２が正常だと判断する。そして、平文処理部１０９が平文データＰ１０２に対して適宜の処理を行う。
【０１０１】
ところで、以上説明したような、図３の通信装置１００自身が復号に用いる暗号鍵の管理と、他の通信装置１００からのデータの受信を契機とする処理のほかに、通信装置１００は、データの送信も行うことができる。以下では、送信に関わる各部の詳細について、図１の通信装置１００Ｂの例を参照しながら具体的に説明する。
【０１０２】
平文処理部１０９は、ペイロードが上記のように正しい平文データに復号された受信データ１１４を処理するだけでなく、他の通信装置１００に送信する対象のデータとして平文の送信データ１１５をメモリ１０４上に生成してもよい。例えば、図１の通信装置１００Ｂの平文処理部１０９は、時刻ＴＢ１０２において、平文データＰ１０１とヘッダを生成し、平文データＰ１０１とヘッダを含むＰＤＵを送信データ１１５としてメモリ１０４に格納し、ＰＤＵを暗号化するよう暗号化部１１１に命令する。
【０１０３】
すると、時刻ＴＢ１０３で暗号化部１１１は、メモリ１０４上に送信データ１１５のペイロードとして記憶されている平文データＰ１０１を暗号化する。具体的には、暗号化部１１１内の鍵認識部１１２は、暗号化に用いる暗号鍵ＫＡ，ａを認識することができるので、暗号化部１１１は、鍵認識部１１２が認識した暗号鍵ＫＡ，ａを用いて平文データＰ１０１を暗号化する。
【０１０４】
例えば、平文処理部１０９が平文データＰ１０１の送信先である通信装置１００ＡのアドレスＡｄｒＡを明示的に暗号化部１１１に通知することにより、暗号化部１１１は送信先のアドレスＡｄｒＡを認識することもできる。あるいは、暗号化部１１１がメモリ１０４上のヘッダから送信先の通信装置１００ＡのアドレスＡｄｒＡを読み取ってもよい。
【０１０５】
すると、暗号化部１１１内の鍵認識部１１２は、暗号化部１１１が送信先のアドレスとして認識したアドレスＡｄｒＡから、アドレスＡｄｒＡ宛てに送信する送信データ１１５のペイロードの暗号化に用いる暗号鍵を認識することができる。図１Ａの例では、鍵認識部１１２は、時刻ＴＢ１０３においては、「アドレスＡｄｒＡ宛てに送信する送信データ１１５のペイロードの暗号化に用いる暗号鍵は、暗号鍵ＫＡ，ａである」と認識する。よって、暗号化部１１１は、送信データ１１５のペイロードとして記憶されている平文データＰ１０１を、暗号鍵ＫＡ，ａを用いて暗号化する。
【０１０６】
その際、復号部１０６による復号や再暗号化部１０８による再暗号化と同様に、暗号化部１１１もメモリ１０４上の同一記憶領域への上書きを行う。つまり、暗号化部１１１は、送信データ１１５のペイロードとしてメモリ１０４上に記憶されている平文データＰ１０１を暗号化し、暗号化により得られる暗号文データＣ１０１によって平文データＰ１０１を上書きする。このような上書きにより、送信時においても、メモリ１０４の効率的な利用が可能となる。
【０１０７】
暗号化部１１１は、暗号化処理を終えると、送信データ１１５を送信するよう送信部１１３に命令する。例えば、時刻ＴＢ１０４では、送信部１１３が暗号化部１１１からの命令にしたがってメモリ１０４から送信データ１１５（すなわち暗号文データＣ１０１を含むＰＤＵのデータ）を読み出す。そして、送信部１１３は、ＰＤＵを通信装置１００Ａに宛てて送信する。
【０１０８】
以上のように動作する配送部１１０内の暗号化部１１１と送信部１１３により、メモリ１０４上に記憶される送信データ１１５は、ペイロードが暗号化された状態で送信先の他の通信装置１００へと配送される。
【０１０９】
続いて、図３の各部を実現するハードウェアの具体例について、図４を参照して説明する。図４は、第１実施形態の通信装置のハードウェア構成の例を示す図である。
図４に示すように、通信装置１００は、MicroProcessing Unit（ＭＰＵ）２０１を有する。また、通信装置１００は、有線物理層処理部２０２または無線処理部２０３の少なくとも一方を有する。通信装置１００はさらに、タイマＩＣ２０４と耐タンパ性Peripheral Interface Controllerマイクロコンピュータ（ＰＩＣマイコン）２０５を有してもよい。また、通信装置１００は、Dynamic Random Access Memory（ＤＲＡＭ）２０６とフラッシュメモリ２０７を有する。
【０１１０】
ＭＰＵ２０１と有線処理部２０２の間の接続インタフェースは、例えば、Media Independent Interface（ＭＩＩ）またはManagement Data Input/Output（ＭＤＩＯ）である（以下「ＭＩＩ／ＭＤＩＯ２０８」と表記する）。ＭＩＩとＭＤＩＯはいずれも、物理層とＭＡＣ副層との間のインタフェースである。
【０１１１】
また、タイマＩＣ２０４と耐タンパ性ＰＩＣマイコン２０５は、Inter-Integrated Circuit（Ｉ２Ｃ）バスまたはParallel Input/Output（ＰＩＯ）バス（以下「Ｉ２Ｃ／ＰＩＯバス２０９」と表記する）によりＭＰＵ２０１と接続されている。そして、無線処理部２０３とＤＲＡＭ２０６とフラッシュメモリ２０７は、Peripheral Component Interconnect（ＰＣＩ）バス２１０によりＭＰＵ２０１と接続されている。
【０１１２】
通信装置１００において、ＭＰＵ２０１は、不揮発性記憶装置の１種であるフラッシュメモリ２０７上に格納されたファームウェアなどの種々のプログラムを、ＤＲＡＭ２０６上にロードして実行することで、様々な処理を行う。ＭＰＵ２０１が実行するプログラムの例は、例えば、耐タンパ性ＰＩＣマイコン２０５のドライバ、後述の図７の処理のためのプログラム、後述の図１０または図１２の処理のためのプログラムなどである。
【０１１３】
有線処理部２０２は、ケーブルを接続する物理ポートおよび有線接続における物理層の処理を行う回路を含むハードウェアである。また、無線処理部２０３は、無線接続における物理層とＭＡＣ副層の処理を行うハードウェアであり、例えば、アンテナ、アナログ・ディジタル変換器、ディジタル・アナログ変換器、変調器、復調器などを含む。
【０１１４】
タイマＩＣ２０４は、設定された時間が経過するまでカウントアップ動作を行い、設定された時間が経過すると割り込み信号を出力する回路である。また、耐タンパ性ＰＩＣマイコン２０５は、所定のアルゴリズムが組み込まれたマイコンである。当該所定のアルゴリズムは、耐タンパ性ＰＩＣマイコン２０５が耐タンパ性を有するので、外部から解析することができない。
【０１１５】
ＤＲＡＭ２０６は各種のデータを記憶し、フラッシュメモリ２０７は上記のとおり、ファームウェアプログラムなどを記憶する。フラッシュメモリ２０７は、通信装置１００自身のIdentification（ＩＤ）やＭＡＣアドレスなど、通信装置１００自身に固有の情報をさらに記憶していてもよい。また、実施形態に応じて通信装置１００は、フラッシュメモリ２０７の代わりに、あるいはフラッシュメモリ２０７とともに、Read Only Memory（ＲＯＭ）またはハードディスク装置などの他の不揮発性記憶装置を有していてもよい。
【０１１６】
また、プログラムは、フラッシュメモリ２０７またはその他の不揮発性記憶装置に予めインストールされていてもよい。あるいは、プログラムは、アドホックネットワーク１４０などのネットワークからダウンロードされて、フラッシュメモリ２０７またはその他の不揮発性記憶装置に格納されてもよい。
【０１１７】
もちろん、実施形態によっては、通信装置１００がさらに、コンピュータ読み取り可能な記憶媒体の駆動装置を有してもよい。その場合、プログラムは、記憶媒体からフラッシュメモリ２０７またはその他の不揮発性記憶装置へとコピーされてもよい。記憶媒体としては、半導体メモリカード、Compact Disc（ＣＤ）やDigital Versatile Disk（ＤＶＤ）などの光ディスク、光磁気ディスク、磁気ディスクなどが利用可能である。
【０１１８】
図４を参照して以上説明したような各種ハードウェアにより、図３の各部が実現される。
例えば、図３の鍵管理部１０１は、通信装置１００自身が復号に用いる暗号鍵を生成し、鍵記憶部１０２の記憶内容を更新するアルゴリズムが組み込まれた耐タンパ性ＰＩＣマイコン２０５と、暗号鍵を更新する間隔が設定されたタイマＩＣ２０４により実現されてもよい。あるいは、鍵管理部１０１は、通信装置１００自身が復号に用いる暗号鍵を生成し、鍵記憶部１０２の記憶内容を更新するためのプログラムを実行するＭＰＵ２０１と、暗号鍵を更新する間隔が設定されたタイマＩＣ２０４により実現されてもよい。もちろん、ＭＰＵ２０１は、タイマＩＣ２０４からの信号によってではなく、内部クロックによって時刻を認識し、暗号鍵を更新するタイミングを認識してもよい。
【０１１９】
なお、通信装置１００自身が復号に用いる暗号鍵は、通信装置１００が送信するデータの内容や応用分野に応じて、通信装置１００ごとに異なる通信装置１００に固有の暗号鍵の場合もあるし、複数の通信装置１００間で共通の暗号鍵の場合もある。第１実施形態はどちらの場合にも適用可能である。
【０１２０】
また、鍵記憶部１０２は、耐タンパ性ＰＩＣマイコン２０５内のＲＡＭにより実現されてもよいし、ＤＲＡＭ２０６により実現されてもよい。あるいは、不図示の他の耐タンパ性メモリを通信装置１００がさらに備え、当該耐タンパ性メモリが鍵記憶部１０２を実現してもよい。
【０１２１】
そして、指示部１０３と復号部１０６と判断部１０７と再暗号化部１０８と平文処理部１０９は、プログラムを実行するＭＰＵ２０１により実現される。もちろん、ＭＰＵ２０１の代わりに各部を実現する専用のハードウェア回路が使われてもよい。例えば、復号部１０６は専用の復号回路により実現されてもよいし、再暗号化部１０８は専用の暗号化回路により実現されてもよい。
【０１２２】
また、メモリ１０４は、ＤＲＡＭ２０６により実現される。そして、受信部１０５と送信部１１３は、有線処理部２０２または無線処理部２０３の少なくとも一方と、プログラムを実行するＭＰＵ２０１により実現される。
【０１２３】
暗号化部１１１は、例えば、送信データ１１５のペイロードを暗号化するためのプログラムを実行するＭＰＵ２０１または専用の暗号化回路を含む。そして、暗号化部１１１内の鍵認識部１１２は、以下のようなハードウェアにより実現されてもよい。
【０１２４】
例えば、鍵認識部１１２は、他の通信装置１００が復号に用いる暗号鍵を生成して管理するためのプログラムを実行するＭＰＵ２０１と、他の通信装置１００が復号に用いる暗号鍵を更新する間隔が設定されたタイマＩＣ２０４を含んでもよい。もちろん、他の通信装置１００が復号に用いる暗号鍵を生成して管理するハードウェアは、ＭＰＵ２０１ではなく耐タンパ性ＰＩＣマイコン２０５でもよい。
【０１２５】
または、鍵認識部１１２は、他の通信装置１００から暗号鍵の通知を受信する有線処理部２０２または無線処理部２０３を含んでもよい。その場合、鍵認識部１１２は、受信した通知から他の通信装置１００が復号に用いる暗号鍵を認識し、他の通信装置１００が復号に用いる暗号鍵に関する記憶内容の更新を行うためのプログラムを実行するＭＰＵ２０１を含む。
【０１２６】
なお、他の通信装置１００が復号に用いる暗号鍵は、当該他の通信装置１００に固有の暗号鍵の場合もあるし、複数の通信装置１００間で共通の暗号鍵の場合もある。第１実施形態はどちらの場合にも適用可能である。
【０１２７】
さらに、鍵認識部１１２は、他の通信装置１００が復号に用いる暗号鍵を記憶するハードウェアとして、ＤＲＡＭ２０６または耐タンパ性ＰＩＣマイコン２０５内のＲＡＭを含む。あるいは、不図示の他の耐タンパ性メモリを通信装置１００がさらに備え、当該耐タンパ性メモリが、他の通信装置１００が復号に用いる暗号鍵を記憶するハードウェアとして使われてもよい。
【０１２８】
以上、図４と図３を比較しながら説明したように、通信装置１００は実施形態に応じて適宜のハードウェアにより実現することができる。続いて、通信装置１００が用いるデータについて、図５〜６を参照して説明し、その後、図７〜１３を参照して通信装置１００が行う処理について説明する。
【０１２９】
図５は、第１実施形態の通信装置が記憶するデータの一例を示す図である。具体的には、図５には、図１の通信装置１００Ａの鍵記憶部１０２と鍵認識部１１２が記憶するデータが例示されている。
【０１３０】
図５に示す鍵記憶部１０２は、鍵管理部１０１が生成した最新の第ａ世代の暗号鍵ＫＡ，ａを現在鍵として記憶し、鍵管理部１０１が以前に生成した第（ａ−１）世代の暗号鍵ＫＡ，ａ−１を旧鍵として記憶する。つまり、図５は、図１の時刻ＴＡ１０１以降、時刻ＴＡ１０４の直前までの期間の鍵記憶部１０２の状態を示す。なお、上記のとおり、鍵管理部１０１は暗号鍵を繰り返し生成し、鍵記憶部１０２の記憶内容を更新する。
【０１３１】
また、図５に示す鍵認識部１１２は、通信装置１００Ａとの間で鍵が確立している他の通信装置１００の暗号鍵を、アドレスと対応づけて記憶する。図５の例は、具体的には、図２の通信装置１００Ｂ、１００Ｃ、１００Ｄなどが復号に用いる暗号鍵を通信装置１００Ａの鍵認識部１１２が認識している場合の例である。
【０１３２】
この場合、通信装置１００Ａの鍵認識部１１２は、通信装置１００ＢのアドレスＡｄｒＢと対応づけて通信装置１００Ｂの最新の暗号鍵ＫＢ，ｂを記憶する。同様に、鍵認識部１１２は、通信装置１００ＣのアドレスＡｄｒＣと対応づけて通信装置１００Ｃの最新の暗号鍵ＫＣ，ｃを記憶し、通信装置１００ＤのアドレスＡｄｒＤと対応づけて通信装置１００Ｄの最新の暗号鍵ＫＤ，ｄを記憶する。もちろん、通信装置１００Ａの鍵認識部１１２は、さらに別の通信装置１００についても、アドレスと暗号鍵の組を記憶していてもよい。
【０１３３】
なお、通信装置１００Ａの鍵認識部１１２が、他の通信装置１００Ｂ、１００Ｃ、１００Ｄなどの最新の暗号鍵を認識する方法は任意である。
例えば、通信装置１００Ｂが新たな暗号鍵ＫＢ，ｂ＋１を通信装置１００Ａに通知してもよい。その場合、通信装置１００Ａの鍵認識部１１２は、通信装置１００Ｂからの通知により通信装置１００Ｂの暗号鍵の更新を認識し、アドレスＡｄｒＢに対応する暗号鍵を現在の第ｂ世代の暗号鍵ＫＢ，ｂから新たな第（ｂ＋１）世代の暗号鍵ＫＢ，ｂ＋１に更新する。
【０１３４】
あるいは、通信装置１００Ａの鍵認識部１１２は、通信装置１００Ｂと通信することなく、例えば時刻の経過にしたがって、通信装置１００Ｂの暗号鍵ＫＢ，ｂの更新のタイミングを認識してもよい。その場合、通信装置１００Ａの鍵認識部１１２は、通信装置１００Ｂの暗号鍵ＫＢ，ｂの更新のタイミングを認識すると、新たな暗号鍵ＫＢ，ｂ＋１を生成し、アドレスＡｄｒＢに対応する暗号鍵を現在の暗号鍵ＫＢ，ｂから新たな暗号鍵ＫＢ，ｂ＋１に更新する。
【０１３５】
以上のように、鍵認識部１１２は、送信先の他の通信装置１００のアドレスと対応づけて当該他の通信装置１００の暗号鍵を記憶し、暗号鍵の更新を適宜のタイミングで行う。
なお、各通信装置１００が復号に用いる暗号鍵が異なる場合は、鍵認識部１１２は、図５に示すように、個々の通信装置１００を識別するアドレスと対応づけて暗号鍵を記憶する。しかし、実施形態によっては、複数の通信装置１００が復号に用いる暗号鍵が共通であってもよい。例えば、アドホックネットワーク１４０内のすべての通信装置１００が共通の暗号鍵を用いる実施形態も可能である。その場合、鍵認識部１１２は、単に鍵記憶部１０２に記憶されている現在鍵を、送信データ１１５の暗号化用の暗号鍵として認識すればよく、図５のようにアドレス別に暗号鍵を記憶する必要はない。
【０１３６】
さて、図６は、第１実施形態において送受信されるデータの形式を説明する図である。以下では説明の便宜上、図１の例と同様に、通信装置１００Ｂが通信装置１００Ａにデータを送信する場合を具体例として挙げながら図６について説明する。
【０１３７】
通信装置１００Ｂの平文処理部１０９は、平文のボディ３０１を生成し、通信プロトコルに応じたヘッダ３０２を生成し、ボディ３０１から特徴値３０３を計算する。そして、平文処理部１０９は、ヘッダ３０２とボディ３０１と特徴値３０３を含む平文ＰＤＵ３０４をメモリ１０４に格納する。平文ＰＤＵ３０４のペイロードは、ボディ３０１と特徴値３０３の部分である。
【０１３８】
なお、特徴値３０３は、ボディ３０１の特徴を示す値であればよい。また、図６では説明の簡単化のためボディ３０１の末尾にまとめて特徴値３０３のデータが付加されているが、特徴値３０３のデータがボディ３０１内の複数箇所に分散して挿入されていてもよい。
【０１３９】
例えば、平文処理部１０９は、ボディ３０１の全部または一部から、ハッシュ関数により特徴値３０３を算出してもよい。つまり、特徴値３０３はハッシュ値でもよい。特徴値３０３の算出のためのハッシュ関数としては、例えば、メッセージ・ダイジェストまたはメッセージ完全性符号（Message Integrity Code；ＭＩＣ）の生成のために利用される任意のハッシュ関数が利用可能である。また、特徴値３０３は、ハッシュ値を固定の暗号鍵で暗号化することで得られる値でもよい。
【０１４０】
あるいは、平文処理部１０９は、ボディ３０１の全部または一部に対する誤り検出符号を特徴値３０３として算出してもよい。例えば、パリティ、チェックサム、Cyclic Redundancy Check（ＣＲＣ）などの誤り検出符号が特徴値３０３として利用可能である。また、誤り検出符号の中には誤り訂正符号も含まれるが、例えばハミング符号やリード・ソロモン符号などの誤り訂正符号も利用可能である。その場合、ボディ３０１が情報ビットに相当し、特徴値３０３は、情報ビットから算出される符号ビットに相当する。
【０１４１】
さて、平文処理部１０９は、特徴値３０３を含む平文ＰＤＵ３０４をメモリ１０４に格納すると、図３の送信データ１１５に相当する平文ＰＤＵ３０４に関して、ペイロードを暗号化するよう暗号化部１１１に命令する。その結果、平文のボディ３０１は暗号化されたボディ３０５に置き換わり、平文の特徴値３０３は暗号化された特徴値３０６に置き換わる。つまり、メモリ１０４上には、ヘッダ３０２と暗号化されたボディ３０５と暗号化された特徴値３０６を含む暗号文ＰＤＵ３０７が送信データ１１５として記憶される。
【０１４２】
そして、通信装置１００Ｂの送信部１１３は、暗号文ＰＤＵ３０７を通信装置１００Ａに送信する。例えば、図１の暗号文データＣ１０１は、暗号文ＰＤＵ３０７のペイロードの一例であり、暗号化されたボディ３０５と暗号化された特徴値３０６を含む。
【０１４３】
通信装置１００Ｂから送信された暗号文ＰＤＵ３０７は、通信装置１００Ａの受信部１０５において受信され、メモリ１０４上に格納される。すると、復号部１０６が現在鍵を用いて暗号文ＰＤＵ３０７のペイロード（すなわち暗号化されたボディ３０５と暗号化された特徴値３０６）を復号する。
【０１４４】
その結果、メモリ１０４には、ヘッダ３０２と復号されたボディ３０８と復号された特徴値３０９を含む復号ＰＤＵ３１０が記憶された状態となる。そこで、判断部１０７は、復号されたボディ３０８をメモリ１０４から読み出し、復号されたボディ３０８から特徴値３１１を算出する。なお、復号されたボディ３０８から判断部１０７が特徴値３１１を算出するアルゴリズムは、ボディ３０１から平文処理部１０９が特徴値３０３を算出するアルゴリズムと同じである。
【０１４５】
そして、判断部１０７は、算出した特徴値３１１を、復号された特徴値３０９と比較する。もし、算出した特徴値３１１と復号された特徴値３０９が一致すれば、判断部１０７は、「復号ＰＤＵ３１０のペイロードは正常な平文データである」と判断する。
【０１４６】
逆に、算出した特徴値３１１と復号された特徴値３０９が一致しなければ、判断部１０７は、「復号ＰＤＵ３１０のペイロードは異常である」と判断する。換言すれば、判断部１０７は、「暗号文ＰＤＵ３０７の暗号化に使われたのは現在鍵ではなく旧鍵だった」と推測する。
【０１４７】
そこで、判断部１０７は、復号ＰＤＵ３１０のペイロードを暗号化するよう再暗号化部１０８に命令する。すると、再暗号化部１０８は、現在鍵で復号ＰＤＵ３１０のペイロードを暗号化し、メモリ１０４上に暗号文ＰＤＵ３０７を復元する。なお、再暗号化部１０８は、暗号化の処理が終了すると、暗号化の終了を指示部１０３に通知する。
【０１４８】
よって、指示部１０３は、再暗号化部１０８からの通知を契機として選択暗号鍵を現在鍵から旧鍵に切り換え、暗号文ＰＤＵ３０７のペイロードを復号するよう復号部１０６に命令する。復号部１０６による復号の後は、上記と同様にして再度判断部１０７による判断が行われ、正常な平文データが得られていれば、平文処理部１０９が正常な平文データを処理する。
【０１４９】
さて、続いて図７〜１３を参照して、以上説明した通信装置１００の動作についてさらに詳しく説明する。
図７は、第１実施形態の通信装置がデータの受信を契機として行う受信処理のフローチャートである。なお、受信部１０５は、ＰＤＵを受信すると、受信したＰＤＵのデータをメモリ１０４に受信データ１１４として格納するので、図７の受信処理が開始される時点で、メモリ１０４には受信データ１１４が記憶されている。
【０１５０】
また、通信プロトコルによっては、他の通信装置１００宛のＰＤＵが物理的に受信されることもあるが、その場合、受信部１０５は、図７の受信処理を開始する前に、受信したＰＤＵのヘッダから、宛先が通信装置１００自身であるか否かを判断する。そして、受信部１０５は、宛先が通信装置１００自身ではない場合は受信データ１１４を破棄し、宛先が通信装置１００自身の場合に図７の受信処理を開始する。
【０１５１】
ステップＳ１０１で受信部１０５は、受信データ１１４として記憶したＰＤＵが、固定されていない暗号鍵により暗号化される種類のＰＤＵであるか否かを、ヘッダから判断する。
【０１５２】
受信したＰＤＵが、固定されていない暗号鍵により暗号化される種類のＰＤＵである場合、受信部１０５は、受信データ１１４のペイロードを復号するよう復号部１０６に命令し、処理はステップＳ１０２に移行する。また、受信したＰＤＵが他の種類のＰＤＵである場合、処理はステップＳ１１３に移行する。
【０１５３】
なお、第１実施形態は、ヘッダにＰＤＵの種類を示すフィールドがある例である。しかし、例えば、すべての種類のＰＤＵが、固定されていない暗号鍵により暗号化されるような実施形態においては、ステップＳ１０１と後述のステップＳ１１３は省略可能である。
【０１５４】
ステップＳ１０２で復号部１０６は、受信部１０５からの命令にしたがい、受信データ１１４のペイロードを復号する。具体的には、復号部１０６は、どの暗号鍵が選択暗号鍵であるかという情報を指示部１０３から得て、選択暗号鍵を鍵記憶部１０２から読み出し、選択暗号鍵を用いて受信データ１１４のペイロードを復号する。
【０１５５】
なお、指示部１０３は、通信装置１００に電源が入れられた初期状態では、選択暗号鍵として現在鍵を選択する。また、図７の処理はＰＤＵの受信のたびに行われるが、ステップＳ１０５とＳ１１１に関して後述するとおり、指示部１０３は、図７の処理を終了する時点では、デフォルトの選択暗号鍵である現在鍵を選択暗号鍵として選択している。よって、ステップＳ１０２の時点では、選択暗号鍵は現在鍵である。
【０１５６】
したがって、ステップＳ１０２において復号部１０６は、まず指示部１０３から「選択暗号鍵は現在鍵である」という情報を得て、鍵記憶部１０２から現在鍵を読み出し、現在鍵を用いて受信データ１１４のペイロードを復号する。なお、復号部１０６は、ステップＳ１０２における復号の際に、上記のとおり、受信データ１１４のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
【０１５７】
復号部１０６は、復号を終えると、復号の完了を判断部１０７に通知する。そして、処理はステップＳ１０３に移行する。
ステップＳ１０３では、復号部１０６からの通知を受けた判断部１０７が、復号部１０６が復号したデータから特徴値を取り出す。つまり、判断部１０７は、メモリ１０４から図６の復号された特徴値３０９を読み出す。
【０１５８】
そして、次のステップＳ１０４で判断部１０７は、復号部１０６が復号したデータのボディから特徴値を計算する。つまり、判断部１０７は、メモリ１０４から図６の復号されたボディ３０８を読み出し、復号されたボディ３０８から所定のアルゴリズムにしたがって特徴値３１１を計算する。なお、ステップＳ１０３とステップＳ１０４は、逆順に実行されてもよいし、並行して実行されてもよい。
【０１５９】
続いて、ステップＳ１０５で判断部１０７は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
２つの特徴値が一致する場合、判断部１０７は、「ステップＳ１０２で復号されてメモリ１０４上に記憶されている受信データ１１４のペイロードは、正常な平文データである」と判断する。この場合、判断部１０７は、メモリ１０４上の受信データ１１４の処理を行うよう平文処理部１０９に命令する。
【０１６０】
２つの特徴値が一致する場合はさらに、判断部１０７が、次のＰＤＵの受信に備えて選択暗号鍵をリセットするよう、指示部１０３に命令してもよい。そして、指示部１０３はデフォルトの選択暗号鍵である現在鍵を改めて選択暗号鍵として選択しなおしてもよい。もちろん、ステップＳ１０５の時点での選択暗号鍵は現在鍵なので、このような明示的な選択暗号鍵のリセットは省略可能である。そして、２つの特徴値が一致する場合、処理はステップＳ１０６に移行する。
【０１６１】
他方、２つの特徴値が一致しない場合、判断部１０７は、「ステップＳ１０２で復号されてメモリ１０４上に記憶されている受信データ１１４のペイロードは、異常である」と判断する。この場合、判断部１０７は、メモリ１０４上の受信データ１１４のペイロードを再暗号化して受信データ１１４を元の状態に戻すよう、再暗号化部１０８に命令する。つまり、判断部１０７は、再暗号化部１０８に対して、選択暗号鍵に基づいて復号部１０６が復号した復号データをメモリ１０４から読み出して、復号データを選択暗号鍵に基づいて暗号化した暗号化データをメモリ１０４に上書きするように、命令を出す。そして、処理はステップＳ１０７に移行する。
【０１６２】
ステップＳ１０６で平文処理部１０９は、復号部１０６が復号したＰＤＵを処理する。つまり、平文処理部１０９は、ペイロードが正常な平文に復号されて受信データ１１４としてメモリ１０４に記憶されているデータを読み出し、適宜の処理を行う。そして、図７の処理は終了する。
【０１６３】
なお、ステップＳ１０６における処理の種類は実施形態に応じて任意であるが、例えば、センサネットワークとして使われるアドホックネットワーク１４０内のノードとして通信装置１００が使われる場合は、平文処理部１０９は、次のような処理を行ってもよい。
【０１６４】
例えば、図２の通信装置１００Ａが通信装置１００ＥからＰＤＵを受信したとする。また、実施形態に応じた適宜のアルゴリズムにより、通信装置１００Ａは経路に関して次のように認識しているとする。すなわち、通信装置１００Ａは、「アドホックネットワーク１４０内での最終的な宛先がゲートウェイ装置１２０であるＰＤＵを受信したら、受信したＰＤＵを通信装置１００Ｄに転送するのが適切である」と認識しているとする。
【０１６５】
この場合、通信装置１００Ａの平文処理部１０９は、通信装置１００Ｅまたは不図示の他の通信装置１００がセンサから得たデータを含む受信データ１１４のペイロードを、送信データ１１５のペイロードとして用いることを決定する。例えば、平文処理部１０９は、転送先の通信装置１００ＤのアドレスＡｄｒＤを受信データ１１４のヘッダに上書きすることで、受信データ１１４の記憶領域に上書きして送信データ１１５を生成してもよい。送信データ１１５の用意が整うと、平文処理部１０９は、送信データ１１５を暗号化するよう暗号化部１１１に命令する。
【０１６６】
すると、転送先の通信装置１００ＤのアドレスＡｄｒＤと対応づけて鍵認識部１１２が認識している暗号鍵ＫＤ，ｄを用いて、暗号化部１１１が送信データ１１５を暗号化し、送信部１１３が送信データ１１５を送信する。その結果、通信装置１００Ｅまたは不図示の他の通信装置１００がセンサから得たデータを含むＰＤＵは、通信装置１００Ａから通信装置１００Ｄへと転送される。
【０１６７】
もちろん、実施形態によっては、上記のような転送処理以外の処理がステップＳ１０６で行われてもよい。例えば、受信データ１１４や送信データ１１５がデータリンク層のＰＤＵのデータである場合、平文処理部１０９は、ネットワーク層より上層のレイヤのプロトコルにしたがったデータ処理を行ってもよい。あるいは、受信データ１１４や送信データ１１５がネットワーク層のＰＤＵのデータである場合、平文処理部１０９は、トランスポート層より上層のレイヤのプロトコルにしたがったデータ処理を行ってもよい。
【０１６８】
さて、ステップＳ１０７では、復号部１０６が復号したデータを再暗号化部１０８が現在鍵で再暗号化する。具体的には、再暗号化部１０８は、まず指示部１０３から「選択暗号鍵は現在鍵である」という情報を得る。そして、再暗号化部１０８は、鍵記憶部１０２から現在鍵を読み出し、現在鍵を用いて受信データ１１４のペイロードを暗号化する。
【０１６９】
なお、再暗号化部１０８は、ステップＳ１０７における暗号化の際に、上記のとおり、受信データ１１４のペイロードを、暗号化したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
【０１７０】
そして、再暗号化部１０８は、暗号化を終えると、暗号化の終了を指示部１０３に通知する。すると、指示部１０３は、現在選択している選択暗号鍵とは異なる暗号鍵である旧鍵を選択暗号鍵として選択しなおし、受信データ１１４のペイロードを復号するよう復号部１０６に命令する。
【０１７１】
続いて、ステップＳ１０８で復号部１０６は、再暗号化部１０８が再暗号化したデータを旧鍵で復号する。具体的には、復号部１０６は、まず指示部１０３から「選択暗号鍵は旧鍵である」という情報を得る。そして、復号部１０６は、鍵記憶部１０２から旧鍵を読み出し、旧鍵を用いて受信データ１１４のペイロードを復号する。
【０１７２】
なお、復号部１０６は、ステップＳ１０８における復号の際にも、ステップＳ１０２と同様に、受信データ１１４のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
【０１７３】
そして、復号部１０６は、復号を終えると、復号の完了を判断部１０７に通知する。すると、処理はステップＳ１０９に移行する。
ステップＳ１０９で判断部１０７は、ステップＳ１０３と同様に、復号部１０６が復号したデータから特徴値を取り出す。
【０１７４】
また、次のステップＳ１１０で判断部１０７は、ステップＳ１０４と同様に、復号部１０６が復号したデータのボディから特徴値を計算する。なお、ステップＳ１０９とＳ１１０は、逆順に実行されてもよいし、並行して実行されてもよい。
【０１７５】
続いて、ステップＳ１１１で判断部１０７は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
２つの特徴値が一致する場合、判断部１０７は、「ステップＳ１０８で復号されてメモリ１０４上に記憶されている受信データ１１４のペイロードは、正常な平文データである」と判断する。この場合、判断部１０７は、メモリ１０４上の受信データ１１４の処理を行うよう平文処理部１０９に命令する。
【０１７６】
２つの特徴値が一致する場合はさらに、判断部１０７が、次のＰＤＵの受信に備えて選択暗号鍵をリセットするよう、指示部１０３に命令する。すると、指示部１０３は、選択暗号鍵として現在鍵を選択しなおす。よって、次のＰＤＵが受信されて再度図７の処理が開始される時点での選択暗号鍵は、現在鍵となる。以上のように平文処理部１０９への命令と選択暗号鍵の切り換えが行われると、処理はステップＳ１０６に移行する。
【０１７７】
他方、２つの特徴値が一致しない場合、判断部１０７は、「ステップＳ１０８で復号されてメモリ１０４上に記憶されている受信データ１１４のペイロードは、異常である」と判断する。ステップＳ１１１において２つの特徴値が一致しない場合とは、受信したＰＤＵのペイロードを現在鍵で復号しても旧鍵で復号しても正しい平文データが得られないという場合である。よって、この場合、判断部１０７は、「何らかのエラーが生じた」と判断する。
【０１７８】
また、第１実施形態では、鍵記憶部１０２は現在鍵と旧鍵という２つの世代の暗号鍵のみを保持しているので、試す対象となる他の世代の暗号鍵は、これ以上は存在しない。そこで、２つの特徴値が一致しない場合も、判断部１０７は、次のＰＤＵの受信に備えて選択暗号鍵をリセットするよう、指示部１０３に命令する。すると、指示部１０３は、選択暗号鍵として現在鍵を選択しなおす。よって、次のＰＤＵが受信されて再度図７の処理が開始される時点での選択暗号鍵は、現在鍵となる。以上のようにエラー発生の認識と選択暗号鍵の切り換えが行われると、処理はステップＳ１１２に移行する。
【０１７９】
なお、判断部１０７は、「再暗号化部１０８への再暗号化の命令を発した後、初めて復号部１０６から復号の終了を通知された場合は、旧鍵による復号の結果を検証する場合である」と認識することができる。逆に、判断部１０７は、「再暗号化部１０８への再暗号化の命令を発した後の初めての復号の終了の通知でなければ、現在鍵による復号の結果を検証する場合である」と認識することができる。
【０１８０】
よって、判断部１０７は、選択暗号鍵がいずれの暗号鍵であるのかという情報を指示部１０３から明示的に得なくても、適正にふるまうことができる。つまり、判断部１０７は、受信データ１１４のペイロードを再暗号化するよう再暗号化部１０８に命令すればよいか、それともエラー発生を認識すればよいかを、指示部１０３からの明示的な情報なしに認識することができる。もちろん、判断部１０７は、選択暗号鍵がいずれの暗号鍵であるのかという情報を指示部１０３から明示的に得てもよい。
【０１８１】
ステップＳ１１２では、判断部１０７が適宜のエラー処理を行う。あるいは、判断部１０７は不図示のエラー処理部に対してエラー処理を行うよう命令してもよい。エラー処理の具体的内容は任意である。例えば、エラー処理は、単に受信データ１１４の記憶領域を解放する処理でもよいし、送信元の他の通信装置１００に対してＰＤＵの再送を要求する処理でもよい。エラー処理の実行後、図７の処理も終了する。
【０１８２】
ところで、ステップＳ１０１において、「受信したＰＤＵは、固定されていない暗号鍵により暗号化される種類のＰＤＵではない」と受信部１０５が判断した場合、ステップＳ１１３では、受信したＰＤＵの種類に応じた適宜の処理が行われる。
【０１８３】
なお、ステップＳ１１３における処理の主体、処理の内容、およびＰＤＵの種類は実施形態に応じて任意である。例えば、固定された暗号鍵により暗号化される制御用ＰＤＵが受信された場合、不図示の制御用ＰＤＵ処理部がステップＳ１１３の処理を行ってもよい。例えば、時刻同期用のＰＤＵは、アドホックネットワーク１４０内で固定された暗号鍵によって暗号化されているかもしれない。その場合、ステップＳ１１３では時刻同期処理が行われてもよい。あるいは、まったく暗号化されずに送信されるＰＤＵが受信された場合、平文処理部１０９がステップＳ１１３の処理を行ってもよい。いずれにしろ、ＰＤＵの種類に応じた適宜の処理が行われ、図７の処理も終了する。
【０１８４】
続いて、図８と９を参照して、メモリの節約についてより詳しく説明する。
図８は、第１実施形態におけるメモリ上のデータの変遷の例を模式的に説明する図である。また、図９は、比較例におけるメモリ上のデータの変遷の例を模式的に説明する図である。
【０１８５】
なお、図８と図９において、黒い背景は暗号文を示し、実線の枠のついた白い背景は正しい平文を示す。また、破線の枠のついた白い背景は、暗号化されたときとは異なる暗号鍵により復号された結果として得られる異常なデータを示す。
【０１８６】
さて、通信装置１００が用いる暗号の種類は、対称鍵暗号である。また、通信装置１００が用いる暗号の種類を別の観点から述べれば、通信装置１００は、ストリーム暗号を使ってもよいし、ブロック暗号を使ってもよい。
【０１８７】
すなわち、暗号化および復号の対象となるデータ単位の長さが平文と暗号文の間で等しく、データ単位の並び順が平文と暗号文の間で変わらなければ、どのような種類の暗号でも各実施形態において利用可能である。ストリーム暗号の場合は、暗号化および復号の対象となるデータ単位は１ビットあるいは１バイトである。ブロック暗号の場合は、暗号化および復号の対象となるデータ単位はブロックである。以下では説明の便宜上、ストリーム暗号が使われる場合について主に説明する。
【０１８８】
また、以下では“０ｘ”という接頭辞が１６進数を示すものとする。そして、４バイトのペイロードを含むＰＤＵが受信された場合を例にして、図８を参照してステップＳ１０２とＳ１０７とＳ１０８におけるメモリ１０４上の領域の上書きについて説明する。なお、図８と図９では、復号と暗号化の進捗の様子が、４ビット分の処理が終わるごとの状態により模式的に示されている。
【０１８９】
例えば、図８の時刻ＴＡ２０１において、受信部１０５が、受信データ１１４のペイロードとして、メモリ１０４上に０ｘ０６ａｃ７９６３という暗号文データＣ２０１を格納したとする。
【０１９０】
すると、復号部１０６が図７のステップＳ１０２の復号を進めるにつれ、図８に時刻ＴＡ２０２〜ＴＡ２０９の状態として示すように、暗号文データＣ２０１において暗号化されているビットが先頭から順に現在鍵により復号されていく。そして、暗号化されたビットは、復号されたビットで上書きされる。よって、時刻ＴＡ２０９にステップＳ１０２の復号が終了すると、もともと暗号文データＣ２０１が記憶されていたメモリ１０４の記憶領域上には、復号により得られた復号データＤ２０１が記憶されている。図８の例では、復号データＤ２０１は０ｘ７ａ６０２５ｆ３である。
【０１９１】
このように、第１実施形態によれば、暗号文データＣ２０１が記憶されている記憶領域自体が復号データＤ２０１で上書きされるので、メモリの使用効率がよい。なお、ブロック暗号が使われる場合も、ストリーム暗号が使われる場合と同様に、復号データＤ２０１で暗号文データＣ２０１を上書きすることが可能である。すなわち、ブロック暗号が使われる場合でも、メモリ１０４上にブロックサイズ分の一時記憶領域さえあれば十分であり、暗号文データＣ２０１全体と復号データＤ２０１全体に対してそれぞれ別の記憶領域を割り当てる必要はない。
【０１９２】
また、ステップＳ１０２での復号だけでなく、ステップＳ１０７における再暗号化とステップＳ１０８における復号でも、同様の上書きが行われるので、第１実施形態ではメモリの使用効率がよい。
【０１９３】
具体的には、再暗号化部１０８がステップＳ１０７の再暗号化を進めるにつれ、図８に時刻ＴＡ２１０〜ＴＡ２１７の状態として示すように、復号データＤ２０１のビットが先頭から順に現在鍵により暗号化されていく。そして、復号データＤ２０１における各ビットは、暗号化されたビットで上書きされる。よって、時刻ＴＡ２１７にステップＳ１０７の再暗号化が終了すると、復号データＤ２０１が記憶されていたメモリ１０４の記憶領域上には、再暗号化により復元された暗号文データＣ２０１が記憶されている。
【０１９４】
そして、復号部１０６がステップＳ１０８の復号を進めるにつれ、図８に時刻ＴＡ２１８〜ＴＡ２２５の状態として示すように、暗号文データＣ２０１において暗号化されているビットが先頭から順に現在鍵により復号されていく。そして、暗号化されたビットは、復号されたビットで上書きされる。よって、時刻ＴＡ２２５にステップＳ１０８の復号が終了すると、もともと暗号文データＣ２０１が記憶されていたメモリ１０４の記憶領域上には、復号により得られた平文データＰ２０１が記憶されている。図８の例では、平文データＰ２０１は０ｘ３６５ａ６ｂｆ０である。
【０１９５】
以上のような上書きによるメモリ節約の効果は、図９の比較例と図８を比較すれば、より一層明らかである。図９の比較例では、時刻ＴＡ３０１において暗号文データＣ２０１がメモリ１０４に記憶されると、現在鍵による復号で正しい平文データが得られない場合の旧鍵による復号に備えて、暗号文データＣ２０１はそのままメモリ１０４に保持され続ける。つまり、時刻ＴＡ３０２〜ＴＡ３０９にかけて行われる復号においては、暗号文データＣ２０１の記憶領域とは別の記憶領域に、現在鍵を用いた復号によって得られる復号データＤ２０１の各ビットが順に書き込まれてゆく。
【０１９６】
そして、復号データＤ２０１においてボディの部分（例えば最初の３バイトの０ｘ７ａ６０２５）から算出される特徴値と、復号データＤ２０１に含まれる特徴値（例えば最後の１バイトの０ｘｆ３）が比較される。比較結果から、復号データＤ２０１が正常な平文データではないと判断されると、図９の比較例においては、復号データＤ２０１とは別の記憶領域に記憶されている暗号文データＣ２０１が、旧鍵によって復号される。
【０１９７】
旧鍵による復号の結果は、例えば、不要な復号データＤ２０１が記憶されている記憶領域に上書きされてもよいが、それでも図８の第１実施形態の例と比較すると、図９の比較例では余計な記憶領域が消費される。すなわち、時刻ＴＡ３１０〜ＴＡ３１７にかけて行われる旧鍵による復号において、暗号文データＣ２０１の記憶領域とは別の記憶領域に平文データＰ２０１の各ビットが順に書き込まれてゆく。
【０１９８】
なお、第１実施形態と図９の比較例を比べると、再暗号化にかかる時間と消費される記憶領域がトレードオフの関係にあることが見て取れる。しかし、例えばセンサネットワークへの適用などの何らかの理由により、メモリ１０４の容量が非常に限定されている場合には、たとえ再暗号化に少々時間を使ってでも、記憶領域を節約しつつ旧鍵での復号を可能にする第１実施形態が好適である。
【０１９９】
また、暗号化および復号が、プログラムを実行するＭＰＵ２０１により行われるにしろ、ハードウェア回路により行われるにしろ、対称鍵暗号の暗号化および復号の処理速度は一般に高速である。よって、再暗号化にかかる時間は、多くの場合、無視しても構わない程度である。すなわち、処理時間と記憶容量がトレードオフの関係にあるとは言っても、センサネットワークなどのある種の環境においては、記憶領域の容量削減の方が再暗号化にかかる時間の短縮よりも強いインパクトを持つ。もちろん、第１実施形態の通信装置１００は、センサネットワーク内の通信装置に限定されるわけではないが、通信装置１００は例えばセンサネットワーク内の通信装置として好適である。
【０２００】
以上、図７〜９を参照して、通信装置１００がＰＤＵの受信を契機として行う処理について説明したが、通信装置１００はＰＤＵの受信とは独立した処理も行う。すなわち、通信装置１００は暗号鍵の更新も行う。そこで、以下では、暗号鍵の更新に関する２つの処理方法を、図１０〜１３を参照して説明する。
【０２０１】
図１０は、第１実施形態において通信装置が行う暗号鍵更新処理のフローチャートである。また、図１１は、暗号鍵更新処理にともなうデータの変遷の例を模式的に説明する図である。なお、図１１は、通信装置１００Ａにおいて現在鍵が第ａ世代の暗号鍵ＫＡ，ａである場合を具体例として説明する図である。
【０２０２】
ステップＳ２０１で鍵管理部１０１は、暗号鍵を更新する時刻になるまで待機する。そして、暗号鍵を更新する時刻になったと鍵管理部１０１が判断すると、処理はステップＳ２０２に移行する。
【０２０３】
例えば、暗号鍵を更新する間隔がタイマＩＣ２０４に予め設定されている場合、暗号鍵を更新する間隔ごとにタイマＩＣ２０４は割り込み信号を出力してもよい。そして、ＭＰＵ２０１または耐タンパ性ＰＩＣマイコン２０５により実現される鍵管理部１０１は、割り込み信号の検出を契機に、ステップＳ２０１からステップＳ２０２への移行を認識してもよい。
【０２０４】
ステップＳ２０２で鍵管理部１０１は、新たな暗号鍵を生成してメモリ１０４上の一時記憶領域に記憶する。例えば、図１１に例示するように、通信装置１００Ａにおいて、鍵記憶部１０２に記憶されている現在鍵が第ａ世代の暗号鍵ＫＡ，ａであり、旧鍵が第（ａ−１）世代の暗号鍵ＫＡ，ａ−１であるとする。すると、ステップＳ２０２で鍵管理部１０１は、次の第（ａ＋１）世代の新たな暗号鍵ＫＡ，ａ＋１を生成して一時記憶領域に記憶する。
【０２０５】
そして、次のステップＳ２０３で鍵管理部１０１は、鍵記憶部１０２が記憶している現在鍵を旧鍵として記憶する。図１１の例では、鍵管理部１０１は、鍵記憶部１０２において現在鍵ＫＡ，ａを旧鍵のフィールドにコピーする。
【０２０６】
さらに、次のステップＳ２０４で鍵管理部１０１は、生成した新たな暗号鍵を現在鍵として鍵記憶部１０２に記憶する。図１１の例では、鍵管理部１０１は、一時記憶領域に記憶した新たな暗号鍵ＫＡ，ａ＋１を、鍵記憶部１０２の現在鍵のフィールドにコピーする。その結果、鍵記憶部１０２は、現在鍵として新たな暗号鍵ＫＡ，ａ＋１を記憶するとともに、旧鍵として、直前まで現在鍵であった暗号鍵ＫＡ，ａを記憶する状態となる。
【０２０７】
そして、ステップＳ２０４の実行後、処理はステップＳ２０１に戻る。
なお、通信装置１００が他の通信装置１００との間で鍵配送により暗号鍵を確立する場合には、通信装置１００は、ステップＳ２０２、Ｓ２０３またはＳ２０４の後に、生成した新たな暗号鍵を他の通信装置１００に配送する。鍵配送にかかる時間は、通信装置１００内部での鍵記憶部１０２の更新にかかる時間よりも長いので、通信装置１００は、ステップＳ２０４で鍵記憶部１０２内の現在鍵を更新する前に（例えばステップＳ２０２の直後に）新たな暗号鍵を配送してもよい。
【０２０８】
ところで、図１０の暗号鍵更新処理は、図７のステップＳ１１２のエラー処理の実行頻度を減らすことを目的として、図１２のように変形されてもよい。以下では、変形された暗号鍵更新処理について、まず図１２と図１３を参照して処理の流れを説明し、その後、利点について説明する。
【０２０９】
図１２は、暗号鍵更新処理の変形例を示すフローチャートである。また、図１３は、図１２のように変形された暗号鍵更新処理にともなうデータの変遷の例を模式的に説明する図である。なお、図１１と同様に図１３も、通信装置１００Ａにおいて現在鍵が第ａ世代の暗号鍵ＫＡ，ａである場合を具体例として説明する図である。
【０２１０】
ステップＳ３０１で鍵管理部１０１は、暗号鍵を更新する時刻になるまで待機する。そして、暗号鍵を更新する時刻になったと鍵管理部１０１が判断すると、処理はステップＳ３０２に移行する。つまり、ステップＳ３０１はステップＳ２０１と同様である。
【０２１１】
ステップＳ３０２で鍵管理部１０１は、新たな暗号鍵を生成してメモリ１０４上の一時記憶領域に記憶する。例えば、図１３に例示するように、通信装置１００Ａにおいて、鍵記憶部１０２に記憶されている現在鍵が第ａ世代の暗号鍵ＫＡ，ａであり、旧鍵が第（ａ−１）世代の暗号鍵ＫＡ，ａ−１であるとする。すると、ステップＳ３０２で鍵管理部１０１は、次の第（ａ＋１）世代の新たな暗号鍵ＫＡ，ａ＋１を生成して一時記憶領域に記憶する。
【０２１２】
そして、次のステップＳ３０３で鍵管理部１０１は、現在鍵をメモリ１０４上の一時記憶領域（正確には、ステップＳ３０２で新たな暗号鍵を記憶したのとは別の一時記憶領域）にコピーする。図１３の例では、鍵管理部１０１は、現在鍵ＫＡ，ａをメモリ１０４上の一時記憶領域にコピーする。
【０２１３】
さらに、次のステップＳ３０４で鍵管理部１０１は、生成した新たな暗号鍵を現在鍵として鍵記憶部１０２に記憶する。図１３の例では、鍵管理部１０１は、一時記憶領域に記憶した新たな暗号鍵ＫＡ，ａ＋１を、鍵記憶部１０２の現在鍵のフィールドにコピーする。
【０２１４】
そして、次のステップＳ３０５で鍵管理部１０１は、ステップＳ３０３で一時記憶領域にコピーした現在鍵を旧鍵として鍵記憶部１０２に記憶する。図１３の例では、鍵管理部１０１は、一時記憶領域に記憶した暗号鍵ＫＡ，ａを、鍵記憶部１０２の旧鍵のフィールドにコピーする。その結果、鍵記憶部１０２は、現在鍵として新たな暗号鍵ＫＡ，ａ＋１を記憶するとともに、旧鍵として、直前まで現在鍵であった暗号鍵ＫＡ，ａを記憶する状態となる。
【０２１５】
そして、ステップＳ３０５の実行後、処理はステップＳ３０１に戻る。なお、通信装置１００が他の通信装置１００との間で鍵配送により暗号鍵を確立する場合には、通信装置１００は、図１０の場合と同様に、ステップＳ３０２、Ｓ３０３、Ｓ３０４またはＳ３０５の後に、生成した新たな暗号鍵を他の通信装置１００に配送する。また、この図１２の暗号鍵更新処理では、ステップＳ３０２とＳ３０３の実行順は逆でもよいし、ステップＳ３０２とＳ３０３が並列に実行されてもよい。
【０２１６】
さて、以上の図１２のように変形された暗号鍵更新処理は、鍵記憶部１０２の更新中に鍵記憶部１０２が参照される場合にも、なるべく旧鍵による復号から正しい平文データが得られるように工夫されている。つまり、図１２の暗号鍵更新処理は、「更新前の現在鍵ＫＡ，ａによる復号と再暗号化の後、復号部１０６が再度復号を行う際に読み出す旧鍵が、最初の復号のときに用いた暗号鍵ＫＡ，ａと同じ」といった事態になるべく陥らないよう、工夫されている。具体的には、鍵記憶部１０２の更新のための一連のステップＳ３０２〜Ｓ３０５の中で、更新前の旧鍵ＫＡ，ａ−１が更新されるステップＳ３０５が最後になるように、図１２では暗号鍵更新処理が変形されている。
【０２１７】
なお、実施形態によっては、鍵管理部１０１は、ステップＳ２０２〜Ｓ２０４の実行中またはステップＳ３０２〜Ｓ３０５の実行中には、復号部１０６や再暗号化部１０８からの鍵記憶部１０２への参照をブロックしてもよい。
【０２１８】
続いて、図１４〜２０を参照して第２実施形態について説明する。第２実施形態では２種類の暗号鍵が利用される。そして、第１実施形態では上記のとおり通信装置１００間の鍵確立の方法が任意であるが、第２実施形態では２種類の暗号鍵について異なる２つの方法で鍵確立が行われる。
【０２１９】
具体的には、１種類目の暗号鍵は、通信装置同士が同じアルゴリズムにしたがって生成することにより通信装置間で確立される暗号鍵であり、複数の通信装置で共通して暗号化および復号に用いる暗号鍵である。以下では１種類目の暗号鍵を「共通鍵」という。そして、２種類目の暗号鍵は、各通信装置に固有の暗号鍵であり、以下では「アクセス鍵」という。通信装置間でのアクセス鍵の確立は、鍵配送によってなされる。また、第２実施形態では、アクセス鍵はアプリケーションデータの暗号化に用いられ、共有鍵はアクセス鍵の配送のための暗号化に用いられる。
【０２２０】
以下では説明の便宜上、通信装置自身が生成したアクセス鍵を「内部由来（internally-originated）アクセス鍵」と称し、他の通信装置から配送されたアクセス鍵を「外部由来（externally-originated）アクセス鍵」と称する。
【０２２１】
例えば、第１と第２の通信装置がアクセス鍵を互いに配送しあう場合、第１の通信装置が生成したアクセス鍵は、第１の通信装置にとっては内部由来アクセス鍵だが、第２の通信装置にとっては外部由来アクセス鍵である。同様に、第２の通信装置が生成したアクセス鍵は、第１の通信装置にとっては外部由来アクセス鍵だが、第２の通信装置にとっては内部由来アクセス鍵である。
【０２２２】
さて、図１４は、第２実施形態の通信装置のブロック構成図である。なお、図１４の通信装置４００も、例えば図４に示した各種ハードウェアにより実現することができる。
通信装置４００は鍵管理部４０１を有する。そして、鍵管理部４０１は共通鍵管理部４０２と内部由来アクセス鍵管理部４０３と外部由来アクセス鍵管理部４０４を有する。
【０２２３】
共通鍵管理部４０２は、第１実施形態の鍵管理部１０１の具体例の１つでもあり、鍵認識部１１２の一部の機能も有する。具体的には、共通鍵管理部４０２は、時刻に対して一意な値を求める処理を行うことにより、暗号鍵の１種として共通鍵を生成する鍵生成部として動作するとともに、暗号化鍵としての共通鍵も認識する。
【０２２４】
また、内部由来アクセス鍵管理部４０３は鍵管理部１０１の具体例の１つである。すなわち、内部由来アクセス鍵管理部４０３は、暗号鍵の１種として、通信装置４００事態に固有の暗号鍵である内部由来アクセス鍵を生成する鍵生成部としても動作する。
【０２２５】
そして、外部由来アクセス鍵管理部４０４は鍵認識部１１２の具体例の１つであり、外部由来アクセス鍵を他の通信装置４００と対応づけて管理する。
また、内部由来アクセス鍵管理部４０３は、平文処理部１０９の具体例の１つでもあり、内部由来アクセス鍵を含む平文の送信データ１１５を作成する。そして、外部由来アクセス鍵管理部４０４は、平文処理部１０９の具体例の１つでもあり、外部由来アクセス鍵を含む平文の受信データ１１４を処理して外部由来アクセス鍵を抽出する。
【０２２６】
なお、共通鍵管理部４０２と内部由来アクセス鍵管理部４０３は、図４のＭＰＵ２０１により実現されてもよいし、耐タンパ性ＰＩＣマイコン２０５により実現されてもよい。なお、共通鍵管理部４０２と内部由来アクセス鍵管理部４０３には、例えば図４のタイマＩＣ２０４により実現される後述の時計４２５から、暗号鍵の更新間隔ごとに割り込み信号が入力されてもよい。外部由来アクセス鍵管理部４０４は、ＭＰＵ２０１により実現することができる。
【０２２７】
また、通信装置４００は鍵記憶部４０５を有する。そして、鍵記憶部４０５は共通鍵記憶部４０６と内部由来アクセス鍵記憶部４０７と外部由来アクセス鍵記憶部４０８を有する。
【０２２８】
共通鍵記憶部４０６は、第１実施形態において復号鍵を記憶する鍵記憶部１０２の機能と、鍵認識部１１２の一部の機能（すなわち暗号化鍵を認識する機能）を有する。また、内部由来アクセス鍵記憶部４０７は、復号鍵を記憶する鍵記憶部１０２の機能を有する。そして、外部由来アクセス鍵記憶部４０８は、鍵認識部１１２の一部の機能（すなわち暗号化鍵を認識する機能）を有する。
【０２２９】
なお、鍵記憶部４０５内の各部は、ＤＲＡＭ２０６により実現されてもよいし、耐タンパ性ＰＩＣマイコン２０５内のＲＡＭにより実現されてもよい。あるいは、通信装置４００が耐タンパ性メモリをハードウェアとして含む場合は、鍵記憶部４０５内の各部は、当該耐タンパ性メモリにより実現されてもよい。
【０２３０】
さらに、通信装置４００は指示部４０９を有する。指示部４０９は、第１実施形態の指示部１０３の具体例の１つである。すなわち、指示部４０９は、復号および再暗号化にどの暗号鍵を用いるのかを認識する。なお、指示部４０９は、ＭＰＵ２０１により実現されてもよい。
【０２３１】
また、通信装置４００は、第１実施形態のメモリ１０４および受信部１０５とそれぞれ類似のメモリ４１０および受信部４１１を有する。メモリ４１０はＤＲＡＭ２０６により実現され、受信部４１１は有線処理部２０２と無線処理部２０３少なくとも一方と、ＭＰＵ２０１によって実現される。
【０２３２】
そして、通信装置４００は復号部４１２を有する。復号部４１２は、いずれも第１実施形態の復号部１０６の具体例に相当する受信データ復号部４１３および外部由来アクセス鍵復号部４１４を有する。なお、復号部４１２内の各部は、プログラムを実行するＭＰＵ２０１により実現されてもよいし、専用の復号回路により実現されてもよい。
【０２３３】
また、物理的には１つの復号回路が、入力信号に応じて、あるときは受信データ復号部４１３として機能し、あるときは外部由来アクセス鍵復号部４１４として機能してもよい。同様に、１つの同じ復号アルゴリズムのプログラムモジュールが、引数に応じて、あるときはＭＰＵ２０１を受信データ復号部４１３として機能させ、あるときはＭＰＵ２０１を外部由来アクセス鍵復号部４１４として機能させてもよい。
【０２３４】
さらに、通信装置４００は判断部４１５を有する。判断部４１５は、いずれも第１実施形態の判断部１０７の具体例に相当する外部由来アクセス鍵判断部４１６と受信データ判断部４１７を有する。判断部４１５内の各部は、例えばＭＰＵ２０１により実現される。
【０２３５】
さらに、通信装置４００は暗号化部４１８を有する。暗号化部４１８は、いずれも第１実施形態の再暗号化部１０８の具体例に相当する外部由来アクセス鍵再暗号化部４１９と受信データ再暗号化部４２０を有する。さらに暗号化部４１８は、いずれも第１実施形態の暗号化部１１１における暗号化の機能を有する送信データ暗号化部４２１と内部由来アクセス鍵暗号化部４２２を有する。なお、暗号化部４１８内の各部は、プログラムを実行するＭＰＵ２０１により実現されてもよいし、専用の暗号化回路により実現されてもよい。
【０２３６】
また、物理的には１つの暗号化回路が、入力信号に応じて、外部由来アクセス鍵再暗号化部４１９、受信データ再暗号化部４２０、送信データ暗号化部４２１、内部由来アクセス鍵暗号化部４２２のいずれかとして機能してもよい。同様に、１つの同じ暗号化アルゴリズムのプログラムモジュールが、引数に応じて、ＭＰＵ２０１を暗号化部４１８内の各部のうちの１つとして機能させてもよい。
【０２３７】
そして、通信装置４００は、第１実施形態の平文処理部１０９の具体例の１つに相当するデータ処理部４２３を有する。データ処理部４２３は、ペイロードが平文の状態になった受信データ１１４を処理する平文処理部１０９の具体例でもあり、他の通信装置１００に送信する平文の送信データ１１５を生成するデータ生成部としての平文処理部１０９の具体例でもある。なお、データ処理部４２３は、ＭＰＵ２０１により実現されてもよい。
【０２３８】
さらに、通信装置４００は、第１実施形態の送信部１１３と同様の機能を有する送信部４２４を有する。送信部４２４は、有線処理部２０２と無線処理部２０３少なくとも一方と、ＭＰＵ２０１によって実現される。なお、第２実施形態では、内部由来アクセス鍵管理部４０３と内部由来アクセス鍵暗号化部４２２と送信部４２４が協働して、内部由来アクセス鍵を他の通信装置４００に通知する内部由来アクセス鍵配送部として動作する。内部由来アクセス鍵配送部は、暗号鍵を他の通信装置に通知する通知部の一例である。
【０２３９】
そして、通信装置４００は時計４２５も有する。時計４２５はタイマＩＣ２０４により実現されてもよい。あるいは、ＭＰＵ２０１がクロック信号に基づいて時計４２５として機能してもよい。
【０２４０】
また、図１４には、メモリ４１０内に記憶される受信データ４２６と送信データ４２７と外部由来アクセス鍵配送データ４２８と内部由来アクセス鍵配送データ４２９も図示されている。なお、第２実施形態においても、暗号化と復号の際には第１実施形態と同様の記憶領域の上書きが行われる。よって、メモリ４１０内に示した各データのペイロードは、正しい平文の状態のときもあるし、暗号文の状態のときもあるし、暗号化されたときとは異なる暗号鍵によって復号された状態のときもある。
【０２４１】
以上のように、第２実施形態における通信装置４００の各部は、第１実施形態における通信装置１００の各部と同じか類似の機能を有する。そこで、通信装置４００の各部の詳細な動作については、ここでは説明を割愛し、後述のフローチャートとともに説明することにする。なお、図１４の通信装置４００は、図２のアドホックネットワーク１４０において通信装置１００Ａ〜１００Ｌの代わりに用いられてもよいし、ゲートウェイ装置１２０が通信装置４００の各部を備えていてもよい。
【０２４２】
さて、図１５は、第２実施形態の通信装置が記憶するデータの一例を示す図である。
図１５には、ある通信装置４００の共通鍵記憶部４０６と内部由来アクセス鍵記憶部４０７と外部由来アクセス鍵記憶部４０８が記憶するデータが例示されている。
【０２４３】
図１５に示す共通鍵記憶部４０６は、共通鍵管理部４０２が生成した最新の第γ世代の共通鍵ＳＫγを現在共通鍵として記憶する。さらに、共通鍵記憶部４０６は、共通鍵管理部４０２が以前に生成した第（γ−１）世代の共通鍵ＳＫγ−１を旧共通鍵として記憶する。
【０２４４】
なお、現在共通鍵は第１実施形態における現在鍵の具体例の１つであり、旧共通鍵は第１実施形態における旧鍵の具体例の１つである。また、指示部４０９は、「選択共通鍵」として、現在共通鍵または旧共通鍵の一方を選択する。
【０２４５】
そして、図１５に示す内部由来アクセス鍵記憶部４０７は、内部由来アクセス鍵管理部４０３が生成した最新の第ａ世代の内部由来アクセス鍵ＡＫＡ，ａを現在内部由来アクセス鍵として記憶する。さらに、内部由来アクセス鍵記憶部４０７は、内部由来アクセス鍵管理部４０３が以前に生成した第（ａ−１）世代の内部由来アクセス鍵ＡＫＡ，ａ−１を旧内部由来アクセス鍵として記憶する。
【０２４６】
なお、現在内部由来アクセス鍵は第１実施形態における現在鍵の具体例の１つであり、旧内部由来アクセス鍵は第１実施形態における旧鍵の具体例の１つである。また、指示部４０９は、「選択内部由来アクセス鍵」として、現在内部由来アクセス鍵または旧内部由来アクセス鍵の一方を選択する。
【０２４７】
そして、図１５に示す外部由来アクセス鍵記憶部４０８は、当該通信装置４００との間で鍵が確立している他の通信装置４００のアクセス鍵を、アドレスと対応づけて記憶する。なお、アドレスは、他の通信装置４００を一意に識別する識別情報の一例である。また、第１実施形態と同様に第２実施形態も、様々な通信プロトコルに適用可能である。よって、外部由来アクセス鍵記憶部４０８が記憶するアドレスのレイヤも、適用対象の通信プロトコルのレイヤに応じて様々であってよく、例えば、ＭＡＣアドレスやＩＰアドレスなどが利用可能である。
【０２４８】
具体的には、図１５の例では、外部由来アクセス鍵記憶部４０８は、アドレスＡｄｒＢが割り当てられた他の通信装置４００から配送された最新の外部由来アクセス鍵ＡＫＢ，ｂを、アドレスＡｄｒＢと対応づけて記憶する。同様に、外部由来アクセス鍵記憶部４０８は、アドレスＡｄｒＣが割り当てられた他の通信装置４００から配送された最新の外部由来アクセス鍵ＡＫＣ，ｃを、アドレスＡｄｒＣと対応づけて記憶する。さらに、外部由来アクセス鍵記憶部４０８は、アドレスＡｄｒＤが割り当てられた他の通信装置４００から配送された最新の外部由来アクセス鍵ＡＫＤ，ｄを、アドレスＡｄｒＤと対応づけて記憶する。
【０２４９】
図１６は、第２実施形態の通信装置がデータの受信を契機として行う受信処理のフローチャートである。なお、受信部４１１は、ＰＤＵを受信すると、受信したＰＤＵのデータをメモリ４１０に格納するので、図１６の処理が開始される時点で、メモリ４１０には受信したＰＤＵのデータが記憶されている。
【０２５０】
また、通信プロトコルによっては、他の通信装置４００宛のＰＤＵが物理的に受信されることもあるが、その場合、受信部４１１は、図１６の受信処理を開始する前に、受信したＰＤＵのヘッダから、宛先が通信装置４００自身であるか否かを判断する。そして、受信部４１１は、宛先が通信装置４００自身ではない場合は受信したＰＤＵのデータを破棄し、宛先が通信装置４００自身の場合に図１６の受信処理を開始する。
【０２５１】
ステップＳ４０１で受信部４１１は、メモリ４１０を参照して、受信したＰＤＵの種類を判定する。なお、第２実施形態では、ヘッダにＰＤＵの種類を示すフィールドがある。よって、受信部４１１は、種類を示すフィールドの値を参照することで、ＰＤＵの種類を判定することができる。
【０２５２】
受信したＰＤＵがアクセス鍵の配布用ＰＤＵである場合、通信装置４００が受信したアクセス鍵の配布用ＰＤＵのデータとは、具体的には図１４の外部由来アクセス鍵配送データ４２８である。よって、この場合に受信部４１１は、外部由来アクセス鍵配送データ４２８のペイロードを復号するよう外部由来アクセス鍵復号部４１４に命令し、処理はステップＳ４０２に移行する。
【０２５３】
なお、アクセス鍵の配布用ＰＤＵは、図６の暗号文ＰＤＵ３０７の１種である。アクセス鍵の配布用ＰＤＵにおける暗号化されたボディ３０５は、暗号文ＰＤＵ３０７を送信する通信装置４００にとっての内部由来アクセス鍵を含むデータを共通鍵で暗号化したデータである。
【０２５４】
あるいは、受信したＰＤＵがアクセス鍵で暗号化されるＰＤＵである場合、通信装置４００が受信したＰＤＵのデータとは、具体的には図１４の受信データ４２６である。よって、この場合に受信部４１１は、受信データ４２６のペイロードを復号するよう受信データ復号部４１３に命令し、処理はステップＳ４０３に移行する。
【０２５５】
また、受信したＰＤＵが上記２種類のいずれでもない場合、処理はステップＳ４０４に移行する。
例えば、図２のアドホックネットワーク１４０において、通信装置１００Ａ〜１００Ｌの代わりに複数の通信装置４００が用いられてもよく、通信装置４００同士は、アドホックネットワーク１４０内で予め固定された暗号鍵を使って時刻同期の制御用ＰＤＵをやりとりしてもよい。あるいは、通信装置４００同士は、特定の種類のＰＤＵを暗号化せずにやりとりしてもよい。このように、予め固定された暗号鍵によりペイロードが暗号化されるＰＤＵや、ペイロードがクリアテキストのＰＤＵなどが受信された場合、処理はステップＳ４０４に移行する。
【０２５６】
さて、ステップＳ４０２で通信装置４００は、図１７に示す外部由来アクセス鍵更新処理を行う。そして、図１６の受信処理は終了する。
また、ステップＳ４０３で通信装置４００は、図１８に示す暗号化ＰＤＵ受信処理を行う。そして、図１６の受信処理は終了する。
【０２５７】
また、ステップＳ４０４で通信装置４００は、受信したＰＤＵの種類に応じた適宜の処理を行う。そして、ＰＤＵの種類に応じた処理が終了すると、図１６の受信処理も終了する。
【０２５８】
なお、ステップＳ４０４における処理の主体、処理の内容、およびＰＤＵの種類は実施形態に応じて任意である。例えば、ステップＳ４０１に関して例示した時刻同期の制御用ＰＤＵが受信された場合、ステップＳ４０４では、不図示の制御用ＰＤＵ処理部が、時計４２５を必要に応じて修正する時刻同期処理を行ってもよい。
【０２５９】
図１７は、第２実施形態において通信装置が行う外部由来アクセス鍵更新処理のフローチャートである。なお、図１７の処理において、第１実施形態の図７の受信処理と類似する点については、適宜説明を省略する。
【０２６０】
ステップＳ５０１で外部由来アクセス鍵復号部４１４は、受信部４１１からの命令にしたがい、外部由来アクセス鍵配送データ４２８のペイロードを復号する。具体的には、外部由来アクセス鍵復号部４１４は、まず現在共通鍵と旧共通鍵のどちらが選択共通鍵として選択されているかという情報を指示部４０９から得る。そして、外部由来アクセス鍵復号部４１４は、選択共通鍵を共通鍵記憶部４０６から読み出し、選択共通鍵を用いて外部由来アクセス鍵配送データ４２８のペイロードを復号する。
【０２６１】
なお、指示部４０９は、通信装置４００に電源が入れられた初期状態では、選択共通鍵として現在共通鍵を選択する。また、図１７の処理は、アクセス鍵の配布用ＰＤＵの受信のたびに行われるが、ステップＳ５０４とＳ５０８とＳ５１３に関して後述するとおり、指示部４０９は、図１７の処理を終了する時点では、現在共通鍵を選択共通鍵として選択している。よって、ステップＳ５０１の時点では、選択共通鍵は現在共通鍵である。
【０２６２】
したがって、ステップＳ５０１において外部由来アクセス鍵復号部４１４は、まず指示部４０９から「選択共通鍵は現在共通鍵である」という情報を得る。そして、外部由来アクセス鍵復号部４１４は、共通鍵記憶部４０６から現在共通鍵を読み出し、現在共通鍵を用いて外部由来アクセス鍵配送データ４２８のペイロードを復号する。
【０２６３】
なお、外部由来アクセス鍵復号部４１４は、ステップＳ５０１における復号の際に、第１実施形態の復号部１０６と同様に、外部由来アクセス鍵配送データ４２８のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
【０２６４】
外部由来アクセス鍵復号部４１４は、復号を終えると、復号の完了を外部由来アクセス鍵判断部４１６に通知する。そして、処理はステップＳ５０２に移行する。
ステップＳ５０２では、外部由来アクセス鍵復号部４１４からの通知を受けた外部由来アクセス鍵判断部４１６が、外部由来アクセス鍵復号部４１４が復号したデータから特徴値を取り出す。
【０２６５】
そして、次のステップＳ５０３で外部由来アクセス鍵判断部４１６は、外部由来アクセス鍵復号部４１４が復号したデータのボディから特徴値を計算する。なお、ステップＳ５０２とＳ５０３は、逆順に実行されてもよいし、並行して実行されてもよい。
【０２６６】
続いて、ステップＳ５０４で外部由来アクセス鍵判断部４１６は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
２つの特徴値が一致する場合、外部由来アクセス鍵判断部４１６は、「ステップＳ５０１で復号されてメモリ４１０上に記憶されている外部由来アクセス鍵配送データ４２８のペイロードは、正常な平文データである」と判断する。この場合、外部由来アクセス鍵判断部４１６は、配送された外部由来アクセス鍵を抽出して外部由来アクセス鍵記憶部４０８に登録する処理を、メモリ４１０上の外部由来アクセス鍵配送データ４２８を用いて行うよう、外部由来アクセス鍵管理部４０４に命令する。
【０２６７】
２つの特徴値が一致する場合はさらに、外部由来アクセス鍵判断部４１６が、アクセス鍵の配布用ＰＤＵの次の受信に備えて選択共通鍵をリセットするよう、指示部４０９に命令し、指示部４０９が改めて現在共通鍵を選択共通鍵として選択しなおしてもよい。なお、図７のステップＳ１０５と同様、このような明示的なリセットは省略可能である。そして、２つの特徴値が一致する場合、処理はステップＳ５０５に移行する。
【０２６８】
他方、２つの特徴値が一致しない場合、外部由来アクセス鍵判断部４１６は、「ステップＳ５０１で復号されてメモリ４１０上に記憶されている外部由来アクセス鍵配送データ４２８のペイロードは、異常である」と判断する。そして、処理はステップＳ５０８に移行する。
【０２６９】
ステップＳ５０５〜Ｓ５０７で外部由来アクセス鍵管理部４０４は、外部由来アクセス鍵復号部４１４が復号した外部由来アクセス鍵配送データ４２８を参照し、配送された外部由来アクセス鍵を抽出して外部由来アクセス鍵記憶部４０８に登録する処理を行う。ステップＳ５０５〜Ｓ５０７における外部由来アクセス鍵管理部４０４は、第１実施形態における平文処理部１０９の１種として動作する。
【０２７０】
具体的には、ステップＳ５０５で外部由来アクセス鍵管理部４０４は、メモリ４１０を参照し、受信したＰＤＵのヘッダから送信元アドレスを取り出す。つまり、外部由来アクセス鍵管理部４０４は、図６の復号ＰＤＵ３１０の状態でメモリ４１０に記憶されている外部由来アクセス鍵配送データ４２８から、ヘッダ３０２に含まれる送信元アドレスを取り出す。
【０２７１】
そして、次のステップＳ５０６で外部由来アクセス鍵管理部４０４は、外部由来アクセス鍵復号部４１４が復号したデータから外部由来アクセス鍵を取り出す。つまり、外部由来アクセス鍵管理部４０４は、図６の復号ＰＤＵ３１０の状態でメモリ４１０に記憶されている外部由来アクセス鍵配送データ４２８から、復号されたボディ３０８に含まれる外部由来アクセス鍵を取り出す。なお、ステップＳ５０５とＳ５０６は、逆順で実行されてもよいし、並行して実行されてもよい。
【０２７２】
続いて、ステップＳ５０７で外部由来アクセス鍵管理部４０４は、ステップＳ５０５で取り出した送信元アドレスと、ステップＳ５０６で取り出した外部由来アクセス鍵を、互いに対応づけて、外部由来アクセス鍵記憶部４０８に格納する。
【０２７３】
具体的には、外部由来アクセス鍵管理部４０４は、取り出した送信元アドレスを検索キーにして外部由来アクセス鍵記憶部４０８を検索する。検索の結果、取り出した送信元アドレスと一致するアドレスを持つエントリが見つかれば、外部由来アクセス鍵管理部４０４は、見つかったエントリにおける外部由来アクセス鍵を、ステップＳ５０６で取り出した外部由来アクセス鍵で上書きする。逆に、取り出した送信元アドレスと一致するアドレスを持つエントリが見つからなければ、外部由来アクセス鍵管理部４０４は、取り出した送信元アドレスと取り出した外部由来アクセス鍵を対応づける新たなエントリを外部由来アクセス鍵記憶部４０８に追加する。そして、図１７の処理は終了する。
【０２７４】
さて、ステップＳ５０４において２つの特徴値が一致しなかった場合、ステップＳ５０８で外部由来アクセス鍵判断部４１６は、現在時刻が旧共通鍵の有効期限内か否かを判断する。なお、第２実施形態において「現在時刻が旧共通鍵の有効期限内である」とは、「共通鍵の直近の更新から現在までに経過した時間が所定の許容時間（後述の図２０における“ＳＴ”）以内である」という意味である。
【０２７５】
なお、第２実施形態では、ネットワーク内の各通信装置４００が、同じ所定の間隔（後述の図２０における“ＳＩ”）でそれぞれ共通鍵を更新する。ステップＳ５０４で閾値として用いられる許容時間ＳＴは、共通鍵の更新間隔ＳＩよりも短い時間である。旧共通鍵の有効期限を外部由来アクセス鍵判断部４１６が認識する具体的方法は実施形態に応じて様々であってよいが、例えば以下のようにして外部由来アクセス鍵判断部４１６は旧共通鍵の有効期限を認識してもよい。
【０２７６】
例えば、時計４２５は、共通鍵の更新間隔ＳＩが経過するたびに共通鍵管理部４０２に共通鍵の更新の契機となる共通鍵更新タイミング信号を出力してもよい。共通鍵更新タイミング信号は、例えば割り込み信号でもよい。
【０２７７】
さらに、時計４２５は、共通鍵更新タイミング信号を出力してから許容時間ＳＴの間だけ、旧共通鍵が有効であることを示す旧共通鍵有効信号をアサート（assert）してもよい。つまり、時計４２５は、許容時間ＳＴの経過後、次に共通鍵更新タイミング信号を出力するまでの期間は、旧共通鍵有効信号をネゲート（negate）してもよい。すると、外部由来アクセス鍵判断部４１６は、時計４２５から出力される旧共通鍵有効信号から、現在時刻が旧共通鍵の有効期限内であるか否かを認識することができる。
【０２７８】
あるいは、外部由来アクセス鍵判断部４１６は、時計４２５から現在時刻を取得し、共通鍵を更新する基準時刻と共通鍵の更新間隔ＳＩと現在時刻を用いて、直近の共通鍵の更新時刻から現在までの経過時間を計算してもよい。そして、外部由来アクセス鍵判断部４１６は、計算した経過時間を閾値である許容時間ＳＴと比較し、計算した経過時間が許容時間ＳＴ以内ならば「現在時刻が旧共通鍵の有効期限内である」と判断してもよい。なお、この例に限らず、閾値との比較による判断は、実施形態により「閾値以下か、それとも閾値を超えるか」という判断でもよいし、「閾値未満か、それとも閾値以上か」という判断でもよく、適宜方針を定めることができる。
【０２７９】
そして、現在時刻が旧共通鍵の有効期限内である場合、外部由来アクセス鍵判断部４１６は、外部由来アクセス鍵配送データ４２８のペイロードを再暗号化して元の状態に戻すよう、外部由来アクセス鍵再暗号化部４１９に命令する。そして、処理はステップＳ５０９に移行する。
【０２８０】
他方、現在時刻が旧共通鍵の有効期限を過ぎている場合、外部由来アクセス鍵判断部４１６は、「図１７の処理の契機となったアクセス鍵の配布用ＰＤＵは、無効である」と判断する。そして、処理はステップＳ５１４に移行する。
【０２８１】
なお、処理がステップＳ５０８からステップＳ５１４に移行する場合、選択共通鍵は現在共通鍵のままである。もちろん、実施形態によっては、明示的に選択共通鍵のリセットが行われてもよい。
【０２８２】
また、ステップＳ５０９では、外部由来アクセス鍵復号部４１４が復号したデータを外部由来アクセス鍵再暗号化部４１９が再暗号化する。具体的には、外部由来アクセス鍵再暗号化部４１９は、まず指示部４０９から「選択共通鍵は現在共通鍵である」という情報を得る。そして、外部由来アクセス鍵再暗号化部４１９は、共通鍵記憶部４０６から現在共通鍵を読み出し、現在共通鍵を用いて外部由来アクセス鍵配送データ４２８のペイロードを暗号化する。
【０２８３】
なお、外部由来アクセス鍵再暗号化部４１９は、第１実施形態の再暗号化部１０８と同様に、暗号化の際に、外部由来アクセス鍵配送データ４２８のペイロードを、暗号化したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
【０２８４】
そして、外部由来アクセス鍵再暗号化部４１９は、暗号化を終えると、暗号化の終了を指示部４０９に通知する。すると、指示部４０９は、現在選択している選択共通鍵とは異なる共通鍵である旧共通鍵を選択共通鍵として選択しなおし、外部由来アクセス鍵配送データ４２８のペイロードを復号するよう外部由来アクセス鍵復号部４１４に命令する。
【０２８５】
続いて、ステップＳ５１０で外部由来アクセス鍵復号部４１４は、外部由来アクセス鍵再暗号化部４１９が再暗号化したデータを旧共通鍵で復号する。具体的には、外部由来アクセス鍵復号部４１４は、まず指示部４０９から「選択共通鍵は旧共通鍵である」という情報を得る。そして、外部由来アクセス鍵復号部４１４は、共通鍵記憶部４０６から旧共通鍵を読み出し、旧共通鍵を用いて外部由来アクセス鍵配送データ４２８のペイロードを復号する。
【０２８６】
なお、外部由来アクセス鍵復号部４１４は、ステップＳ５１０における復号の際にも、ステップＳ５０１と同様に、外部由来アクセス鍵配送データ４２８のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
【０２８７】
そして、外部由来アクセス鍵復号部４１４は、復号を終えると、復号の完了を外部由来アクセス鍵判断部４１６に通知する。すると、処理はステップＳ５１１に移行する。
ステップＳ５１１で外部由来アクセス鍵判断部４１６は、ステップＳ５０２と同様に、外部由来アクセス鍵復号部４１４が復号したデータから特徴値を取り出す。
【０２８８】
また、次のステップＳ５１２で外部由来アクセス鍵判断部４１６は、ステップＳ５０３と同様に、外部由来アクセス鍵復号部４１４が復号したデータのボディから特徴値を計算する。なお、ステップＳ５１１とＳ５１２は、逆順に実行されてもよいし、並行して実行されてもよい。
【０２８９】
続いて、ステップＳ５１３で外部由来アクセス鍵判断部４１６は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
２つの特徴値が一致する場合、外部由来アクセス鍵判断部４１６は、「ステップＳ５１０で復号されてメモリ４１０上に記憶されている外部由来アクセス鍵配送データ４２８のペイロードは、正常な平文データである」と判断する。この場合、外部由来アクセス鍵判断部４１６は、配送された外部由来アクセス鍵を外部由来アクセス鍵記憶部４０８に登録する処理を、メモリ４１０上の外部由来アクセス鍵配送データ４２８を用いて行うよう、外部由来アクセス鍵管理部４０４に命令する。
【０２９０】
２つの特徴値が一致する場合はさらに、外部由来アクセス鍵判断部４１６が、アクセス鍵の配布用ＰＤＵの次の受信に備えて選択共通鍵をリセットするよう、指示部４０９に命令する。そして、指示部４０９は現在共通鍵を選択共通鍵として選択しなおす。よって、アクセス鍵の配布用ＰＤＵが次に受信されて再度図１７の処理が開始される時点での選択共通鍵は、現在鍵となる。そして、以上のように選択共通鍵が選択しなおされると、処理はステップＳ５０５に移行する。
【０２９１】
他方、２つの特徴値が一致しない場合、外部由来アクセス鍵判断部４１６は、「ステップＳ５１０で復号されてメモリ４１０上に記憶されている外部由来アクセス鍵配送データ４２８は、異常であり、無効である」と判断する。
【０２９２】
また、第２実施形態では、共通鍵記憶部４０６は現在共通鍵と旧共通鍵という２つの世代の共通鍵のみを保持しているので、試す対象となる他の世代の共通鍵は、これ以上は存在しない。そこで、２つの特徴値が一致しない場合も、外部由来アクセス鍵判断部４１６は、アクセス鍵の配布用ＰＤＵの次の受信に備えて選択共通鍵をリセットするよう、指示部４０９に命令する。そして、指示部４０９は現在共通鍵を選択共通鍵として選択しなおし、処理はステップＳ５１４に移行する。
【０２９３】
また、ステップＳ５１４で外部由来アクセス鍵判断部４１６は、受信したＰＤＵを破棄する。例えば、外部由来アクセス鍵判断部４１６は、具体的にはメモリ４１０上の外部由来アクセス鍵配送データ４２８の記憶領域を解放することにより、受信したＰＤＵを破棄してもよい。そして、破棄が済むと図１７の処理も終わる。
【０２９４】
図１８は、第２実施形態において通信装置が行う暗号化パケット受信処理のフローチャートである。なお、図１８の処理において、第１実施形態の図７の受信処理と類似する点については、適宜説明を省略する。
【０２９５】
ステップＳ６０１で受信データ復号部４１３は、受信部４１１からの命令にしたがい、受信データ４２６のペイロードを復号する。具体的には、受信データ復号部４１３は、まず現在内部由来アクセス鍵と旧内部由来アクセス鍵のどちらが選択内部由来アクセス鍵として選択されているかという情報を指示部４０９から得る。そして、受信データ復号部４１３は、選択内部由来アクセス鍵を内部由来アクセス鍵記憶部４０７から読み出し、選択内部由来アクセス鍵を用いて受信データ４２６のペイロードを復号する。
【０２９６】
なお、指示部４０９は、通信装置４００に電源が入れられた初期状態では、選択内部由来アクセス鍵として現在内部由来アクセス鍵を選択する。また、図１８の処理は、アクセス鍵で暗号化されるＰＤＵの受信のたびに行われるが、ステップＳ６０４とＳ６０６とＳ６１１に関して後述するとおり、指示部４０９は、図１８の処理を終了する時点では、現在内部由来アクセス鍵を選択内部由来アクセス鍵として選択している。よって、ステップＳ６０１の時点では、選択内部由来アクセス鍵は現在内部由来アクセス鍵である。
【０２９７】
したがって、ステップＳ６０１において受信データ復号部４１３は、まず指示部４０９から「選択内部由来アクセス鍵は現在内部由来アクセス鍵である」という情報を得る。そして、受信データ復号部４１３は、内部由来アクセス鍵記憶部４０７から現在内部由来アクセス鍵を読み出し、現在内部由来アクセス鍵を用いて受信データ４２６のペイロードを復号する。
【０２９８】
なお、受信データ復号部４１３は、ステップＳ６０１における復号の際に、第１実施形態の復号部１０６と同様に、受信データ４２６のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
【０２９９】
受信データ復号部４１３は、復号を終えると、復号の完了を受信データ判断部４１７に通知する。そして、処理はステップＳ６０２に移行する。
ステップＳ６０２では、受信データ復号部４１３からの通知を受けた受信データ判断部４１７が、受信データ復号部４１３が復号したデータから特徴値を取り出す。
【０３００】
そして、次のステップＳ６０３で受信データ判断部４１７は、受信データ復号部４１３が復号したデータのボディから特徴値を計算する。なお、ステップＳ６０２とＳ６０３は、逆順に実行されてもよいし、並行して実行されてもよい。
【０３０１】
続いて、ステップＳ６０４で受信データ判断部４１７は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
２つの特徴値が一致する場合、受信データ判断部４１７は、「ステップＳ６０１で復号されてメモリ４１０上に記憶されている受信データ４２６のペイロードは正常な平文データである」と判断する。この場合、受信データ判断部４１７は、メモリ４１０上の受信データ４２６の処理を行うようデータ処理部４２３に命令する。
【０３０２】
２つの特徴値が一致する場合はさらに、受信データ判断部４１７が、アクセス鍵で暗号化されるＰＤＵの次の受信に備えて選択内部由来アクセス鍵をリセットするよう、指示部４０９に命令してもよい。そして、指示部４０９が改めて現在内部由来アクセス鍵を選択内部由来アクセス鍵として選択しなおしてもよい。なお、図７のステップＳ１０５と同様、このような明示的なリセットは省略可能である。そして、２つの特徴値が一致する場合、処理はステップＳ６０５に移行する。
【０３０３】
他方、２つの特徴値が一致しない場合、受信データ判断部４１７は、「ステップＳ６０１で復号されてメモリ４１０上に記憶されている受信データ４２６のペイロードは、異常である」と判断する。そして、処理はステップＳ６０６に移行する。
【０３０４】
ステップＳ６０５でデータ処理部４２３は、受信データ復号部４１３が復号したＰＤＵを処理する。つまり、データ処理部４２３は、ペイロードが正常な平文に復号されて受信データ４２６としてメモリ４１０に記憶されているＰＤＵのデータを読み出し、適宜の処理を行う。なお、ステップＳ６０５でデータ処理部４２３が行う処理は、任意であるが、第１実施形態のステップＳ１０６に関して例示したような処理でもよい。ステップＳ６０５でのデータ処理部４２３による処理が終了すると、図１８の処理も終了する。
【０３０５】
さて、ステップＳ６０４において２つの特徴値が一致しなかった場合、ステップＳ６０６で受信データ判断部４１７は、現在時刻が旧内部由来アクセス鍵の有効期限内か否かを判断する。なお、第２実施形態において「現在時刻が旧内部由来アクセス鍵の有効期限内である」とは、「内部由来アクセス鍵の直近の更新から現在までに経過した時間が所定の許容時間（後述の図２０における“ＡＴ”）以内である」という意味である。
【０３０６】
なお、第２実施形態では、通信装置４００は、所定の間隔（後述の図２０における“ＡＩ”）で内部由来アクセス鍵を更新する。アクセス鍵の更新間隔ＡＩは、前述の共通鍵の更新間隔ＳＩよりも短い。また、詳しくは図２０とともに後述するが、どの世代の共通鍵も、アクセス鍵の通知に２回以上利用されるようにするために、アクセス鍵の更新間隔ＡＩは、共通鍵の更新間隔ＳＩの半分以下であることが好ましい。
【０３０７】
そして、ステップＳ６０６で閾値として用いられる許容時間ＡＴは、内部由来アクセス鍵の更新間隔ＡＩよりも短い時間である。旧内部由来アクセス鍵の有効期限を受信データ判断部４１７が認識する具体的方法は実施形態に応じて様々であってよい。具体的には、受信データ判断部４１７は、図１７のステップＳ５０８に関して例示した、外部由来アクセス鍵判断部４１６が旧共通鍵の有効期限を認識するのと類似の方法により、旧内部由来アクセス鍵の有効期限を認識することができる。
【０３０８】
そして、現在時刻が旧内部由来アクセス鍵の有効期限内である場合、受信データ判断部４１７は、受信データ４２６のペイロードを再暗号化して元の状態に戻すよう、受信データ再暗号化部４２０に命令する。そして、処理はステップＳ６０７に移行する。
【０３０９】
他方、現在時刻が旧内部由来アクセス鍵の有効期限を過ぎている場合、受信データ判断部４１７は、「図１８の処理の契機となったＰＤＵのペイロードは、異常である」と判断する。この場合、受信データ判断部４１７は「何らかのエラーが生じた」と判断し、処理はステップＳ６１２に移行する。
【０３１０】
なお、処理がステップＳ６０６からステップＳ６１２に移行する場合、選択内部由来アクセス鍵は現在内部由来アクセス鍵のままである。もちろん、実施形態によっては、明示的に選択内部由来アクセス鍵のリセットが行われてもよい。
【０３１１】
また、ステップＳ６０７では、受信データ復号部４１３が復号したデータを受信データ再暗号化部４２０が再暗号化する。具体的には、受信データ再暗号化部４２０は、まず指示部４０９から「選択内部由来アクセス鍵は現在内部由来アクセス鍵である」という情報を得る。そして、受信データ再暗号化部４２０は、内部由来アクセス鍵記憶部４０７から現在内部由来アクセス鍵を読み出し、現在内部由来アクセス鍵を用いて受信データ４２６のペイロードを暗号化する。
【０３１２】
なお、受信データ再暗号化部４２０は、第１実施形態の再暗号化部１０８と同様に、暗号化の際に、受信データ４２６のペイロードを、暗号化したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
【０３１３】
そして、受信データ再暗号化部４２０は、暗号化を終えると、暗号化の終了を指示部４０９に通知する。すると、指示部４０９は、現在選択している選択内部由来アクセス鍵とは異なる内部由来アクセス鍵である旧内部由来アクセス鍵を選択内部由来アクセス鍵として選択しなおし、受信データ４２６のペイロードを復号するよう受信データ復号部４１３に命令する。
【０３１４】
続いて、ステップＳ６０８で受信データ復号部４１３は、受信データ再暗号化部４２０が再暗号化したデータを旧内部由来アクセス鍵で復号する。具体的には、受信データ復号部４１３は、まず指示部４０９から「選択内部由来アクセス鍵は旧由来アクセス鍵である」という情報を得る。そして、受信データ復号部４１３は、内部由来アクセス鍵記憶部４０７から旧内部由来アクセス鍵を読み出し、旧内部由来アクセス鍵を用いて受信データ４２６のペイロードを復号する。
【０３１５】
なお、受信データ復号部４１３は、ステップＳ６０８における復号の際にも、ステップＳ６０１と同様に、受信データ４２６のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
【０３１６】
そして、受信データ復号部４１３は、復号を終えると、復号の完了を受信データ判断部４１７に通知する。すると、処理はステップＳ６０９に移行する。
ステップＳ６０９で受信データ判断部４１７は、ステップＳ６０２と同様に、受信データ復号部４１３がが復号したデータから特徴値を取り出す。
【０３１７】
また、次のステップＳ６１０で受信データ判断部４１７は、ステップＳ６０３と同様に、受信データ復号部４１３が復号したデータのボディから特徴値を計算する。なお、ステップＳ５６０９とＳ６１０は、逆順に実行されてもよいし、並行して実行されてもよい。
【０３１８】
続いて、ステップＳ６１１で受信データ判断部４１７は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
２つの特徴値が一致する場合、受信データ判断部４１７は、「ステップＳ６０８で復号されてメモリ４１０上に記憶されている受信データ４２６のペイロードは正常な平文データである」と判断する。この場合、受信データ判断部４１７は、メモリ４１０上の受信データ４２６の処理を行うようデータ処理部４２３に命令する。
【０３１９】
２つの特徴値が一致する場合はさらに、受信データ判断部４１７が、アクセス鍵で暗号化されるＰＤＵの次の受信に備えて選択内部由来アクセス鍵をリセットするよう、指示部４０９に命令する。そして、指示部４０９は現在内部由来アクセス鍵を選択内部由来アクセス鍵として選択しなおす。よって、アクセス鍵で暗号化されるＰＤＵが次に受信されて再度図１８の処理が開始される時点での選択内部由来アクセス鍵は、現在内部由来アクセス鍵となる。そして、以上のように選択内部由来アクセス鍵が選択しなおされると、処理はステップＳ６０５に移行する。
【０３２０】
他方、２つの特徴値が一致しない場合、受信データ判断部４１７は、「ステップＳ６０８で復号されてメモリ４１０上に記憶されている受信データ４２６のペイロードは、異常である」と判断する。
【０３２１】
また、第２実施形態では、内部由来アクセス鍵記憶部４０７は現在内部由来アクセス鍵と旧内部由来アクセス鍵という２つの世代の内部由来アクセス鍵のみを保持しているので、試す対象となる他の世代の内部由来アクセス鍵は、これ以上は存在しない。そこで、２つの特徴値が一致しない場合も、受信データ判断部４１７は、アクセス鍵で暗号化されるＰＤＵの次の受信に備えて選択内部由来アクセス鍵をリセットするよう、指示部４０９に命令する。そして、指示部４０９は現在内部由来アクセス鍵を選択内部由来アクセス鍵として選択しなおし、処理はステップＳ６１２に移行する。
【０３２２】
ステップＳ６１２では、受信データ判断部４１７が適宜のエラー処理を行う。あるいは、受信データ判断部４１７は不図示のエラー処理部に対してエラー処理を行うよう命令してもよい。エラー処理の具体的内容は任意である。例えば、エラー処理は、単に受信データ４２６の記憶領域を解放する処理でもよいし、送信元の他の通信装置４００に対してＰＤＵの再送を要求する処理でもよい。エラー処理の実行後、図１８の処理も終了する。
【０３２３】
以上、図１６〜１８を参照して説明したように、第２実施形態においても、ＰＤＵの受信を契機とした一連の処理の中で、復号または再暗号化にともなって、メモリ４１０上の記憶領域の上書きが行われる。よって、第２実施形態も第１実施形態と同様に、記憶領域の節約効果がある。
【０３２４】
ところで、通信装置４００はＰＤＵの受信とは独立した処理も行う。すなわち、通信装置１００は、以下に説明するように、ＰＤＵの送信、共通鍵の更新、内部由来アクセス鍵の更新、および内部由来アクセス鍵の配送も行う。
【０３２５】
具体的には、データ処理部４２３は、他の装置に送信しようとするデータから、平文の送信データ４２７を作成する。こうして作成される送信データ４２７は、図６の平文ＰＤＵ３０４の一例である。つまり、データ処理部４２３は適宜のボディ３０１を生成または取得し、適宜のヘッダ３０２を設定し、ボディ３０１から特徴値３０３を計算して、送信データ４２７に相当する平文ＰＤＵ３０４を作成する。
【０３２６】
例えば、通信装置４００がセンサネットワーク内のノードである場合、通信装置４００はセンサを内蔵していてもよいし、センサと接続されていてもよい。そして、データ処理部４２３は、センサから出力されたデータをボディ３０１に設定してもよい。
【０３２７】
データ処理部４２３は、平文の送信データ４２７をメモリ４１０上に作成し終わると、送信データ４２７のペイロードを暗号化するよう送信データ暗号化部４２１に命令する。すると、送信データ暗号化部４２１は送信先のアドレス（すなわち他の通信装置４００のアドレス）を認識し、認識したアドレスに対応づけられて外部由来アクセス鍵記憶部４０８に記憶されている外部由来アクセス鍵を読み出す。
【０３２８】
なお、第１実施形態と同様に、データ処理部４２３が送信データ４２７の送信先を明示的に送信データ暗号化部４２１に通知することにより、送信データ暗号化部４２１が送信先のアドレスを認識してもよい。あるいは、送信データ暗号化部４２１は、送信データ４２７のヘッダから送信先のアドレスを読み取ることにより、送信先のアドレスを認識してもよい。
【０３２９】
そして、送信データ暗号化部４２１は、読み出した外部由来アクセス鍵を用いて送信データ４２７のペイロードを暗号化する。その際、外部由来アクセス鍵再暗号化部４１９と受信データ再暗号化部４２０による再暗号化と同様に、送信データ暗号化部４２１もメモリ４１０上の同一記憶領域への上書きを行う。つまり、送信データ暗号化部４２１は、送信データ４２７の平文のペイロードを暗号化し、暗号化により得られる暗号文のデータによってペイロードを上書きする。このような上書きにより、送信データ４２７の送信時においても、メモリ４１０の効率的な利用が可能となる。
【０３３０】
また、送信データ暗号化部４２１は、暗号化処理を終えると、送信データ４２７を送信するよう送信部４２４に命令する。そして、送信部４２４が送信データ４２７を送信する。
【０３３１】
さて、続いて通信装置４００における共通鍵の更新について説明する。通信装置４００の共通鍵管理部４０２は、第１実施形態の鍵管理部１０１が図１０または図１２の処理を行うことで鍵記憶部１０２上の暗号鍵を更新するのと同様にして、共通鍵記憶部４０６上の共通鍵を更新する。よって、ここでは詳細な説明は割愛するが、図１０のステップＳ２０１または図１２のステップＳ３０１に相当する処理について補足すれば下記のとおりである。
【０３３２】
第２実施形態においては、時計４２５が、共通鍵の更新間隔ＳＩが経過するたびに前述の共通鍵更新タイミング信号を出力してもよい。そして、共通鍵管理部４０２は、共通鍵更新タイミング信号を検出したときに、「共通鍵を更新する時刻になった」と認識してもよい。あるいは、共通鍵管理部４０２は、時計４２５から現在時刻を取得し、共通鍵を更新する基準時刻と共通鍵の更新間隔ＳＩと現在時刻を用いて、共通鍵を更新する時刻になったか否かを判断してもよい。
【０３３３】
続いて、通信装置４００における内部由来アクセス鍵の更新について説明する。通信装置４００の内部由来アクセス鍵管理部４０３は、第１実施形態の鍵管理部１０１が図１０または図１２の処理を行うことで鍵記憶部１０２上の暗号鍵を更新するのと同様にして、内部由来アクセス鍵記憶部４０７上の内部由来アクセス鍵を更新する。よって、ここでは詳細な説明は割愛するが、図１０のステップＳ２０１または図１２のステップＳ３０１に相当する処理について補足すれば下記のとおりである。
【０３３４】
第２実施形態においては、時計４２５が、内部由来アクセス鍵の更新間隔ＡＩが経過するたびに内部由来アクセス鍵更新タイミング信号（例えば割り込み信号）を出力してもよい。そして、内部由来アクセス鍵管理部４０３は、内部由来アクセス鍵更新タイミング信号を検出したときに、「内部由来アクセス鍵を更新する時刻になった」と認識してもよい。あるいは、内部由来アクセス鍵管理部４０３は、時計４２５から現在時刻を取得し、内部由来アクセス鍵を更新する基準時刻と内部由来アクセス鍵の更新間隔ＡＩと現在時刻を用いて、内部由来アクセス鍵を更新する時刻になったか否かを判断してもよい。
【０３３５】
続いて、図１９を参照して内部由来アクセス鍵の配送について説明する。図１９は、第２実施形態において通信装置が行う内部由来アクセス鍵配送処理のフローチャートである。
【０３３６】
図１９の処理は、通信装置４００に電源が入れられた後、少なくとも内部由来アクセス鍵記憶部４０７に現在内部由来アクセス鍵が設定されてから開始される。例えば、内部由来アクセス鍵管理部４０３は、通信装置４００に電源が入れられると、第１世代の内部由来アクセス鍵を生成して内部由来アクセス鍵記憶部４０７に現在内部由来アクセス鍵として格納し、その後、図１９の処理を開始してもよい。
【０３３７】
ステップＳ７０１で内部由来アクセス鍵管理部４０３は、内部由来アクセス鍵を通知する時刻になるまで待機する。そして、内部由来アクセス鍵を通知する時刻になったと内部由来アクセス鍵管理部４０３が判断すると、処理はステップＳ７０２に移行する。
【０３３８】
なお、第２実施形態では、所定の通知間隔（後述の図２０における“ＡＮ”）で内部由来アクセス鍵が他の通信装置４００に配送される（つまり通知される）。第２実施形態では、アクセス鍵の通知間隔ＡＮは、アクセス鍵の更新間隔ＡＩよりも短い。また、詳しくは図２０とともに後述するが、どの世代の内部由来アクセス鍵も複数回通知されるようにするために、アクセス鍵の通知間隔ＡＮは、アクセス鍵の更新間隔ＡＩの半分以下であることが好ましい。
【０３３９】
なお、内部由来アクセス鍵を通知する時刻になったか否かを内部由来アクセス鍵管理部４０３が認識する具体的方法は任意である。
例えば、時計４２５は、アクセス鍵の通知間隔ＡＮが経過するたびに、アクセス鍵の通知の契機となるアクセス鍵通知タイミング信号を出力してもよい。アクセス鍵通知タイミング信号は、例えば割り込み信号でもよい。内部由来アクセス鍵管理部４０３は、時計４２５からのアクセス鍵通知タイミング信号を検出すると、内部由来アクセス鍵を通知する時刻になったと認識する。
【０３４０】
あるいは、内部由来アクセス鍵管理部４０３は、時計４２５から現在時刻を取得し、内部由来アクセス鍵を通知する基準時刻とアクセス鍵の通知間隔ＡＮと現在時刻を用いて、内部由来アクセス鍵を通知する時刻になったか否かを判断してもよい。
【０３４１】
さて、ステップＳ７０２では、内部由来アクセス鍵管理部４０３は、現在内部由来アクセス鍵を含む平文の内部由来アクセス鍵配送データ４２９を生成してメモリ４１０上に格納する。なお、ステップＳ７０２における内部由来アクセス鍵管理部４０３は、第１実施形態において送信データ１１５を作成する平文処理部１０９と類似の機能を果たす。
【０３４２】
ステップＳ７０２で生成される内部由来アクセス鍵配送データ４２９のペイロードは、まだ平文の状態である。つまり、内部由来アクセス鍵配送データ４２９は図６の平文ＰＤＵ３０４の一例であり、ボディ３０１は現在内部由来アクセス鍵を含む。また、内部由来アクセス鍵管理部４０３はボディ３０１から特徴値３０３を計算し、ヘッダ３０２を適宜設定する。なお、ステップＳ７０３に関して述べるように、第２実施形態では、ヘッダ３０２内の送信先アドレスとしてブロードキャストアドレスが設定される。
【０３４３】
そして、内部由来アクセス鍵管理部４０３は、平文の内部由来アクセス鍵配送データ４２９をメモリ４１０上に生成し終わると、ペイロードを暗号化するよう内部由来アクセス鍵暗号化部４２２に命令する。すると、内部由来アクセス鍵暗号化部４２２は、共通鍵記憶部４０６から現在共通鍵を読み出し、現在共通鍵を用いて内部由来アクセス鍵配送データ４２９のペイロードを暗号化する。
【０３４４】
その際、外部由来アクセス鍵再暗号化部４１９と受信データ再暗号化部４２０による再暗号化と同様に、内部由来アクセス鍵暗号化部４２２もメモリ４１０上の同一記憶領域への上書きを行う。つまり、内部由来アクセス鍵暗号化部４２２は、内部由来アクセス鍵配送データ４２９の平文のペイロードを暗号化し、暗号化により得られる暗号文のデータによってペイロードを上書きする。このような上書きにより、内部由来アクセス鍵配送データ４２９の送信時においても、メモリ４１０の効率的な利用が可能となる。
【０３４５】
また、内部由来アクセス鍵暗号化部４２２は、暗号化処理を終えると、内部由来アクセス鍵配送データ４２９を送信するよう送信部４２４に命令する。
すると、次のステップＳ７０３で送信部４２４は、ステップＳ７０２での暗号化の結果として得られた内部由来アクセス鍵配送データ４２９を送信する。具体的には、第２実施形態では、送信先アドレスとしてブロードキャストアドレスが設定されるので、通信装置４００は内部由来アクセス鍵配送データ４２９をブロードキャストする。
【０３４６】
例えば、複数の通信装置４００が無線アドホックネットワークを構築する場合、ステップＳ７０３におけるブロードキャストとは、１ホップで到達可能な範囲のすべての他の通信装置４００への送信を意味する。よって、送信部４２４が送信したＰＤＵは、中継を経ずに当該ＰＤＵを直接受信することができるすべての他の通信装置４００において、図１７の処理の対象となる。
【０３４７】
また、複数の通信装置４００が有線アドホックネットワークを構築する場合、ステップＳ７０３におけるブロードキャストとは、１ホップで到達可能な範囲の他のすべての通信装置４００への送信を意味する。つまり、内部由来アクセス鍵配送データ４２９の送信元の通信装置４００と直接ケーブルで接続されているすべての他の通信装置４００へ、内部由来アクセス鍵配送データ４２９が送信される。そして、送信されたＰＤＵは、内部由来アクセス鍵配送データ４２９の送信元の通信装置４００と直接ケーブルで接続されているすべての他の通信装置４００において、図１７の処理の対象となる。
【０３４８】
あるいは、第２実施形態がイーサネット（登録商標）に適用される場合は、内部由来アクセス鍵配送データ４２９の送信元の通信装置４００と同じブロードキャストドメインに属するすべての他の通信装置４００へ、内部由来アクセス鍵配送データ４２９が送信される。そして、送信されたＰＤＵは、送信元の通信装置４００と同じブロードキャストドメインに属するすべての他の通信装置４００において、図１７の処理の対象となる。
【０３４９】
いずれにせよ、ステップＳ７０３でのブロードキャストの後、処理はステップＳ７０１に戻る。
なお、図１９によれば、内部由来アクセス鍵の通知のたびに内部由来アクセス鍵配送データ４２９のペイロードの暗号化が行われるが、実施形態によっては、内部由来アクセス鍵配送データ４２９が再利用されてもよい。つまり、同じ内部由来アクセス鍵が複数回通知されるように内部由来アクセス鍵の更新間隔ＡＩと通知間隔ＡＮが設定されている場合は、内部由来アクセス鍵の更新後の初めての通知のときのみ内部由来アクセス鍵配送データ４２９の作成が行われてもよい。
【０３５０】
そして、メモリ４１０は、ペイロードが暗号化された状態の内部由来アクセス鍵配送データ４２９を、次に内部由来アクセス鍵が更新されるまで保持し続けてもよい。すると、内部由来アクセス鍵の更新後の２回目以降の通知においては、ステップＳ７０２が省略可能である。つまり、内部由来アクセス鍵管理部４０３は、メモリ４１０上の既存の内部由来アクセス鍵配送データ４２９を再度送信するよう、送信部４２４に命令してもよい。
【０３５１】
続いて、上記で説明した各種処理の実行タイミングについて図２０を参照して説明する。図２０は、第２実施形態における共通鍵と内部由来アクセス鍵の更新を示すタイミングチャートである。
【０３５２】
第２実施形態では、共通鍵管理部４０２が所定の更新間隔ＳＩで定期的に共通鍵を更新する。図２０には、第（γ−１）世代の共通鍵ＳＫγ-１から第（γ＋２）世代の共通鍵ＳＫγ＋２までが図示されている。
【０３５３】
また、図１７のステップＳ５０８に関して説明したように、第２実施形態では、現在共通鍵での復号が失敗した場合の再暗号化と旧共通鍵による復号は、共通鍵の更新から一定の許容時間ＳＴの間でのみ行われる。そして、許容時間ＳＴは更新間隔ＳＩよりも短い。
【０３５４】
なお、更新間隔ＳＩは、例えば、通信装置４００が含まれるネットワークにおけるトラフィック量に応じた適宜の値に設定されることが好ましい。一例として、更新間隔ＳＩは６時間〜１２時間程度の長さでもよい。また、許容時間ＳＴは、例えば、通信装置４００間での同期の精度、またはアクセス鍵を配送しあう通信装置４００間での通信にかかる時間などに基づいて、実施形態に応じた適宜の値に設定されることが好ましい。
【０３５５】
そして、共通鍵管理部４０２による共通鍵の更新とは独立に、内部由来アクセス鍵管理部４０３は、所定の更新間隔ＡＩで定期的に内部由来アクセス鍵を更新する。図２０には、第（ａ−１）世代の内部由来アクセス鍵ＡＫＡ，ａ−１から第（ａ＋４）世代の内部由来アクセス鍵ＡＫＡ，ａ＋４までが図示されている。
【０３５６】
内部由来アクセス鍵の更新間隔ＡＩは、共通鍵の更新間隔ＳＩよりも短く、好ましくは共通鍵の更新間隔ＳＩの半分以下である。内部由来アクセス鍵の更新間隔ＡＩは、例えば、通信装置４００が含まれるネットワークにおけるトラフィック量に応じた適宜の値に設定されることが好ましい。一例として、内部由来アクセス鍵の更新間隔ＡＩは、１０分〜２０分程度の長さでもよい。なお、共通鍵の更新間隔ＳＩは、内部由来アクセス鍵の更新間隔ＡＩで割り切れる長さでなくてもよい。
【０３５７】
また、第２実施形態では、図１８のステップＳ６０６に関して説明したように、現在内部由来アクセス鍵での復号が失敗した場合の再暗号化と旧内部由来アクセス鍵による復号は、内部由来アクセス鍵の更新から一定の許容時間ＡＴの間でのみ行われる。そして、許容時間ＡＴは更新間隔ＡＩよりも短い。許容時間ＡＴは、例えば、アクセス鍵によって暗号化したＰＤＵをやりとりする通信装置４００間での通信にかかる時間などに基づいて、実施形態に応じた適宜の値に設定されることが好ましい。
【０３５８】
さらに、第２実施形態では、図１９のステップＳ７０１に関して説明したように、通信装置４００は所定の通知間隔ＡＮで内部由来アクセス鍵を他の通信装置４００に通知する。通知間隔ＡＮは、内部由来アクセス鍵の更新間隔ＡＩよりも短く、好ましくは更新間隔ＡＩの半分以下である。一例として、通知間隔ＡＮは１〜５分程度の長さでもよい。なお、更新間隔ＡＩは、通知間隔ＡＮで割り切れる長さでなくてもよい。
【０３５９】
通知間隔ＡＮが更新間隔ＡＩよりも短いため、図２０の例では、例えば第ａ世代の内部由来アクセス鍵ＡＫＡ，ａは、内部由来アクセス鍵ＡＫＡ，ａが現在内部由来アクセス鍵として認識されている期間中に５回、通知される。このように内部由来アクセス鍵の更新よりも頻繁に内部由来アクセス鍵の通知を行うことは、アドホックネットワーク内の通信装置４００に特に好適である。
【０３６０】
なぜなら、アドホックネットワークに接続される通信装置が時々刻々と動的に変化する可能性があるからである。例えば、新たな通信装置４００が任意の時点でアドホックネットワークに参加し始めることがある。
【０３６１】
より具体的には、例えば、アクセス鍵ＡＫＡ，ａの１回目の通知の時点ではアドホックネットワークに接続されていなかった新たな通信装置４００が、アクセス鍵ＡＫＡ，ａの３回目の通知の時点では既にアドホックネットワークに接続されている場合もありうる。すると、新たにアドホックネットワークに参加した当該通信装置４００は、次の第（ａ＋１）世代のアクセス鍵ＡＫＡ，ａ＋１の通知まで待たずに、アクセス鍵ＡＫＡ，ａの３回目の通知の時点からすぐに、アクセス鍵による暗号化通信を始めることが可能となる。
【０３６２】
また、通信装置４００の設置位置は固定されていてもよいが、無線アドホックネットワークでは、通信装置４００が移動体であってもよい。すると、通信装置４００の移動に応じて、あるいは遮蔽物の有無などの無線通信環境の変化に応じて、たまたまアクセス鍵の通知を受信することができない場合もありうる。
【０３６３】
例えば、アドレスＡｄｒＢの通信装置４００は、アドレスＡｄｒＡの通信装置４００からのアクセス鍵ＡＫＡ，ａの１回目の通知を受信することがでできないかもしれない。しかし、無線通信環境の変化に応じて、アドレスＡｄｒＢの通信装置４００は、アドレスＡｄｒＡの通信装置４００からのアクセス鍵ＡＫＡ，ａの２回目の通知を受信することはできるかもしれない。すると、アドレスＡｄｒＢの通信装置４００は、アクセス鍵ＡＫＡ，ａの２回目の通知以降は、アドレスＡｄｒＡの通信装置４００宛のＰＤＵをアクセス鍵ＡＫＡ，ａを用いて暗号化して送信することができる。
【０３６４】
よって、アドレスＡｄｒＡの通信装置４００が、アクセス鍵を第（ａ−１）世代から第ａ世代に更新した後、古いアクセス鍵ＡＫＡ，ａ−１で暗号化されたＰＤＵをアドレスＡｄｒＢの通信装置４００から受信するのは、せいぜい２回目の通知の少し後までである。そして、例えば図２０のようにアクセス鍵ＡＫＡ，ａの２回目の通知の少し後まで、許容時間ＡＴの範囲に含まれているとする。すると、アドレスＡｄｒＡの通信装置４００にとっては、アクセス鍵ＡＫＡ，ａ−１で暗号化されたＰＤＵを受信するのは、旧内部由来アクセス鍵ＡＫＡ，ａ−１の有効期限内である。よって、アクセス鍵ＡＫＡ，ａ−１で暗号化されたＰＤＵの送受信が無駄にならず、ＰＤＵの再送要求などのエラー処理も不要である。
【０３６５】
すなわち、上記の例から理解されるように、通知間隔ＡＮは、更新間隔ＡＩより短いだけではなく、許容時間ＡＴの半分以下であることがより好ましい。その理由について補足すれば次のとおりである。
【０３６６】
通知間隔ＡＮが許容時間ＡＴの半分以下だと、許容時間ＡＴ内に複数回の通知が含まれる。よって、「アクセス鍵の更新後の１回目の通知が、通知先のある通信装置４００において偶然受信不能であっても、許容時間ＡＴ内には、通知先の通信装置４００が更新後の新たなアクセス鍵を認識することができる」という見込みが高まる。すると、エラー処理の頻度が低減する。また、通知間隔ＡＮが短ければ、再暗号化と旧内部由来アクセス鍵による復号の頻度も低減する。すると、結果として、個々の通信装置４００の再暗号化と再度の復号にかかる処理負荷も低減し、ネットワークの無駄なトラフィックも低減する。
【０３６７】
ところで、本発明は上記実施形態に限られるものではない。上記の説明においてもいくつかの変形について説明したが、上記実施形態は、さらに例えば下記（ｂ１）〜（ｂ７）の観点から様々に変形することもでき、これらの変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
【０３６８】
（ｂ１）暗号鍵の更新間隔と通知間隔に関する観点
実施形態によっては、アクセス鍵の通知間隔ＡＮは、アクセス鍵の更新間隔ＡＩと同じでもよい。つまり内部由来アクセス鍵が生成されるごとに、生成の直後に１回、内部由来アクセス鍵が通知されてもよい。例えば、通信品質の良い有線ネットワークでは、通知間隔ＡＮと更新間隔ＡＩが同じでもよい。
【０３６９】
また、有効期限は、共通鍵とアクセス鍵の一方にのみ設定されていてもよい。つまり、第２実施形態で、図１７のステップＳ５０８または図１８のステップＳ６０６の、有効期限に関する分岐が省略されてもよい。逆に、第１実施形態に、第２実施形態と同様の有効期限が導入されてもよい。なお、有効期限が省略されるということは、暗号鍵の更新間隔と等しい有効期限が設定されるのと同じことである。
【０３７０】
ところで、複数の通信装置が互いに同じアルゴリズムにしたがって暗号鍵を生成および更新する場合には、複数の通信装置が暗号鍵の更新のタイミングについて共通認識を持つことができるように、暗号鍵の更新タイミングが事前に決められる。固定の間隔での更新は、複数の通信装置が暗号鍵の更新のタイミングについて共通認識を持つための一法である。もちろん、実施形態によっては、暗号鍵の更新のタイミングに関する不規則な間隔のスケジュールが、予め複数の通信装置間で共有されていてもよい。
【０３７１】
それに対して、鍵配送により通信装置間で確立される暗号鍵に関しては、通信装置が暗号鍵を更新する間隔は固定されていなくてもよい。例えば、第２実施形態の通信装置４００同士はアクセス鍵を配送しあう。よって、個々の通信装置４００は、他の通信装置４００がアクセス鍵を更新するタイミングについて事前に認識していなくてもよい。
【０３７２】
例えば、第１と第２の通信装置４００がある場合、第２の通信装置４００は、第１の通信装置４００が第１の通信装置４００にとっての内部由来アクセス鍵を更新する間隔について知る必要はない。よって、第１の通信装置４００は、例えばＰＤＵの受信頻度などの状況の変化に応じて、内部由来アクセス鍵の更新間隔を動的に変更してもよい。
【０３７３】
（ｂ２）保持する暗号鍵の数に関する観点
第１実施形態の鍵記憶部１０２は、２世代以上の旧鍵を保持してもよい。同様に、第２実施形態の共通鍵記憶部４０６は、２世代以上の旧共通鍵を保持してもよいし、内部由来アクセス鍵記憶部４０７は、２世代以上の旧内部由来アクセス鍵を保持してもよい。そして、再暗号化と復号が、必要に応じて、保持されている複数の古い暗号鍵に関して順々に試されてもよい。
【０３７４】
例えば鍵記憶部１０２は、現在鍵と、１世代前の旧鍵と、２世代前の旧鍵という３つの世代の暗号鍵を保持してもよい。なお、鍵管理部１０１は、新たな暗号鍵を生成すると、鍵記憶部１０２上の３つの世代の暗号鍵を適宜更新する。この場合、受信したＰＤＵのペイロードの復号に関して、通信装置１００は、「現在鍵、１世代前の旧鍵、２世代前の旧鍵」というように、新しい暗号鍵から順に試すのが適切である。
【０３７５】
具体的には、図７のステップＳ１１１で２つの特徴値が一致しなかった場合、判断部１０７は、受信データ１１４のペイロードを再暗号化するよう、再暗号化部１０８に命令する。なお、この場合、選択暗号鍵のリセットはステップＳ１１１の段階では行われない。
【０３７６】
そして、再暗号化部１０８は１世代前の旧鍵で受信データ１１４のペイロードを再暗号化する。さらに、再暗号化部１０８は再暗号化の終了を指示部１０３に通知する。すると、指示部１０３は、選択暗号鍵を、現在選択している１世代前の旧鍵から２世代前の旧鍵に切り換える。
【０３７７】
そして、指示部１０３は、復号部１０６に受信データ１１４のペイロードを復号するよう命令する。すると、復号部１０６は、２世代前の旧鍵を用いて受信データ１１４のペイロードを復号する。さらに、復号部１０６は復号の終了を判断部１０７に通知する。
【０３７８】
すると、判断部１０７は復号されたペイロードから特徴値を取り出し、ボディから特徴値を計算し、２つの特徴値を比較する。その結果、２つの特徴値が一致すれば、選択暗号鍵のリセットが行われ、処理がステップＳ１０６に移行する。逆に、２つの特徴値が一致しない場合は、選択暗号鍵のリセットが行われ、処理がステップＳ１１２に移行する。
【０３７９】
もちろん、第２実施形態も、上記と同様にして変形可能である。また、３世代以上前の旧鍵をさらに利用する実施形態も可能である。以上のように２世代以上前の旧鍵も利用する実施形態は、通信に時間のかかる通信装置間での暗号化通信に特に好適である。
【０３８０】
（ｂ３）暗号鍵が確立される範囲に関する観点
暗号鍵が確立される範囲は実施形態に応じて適宜変更されてよい。例えば、図１４の通信装置４００が図２のアドホックネットワーク１４０内のノードとして利用される場合、アドホックネットワーク１４０のすべてのノード間で同じ共通鍵が使われてもよい。しかし、ネットワークの構成、適用対象のプロトコルのレイヤ、暗号化通信の目的などに応じて、暗号鍵が確立される範囲は適宜変形されてもよい。
【０３８１】
例えば、第２実施形態においては、図１９のステップＳ７０３で、内部由来アクセス鍵が１ホップ以内の他のすべての通信装置４００にブロードキャストにより通知される。しかし、実施形態によっては、内部由来アクセス鍵の通知先の通信装置４００は、例えば特定の１つに限定されてもよい。
【０３８２】
（ｂ４）暗号鍵の生成アルゴリズムに関する観点
暗号鍵の生成アルゴリズムは任意である。つまり、鍵管理部１０１と共通鍵管理部４０２と内部由来アクセス鍵管理部４０３は、それぞれ任意のアルゴリズムにしたがって、暗号鍵を生成することができる。
【０３８３】
例えば、鍵管理部１０１と共通鍵管理部４０２と内部由来アクセス鍵管理部４０３は、時刻に対して一意な値を求める処理を行うことで暗号鍵を生成してもよい。時刻に対して一意な値を求める処理とは、例えば、現在時刻をシード（seed）として用いて乱数を発生させ、乱数を使って暗号鍵を生成する処理である。また、シードは、通信装置を識別する情報（例えばＩＤまたはアドレス）と現在時刻を組み合わせて得られる情報でもよい。
【０３８４】
（ｂ５）特徴値に関する観点
上述のとおり、図６の特徴値３０３としては、例えばハッシュ値が利用可能である。その場合、暗号化された特徴値３０６は、メッセージ認証コード（Message Authentication Code；ＭＡＣ）の１種であるkeyed-Hashing for MAC（ＨＭＡＣ）に相当する。
【０３８５】
なお、第１および第２実施形態では、ボディ３０１と特徴値３０３が同じ暗号鍵で同じ暗号化アルゴリズムにより暗号化される。しかし、ボディ３０１と特徴値３０３が別の暗号鍵で暗号化されてもよいし、ボディ３０１と特徴値３０３が別の暗号化アルゴリズムにより暗号化されてもよい。
【０３８６】
例えば、第２実施形態において、アクセス鍵により暗号化される種類のＰＤＵに関して、ペイロードのうちボディ３０１の部分がアクセス鍵により暗号化され、特徴値３０３の部分が固定の暗号鍵により暗号化されてもよい。その場合、受信データ復号部４１３は、暗号化されたボディを内部由来アクセス鍵で復号し、暗号化された特徴値を固定の暗号鍵により復号すればよい。また、受信データ再暗号化部４２０は、復号されたボディを内部由来アクセス鍵で再暗号化し、復号された特徴値を固定の暗号鍵で再暗号化すればよい。
【０３８７】
また、実施形態によっては、判断部１０７、外部由来アクセス鍵判断部４１６または受信データ判断部４１７による判断のために、公開鍵暗号アルゴリズムによるディジタル署名が利用されてもよい。
【０３８８】
例えば、第１の通信装置４００は、予め公開鍵を第２の通信装置４００に公開する。そして、第１の通信装置４００のデータ処理部４２３は、ボディ３０１からハッシュ値を計算し、計算したハッシュ値を秘密鍵で暗号化することで、特徴値３０３としてのディジタル署名を生成してもよい。この場合、送信データ暗号化部４２１は、ディジタル署名を含むペイロード全体を第２の通信装置４００のアクセス鍵で暗号化してもよいし、ボディ３０１の部分のみを第２の通信装置４００のアクセス鍵で暗号化してもよい。
【０３８９】
送信データ暗号化部４２１が、特徴値３０３としてのディジタル署名を含むペイロード全体を第２の通信装置４００のアクセス鍵で暗号化する実施形態では、第２の通信装置４００の受信データ復号部４１３は、ペイロード全体をアクセス鍵で復号する。そして、受信データ判断部４１７は、復号された特徴値３０９を公開鍵で復号し、ハッシュ値を得る。また、受信データ判断部４１７は、復号されたボディ３０８から、図６の特徴値３１１に相当するハッシュ値を計算する。
【０３９０】
そして、得られた２つのハッシュ値が等しければ、受信データ判断部４１７は、「暗号化に使われたのと同じアクセス鍵でペイロードが復号された」と判断する。つまり、受信データ判断部４１７は、「復号されたデータは正常な平文データであり、復号は成功した」と判断する。
【０３９１】
他方、得られた２つのハッシュ値が異なる場合は、受信データ判断部４１７は、「暗号化に使われたのと違うアクセス鍵でペイロードが復号された」と判断する。つまり、受信データ判断部４１７は、「復号されたデータは異常であり、復号は失敗した」と判断する。
【０３９２】
つまり、第１および第２実施形態では、復号された特徴値３０９と計算された特徴値３１１が完全に一致するか否かが、復号された特徴値３０９と計算された特徴値３１１の間の整合性の判断に使われる。しかし、上記のとおり実施形態によっては、復号された特徴値３０９に対して公開鍵による復号などの何らかの操作を施した結果が、特徴値３１１と比較される。換言すれば、実施形態によっては、「復号された特徴値３０９自体と特徴値３１１が完全に一致するか否か」という基準以外の基準により整合性の判断が行われる。
【０３９３】
なお、ディジタル署名が使われる場合は、第１の通信装置４００の送信データ暗号化部４２１が、ボディ３０１の部分のみを第２の通信装置４００のアクセス鍵で暗号化する実施形態も可能である。その場合、第２の通信装置４００の受信データ復号部４１３は、暗号化されたボディ３０５のみをアクセス鍵で復号する。
【０３９４】
そして、受信データ判断部４１７は、特徴値３０３としてのディジタル署名を公開鍵で復号してハッシュ値を得る。また、受信データ判断部４１７は、復号されたボディ３０８から、図６の特徴値３１１に相当するハッシュ値を算出する。そして、受信データ判断部４１７は、２つのハッシュ値を比較することで、特徴値３０３と計算された特徴値３１１との間の整合性を判断する。
【０３９５】
（ｂ６）データ形式に関する観点
図５と図１５にはテーブル形式でデータを例示したが、鍵記憶部１０２、鍵認識部１１２、共通鍵記憶部４０６、内部由来アクセス鍵記憶部４０７、および外部由来アクセス鍵記憶部４０８に保持されるデータの形式はテーブル形式に限られない。
【０３９６】
例えば、鍵記憶部１０２は、大きさが３のリングバッファにより実現されてもよい。そして、リングバッファにおいて１つのエントリは現在鍵用に、１つのエントリは旧鍵用に、１つのエントリは新たに生成される暗号鍵の一時記憶領域用に使われてもよい。この場合、鍵管理部１０１は、暗号鍵の生成のたびに、現在鍵を指すポインタを動かせばよい。内部由来アクセス鍵記憶部４０７も同様に、リングバッファにより実現されてもよい。
【０３９７】
また、鍵認識部１１２と外部由来アクセス鍵記憶部４０８におけるデータ形式は、図示したようなテーブル形式でもよいが、アドレスと暗号鍵のペアを要素として持つ線形リストまたはFirst-In-First-Out（ＦＩＦＯ）キューなどでもよい。
【０３９８】
（ｂ７）上書きを行う対象についての観点
第２実施形態は、アクセス鍵の配送用ＰＤＵに関して記憶領域の上書きが行われないように変形されてもよい。つまり、内部由来アクセス鍵暗号化部４２２と外部由来アクセス鍵復号部４１４と外部由来アクセス鍵再暗号化部４１９は、暗号化または復号の際に、必ずしも記憶領域の上書きを行わなくてもよい。
【０３９９】
その理由は、アクセス鍵の配送用ＰＤＵなどの制御用ＰＤＵは、一般にペイロードが短いからである。そのため、記憶領域の上書きが行われないことによる記憶領域の消費の影響は、アクセス鍵の配送用ＰＤＵの場合は、アクセス鍵により暗号化されるアプリケーションデータ用ＰＤＵの場合よりも小さい。つまり、実施形態によっては、アクセス鍵により暗号化されるアプリケーションデータ用ＰＤＵについて記憶領域の上書きを行うだけで、メモリ４１０の有効利用が十分に達成されることもある。
【０４００】
同様の理由から、例えば、「受信頻度に比べて送信頻度が少ない」、あるいは「送信データ１１５のデータ長が短い」といった特定の環境においては、送信データ１１５について記憶領域の上書きが行われなくてもよい。
【０４０１】
なお、以上の本明細書の説明において、「上書き」という用語の意味は、「書き戻す」ことも含む。例えば、第１のデータを直接第２のデータで上書きすることは、別の観点から表現すれば、第１のデータが記憶されている記憶領域に直接第２のデータを書き戻すことである。また、第１のデータが記憶されている記憶領域をクリアしてから同じ記憶領域に第２のデータを書き戻すことも、「上書き」の１種である。
【図１】
0005454673.tif 000002
【図２】
0005454673.tif 000003
【図３】
0005454673.tif 000004
【図４】
0005454673.tif 000005
【図５】
0005454673.tif 000006
【図６】
0005454673.tif 000007
【図７】
0005454673.tif 000008
【図８】
0005454673.tif 000009
【図９】
0005454673.tif 000010
【図１０】
0005454673.tif 000011
【図１１】
0005454673.tif 000012
【図１２】
0005454673.tif 000013
【図１３】
0005454673.tif 000014
【図１４】
0005454673.tif 000015
【図１５】
0005454673.tif 000016
【図１６】
0005454673.tif 000017
【図１７】
0005454673.tif 000018
【図１８】
0005454673.tif 000019
【図１９】
0005454673.tif 000020
【図２０】
0005454673.tif 000021