(第1の実施形態)
[システムアーキテクチャ]
図1は、第1の実施形態に係る通信システムの構成例を示すブロック図である。本実施形態では、ECHONET Liteノードのセキュリティ機能を例に挙げて説明する。ECHONET Liteノードは、セキュリティ機能として、IEEE802.21d及びRFC5191で規定されるPANA(Protocol for carrying Authentication for Network Access)をサポートする。
図1に示すように、通信システム10は、コーディネータ20と、コントローラ30と、機器40とを有する。これらのうち、コーディネータ20は、1つのECHONET Liteドメイン(以下、単に「ドメイン」と呼ぶ場合がある)内に1つ存在する。例えば、ドメインは、1つのHAN(Home Area Network)である。コントローラ30は、1つのドメイン内に少なくとも1つ存在する。すなわち、コントローラ30はM個(M≧1)存在する。機器40は、1つのドメイン内に少なくとも1つ存在する。すなわち、機器40はN個(N≧1)存在する。図2は、第1の実施形態に係るコントローラ30と機器40との接続関係の例を示す図である。図2に示すように、コントローラ30と機器40とは、1つのドメイン内に少なくとも1つ存在する。また、機器40は、コントローラ30によって形成されるグループ(アプリケーションシステムグループ)に属する。ここで、機器40は、複数のアプリケーションシステムグループに属する場合も有り得る。
コーディネータ20と各コントローラ30との間では、「相互認証」及び「鍵共有」の手順が実施される。同様に、コーディネータ20と各機器40との間では、「相互認証」及び「鍵共有」の手順が実施される。また、コントローラ30と機器40との間では、「暗号通信」が行なわれる。暗号通信で使用される暗号鍵は、鍵共有の手順において、コーディネータ20から各コントローラ30及び各機器40に配布される。なお、暗号通信は、コントローラ30間や機器40間で行われても良い。相互認証、鍵共有及び暗号通信の詳細な手順については後述する。
図3は、第1の実施形態に係るノード種別の対応例を示す図である。図3では、ECHONET Liteノード種別と、PANAノード種別と、IEEE802.21dノード種別との対応付けを例に挙げている。コーディネータ20は、グループ管理及びセキュリティ管理の主体となるノードであり、ECHONET Liteの管理や操作関連機器グループの新規クラスとして定義される。コントローラ30及び機器40は、ECHONET Liteの管理や操作関連機器グループの既存クラスである。コーディネータ20は、PANAのPAA(PANA Authentication Agent)及びIEEE802.21dのPoS(Point of Service) with GM(Group Manager)の機能を有する。コントローラ30及び機器40は、PANAのPaC(PANA Client)及びIEEE802.21dのPoSの機能を有する。なお、コーディネータ20は、ECHONET Liteノード機器でない場合もある。このとき、本実施形態に係る通信システムは、ECHONET Lite以外のシステムにも適用可能である。
図4は、第1の実施形態に係る各装置のハードウェア構成例を示すブロック図である。ここでは、コーディネータ20を例に挙げて説明する。図4に示すように、コーディネータ20は、CPU(Central Processing Unit)22と、RAM(Random Access Memory)23と、ROM(Read Only Memory)24と、通信I/F25とを有する。上記各ハードウェアは、バス21によって接続されている。CPU22は、コーディネータ20の動作を統括的に制御する。CPU22は、RAM23をワークエリア(作業領域)として、ROM24等に格納されたプログラムを実行することで、コーディネータ20全体の動作を制御する。通信I/F25は、外部装置(例えば、コントローラ30や機器40等)と通信するためのインタフェースである。
図5は、第1の実施形態に係るコーディネータ20の機能構成例を示すブロック図である。図5に示すように、コーディネータ20は、制御部210と、通信部220とを有する。制御部210は、コーディネータ20の動作を統括的に制御し、各種処理を実行する。各種処理は後述する。通信部220は、コントローラ30や機器40との通信を制御する。なお、コントローラ30や機器40も、制御部と通信部とを有し、後述する各種処理を実行する。
[グループ管理]
ECHONET Liteセキュリティでは、HANグループ、個別通信用グループ、アプリケーションシステムグループ、及びコントローラグループの4種類のグループを扱うことができる。これらのうち、HANグループ(グループ数=1)は、ドメイン内の全てのECHONET Liteノード間の暗号通信に使用可能である。また、HANグループでは、1つのグループ暗号鍵「K1」がドメイン内の全てのECHONET Liteノードで共有される。
個別通信用グループは、ある特定の2つのECHONET Liteノード間での暗号通信に使用可能である。ある特定の2つのECHONET Liteノードの識別子をx,yとすると、グループ暗号鍵K_xy又はグループ暗号鍵K_yx(本実施形態では、K_xy=K_yxとする)が、ノードx、ノードy間で共有される。
アプリケーションシステムグループ(グループ数=M)は、ある特定のコントローラ30に接続するECHONET Liteノード(コントローラ30を含む)間での暗号通信に使用可能である。コントローラ30の識別子をctlとすると、グループ暗号鍵K_ctlが、コントローラctlに接続するECHONET Liteノードで共有される。
コントローラグループ(グループ数=1)は、ドメイン内の全てのコントローラ30間の暗号通信に使用可能である。また、コントローラグループでは、1つのグループ暗号鍵K2がドメイン内の全てのコントローラ30で共有される。
上記4種類全てのグループによるグループ通信において、IEEE802.21dによる暗号通信を行なうものとする。以下、‘+’は文字列の連結を表す演算子、TypeはLeafID、EUI64アドレス又はショートアドレスの何れのタイプかを識別する文字、‘L’(LeafID)、‘E’(EUI64アドレス)、‘S’(IEEE802.15.4ショートアドレス)の何れかである。IDx、IDyは個別通信用グループに属する2つのECHONET Liteノードの識別子(LeafID、EUI64アドレス、IEEE802.15.4ショートアドレスの何れか)、IDctlはアプリケーションシステムにおけるコントローラ30の識別子(LeafID、EUI64アドレス、IEEE802.15.4ショートアドレスの何れか)である。
このとき、パケットに付与されるIEEE802.21SourceIdentifierとして、LeafID、EUI64アドレス又はIEEE802.15.4ショートアドレスが使用されるかもしれない。例えば、パケットに付与されるIEEE802.21SourceIdentifierは、“L10”、“E00112233AABBCCDD”、“S0011”等である。LeafIDは、IEEE802.21dのグループ管理木における葉ノードの識別子であり、IEEE802.21dノードの識別子として使用可能である。なお、グループ管理木における葉ノードの識別子は、インデックスの一例である。例えば、インデックスは、MACアドレス等の識別子を表す。
LeafID長は、グループ管理木サイズに依存する。葉ノード数が256であるグループ管理木の場合、BASE16エンコーディング時のLeafID長は2バイトとなる。また、BASE16エンコーディング時のEUI64アドレス長は16バイト、BASE16エンコーディング時のIEEE802.15.4ショートアドレス長は4バイトとなる。以下、LeafID、EUI64アドレス、IEEE802.15.4ショートアドレスの符号化には、BASE16エンコーディングを使用するものとする。
図6は、第1の実施形態に係るグループ管理木とLeafIDとの例を示す図である。図6において、LeafIDは、2進数表現で表されている。グループ管理木において、葉ノードと各通信ノードとは、1対1に対応している。また、グループ管理木の各ノードには、固有の128ビットの暗号鍵が対応している。ここで、ある通信ノードについて、根ノードから葉ノードに至るパス上に存在する各ノードに対応する暗号鍵のリストを、該当の通信ノードに対するデバイス鍵と呼ぶ。例えば、根ノードから葉ノードに至るパス上に存在する各ノードについて、N0に対しては、ノード0、ノード00、ノード000、ノード0000となる。ある通信ノードのデバイス鍵は、該通信ノードとGMとの間で共有される。例えば、通信ノードN0、N1、N2、N3をグループメンバとすると、鍵暗号化に使用されるノード鍵は、ノード00のノード鍵となる。また、通信ノードN1、N2、N3、N4、N6、N7をグループメンバとすると、鍵暗号化に使用されるノード鍵は、ノード00、ノード0100、ノード011のノード鍵となる。
グループ通信において、パケットに付与されるIEEE802.21DestinationIdentifierとして、IEEE802.21dで規定されるMIHF GroupIDを使用する。MIHF GroupIDの値は、グループによって異なる。図7は、第1の実施形態に係るグループ割り当て規則の例を示す図である。HANグループに対しては、MIHF GroupIDとしてMIHF BroadcastID(=“”)を使用する。個別通信用グループに対しては、MIHF GroupIDとして、Type+IDx+‘@’+IDyを使用する。例えば、個別通信用グループのMIHF GroupIDは、“L10@20”、“E00112233AABBCCDD@00112233BBCCDDEEFF”、“S0011@AABB”等となる。
アプリケーションシステムグループに対しては、MIHF GroupIDとして、Type+‘@’+IDctlを使用する。例えば、アプリケーションシステムグループのMIHF GroupIDは、“L@20”、“E@00112233BBCCDDEEFF”、“S@AABB”等となる。コントローラグループに対しては、MIHF GroupIDとして、“Controllers”を使用する。以下では、MIHF ID及びMIHF Broadcast以外のMIHF GroupIDを、“ID(Type)”と表記する場合がある。例えば、MIHF GroupID“L10@20”については、10@20(L)と表記する。
[通信手順]
図8は、第1の実施形態に係る通信手順の例を示す全体シーケンスである。図8に示すように、コーディネータ20とコントローラ30との間で、「1.機器登録」、「2.認証・鍵共有」が実施され、コントローラ30と機器40との間で「3.暗号通信」が実施される。同様に、コーディネータ20と機器40との間で、「1.機器登録」、「2.認証・鍵共有」が実施され、コントローラ30と機器40との間で「3.暗号通信」が実施される。なお、「1.機器登録」と「2.認証・鍵共有」において、コントローラ30と機器40とは、任意の順序で起動可能である。以下では、コントローラ30と機器40とを、「参加ノード」と呼ぶ場合がある。
まず、参加ノードとコーディネータ20との間で機器登録が行なわれる。参加ノードは、UPnP又はECHONET Lite(何れもセキュリティなし)等を使用してコーディネータ20を発見する。コーディネータ20は、UPnP又はECHONET Lite等のブロードキャストを受信した場合に、送信元を登録する。なお、登録内容の確定は、後述する認証・鍵共有の成功時に行なわれても良い。このとき、認証・鍵共有に失敗した場合には、登録内容を破棄する。
次に、参加ノードとコーディネータ20との間で認証及び鍵共有を行なう。参加ノードとコーディネータ20との間の認証時には、相互認証のために証明書の交換が行なわれる。認証に成功した場合、コーディネータ20は、鍵共有に使用される802.21dデバイス鍵を暗号化して参加ノードに配布する。なお、リブート時の処理負荷を軽減するために、参加ノードは、認証及び鍵共有時に、コーディネータ20から配布された情報を不揮発性メモリに保持するものとする。
参加ノードとコーディネータ20との間の鍵共有は、コーディネータ20から参加ノードに対してグループ鍵を配布することにより行なわれる。グループ鍵は、参加ノードの要求なしで配布される場合(プッシュ)と、参加ノードからの要求により配布される場合(プル)とがある。また、コーディネータ20は、参加ノードに対し、別の参加ノードに関する証明書を配布するかもしれない。
その後、参加ノードの間で暗号通信が行なわれる。コントローラ30と機器40との間の暗号通信に加えて、コントローラ30間、機器間においても暗号通信が行なわれても良い。暗号通信に使用されるメッセージには、暗号化されたECHONET Lite電文が含まれ、送信元ノードによるデジタル署名を付与することができる。本実施形態では、例えば、メッセージ送信にマルチキャストが使用される場合、ドメインの範囲があるIPリンクの範囲と一致する場合には、マルチキャストアドレスとして、All Nodesリンクローカルアドレス(FF02:0:0:0:0:0:0:1)を使用する。
図9は、第1の実施形態に係る認証シーケンスの例である。認証時には、PANAの上で証明書を使用したRFC5216で規定されるEAP−TLSによる相互認証を実施するものとする。このとき、X.509証明書の交換と、ECDH(楕円Diffie‐Hellman)鍵交換とが行なわれ、相互認証とセッション鍵とが確立される。コーディネータ20から参加ノードには、認証局(CA:Certificate Authority)のX.509証明書も配布されるかもしれない。認証に成功すると、コーディネータ20から参加ノードに、少なくとも参加ノードの802.21dデバイス鍵、コーディネータ20の802.21dLeafID、及び、参加ノードの802.21dLeafIDが配布される。参加ノードの802.21dデバイス鍵は、暗号化して配布する必要がある。このときの暗号化は、RFC6786で規定される暗号化機能が使用される。なお、確立されたPANAセッションは、直ちに削除しても良い。
図10は、第1の実施形態に係る鍵共有シーケンスの例である。鍵共有は、参加ノードとコーディネータ20との間の認証完了後に行なうフェーズ(フェーズ1)と、参加ノードが暗号通信を行なう通信ピアを発見したときに行なうフェーズ(フェーズ2)とに分けられる。フェーズ1は、コーディネータ20とコントローラ30との間の鍵共有であるフェーズ1Aと、コーディネータ20と機器40との間の鍵共有であるフェーズ1Bとに分かれる。なお、フェーズ1Aとフェーズ1Bとは、何れが先に行なわれても良い。また、フェーズ2は、コーディネータ20とコントローラ30との間の鍵共有であるフェーズ2Aと、コーディネータ20と機器40との間の鍵共有であるフェーズ2Bとに分かれる。なお、フェーズ2Aとフェーズ2Bとは、何れが先に行なわれても良い。フェーズ1A、フェーズ1B、フェーズ2A及びフェーズ2Bの各フェーズでは、IEEE802.21dを使用して鍵共有を行なう。以下に、各フェーズについて説明する。
フェーズ1Aにおいて、コーディネータ20は、コントローラ30に対し、コーディネータ20とコントローラ30との間の個別通信用グループ鍵をプッシュにより配布する(図10の(1)参照)。そして、コーディネータ20は、コントローラ30に対し、HANグループ鍵をプッシュにより配布する(図10の(2)参照)。続いて、コーディネータ20は、コントローラ30に対し、コントローラグループ鍵をプッシュにより配布する(図10の(3)参照)。その後、コーディネータ20は、コントローラ30に対し、アプリケーションシステムグループ鍵をプッシュにより配布する(図10の(4)参照)。
フェーズ1Bにおいて、コーディネータ20は、機器40に対し、コーディネータ20と機器40との間の個別通信用グループ鍵をプッシュにより配布する(図10の(5)参照)。そして、コーディネータ20は、機器40に対し、HANグループ鍵をプッシュにより配布する(図10の(6)参照)。
フェーズ2Aにおいて、コーディネータ20は、コントローラ30に対し、コントローラ30と機器40との間の個別通信用グループ鍵を、プル又はプッシュにより配布する(図10の(7)参照)。ここで、フェーズ2Aがフェーズ2Bよりも先に行なわれる場合にはプル、フェーズ2Bがフェーズ2Aよりも先に行なわれる場合にはプッシュとなる。そして、コーディネータ20は、コントローラ30に対し、機器40のX.509証明書をプッシュにより配布する(図10の(8)参照)。
フェーズ2Bにおいて、コーディネータ20は、機器40に対し、コントローラ30と機器40との間の個別通信用グループ鍵を、プル又はプッシュにより配布する(図10の(9)参照)。ここで、フェーズ2Aがフェーズ2Bよりも先に行なわれる場合にはプル、フェーズ2Bがフェーズ2Aよりも先に行なわれる場合にはプッシュとなる。そして、コーディネータ20は、機器40に対し、アプリケーションシステムグループ鍵をプッシュにより配布する(図10の(10)参照)。続いて、コーディネータ20は、機器40に対し、コントローラ30のX.509証明書をプッシュにより配布する(図10の(11)参照)。
図10に示した鍵共有シーケンスにおいて、(3)は、コントローラグループ鍵を使用しない場合には不要である。また、(4)及び(10)は、アプリケーションシステムグループ鍵を使用しない場合には不要である。また、(8)は、暗号通信において機器40の送信元署名を付与しない場合には不要である。また、プッシュによるグループ鍵配布は、プルによるグループ鍵配布に置き換えることも可能である。
(1)及び(5)以外の各ステップでコーディネータ20と参加ノードとの間で交換されるIEEE802.21dメッセージは、コーディネータ20と参加ノードとの間の個別通信用グループ宛てに送信される。また、(1)及び(5)で交換されるIEEE802.21dメッセージは、個別ノード宛てに送信される。図10に示した(1)〜(11)の各ステップは、「プッシュによるグループ鍵配布」、「プルによるグループ鍵配布」、「プッシュによる証明書配布」の3種類の基本手順に分類できる。以下では、これらの3種類の手順について説明する。
プッシュによるグループ鍵配信時に、コーディネータ20は、参加ノードに対し、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージを受信した参加ノードは、コーディネータ20に対し、MIH_Net_Group_Manipulate responseメッセージを送信する。
プルによるグループ鍵配信時に、参加ノードは、コーディネータ20に対し、MIH_MN_Group_Manipulate requestメッセージを送信する。MIH_MN_Group_Manipulate requestメッセージを受信したコーディネータ20は、参加ノードに対し、MIH_MN_Group_Manipulate responseメッセージを送信する。
プッシュによる証明書配布時に、コーディネータ20は、参加ノードに対し、MIH_Push_Certificate requestメッセージを送信する。MIH_Push_Certificate requestメッセージを受信した参加ノードは、コーディネータ20に対し、MIH_Push_Certificate responseメッセージを送信する。
暗号通信では、ユニキャスト暗号通信とマルチキャスト暗号通信とをサポートする。ユニキャスト暗号通信と、マルチキャスト暗号通信とでは、暗号化されたECHONET Liteメッセージを含むMIH_Configuration_Update indicationメッセージが使用される。ユニキャスト暗号通信のMIH_Configuration_Update indicationメッセージは、個別通信用グループ宛てに送信される。マルチキャスト暗号通信のMIH_Configuration_Update indicationメッセージは、個別通信用グループ以外のグループ宛てに送信される。
証明書リボーク時に、コーディネータ20は、MIH_Revoke_Certificate requestメッセージをマルチキャスト又はユニキャストで送信する。マルチキャストで送信する場合、ドメインの範囲内においてMIH_Revoke_Certificate requestメッセージを受信したノード(コントローラ30又は機器40)は、MIH_Revoke_Certificate responseメッセージをユニキャストでコーディネータ20に送信する。
証明書リボーク時のユニキャストMIH_Revoke_Certificate requestメッセージは、コーディネータ20と参加ノードとの間の個別通信用グループ宛てに送信される。マルチキャストMIH_Revoke_Certificate requestメッセージは、HANグループ宛てに送信される。MIH_Revoke_Certificate responseメッセージは、コーディネータ20と参加ノードとの間の個別通信用グループ宛てに送信される。ユニキャストによる証明書リボークは、マルチキャストによる証明書リボークと併用することが可能である。
鍵更新時に、コーディネータ20は、プッシュによるグループ鍵配信を起動する。このとき、MIH_Net_Group_Manipulate requestメッセージをマルチキャストで一斉同報する、又は、ユニキャストで個別ノード宛てに送信する。MIH_Net_Group_Manipulate requestメッセージを受信した参加ノード(コントローラ30又は機器40)は、MIH_Net_Group_Manipulate responseメッセージを、ユニキャストでコーディネータ20に送信する。
鍵更新時のユニキャストMIH_Net_Group_Manipulate requestメッセージは、コーディネータ20と参加ノードとの間の個別通信用グループ宛てに送信される。マルチキャストMIH_Net_Group_Manipulate requestメッセージは、HANグループ宛てに送信される。MIH_Net_Group_Manipulate responseメッセージは、コーディネータ20と参加ノードとの間の個別通信用グループ宛てに送信される。ユニキャストによる鍵更新は、マルチキャストによるグループ鍵更新と併用することが可能である。
あるグループに対する鍵更新は、グループからメンバーが離脱した場合、グループを削除する場合、グループのメンバーによる再登録が起こった場合、に起動される。また、鍵更新による通信瞬断を避けることが好ましく、パケット送信とパケット受信とにおいて、以下の実装が推奨される。パケット送信では、新鍵をコーディネータ20から受信してから一定期間(T)、旧鍵を使用し、以降は新鍵を使用する。パケット受信では、新鍵をコーディネータ20から受信してから一定期間(2T)、旧鍵及び新鍵のどちらでも使用可能とする。ここで、「T」は、鍵更新時間の最大値であり、例えばデフォルト値は180秒である。
鍵更新時に新鍵の受信に失敗したことで新鍵を保有していない参加ノードは、新鍵で暗号化された、自ノードが属するグループ宛てのメッセージを受信した場合に、プルによるグループ鍵配信を起動すれば良い。鍵更新の結果、一定期間2Tの間、コーディネータ20がMIH_Net_Group_Manipulate responseメッセージをグループに所属するノードの何れからも受信しなかった場合には、鍵更新失敗となる。鍵更新に失敗したコーディネータ20は、鍵更新のリトライを試みても良く、これにより、鍵更新のリトライのたびに新しい鍵が生成されるかもしれない。
あるグループを削除する場合には、削除対象のグループに対し、空のComplete Subtreeを指定した鍵更新を実施する。又は、Complete Subtreeにグループ管理木の未使用の葉ノードを1つだけ含む鍵更新を実行する。
[セキュリティ]
本実施形態で使用されるIEEE802.21dの全てのメッセージに適用されるセキュリティ共通処理のうち、IEEE802.21dで詳細が規定されていない部分を規定する。IEEE802.21dメッセージの保護のためのセキュリティは、秘匿性、送信元認証の2種類である。これらのうち、秘匿性は、AES−CCMにより実現される。また、送信元認証は、鍵長256ビットのECDSAにより実現される。秘匿性の有効時には、SAID(Security Association Identifier) TLV(Type Length Value)、及びSecurity TLVが使用される。送信元認証の有効時には、Signature TLVが使用される。秘匿性と送信元認証とがともに有効である場合には、SAID TLV、Security TLV、Signature TLVが使用される。以下に、IEEE802.21dメッセージの保護に関するセキュリティポリシーと、AES−CCMで使用されるシーケンス番号の更新方法とを説明する。
セキュリティポリシーには、個別通信のセキュリティポリシーと、グループ通信のセキュリティポリシーとが存在する。本実施形態において、個別通信とは、IEEE802.21dのDestination IdentifierにMIHF IDを使用した1対1の通信のことを指す。また、グループ通信とは、IEEE802.21dのDestination IdentifierにMIHF GroupIDを使用した多対多の通信のことを指す。グループ通信の特殊ケースとして、グループメンバ数が2である通信を個別グループ通信と呼ぶ。個別通信と個別グループ通信とは、セキュリティポリシーの観点で区別される。
個別通信については、秘匿性は常に無効とし、送信元認証は常に有効とする。グループ通信に関しては、グループ毎に、全体ポリシー、送信元別ポリシー、メッセージ別ポリシー等のセキュリティポリシーを定める。全体ポリシーは、対象グループ全体に適用されるセキュリティポリシーである。全体ポリシーには、「有効」又は「無効」の何れかのポリシーが設定される。送信元別ポリシーは、同一グループ内の送信元別に適用されるセキュリティポリシーである。送信元別ポリシーには、全体ポリシーに対する例外が適用される送信元を指定する。例えば、送信元別ポリシーは、全体ポリシーが「有効」であるときに例外=「無効」となり、全体ポリシーが「無効」であるときに例外=「有効」となる。送信元別ポリシーは、全体ポリシーの例外を適用する送信元識別子のリスト、Bloom Filter、又は、Complete Subtreeにより指定される。
メッセージ別ポリシーは、同一グループ内のメッセージ毎に適用されるポリシーである。メッセージ別ポリシーには、全体ポリシーに対する例外が適用されるメッセージを指定する。例えば、メッセージ別ポリシーは、全体ポリシーが「有効」であるときに例外=「無効」となり、全体ポリシーが「無効」であるときに例外=「有効」となる。メッセージ別ポリシーは、全体ポリシーの例外を適用するメッセージ識別子のリスト、Bloom Filter、又は、ビットマップにより指定される。
図11は、第1の実施形態に係るグループ通信セキュリティポリシーのデフォルト値の例を示す図である。図11において、網掛けで表された箇所は、変更不可である。例えば、設定により変更可能なセキュリティポリシーは、個別通信用グループ以外の送信元認証に関する送信元別ポリシー及びメッセージ別ポリシーである。変更可能なセキュリティポリシーの設定は、事前に設定しておく、グループ識別子にポリシー情報を埋め込む、グループ操作コマンドで通知する、の何れかにより行なわれる。なお、グループ操作コマンドは、MIH_MN_Group_Manipulate又はMIH_Net_Group_Manipulateである。
IEEE802.21dのAES−CCMは、13オクテットのNonceを使用する。このNonceは、TransactionID(2オクテット)、SequenceNumber(10オクテット)、FragmentNumber(1オクテット)を連結したものである。これらのうち、SequenceNumber以外は、パケットヘッダのフィールドである。IEEE802.21dでは、グループ毎にSequenceNumberが管理される。認証及び鍵共有時には、SequenceNumber=0が各ノードに対して通知される。SequenceNumberは、鍵更新時にゼロにリセットされ、鍵更新手順を用いて各ノードに通知される。
ノードのリブート時に、リブートしたノードは、リブート前に使用していたSequenceNumberを保持していない場合、コーディネータ20に対して、MIH Re−registration(RequestCode=1のMIH Registration)による再登録を実行する。コーディネータ20は、再登録したノードが所属する各グループについて鍵更新を行なう。このとき、PANAによる認証及び再認証は不要である。本実施形態では、SequenceNumberは10オクテットであるため、グループ存命中にSequenceNumberが1周することはないものと仮定する。なお、グループ存命中とは、対象となるグループに含まれるノード数が1以上であることを指す。
[IEEE802.21dメッセージTLV]
本実施形態で使用されるIEEE802.21dメッセージに含まれるセキュリティポリシー非依存TLVを説明する。セキュリティポリシー非依存TLVは、IEEE802.21d TLVのうち、SAID TLV、Security TLV及びSignature TLV以外のTLVである。
図12は、第1の実施形態に係るMIH_Net_Group_Manipulate requestメッセージに含まれるセキュリティポリシー非依存TLVの例を示す図である。図12に示すように、SourceIdentifierは、コーディネータ20の識別子である。DestinationIdentifierは、ユニキャストの場合、参加ノードの識別子、又は、コーディネータ20と参加ノードとの間の個別通信用グループの識別子である。また、DestinationIdentifierは、マルチキャストの場合、HANグループの識別子である。TargetIdentifierは、グループ識別子であり、個別通信用グループ又はアプリケーションシステムグループの場合はLeafIDを使用する。
ResponseFlagは、応答要求フラグであり、値「1」を指定する。GroupKeyDataは、暗号化されたグループ鍵であり、空のCompleteSubtreeが指定される場合、GroupKeyData及びSAIDNotificationは不要である。CompleteSubtreeは、GroupKeyDataの復号に使用されるCompleteSubtreeデータである。SequenceNumberは、暗号通信時の送信パケットのAES−CCM NonceフィールドのSequenceNumber部の初期値である。TargetAddressは、個別通信用グループの場合にメッセージに含まれ、参加ノードに対する通信ピアノードのIPアドレスを指定する。SAID Notificationは、GroupKeyDataに対応するSAIDを指定する。
図13は、第1の実施形態に係るMIH_Net_Group_Manipulate responseメッセージに含まれるセキュリティポリシー非依存TLVの例を示す図である。図13に示すように、SourceIdentifierは、参加ノードの識別子である。DestinationIdentifierは、コーディネータ20の識別子、又は、コーディネータ20と参加ノードとの間の個別通信用グループ識別子である。TargetIdentifierは、グループ識別子であり、個別通信用グループ又はアプリケーションシステムグループの場合はLeafIDを使用する。GroupStatusは、グループ操作結果であり、Join operation successful(値「0」)を指定する。
図14は、第1の実施形態に係るMIH_MN_Group_Manipulate requestメッセージに含まれるセキュリティポリシー非依存TLVの例を示す図である。図14に示すように、SourceIdentifierは、参加ノードの識別子である。DestinationIdentifierは、コーディネータ20と参加ノードとの間の個別通信用グループ識別子である。TargetIdentifierは、グループ識別子であり、個別通信用グループの場合はLeafID以外の識別子を指定する。GroupActionは、グループ操作種別であり、Join the group(値「0」)を指定する。
図15は、第1の実施形態に係るMIH_MN_Group_Manipulate responseメッセージに含まれるセキュリティポリシー非依存TLVの例を示す図である。図15に示すように、SourceIdentifierは、コーディネータ20の識別子である。DestinationIdentifierは、コーディネータ20と参加ノードとの間の個別通信用グループ識別子である。TargetIdentifierは、グループ識別子であり、個別通信用グループ又はアプリケーションシステムグループの場合はLeafIDを使用する。GroupKeyDataは、暗号化されたグループ鍵である。CompleteSubtreeは、GroupKeyDataの復号に使用されるCompleteSubtreeデータである。SequenceNumberは、暗号通信時の送信パケットのAES−CCM NonceフィールドのSequence Number部の初期値である。SAID Notificationは、GroupKeyDataに対応するSAIDを指定する。
図16は、第1の実施形態に係るMIH_Push_Certificate requestメッセージに含まれるセキュリティポリシー非依存TLVの例を示す図である。図16に示すように、SourceIdentifierは、参加ノードの識別子である。DestinationIdentifierは、ユニキャストの場合、コーディネータ20と参加ノードとの間の個別通信用グループの識別子である。また、DestinationIdentifierは、マルチキャストの場合、HANグループの識別子である。Certificateは、参加ノードと暗号通信を行なう通信ピアノードのX.509証明書である。
図17は、第1の実施形態に係るMIH_Push_Certificate responseメッセージに含まれるセキュリティポリシー非依存TLVの例を示す図である。図17に示すように、SourceIdentifierは、コーディネータ20の識別子である。DestinationIdentifierは、コーディネータ20と参加ノードとの間の個別通信用グループの識別子である。CertificateSerialNumberは、HIM_Push_Certificate requestメッセージにより配布されたX.509証明書のシリアル番号である。CertificateStatusは、配布された証明書のステータスであり、証明書が有効である場合にはCertificate Valid(値「0」)が入る。
図18は、第1の実施形態に係るMIH_Configuration_Update indicationメッセージに含まれるセキュリティポリシー非依存TLVの例を示す図である。図18に示すように、SourceIdentifierは、送信元ノードの識別子である。DestinationIdentifierは、宛先識別子であり、ユニキャスト暗号通信の場合には個別通信用グループの識別子が使用される。ここで、個別通信用グループの識別子は、IDx+‘@’+IDy(L)、又は、IDy+‘@’+IDx(L)である。また、DestinationIdentifierは、マルチキャスト暗号通信の場合、アプリケーションシステムグループ使用時にはアプリケーションシステムグループの識別子(‘@’+IDctl(L))が使用され、それ以外のグループ使用時にはHANグループの識別子(“”)が使用される。ConfigurationDataには、ECHONET Lite電文が含まれる。
図19は、第1の実施形態に係るMIH_Revoke_Certificate requestメッセージに含まれるセキュリティポリシー非依存TLVの例を示す図である。図19に示すように、SourceIdentifierは、コーディネータ20の識別子である。DestinationIdentifierは、ユニキャストの場合、コーディネータ20と参加ノードとの間の個別通信用グループの識別子である。また、DestinationIdentifierは、マルチキャストの場合、HANグループの識別子である。CertificateSerialNumberは、リボークされる証明書のシリアル番号である。CertificateRevocationは、リボークされる証明書の発行元のデジタル署名である。
図20は、第1の実施形態に係るMIH_Revoke_Certificate responseメッセージに含まれるセキュリティポリシー非依存TLVの例を示す図である。図20に示すように、SourceIdentifierは、参加ノードの識別子である。DestinationIdentifierは、コーディネータ20と参加ノードとの間の個別通信用グループの識別子である。CertificateSerialNumberは、リボークされる証明書のシリアル番号である。CertificateStatusは、リボークされる証明書のステータスであり、リボーク成功の場合にはCertificate Valid(値「1」)を設定する。
次に、本実施形態に係る鍵共有、暗号通信、証明書リボーク、鍵更新についての詳細シーケンスを説明する。
[鍵共有フェーズ1の詳細シーケンス]
図21は、第1の実施形態に係る鍵共有フェーズ1Aの詳細シーケンスの例である。図21では、IDctlはコントローラ30の識別子、IDcdnはコーディネータ20の識別子、IDdevは機器40の識別子を表す。また、図21に示す(1)〜(4)は、図10に示した(1)〜(4)に相当する。
図21の(1)に示すように、コーディネータ20は、コントローラ30に対して、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージには、「src=IDcdn(L),dst=IDctl(L),GroupKeyData(K_cdn,ctl),CompleteSubtree,ResponseFlag=1,TargetID=IDctl@IDcdn(L),SequenceNum,SAIDNotif,Signature」が含まれる。また、MIH_Net_Group_Manipulate requestメッセージを受信したコントローラ30は、コーディネータ20に対して、MIH_Net_Group_Manipulate responseメッセージを送信する。MIH_Net_Group_Manipulate responseメッセージには、「src=IDdev(L),dst=IDcdn(L),TargetID=IDdev@IDcdn(L),GroupStatus,Signature」が含まれる。
図21の(2)に示すように、コーディネータ20は、コントローラ30に対して、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージには、「src=IDcdn(L),dst=IDctl@IDcdn(L),SAID,Security{GroupKeyData(K1),CompleteSubtree,ResponseFlag=1,TargetID=“”,SequenceNum,SAIDNotif}」が含まれる。MIH_Net_Group_Manipulate requestメッセージを受信したコントローラ30は、MIH_Net_Group_Manipulate responseメッセージを送信する。MIH_Net_Group_Manipulate responseメッセージには、「src=IDctl(L),dst=IDctl@IDcdn(L),SAID,Security{TargetID=“”,GroupStatus}」が含まれる。
図21の(3)に示すように、コーディネータ20は、コントローラ30に対して、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージには、「src=IDcdn(L),dst=IDctl@IDcdn(L),SAID,Security{GroupKeyData(K2),CompleteSubtree,ResponseFlag=1,TargetID=“Controllers”,SequenceNum,SAIDNotif}」が含まれる。MIH_Net_Group_Manipulate requestメッセージを受信したコントローラ30は、コーディネータ20に対して、MIH_Net_Group_Manipulate responseメッセージを送信する。MIH_Net_Group_Manipulate responseメッセージには、「src=IDctl(L),dst=IDctl@IDcdn(L),SAID,Security{TargetID=“Controllers”,GroupStatus}」が含まれる。
図21の(4)に示すように、コーディネータ20は、コントローラ30に対して、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージには、「src=IDcdn(L),dst=IDctl@IDcdn(L),SAID,Security{GroupKeyData(K_ctl),CompuleteSubtree,ResponseFlag=1,TargetID=@IDctl(L),SAIDNotif,SequenceNum}」が含まれる。MIH_Net_Group_Manipulate requestメッセージを受信したコントローラ30は、コーディネータ20に対して、MIH_Net_Group_Manipulate responseメッセージを送信する。MIH_Net_Group_Manipulate responseメッセージには、「src=IDctl(L),dst=IDctl@IDcdn(L),SAID,Security{TargetID=@IDctl(L),GroupStatus}」が含まれる。
なお、鍵共有フェーズ1Aにおいては、図21の(1)に先立ち、コントローラ30からコーディネータ20に対し、IEEE802.21‐2008で規定されるMIH Registrationが行なわれるかもしれない。
図22は、第1の実施形態に係る鍵共有フェーズ1Bの詳細シーケンスの例である。図22では、IDctlはコントローラ30の識別子、IDcdnはコーディネータ20の識別子、IDdevは機器40の識別子を表す。また、図22に示す(5)及び(6)は、図10に示した(5)及び(6)に相当する。
図22の(5)に示すように、コーディネータ20は、機器40に対して、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージには、「src=IDcdn(L),dst=IDdev(L),GroupKeyData(K_cdn,dev),CompleteSubtree,ResponseFlag=1,TargetID=IDdev@IDcdn(L),SequenceNum,SAIDNotif,Signature」が含まれる。MIH_Net_Group_Manipulate requestメッセージを受信した機器40は、コーディネータ20に対して、MIH_Net_Group_Manipulate responseメッセージを送信する。MIH_Net_Group_Manipulate responseメッセージには、「src=IDdev(L),dst=IDcdn(L),TargetID=IDdev@IDcdn(L),GroupStatus,Signature」が含まれる。
図22の(6)に示すように、コーディネータ20は、機器40に対して、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージには、「src=IDcdn(L),dst=IDdev@IDcdn(L),SAID,Security{GroupKeyData(K1),CompleteSubturee,ResponseFlag=1,TargetID=“”,SAIDNotif,SequenceNum}」が含まれる。MIH_Net_Group_Manipulate requestメッセージを受信した機器40は、コーディネータ20に対して、MIH_Net_Group_Manipulate responseメッセージを送信する。MIH_Net_Group_Manipulate responseメッセージには、「src=IDdev(L),dst=IDdev@IDcdn(L),SAID,Security{TargetID=“”,GroupStatus}」が含まれる。
なお、鍵共有フェーズ1Bにおいては、図22の(5)に先立ち、機器40からコーディネータ20に対し、IEEE802.21‐2008で規定されるMIH Registrationが行なわれるかもしれない。
[鍵共有フェーズ2の詳細シーケンス]
図23は、第1の実施形態に係る鍵共有フェーズ2の詳細シーケンスの例である。図23では、フェーズ2Aがフェーズ2Bよりも先行する場合を例に挙げる。図23では、IDctlはコントローラ30の識別子、IDcdnはコーディネータ20の識別子、IDdevは機器40の識別子を表す。また、図23に示す(7)〜(11)は、図10に示した(7)〜(11)に相当する。
図23の(7)に示すように、コントローラ30は、コーディネータ20に対して、MIH_MN_Group_Manipulate requestメッセージを送信する。MIH_MN_Group_Manipulate requestメッセージには、「src=IDctl(L),dst=IDctl@IDcdn(L),SAID,Security{TargetID=IDdev@IDctl(E or S),GroupAction=join}」が含まれる。MIH_MN_Group_Manipulate requestメッセージを受信したコーディネータ20は、コントローラ30に対して、MIH_MN_Group_Manipulate responseメッセージを送信する。MIH_MN_Group_Manipulate responseメッセージには、「src=IDcdn(L),dst=IDctl@IDcdn(L),SAID,Security{GroupKeyData(K_ctl,dev),CompleteSubtree,TargetID=IDdev@IDctl(L),GroupStatus,SAIDNotif,SequenceNum}」が含まれる。
図23の(8)に示すように、コーディネータ20は、コントローラ30に対して、MIH_Push_Certificate requestメッセージを送信する。MIH_Push_Certificate requestメッセージには、「src=IDcdn(L),dst=IDctl@IDcdn(L),SAID,Security{Certificate(CERTdev)}」が含まれる。MIH_Push_Certificate requestメッセージを受信したコントローラ30は、コーディネータ20に対して、MIH_Push_Certificate responseメッセージを送信する。MIH_Push_Certificate responseメッセージには、「src=IDctl(L),dst=IDctl@IDcdn(L),SAID,Security{CertificateSerialNumber,CertificateStatus}」が含まれる。
図23の(9)に示すように、コーディネータ20は、機器40に対して、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージには、「src=IDcdn(L),dst=IDdev@IDcdn(L),SAID,Security{GroupKeyData(K_ctl,dev),CompleteSubtree,ResponseFlag=1,TargetAddr=IPctl,TargetID=IDdev@IDctl(L),SAIDNotif,SequenceNum}」が含まれる。MIH_Net_Group_Manipulate requestメッセージを受信した機器40は、コーディネータ20に対して、MIH_Net_Group_Manipulate responseメッセージを送信する。MIH_Net_Group_Manipulate responseメッセージには、「src=IDdev(L),dst=IDdev@IDcdn(L),SAID,Security{TargetID=IDdev@IDctl(L),GroupStatus}」が含まれる。
図23の(10)に示すように、コーディネータ20は、機器40に対して、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージには、「src=IDcdn(L),dst=IDdev@IDcdn(L),SAID,Security{GroupKeyData(K_ctl),CompleteSubtree,ResponseFlag=1,TargetID=@IDctl(L),SAIDNotif,SequenceNum}」が含まれる。MIH_Net_Group_Manipulate requestメッセージを受信した機器40は、コーディネータ20に対して、MIH_Net_Group_Manipulate responseメッセージを送信する。MIH_Net_Group_Manipulate responseメッセージには、「src=IDdev(L),dst=IDdev@IDcdn(L),SAID,Security{TargetID=@IDctl(L),GroupStatus}」が含まれる。
図23の(11)に示すように、コーディネータ20は、機器40に対して、MIH_Push_Certificate requestメッセージを送信する。MIH_Push_Certificate requestメッセージには、「src=IDcdn(L),dst=IDdev@IDcdn(L),SAID,Security{Certificate(CERTctl)}」が含まれる。MIH_Push_Certificate requestメッセージを受信した機器40は、コーディネータ20に対して、MIH_Push_Certificate responseメッセージを送信する。MIH_Push_Certificate responseメッセージには、「src=IDdev(L),dst=IDdev@IDcdn(L),SAID,Security{CertificateSeriaiNumber,CertificateStatus}」が含まれる。
なお、鍵共有フェーズ2Bをコントローラ30間通信の鍵共有に使用する場合、鍵共有フェーズ2Bの機器40(IDdev)は、鍵共有フェーズ2Aのコントローラ30(IDctl)の通信相手のコントローラ30(IDctl’)に置き換えられ、(7)が省略される。また、鍵共有フェーズ2Aを機器間通信の鍵共有に使用する場合、鍵共有フェーズ2Aのコントローラ30(IDctl)は、鍵共有フェーズ2Bの機器40(IDdev)の通信相手の機器40(IDdev’)に置き換えられ、(7)が省略される。
図24は、第1の実施形態に係る鍵共有フェーズ2の詳細シーケンスの例である。図24では、フェーズ2Bがフェーズ2Aよりも先行する場合を例に挙げる。図24では、IDctlはコントローラ30の識別子、IDcdnはコーディネータ20の識別子、IDdevは機器40の識別子を表す。また、図24に示す(7)〜(11)は、図10に示した(7)〜(11)に相当する。
図24の(9)に示すように、機器40は、コーディネータ20に対して、MIH_MN_Group_Manipulate requestメッセージを送信する。MIH_MN_Group_Manipulate requestメッセージには、「src=IDdev(L),dst=IDdev@IDcdn(L),SAID,Security{TargetID=IDdev@IDctl(E or S),GroupAction=join}」が含まれる。MIH_MN_Group_Manipulate requestメッセージを受信したコーディネータ20は、機器40に対して、MIH_MN_Group_Manipulate responseメッセージを送信する。MIH_MN_Group_Manipulate responseメッセージには、「src=IDcdn(L),dst=IDdev@IDcdn(L),SAID,Security{GroupKeyData(K_ctl,dev),CompleteSubtree,TargetID=IDdev@IDctl(L),GroupStatus,SAIDNotif,SequenceNum}」が含まれる。
図24の(10)に示すように、コーディネータ20は、機器40に対して、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージには、「src=IDcdn(L),dst=IDdev@IDcdn(L),SAID,Security{GroupKeyData(K_ctl),CompleteSubtree,ResponseFlag=1,TargetID=@IDctl(L),SAIDNotif,SequenceNum}」が含まれる。MIH_Net_Group_Manipulate requestメッセージを受信した機器40は、コーディネータ20に対して、MIH_Net_Group_Manipulate responseメッセージを送信する。MIH_Net_Group_Manipulate responseメッセージには、「src=IDdev(L),dst=IDdev@IDcdn(L),SAID,Security{TargetID=@IDctl(L),GroupStatus}」が含まれる。
図24の(11)に示すように、コーディネータ20は、機器40に対して、MIH_Push_Certificate requestメッセージを送信する。MIH_Push_Certificate requestメッセージには、「src=IDcdn(L),dst=IDdev@IDcdn(L),SAID,Security{Certificate(CERTctl)}」が含まれる。MIH_Push_Certificate requestメッセージを受信した機器40は、コーディネータ20に対して、MIH_Push_Certificate responseメッセージを送信する。MIH_Push_Certificate responseメッセージには、「src=IDdev(L),dst=IDcdn(L),SAID,Security{CertificateSerialNumber,CertificateStatus}」が含まれる。
図24の(7)に示すように、コーディネータ20は、コントローラ30に対して、MIH_Net_Group_Manipulate requestメッセージを送信する。MIH_Net_Group_Manipulate requestメッセージには、「src=IDcdn(L),dst=IDctl@IDcdn(L),SAID,Security{GroupKeyData(K_ctl,dev),CompleteSubtree,ResponseFlag=1,TargetAddr=IPdev,TargetID=IDdev@IDctl(L),SAIDNotif,SequenceNum}」が含まれる。MIH_Net_Group_Manipulate requestメッセージを受信したコントローラ30は、コーディネータ20に対して、MIH_Net_Group_Manipulate responseメッセージを送信する。MIH_Net_Group_Manipulate responseメッセージには、「src=IDctl(L),dst=IDctl@cdn(L),SAID,Security{TargetID=IDdev@IDctl(L),GroupStatus}」が含まれる。
図24の(8)に示すように、コーディネータ20は、コントローラ30に対して、MIH_Push_Certificate requestメッセージを送信する。MIH_Push_Certificate requestメッセージには、「src=IDcdn(L),dst=IDctl(L),SAID,Security{Certificate(CERTdev)}」が含まれる。MIH_Push_Certificate requestメッセージを受信したコントローラ30は、コーディネータ20に対して、MIH_Push_Certificate responseメッセージを送信する。MIH_Push_Certificate responseメッセージには、「src=IDclt(L),dst=IDcdn(L),SAID,Security{CertificateSerialNumber,CertificateStatus}」が含まれる。
[暗号通信の詳細シーケンス]
図25は、第1の実施形態に係る暗号通信の詳細シーケンスの例である。図25に示すように、コントローラ30又は機器40は、ユニキャスト暗号通信とマルチキャスト暗号通信において、コントローラ30又は機器40に対して、MIH_Configuration_Update indicationメッセージを送受信する。MIH_Configuration_Update indicationメッセージの送受信は、コントローラ30又は機器40(IDx)と、コントローラ30又は機器40(IDy)とにより行なわれる。
[証明書リボークの詳細シーケンス]
図26は、第1の実施形態に係る証明書リボークの詳細シーケンスの例である。図26に示すように、コーディネータ20は、コントローラ30又は機器40に対して、マルチキャスト又はユニキャストにより、MIH_Revoke_Certificate requestメッセージを送信する。これにより、コントローラ30又は機器40は、コーディネータ20に対して、MIH_Revoke_Certificate responseメッセージを送信する。
[グループ鍵更新の詳細シーケンス]
図27は、第1の実施形態に係るグループ鍵更新の詳細シーケンスの例である。図27に示すように、コーディネータ20は、コントローラ30又は機器40に対して、マルチキャスト又はユニキャストにより、MIH_Net_Group_Manipulate requestメッセージを送信する。これにより、コントローラ30又は機器40は、コーディネータ20に対して、MIH_Net_Group_Manipulate responseメッセージを送信する。
本実施形態によれば、グループ識別子の構造に、グループのセマンティックを表し、且つ、グループの存命中は値が不変である可変値のフィールドを含むパケットをグループで送受するので、セマンティックの自由度を向上させるとともに、通信を簡素化することができる。
また、上記文書中や図面中等で示した処理手順、制御手順、具体的名称、各種のデータやパラメータ等を含む情報は、特記する場合を除いて任意に変更することができる。また、図示した制御装置の各構成要素は、機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散又は統合の具体的形態は、図示のものに限られず、その全部又は一部を各種の負担や使用状況等に応じて、任意の単位で機能的又は物理的に分散又は統合することができる。
また、上記実施形態に係る通信システム10に含まれるコーディネータ20やコントローラ30、機器40は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることで実現することが可能である。実行されるプログラムは、上述してきた各機能を含むモジュール構成となっている。プログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、CD−R、DVD等のコンピュータで読み取り可能な記録媒体に記録されて提供しても、ROM等に予め組み込んで提供しても良い。
また、上述してきた実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。また、各実施形態は、内容を矛盾させない範囲で適宜組み合わせることが可能である。また、各実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。