図1は、実施例1のシステムの構成例を示す図である。
実施例1のシステムは、センタ鍵管理サーバ100、工場鍵管理サーバ110、製造ライン端末120、及び装置130から構成される。なお、工場鍵管理サーバ110、製造ライン端末120、及び装置130は、製造工場に含まれる構成である。また、拠点とセンタ鍵管理サーバ100を含むシステムは、異なるシステムを構成する。
センタ鍵管理サーバ100及び工場鍵管理サーバ110は、第1のネットワーク150を介して接続される。工場鍵管理サーバ110及び製造ライン端末120は、第2のネットワーク160を介して接続される。また、製造ライン端末120及び装置130は、第3のネットワーク170を介して接続される。
第1のネットワーク150、第2のネットワーク160、及び第3のネットワーク170は、例えば、WAN(Wide Area Network)及びLAN(Local Area Network)等が考えられる。なお、本実施例は、ネットワークの種別及び接続方式(有線又は無線)に限定されない。
本実施例では、センタ鍵管理サーバ100は、オンプレミスなものとして記載しているが、クラウドシステムを用いてセンタ鍵管理サーバ100を実現してもよい。本実施例では、工場鍵管理サーバ110及び製造ライン端末120を別々の装置として記載しているが、各計算機が有する機能を一つの計算機にまとめてもよい。
本実施例では、装置130の製造工程において、製造工場の外部に設置されたセンタ鍵管理サーバ100によって発行されたアプリケーション鍵を書き込む鍵書込工程を例に説明する。
装置130は、製造工場において生産される車載機器等の部品(モジュール)である。センタ鍵管理サーバ100は、装置130に書込む鍵を生成する。工場鍵管理サーバ110は、製造工場全体を管理する。また、工場鍵管理サーバ110は、センタ鍵管理サーバ100によって生成された鍵を受信し、製造ライン端末120を介して、装置130に当該鍵を送信する。製造ライン端末120は、工場鍵管理サーバ110及び装置130の間を中継する端末である。
図2は、実施例1のセンタ鍵管理サーバ100のハードウェア構成及びソフトウェア構成の一例を示す図である。
センタ鍵管理サーバ100は、ハードウェアとして、プロセッサ201、メモリ202、記憶装置203、ネットワークインタフェース204、及びI/Oインタフェース205を有する。各構成は、バス等を介して接続される。
プロセッサ201は、メモリ202に格納されるプログラムを実行する。プロセッサ201がプログラムにしたがって処理を実行することによって所定の機能を有するモジュールとして動作する。以下の説明では、モジュールを主語に説明する場合、プロセッサ201が当該モジュールを実現するプログラムを実行していることを示す。
メモリ202は、プロセッサ201が実行するプログラム及び当該プログラムが使用する情報を格納する。また、メモリ202は、ワークエリア等の記憶領域を含む。メモリ202に格納されるプログラムについては後述する。
記憶装置203は、データを永続的に格納する。記憶装置203は、例えば、HDD(Hard Disk Drive)及びSSD(Solid State Drive)等が考えられる。記憶装置203に格納されるデータについては後述する。
ネットワークインタフェース204は、ネットワークを介して外部の装置と通信するためのインタフェースである。本実施例では、センタ鍵管理サーバ100は、ネットワークインタフェース204を介して第1のネットワーク150に接続する。
I/Oインタフェース205は、入力装置206及び出力装置207等の外部装置と接続するためのインタフェースである。なお、入力装置206は、キーボード、マウス、及びタッチパネル等を含み、また、出力装置207は、ディスプレイ及びタッチパネル等を含む。
センタ鍵管理サーバ100のメモリ202は、制御モジュール210を実現するプログラムを格納する。
制御モジュール210は、センタ鍵管理サーバ100全体を制御する。また、制御モジュール210は、データの暗号化処理及び復号処理を実行する。なお、本実施例では、共通鍵暗号方式にしたがった暗号化処理及び復号処理が実行されるものとする。
制御モジュール210は、鍵生成モジュール211、第1の暗号化モジュール212、第1のMAC生成モジュール213、第2の復号モジュール214、第2のMAC検証モジュール215、鍵導出モジュール226、及び第2の暗号化モジュール217を含む。なお、制御モジュール210は、鍵生成モジュール211、第1の暗号化モジュール212、第1のMAC生成モジュール213、第2の復号モジュール214、第2のMAC検証モジュール215、鍵導出モジュール226、及び第2の暗号化モジュール217を一つの暗号演算モジュールとして含んでもよい。
鍵生成モジュール211は、暗号化等に使用する鍵として、ランダムなビット列を生成する。
第1の暗号化モジュール212は、共通鍵暗号方式の鍵を用いて平文を暗号化することによって暗号文を生成する。具体的には、第1の暗号化モジュール212は、式(1)に示すように、共通鍵暗号方式の鍵及び平文を変数とする第1の暗号化関数Enc1を用いて暗号文を算出する。
ここで、kは共通鍵暗号方式の鍵を表し、pは平文を表し、また、cは暗号文を表す。
第1のMAC生成モジュール213は、共通鍵暗号方式の鍵を用いてMAC生成対象データのMAC値を生成する。具体的には、第1のMAC生成モジュール213は、式(2)に示すように、共通鍵暗号方式の鍵及びMAC生成対象データを変数とする第1のMAC生成関数GenMAC1を用いてMAC値を算出する。
ここで、mはMAC生成対象データを表し、tはMAC値を表す。
第2の復号モジュール214は、共通鍵暗号方式の鍵を用いて暗号文を復号することによって平文を生成する。具体的には、第2の復号モジュール214は、式(3)に示すように、共通鍵暗号方式の鍵及び暗号文を変数とする第2の復号関数Dec2を用いて平文を算出する。
第2のMAC検証モジュール215は、共通鍵暗号方式の鍵を用いて、MAC対象データ及びMAC値の組の正当性を検証する。具体的には、第2のMAC検証モジュール215は、式(4)に示すように、共通鍵暗号方式の鍵、MAC対象データ、及びMAC値を変数とする第2のMAC検証関数VerifyMAC2を用いてMAC値の検証を行う。
ここで、vは検証結果を表す。なお、算出結果vは「0」又は「1」のいずれかとなる。「0」は失敗を示し、「1」は成功を示す。
鍵導出モジュール216は、共通鍵暗号方式のオリジナル鍵及び付加データを用いて導出鍵を生成する。具体的には、鍵導出モジュール216は、式(5)に示すように、共通鍵暗号方式の鍵のオリジナル鍵及び付加データを変数とする鍵導出関数KDFを用いて導出鍵を算出する。
ここで、kは共通鍵暗号方式の鍵のオリジナル鍵を表し、Dataは付加データを表し、また、k_derivedは導出鍵を表す。
第2の暗号化モジュール217は、共通鍵暗号方式の鍵を用いて平文を暗号化することによって暗号文を生成する。第2の暗号化モジュール217は、第1の暗号化モジュール212と同様の機能であるが、暗号化に使用する関数が異なる。なお、第2の暗号化モジュール217は後述する第2の暗号化モジュール514と同一のものであるため、第2の暗号化モジュール217が使用する関数については、装置130の構成の説明において示す。
センタ鍵管理サーバ100の記憶装置203は、装置鍵情報250及び第1の鍵管理メッセージ情報260を格納する。装置鍵情報250の詳細は図6を用いて説明する。また、第1の鍵管理メッセージ情報260の詳細は図7を用いて説明する。なお、装置鍵情報250及び第1の鍵管理メッセージ情報260は、メモリ202に格納されてもよい。
図3は、実施例1の工場鍵管理サーバ110のハードウェア構成及びソフトウェア構成の一例を示す図である。
工場鍵管理サーバ110は、ハードウェアとして、プロセッサ301、メモリ302、記憶装置303、ネットワークインタフェース304、及びI/Oインタフェース305を有する。各構成は、バス等を介して接続される。また、I/Oインタフェース305には、入力装置306及び出力装置307が接続される。
プロセッサ301、メモリ302、記憶装置303、ネットワークインタフェース304、及びI/Oインタフェース305は、プロセッサ201、メモリ202、記憶装置203、ネットワークインタフェース204、及びI/Oインタフェース205と同様のものである。また、入力装置306及び出力装置307は、入力装置206及び出力装置207と同様のものである。
工場鍵管理サーバ110のメモリ302は、制御モジュール310を実現するプログラムを格納する。
制御モジュール310は、工場鍵管理サーバ110全体を制御する。また、制御モジュール310は、アプリケーション鍵の書込処理の成否を検証するメッセージ検証モジュール311を含む。
メッセージ検証モジュール311は、二つのメッセージを比較することによって、アプリケーション鍵の書込処理が成功したか否かを判定する。具体的には、メッセージ検証モジュール311は、二つのメッセージが一致している場合、アプリケーション鍵の書込処理の成功と判定する。
工場鍵管理サーバ110の記憶装置303は、第2の鍵管理メッセージ情報350を格納する。第2の鍵管理メッセージ情報350は、第1の鍵管理メッセージ情報260と同様のデータ構造である。なお、第2の鍵管理メッセージ情報350は、メモリ302に格納されてもよい。
図4は、実施例1の製造ライン端末120のハードウェア構成及びソフトウェア構成の一例を示す図である。
製造ライン端末120は、ハードウェアとして、プロセッサ401、メモリ402、記憶装置403、ネットワークインタフェース404、及びI/Oインタフェース405を有する。各構成は、バス等を介して接続される。また、I/Oインタフェース405には、入力装置406及び出力装置407が接続される。
プロセッサ401、メモリ402、記憶装置403、ネットワークインタフェース404、及びI/Oインタフェース405は、プロセッサ201、メモリ202、記憶装置203、ネットワークインタフェース204、及びI/Oインタフェース205と同様のものである。また、入力装置406及び出力装置407は、入力装置206及び出力装置207と同様のものである。
製造ライン端末120のメモリ402は、製造ライン端末120全体を制御する制御モジュール410を実現するプログラムを格納する。
製造ライン端末120の記憶装置403は、工場鍵管理サーバ110から受信した書込用メッセージ440、及び装置130から受信した検証用メッセージ450を格納する。なお、書込用メッセージ440及び検証用メッセージ450は、メモリ402に格納されてもよい。
図5は、実施例1の装置130のハードウェア構成及びソフトウェア構成の一例を示す図である。
装置130は、ハードウェアとして、プロセッサ501、メモリ502、記憶装置503、及びネットワークインタフェース504を有する。各構成は、バス等を介して接続される。
プロセッサ501、メモリ502、記憶装置503、及びネットワークインタフェース504は、プロセッサ201、メモリ202、記憶装置203、及びネットワークインタフェース204と同様のものである。
装置130のメモリ502は、制御モジュール510を実現するプログラムを格納する。
制御モジュール510は、装置130全体を制御する。また、制御モジュール510は、データの暗号化処理及び復号処理を実行する。なお、本実施例では、共通鍵暗号方式にしたがった暗号化処理及び復号処理が実行されるものとする。
制御モジュール510は、第1の復号モジュール511、第1のMAC検証モジュール512、書込モジュール513、第2の暗号化モジュール514、第2のMAC生成モジュール515、及び鍵導出モジュール516を含む。なお、制御モジュール510は、第1の復号モジュール511、第1のMAC検証モジュール512、書込モジュール513、第2の暗号化モジュール514、第2のMAC生成モジュール515、及び鍵導出モジュール516を一つの暗号演算モジュールとして含んでもよい。
第1の復号モジュール511は、共通鍵暗号方式の鍵を用いて暗号文を復号することによって平文を生成する。具体的には、第1の復号モジュール511は、式(6)に示すように、共通鍵暗号方式の鍵及び暗号文を変数とする第1の復号関数Dec1を用いて平文を算出する。
ここで、kは共通鍵暗号方式の鍵を表し、cは暗号文を表し、また、pは平文を表す。
なお、第1の暗号化関数Enc1と第1の復号関数Dec1との間には、式(7)に示す関係が成り立つ。
第1のMAC検証モジュール512は、共通鍵暗号方式の鍵を用いて、MAC対象データ及びMAC値の組の正当性を検証する。具体的には、第1のMAC検証モジュール512は、式(8)に示すように、共通鍵暗号方式の鍵、MAC対象データ、及びMAC値を変数とする第1のMAC検証関数VerifyMAC1を用いて検証を行う。
ここで、mはMAC対象データを表し、tはMAC値を表し、また、vは検証結果を表す。なお、算出結果vは「0」又は「1」のいずれかとなる。「0」は失敗を示し、「1」は成功を示す。
式(8)は第1のMAC生成関数GenMAC1を用いて式(9)のように変形できる。
ここで、関数Compareは比較関数を表し、比較関数Compare(a,b)の値は、a及びbが一致する場合「1」となり、a及びbが一致しない場合「0」となる。
書込モジュール513は、共通鍵暗号方式の鍵及び当該鍵が書き込まれた回数(カウンタ値)を書き込む。
第2の暗号化モジュール514は、共通鍵暗号方式の鍵を用いて平文を暗号化することによって暗号文を生成する。具体的には、第2の暗号化モジュール514は、式(10)に示すように、共通鍵暗号方式の鍵及び平文を変数とする第2の暗号化関数Enc2を用いて暗号文を算出する。
なお、第2の暗号化関数Enc2と第2の復号関数Dec2との間には、式(11)に示す関係が成り立つ。
第2のMAC生成モジュール515は、共通鍵暗号方式の鍵を用いてMAC生成対象データのMAC値を生成する。具体的には、第2のMAC生成モジュール515は、式(12)に示すように、共通鍵暗号方式の鍵及びMAC生成対象データを変数とする第2のMAC生成関数GenMAC2を用いてMAC値を算出する。
なお、式(4)は第2のMAC生成関数GenMAC2を用いて式(13)のように変形できる。
鍵導出モジュール516は、共通鍵暗号方式のオリジナル鍵及び付加データを用いて導出鍵を生成する。鍵導出モジュール516は、鍵導出モジュール216と同一の鍵導出関数KDFを用いて導出鍵を生成する。
記憶装置503は、装置ID550、認証鍵560、アプリケーション鍵570、及びカウンタ値580を格納する。
装置ID550は、装置130を一意に識別するための識別情報である。装置ID550は、予め、装置130に設定される。本実施例では、センタ鍵管理サーバ100は、アプリケーション鍵の書込処理の開始前に、各装置130の装置ID550を把握しているものとする。
認証鍵560は、暗号化処理及び復号処理に用いられる鍵である。認証鍵560は、アプリケーション鍵の書込処理の開始前に、センタ鍵管理サーバ100及び装置130との間で共有される。
アプリケーション鍵570は、装置130に書き込まれたアプリケーション鍵である。なお、アプリケーション鍵は、装置130上で稼働するアプリケーションが使用する鍵である。後述するように、センタ鍵管理サーバ100によって、アプリケーション鍵が装置130に書き込まれる。なお、アプリケーション鍵の書き込み時に、古いアプリケーション鍵570が存在する場合、書込モジュール513は、古いアプリケーション鍵570を新しいアプリケーション鍵570に更新する。
カウンタ値580は、装置130にアプリケーション鍵570が書き込まれた回数である。アプリケーション鍵の書込処理の開始前、センタ鍵管理サーバ100及び装置130が保持するカウンタ値は同一の値である。
図6は、実施例1の装置鍵情報250の一例を示す図である。
装置鍵情報250は、装置ID601、認証鍵602、アプリケーション鍵603、アプリケーション鍵カウンタ604、及び状態605から構成されるレコードを含む。一つのレコードが一つの装置130に対応する。
装置ID601及び認証鍵602は、センタ鍵管理サーバ100及び装置130が共有する装置ID及び認証鍵を格納するカラムである。
アプリケーション鍵603は、装置130に書き込むアプリケーション鍵を格納するカラムである。
アプリケーション鍵カウンタ604は、アプリケーション鍵の書き込み回数(カウンタ値)を格納するカラムである。
状態605は、アプリケーション鍵の書込処理の状態を格納するカラムである。状態605には、「生成済み」、「書込済み」、及び「エラー」のいずれかが格納される。
「生成済み」は、センタ鍵管理サーバ100によって生成されたアプリケーション鍵の書込処理の成否について検証されていない状態を示す。「書込済み」は、アプリケーション鍵の書込処理の成否の検証結果が成功であることを示す。「エラー」は、アプリケーション鍵の書込処理の成否の検証結果が失敗であることを示す。
図7は、実施例1の第1の鍵管理メッセージ情報260の一例を示す図である。
第1の鍵管理メッセージ情報260は、装置ID701、書込用メッセージ702、事前検証用メッセージ703、検証用メッセージ704、及び検証結果705から構成されるレコードを含む。一つのレコードが一つの装置130に対応する。
なお、第2の鍵管理メッセージ情報350のデータ構造は、第1の鍵管理メッセージ情報260と同一である。ただし、第1の鍵管理メッセージ情報260はセンタ鍵管理サーバ100によって管理され、第2の鍵管理メッセージ情報350は工場鍵管理サーバ110によって管理されるため、アプリケーション鍵の書込処理の実行中は、各情報は非同期で更新される。
装置ID701は、装置ID601と同一のものである。
書込用メッセージ702は、アプリケーション鍵の書込処理に用いられる書込用メッセージを格納するカラムである。
事前検証用メッセージ703は、工場鍵管理サーバ110がアプリケーション鍵の書込処理の成否を検証するための事前検証用メッセージを格納するカラムである。後述するように、事前検証用メッセージは、センタ鍵管理サーバ100によって生成される。
検証用メッセージ704は、センタ鍵管理サーバ100がアプリケーション鍵の書込処理の成否を検証するための検証用メッセージを格納するカラムである。検証用メッセージ704は、装置130によって生成される。
検証結果705は、アプリケーション鍵の書込処理の成否の検証結果を格納するカラムである。なお、第1の鍵管理メッセージ情報260の検証結果705には、センタ鍵管理サーバ100が行った検証の結果が格納され、第2の鍵管理メッセージ情報350の検証結果705には、工場鍵管理サーバ110が行った検証の結果が格納される。
ここで、本実施例において用いられる、書込用メッセージ、事前検証用メッセージ、及び検証用メッセージのフォーマットについて説明する。以下の説明では、書込用メッセージを表す記号を「M」、検証用メッセージを表す記号を「M’」、事前検証用メッセージを表す記号を「M’_pre」と定義する。
まず、書込用メッセージのフォーマットについて説明する。
書込用メッセージは、式(14)に示すように、ID部、暗号文部、及びMAC部の三つの部分から構成される。
ここで、M_IDはID部を表し、M_encは暗号文部を表し、M_macはMAC部を表す。また、記号「||」は、データの結合を示す記号である。
ID部は、式(15)に示すように、装置ID及び付加IDから生成される。
ここで、ID_modは装置IDを表し、ID_additiona1は付加IDを表す。
認証鍵又はアプリケーション鍵が複数存在する場合、付加IDには、各鍵を一意に識別するための情報を含める。付加IDは、例えば、式(16)のように与えられる。
ここで、ID_AuthKeyは認証鍵を特定するIDを表し、ID_AppKeyはアプリケーション鍵を特定するIDを表す。
暗号文部は、式(17)に示すように、暗号化に用いる鍵、並びに、カウンタ値及びアプリケーション鍵を結合した値を変数とする第1の暗号化関数Enc1を用いて生成される。なお、暗号化に用いる鍵は、式(18)に示すように、認証鍵及び第1の固定値を変数とする鍵導出関数KDFを用いて算出される。
ここで、CNT_appはカウンタ値を表し、k_appはアプリケーション鍵を表し、k_authは認証鍵を表し、また、Const_1は第1の固定値を表す。
MAC部(MAC値)は、式(19)に示すように、MAC値を算出するための鍵、並びに、ID部及び暗号文部を結合した値を変数とする第1のMAC生成関数GenMAC1を用いて生成される。なお、MAC値を算出するための鍵は、式(20)に示すように、認証鍵及び第2の固定値を変数とする鍵導出関数KDFを用いて算出される。
ここで、Const_2は第2の固定値を表す。
次に、事前検証用メッセージ及び検証用メッセージのフォーマットについて説明する。
検証用メッセージは、式(21)に示すように、ID部、暗号文部、及びMAC部の三つの部分から構成される。
ここで、M’_IDはID部を表し、M’_encは暗号文部を表し、M’_macはMAC部を表す。
事前検証用メッセージは、検証用メッセージの暗号文部である。すなわち、式(22)に示すような関係となる。
ID部は、式(23)に示すように、装置ID及び付加IDから生成される。
ここで、ID_modは装置ID550を表し、ID_additionalは付加IDを表す。検証用メッセージのID部は、書込用メッセージのID部と同一の値となる。
暗号文部は、式(24)に示すように、暗号化に用いる鍵及びカウンタ値を変数とする第2の暗号化関数Enc2から生成される。なお、暗号化に用いる鍵は、式(25)に示すように、アプリケーション鍵及び第3の固定値を変数とする鍵導出関数KDFを用いて算出される。
ここで、CNT_appはカウンタ値を表し、k_appはアプリケーション鍵を表し、Const_3は第3の固定値を表す。
MAC部(MAC値)は、式(26)に示すように、MAC値を算出するための鍵、並びに、ID部及び暗号文部を結合した値を変数とする第2のMAC生成関数GenMAC2を用いて算出される。なお、MAC値を算出するための鍵は、式(27)に示すように、アプリケーション鍵及び第4の固定値を変数とする鍵導出関数KDFを用いて算出される。
ここで、Const_4は第4の固定値を表す。
以上が書込用メッセージ、事前検証用メッセージ、及び検証用メッセージのフォーマットの説明である。
次に、鍵書込工程に処理について説明する。
図8は、実施例1の鍵書込工程の概要を説明するフローチャートである。
鍵書込工程では、システムは、まず、鍵生成/鍵配信フェーズに移行する(ステップS801)。当該フェーズでは、以下のような処理が実行される。
センタ鍵管理サーバ100の管理者等が、センタ鍵管理サーバ100にアプリケーション鍵を発行する装置130の装置IDを登録する。センタ鍵管理サーバ100は、登録された装置IDの数だけ、書込用メッセージ及び事前検証用メッセージを生成する。すなわち、一つの装置IDに対して書込用メッセージ及び事前検証用メッセージの組が一つ生成される。センタ鍵管理サーバ100は、書込用メッセージ及び事前検証用メッセージを工場鍵管理サーバ110に送信する。
次に、システムは、鍵書込フェーズに移行する(ステップS802)。当該フェーズでは、以下のような処理が実行される。
工場鍵管理サーバ110は、受信した書込用メッセージを製造ライン端末120に送信する。製造ライン端末120は、アプリケーション鍵を装置130に書き込むために、受信した書込用メッセージを対象の装置130に送信する。装置130は、アプリケーション鍵の書込処理を実行した後、製造ライン端末120を介して検証用メッセージを工場鍵管理サーバ110に送信する。工場鍵管理サーバ110は、検証用メッセージの暗号文部及び事前検証用メッセージを比較することによって、アプリケーション鍵の書込処理の成否を検証する。
次に、システムは、センタ登録フェーズに移行する(ステップS803)。当該フェーズでは、以下のような処理が実行される。
工場鍵管理サーバ110は、センタ鍵管理サーバ100に検証用メッセージを送信する。センタ鍵管理サーバ100は、検証用メッセージを用いてアプリケーション鍵の書込処理の成否を検証する。また、センタ鍵管理サーバ100は、検証結果に基づいて装置鍵情報250を更新する。
本実施例の鍵書込工程では、製造ラインが稼働するのは鍵書込フェーズのみである。鍵書込フェーズにおいて、工場鍵管理サーバ110は、センタ鍵管理サーバ100と通信を行うことなく、アプリケーション鍵の書込処理の成否を検証することができる。また、アプリケーション鍵の書込処理の成否の検証において、書込用メッセージに含まれるアプリケーション鍵は暗号化されており、センタ鍵管理サーバ100及び装置130のみが復号できる。すなわち、工場鍵管理サーバ110及び製造ライン端末120にアプリケーション鍵を秘匿したまま、装置130へアプリケーション鍵を書き込むことができる。
図9A及び図9Bは、実施例1の鍵書込工程における処理の流れを説明するシーケンス図である。
ステップS901からステップS904までの処理は、鍵生成/鍵配信フェーズにおいて実行される処理である。
まず、センタ鍵管理サーバ100は、N個の装置130に対するアプリケーション鍵の発行要求を受け付ける(ステップS901)。当該発行要求は、例えば、管理者が入力装置206を操作することによって入力される。なお、当該発行要求には、対象となる装置130の装置IDが含まれる。
センタ鍵管理サーバ100は、メッセージ生成処理を実行する(ステップS902)。メッセージ生成処理では、各装置130の書込用メッセージ及び事前検証用メッセージが生成される。なお、メッセージ生成処理の詳細は図10を用いて説明する。
センタ鍵管理サーバ100は、工場鍵管理サーバ110に、各装置130の装置ID、書込用メッセージ、及び事前検証用メッセージを送信する(ステップS903)。
工場鍵管理サーバ110は、センタ鍵管理サーバ100からメッセージを受信した場合、第2の鍵管理メッセージ情報350を更新する(ステップS904)。
具体的には、制御モジュール310は、第2の鍵管理メッセージ情報350にレコードを追加し、追加されたレコードの装置ID701、書込用メッセージ702、及び事前検証用メッセージ703に、受信した装置ID、書込用メッセージ、及び事前検証用メッセージを設定する。すでに、受信した装置IDに対応するレコードが存在する場合、制御モジュール310は、当該レコードの装置ID701、書込用メッセージ702、及び事前検証用メッセージ703に、受信した装置ID、書込用メッセージ、及び事前検証用メッセージを上書きする。
ステップS911からステップS923までの処理は、鍵書込フェーズにおいて実行される処理である。
製造ライン端末120は、所定のタイミングで、工場鍵管理サーバ110に、メッセージ要求を送信する(ステップS911)。当該メッセージ要求には、アプリケーション鍵を書き込む装置130の装置IDが含まれる。
工場鍵管理サーバ110は、メッセージ要求を受信した場合、第2の鍵管理メッセージ情報350から対象の装置130の書込用メッセージを取得し、製造ライン端末120を介して装置130に、当該書込用メッセージを送信する(ステップS912)。具体的には、以下のような処理が実行される。
制御モジュール310が、第2の鍵管理メッセージ情報350を参照し、装置ID701がメッセージ要求に含まれる装置IDと一致するレコードを検索する。制御モジュール310は、装置IDとともに、検索されたレコードの書込用メッセージ702に設定された書込用メッセージを製造ライン端末120に送信する。
製造ライン端末120は、書込用メッセージを受信した場合、当該書込用メッセージともに受信した装置IDに対応する装置130に、書込用メッセージを送信する。以上が、ステップS912の処理の説明である。
装置130は、製造ライン端末120を介して、工場鍵管理サーバ110から書込用メッセージを受信した場合、アプリケーション鍵の書込処理を実行する(ステップS913)。アプリケーション鍵の書込処理では、書込用メッセージの検証及びアプリケーション鍵の書込が行われる。アプリケーション鍵の書込処理の詳細は図11を用いて説明する。
アプリケーション鍵の書込処理が失敗した場合、すなわち、装置130にアプリケーション鍵が書き込まれなかった場合、装置130は、製造ライン端末120を介して工場鍵管理サーバ110に、エラー通知を送信する(ステップS914)。
製造ライン端末120は、エラー通知を受信した場合、不具合工程に移行し(ステップS915)、また、第2の鍵管理メッセージ情報350を更新する(ステップS916)。
具体的には、制御モジュール310は、第2の鍵管理メッセージ情報350を参照し、装置ID701が、エラー通知を送信した装置130の装置IDに一致するレコードを検索する。制御モジュール310は、検索されたレコードの検証結果705に「書込用メッセージエラー」を設定する。
アプリケーション鍵の書込処理が成功した場合、すなわち、装置130にアプリケーション鍵が書き込まれた場合、装置130は、検証用メッセージ生成処理を実行する(ステップS917)。また、装置130は、製造ライン端末120を介して工場鍵管理サーバ110に、検証用メッセージを送信する(ステップS918)。検証用メッセージ生成処理の詳細は図12を用いて説明する。
工場鍵管理サーバ110は、検証用メッセージを受信した場合、アプリケーション鍵の書込処理の検証処理を実行する(ステップS919)。アプリケーション鍵の書込処理の検証処理の詳細は図13を用いて説明する。
検証結果が失敗である場合、工場鍵管理サーバ110は、失敗を通知する検証結果を製造ライン端末120に送信する(ステップS920)。製造ライン端末120は、当該検証結果を受信した場合、アプリケーション鍵の書込処理が失敗した装置130を不具合工程へ移行させる(ステップS921)。
検証結果が成功である場合、工場鍵管理サーバ110は、成功を通知する検証結果を製造ライン端末120に送信する(ステップS922)。製造ライン端末120は、当該検証結果を受信した場合、装置130を次に工程に移行させる(ステップS923)。
ステップS924からステップS926までの処理は、センタ登録フェーズにおいて実行される処理である。
工場鍵管理サーバ110は、センタ鍵管理サーバ100に、受信した全ての検証用メッセージを送信する(ステップS924)。
具体的には、工場鍵管理サーバ110は、第2の鍵管理メッセージ情報350から、検証結果705が「成功」であるレコードの装置ID701及び検証用メッセージ704をセンタ鍵管理サーバ100に送信する。このとき、工場鍵管理サーバ110は、検証結果705が「書込用メッセージエラー」又は「失敗」であるレコードの装置ID701等をセンタ鍵管理サーバ100に送信してもよい。なお、当該レコードの通知は、別のタイミングで行ってもよい。
センタ鍵管理サーバ100は、検証用メッセージを受信した場合、第1の鍵管理メッセージ情報260を更新する(ステップS925)。
具体的には、制御モジュール210は、第1の鍵管理メッセージ情報260を参照し、装置ID701が検証用メッセージとともに受信した装置IDに一致するレコードを検索する。制御モジュール210は、検索されたエントリの検証用メッセージ704に受信した検証用メッセージを設定する。
なお、制御モジュール210は、検証結果705が「書込用メッセージエラー」又は「失敗」であるレコードの通知を受信した場合、対応するレコードの検証結果705に「書込用メッセージエラー」又は「失敗」を設定する。
センタ鍵管理サーバ100は、アプリケーション鍵の書込処理の検証処理を実行する(ステップS926)。アプリケーション鍵の書込処理の検証処理の詳細は図14を用いて説明する。
図10は、実施例1のセンタ鍵管理サーバ100が実行するメッセージ生成処理の一例を説明するフローチャートである。
制御モジュール210は、アプリケーション鍵の発行要求に含まれる装置IDの中からターゲット装置IDを選択する(ステップS1001)。
次に、制御モジュール210は、装置鍵情報250を参照し、装置ID601がターゲット装置IDに一致するレコードを検索する(ステップS1002)。
制御モジュール210は、ターゲット装置IDに対応する装置130のアプリケーション鍵を生成する(ステップS1003)。
具体的には、制御モジュール210が、鍵生成モジュール211を呼び出し、アプリケーション鍵の生成を指示する。鍵生成モジュール211は、アプリケーション鍵を生成する。
次に、制御モジュール210は、装置鍵情報250から検索されレコードを更新する(ステップS1004)。
具体的には、制御モジュール210は、検索されたレコードのアプリケーション鍵603に生成されたアプリケーション鍵を設定し、また、当該レコードのアプリケーション鍵カウンタ604の値に「1」を加算する。
次に、制御モジュール210は、書込用メッセージを生成する(ステップS1005)。具体的には、以下のような処理が実行される。
制御モジュール210は、式(15)に示すように、付加ID及び検索されたレコードの装置ID601の値を結合することによって、書込用メッセージのID部を算出する。
制御モジュール210は、鍵導出モジュール216を呼び出し、暗号化に使用する鍵の生成を指示する。鍵導出モジュール216は、第1の固定値及び検索されたレコードの認証鍵602の値を代入した式(18)にしたがって、暗号化に使用する鍵を算出する。制御モジュール210は、第1の暗号化モジュール212を呼び出し、書込用メッセージの暗号文部の生成を指示する。第1の暗号化モジュール212は、暗号化に使用する鍵、並びに、検索されたレコードのアプリケーション鍵603及びアプリケーション鍵カウンタ604を結合した値を代入した式(17)にしたがって、書込用メッセージの暗号文部を算出する。
制御モジュール210は、鍵導出モジュール216を呼び出し、暗号化に使用する鍵の生成を指示する。鍵導出モジュール216は、第2の固定値及び特定されたレコードの認証鍵602の値を代入した式(20)にしたがって、暗号化に使用する鍵を算出する。制御モジュール210は、第1のMAC生成モジュール213を呼び出し、書込用メッセージのMAC部の生成を指示する。第1のMAC生成モジュール213は、暗号化に使用する鍵、並びに、ID部及び暗号文部を結合した値を代入した式(19)にしたがって、MAC部を算出する。
制御モジュール210は、式(14)に示すように、ID部、暗号文部、及びMAC部を結合することによって、書込用メッセージを生成する。以上がステップS1005の処理の説明である。
次に、制御モジュール210は、事前検証用メッセージを生成する(ステップS1006)。具体的には、以下のような処理が実行される。
制御モジュール210は、鍵導出モジュール216を呼び出し、暗号化に使用する鍵の生成を指示する。鍵導出モジュール216は、第3の固定値及び検索されたレコードのアプリケーション鍵603の値を代入した式(25)にしたがって、暗号化に使用する鍵を算出する。制御モジュール210は、第2の暗号化モジュール217を呼び出し、事前検証用メッセージの生成を指示する。第2の暗号化モジュール217は、暗号化に使用する鍵、及び、検索されたレコードのアプリケーション鍵カウンタ604の値を代入した式(24)にしたがって、事前検証用メッセージを算出する。
次に、制御モジュール210は、第1の鍵管理メッセージ情報260を更新する(ステップS1007)。具体的には、以下のような処理が実行される。
制御モジュール210は、第1の鍵管理メッセージ情報260を参照し、装置ID701が、ターゲット装置IDと一致するレコードを検索する。
レコードが存在しない場合、制御モジュール210は、第1の鍵管理メッセージ情報260にレコードを追加し、追加されたレコードの装置ID701に、ターゲット装置IDを設定する。また、制御モジュール210は、追加されたレコードの書込用メッセージ702及び事前検証用メッセージ703に、生成された書込用メッセージ及び事前検証用メッセージを設定する。
レコードが存在する場合、制御モジュール210は、検索されたレコードの書込用メッセージ702及び事前検証用メッセージ703に、生成された書込用メッセージ及び事前検証用メッセージを設定する。以上がステップS1007の処理の説明である。
次に、制御モジュール210は、装置鍵情報250を更新する(ステップS1008)。
具体的には、制御モジュール210は、ターゲット装置IDに対応するレコードの状態605に「生成済み」を設定する。
次に、制御モジュール210は、アプリケーション鍵の発行要求に含まれる全ての装置IDについて処理が完了した否かを判定する(ステップS1009)。
ステップS1009の判定結果がNOである場合、制御モジュール210は、ステップS1001に戻り、同様の処理を実行する。
ステップS1009の判定結果がYESである場合、制御モジュール210は、メッセージ生成処理を終了する。
図11は、実施例1の装置130が実行するアプリケーション鍵の書込処理の一例を説明するフローチャートである。
制御モジュール510は、書込用メッセージのID部の検証結果が成功か否かを判定する(ステップS1101)。
具体的には、制御モジュール510は、書込用メッセージのID部及び装置ID550を比較し、式(15)の関係を満たすか否かを判定する。式(15)の関係を満たす場合、制御モジュール510は、書込用メッセージのID部の検証結果が成功であると判定する。
書込用メッセージのID部の検証結果が失敗であると判定された場合、制御モジュール510は、ステップS1106に進む。
書込用メッセージのID部の検証結果が成功であると判定された場合、制御モジュール510は、書込用メッセージからアプリケーション鍵及びカウンタ値を取得する(ステップS1102)。具体的には、以下のような処理が実行される。
制御モジュール510は、鍵導出モジュール516を呼び出して、導出鍵の生成を指示する。鍵導出モジュール516は、認証鍵560を代入した式(18)にしたがって、導出鍵を算出する。
制御モジュール510は、第1の復号モジュール511を呼び出して、書込用メッセージの暗号文部の復号を指示する。第1の復号モジュール511は、導出鍵及び書込用メッセージの暗号文部を代入した式(6)にしたがって、暗号文部を復号する。これによって、制御モジュール510は、アプリケーション鍵及びカウンタ値を取得できる。以上がステップS1102の処理の説明である。
次に、制御モジュール510は、カウンタ値の検証結果が成功であるか否かを判定する(ステップS1103)。
具体的には、制御モジュール510は、書込用メッセージから取得したカウンタ値が、記憶装置503に格納されるカウンタ値580より大きいか否かを判定する。書込用メッセージから取得したカウンタ値が、カウンタ値580より大きい場合、制御モジュール510は、カウンタ値の検証結果が成功であると判定する。
カウンタ値の検証結果が失敗であると判定された場合、制御モジュール510は、ステップS1106に進む。
カウンタ値の検証結果が成功であると判定された場合、制御モジュール510は、書込用メッセージのMAC部の検証結果が成功か否かを判定する(ステップS1104)。具体的には、以下のような処理が実行される。
制御モジュール510は、鍵導出モジュール516を呼び出して、MAC値を算出するための鍵の生成を指示する。鍵導出モジュール516は、認証鍵560及び第2の固定値を代入した式(20)にしたがって、MAC値を算出するための鍵を算出する。
制御モジュール510は、第1のMAC検証モジュール512を呼び出し、書込用メッセージのMAC部の検証を指示する。第1のMAC検証モジュール512は、MAC値を算出するための鍵、MAC生成対象データ、及び書込用メッセージのMAC部を代入した式(8)及び式(9)にしたがって、書込用メッセージのMAC部の検証を行う。以上がステップS1104の処理の説明である。
書込用メッセージのMAC部の検証結果が失敗であると判定された場合、制御モジュール510は、ステップS1106に進む。
書込用メッセージのMAC部の検証結果が成功であると判定された場合、制御モジュール510は、書込用メッセージから取得されたアプリケーション鍵及びカウンタ値を記憶装置503に保存する(ステップS1105)。その後、制御モジュール510は、アプリケーション鍵の書込処理を終了する。
具体的には、制御モジュール510は、書込モジュール513を呼び出し、記憶装置503へのアプリケーション鍵及びカウンタ値の書込を指示する。書込モジュール513は、記憶装置503にアプリケーション鍵及びカウンタ値を書き込む。なお、既にアプリケーション鍵570及びカウンタ値580が存在する場合、書込モジュール513は、各値を上書きする。
ステップS1101、ステップS1103、及びステップS1104の判定結果がNOである場合、制御モジュール510は、製造ライン端末120にエラー通知を送信する(ステップS1106)。その後、制御モジュール510は、アプリケーション鍵の書込処理を終了する。
図12は、実施例1の装置130が実行する検証用メッセージ生成処理の一例を説明するフローチャートである。
制御モジュール510は、検証用メッセージのID部を生成する(ステップS1201)。
具体的には、制御モジュール510は、式(23)に示すように、付加ID及び装置ID550を結合することによって、検証用メッセージのID部を算出する。
制御モジュール510は、検証用メッセージの暗号文部を生成する(ステップS1202)。具体的には、以下のような処理が実行される。
制御モジュール510は、鍵導出モジュール516を呼び出し、暗号化に使用する鍵の生成を指示する。鍵導出モジュール516は、第3の固定値及びアプリケーション鍵570を代入した式(25)にしたがって、暗号化に使用する鍵を算出する。
制御モジュール210は、第2の暗号化モジュール514を呼び出し、書込用メッセージの暗号文部の生成を指示する。第2の暗号化モジュール514は、暗号化に使用する鍵、及びカウンタ値580を代入した式(24)にしたがって、検証用メッセージの暗号文部を算出する。
制御モジュール510は、検証用メッセージのMAC部を生成する(ステップS1203)。具体的には、以下のような処理が実行される。
制御モジュール510は、鍵導出モジュール516を呼び出し、MAC値を算出するための鍵の生成を指示する。鍵導出モジュール516は、第4の固定値及びアプリケーション鍵570を代入した式(27)にしたがって、MAC値を算出するための鍵を算出する。
制御モジュール510は、第2のMAC生成モジュール515を呼び出し、検証用メッセージのMAC部の生成を指示する。第2のMAC生成モジュール515は、MAC値を算出するための鍵、並びに、ID部及び暗号文部を結合した値を代入した式(26)にしたがって、MAC部を算出する。
制御モジュール510は、検証用メッセージを生成する(ステップS1204)。
具体的には、制御モジュール510は、式(21)に示すように、ID部、暗号文部、及びMAC部を結合することによって、検証用メッセージを生成する。
図13は、実施例1の工場鍵管理サーバ110が実行するアプリケーション鍵の書込処理の検証処理の一例を説明するフローチャートである。
制御モジュール310は、検証用メッセージを受信した場合、第2の鍵管理メッセージ情報350を参照し、検証用メッセージを送信した装置130に対応するレコードを検索する(ステップS1301)。このとき、制御モジュール310は、検索されたレコードの検証用メッセージ704に受信した検証用メッセージを設定する。
制御モジュール310は、検証用メッセージの検証結果が成功であるか否かを判定する(ステップS1302)。具体的には、以下のような処理が実行される。
制御モジュール310は、メッセージ検証モジュール311を呼び出して、検証用メッセージの検証を指示する。
メッセージ検証モジュール311は、検証用メッセージの暗号文部を取得する。また、メッセージ検証モジュール311は、特定されたレコードの事前検証用メッセージ703に設定された事前検証用メッセージを取得する。メッセージ検証モジュール311は、検証用メッセージの暗号文部及び事前検証用メッセージが一致するか否かを判定する。検証用メッセージの暗号文部及び事前検証用メッセージが一致する場合、メッセージ検証モジュール311は、検証用メッセージの検証結果として成功を出力する。以上が、ステップS1302に処理の説明である。
検証用メッセージの検証結果が成功であると判定された場合、制御モジュール310は、レコードを更新し(ステップS1303)、また、成功を通知する検証結果を送信する(ステップS1304)。その後、制御モジュール310は、アプリケーション鍵の書込処理の検証処理を終了する。
具体的には、制御モジュール310は、検索されたレコードの検証結果705に「成功」を設定する。
検証用メッセージの検証結果が失敗であると判定された場合、制御モジュール310は、レコードを更新し(ステップS1305)、また、失敗を通知する検証結果を送信する(ステップS1306)。その後、制御モジュール310は、アプリケーション鍵の書込処理の検証処理を終了する。
具体的には、制御モジュール310は、レコードの検証結果705に「失敗」を設定する。
ステップS1302の検証方法は一例であって、以下のような検証方法も考えられる。
事前検証用メッセージと検証用メッセージの暗号文部との相違が1ビットである場合、制御モジュール310は、検証結果を出力せずに、再度、センタ鍵管理サーバ100にメッセージの再送要求を送信する。すなわち、事前検証用メッセージ及び検証用メッセージが再度生成される。
暗号化において、平文(鍵及びメッセージ)が1ビットでも異なる場合、当該相違は暗号化されたデータの全てビットに反映されるという性質がある。そのため、平文の相違に起因して、事前検証用メッセージ及び検証用メッセージの1ビットのみが異なる可能性は考えにくい。この場合、いずれかのメッセージに伝送エラーに伴うビット反転エラーが発生している可能性が高く、かつ、鍵の書込処理は成功している可能性が高い。そのため、制御モジュール310は、事前検証用メッセージと検証用メッセージの暗号文部との相違が1ビットである場合、センタ鍵管理サーバ100にメッセージの再送要求を送信する。センタ鍵管理サーバ100は、当該要求を受信した場合、ステップS902及びステップS903の処理を実行し、また、工場鍵管理サーバ110は、受信した書込用メッセージを装置130に送信する。
一方、事前検証用メッセージと検証用メッセージの暗号文部との相違が2ビット以上である場合、制御モジュール310は、ステップS1305に進む。
図14は、実施例1のセンタ鍵管理サーバ100が実行する検証処理の一例を説明するフローチャートである。
制御モジュール210は、検証用メッセージを受信した場合、第1の鍵管理メッセージ情報260を更新する(ステップS1401)。
具体的には、制御モジュール210は、装置ID601が検証用メッセージとともに受信した装置IDに一致するレコードを検索し、当該レコードの検証用メッセージ704に、受信した検証用メッセージを格納する。
次に、制御モジュール210は、検証用メッセージを受信した装置130の中から、ターゲット装置130を選択する(ステップS1402)。
具体的には、制御モジュール210は、検証用メッセージ704に検証用メッセージが格納されるレコードの中からターゲットレコードを選択する。
次に、制御モジュール210は、検証用メッセージのID部の検証結果が成功であるか否かを判定する(ステップS1403)。
具体的には、制御モジュール210は、検証用メッセージのID部及びターゲットレコードの装置ID701を比較し、式(23)の関係を満たすか否かを判定する。式(23)の関係を満たす場合、制御モジュール210は、検証用メッセージのID部の検証結果が成功であると判定する。
検証用メッセージのID部の検証結果が失敗であると判定された場合、制御モジュール210は、ステップS1409に進む。
検証用メッセージのID部の検証結果が成功であると判定された場合、制御モジュール210は、検証用メッセージからカウンタ値を取得する(ステップS1404)。具体的には、以下のような処理が実行される。
制御モジュール210は、装置鍵情報250を参照し、装置ID601がターゲットレコードの装置ID701に一致するレコードを検索し、検索されたレコードのアプリケーション鍵603に設定されたアプリケーション鍵を取得する。
制御モジュール210は、鍵導出モジュール216を呼び出し、暗号化に使用する鍵の生成を指示する。鍵導出モジュール216は、アプリケーション鍵を代入した式(25)にしたがって、暗号化に使用する鍵を算出する。
制御モジュール210は、第2の復号モジュール214を呼び出し、検証用メッセージの暗号文部の復号を指示する。第2の復号モジュール214は、暗号化に使用する鍵及び検証用メッセージの暗号文部を代入した式(3)にしたがって検証用メッセージの暗号文部を復号し、平文からカウンタ値を取得する。以上がステップS1404の処理の説明である。
次に、制御モジュール210は、カウンタ値の検証結果が成功であるか否かを判定する(ステップS1405)。具体的には、以下のような処理が実行される。
制御モジュール210は、装置鍵情報250を参照し、装置ID601がターゲットレコードの装置ID701に一致するレコードを検索し、検索されたレコードのアプリケーション鍵カウンタ604の値を取得する。
制御モジュール210は、検証用メッセージから取得したカウンタ値がアプリケーション鍵カウンタ604の値と一致するか否かを判定する。検証用メッセージから取得したカウンタ値がアプリケーション鍵カウンタ604の値と一致する場合、制御モジュール210は、カウンタ値の検証結果が成功であると判定する。以上がステップS1405の処理の説明である。
カウンタ値の検証結果が失敗であると判定された場合、制御モジュール210は、ステップS1409に進む。
カウンタ値の検証結果が成功であると判定された場合、制御モジュール210は、検証用メッセージのMAC部の検証結果が成功であるか否かを判定する(ステップS1406)。具体的には、以下のような処理が実行される。
制御モジュール210は、鍵導出モジュール216を呼び出して、MAC値を算出するための鍵の生成を指示する。鍵導出モジュール216は、ステップS1405において取得したアプリケーション鍵及び第2の固定値を代入した式(27)にしたがって、MAC値を算出するための鍵を算出する。
制御モジュール510は、第2のMAC検証モジュール215を呼び出し、検証用メッセージのMAC部の検証を指示する。第2のMAC検証モジュール215は、MAC値を算出するための鍵、MAC生成対象データ、及び検証用メッセージのMAC部を代入した式(4)及び式(13)にしたがって、検証用メッセージのMAC部の検証を行う。以上がステップS1406の処理の説明である。
検証用メッセージのMAC部の検証結果が失敗であると判定された場合、制御モジュール210は、ステップS1409に進む。
検証用メッセージのMAC部の検証結果が成功であると判定された場合、制御モジュール210は、装置鍵情報250及び第1の鍵管理メッセージ情報260を更新する(ステップS1407)。その後、制御モジュール210は、ステップS1408に進む。
具体的には、制御モジュール210は、装置鍵情報250を参照し、ターゲット装置130に対応するレコードの状態605に「書込済み」を設定する。また、制御モジュール210は、第1の鍵管理メッセージ情報260を参照し、ターゲット装置130に対応するレコードの検証結果705に「成功」を設定する。
ステップS1403、ステップS1405、及びステップS1406の判定結果がNOである場合、制御モジュール210は、装置鍵情報250及び第1の鍵管理メッセージ情報260を更新する(ステップS1409)。その後、制御モジュール210は、ステップS1408に進む。
具体的には、制御モジュール210は、装置鍵情報250を参照し、ターゲット装置130に対応するレコードの状態605に「エラー」を設定する。また、制御モジュール210は、第1の鍵管理メッセージ情報260を参照し、ターゲット装置130に対応するレコードの検証結果705に「失敗」を設定する。
ステップS1407又はステップS1409の処理が完了した後、制御モジュール210は、選択可能な全ての装置130について処理が完了したか否かを判定する(ステップS1408)。
具体的には、制御モジュール210は、検証用メッセージ704に検証用メッセージが格納される全てのレコードの検証結果705に検証結果が格納されているか否かを判定する。
選択可能な全ての装置130について処理が完了していないと判定された場合、制御モジュール210は、ステップS1402に戻り、同様の処理を実行する。
選択可能な全ての装置130について処理が完了したと判定された場合、制御モジュール210は、アプリケーション鍵の書込処理の検証処理を終了する。
本実施例では、装置130の製造工場を例に説明したが、本実施例の適用先はこれに限定されない。例えば、自動車のディーラーや出荷港であってもよい。この場合、工場鍵管理サーバ110の代わりにディーラー又は港の鍵管理サーバが用いられ、製造ライン端末120の代わりに自動車の保守用ツールが用いられる。なお、各機器の構成と機能は、それぞれ図3及び図4で説明したものと同様の構成である。
本実施例の装置130の一例として、Secure Hardware Extension(SHE)に対応した装置が考えられる。
SHEに対応した装置130の場合、書込用メッセージは、SHEのMemory Update ProtocolのメッセージM1、M2、M3を結合したものに相当する。なお、書込用メッセージのID部はM1に、暗号文部はM2に、MAC部はM3に対応する。さらに、SHEのMemory Update ProtocolのM4、M5を結合したものが、検証用メッセージに相当する。なお、検証用メッセージのID部と暗号文部を結合したものがM4に対応し、MAC部がM5に対応する。また、事前検証用メッセージはSHEのMemory Update ProtocolのM4*(M4の暗号文部)に相当する。また、認証鍵は、例えば、SHEのMASTER_ECU_KEYが考えられ、アプリケーション鍵は、例えば、SHEのKEY<1>が考えられる。
従来技術では、装置は、装置へのアプリケーション鍵の書込処理の成否を検証するために、ID部、暗号文部、及びMAC部から構成される検証用メッセージを生成する。検証用メッセージの暗号文部は、式(24)に示すようにアプリケーション鍵から生成された鍵を用いてカウンタ値を暗号化することによって生成され、また、MAC部は、式(26)に示すようにアプリケーション鍵から生成された別の鍵、装置ID部、及び暗号文部から生成される。そのため、暗号文部及びMAC値は、アプリケーション鍵及びカウンタ値を知らないと復号できない。
従来の鍵書込工程における鍵の書込処理の成否の検証処理では、暗号文部及びMAC値の検証を行う必要があるが、工場鍵管理サーバは、アプリケーション鍵及びカウンタ値を知らない。そのため、センタ鍵管理サーバに問い合わせを行う必要があった。
本実施例では、アプリケーション鍵及びカウンタ値を知っているセンタ鍵管理サーバ100が、製造ラインの稼働前に、生成した暗号文部を事前検証用メッセージとして工場鍵管理サーバ110に登録する。工場鍵管理サーバ110は、装置130によって生成された検証用メッセージの暗号文部と事前検証用メッセージとを比較することよって、鍵の書込処理の成否の検証を行うことができる。アプリケーション鍵又はカウンタ値のいずれかが一致しない場合、暗号処理の特性から、検証用メッセージの暗号文部と事前検証用メッセージは一致しないためである。
したがって、本実施例によれば、工場鍵管理サーバ110は、センタ鍵管理サーバ100に問い合わせることなくアプリケーション鍵の書込処理の成否を検証することができる。これによって、製造コストを削減できる。
なお、工場鍵管理サーバ110は、暗号文である事前検証用メッセージからアプリケーション鍵及びカウンタ値を取得できないため、MAC部を算出することができない。また、工場鍵管理サーバ110が鍵の書込処理が行われたように偽装するために事前検証用メッセージを送信してもMAC部の検証が失敗する。これによって、センタ鍵管理サーバ100は、前述の偽装を検知することができる。したがって、本実施例では、事前検証用メッセージの送信に伴うセキュリティの問題は発生しない。
以上で説明したように、実施例1によれば、装置130へのセキュアな鍵の書込を実現でき、また、工場鍵管理サーバ110がセンタ鍵管理サーバ100に等合わせることなく鍵の書込処理の成否を検証できる。