以下、実施形態について、図面を参照しながら詳細に説明する。具体的には、まず図1〜13を参照して第1実施形態について説明し、その後、図14〜20を参照して第2実施形態について説明する。最後に、その他の実施形態についても説明する。
なお、以下の本明細書の説明においては、特に断らない限り、対称鍵暗号による暗号化通信が行われるものとする。また、詳しくは図8〜9とともに後述するが、どの実施形態においても、ストリーム暗号を利用することもできるし、ブロック暗号を利用することもできる。
さて、図1は、第1実施形態における通信の一例を示すタイミングチャートである。図1は、通信装置100Bが通信装置100Aに暗号化したデータを送信する例を示す。
通信装置100Aと100Bの双方は、何らかの鍵確立の方法にしたがい、通信装置100Aが復号に用いる現在の暗号鍵(cryptographic key)を認識する。なお、対称鍵暗号が使われるので、通信装置100Aにとっての復号鍵と通信装置100Bにとっての暗号化鍵は同じ暗号鍵である。
例えば、通信装置100Aと100Bが同じアルゴリズムにしたがってそれぞれ暗号鍵を生成してもよい。あるいは、通信装置100Aが暗号鍵を生成し、生成した暗号鍵を通信装置100Bに配送してもよい。例えば、通信装置100Aは、生成した暗号鍵を、鍵配送用の他の暗号鍵を用いて暗号化して通信装置100Bに配送してもよい。配送対象の暗号鍵を暗号化するのに通信装置100Aが用いる鍵配送用の暗号鍵は、対称鍵暗号の暗号鍵でもよいし、公開鍵暗号における通信装置100Bの公開鍵でもよい。
以上のように、第1実施形態は、通信装置100Aと100Bの間の鍵確立の具体的方法によらず様々な暗号化通信システムに適用可能である。
また、暗号化通信のセキュリティ向上のため、通信装置100Aと100Bの間では、適宜の間隔で暗号鍵が更新される。以下では説明の便宜上、更新される暗号鍵を「第1世代、第2世代、……」のように世代で区別することとし、通信装置100Aが復号に用いる第a世代の暗号鍵を“KA,a”と表す。
送信側の通信装置100Bは、送信先の通信装置100Aを識別する情報と対応づけて、通信装置100Aが復号に用いる現在の暗号鍵を記憶する。以下では説明の便宜上、通信装置100Aを識別する情報として、通信装置100AのアドレスAdrAが使われるものとするが、識別番号など、アドレスAdrA以外の識別情報も利用可能である。
なお、第1実施形態の暗号化通信は、様々なレイヤのプロトコル上で実現可能である。換言すれば、第1実施形態におけるProtocol Data Unit(PDU)は、特定のレイヤの特定のプロトコルのPDUには限定されない。よって、通信装置100AのアドレスAdrAも、プロトコルのレイヤに応じたアドレスでよい。
例えば、データリンク層での通信に第1実施形態が適用される場合、Media Access Control(MAC)アドレスが、通信装置100Aを識別するためのアドレスAdrAとして用いられてもよい。あるいは、ネットワーク層での通信に第1実施形態が適用される場合、Internet Protocol(IP)アドレスが、通信装置100Aを識別するためのアドレスAdrAとして用いられてもよい。
また、第1実施形態における暗号化通信は、無線通信、有線通信、またはその組み合わせのいずれでもよい。そして、通信装置100Aと100Bの間のホップ数は1でもよいし2以上でもよい。
さて、図1に示すように、例えば時刻TB101において通信装置100Bは、通信装置100Aの最新の暗号鍵KA,aを認識する。そして、通信装置100Bは、通信装置100AのアドレスAdrAと対応づけて記憶していた前の世代の暗号鍵KA,a−1を新たな暗号鍵KA,aに置き換える。
他方、通信装置100Aも、時刻TA101において、最新の暗号鍵KA,aを生成し、通信装置100A自身が現在復号のために用いる暗号鍵(以下「現在鍵」という)を、前の世代の暗号鍵KA,a−1から新たな暗号鍵KA,aへと更新する。また、第1実施形態の通信装置100Aは、現在鍵の1つ前の世代の暗号鍵(以下「旧鍵」という)も記憶する。よって、時刻TA101において通信装置100Aは、旧鍵をKA,a−2からKA,a−1に更新する処理も行う。
時刻TB101とTA101は、ほぼ同時であるが、時刻TB101の方が時刻TA101よりも早いこともありうるし、その逆の場合もありうる。いずれにせよ、時刻TB101と時刻TA101の遅い方の時点において、通信装置100Aと100Bの間で暗号鍵KA,aが確立される。
そして、通信装置100Bは、例えば時刻TB102において、通信装置100Aに送信するための平文データP101を作成する。そして、通信装置100Bは、時刻TB103において、送信先である通信装置100AのアドレスAdrAと対応づけて記憶している暗号鍵KA,aを用いて、平文データP101を暗号化し、暗号文データC101を得る。
なお、上記のように第1実施形態が適用されるプロトコルは任意だが、一般にPDUはヘッダとペイロードを含む。平文データP101と暗号文データC101はペイロードに相当するデータである。なお、平文データP101の種類は任意である。平文データP101は、例えば、テキストデータでもよいし、画像データでもよいし、特定のアプリケーションソフトウェアのフォーマットのバイナリデータでもよい。
通信装置100Bは、以上のようにして暗号文データC101を得ると、時刻TB104において、暗号文データC101を通信装置100Aに送信する。なお、正確には、通信装置100Bが送信するのは暗号文データC101をペイロードとして含むPDUだが、ヘッダは暗号化とは無関係なので、説明の簡略化のために以下ではヘッダに関する説明を適宜省略する。
以上のようにして通信装置100Bから送信された暗号文データC101は、時刻TA102に、通信装置100Aにおいて受信される。そして、時刻TA102において通信装置100Aが現在鍵として記憶しているのは、時刻TA101で生成した暗号鍵KA,aである。よって、通信装置100Aは、時刻TA102に続く時刻TA103において、暗号鍵KA,aを用いて暗号文データC101を復号する。
上記のように、暗号文データC101は、暗号鍵KA,aによる暗号化で得られたデータである。よって、時刻TA103における暗号鍵KA,aによる復号により、通信装置100Bが時刻TA102で生成したのと同じ平文データP101が得られる。
また、詳しくは図6とともに後述するが、平文データP101は2つの部分を含み、第1の部分の特徴を第2の部分が示す。以下では第1の部分の特徴を示す値を「特徴値」ということにする。第2の部分には、特徴値そのもの、または特徴値に所定の操作を施して得られる値が設定される。
詳しくは図6とともに後述するが、特徴値としては、例えばハッシュ値などが利用可能である。よって、通信装置100Aは、特徴値を用いることで平文データP101の完全性(integrity)をチェックし、復号により得た平文データP101が正しい平文データであることを確認することができる。
ところで、図1の例では、通信装置100Bは、さらに時刻TB105において、通信装置100Aに送信するための別の平文データP102を作成する。すると、通信装置100Bは、時刻TB106において時刻TB103と同様に暗号鍵KA,aを用いて平文データP102を暗号化し、暗号文データC102を得る。そして、通信装置100Bは、時刻TB107において時刻TB104と同様に暗号文データC102を送信する。
他方、通信装置100Aは、暗号文データC102を通信装置100Bから受信する少し前に、時刻TA104において、旧鍵をKA,a−1からKA,aに更新し、現在鍵をKA,aからKA,a+1に更新することがある。つまり、通信装置100Aは、時刻TA104での暗号鍵の更新の後の時刻TA105で、暗号文データC102を受信することがある。
もちろん、通信装置100Bも、通信装置100Aが暗号鍵の更新を行う時刻TA104に近い時刻TB108において、通信装置100AのアドレスAdrAに対応する暗号鍵をKA,aからKA,a+1に更新する。よって、時刻TA104と時刻TB108のうちの遅い方である時刻TB108には、新たな暗号鍵KA,a+1が、通信装置100Aと100Bの間で確立される。
しかし、上記のように、たまたま時刻TB108での更新の直前の時刻TB106に通信装置100Bが平文データP102を暗号化することはありうる。また、通信装置100Aが、暗号文データC102を時刻TA105で受信する直前に、時刻TA104で現在鍵と旧鍵を更新することもありうる。
例えば、鍵確立の方法として、通信装置100Aが生成した新たな暗号鍵KA,a+1を通信装置100Bに配送する方法が採用される場合、鍵配送の直前に暗号文データC102の送信が行われるかもしれない。あるいは、鍵確立の方法として、通信装置100Aと100Bがそれぞれ時刻を参照して同じアルゴリズムにしたがって暗号鍵を生成する方法が採用される場合、通信装置100Aの内蔵時計よりも通信装置100Bの内蔵時計が遅れているかもしれない。また、たとえ通信装置100Aと100Bの内蔵時計が正確に同期していたとしても、暗号文データC102の送信から受信までにかかる時間の間に、現在鍵の更新が行われるかもしれない。
以上のような様々な理由から、図1に示すように、通信装置100Aが暗号文データC102を受信した時刻TA105では既に、暗号文データC102の生成に使われた暗号鍵KA,aよりも新しい暗号鍵KA,a+1が現在鍵として記憶されていることがある。その場合、暗号文データC102を受信した通信装置100Aは、時刻TA106において、現在鍵KA,a+1を用いて暗号文データC102を復号する。
すると、復号の結果として復号データD102が得られるが、復号データD102は、元の平文データP102とは異なる。通信装置100Aは、特徴値のチェックを行うことで、復号データD102が正しい平文データではないと判断することができる。
そして、通信装置100Aは、復号データD102が正しい平文データではないと判断すると、「暗号文データC102は旧鍵KA,aによって暗号化されたデータかもしれない」と認識する。よって、通信装置100Aは、暗号文データC102の旧鍵KA,aによる復号を試みる。
ところで、第1実施形態の通信装置100Aは、時刻TA106において、メモリの節約のため、暗号文データC102とは別の記憶領域に復号データD102を作成するのではなく、暗号文データC102を記憶した記憶領域上に復号データD102を上書きする。よって、暗号文データC102の旧鍵KA,aによる復号を試みようとする段階では、通信装置100Aは暗号文データC102を保持していない。
そこで、通信装置100Aは時刻TA107において、現在鍵KA,a+1を用いて復号データD102を再暗号化することで、暗号文データC102を復元する。なお、時刻TA107での再暗号化においても、通信装置100Aは、メモリの節約のため、復号データD102を記憶している記憶領域上に暗号文データC102を上書きする。
そして、通信装置100Aは、こうして再暗号化により暗号文データC102を復元した後、時刻TA108において、暗号文データC102を旧鍵KA,aにより復号する。今度は、暗号化されたときと同じ暗号鍵KA,aにより暗号文データC102が復号されるので、復号の結果として、時刻TB105に通信装置100Bが作成したのと同じ平文データP102が得られる。
なお、時刻TA108における復号においても、通信装置100Aは、メモリの節約のため、復元した暗号文データC102を記憶している記憶領域上に平文データP102を上書きする。そして、通信装置100Aは、特徴値のチェックにより平文データP102が正しい平文データであることを確認することができる。
以上のような再暗号化と旧鍵による復号を通信装置100Aが行うことで、タイミングのずれに起因して現在鍵による復号では正しい平文データが得られない場合であっても、通信装置100Aは旧鍵による復号から正しい平文データを得ることができる。よって、データの再送は不要である。つまり、通信装置100Aが通信装置100Bへデータの再送を依頼する必要もないし、依頼に応じて通信装置100Bが平文データP102を新たな暗号鍵KA,a+1で暗号化しなおし、得られた暗号文データを通信装置100Aに送信する必要もない。また、通信装置100Bが再送に備えて平文データP102をしばらくの間保持しておく必要もない。
よって、第1実施形態は次の(a1)〜(a3)のような効果を奏する。
(a1)通信装置100Aと100Bの間のトラフィック量が少なくて済む。
(a2)通信装置100Bが再送に備えて余計な記憶領域を消費することもない。
(a3)再送依頼とデータの再送にかかる時間よりも、通信装置100A内で再暗号化と再度の復号にかかる時間の方が一般に短いので、通信装置100Aは速やかに正しい平文データP102を得ることができる。
さらに、第1実施形態の通信装置100Aは、上記のように、受信した暗号文データC102、復号データD102、再暗号化により復元した暗号文データC102、および平文データP102を、同じ記憶領域に次々と上書きしていく。よって、何らかの理由で通信装置100Aに搭載するメモリの容量が制限されている場合であっても、第1実施形態によれば、上記(a1)〜(a3)のような効果が得られる。
なお、図1に関しては以上のとおり通信装置100Bから通信装置100Aへのデータの送信のみを説明したが、もちろん、通信装置100Aが通信装置100Bにデータを送信してもよい。以下では、各通信装置がデータを受信する機能とデータを送信する機能の双方を備えるものとして説明する。
通信装置100Aと100Bの間の双方向の通信のためには、通信装置100Aがさらに、通信装置100Bを識別するための通信装置100BのアドレスAdrBと対応づけて通信装置100Bの最新の暗号鍵KB,bを記憶する。また、通信装置100Bは、通信装置100B自身が復号に用いる最新の暗号鍵KB,bを現在鍵として記憶するとともに、現在鍵の1つ前の世代の暗号鍵KB,b−1を旧鍵として記憶する。
すると、双方向通信が可能となり、また、通信装置100Aから通信装置100Bに送信されたデータに関して、通信装置100Bが必要に応じて再暗号化と旧鍵による再度の復号を行うことも可能となる。よって、通信装置100Aと100Bの双方ともに小容量のメモリしか搭載していない場合であっても、上記(a1)〜(a3)の効果が得られる。
なお、メモリ容量が制限される通信装置の具体例としては、例えば、センサネットワークにおける通信装置が挙げられる。センサネットワークは、適宜の場所に配置された多数のセンサから様々な情報を収集するためのネットワークであり、センサネットワーク内の各ノードは、センサと接続されるか、センサを内蔵する通信装置である。センサは、例えば、画像センサ、温度センサ、湿度センサ、圧力センサ、加速度センサなど、任意の種類のセンサでよい。
用途によっては、数千個〜数十万個のオーダの多数の通信装置を含むセンサネットワークが設計されるかもしれない。そして、現実社会においては、個々の通信装置が高価な場合、非常に多くの通信装置を含むセンサネットワークを構築して運用することは非現実的である。よって、センサネットワーク向けの通信装置は、製造原価が安価であることが好ましい。
そして、製造原価を抑えるためには、例えば、内蔵メモリの容量を制限することが有効である。なぜなら、内蔵メモリの容量を制限することで、通信装置に用いられる集積回路(Integrated Circuit;IC)の面積を小さくし、1枚の半導体ウェハからより多くのICを製造することができるようになり、ICの単価が下がるからである。
よって、第1実施形態の通信装置100Aと100Bは、例えばセンサネットワーク内の通信装置など、何らかの理由から内蔵メモリの容量が制限されている場合の通信装置として好適である。もちろん、たとえ豊富なメモリを搭載している通信装置であっても、第1実施形態によるメモリ節約の効果と上記(a1)〜(a3)の効果は得られる。
このように、通信装置100Aと100Bは、様々な環境において利用可能であるが、以下では図2を参照して、環境の例をさらに具体的に説明する。
図2は、第1実施形態が適用される環境の一例を示すシステム構成図である。第1実施形態は、無線通信ネットワークへの適用に限定されるものではないが、図2の例では、通信装置100Aと100Bは無線通信を行う。
また、図2には、通信装置100Aおよび100Bと同様の他の通信装置100C〜100Lも示されている。図2にはさらに、ゲートウェイ装置120と、サーバ130も図示されている。図2のアドホックネットワーク140は、以上の通信装置100A〜100Lとゲートウェイ装置120が自律的に構築するネットワークである。
図2の例では、アドホックネットワーク140内において通信装置100Aが直接通信可能なのは、通信装置100B〜100Iである。つまり、通信装置100Aからのホップ数が1なのは通信装置100B〜100Iであり、通信装置100Aから通信装置100J〜100Lへのホップ数は2以上である。
アドホックネットワーク140は、センサネットワークとして利用されてもよい。つまり、通信装置100A〜100Lのそれぞれが、センサと接続されるかまたはセンサを内蔵していてもよい。その場合、通信装置100A〜100Lのそれぞれは、センサが感知したデータを含むPDUを、アドホックネットワーク140を通じてゲートウェイ装置120に送信する。
図2の例では、通信装置100Dと100Fと100Iがゲートウェイ装置120と直接通信可能である。よって、通信装置100Aが送信したPDUは、例えば通信装置100Dを介して2ホップでゲートウェイ装置120に到達するかもしれない。他の通信装置100B〜100Lが送信したPDUも、アドホックネットワーク140内の適宜の経路を介してゲートウェイ装置120に到達する。
そして、ゲートウェイ装置120は、サーバ130と接続されているので、各通信装置100A〜100Lが送信したPDUは、ゲートウェイ装置120からさらにサーバ130へと転送される。なお、ゲートウェイ装置120はサーバ130と直接的に接続されていてもよいし、ネットワークを介して間接的に接続されていてもよい。また、ゲートウェイ装置120とサーバ130の間の接続は、有線、無線、またはその組み合わせである。
以上のようにして、サーバ130は、アドホックネットワーク140内の各通信装置100A〜100Lから、センサが感知したデータを収集し、分析することができる。例えば、各センサが温度センサの場合、サーバ130は、温度分布や温度変化を調べる処理を行ってもよいし、温度予測処理を行ってもよい。
そして、図1に例示したように、アドホックネットワーク140内の通信は暗号化され、暗号鍵は適宜の間隔で更新される。具体的には、少なくとも、アドホックネットワーク140内で直接通信することが可能な隣接する2台の装置間では、適宜の間隔で更新される暗号鍵が何らかの方法により共有され、鍵確立が実現される。
例えば、1ホップで通信可能な通信装置100Aと100Dの間では互いの暗号鍵が共有される。同様に、1ホップで通信可能な通信装置100Dとゲートウェイ装置120の間でも互いの暗号鍵が共有される。よって、通信装置100Aに接続または内蔵されるセンサが感知したデータは、以下のようにして、暗号化された状態で通信装置100Aから通信装置100Dを介してゲートウェイ装置120に到達する。
なお、アドホックネットワーク140におけるデータ転送経路の決定アルゴリズムは任意であるが、説明の便宜上、次のように仮定する。すなわち、通信装置100Aは、アドホックネットワーク140内の最終的な送信先がゲートウェイ装置120である場合は、隣接する通信装置100B〜100Iのうち通信装置100DにPDUを送信することに決定すると仮定する。
よって、この仮定のもとでは、通信装置100Aは、通信装置100Dのアドレスに対応づけて記憶している通信装置100Dの暗号鍵を用いて、センサが感知したデータを暗号化する。そして、通信装置100Aは、暗号化により得られた暗号文データをペイロードとして含むPDUを生成し、生成したPDUを送信する。
すると、通信装置100DがPDUを受信する。図1の例と同様にして、通信装置100Dは、現在鍵を用いる復号によりPDUから正しい平文データを得られるかもしれない。あるいは、場合によっては、鍵確立とPDUの送受信のタイミングのずれが原因で、通信装置100Dは、現在鍵を用いる1回目の復号では正しい平文データを得られないかもしれない。しかし、その場合も、通信装置100Dは、現在鍵を用いた再暗号化と旧鍵を用いた再度の復号により、結局は正しい平文データを得ることができる。
よって、通信装置100Dは、復号により得た平文データを、ゲートウェイ装置120の暗号鍵で暗号化する。そして、通信装置100Dは暗号化により得られた暗号文データをペイロードとして含むPDUを生成し、生成したPDUをゲートウェイ装置120に宛てて送信する。
すると、ゲートウェイ装置120がPDUを受信する。図1の例と同様にして、ゲートウェイ装置120は、現在鍵を用いる復号によりPDUから正しい平文データを得られるかもしれない。あるいは、場合によっては、鍵確立とPDUの送受信のタイミングのずれが原因で、ゲートウェイ装置120は、現在鍵を用いる1回目の復号では正しい平文データを得られないかもしれない。しかし、その場合も、ゲートウェイ装置120は、現在鍵を用いた再暗号化と旧鍵を用いた再度の復号により、結局は正しい平文データを得ることができる。
すると、ゲートウェイ装置120は、復号により得た平文データを適宜暗号化し、暗号化により得られた暗号文データをペイロードとして含むPDUを生成し、生成したPDUをサーバ130に送信する。なお、アドホックネットワーク140内で使われる暗号化アルゴリズムと、ゲートウェイ装置120とサーバ130の間で使われる暗号化アルゴリズムは、同じでもよいし異なっていてもよい。
サーバ130は、ゲートウェイ装置120からPDUを受信し、受信したPDUのペイロードを復号することで、通信装置100Aに接続された(または通信装置100Aに内蔵された)センサが感知したデータである平文データを得ることができる。サーバ130は、同様にして他の通信装置100B〜100Lからも、センサが感知したデータを収集することができる。
なお、上記では主にアドホックネットワーク140がセンサネットワークとして利用される場合を例に説明したが、アドホックネットワーク140はセンサネットワークでなくてもよい。
さて、続いて、図3〜13を参照して、第1実施形態についてさらに詳細に説明してゆく。
図3は、第1実施形態の通信装置のブロック構成図である。なお、第1実施形態では、通信装置100A〜100Lはいずれも図3の通信装置100であり、ゲートウェイ装置120も図3に示す各部を有する。また、図3および後述の図14では、矢印の線が交差している箇所があるが、線の交差は線同士の接続を意味しないので注意されたい。
図3の通信装置100は、鍵管理部101、鍵記憶部102、指示部103、メモリ104、受信部105、復号部106、判断部107、再暗号化部108、平文処理部109、および配送部110を有する。そして、配送部110は暗号化部111を含み、暗号化部111は鍵認識部112を含む。通信装置100内のこれら各部の詳細は、以下のとおりである。
鍵管理部101は、通信装置100が復号に用いる暗号鍵を繰り返し生成する。そして、鍵記憶部102は、鍵管理部101が生成した複数の暗号鍵を記憶する第1の記憶部の一例である。
具体的には、第1実施形態の鍵記憶部102は、図1に示すように現在鍵と旧鍵という2つの暗号鍵を記憶する。しかし、実施形態によっては、鍵記憶部102は、2世代以上前の暗号鍵も含めた3つ以上の暗号鍵を記憶してもよい。また、鍵管理部101は、上記のように暗号鍵を繰り返し生成することで鍵生成部として動作するだけでなく、暗号鍵の生成にともなう旧鍵の更新など、暗号鍵に関するその他の管理も行う。
また、指示部103は、鍵記憶部102に記憶されている複数の暗号鍵のうちの1つを選択暗号鍵として選択する。つまり、指示部103は、復号または再暗号化に用いる暗号鍵を選択暗号鍵として選択する。なお、選択暗号鍵は状況に応じて異なるが、詳しくは後述する。
そして、メモリ104は、第2の記憶部の一例である。図3には、メモリ104上に記憶される受信データ114と送信データ115も図示されている。なお、図3では、ヘッダとペイロードを含むPDU全体のデータを、受信データ114および送信データ115として図示している。
図1の説明から理解されるように、受信データ114のペイロードは、受信された暗号文の状態の場合もあるし、暗号化されたときとは異なる暗号鍵で復号された状態の場合もありうる。さらに、受信データ114のペイロードは、再暗号化された状態の場合もありうるし、暗号化されたときと同じ暗号鍵で復号された正しい平文の状態の場合もある。また、後述するように、送信データ115のペイロードも、平文の状態の場合もあるし、暗号文の状態の場合もある。
換言すれば、メモリ104は、暗号化データまたは復号データを記憶するデータ記憶部の一例である。また、暗号化データは、換言すれば暗号文データである。復号データは、正しく復号された平文データのこともあるし、暗号化されたときとは異なる暗号鍵で復号されたデータのこともある。
そして、受信部105は、暗号文データを受信し、受信した暗号文データをメモリ104に格納する。つまり、図3の受信データ114のペイロードは、最初は、受信部105がメモリ104に受信データ114を格納したときの暗号文の状態である。
また、復号部106は、指示部103が指示する選択暗号鍵を鍵記憶部102から読み出し、メモリ104に受信データ114のペイロードとして記憶されている暗号文データを、選択暗号鍵を用いて復号する。なお、復号の際に、復号部106は、復号により得られる復号データによってメモリ104上の暗号文データを上書きする。その結果、受信データ114のペイロードは、選択暗号鍵で復号された状態となる。図1に関して説明したように、上書きによりメモリ104の効率的な利用が可能となる。
判断部107は、受信データ114のペイロードとしてメモリ104上に記憶されている復号データに含まれる第1の部分から、第1の部分の特徴を示す特徴値を算出する。そして、算出した特徴値と復号データに含まれる第2の部分が整合すれば、判断部107は、復号データが正常な平文データだと判断する。逆に、算出した特徴値と復号データに含まれる第2の部分が整合しなければ、判断部107は、復号データが異常だと判断する。
そして、再暗号化部108は、復号データが異常だと判断部107が判断したとき、指示部103が指示する選択暗号鍵を鍵記憶部102から読み出し、選択暗号鍵を用いてメモリ104上の復号データを暗号化する。このように、再暗号化部108は、復号データを暗号化する暗号化部の具体例である。
なお、暗号化の際、再暗号化部108は、暗号化により再度得られる暗号文データによってメモリ104上の復号データを上書きする。その結果、受信データ114のペイロードは元の暗号文に戻る。図1に関して説明したように、上書きによりメモリ104の効率的な利用が可能となる。
ところで、上記のように選択暗号鍵は状況に応じて異なる。
例えば、受信部105が暗号文データを受信したときは、指示部103は、鍵管理部101が生成した最新の暗号鍵である現在鍵を選択暗号鍵として選択する。また、受信部105は、受信データ114のペイロードの復号を復号部106に命令する。よって、この場合、復号部106は、受信データ114のペイロードとして記憶されている暗号文データを、現在鍵を使って復号する。
他方、復号データが異常だと判断部107が判断したときは、指示部103は、現在選択している選択暗号鍵とは異なる暗号鍵を選択暗号鍵として選択しなおす。なお、第1実施形態では、復号データが異常だと判断されるのは、具体的には選択暗号鍵が現在鍵の場合である。よって、指示部103が選択暗号鍵として選択しなおす暗号鍵は、具体的には旧鍵である。
また、復号データが異常だと判断部107が判断したときに指示部103が選択暗号鍵を選択しなおすタイミングは、より正確には、判断部107の判断にしたがって再暗号化部108がメモリ104上の復号データを暗号文データによって上書きした後である。そして、選択暗号鍵を選択しなおすと、指示部103は、受信データ114のペイロードを復号するよう復号部106に命令する。よって、この場合、復号部106は、受信データ114のペイロードとして記憶されている暗号文データを、旧鍵で復号する。
ここで、図1の通信装置100Aの例を参照しながら、図3の各部の具体的動作の例をさらに詳細に説明する。
図1の例では、通信装置100Aの鍵管理部101は、暗号鍵KA,a−1、KA,a、KA,a+1などを生成する。鍵記憶部102は、時刻TA101から時刻TA104の直前までは現在鍵KA,aと旧鍵KA,a−1を記憶する。また、時刻TA104以降、鍵管理部101が次に暗号鍵の更新を行うまでは、鍵記憶部102は、現在鍵KA,a+1と旧鍵KA,aを記憶する。
そして、時刻TA102で通信装置100Aの受信部105が暗号文データC101を受信したときは、指示部103は、最新の暗号鍵である現在鍵KA,aを選択暗号鍵として選択する。よって、メモリ104上に受信データ114のペイロードとして記憶されている暗号文データC101は、時刻TA103において復号部106により復号され、平文データP101で上書きされる。
この場合、判断部107は、平文データP101の特徴値から、平文データP101が正常だと判断する。通信装置100Aの平文処理部109は、正常な平文データP101について実施形態に応じた適宜の処理を行う。
また、時刻TA105で通信装置100Aの受信部105が暗号文データC102を受信したときは、指示部103は、現在鍵KA,a+1を選択暗号鍵として選択する。よって、メモリ104上に受信データ114のペイロードとして記憶されている暗号文データC102は、時刻TA106において復号部106により復号され、復号データD102で上書きされる。
この場合、判断部107は、復号データD102の特徴値から、復号データD102が正常な平文データではない(すなわち復号データD102が異常である)と判断する。そこで、判断部107による判断にしたがい、時刻TA107において再暗号化部108が、選択暗号鍵として選択されている現在鍵KA,a+1を用いて復号データD102を暗号化する。その結果、メモリ104上の受信データ114のペイロードとして記憶されていた復号データD102は、暗号文データC102で上書きされる。
さらに、再暗号化後の時刻TA108では、指示部103が、選択暗号鍵として現在選択している現在鍵KA,a+1とは異なる旧鍵KA,aを選択暗号鍵として選択しなおし、暗号文データC102を復号するよう復号部106に命令する。すると、メモリ104上に受信データ114のペイロードとして記憶されている暗号文データC102は、復号部106により復号され、平文データP102で上書きされる。
この場合、判断部107は、平文データP102の特徴値から、平文データP102が正常だと判断する。そして、平文処理部109が平文データP102に対して適宜の処理を行う。
ところで、以上説明したような、図3の通信装置100自身が復号に用いる暗号鍵の管理と、他の通信装置100からのデータの受信を契機とする処理のほかに、通信装置100は、データの送信も行うことができる。以下では、送信に関わる各部の詳細について、図1の通信装置100Bの例を参照しながら具体的に説明する。
平文処理部109は、ペイロードが上記のように正しい平文データに復号された受信データ114を処理するだけでなく、他の通信装置100に送信する対象のデータとして平文の送信データ115をメモリ104上に生成してもよい。例えば、図1の通信装置100Bの平文処理部109は、時刻TB102において、平文データP101とヘッダを生成し、平文データP101とヘッダを含むPDUを送信データ115としてメモリ104に格納し、PDUを暗号化するよう暗号化部111に命令する。
すると、時刻TB103で暗号化部111は、メモリ104上に送信データ115のペイロードとして記憶されている平文データP101を暗号化する。具体的には、暗号化部111内の鍵認識部112は、暗号化に用いる暗号鍵KA,aを認識することができるので、暗号化部111は、鍵認識部112が認識した暗号鍵KA,aを用いて平文データP101を暗号化する。
例えば、平文処理部109が平文データP101の送信先である通信装置100AのアドレスAdrAを明示的に暗号化部111に通知することにより、暗号化部111は送信先のアドレスAdrAを認識することもできる。あるいは、暗号化部111がメモリ104上のヘッダから送信先の通信装置100AのアドレスAdrAを読み取ってもよい。
すると、暗号化部111内の鍵認識部112は、暗号化部111が送信先のアドレスとして認識したアドレスAdrAから、アドレスAdrA宛てに送信する送信データ115のペイロードの暗号化に用いる暗号鍵を認識することができる。図1Aの例では、鍵認識部112は、時刻TB103においては、「アドレスAdrA宛てに送信する送信データ115のペイロードの暗号化に用いる暗号鍵は、暗号鍵KA,aである」と認識する。よって、暗号化部111は、送信データ115のペイロードとして記憶されている平文データP101を、暗号鍵KA,aを用いて暗号化する。
その際、復号部106による復号や再暗号化部108による再暗号化と同様に、暗号化部111もメモリ104上の同一記憶領域への上書きを行う。つまり、暗号化部111は、送信データ115のペイロードとしてメモリ104上に記憶されている平文データP101を暗号化し、暗号化により得られる暗号文データC101によって平文データP101を上書きする。このような上書きにより、送信時においても、メモリ104の効率的な利用が可能となる。
暗号化部111は、暗号化処理を終えると、送信データ115を送信するよう送信部113に命令する。例えば、時刻TB104では、送信部113が暗号化部111からの命令にしたがってメモリ104から送信データ115(すなわち暗号文データC101を含むPDUのデータ)を読み出す。そして、送信部113は、PDUを通信装置100Aに宛てて送信する。
以上のように動作する配送部110内の暗号化部111と送信部113により、メモリ104上に記憶される送信データ115は、ペイロードが暗号化された状態で送信先の他の通信装置100へと配送される。
続いて、図3の各部を実現するハードウェアの具体例について、図4を参照して説明する。図4は、第1実施形態の通信装置のハードウェア構成の例を示す図である。
図4に示すように、通信装置100は、MicroProcessing Unit(MPU)201を有する。また、通信装置100は、有線物理層処理部202または無線処理部203の少なくとも一方を有する。通信装置100はさらに、タイマIC204と耐タンパ性Peripheral Interface Controllerマイクロコンピュータ(PICマイコン)205を有してもよい。また、通信装置100は、Dynamic Random Access Memory(DRAM)206とフラッシュメモリ207を有する。
MPU201と有線処理部202の間の接続インタフェースは、例えば、Media Independent Interface(MII)またはManagement Data Input/Output(MDIO)である(以下「MII/MDIO208」と表記する)。MIIとMDIOはいずれも、物理層とMAC副層との間のインタフェースである。
また、タイマIC204と耐タンパ性PICマイコン205は、Inter-Integrated Circuit(I2C)バスまたはParallel Input/Output(PIO)バス(以下「I2C/PIOバス209」と表記する)によりMPU201と接続されている。そして、無線処理部203とDRAM206とフラッシュメモリ207は、Peripheral Component Interconnect(PCI)バス210によりMPU201と接続されている。
通信装置100において、MPU201は、不揮発性記憶装置の1種であるフラッシュメモリ207上に格納されたファームウェアなどの種々のプログラムを、DRAM206上にロードして実行することで、様々な処理を行う。MPU201が実行するプログラムの例は、例えば、耐タンパ性PICマイコン205のドライバ、後述の図7の処理のためのプログラム、後述の図10または図12の処理のためのプログラムなどである。
有線処理部202は、ケーブルを接続する物理ポートおよび有線接続における物理層の処理を行う回路を含むハードウェアである。また、無線処理部203は、無線接続における物理層とMAC副層の処理を行うハードウェアであり、例えば、アンテナ、アナログ・ディジタル変換器、ディジタル・アナログ変換器、変調器、復調器などを含む。
タイマIC204は、設定された時間が経過するまでカウントアップ動作を行い、設定された時間が経過すると割り込み信号を出力する回路である。また、耐タンパ性PICマイコン205は、所定のアルゴリズムが組み込まれたマイコンである。当該所定のアルゴリズムは、耐タンパ性PICマイコン205が耐タンパ性を有するので、外部から解析することができない。
DRAM206は各種のデータを記憶し、フラッシュメモリ207は上記のとおり、ファームウェアプログラムなどを記憶する。フラッシュメモリ207は、通信装置100自身のIdentification(ID)やMACアドレスなど、通信装置100自身に固有の情報をさらに記憶していてもよい。また、実施形態に応じて通信装置100は、フラッシュメモリ207の代わりに、あるいはフラッシュメモリ207とともに、Read Only Memory(ROM)またはハードディスク装置などの他の不揮発性記憶装置を有していてもよい。
また、プログラムは、フラッシュメモリ207またはその他の不揮発性記憶装置に予めインストールされていてもよい。あるいは、プログラムは、アドホックネットワーク140などのネットワークからダウンロードされて、フラッシュメモリ207またはその他の不揮発性記憶装置に格納されてもよい。
もちろん、実施形態によっては、通信装置100がさらに、コンピュータ読み取り可能な記憶媒体の駆動装置を有してもよい。その場合、プログラムは、記憶媒体からフラッシュメモリ207またはその他の不揮発性記憶装置へとコピーされてもよい。記憶媒体としては、半導体メモリカード、Compact Disc(CD)やDigital Versatile Disk(DVD)などの光ディスク、光磁気ディスク、磁気ディスクなどが利用可能である。
図4を参照して以上説明したような各種ハードウェアにより、図3の各部が実現される。
例えば、図3の鍵管理部101は、通信装置100自身が復号に用いる暗号鍵を生成し、鍵記憶部102の記憶内容を更新するアルゴリズムが組み込まれた耐タンパ性PICマイコン205と、暗号鍵を更新する間隔が設定されたタイマIC204により実現されてもよい。あるいは、鍵管理部101は、通信装置100自身が復号に用いる暗号鍵を生成し、鍵記憶部102の記憶内容を更新するためのプログラムを実行するMPU201と、暗号鍵を更新する間隔が設定されたタイマIC204により実現されてもよい。もちろん、MPU201は、タイマIC204からの信号によってではなく、内部クロックによって時刻を認識し、暗号鍵を更新するタイミングを認識してもよい。
なお、通信装置100自身が復号に用いる暗号鍵は、通信装置100が送信するデータの内容や応用分野に応じて、通信装置100ごとに異なる通信装置100に固有の暗号鍵の場合もあるし、複数の通信装置100間で共通の暗号鍵の場合もある。第1実施形態はどちらの場合にも適用可能である。
また、鍵記憶部102は、耐タンパ性PICマイコン205内のRAMにより実現されてもよいし、DRAM206により実現されてもよい。あるいは、不図示の他の耐タンパ性メモリを通信装置100がさらに備え、当該耐タンパ性メモリが鍵記憶部102を実現してもよい。
そして、指示部103と復号部106と判断部107と再暗号化部108と平文処理部109は、プログラムを実行するMPU201により実現される。もちろん、MPU201の代わりに各部を実現する専用のハードウェア回路が使われてもよい。例えば、復号部106は専用の復号回路により実現されてもよいし、再暗号化部108は専用の暗号化回路により実現されてもよい。
また、メモリ104は、DRAM206により実現される。そして、受信部105と送信部113は、有線処理部202または無線処理部203の少なくとも一方と、プログラムを実行するMPU201により実現される。
暗号化部111は、例えば、送信データ115のペイロードを暗号化するためのプログラムを実行するMPU201または専用の暗号化回路を含む。そして、暗号化部111内の鍵認識部112は、以下のようなハードウェアにより実現されてもよい。
例えば、鍵認識部112は、他の通信装置100が復号に用いる暗号鍵を生成して管理するためのプログラムを実行するMPU201と、他の通信装置100が復号に用いる暗号鍵を更新する間隔が設定されたタイマIC204を含んでもよい。もちろん、他の通信装置100が復号に用いる暗号鍵を生成して管理するハードウェアは、MPU201ではなく耐タンパ性PICマイコン205でもよい。
または、鍵認識部112は、他の通信装置100から暗号鍵の通知を受信する有線処理部202または無線処理部203を含んでもよい。その場合、鍵認識部112は、受信した通知から他の通信装置100が復号に用いる暗号鍵を認識し、他の通信装置100が復号に用いる暗号鍵に関する記憶内容の更新を行うためのプログラムを実行するMPU201を含む。
なお、他の通信装置100が復号に用いる暗号鍵は、当該他の通信装置100に固有の暗号鍵の場合もあるし、複数の通信装置100間で共通の暗号鍵の場合もある。第1実施形態はどちらの場合にも適用可能である。
さらに、鍵認識部112は、他の通信装置100が復号に用いる暗号鍵を記憶するハードウェアとして、DRAM206または耐タンパ性PICマイコン205内のRAMを含む。あるいは、不図示の他の耐タンパ性メモリを通信装置100がさらに備え、当該耐タンパ性メモリが、他の通信装置100が復号に用いる暗号鍵を記憶するハードウェアとして使われてもよい。
以上、図4と図3を比較しながら説明したように、通信装置100は実施形態に応じて適宜のハードウェアにより実現することができる。続いて、通信装置100が用いるデータについて、図5〜6を参照して説明し、その後、図7〜13を参照して通信装置100が行う処理について説明する。
図5は、第1実施形態の通信装置が記憶するデータの一例を示す図である。具体的には、図5には、図1の通信装置100Aの鍵記憶部102と鍵認識部112が記憶するデータが例示されている。
図5に示す鍵記憶部102は、鍵管理部101が生成した最新の第a世代の暗号鍵KA,aを現在鍵として記憶し、鍵管理部101が以前に生成した第(a−1)世代の暗号鍵KA,a−1を旧鍵として記憶する。つまり、図5は、図1の時刻TA101以降、時刻TA104の直前までの期間の鍵記憶部102の状態を示す。なお、上記のとおり、鍵管理部101は暗号鍵を繰り返し生成し、鍵記憶部102の記憶内容を更新する。
また、図5に示す鍵認識部112は、通信装置100Aとの間で鍵が確立している他の通信装置100の暗号鍵を、アドレスと対応づけて記憶する。図5の例は、具体的には、図2の通信装置100B、100C、100Dなどが復号に用いる暗号鍵を通信装置100Aの鍵認識部112が認識している場合の例である。
この場合、通信装置100Aの鍵認識部112は、通信装置100BのアドレスAdrBと対応づけて通信装置100Bの最新の暗号鍵KB,bを記憶する。同様に、鍵認識部112は、通信装置100CのアドレスAdrCと対応づけて通信装置100Cの最新の暗号鍵KC,cを記憶し、通信装置100DのアドレスAdrDと対応づけて通信装置100Dの最新の暗号鍵KD,dを記憶する。もちろん、通信装置100Aの鍵認識部112は、さらに別の通信装置100についても、アドレスと暗号鍵の組を記憶していてもよい。
なお、通信装置100Aの鍵認識部112が、他の通信装置100B、100C、100Dなどの最新の暗号鍵を認識する方法は任意である。
例えば、通信装置100Bが新たな暗号鍵KB,b+1を通信装置100Aに通知してもよい。その場合、通信装置100Aの鍵認識部112は、通信装置100Bからの通知により通信装置100Bの暗号鍵の更新を認識し、アドレスAdrBに対応する暗号鍵を現在の第b世代の暗号鍵KB,bから新たな第(b+1)世代の暗号鍵KB,b+1に更新する。
あるいは、通信装置100Aの鍵認識部112は、通信装置100Bと通信することなく、例えば時刻の経過にしたがって、通信装置100Bの暗号鍵KB,bの更新のタイミングを認識してもよい。その場合、通信装置100Aの鍵認識部112は、通信装置100Bの暗号鍵KB,bの更新のタイミングを認識すると、新たな暗号鍵KB,b+1を生成し、アドレスAdrBに対応する暗号鍵を現在の暗号鍵KB,bから新たな暗号鍵KB,b+1に更新する。
以上のように、鍵認識部112は、送信先の他の通信装置100のアドレスと対応づけて当該他の通信装置100の暗号鍵を記憶し、暗号鍵の更新を適宜のタイミングで行う。
なお、各通信装置100が復号に用いる暗号鍵が異なる場合は、鍵認識部112は、図5に示すように、個々の通信装置100を識別するアドレスと対応づけて暗号鍵を記憶する。しかし、実施形態によっては、複数の通信装置100が復号に用いる暗号鍵が共通であってもよい。例えば、アドホックネットワーク140内のすべての通信装置100が共通の暗号鍵を用いる実施形態も可能である。その場合、鍵認識部112は、単に鍵記憶部102に記憶されている現在鍵を、送信データ115の暗号化用の暗号鍵として認識すればよく、図5のようにアドレス別に暗号鍵を記憶する必要はない。
さて、図6は、第1実施形態において送受信されるデータの形式を説明する図である。以下では説明の便宜上、図1の例と同様に、通信装置100Bが通信装置100Aにデータを送信する場合を具体例として挙げながら図6について説明する。
通信装置100Bの平文処理部109は、平文のボディ301を生成し、通信プロトコルに応じたヘッダ302を生成し、ボディ301から特徴値303を計算する。そして、平文処理部109は、ヘッダ302とボディ301と特徴値303を含む平文PDU304をメモリ104に格納する。平文PDU304のペイロードは、ボディ301と特徴値303の部分である。
なお、特徴値303は、ボディ301の特徴を示す値であればよい。また、図6では説明の簡単化のためボディ301の末尾にまとめて特徴値303のデータが付加されているが、特徴値303のデータがボディ301内の複数箇所に分散して挿入されていてもよい。
例えば、平文処理部109は、ボディ301の全部または一部から、ハッシュ関数により特徴値303を算出してもよい。つまり、特徴値303はハッシュ値でもよい。特徴値303の算出のためのハッシュ関数としては、例えば、メッセージ・ダイジェストまたはメッセージ完全性符号(Message Integrity Code;MIC)の生成のために利用される任意のハッシュ関数が利用可能である。また、特徴値303は、ハッシュ値を固定の暗号鍵で暗号化することで得られる値でもよい。
あるいは、平文処理部109は、ボディ301の全部または一部に対する誤り検出符号を特徴値303として算出してもよい。例えば、パリティ、チェックサム、Cyclic Redundancy Check(CRC)などの誤り検出符号が特徴値303として利用可能である。また、誤り検出符号の中には誤り訂正符号も含まれるが、例えばハミング符号やリード・ソロモン符号などの誤り訂正符号も利用可能である。その場合、ボディ301が情報ビットに相当し、特徴値303は、情報ビットから算出される符号ビットに相当する。
さて、平文処理部109は、特徴値303を含む平文PDU304をメモリ104に格納すると、図3の送信データ115に相当する平文PDU304に関して、ペイロードを暗号化するよう暗号化部111に命令する。その結果、平文のボディ301は暗号化されたボディ305に置き換わり、平文の特徴値303は暗号化された特徴値306に置き換わる。つまり、メモリ104上には、ヘッダ302と暗号化されたボディ305と暗号化された特徴値306を含む暗号文PDU307が送信データ115として記憶される。
そして、通信装置100Bの送信部113は、暗号文PDU307を通信装置100Aに送信する。例えば、図1の暗号文データC101は、暗号文PDU307のペイロードの一例であり、暗号化されたボディ305と暗号化された特徴値306を含む。
通信装置100Bから送信された暗号文PDU307は、通信装置100Aの受信部105において受信され、メモリ104上に格納される。すると、復号部106が現在鍵を用いて暗号文PDU307のペイロード(すなわち暗号化されたボディ305と暗号化された特徴値306)を復号する。
その結果、メモリ104には、ヘッダ302と復号されたボディ308と復号された特徴値309を含む復号PDU310が記憶された状態となる。そこで、判断部107は、復号されたボディ308をメモリ104から読み出し、復号されたボディ308から特徴値311を算出する。なお、復号されたボディ308から判断部107が特徴値311を算出するアルゴリズムは、ボディ301から平文処理部109が特徴値303を算出するアルゴリズムと同じである。
そして、判断部107は、算出した特徴値311を、復号された特徴値309と比較する。もし、算出した特徴値311と復号された特徴値309が一致すれば、判断部107は、「復号PDU310のペイロードは正常な平文データである」と判断する。
逆に、算出した特徴値311と復号された特徴値309が一致しなければ、判断部107は、「復号PDU310のペイロードは異常である」と判断する。換言すれば、判断部107は、「暗号文PDU307の暗号化に使われたのは現在鍵ではなく旧鍵だった」と推測する。
そこで、判断部107は、復号PDU310のペイロードを暗号化するよう再暗号化部108に命令する。すると、再暗号化部108は、現在鍵で復号PDU310のペイロードを暗号化し、メモリ104上に暗号文PDU307を復元する。なお、再暗号化部108は、暗号化の処理が終了すると、暗号化の終了を指示部103に通知する。
よって、指示部103は、再暗号化部108からの通知を契機として選択暗号鍵を現在鍵から旧鍵に切り換え、暗号文PDU307のペイロードを復号するよう復号部106に命令する。復号部106による復号の後は、上記と同様にして再度判断部107による判断が行われ、正常な平文データが得られていれば、平文処理部109が正常な平文データを処理する。
さて、続いて図7〜13を参照して、以上説明した通信装置100の動作についてさらに詳しく説明する。
図7は、第1実施形態の通信装置がデータの受信を契機として行う受信処理のフローチャートである。なお、受信部105は、PDUを受信すると、受信したPDUのデータをメモリ104に受信データ114として格納するので、図7の受信処理が開始される時点で、メモリ104には受信データ114が記憶されている。
また、通信プロトコルによっては、他の通信装置100宛のPDUが物理的に受信されることもあるが、その場合、受信部105は、図7の受信処理を開始する前に、受信したPDUのヘッダから、宛先が通信装置100自身であるか否かを判断する。そして、受信部105は、宛先が通信装置100自身ではない場合は受信データ114を破棄し、宛先が通信装置100自身の場合に図7の受信処理を開始する。
ステップS101で受信部105は、受信データ114として記憶したPDUが、固定されていない暗号鍵により暗号化される種類のPDUであるか否かを、ヘッダから判断する。
受信したPDUが、固定されていない暗号鍵により暗号化される種類のPDUである場合、受信部105は、受信データ114のペイロードを復号するよう復号部106に命令し、処理はステップS102に移行する。また、受信したPDUが他の種類のPDUである場合、処理はステップS113に移行する。
なお、第1実施形態は、ヘッダにPDUの種類を示すフィールドがある例である。しかし、例えば、すべての種類のPDUが、固定されていない暗号鍵により暗号化されるような実施形態においては、ステップS101と後述のステップS113は省略可能である。
ステップS102で復号部106は、受信部105からの命令にしたがい、受信データ114のペイロードを復号する。具体的には、復号部106は、どの暗号鍵が選択暗号鍵であるかという情報を指示部103から得て、選択暗号鍵を鍵記憶部102から読み出し、選択暗号鍵を用いて受信データ114のペイロードを復号する。
なお、指示部103は、通信装置100に電源が入れられた初期状態では、選択暗号鍵として現在鍵を選択する。また、図7の処理はPDUの受信のたびに行われるが、ステップS105とS111に関して後述するとおり、指示部103は、図7の処理を終了する時点では、デフォルトの選択暗号鍵である現在鍵を選択暗号鍵として選択している。よって、ステップS102の時点では、選択暗号鍵は現在鍵である。
したがって、ステップS102において復号部106は、まず指示部103から「選択暗号鍵は現在鍵である」という情報を得て、鍵記憶部102から現在鍵を読み出し、現在鍵を用いて受信データ114のペイロードを復号する。なお、復号部106は、ステップS102における復号の際に、上記のとおり、受信データ114のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
復号部106は、復号を終えると、復号の完了を判断部107に通知する。そして、処理はステップS103に移行する。
ステップS103では、復号部106からの通知を受けた判断部107が、復号部106が復号したデータから特徴値を取り出す。つまり、判断部107は、メモリ104から図6の復号された特徴値309を読み出す。
そして、次のステップS104で判断部107は、復号部106が復号したデータのボディから特徴値を計算する。つまり、判断部107は、メモリ104から図6の復号されたボディ308を読み出し、復号されたボディ308から所定のアルゴリズムにしたがって特徴値311を計算する。なお、ステップS103とステップS104は、逆順に実行されてもよいし、並行して実行されてもよい。
続いて、ステップS105で判断部107は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
2つの特徴値が一致する場合、判断部107は、「ステップS102で復号されてメモリ104上に記憶されている受信データ114のペイロードは、正常な平文データである」と判断する。この場合、判断部107は、メモリ104上の受信データ114の処理を行うよう平文処理部109に命令する。
2つの特徴値が一致する場合はさらに、判断部107が、次のPDUの受信に備えて選択暗号鍵をリセットするよう、指示部103に命令してもよい。そして、指示部103はデフォルトの選択暗号鍵である現在鍵を改めて選択暗号鍵として選択しなおしてもよい。もちろん、ステップS105の時点での選択暗号鍵は現在鍵なので、このような明示的な選択暗号鍵のリセットは省略可能である。そして、2つの特徴値が一致する場合、処理はステップS106に移行する。
他方、2つの特徴値が一致しない場合、判断部107は、「ステップS102で復号されてメモリ104上に記憶されている受信データ114のペイロードは、異常である」と判断する。この場合、判断部107は、メモリ104上の受信データ114のペイロードを再暗号化して受信データ114を元の状態に戻すよう、再暗号化部108に命令する。つまり、判断部107は、再暗号化部108に対して、選択暗号鍵に基づいて復号部106が復号した復号データをメモリ104から読み出して、復号データを選択暗号鍵に基づいて暗号化した暗号化データをメモリ104に上書きするように、命令を出す。そして、処理はステップS107に移行する。
ステップS106で平文処理部109は、復号部106が復号したPDUを処理する。つまり、平文処理部109は、ペイロードが正常な平文に復号されて受信データ114としてメモリ104に記憶されているデータを読み出し、適宜の処理を行う。そして、図7の処理は終了する。
なお、ステップS106における処理の種類は実施形態に応じて任意であるが、例えば、センサネットワークとして使われるアドホックネットワーク140内のノードとして通信装置100が使われる場合は、平文処理部109は、次のような処理を行ってもよい。
例えば、図2の通信装置100Aが通信装置100EからPDUを受信したとする。また、実施形態に応じた適宜のアルゴリズムにより、通信装置100Aは経路に関して次のように認識しているとする。すなわち、通信装置100Aは、「アドホックネットワーク140内での最終的な宛先がゲートウェイ装置120であるPDUを受信したら、受信したPDUを通信装置100Dに転送するのが適切である」と認識しているとする。
この場合、通信装置100Aの平文処理部109は、通信装置100Eまたは不図示の他の通信装置100がセンサから得たデータを含む受信データ114のペイロードを、送信データ115のペイロードとして用いることを決定する。例えば、平文処理部109は、転送先の通信装置100DのアドレスAdrDを受信データ114のヘッダに上書きすることで、受信データ114の記憶領域に上書きして送信データ115を生成してもよい。送信データ115の用意が整うと、平文処理部109は、送信データ115を暗号化するよう暗号化部111に命令する。
すると、転送先の通信装置100DのアドレスAdrDと対応づけて鍵認識部112が認識している暗号鍵KD,dを用いて、暗号化部111が送信データ115を暗号化し、送信部113が送信データ115を送信する。その結果、通信装置100Eまたは不図示の他の通信装置100がセンサから得たデータを含むPDUは、通信装置100Aから通信装置100Dへと転送される。
もちろん、実施形態によっては、上記のような転送処理以外の処理がステップS106で行われてもよい。例えば、受信データ114や送信データ115がデータリンク層のPDUのデータである場合、平文処理部109は、ネットワーク層より上層のレイヤのプロトコルにしたがったデータ処理を行ってもよい。あるいは、受信データ114や送信データ115がネットワーク層のPDUのデータである場合、平文処理部109は、トランスポート層より上層のレイヤのプロトコルにしたがったデータ処理を行ってもよい。
さて、ステップS107では、復号部106が復号したデータを再暗号化部108が現在鍵で再暗号化する。具体的には、再暗号化部108は、まず指示部103から「選択暗号鍵は現在鍵である」という情報を得る。そして、再暗号化部108は、鍵記憶部102から現在鍵を読み出し、現在鍵を用いて受信データ114のペイロードを暗号化する。
なお、再暗号化部108は、ステップS107における暗号化の際に、上記のとおり、受信データ114のペイロードを、暗号化したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
そして、再暗号化部108は、暗号化を終えると、暗号化の終了を指示部103に通知する。すると、指示部103は、現在選択している選択暗号鍵とは異なる暗号鍵である旧鍵を選択暗号鍵として選択しなおし、受信データ114のペイロードを復号するよう復号部106に命令する。
続いて、ステップS108で復号部106は、再暗号化部108が再暗号化したデータを旧鍵で復号する。具体的には、復号部106は、まず指示部103から「選択暗号鍵は旧鍵である」という情報を得る。そして、復号部106は、鍵記憶部102から旧鍵を読み出し、旧鍵を用いて受信データ114のペイロードを復号する。
なお、復号部106は、ステップS108における復号の際にも、ステップS102と同様に、受信データ114のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
そして、復号部106は、復号を終えると、復号の完了を判断部107に通知する。すると、処理はステップS109に移行する。
ステップS109で判断部107は、ステップS103と同様に、復号部106が復号したデータから特徴値を取り出す。
また、次のステップS110で判断部107は、ステップS104と同様に、復号部106が復号したデータのボディから特徴値を計算する。なお、ステップS109とS110は、逆順に実行されてもよいし、並行して実行されてもよい。
続いて、ステップS111で判断部107は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
2つの特徴値が一致する場合、判断部107は、「ステップS108で復号されてメモリ104上に記憶されている受信データ114のペイロードは、正常な平文データである」と判断する。この場合、判断部107は、メモリ104上の受信データ114の処理を行うよう平文処理部109に命令する。
2つの特徴値が一致する場合はさらに、判断部107が、次のPDUの受信に備えて選択暗号鍵をリセットするよう、指示部103に命令する。すると、指示部103は、選択暗号鍵として現在鍵を選択しなおす。よって、次のPDUが受信されて再度図7の処理が開始される時点での選択暗号鍵は、現在鍵となる。以上のように平文処理部109への命令と選択暗号鍵の切り換えが行われると、処理はステップS106に移行する。
他方、2つの特徴値が一致しない場合、判断部107は、「ステップS108で復号されてメモリ104上に記憶されている受信データ114のペイロードは、異常である」と判断する。ステップS111において2つの特徴値が一致しない場合とは、受信したPDUのペイロードを現在鍵で復号しても旧鍵で復号しても正しい平文データが得られないという場合である。よって、この場合、判断部107は、「何らかのエラーが生じた」と判断する。
また、第1実施形態では、鍵記憶部102は現在鍵と旧鍵という2つの世代の暗号鍵のみを保持しているので、試す対象となる他の世代の暗号鍵は、これ以上は存在しない。そこで、2つの特徴値が一致しない場合も、判断部107は、次のPDUの受信に備えて選択暗号鍵をリセットするよう、指示部103に命令する。すると、指示部103は、選択暗号鍵として現在鍵を選択しなおす。よって、次のPDUが受信されて再度図7の処理が開始される時点での選択暗号鍵は、現在鍵となる。以上のようにエラー発生の認識と選択暗号鍵の切り換えが行われると、処理はステップS112に移行する。
なお、判断部107は、「再暗号化部108への再暗号化の命令を発した後、初めて復号部106から復号の終了を通知された場合は、旧鍵による復号の結果を検証する場合である」と認識することができる。逆に、判断部107は、「再暗号化部108への再暗号化の命令を発した後の初めての復号の終了の通知でなければ、現在鍵による復号の結果を検証する場合である」と認識することができる。
よって、判断部107は、選択暗号鍵がいずれの暗号鍵であるのかという情報を指示部103から明示的に得なくても、適正にふるまうことができる。つまり、判断部107は、受信データ114のペイロードを再暗号化するよう再暗号化部108に命令すればよいか、それともエラー発生を認識すればよいかを、指示部103からの明示的な情報なしに認識することができる。もちろん、判断部107は、選択暗号鍵がいずれの暗号鍵であるのかという情報を指示部103から明示的に得てもよい。
ステップS112では、判断部107が適宜のエラー処理を行う。あるいは、判断部107は不図示のエラー処理部に対してエラー処理を行うよう命令してもよい。エラー処理の具体的内容は任意である。例えば、エラー処理は、単に受信データ114の記憶領域を解放する処理でもよいし、送信元の他の通信装置100に対してPDUの再送を要求する処理でもよい。エラー処理の実行後、図7の処理も終了する。
ところで、ステップS101において、「受信したPDUは、固定されていない暗号鍵により暗号化される種類のPDUではない」と受信部105が判断した場合、ステップS113では、受信したPDUの種類に応じた適宜の処理が行われる。
なお、ステップS113における処理の主体、処理の内容、およびPDUの種類は実施形態に応じて任意である。例えば、固定された暗号鍵により暗号化される制御用PDUが受信された場合、不図示の制御用PDU処理部がステップS113の処理を行ってもよい。例えば、時刻同期用のPDUは、アドホックネットワーク140内で固定された暗号鍵によって暗号化されているかもしれない。その場合、ステップS113では時刻同期処理が行われてもよい。あるいは、まったく暗号化されずに送信されるPDUが受信された場合、平文処理部109がステップS113の処理を行ってもよい。いずれにしろ、PDUの種類に応じた適宜の処理が行われ、図7の処理も終了する。
続いて、図8と9を参照して、メモリの節約についてより詳しく説明する。
図8は、第1実施形態におけるメモリ上のデータの変遷の例を模式的に説明する図である。また、図9は、比較例におけるメモリ上のデータの変遷の例を模式的に説明する図である。
なお、図8と図9において、黒い背景は暗号文を示し、実線の枠のついた白い背景は正しい平文を示す。また、破線の枠のついた白い背景は、暗号化されたときとは異なる暗号鍵により復号された結果として得られる異常なデータを示す。
さて、通信装置100が用いる暗号の種類は、対称鍵暗号である。また、通信装置100が用いる暗号の種類を別の観点から述べれば、通信装置100は、ストリーム暗号を使ってもよいし、ブロック暗号を使ってもよい。
すなわち、暗号化および復号の対象となるデータ単位の長さが平文と暗号文の間で等しく、データ単位の並び順が平文と暗号文の間で変わらなければ、どのような種類の暗号でも各実施形態において利用可能である。ストリーム暗号の場合は、暗号化および復号の対象となるデータ単位は1ビットあるいは1バイトである。ブロック暗号の場合は、暗号化および復号の対象となるデータ単位はブロックである。以下では説明の便宜上、ストリーム暗号が使われる場合について主に説明する。
また、以下では“0x”という接頭辞が16進数を示すものとする。そして、4バイトのペイロードを含むPDUが受信された場合を例にして、図8を参照してステップS102とS107とS108におけるメモリ104上の領域の上書きについて説明する。なお、図8と図9では、復号と暗号化の進捗の様子が、4ビット分の処理が終わるごとの状態により模式的に示されている。
例えば、図8の時刻TA201において、受信部105が、受信データ114のペイロードとして、メモリ104上に0x06ac7963という暗号文データC201を格納したとする。
すると、復号部106が図7のステップS102の復号を進めるにつれ、図8に時刻TA202〜TA209の状態として示すように、暗号文データC201において暗号化されているビットが先頭から順に現在鍵により復号されていく。そして、暗号化されたビットは、復号されたビットで上書きされる。よって、時刻TA209にステップS102の復号が終了すると、もともと暗号文データC201が記憶されていたメモリ104の記憶領域上には、復号により得られた復号データD201が記憶されている。図8の例では、復号データD201は0x7a6025f3である。
このように、第1実施形態によれば、暗号文データC201が記憶されている記憶領域自体が復号データD201で上書きされるので、メモリの使用効率がよい。なお、ブロック暗号が使われる場合も、ストリーム暗号が使われる場合と同様に、復号データD201で暗号文データC201を上書きすることが可能である。すなわち、ブロック暗号が使われる場合でも、メモリ104上にブロックサイズ分の一時記憶領域さえあれば十分であり、暗号文データC201全体と復号データD201全体に対してそれぞれ別の記憶領域を割り当てる必要はない。
また、ステップS102での復号だけでなく、ステップS107における再暗号化とステップS108における復号でも、同様の上書きが行われるので、第1実施形態ではメモリの使用効率がよい。
具体的には、再暗号化部108がステップS107の再暗号化を進めるにつれ、図8に時刻TA210〜TA217の状態として示すように、復号データD201のビットが先頭から順に現在鍵により暗号化されていく。そして、復号データD201における各ビットは、暗号化されたビットで上書きされる。よって、時刻TA217にステップS107の再暗号化が終了すると、復号データD201が記憶されていたメモリ104の記憶領域上には、再暗号化により復元された暗号文データC201が記憶されている。
そして、復号部106がステップS108の復号を進めるにつれ、図8に時刻TA218〜TA225の状態として示すように、暗号文データC201において暗号化されているビットが先頭から順に現在鍵により復号されていく。そして、暗号化されたビットは、復号されたビットで上書きされる。よって、時刻TA225にステップS108の復号が終了すると、もともと暗号文データC201が記憶されていたメモリ104の記憶領域上には、復号により得られた平文データP201が記憶されている。図8の例では、平文データP201は0x365a6bf0である。
以上のような上書きによるメモリ節約の効果は、図9の比較例と図8を比較すれば、より一層明らかである。図9の比較例では、時刻TA301において暗号文データC201がメモリ104に記憶されると、現在鍵による復号で正しい平文データが得られない場合の旧鍵による復号に備えて、暗号文データC201はそのままメモリ104に保持され続ける。つまり、時刻TA302〜TA309にかけて行われる復号においては、暗号文データC201の記憶領域とは別の記憶領域に、現在鍵を用いた復号によって得られる復号データD201の各ビットが順に書き込まれてゆく。
そして、復号データD201においてボディの部分(例えば最初の3バイトの0x7a6025)から算出される特徴値と、復号データD201に含まれる特徴値(例えば最後の1バイトの0xf3)が比較される。比較結果から、復号データD201が正常な平文データではないと判断されると、図9の比較例においては、復号データD201とは別の記憶領域に記憶されている暗号文データC201が、旧鍵によって復号される。
旧鍵による復号の結果は、例えば、不要な復号データD201が記憶されている記憶領域に上書きされてもよいが、それでも図8の第1実施形態の例と比較すると、図9の比較例では余計な記憶領域が消費される。すなわち、時刻TA310〜TA317にかけて行われる旧鍵による復号において、暗号文データC201の記憶領域とは別の記憶領域に平文データP201の各ビットが順に書き込まれてゆく。
なお、第1実施形態と図9の比較例を比べると、再暗号化にかかる時間と消費される記憶領域がトレードオフの関係にあることが見て取れる。しかし、例えばセンサネットワークへの適用などの何らかの理由により、メモリ104の容量が非常に限定されている場合には、たとえ再暗号化に少々時間を使ってでも、記憶領域を節約しつつ旧鍵での復号を可能にする第1実施形態が好適である。
また、暗号化および復号が、プログラムを実行するMPU201により行われるにしろ、ハードウェア回路により行われるにしろ、対称鍵暗号の暗号化および復号の処理速度は一般に高速である。よって、再暗号化にかかる時間は、多くの場合、無視しても構わない程度である。すなわち、処理時間と記憶容量がトレードオフの関係にあるとは言っても、センサネットワークなどのある種の環境においては、記憶領域の容量削減の方が再暗号化にかかる時間の短縮よりも強いインパクトを持つ。もちろん、第1実施形態の通信装置100は、センサネットワーク内の通信装置に限定されるわけではないが、通信装置100は例えばセンサネットワーク内の通信装置として好適である。
以上、図7〜9を参照して、通信装置100がPDUの受信を契機として行う処理について説明したが、通信装置100はPDUの受信とは独立した処理も行う。すなわち、通信装置100は暗号鍵の更新も行う。そこで、以下では、暗号鍵の更新に関する2つの処理方法を、図10〜13を参照して説明する。
図10は、第1実施形態において通信装置が行う暗号鍵更新処理のフローチャートである。また、図11は、暗号鍵更新処理にともなうデータの変遷の例を模式的に説明する図である。なお、図11は、通信装置100Aにおいて現在鍵が第a世代の暗号鍵KA,aである場合を具体例として説明する図である。
ステップS201で鍵管理部101は、暗号鍵を更新する時刻になるまで待機する。そして、暗号鍵を更新する時刻になったと鍵管理部101が判断すると、処理はステップS202に移行する。
例えば、暗号鍵を更新する間隔がタイマIC204に予め設定されている場合、暗号鍵を更新する間隔ごとにタイマIC204は割り込み信号を出力してもよい。そして、MPU201または耐タンパ性PICマイコン205により実現される鍵管理部101は、割り込み信号の検出を契機に、ステップS201からステップS202への移行を認識してもよい。
ステップS202で鍵管理部101は、新たな暗号鍵を生成してメモリ104上の一時記憶領域に記憶する。例えば、図11に例示するように、通信装置100Aにおいて、鍵記憶部102に記憶されている現在鍵が第a世代の暗号鍵KA,aであり、旧鍵が第(a−1)世代の暗号鍵KA,a−1であるとする。すると、ステップS202で鍵管理部101は、次の第(a+1)世代の新たな暗号鍵KA,a+1を生成して一時記憶領域に記憶する。
そして、次のステップS203で鍵管理部101は、鍵記憶部102が記憶している現在鍵を旧鍵として記憶する。図11の例では、鍵管理部101は、鍵記憶部102において現在鍵KA,aを旧鍵のフィールドにコピーする。
さらに、次のステップS204で鍵管理部101は、生成した新たな暗号鍵を現在鍵として鍵記憶部102に記憶する。図11の例では、鍵管理部101は、一時記憶領域に記憶した新たな暗号鍵KA,a+1を、鍵記憶部102の現在鍵のフィールドにコピーする。その結果、鍵記憶部102は、現在鍵として新たな暗号鍵KA,a+1を記憶するとともに、旧鍵として、直前まで現在鍵であった暗号鍵KA,aを記憶する状態となる。
そして、ステップS204の実行後、処理はステップS201に戻る。
なお、通信装置100が他の通信装置100との間で鍵配送により暗号鍵を確立する場合には、通信装置100は、ステップS202、S203またはS204の後に、生成した新たな暗号鍵を他の通信装置100に配送する。鍵配送にかかる時間は、通信装置100内部での鍵記憶部102の更新にかかる時間よりも長いので、通信装置100は、ステップS204で鍵記憶部102内の現在鍵を更新する前に(例えばステップS202の直後に)新たな暗号鍵を配送してもよい。
ところで、図10の暗号鍵更新処理は、図7のステップS112のエラー処理の実行頻度を減らすことを目的として、図12のように変形されてもよい。以下では、変形された暗号鍵更新処理について、まず図12と図13を参照して処理の流れを説明し、その後、利点について説明する。
図12は、暗号鍵更新処理の変形例を示すフローチャートである。また、図13は、図12のように変形された暗号鍵更新処理にともなうデータの変遷の例を模式的に説明する図である。なお、図11と同様に図13も、通信装置100Aにおいて現在鍵が第a世代の暗号鍵KA,aである場合を具体例として説明する図である。
ステップS301で鍵管理部101は、暗号鍵を更新する時刻になるまで待機する。そして、暗号鍵を更新する時刻になったと鍵管理部101が判断すると、処理はステップS302に移行する。つまり、ステップS301はステップS201と同様である。
ステップS302で鍵管理部101は、新たな暗号鍵を生成してメモリ104上の一時記憶領域に記憶する。例えば、図13に例示するように、通信装置100Aにおいて、鍵記憶部102に記憶されている現在鍵が第a世代の暗号鍵KA,aであり、旧鍵が第(a−1)世代の暗号鍵KA,a−1であるとする。すると、ステップS302で鍵管理部101は、次の第(a+1)世代の新たな暗号鍵KA,a+1を生成して一時記憶領域に記憶する。
そして、次のステップS303で鍵管理部101は、現在鍵をメモリ104上の一時記憶領域(正確には、ステップS302で新たな暗号鍵を記憶したのとは別の一時記憶領域)にコピーする。図13の例では、鍵管理部101は、現在鍵KA,aをメモリ104上の一時記憶領域にコピーする。
さらに、次のステップS304で鍵管理部101は、生成した新たな暗号鍵を現在鍵として鍵記憶部102に記憶する。図13の例では、鍵管理部101は、一時記憶領域に記憶した新たな暗号鍵KA,a+1を、鍵記憶部102の現在鍵のフィールドにコピーする。
そして、次のステップS305で鍵管理部101は、ステップS303で一時記憶領域にコピーした現在鍵を旧鍵として鍵記憶部102に記憶する。図13の例では、鍵管理部101は、一時記憶領域に記憶した暗号鍵KA,aを、鍵記憶部102の旧鍵のフィールドにコピーする。その結果、鍵記憶部102は、現在鍵として新たな暗号鍵KA,a+1を記憶するとともに、旧鍵として、直前まで現在鍵であった暗号鍵KA,aを記憶する状態となる。
そして、ステップS305の実行後、処理はステップS301に戻る。なお、通信装置100が他の通信装置100との間で鍵配送により暗号鍵を確立する場合には、通信装置100は、図10の場合と同様に、ステップS302、S303、S304またはS305の後に、生成した新たな暗号鍵を他の通信装置100に配送する。また、この図12の暗号鍵更新処理では、ステップS302とS303の実行順は逆でもよいし、ステップS302とS303が並列に実行されてもよい。
さて、以上の図12のように変形された暗号鍵更新処理は、鍵記憶部102の更新中に鍵記憶部102が参照される場合にも、なるべく旧鍵による復号から正しい平文データが得られるように工夫されている。つまり、図12の暗号鍵更新処理は、「更新前の現在鍵KA,aによる復号と再暗号化の後、復号部106が再度復号を行う際に読み出す旧鍵が、最初の復号のときに用いた暗号鍵KA,aと同じ」といった事態になるべく陥らないよう、工夫されている。具体的には、鍵記憶部102の更新のための一連のステップS302〜S305の中で、更新前の旧鍵KA,a−1が更新されるステップS305が最後になるように、図12では暗号鍵更新処理が変形されている。
なお、実施形態によっては、鍵管理部101は、ステップS202〜S204の実行中またはステップS302〜S305の実行中には、復号部106や再暗号化部108からの鍵記憶部102への参照をブロックしてもよい。
続いて、図14〜20を参照して第2実施形態について説明する。第2実施形態では2種類の暗号鍵が利用される。そして、第1実施形態では上記のとおり通信装置100間の鍵確立の方法が任意であるが、第2実施形態では2種類の暗号鍵について異なる2つの方法で鍵確立が行われる。
具体的には、1種類目の暗号鍵は、通信装置同士が同じアルゴリズムにしたがって生成することにより通信装置間で確立される暗号鍵であり、複数の通信装置で共通して暗号化および復号に用いる暗号鍵である。以下では1種類目の暗号鍵を「共通鍵」という。そして、2種類目の暗号鍵は、各通信装置に固有の暗号鍵であり、以下では「アクセス鍵」という。通信装置間でのアクセス鍵の確立は、鍵配送によってなされる。また、第2実施形態では、アクセス鍵はアプリケーションデータの暗号化に用いられ、共有鍵はアクセス鍵の配送のための暗号化に用いられる。
以下では説明の便宜上、通信装置自身が生成したアクセス鍵を「内部由来(internally-originated)アクセス鍵」と称し、他の通信装置から配送されたアクセス鍵を「外部由来(externally-originated)アクセス鍵」と称する。
例えば、第1と第2の通信装置がアクセス鍵を互いに配送しあう場合、第1の通信装置が生成したアクセス鍵は、第1の通信装置にとっては内部由来アクセス鍵だが、第2の通信装置にとっては外部由来アクセス鍵である。同様に、第2の通信装置が生成したアクセス鍵は、第1の通信装置にとっては外部由来アクセス鍵だが、第2の通信装置にとっては内部由来アクセス鍵である。
さて、図14は、第2実施形態の通信装置のブロック構成図である。なお、図14の通信装置400も、例えば図4に示した各種ハードウェアにより実現することができる。
通信装置400は鍵管理部401を有する。そして、鍵管理部401は共通鍵管理部402と内部由来アクセス鍵管理部403と外部由来アクセス鍵管理部404を有する。
共通鍵管理部402は、第1実施形態の鍵管理部101の具体例の1つでもあり、鍵認識部112の一部の機能も有する。具体的には、共通鍵管理部402は、時刻に対して一意な値を求める処理を行うことにより、暗号鍵の1種として共通鍵を生成する鍵生成部として動作するとともに、暗号化鍵としての共通鍵も認識する。
また、内部由来アクセス鍵管理部403は鍵管理部101の具体例の1つである。すなわち、内部由来アクセス鍵管理部403は、暗号鍵の1種として、通信装置400事態に固有の暗号鍵である内部由来アクセス鍵を生成する鍵生成部としても動作する。
そして、外部由来アクセス鍵管理部404は鍵認識部112の具体例の1つであり、外部由来アクセス鍵を他の通信装置400と対応づけて管理する。
また、内部由来アクセス鍵管理部403は、平文処理部109の具体例の1つでもあり、内部由来アクセス鍵を含む平文の送信データ115を作成する。そして、外部由来アクセス鍵管理部404は、平文処理部109の具体例の1つでもあり、外部由来アクセス鍵を含む平文の受信データ114を処理して外部由来アクセス鍵を抽出する。
なお、共通鍵管理部402と内部由来アクセス鍵管理部403は、図4のMPU201により実現されてもよいし、耐タンパ性PICマイコン205により実現されてもよい。なお、共通鍵管理部402と内部由来アクセス鍵管理部403には、例えば図4のタイマIC204により実現される後述の時計425から、暗号鍵の更新間隔ごとに割り込み信号が入力されてもよい。外部由来アクセス鍵管理部404は、MPU201により実現することができる。
また、通信装置400は鍵記憶部405を有する。そして、鍵記憶部405は共通鍵記憶部406と内部由来アクセス鍵記憶部407と外部由来アクセス鍵記憶部408を有する。
共通鍵記憶部406は、第1実施形態において復号鍵を記憶する鍵記憶部102の機能と、鍵認識部112の一部の機能(すなわち暗号化鍵を認識する機能)を有する。また、内部由来アクセス鍵記憶部407は、復号鍵を記憶する鍵記憶部102の機能を有する。そして、外部由来アクセス鍵記憶部408は、鍵認識部112の一部の機能(すなわち暗号化鍵を認識する機能)を有する。
なお、鍵記憶部405内の各部は、DRAM206により実現されてもよいし、耐タンパ性PICマイコン205内のRAMにより実現されてもよい。あるいは、通信装置400が耐タンパ性メモリをハードウェアとして含む場合は、鍵記憶部405内の各部は、当該耐タンパ性メモリにより実現されてもよい。
さらに、通信装置400は指示部409を有する。指示部409は、第1実施形態の指示部103の具体例の1つである。すなわち、指示部409は、復号および再暗号化にどの暗号鍵を用いるのかを認識する。なお、指示部409は、MPU201により実現されてもよい。
また、通信装置400は、第1実施形態のメモリ104および受信部105とそれぞれ類似のメモリ410および受信部411を有する。メモリ410はDRAM206により実現され、受信部411は有線処理部202と無線処理部203少なくとも一方と、MPU201によって実現される。
そして、通信装置400は復号部412を有する。復号部412は、いずれも第1実施形態の復号部106の具体例に相当する受信データ復号部413および外部由来アクセス鍵復号部414を有する。なお、復号部412内の各部は、プログラムを実行するMPU201により実現されてもよいし、専用の復号回路により実現されてもよい。
また、物理的には1つの復号回路が、入力信号に応じて、あるときは受信データ復号部413として機能し、あるときは外部由来アクセス鍵復号部414として機能してもよい。同様に、1つの同じ復号アルゴリズムのプログラムモジュールが、引数に応じて、あるときはMPU201を受信データ復号部413として機能させ、あるときはMPU201を外部由来アクセス鍵復号部414として機能させてもよい。
さらに、通信装置400は判断部415を有する。判断部415は、いずれも第1実施形態の判断部107の具体例に相当する外部由来アクセス鍵判断部416と受信データ判断部417を有する。判断部415内の各部は、例えばMPU201により実現される。
さらに、通信装置400は暗号化部418を有する。暗号化部418は、いずれも第1実施形態の再暗号化部108の具体例に相当する外部由来アクセス鍵再暗号化部419と受信データ再暗号化部420を有する。さらに暗号化部418は、いずれも第1実施形態の暗号化部111における暗号化の機能を有する送信データ暗号化部421と内部由来アクセス鍵暗号化部422を有する。なお、暗号化部418内の各部は、プログラムを実行するMPU201により実現されてもよいし、専用の暗号化回路により実現されてもよい。
また、物理的には1つの暗号化回路が、入力信号に応じて、外部由来アクセス鍵再暗号化部419、受信データ再暗号化部420、送信データ暗号化部421、内部由来アクセス鍵暗号化部422のいずれかとして機能してもよい。同様に、1つの同じ暗号化アルゴリズムのプログラムモジュールが、引数に応じて、MPU201を暗号化部418内の各部のうちの1つとして機能させてもよい。
そして、通信装置400は、第1実施形態の平文処理部109の具体例の1つに相当するデータ処理部423を有する。データ処理部423は、ペイロードが平文の状態になった受信データ114を処理する平文処理部109の具体例でもあり、他の通信装置100に送信する平文の送信データ115を生成するデータ生成部としての平文処理部109の具体例でもある。なお、データ処理部423は、MPU201により実現されてもよい。
さらに、通信装置400は、第1実施形態の送信部113と同様の機能を有する送信部424を有する。送信部424は、有線処理部202と無線処理部203少なくとも一方と、MPU201によって実現される。なお、第2実施形態では、内部由来アクセス鍵管理部403と内部由来アクセス鍵暗号化部422と送信部424が協働して、内部由来アクセス鍵を他の通信装置400に通知する内部由来アクセス鍵配送部として動作する。内部由来アクセス鍵配送部は、暗号鍵を他の通信装置に通知する通知部の一例である。
そして、通信装置400は時計425も有する。時計425はタイマIC204により実現されてもよい。あるいは、MPU201がクロック信号に基づいて時計425として機能してもよい。
また、図14には、メモリ410内に記憶される受信データ426と送信データ427と外部由来アクセス鍵配送データ428と内部由来アクセス鍵配送データ429も図示されている。なお、第2実施形態においても、暗号化と復号の際には第1実施形態と同様の記憶領域の上書きが行われる。よって、メモリ410内に示した各データのペイロードは、正しい平文の状態のときもあるし、暗号文の状態のときもあるし、暗号化されたときとは異なる暗号鍵によって復号された状態のときもある。
以上のように、第2実施形態における通信装置400の各部は、第1実施形態における通信装置100の各部と同じか類似の機能を有する。そこで、通信装置400の各部の詳細な動作については、ここでは説明を割愛し、後述のフローチャートとともに説明することにする。なお、図14の通信装置400は、図2のアドホックネットワーク140において通信装置100A〜100Lの代わりに用いられてもよいし、ゲートウェイ装置120が通信装置400の各部を備えていてもよい。
さて、図15は、第2実施形態の通信装置が記憶するデータの一例を示す図である。
図15には、ある通信装置400の共通鍵記憶部406と内部由来アクセス鍵記憶部407と外部由来アクセス鍵記憶部408が記憶するデータが例示されている。
図15に示す共通鍵記憶部406は、共通鍵管理部402が生成した最新の第γ世代の共通鍵SKγを現在共通鍵として記憶する。さらに、共通鍵記憶部406は、共通鍵管理部402が以前に生成した第(γ−1)世代の共通鍵SKγ−1を旧共通鍵として記憶する。
なお、現在共通鍵は第1実施形態における現在鍵の具体例の1つであり、旧共通鍵は第1実施形態における旧鍵の具体例の1つである。また、指示部409は、「選択共通鍵」として、現在共通鍵または旧共通鍵の一方を選択する。
そして、図15に示す内部由来アクセス鍵記憶部407は、内部由来アクセス鍵管理部403が生成した最新の第a世代の内部由来アクセス鍵AKA,aを現在内部由来アクセス鍵として記憶する。さらに、内部由来アクセス鍵記憶部407は、内部由来アクセス鍵管理部403が以前に生成した第(a−1)世代の内部由来アクセス鍵AKA,a−1を旧内部由来アクセス鍵として記憶する。
なお、現在内部由来アクセス鍵は第1実施形態における現在鍵の具体例の1つであり、旧内部由来アクセス鍵は第1実施形態における旧鍵の具体例の1つである。また、指示部409は、「選択内部由来アクセス鍵」として、現在内部由来アクセス鍵または旧内部由来アクセス鍵の一方を選択する。
そして、図15に示す外部由来アクセス鍵記憶部408は、当該通信装置400との間で鍵が確立している他の通信装置400のアクセス鍵を、アドレスと対応づけて記憶する。なお、アドレスは、他の通信装置400を一意に識別する識別情報の一例である。また、第1実施形態と同様に第2実施形態も、様々な通信プロトコルに適用可能である。よって、外部由来アクセス鍵記憶部408が記憶するアドレスのレイヤも、適用対象の通信プロトコルのレイヤに応じて様々であってよく、例えば、MACアドレスやIPアドレスなどが利用可能である。
具体的には、図15の例では、外部由来アクセス鍵記憶部408は、アドレスAdrBが割り当てられた他の通信装置400から配送された最新の外部由来アクセス鍵AKB,bを、アドレスAdrBと対応づけて記憶する。同様に、外部由来アクセス鍵記憶部408は、アドレスAdrCが割り当てられた他の通信装置400から配送された最新の外部由来アクセス鍵AKC,cを、アドレスAdrCと対応づけて記憶する。さらに、外部由来アクセス鍵記憶部408は、アドレスAdrDが割り当てられた他の通信装置400から配送された最新の外部由来アクセス鍵AKD,dを、アドレスAdrDと対応づけて記憶する。
図16は、第2実施形態の通信装置がデータの受信を契機として行う受信処理のフローチャートである。なお、受信部411は、PDUを受信すると、受信したPDUのデータをメモリ410に格納するので、図16の処理が開始される時点で、メモリ410には受信したPDUのデータが記憶されている。
また、通信プロトコルによっては、他の通信装置400宛のPDUが物理的に受信されることもあるが、その場合、受信部411は、図16の受信処理を開始する前に、受信したPDUのヘッダから、宛先が通信装置400自身であるか否かを判断する。そして、受信部411は、宛先が通信装置400自身ではない場合は受信したPDUのデータを破棄し、宛先が通信装置400自身の場合に図16の受信処理を開始する。
ステップS401で受信部411は、メモリ410を参照して、受信したPDUの種類を判定する。なお、第2実施形態では、ヘッダにPDUの種類を示すフィールドがある。よって、受信部411は、種類を示すフィールドの値を参照することで、PDUの種類を判定することができる。
受信したPDUがアクセス鍵の配布用PDUである場合、通信装置400が受信したアクセス鍵の配布用PDUのデータとは、具体的には図14の外部由来アクセス鍵配送データ428である。よって、この場合に受信部411は、外部由来アクセス鍵配送データ428のペイロードを復号するよう外部由来アクセス鍵復号部414に命令し、処理はステップS402に移行する。
なお、アクセス鍵の配布用PDUは、図6の暗号文PDU307の1種である。アクセス鍵の配布用PDUにおける暗号化されたボディ305は、暗号文PDU307を送信する通信装置400にとっての内部由来アクセス鍵を含むデータを共通鍵で暗号化したデータである。
あるいは、受信したPDUがアクセス鍵で暗号化されるPDUである場合、通信装置400が受信したPDUのデータとは、具体的には図14の受信データ426である。よって、この場合に受信部411は、受信データ426のペイロードを復号するよう受信データ復号部413に命令し、処理はステップS403に移行する。
また、受信したPDUが上記2種類のいずれでもない場合、処理はステップS404に移行する。
例えば、図2のアドホックネットワーク140において、通信装置100A〜100Lの代わりに複数の通信装置400が用いられてもよく、通信装置400同士は、アドホックネットワーク140内で予め固定された暗号鍵を使って時刻同期の制御用PDUをやりとりしてもよい。あるいは、通信装置400同士は、特定の種類のPDUを暗号化せずにやりとりしてもよい。このように、予め固定された暗号鍵によりペイロードが暗号化されるPDUや、ペイロードがクリアテキストのPDUなどが受信された場合、処理はステップS404に移行する。
さて、ステップS402で通信装置400は、図17に示す外部由来アクセス鍵更新処理を行う。そして、図16の受信処理は終了する。
また、ステップS403で通信装置400は、図18に示す暗号化PDU受信処理を行う。そして、図16の受信処理は終了する。
また、ステップS404で通信装置400は、受信したPDUの種類に応じた適宜の処理を行う。そして、PDUの種類に応じた処理が終了すると、図16の受信処理も終了する。
なお、ステップS404における処理の主体、処理の内容、およびPDUの種類は実施形態に応じて任意である。例えば、ステップS401に関して例示した時刻同期の制御用PDUが受信された場合、ステップS404では、不図示の制御用PDU処理部が、時計425を必要に応じて修正する時刻同期処理を行ってもよい。
図17は、第2実施形態において通信装置が行う外部由来アクセス鍵更新処理のフローチャートである。なお、図17の処理において、第1実施形態の図7の受信処理と類似する点については、適宜説明を省略する。
ステップS501で外部由来アクセス鍵復号部414は、受信部411からの命令にしたがい、外部由来アクセス鍵配送データ428のペイロードを復号する。具体的には、外部由来アクセス鍵復号部414は、まず現在共通鍵と旧共通鍵のどちらが選択共通鍵として選択されているかという情報を指示部409から得る。そして、外部由来アクセス鍵復号部414は、選択共通鍵を共通鍵記憶部406から読み出し、選択共通鍵を用いて外部由来アクセス鍵配送データ428のペイロードを復号する。
なお、指示部409は、通信装置400に電源が入れられた初期状態では、選択共通鍵として現在共通鍵を選択する。また、図17の処理は、アクセス鍵の配布用PDUの受信のたびに行われるが、ステップS504とS508とS513に関して後述するとおり、指示部409は、図17の処理を終了する時点では、現在共通鍵を選択共通鍵として選択している。よって、ステップS501の時点では、選択共通鍵は現在共通鍵である。
したがって、ステップS501において外部由来アクセス鍵復号部414は、まず指示部409から「選択共通鍵は現在共通鍵である」という情報を得る。そして、外部由来アクセス鍵復号部414は、共通鍵記憶部406から現在共通鍵を読み出し、現在共通鍵を用いて外部由来アクセス鍵配送データ428のペイロードを復号する。
なお、外部由来アクセス鍵復号部414は、ステップS501における復号の際に、第1実施形態の復号部106と同様に、外部由来アクセス鍵配送データ428のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
外部由来アクセス鍵復号部414は、復号を終えると、復号の完了を外部由来アクセス鍵判断部416に通知する。そして、処理はステップS502に移行する。
ステップS502では、外部由来アクセス鍵復号部414からの通知を受けた外部由来アクセス鍵判断部416が、外部由来アクセス鍵復号部414が復号したデータから特徴値を取り出す。
そして、次のステップS503で外部由来アクセス鍵判断部416は、外部由来アクセス鍵復号部414が復号したデータのボディから特徴値を計算する。なお、ステップS502とS503は、逆順に実行されてもよいし、並行して実行されてもよい。
続いて、ステップS504で外部由来アクセス鍵判断部416は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
2つの特徴値が一致する場合、外部由来アクセス鍵判断部416は、「ステップS501で復号されてメモリ410上に記憶されている外部由来アクセス鍵配送データ428のペイロードは、正常な平文データである」と判断する。この場合、外部由来アクセス鍵判断部416は、配送された外部由来アクセス鍵を抽出して外部由来アクセス鍵記憶部408に登録する処理を、メモリ410上の外部由来アクセス鍵配送データ428を用いて行うよう、外部由来アクセス鍵管理部404に命令する。
2つの特徴値が一致する場合はさらに、外部由来アクセス鍵判断部416が、アクセス鍵の配布用PDUの次の受信に備えて選択共通鍵をリセットするよう、指示部409に命令し、指示部409が改めて現在共通鍵を選択共通鍵として選択しなおしてもよい。なお、図7のステップS105と同様、このような明示的なリセットは省略可能である。そして、2つの特徴値が一致する場合、処理はステップS505に移行する。
他方、2つの特徴値が一致しない場合、外部由来アクセス鍵判断部416は、「ステップS501で復号されてメモリ410上に記憶されている外部由来アクセス鍵配送データ428のペイロードは、異常である」と判断する。そして、処理はステップS508に移行する。
ステップS505〜S507で外部由来アクセス鍵管理部404は、外部由来アクセス鍵復号部414が復号した外部由来アクセス鍵配送データ428を参照し、配送された外部由来アクセス鍵を抽出して外部由来アクセス鍵記憶部408に登録する処理を行う。ステップS505〜S507における外部由来アクセス鍵管理部404は、第1実施形態における平文処理部109の1種として動作する。
具体的には、ステップS505で外部由来アクセス鍵管理部404は、メモリ410を参照し、受信したPDUのヘッダから送信元アドレスを取り出す。つまり、外部由来アクセス鍵管理部404は、図6の復号PDU310の状態でメモリ410に記憶されている外部由来アクセス鍵配送データ428から、ヘッダ302に含まれる送信元アドレスを取り出す。
そして、次のステップS506で外部由来アクセス鍵管理部404は、外部由来アクセス鍵復号部414が復号したデータから外部由来アクセス鍵を取り出す。つまり、外部由来アクセス鍵管理部404は、図6の復号PDU310の状態でメモリ410に記憶されている外部由来アクセス鍵配送データ428から、復号されたボディ308に含まれる外部由来アクセス鍵を取り出す。なお、ステップS505とS506は、逆順で実行されてもよいし、並行して実行されてもよい。
続いて、ステップS507で外部由来アクセス鍵管理部404は、ステップS505で取り出した送信元アドレスと、ステップS506で取り出した外部由来アクセス鍵を、互いに対応づけて、外部由来アクセス鍵記憶部408に格納する。
具体的には、外部由来アクセス鍵管理部404は、取り出した送信元アドレスを検索キーにして外部由来アクセス鍵記憶部408を検索する。検索の結果、取り出した送信元アドレスと一致するアドレスを持つエントリが見つかれば、外部由来アクセス鍵管理部404は、見つかったエントリにおける外部由来アクセス鍵を、ステップS506で取り出した外部由来アクセス鍵で上書きする。逆に、取り出した送信元アドレスと一致するアドレスを持つエントリが見つからなければ、外部由来アクセス鍵管理部404は、取り出した送信元アドレスと取り出した外部由来アクセス鍵を対応づける新たなエントリを外部由来アクセス鍵記憶部408に追加する。そして、図17の処理は終了する。
さて、ステップS504において2つの特徴値が一致しなかった場合、ステップS508で外部由来アクセス鍵判断部416は、現在時刻が旧共通鍵の有効期限内か否かを判断する。なお、第2実施形態において「現在時刻が旧共通鍵の有効期限内である」とは、「共通鍵の直近の更新から現在までに経過した時間が所定の許容時間(後述の図20における“ST”)以内である」という意味である。
なお、第2実施形態では、ネットワーク内の各通信装置400が、同じ所定の間隔(後述の図20における“SI”)でそれぞれ共通鍵を更新する。ステップS504で閾値として用いられる許容時間STは、共通鍵の更新間隔SIよりも短い時間である。旧共通鍵の有効期限を外部由来アクセス鍵判断部416が認識する具体的方法は実施形態に応じて様々であってよいが、例えば以下のようにして外部由来アクセス鍵判断部416は旧共通鍵の有効期限を認識してもよい。
例えば、時計425は、共通鍵の更新間隔SIが経過するたびに共通鍵管理部402に共通鍵の更新の契機となる共通鍵更新タイミング信号を出力してもよい。共通鍵更新タイミング信号は、例えば割り込み信号でもよい。
さらに、時計425は、共通鍵更新タイミング信号を出力してから許容時間STの間だけ、旧共通鍵が有効であることを示す旧共通鍵有効信号をアサート(assert)してもよい。つまり、時計425は、許容時間STの経過後、次に共通鍵更新タイミング信号を出力するまでの期間は、旧共通鍵有効信号をネゲート(negate)してもよい。すると、外部由来アクセス鍵判断部416は、時計425から出力される旧共通鍵有効信号から、現在時刻が旧共通鍵の有効期限内であるか否かを認識することができる。
あるいは、外部由来アクセス鍵判断部416は、時計425から現在時刻を取得し、共通鍵を更新する基準時刻と共通鍵の更新間隔SIと現在時刻を用いて、直近の共通鍵の更新時刻から現在までの経過時間を計算してもよい。そして、外部由来アクセス鍵判断部416は、計算した経過時間を閾値である許容時間STと比較し、計算した経過時間が許容時間ST以内ならば「現在時刻が旧共通鍵の有効期限内である」と判断してもよい。なお、この例に限らず、閾値との比較による判断は、実施形態により「閾値以下か、それとも閾値を超えるか」という判断でもよいし、「閾値未満か、それとも閾値以上か」という判断でもよく、適宜方針を定めることができる。
そして、現在時刻が旧共通鍵の有効期限内である場合、外部由来アクセス鍵判断部416は、外部由来アクセス鍵配送データ428のペイロードを再暗号化して元の状態に戻すよう、外部由来アクセス鍵再暗号化部419に命令する。そして、処理はステップS509に移行する。
他方、現在時刻が旧共通鍵の有効期限を過ぎている場合、外部由来アクセス鍵判断部416は、「図17の処理の契機となったアクセス鍵の配布用PDUは、無効である」と判断する。そして、処理はステップS514に移行する。
なお、処理がステップS508からステップS514に移行する場合、選択共通鍵は現在共通鍵のままである。もちろん、実施形態によっては、明示的に選択共通鍵のリセットが行われてもよい。
また、ステップS509では、外部由来アクセス鍵復号部414が復号したデータを外部由来アクセス鍵再暗号化部419が再暗号化する。具体的には、外部由来アクセス鍵再暗号化部419は、まず指示部409から「選択共通鍵は現在共通鍵である」という情報を得る。そして、外部由来アクセス鍵再暗号化部419は、共通鍵記憶部406から現在共通鍵を読み出し、現在共通鍵を用いて外部由来アクセス鍵配送データ428のペイロードを暗号化する。
なお、外部由来アクセス鍵再暗号化部419は、第1実施形態の再暗号化部108と同様に、暗号化の際に、外部由来アクセス鍵配送データ428のペイロードを、暗号化したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
そして、外部由来アクセス鍵再暗号化部419は、暗号化を終えると、暗号化の終了を指示部409に通知する。すると、指示部409は、現在選択している選択共通鍵とは異なる共通鍵である旧共通鍵を選択共通鍵として選択しなおし、外部由来アクセス鍵配送データ428のペイロードを復号するよう外部由来アクセス鍵復号部414に命令する。
続いて、ステップS510で外部由来アクセス鍵復号部414は、外部由来アクセス鍵再暗号化部419が再暗号化したデータを旧共通鍵で復号する。具体的には、外部由来アクセス鍵復号部414は、まず指示部409から「選択共通鍵は旧共通鍵である」という情報を得る。そして、外部由来アクセス鍵復号部414は、共通鍵記憶部406から旧共通鍵を読み出し、旧共通鍵を用いて外部由来アクセス鍵配送データ428のペイロードを復号する。
なお、外部由来アクセス鍵復号部414は、ステップS510における復号の際にも、ステップS501と同様に、外部由来アクセス鍵配送データ428のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
そして、外部由来アクセス鍵復号部414は、復号を終えると、復号の完了を外部由来アクセス鍵判断部416に通知する。すると、処理はステップS511に移行する。
ステップS511で外部由来アクセス鍵判断部416は、ステップS502と同様に、外部由来アクセス鍵復号部414が復号したデータから特徴値を取り出す。
また、次のステップS512で外部由来アクセス鍵判断部416は、ステップS503と同様に、外部由来アクセス鍵復号部414が復号したデータのボディから特徴値を計算する。なお、ステップS511とS512は、逆順に実行されてもよいし、並行して実行されてもよい。
続いて、ステップS513で外部由来アクセス鍵判断部416は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
2つの特徴値が一致する場合、外部由来アクセス鍵判断部416は、「ステップS510で復号されてメモリ410上に記憶されている外部由来アクセス鍵配送データ428のペイロードは、正常な平文データである」と判断する。この場合、外部由来アクセス鍵判断部416は、配送された外部由来アクセス鍵を外部由来アクセス鍵記憶部408に登録する処理を、メモリ410上の外部由来アクセス鍵配送データ428を用いて行うよう、外部由来アクセス鍵管理部404に命令する。
2つの特徴値が一致する場合はさらに、外部由来アクセス鍵判断部416が、アクセス鍵の配布用PDUの次の受信に備えて選択共通鍵をリセットするよう、指示部409に命令する。そして、指示部409は現在共通鍵を選択共通鍵として選択しなおす。よって、アクセス鍵の配布用PDUが次に受信されて再度図17の処理が開始される時点での選択共通鍵は、現在鍵となる。そして、以上のように選択共通鍵が選択しなおされると、処理はステップS505に移行する。
他方、2つの特徴値が一致しない場合、外部由来アクセス鍵判断部416は、「ステップS510で復号されてメモリ410上に記憶されている外部由来アクセス鍵配送データ428は、異常であり、無効である」と判断する。
また、第2実施形態では、共通鍵記憶部406は現在共通鍵と旧共通鍵という2つの世代の共通鍵のみを保持しているので、試す対象となる他の世代の共通鍵は、これ以上は存在しない。そこで、2つの特徴値が一致しない場合も、外部由来アクセス鍵判断部416は、アクセス鍵の配布用PDUの次の受信に備えて選択共通鍵をリセットするよう、指示部409に命令する。そして、指示部409は現在共通鍵を選択共通鍵として選択しなおし、処理はステップS514に移行する。
また、ステップS514で外部由来アクセス鍵判断部416は、受信したPDUを破棄する。例えば、外部由来アクセス鍵判断部416は、具体的にはメモリ410上の外部由来アクセス鍵配送データ428の記憶領域を解放することにより、受信したPDUを破棄してもよい。そして、破棄が済むと図17の処理も終わる。
図18は、第2実施形態において通信装置が行う暗号化パケット受信処理のフローチャートである。なお、図18の処理において、第1実施形態の図7の受信処理と類似する点については、適宜説明を省略する。
ステップS601で受信データ復号部413は、受信部411からの命令にしたがい、受信データ426のペイロードを復号する。具体的には、受信データ復号部413は、まず現在内部由来アクセス鍵と旧内部由来アクセス鍵のどちらが選択内部由来アクセス鍵として選択されているかという情報を指示部409から得る。そして、受信データ復号部413は、選択内部由来アクセス鍵を内部由来アクセス鍵記憶部407から読み出し、選択内部由来アクセス鍵を用いて受信データ426のペイロードを復号する。
なお、指示部409は、通信装置400に電源が入れられた初期状態では、選択内部由来アクセス鍵として現在内部由来アクセス鍵を選択する。また、図18の処理は、アクセス鍵で暗号化されるPDUの受信のたびに行われるが、ステップS604とS606とS611に関して後述するとおり、指示部409は、図18の処理を終了する時点では、現在内部由来アクセス鍵を選択内部由来アクセス鍵として選択している。よって、ステップS601の時点では、選択内部由来アクセス鍵は現在内部由来アクセス鍵である。
したがって、ステップS601において受信データ復号部413は、まず指示部409から「選択内部由来アクセス鍵は現在内部由来アクセス鍵である」という情報を得る。そして、受信データ復号部413は、内部由来アクセス鍵記憶部407から現在内部由来アクセス鍵を読み出し、現在内部由来アクセス鍵を用いて受信データ426のペイロードを復号する。
なお、受信データ復号部413は、ステップS601における復号の際に、第1実施形態の復号部106と同様に、受信データ426のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
受信データ復号部413は、復号を終えると、復号の完了を受信データ判断部417に通知する。そして、処理はステップS602に移行する。
ステップS602では、受信データ復号部413からの通知を受けた受信データ判断部417が、受信データ復号部413が復号したデータから特徴値を取り出す。
そして、次のステップS603で受信データ判断部417は、受信データ復号部413が復号したデータのボディから特徴値を計算する。なお、ステップS602とS603は、逆順に実行されてもよいし、並行して実行されてもよい。
続いて、ステップS604で受信データ判断部417は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
2つの特徴値が一致する場合、受信データ判断部417は、「ステップS601で復号されてメモリ410上に記憶されている受信データ426のペイロードは正常な平文データである」と判断する。この場合、受信データ判断部417は、メモリ410上の受信データ426の処理を行うようデータ処理部423に命令する。
2つの特徴値が一致する場合はさらに、受信データ判断部417が、アクセス鍵で暗号化されるPDUの次の受信に備えて選択内部由来アクセス鍵をリセットするよう、指示部409に命令してもよい。そして、指示部409が改めて現在内部由来アクセス鍵を選択内部由来アクセス鍵として選択しなおしてもよい。なお、図7のステップS105と同様、このような明示的なリセットは省略可能である。そして、2つの特徴値が一致する場合、処理はステップS605に移行する。
他方、2つの特徴値が一致しない場合、受信データ判断部417は、「ステップS601で復号されてメモリ410上に記憶されている受信データ426のペイロードは、異常である」と判断する。そして、処理はステップS606に移行する。
ステップS605でデータ処理部423は、受信データ復号部413が復号したPDUを処理する。つまり、データ処理部423は、ペイロードが正常な平文に復号されて受信データ426としてメモリ410に記憶されているPDUのデータを読み出し、適宜の処理を行う。なお、ステップS605でデータ処理部423が行う処理は、任意であるが、第1実施形態のステップS106に関して例示したような処理でもよい。ステップS605でのデータ処理部423による処理が終了すると、図18の処理も終了する。
さて、ステップS604において2つの特徴値が一致しなかった場合、ステップS606で受信データ判断部417は、現在時刻が旧内部由来アクセス鍵の有効期限内か否かを判断する。なお、第2実施形態において「現在時刻が旧内部由来アクセス鍵の有効期限内である」とは、「内部由来アクセス鍵の直近の更新から現在までに経過した時間が所定の許容時間(後述の図20における“AT”)以内である」という意味である。
なお、第2実施形態では、通信装置400は、所定の間隔(後述の図20における“AI”)で内部由来アクセス鍵を更新する。アクセス鍵の更新間隔AIは、前述の共通鍵の更新間隔SIよりも短い。また、詳しくは図20とともに後述するが、どの世代の共通鍵も、アクセス鍵の通知に2回以上利用されるようにするために、アクセス鍵の更新間隔AIは、共通鍵の更新間隔SIの半分以下であることが好ましい。
そして、ステップS606で閾値として用いられる許容時間ATは、内部由来アクセス鍵の更新間隔AIよりも短い時間である。旧内部由来アクセス鍵の有効期限を受信データ判断部417が認識する具体的方法は実施形態に応じて様々であってよい。具体的には、受信データ判断部417は、図17のステップS508に関して例示した、外部由来アクセス鍵判断部416が旧共通鍵の有効期限を認識するのと類似の方法により、旧内部由来アクセス鍵の有効期限を認識することができる。
そして、現在時刻が旧内部由来アクセス鍵の有効期限内である場合、受信データ判断部417は、受信データ426のペイロードを再暗号化して元の状態に戻すよう、受信データ再暗号化部420に命令する。そして、処理はステップS607に移行する。
他方、現在時刻が旧内部由来アクセス鍵の有効期限を過ぎている場合、受信データ判断部417は、「図18の処理の契機となったPDUのペイロードは、異常である」と判断する。この場合、受信データ判断部417は「何らかのエラーが生じた」と判断し、処理はステップS612に移行する。
なお、処理がステップS606からステップS612に移行する場合、選択内部由来アクセス鍵は現在内部由来アクセス鍵のままである。もちろん、実施形態によっては、明示的に選択内部由来アクセス鍵のリセットが行われてもよい。
また、ステップS607では、受信データ復号部413が復号したデータを受信データ再暗号化部420が再暗号化する。具体的には、受信データ再暗号化部420は、まず指示部409から「選択内部由来アクセス鍵は現在内部由来アクセス鍵である」という情報を得る。そして、受信データ再暗号化部420は、内部由来アクセス鍵記憶部407から現在内部由来アクセス鍵を読み出し、現在内部由来アクセス鍵を用いて受信データ426のペイロードを暗号化する。
なお、受信データ再暗号化部420は、第1実施形態の再暗号化部108と同様に、暗号化の際に、受信データ426のペイロードを、暗号化したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
そして、受信データ再暗号化部420は、暗号化を終えると、暗号化の終了を指示部409に通知する。すると、指示部409は、現在選択している選択内部由来アクセス鍵とは異なる内部由来アクセス鍵である旧内部由来アクセス鍵を選択内部由来アクセス鍵として選択しなおし、受信データ426のペイロードを復号するよう受信データ復号部413に命令する。
続いて、ステップS608で受信データ復号部413は、受信データ再暗号化部420が再暗号化したデータを旧内部由来アクセス鍵で復号する。具体的には、受信データ復号部413は、まず指示部409から「選択内部由来アクセス鍵は旧由来アクセス鍵である」という情報を得る。そして、受信データ復号部413は、内部由来アクセス鍵記憶部407から旧内部由来アクセス鍵を読み出し、旧内部由来アクセス鍵を用いて受信データ426のペイロードを復号する。
なお、受信データ復号部413は、ステップS608における復号の際にも、ステップS601と同様に、受信データ426のペイロードの暗号文を、復号したデータで上書きする。このような上書きにより、余計な記憶領域の消費が抑制される。
そして、受信データ復号部413は、復号を終えると、復号の完了を受信データ判断部417に通知する。すると、処理はステップS609に移行する。
ステップS609で受信データ判断部417は、ステップS602と同様に、受信データ復号部413がが復号したデータから特徴値を取り出す。
また、次のステップS610で受信データ判断部417は、ステップS603と同様に、受信データ復号部413が復号したデータのボディから特徴値を計算する。なお、ステップS5609とS610は、逆順に実行されてもよいし、並行して実行されてもよい。
続いて、ステップS611で受信データ判断部417は、取り出した特徴値と計算した特徴値が一致するか否かを判断する。
2つの特徴値が一致する場合、受信データ判断部417は、「ステップS608で復号されてメモリ410上に記憶されている受信データ426のペイロードは正常な平文データである」と判断する。この場合、受信データ判断部417は、メモリ410上の受信データ426の処理を行うようデータ処理部423に命令する。
2つの特徴値が一致する場合はさらに、受信データ判断部417が、アクセス鍵で暗号化されるPDUの次の受信に備えて選択内部由来アクセス鍵をリセットするよう、指示部409に命令する。そして、指示部409は現在内部由来アクセス鍵を選択内部由来アクセス鍵として選択しなおす。よって、アクセス鍵で暗号化されるPDUが次に受信されて再度図18の処理が開始される時点での選択内部由来アクセス鍵は、現在内部由来アクセス鍵となる。そして、以上のように選択内部由来アクセス鍵が選択しなおされると、処理はステップS605に移行する。
他方、2つの特徴値が一致しない場合、受信データ判断部417は、「ステップS608で復号されてメモリ410上に記憶されている受信データ426のペイロードは、異常である」と判断する。
また、第2実施形態では、内部由来アクセス鍵記憶部407は現在内部由来アクセス鍵と旧内部由来アクセス鍵という2つの世代の内部由来アクセス鍵のみを保持しているので、試す対象となる他の世代の内部由来アクセス鍵は、これ以上は存在しない。そこで、2つの特徴値が一致しない場合も、受信データ判断部417は、アクセス鍵で暗号化されるPDUの次の受信に備えて選択内部由来アクセス鍵をリセットするよう、指示部409に命令する。そして、指示部409は現在内部由来アクセス鍵を選択内部由来アクセス鍵として選択しなおし、処理はステップS612に移行する。
ステップS612では、受信データ判断部417が適宜のエラー処理を行う。あるいは、受信データ判断部417は不図示のエラー処理部に対してエラー処理を行うよう命令してもよい。エラー処理の具体的内容は任意である。例えば、エラー処理は、単に受信データ426の記憶領域を解放する処理でもよいし、送信元の他の通信装置400に対してPDUの再送を要求する処理でもよい。エラー処理の実行後、図18の処理も終了する。
以上、図16〜18を参照して説明したように、第2実施形態においても、PDUの受信を契機とした一連の処理の中で、復号または再暗号化にともなって、メモリ410上の記憶領域の上書きが行われる。よって、第2実施形態も第1実施形態と同様に、記憶領域の節約効果がある。
ところで、通信装置400はPDUの受信とは独立した処理も行う。すなわち、通信装置100は、以下に説明するように、PDUの送信、共通鍵の更新、内部由来アクセス鍵の更新、および内部由来アクセス鍵の配送も行う。
具体的には、データ処理部423は、他の装置に送信しようとするデータから、平文の送信データ427を作成する。こうして作成される送信データ427は、図6の平文PDU304の一例である。つまり、データ処理部423は適宜のボディ301を生成または取得し、適宜のヘッダ302を設定し、ボディ301から特徴値303を計算して、送信データ427に相当する平文PDU304を作成する。
例えば、通信装置400がセンサネットワーク内のノードである場合、通信装置400はセンサを内蔵していてもよいし、センサと接続されていてもよい。そして、データ処理部423は、センサから出力されたデータをボディ301に設定してもよい。
データ処理部423は、平文の送信データ427をメモリ410上に作成し終わると、送信データ427のペイロードを暗号化するよう送信データ暗号化部421に命令する。すると、送信データ暗号化部421は送信先のアドレス(すなわち他の通信装置400のアドレス)を認識し、認識したアドレスに対応づけられて外部由来アクセス鍵記憶部408に記憶されている外部由来アクセス鍵を読み出す。
なお、第1実施形態と同様に、データ処理部423が送信データ427の送信先を明示的に送信データ暗号化部421に通知することにより、送信データ暗号化部421が送信先のアドレスを認識してもよい。あるいは、送信データ暗号化部421は、送信データ427のヘッダから送信先のアドレスを読み取ることにより、送信先のアドレスを認識してもよい。
そして、送信データ暗号化部421は、読み出した外部由来アクセス鍵を用いて送信データ427のペイロードを暗号化する。その際、外部由来アクセス鍵再暗号化部419と受信データ再暗号化部420による再暗号化と同様に、送信データ暗号化部421もメモリ410上の同一記憶領域への上書きを行う。つまり、送信データ暗号化部421は、送信データ427の平文のペイロードを暗号化し、暗号化により得られる暗号文のデータによってペイロードを上書きする。このような上書きにより、送信データ427の送信時においても、メモリ410の効率的な利用が可能となる。
また、送信データ暗号化部421は、暗号化処理を終えると、送信データ427を送信するよう送信部424に命令する。そして、送信部424が送信データ427を送信する。
さて、続いて通信装置400における共通鍵の更新について説明する。通信装置400の共通鍵管理部402は、第1実施形態の鍵管理部101が図10または図12の処理を行うことで鍵記憶部102上の暗号鍵を更新するのと同様にして、共通鍵記憶部406上の共通鍵を更新する。よって、ここでは詳細な説明は割愛するが、図10のステップS201または図12のステップS301に相当する処理について補足すれば下記のとおりである。
第2実施形態においては、時計425が、共通鍵の更新間隔SIが経過するたびに前述の共通鍵更新タイミング信号を出力してもよい。そして、共通鍵管理部402は、共通鍵更新タイミング信号を検出したときに、「共通鍵を更新する時刻になった」と認識してもよい。あるいは、共通鍵管理部402は、時計425から現在時刻を取得し、共通鍵を更新する基準時刻と共通鍵の更新間隔SIと現在時刻を用いて、共通鍵を更新する時刻になったか否かを判断してもよい。
続いて、通信装置400における内部由来アクセス鍵の更新について説明する。通信装置400の内部由来アクセス鍵管理部403は、第1実施形態の鍵管理部101が図10または図12の処理を行うことで鍵記憶部102上の暗号鍵を更新するのと同様にして、内部由来アクセス鍵記憶部407上の内部由来アクセス鍵を更新する。よって、ここでは詳細な説明は割愛するが、図10のステップS201または図12のステップS301に相当する処理について補足すれば下記のとおりである。
第2実施形態においては、時計425が、内部由来アクセス鍵の更新間隔AIが経過するたびに内部由来アクセス鍵更新タイミング信号(例えば割り込み信号)を出力してもよい。そして、内部由来アクセス鍵管理部403は、内部由来アクセス鍵更新タイミング信号を検出したときに、「内部由来アクセス鍵を更新する時刻になった」と認識してもよい。あるいは、内部由来アクセス鍵管理部403は、時計425から現在時刻を取得し、内部由来アクセス鍵を更新する基準時刻と内部由来アクセス鍵の更新間隔AIと現在時刻を用いて、内部由来アクセス鍵を更新する時刻になったか否かを判断してもよい。
続いて、図19を参照して内部由来アクセス鍵の配送について説明する。図19は、第2実施形態において通信装置が行う内部由来アクセス鍵配送処理のフローチャートである。
図19の処理は、通信装置400に電源が入れられた後、少なくとも内部由来アクセス鍵記憶部407に現在内部由来アクセス鍵が設定されてから開始される。例えば、内部由来アクセス鍵管理部403は、通信装置400に電源が入れられると、第1世代の内部由来アクセス鍵を生成して内部由来アクセス鍵記憶部407に現在内部由来アクセス鍵として格納し、その後、図19の処理を開始してもよい。
ステップS701で内部由来アクセス鍵管理部403は、内部由来アクセス鍵を通知する時刻になるまで待機する。そして、内部由来アクセス鍵を通知する時刻になったと内部由来アクセス鍵管理部403が判断すると、処理はステップS702に移行する。
なお、第2実施形態では、所定の通知間隔(後述の図20における“AN”)で内部由来アクセス鍵が他の通信装置400に配送される(つまり通知される)。第2実施形態では、アクセス鍵の通知間隔ANは、アクセス鍵の更新間隔AIよりも短い。また、詳しくは図20とともに後述するが、どの世代の内部由来アクセス鍵も複数回通知されるようにするために、アクセス鍵の通知間隔ANは、アクセス鍵の更新間隔AIの半分以下であることが好ましい。
なお、内部由来アクセス鍵を通知する時刻になったか否かを内部由来アクセス鍵管理部403が認識する具体的方法は任意である。
例えば、時計425は、アクセス鍵の通知間隔ANが経過するたびに、アクセス鍵の通知の契機となるアクセス鍵通知タイミング信号を出力してもよい。アクセス鍵通知タイミング信号は、例えば割り込み信号でもよい。内部由来アクセス鍵管理部403は、時計425からのアクセス鍵通知タイミング信号を検出すると、内部由来アクセス鍵を通知する時刻になったと認識する。
あるいは、内部由来アクセス鍵管理部403は、時計425から現在時刻を取得し、内部由来アクセス鍵を通知する基準時刻とアクセス鍵の通知間隔ANと現在時刻を用いて、内部由来アクセス鍵を通知する時刻になったか否かを判断してもよい。
さて、ステップS702では、内部由来アクセス鍵管理部403は、現在内部由来アクセス鍵を含む平文の内部由来アクセス鍵配送データ429を生成してメモリ410上に格納する。なお、ステップS702における内部由来アクセス鍵管理部403は、第1実施形態において送信データ115を作成する平文処理部109と類似の機能を果たす。
ステップS702で生成される内部由来アクセス鍵配送データ429のペイロードは、まだ平文の状態である。つまり、内部由来アクセス鍵配送データ429は図6の平文PDU304の一例であり、ボディ301は現在内部由来アクセス鍵を含む。また、内部由来アクセス鍵管理部403はボディ301から特徴値303を計算し、ヘッダ302を適宜設定する。なお、ステップS703に関して述べるように、第2実施形態では、ヘッダ302内の送信先アドレスとしてブロードキャストアドレスが設定される。
そして、内部由来アクセス鍵管理部403は、平文の内部由来アクセス鍵配送データ429をメモリ410上に生成し終わると、ペイロードを暗号化するよう内部由来アクセス鍵暗号化部422に命令する。すると、内部由来アクセス鍵暗号化部422は、共通鍵記憶部406から現在共通鍵を読み出し、現在共通鍵を用いて内部由来アクセス鍵配送データ429のペイロードを暗号化する。
その際、外部由来アクセス鍵再暗号化部419と受信データ再暗号化部420による再暗号化と同様に、内部由来アクセス鍵暗号化部422もメモリ410上の同一記憶領域への上書きを行う。つまり、内部由来アクセス鍵暗号化部422は、内部由来アクセス鍵配送データ429の平文のペイロードを暗号化し、暗号化により得られる暗号文のデータによってペイロードを上書きする。このような上書きにより、内部由来アクセス鍵配送データ429の送信時においても、メモリ410の効率的な利用が可能となる。
また、内部由来アクセス鍵暗号化部422は、暗号化処理を終えると、内部由来アクセス鍵配送データ429を送信するよう送信部424に命令する。
すると、次のステップS703で送信部424は、ステップS702での暗号化の結果として得られた内部由来アクセス鍵配送データ429を送信する。具体的には、第2実施形態では、送信先アドレスとしてブロードキャストアドレスが設定されるので、通信装置400は内部由来アクセス鍵配送データ429をブロードキャストする。
例えば、複数の通信装置400が無線アドホックネットワークを構築する場合、ステップS703におけるブロードキャストとは、1ホップで到達可能な範囲のすべての他の通信装置400への送信を意味する。よって、送信部424が送信したPDUは、中継を経ずに当該PDUを直接受信することができるすべての他の通信装置400において、図17の処理の対象となる。
また、複数の通信装置400が有線アドホックネットワークを構築する場合、ステップS703におけるブロードキャストとは、1ホップで到達可能な範囲の他のすべての通信装置400への送信を意味する。つまり、内部由来アクセス鍵配送データ429の送信元の通信装置400と直接ケーブルで接続されているすべての他の通信装置400へ、内部由来アクセス鍵配送データ429が送信される。そして、送信されたPDUは、内部由来アクセス鍵配送データ429の送信元の通信装置400と直接ケーブルで接続されているすべての他の通信装置400において、図17の処理の対象となる。
あるいは、第2実施形態がイーサネット(登録商標)に適用される場合は、内部由来アクセス鍵配送データ429の送信元の通信装置400と同じブロードキャストドメインに属するすべての他の通信装置400へ、内部由来アクセス鍵配送データ429が送信される。そして、送信されたPDUは、送信元の通信装置400と同じブロードキャストドメインに属するすべての他の通信装置400において、図17の処理の対象となる。
いずれにせよ、ステップS703でのブロードキャストの後、処理はステップS701に戻る。
なお、図19によれば、内部由来アクセス鍵の通知のたびに内部由来アクセス鍵配送データ429のペイロードの暗号化が行われるが、実施形態によっては、内部由来アクセス鍵配送データ429が再利用されてもよい。つまり、同じ内部由来アクセス鍵が複数回通知されるように内部由来アクセス鍵の更新間隔AIと通知間隔ANが設定されている場合は、内部由来アクセス鍵の更新後の初めての通知のときのみ内部由来アクセス鍵配送データ429の作成が行われてもよい。
そして、メモリ410は、ペイロードが暗号化された状態の内部由来アクセス鍵配送データ429を、次に内部由来アクセス鍵が更新されるまで保持し続けてもよい。すると、内部由来アクセス鍵の更新後の2回目以降の通知においては、ステップS702が省略可能である。つまり、内部由来アクセス鍵管理部403は、メモリ410上の既存の内部由来アクセス鍵配送データ429を再度送信するよう、送信部424に命令してもよい。
続いて、上記で説明した各種処理の実行タイミングについて図20を参照して説明する。図20は、第2実施形態における共通鍵と内部由来アクセス鍵の更新を示すタイミングチャートである。
第2実施形態では、共通鍵管理部402が所定の更新間隔SIで定期的に共通鍵を更新する。図20には、第(γ−1)世代の共通鍵SKγ-1から第(γ+2)世代の共通鍵SKγ+2までが図示されている。
また、図17のステップS508に関して説明したように、第2実施形態では、現在共通鍵での復号が失敗した場合の再暗号化と旧共通鍵による復号は、共通鍵の更新から一定の許容時間STの間でのみ行われる。そして、許容時間STは更新間隔SIよりも短い。
なお、更新間隔SIは、例えば、通信装置400が含まれるネットワークにおけるトラフィック量に応じた適宜の値に設定されることが好ましい。一例として、更新間隔SIは6時間〜12時間程度の長さでもよい。また、許容時間STは、例えば、通信装置400間での同期の精度、またはアクセス鍵を配送しあう通信装置400間での通信にかかる時間などに基づいて、実施形態に応じた適宜の値に設定されることが好ましい。
そして、共通鍵管理部402による共通鍵の更新とは独立に、内部由来アクセス鍵管理部403は、所定の更新間隔AIで定期的に内部由来アクセス鍵を更新する。図20には、第(a−1)世代の内部由来アクセス鍵AKA,a−1から第(a+4)世代の内部由来アクセス鍵AKA,a+4までが図示されている。
内部由来アクセス鍵の更新間隔AIは、共通鍵の更新間隔SIよりも短く、好ましくは共通鍵の更新間隔SIの半分以下である。内部由来アクセス鍵の更新間隔AIは、例えば、通信装置400が含まれるネットワークにおけるトラフィック量に応じた適宜の値に設定されることが好ましい。一例として、内部由来アクセス鍵の更新間隔AIは、10分〜20分程度の長さでもよい。なお、共通鍵の更新間隔SIは、内部由来アクセス鍵の更新間隔AIで割り切れる長さでなくてもよい。
また、第2実施形態では、図18のステップS606に関して説明したように、現在内部由来アクセス鍵での復号が失敗した場合の再暗号化と旧内部由来アクセス鍵による復号は、内部由来アクセス鍵の更新から一定の許容時間ATの間でのみ行われる。そして、許容時間ATは更新間隔AIよりも短い。許容時間ATは、例えば、アクセス鍵によって暗号化したPDUをやりとりする通信装置400間での通信にかかる時間などに基づいて、実施形態に応じた適宜の値に設定されることが好ましい。
さらに、第2実施形態では、図19のステップS701に関して説明したように、通信装置400は所定の通知間隔ANで内部由来アクセス鍵を他の通信装置400に通知する。通知間隔ANは、内部由来アクセス鍵の更新間隔AIよりも短く、好ましくは更新間隔AIの半分以下である。一例として、通知間隔ANは1〜5分程度の長さでもよい。なお、更新間隔AIは、通知間隔ANで割り切れる長さでなくてもよい。
通知間隔ANが更新間隔AIよりも短いため、図20の例では、例えば第a世代の内部由来アクセス鍵AKA,aは、内部由来アクセス鍵AKA,aが現在内部由来アクセス鍵として認識されている期間中に5回、通知される。このように内部由来アクセス鍵の更新よりも頻繁に内部由来アクセス鍵の通知を行うことは、アドホックネットワーク内の通信装置400に特に好適である。
なぜなら、アドホックネットワークに接続される通信装置が時々刻々と動的に変化する可能性があるからである。例えば、新たな通信装置400が任意の時点でアドホックネットワークに参加し始めることがある。
より具体的には、例えば、アクセス鍵AKA,aの1回目の通知の時点ではアドホックネットワークに接続されていなかった新たな通信装置400が、アクセス鍵AKA,aの3回目の通知の時点では既にアドホックネットワークに接続されている場合もありうる。すると、新たにアドホックネットワークに参加した当該通信装置400は、次の第(a+1)世代のアクセス鍵AKA,a+1の通知まで待たずに、アクセス鍵AKA,aの3回目の通知の時点からすぐに、アクセス鍵による暗号化通信を始めることが可能となる。
また、通信装置400の設置位置は固定されていてもよいが、無線アドホックネットワークでは、通信装置400が移動体であってもよい。すると、通信装置400の移動に応じて、あるいは遮蔽物の有無などの無線通信環境の変化に応じて、たまたまアクセス鍵の通知を受信することができない場合もありうる。
例えば、アドレスAdrBの通信装置400は、アドレスAdrAの通信装置400からのアクセス鍵AKA,aの1回目の通知を受信することがでできないかもしれない。しかし、無線通信環境の変化に応じて、アドレスAdrBの通信装置400は、アドレスAdrAの通信装置400からのアクセス鍵AKA,aの2回目の通知を受信することはできるかもしれない。すると、アドレスAdrBの通信装置400は、アクセス鍵AKA,aの2回目の通知以降は、アドレスAdrAの通信装置400宛のPDUをアクセス鍵AKA,aを用いて暗号化して送信することができる。
よって、アドレスAdrAの通信装置400が、アクセス鍵を第(a−1)世代から第a世代に更新した後、古いアクセス鍵AKA,a−1で暗号化されたPDUをアドレスAdrBの通信装置400から受信するのは、せいぜい2回目の通知の少し後までである。そして、例えば図20のようにアクセス鍵AKA,aの2回目の通知の少し後まで、許容時間ATの範囲に含まれているとする。すると、アドレスAdrAの通信装置400にとっては、アクセス鍵AKA,a−1で暗号化されたPDUを受信するのは、旧内部由来アクセス鍵AKA,a−1の有効期限内である。よって、アクセス鍵AKA,a−1で暗号化されたPDUの送受信が無駄にならず、PDUの再送要求などのエラー処理も不要である。
すなわち、上記の例から理解されるように、通知間隔ANは、更新間隔AIより短いだけではなく、許容時間ATの半分以下であることがより好ましい。その理由について補足すれば次のとおりである。
通知間隔ANが許容時間ATの半分以下だと、許容時間AT内に複数回の通知が含まれる。よって、「アクセス鍵の更新後の1回目の通知が、通知先のある通信装置400において偶然受信不能であっても、許容時間AT内には、通知先の通信装置400が更新後の新たなアクセス鍵を認識することができる」という見込みが高まる。すると、エラー処理の頻度が低減する。また、通知間隔ANが短ければ、再暗号化と旧内部由来アクセス鍵による復号の頻度も低減する。すると、結果として、個々の通信装置400の再暗号化と再度の復号にかかる処理負荷も低減し、ネットワークの無駄なトラフィックも低減する。
ところで、本発明は上記実施形態に限られるものではない。上記の説明においてもいくつかの変形について説明したが、上記実施形態は、さらに例えば下記(b1)〜(b7)の観点から様々に変形することもでき、これらの変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
(b1)暗号鍵の更新間隔と通知間隔に関する観点
実施形態によっては、アクセス鍵の通知間隔ANは、アクセス鍵の更新間隔AIと同じでもよい。つまり内部由来アクセス鍵が生成されるごとに、生成の直後に1回、内部由来アクセス鍵が通知されてもよい。例えば、通信品質の良い有線ネットワークでは、通知間隔ANと更新間隔AIが同じでもよい。
また、有効期限は、共通鍵とアクセス鍵の一方にのみ設定されていてもよい。つまり、第2実施形態で、図17のステップS508または図18のステップS606の、有効期限に関する分岐が省略されてもよい。逆に、第1実施形態に、第2実施形態と同様の有効期限が導入されてもよい。なお、有効期限が省略されるということは、暗号鍵の更新間隔と等しい有効期限が設定されるのと同じことである。
ところで、複数の通信装置が互いに同じアルゴリズムにしたがって暗号鍵を生成および更新する場合には、複数の通信装置が暗号鍵の更新のタイミングについて共通認識を持つことができるように、暗号鍵の更新タイミングが事前に決められる。固定の間隔での更新は、複数の通信装置が暗号鍵の更新のタイミングについて共通認識を持つための一法である。もちろん、実施形態によっては、暗号鍵の更新のタイミングに関する不規則な間隔のスケジュールが、予め複数の通信装置間で共有されていてもよい。
それに対して、鍵配送により通信装置間で確立される暗号鍵に関しては、通信装置が暗号鍵を更新する間隔は固定されていなくてもよい。例えば、第2実施形態の通信装置400同士はアクセス鍵を配送しあう。よって、個々の通信装置400は、他の通信装置400がアクセス鍵を更新するタイミングについて事前に認識していなくてもよい。
例えば、第1と第2の通信装置400がある場合、第2の通信装置400は、第1の通信装置400が第1の通信装置400にとっての内部由来アクセス鍵を更新する間隔について知る必要はない。よって、第1の通信装置400は、例えばPDUの受信頻度などの状況の変化に応じて、内部由来アクセス鍵の更新間隔を動的に変更してもよい。
(b2)保持する暗号鍵の数に関する観点
第1実施形態の鍵記憶部102は、2世代以上の旧鍵を保持してもよい。同様に、第2実施形態の共通鍵記憶部406は、2世代以上の旧共通鍵を保持してもよいし、内部由来アクセス鍵記憶部407は、2世代以上の旧内部由来アクセス鍵を保持してもよい。そして、再暗号化と復号が、必要に応じて、保持されている複数の古い暗号鍵に関して順々に試されてもよい。
例えば鍵記憶部102は、現在鍵と、1世代前の旧鍵と、2世代前の旧鍵という3つの世代の暗号鍵を保持してもよい。なお、鍵管理部101は、新たな暗号鍵を生成すると、鍵記憶部102上の3つの世代の暗号鍵を適宜更新する。この場合、受信したPDUのペイロードの復号に関して、通信装置100は、「現在鍵、1世代前の旧鍵、2世代前の旧鍵」というように、新しい暗号鍵から順に試すのが適切である。
具体的には、図7のステップS111で2つの特徴値が一致しなかった場合、判断部107は、受信データ114のペイロードを再暗号化するよう、再暗号化部108に命令する。なお、この場合、選択暗号鍵のリセットはステップS111の段階では行われない。
そして、再暗号化部108は1世代前の旧鍵で受信データ114のペイロードを再暗号化する。さらに、再暗号化部108は再暗号化の終了を指示部103に通知する。すると、指示部103は、選択暗号鍵を、現在選択している1世代前の旧鍵から2世代前の旧鍵に切り換える。
そして、指示部103は、復号部106に受信データ114のペイロードを復号するよう命令する。すると、復号部106は、2世代前の旧鍵を用いて受信データ114のペイロードを復号する。さらに、復号部106は復号の終了を判断部107に通知する。
すると、判断部107は復号されたペイロードから特徴値を取り出し、ボディから特徴値を計算し、2つの特徴値を比較する。その結果、2つの特徴値が一致すれば、選択暗号鍵のリセットが行われ、処理がステップS106に移行する。逆に、2つの特徴値が一致しない場合は、選択暗号鍵のリセットが行われ、処理がステップS112に移行する。
もちろん、第2実施形態も、上記と同様にして変形可能である。また、3世代以上前の旧鍵をさらに利用する実施形態も可能である。以上のように2世代以上前の旧鍵も利用する実施形態は、通信に時間のかかる通信装置間での暗号化通信に特に好適である。
(b3)暗号鍵が確立される範囲に関する観点
暗号鍵が確立される範囲は実施形態に応じて適宜変更されてよい。例えば、図14の通信装置400が図2のアドホックネットワーク140内のノードとして利用される場合、アドホックネットワーク140のすべてのノード間で同じ共通鍵が使われてもよい。しかし、ネットワークの構成、適用対象のプロトコルのレイヤ、暗号化通信の目的などに応じて、暗号鍵が確立される範囲は適宜変形されてもよい。
例えば、第2実施形態においては、図19のステップS703で、内部由来アクセス鍵が1ホップ以内の他のすべての通信装置400にブロードキャストにより通知される。しかし、実施形態によっては、内部由来アクセス鍵の通知先の通信装置400は、例えば特定の1つに限定されてもよい。
(b4)暗号鍵の生成アルゴリズムに関する観点
暗号鍵の生成アルゴリズムは任意である。つまり、鍵管理部101と共通鍵管理部402と内部由来アクセス鍵管理部403は、それぞれ任意のアルゴリズムにしたがって、暗号鍵を生成することができる。
例えば、鍵管理部101と共通鍵管理部402と内部由来アクセス鍵管理部403は、時刻に対して一意な値を求める処理を行うことで暗号鍵を生成してもよい。時刻に対して一意な値を求める処理とは、例えば、現在時刻をシード(seed)として用いて乱数を発生させ、乱数を使って暗号鍵を生成する処理である。また、シードは、通信装置を識別する情報(例えばIDまたはアドレス)と現在時刻を組み合わせて得られる情報でもよい。
(b5)特徴値に関する観点
上述のとおり、図6の特徴値303としては、例えばハッシュ値が利用可能である。その場合、暗号化された特徴値306は、メッセージ認証コード(Message Authentication Code;MAC)の1種であるkeyed-Hashing for MAC(HMAC)に相当する。
なお、第1および第2実施形態では、ボディ301と特徴値303が同じ暗号鍵で同じ暗号化アルゴリズムにより暗号化される。しかし、ボディ301と特徴値303が別の暗号鍵で暗号化されてもよいし、ボディ301と特徴値303が別の暗号化アルゴリズムにより暗号化されてもよい。
例えば、第2実施形態において、アクセス鍵により暗号化される種類のPDUに関して、ペイロードのうちボディ301の部分がアクセス鍵により暗号化され、特徴値303の部分が固定の暗号鍵により暗号化されてもよい。その場合、受信データ復号部413は、暗号化されたボディを内部由来アクセス鍵で復号し、暗号化された特徴値を固定の暗号鍵により復号すればよい。また、受信データ再暗号化部420は、復号されたボディを内部由来アクセス鍵で再暗号化し、復号された特徴値を固定の暗号鍵で再暗号化すればよい。
また、実施形態によっては、判断部107、外部由来アクセス鍵判断部416または受信データ判断部417による判断のために、公開鍵暗号アルゴリズムによるディジタル署名が利用されてもよい。
例えば、第1の通信装置400は、予め公開鍵を第2の通信装置400に公開する。そして、第1の通信装置400のデータ処理部423は、ボディ301からハッシュ値を計算し、計算したハッシュ値を秘密鍵で暗号化することで、特徴値303としてのディジタル署名を生成してもよい。この場合、送信データ暗号化部421は、ディジタル署名を含むペイロード全体を第2の通信装置400のアクセス鍵で暗号化してもよいし、ボディ301の部分のみを第2の通信装置400のアクセス鍵で暗号化してもよい。
送信データ暗号化部421が、特徴値303としてのディジタル署名を含むペイロード全体を第2の通信装置400のアクセス鍵で暗号化する実施形態では、第2の通信装置400の受信データ復号部413は、ペイロード全体をアクセス鍵で復号する。そして、受信データ判断部417は、復号された特徴値309を公開鍵で復号し、ハッシュ値を得る。また、受信データ判断部417は、復号されたボディ308から、図6の特徴値311に相当するハッシュ値を計算する。
そして、得られた2つのハッシュ値が等しければ、受信データ判断部417は、「暗号化に使われたのと同じアクセス鍵でペイロードが復号された」と判断する。つまり、受信データ判断部417は、「復号されたデータは正常な平文データであり、復号は成功した」と判断する。
他方、得られた2つのハッシュ値が異なる場合は、受信データ判断部417は、「暗号化に使われたのと違うアクセス鍵でペイロードが復号された」と判断する。つまり、受信データ判断部417は、「復号されたデータは異常であり、復号は失敗した」と判断する。
つまり、第1および第2実施形態では、復号された特徴値309と計算された特徴値311が完全に一致するか否かが、復号された特徴値309と計算された特徴値311の間の整合性の判断に使われる。しかし、上記のとおり実施形態によっては、復号された特徴値309に対して公開鍵による復号などの何らかの操作を施した結果が、特徴値311と比較される。換言すれば、実施形態によっては、「復号された特徴値309自体と特徴値311が完全に一致するか否か」という基準以外の基準により整合性の判断が行われる。
なお、ディジタル署名が使われる場合は、第1の通信装置400の送信データ暗号化部421が、ボディ301の部分のみを第2の通信装置400のアクセス鍵で暗号化する実施形態も可能である。その場合、第2の通信装置400の受信データ復号部413は、暗号化されたボディ305のみをアクセス鍵で復号する。
そして、受信データ判断部417は、特徴値303としてのディジタル署名を公開鍵で復号してハッシュ値を得る。また、受信データ判断部417は、復号されたボディ308から、図6の特徴値311に相当するハッシュ値を算出する。そして、受信データ判断部417は、2つのハッシュ値を比較することで、特徴値303と計算された特徴値311との間の整合性を判断する。
(b6)データ形式に関する観点
図5と図15にはテーブル形式でデータを例示したが、鍵記憶部102、鍵認識部112、共通鍵記憶部406、内部由来アクセス鍵記憶部407、および外部由来アクセス鍵記憶部408に保持されるデータの形式はテーブル形式に限られない。
例えば、鍵記憶部102は、大きさが3のリングバッファにより実現されてもよい。そして、リングバッファにおいて1つのエントリは現在鍵用に、1つのエントリは旧鍵用に、1つのエントリは新たに生成される暗号鍵の一時記憶領域用に使われてもよい。この場合、鍵管理部101は、暗号鍵の生成のたびに、現在鍵を指すポインタを動かせばよい。内部由来アクセス鍵記憶部407も同様に、リングバッファにより実現されてもよい。
また、鍵認識部112と外部由来アクセス鍵記憶部408におけるデータ形式は、図示したようなテーブル形式でもよいが、アドレスと暗号鍵のペアを要素として持つ線形リストまたはFirst-In-First-Out(FIFO)キューなどでもよい。
(b7)上書きを行う対象についての観点
第2実施形態は、アクセス鍵の配送用PDUに関して記憶領域の上書きが行われないように変形されてもよい。つまり、内部由来アクセス鍵暗号化部422と外部由来アクセス鍵復号部414と外部由来アクセス鍵再暗号化部419は、暗号化または復号の際に、必ずしも記憶領域の上書きを行わなくてもよい。
その理由は、アクセス鍵の配送用PDUなどの制御用PDUは、一般にペイロードが短いからである。そのため、記憶領域の上書きが行われないことによる記憶領域の消費の影響は、アクセス鍵の配送用PDUの場合は、アクセス鍵により暗号化されるアプリケーションデータ用PDUの場合よりも小さい。つまり、実施形態によっては、アクセス鍵により暗号化されるアプリケーションデータ用PDUについて記憶領域の上書きを行うだけで、メモリ410の有効利用が十分に達成されることもある。
同様の理由から、例えば、「受信頻度に比べて送信頻度が少ない」、あるいは「送信データ115のデータ長が短い」といった特定の環境においては、送信データ115について記憶領域の上書きが行われなくてもよい。
なお、以上の本明細書の説明において、「上書き」という用語の意味は、「書き戻す」ことも含む。例えば、第1のデータを直接第2のデータで上書きすることは、別の観点から表現すれば、第1のデータが記憶されている記憶領域に直接第2のデータを書き戻すことである。また、第1のデータが記憶されている記憶領域をクリアしてから同じ記憶領域に第2のデータを書き戻すことも、「上書き」の1種である。