【文献】
ボディ・ゲートウェイ向けオンチップ・セキュリティ機能搭載32ビット・マイコン,freescale [オンライン],2014年 1月,[検索日 平成29年3月16日],インターネット,URL,<http://www.nxp.com/assets/documents/data/en/supporting-information/E_SecurityMCU_JA.pdf>
【文献】
竹森 敬祐,セキュアエレメントを基点とした車載制御システムの保護 −要素技術の整理と考察−,第17回 組込みシステム技術に関するサマーワークショップ(SWEST17),[オンライン],2015年 8月28日,セッション(s3) s3a,[検索日 平成29年3月15日],インターネット,URL,<https://swest.toppers.jp/SWEST17/data/s3a_proceeding.pdf>
【文献】
Geoff Emerson, et al.,Using the Cryptographic Service Engine (CSE),Ferrscale Semiconductor Application Note,[オンライン],2011年 6月,Number: AN4234 Rev.0,[検索日 平成29年3月16日],インターネット,URL,<http://cache.freescale.com/files/32bit/doc/app_note/AN4234.pdf>
【文献】
上田 浩史 ほか,車載ネットワークのセキュリティ監視システム,SEIテクニカルレビュー,住友電気工業株式会社,2015年 7月31日,No.187,p.1−5
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0022】
以下、図面を参照し、本発明の実施形態について説明する。なお、以下に示す実施形態では、車両として自動車を例に挙げて説明する。
【0023】
[第1実施形態]
図1は、本実施形態に係る自動車1に備わる車載コンピュータシステムの構成例を示す図である。
図1において、自動車1に備わる車載コンピュータシステムは、第1のECU(電子制御装置)10と複数の第2のECU20とがCAN30に接続されて構成される。この車載コンピュータシステムは、自動車1の車載制御システムに適用できる。
【0024】
第1のECU10及び第2のECU20は、自動車1に備わる車載コンピュータである。第1のECU10は、自動車1に搭載されたECUのうち、鍵管理機能を有するECUである。以下、第1のECU10のことを鍵管理ECU10と称する場合がある。
【0025】
第2のECU20は、自動車1に搭載されたECUのうち、エンジン制御等の機能を有するECUである。第2のECU20として、例えば、エンジン制御機能を有するECU、ハンドル制御機能を有するECU、ブレーキ制御機能を有するECUなどがある。第2のECU20は、第1のECU10によって正当性が認証されるECUである。以下、第2のECU20のことを被認証ECU20と称する場合がある。
【0026】
CAN30は通信ネットワークである。CANは車両に搭載される通信ネットワークの一つとして知られている。第1のECU10は、CAN30を介して、各第2のECU20との間でデータを交換する。第2のECU20は、CAN30を介して、他の第2のECU20との間でデータを交換する。
【0027】
なお、車両に搭載される通信ネットワークとして、CAN以外の通信ネットワークを自動車1に備え、CAN以外の通信ネットワークを介して、第1のECU10と第2のECU20との間のデータの交換、及び、第2のECU20同士の間のデータの交換が行われてもよい。例えば、LIN(Local Interconnect Network)を自動車1に備えてもよい。
また、CANとLINとを自動車1に備えてもよい。また、自動車1において、LINに接続する第2のECU20を備えてもよい。また、第1のECU10は、CANとLINとに接続されてもよい。また、第1のECU10は、CANを介して該CANに接続される第2のECU20との間でデータを交換し、また、LINを介して該LINに接続される第2のECU20との間でデータを交換してもよい。また、第2のECU20同士が、LINを介してデータを交換してもよい。
【0028】
第1のECU10は、CPU(Central Processing Unit:中央演算処理装置)11と記憶部12とSHE(Secure Hardware Extension)13とを備える。CPU11は、第1のECU10の機能を実現させるためのコンピュータプログラムを実行する。記憶部12は、CPU11で実行されるコンピュータプログラムや各種のデータを記憶する。SHE13は暗号処理機能を有する。SHE13は耐タンパー性(Tamper Resistant)を有する。SHE13はセキュアエレメント(Secure Element:SE)の例である。セキュアエレメントは耐タンパー性を有する。以下、SHE13のことをSHE−A13と称する場合がある。
【0029】
第2のECU20は、CPU21と記憶部22とSHE23とを備える。CPU21は、第2のECU20の機能を実現させるためのコンピュータプログラムを実行する。記憶部22は、CPU21で実行されるコンピュータプログラムや各種のデータを記憶する。
SHE23は暗号処理機能を有する。SHE23は耐タンパー性を有する。SHE23はセキュアエレメントの例である。以下、SHE23のことをSHE−B23と称する場合がある。
【0030】
以下の説明において、SHE13とSHE23とを特に区別しないときは単にSHEと称する。
【0031】
[SHEの説明]
本実施形態では、第1のECU10及び第2のECU20は、暗号処理チップの一例であるSHEを備える。以下、SHEについて説明する。SHEは暗号処理機能を有する。
SHEの暗号処理機能の一つとして暗号化及び復号がある。SHEの暗号処理機能の一つとしてMAC(Message Authentication Code:メッセージ認証コード)の生成及び検証がある。SHEが扱うMACとしてCMAC(Cipher-based Message Authentication Code)がある。
【0032】
(SHEの鍵の構成)
SHEでは、複数の種類の鍵を使用することができる。SHEの鍵には、MASTER_ECU_KEY(MEK)鍵、BOOT_MAC_KEY(BMK)鍵、BOOT_MAC(BM)鍵、KEY_N鍵(但し、Nは1から10までのいずれかの整数)、及び、RAM_KEY鍵がある。以下にSHEの鍵について説明する。
【0033】
(1)MASTER_ECU_KEY(MEK)鍵
MEK鍵は、MEK鍵、BMK鍵、BM鍵、及び、KEY_N鍵の更新に使用される鍵である。MEK鍵は、暗号化処理及び復号処理、並びに、MACの生成処理及び検証処理には使用できない。MEK鍵の書き換え回数には制限がある。
【0034】
(2)BOOT_MAC_KEY(BMK)鍵
BMK鍵は、セキュアブートにおけるCMACの算出に使用される鍵である。BMK鍵は、BMK鍵及びBM鍵の更新に使用できる。BMK鍵は、暗号化処理及び復号処理、並びに、MACの生成処理及び検証処理には使用できない。BMK鍵の書き換え回数には制限がある。
【0035】
(3)BOOT_MAC(BM)鍵
BM鍵は、セキュアブートにおけるCMACの期待値である。BM鍵は、暗号化処理及び復号処理、並びに、MACの生成処理及び検証処理には使用できない。BM鍵の書き換え回数には制限がある。
【0036】
(4)KEY_N鍵(但し、Nは1から10までのいずれかの整数)
KEY_N鍵として、KEY_1〜10の10個がある。各KEY_N鍵は、暗号化処理及び復号処理に使用可能なモード0と、MACの生成処理及び検証処理に使用可能なモード1とのうちいずれか一方のモードで使用できる。各KEY_N鍵は、自己の鍵のみの更新に使用できる。例えば、KEY_1鍵を使用すれば、KEY_1鍵を更新できる。各KEY_N鍵の書き換え回数には制限がある。
【0037】
(5)RAM_KEY鍵
RAM_KEY鍵は、コマンドCMD_LOAD_PLAIN_KEYによって、平文で登録できる鍵である。また、RAM_KEY鍵は、コマンドCMD_LOAD_KEYによって、値M1,M2及びM3を使用して登録することもできる。但し、コマンドCMD_LOAD_KEYによってRAM_KEY鍵を登録する場合には、後述する値M2にカウンタ値Counterを含まない。このため、リプレイ攻撃に対する脆弱性がある。RAM_KEY鍵の更新には、KEY_N鍵を使用できる。RAM_KEY鍵の書き換え回数には制限がない。
【0038】
(SHEの鍵の更新方法)
(1)コマンドCMD_LOAD_KEY
コマンドCMD_LOAD_KEYによって、MEK鍵、BMK鍵、BM鍵、KEY_N鍵、及び、RAM_KEY鍵を更新できる。コマンドCMD_LOAD_KEYでは、次の式(1)で示される値M1,M2及びM3を生成し、鍵の更新を行う。
【0040】
但し、「A||B」はAとBとの連結を示す。
【0041】
(2)コマンドCMD_LOAD_PLAIN_KEY
コマンドCMD_LOAD_PLAIN_KEYによって、RAM_KEY鍵を平文で登録できる。コマンドCMD_LOAD_PLAIN_KEYによって平文で登録できる鍵は、RAM_KEY鍵のみである。
【0043】
[SHEに対する鍵の割り当て]
本実施形態では、SHEに対して、以下に示すように、初期鍵、鍵交換鍵、及び、MAC鍵を割り当てる。
【0044】
(1)初期鍵:KEY_1鍵
初期鍵は、第1のECU10が第2のECU20の正当性を認証する処理で使用される。第2のECU20において、予め、例えば第2のECU20の製造時などに、自己の初期鍵がSHE23のKEY_1鍵に設定される。KEY_1鍵は、MACの生成処理及び検証処理に使用可能な鍵である。
【0045】
(2)鍵交換鍵:KEY_2鍵(モード0(暗号化処理及び復号処理)に使用)、KEY_3鍵(モード1(MACの生成処理及び検証処理)に使用)
鍵交換鍵は、第1のECU10が第2のECU20へMAC鍵を配信する処理で使用される。鍵交換鍵は、第1のECU10によって生成されて第2のECU20へ配信される。鍵交換鍵は、自動車1内で共通の値が使用される。
【0046】
(3)MAC鍵:RAM_KEY鍵
MAC鍵は、MACの生成処理及び検証処理で使用される。MAC鍵は、第1のECU10によって生成されて鍵交換鍵で暗号化されてから、正当性が認証済みである第2のECU20へ配信される。
【0047】
[SHEにおける鍵の初期値]
SHEにおいて、SHEに固有の各鍵の初期値は0である。このままでは、SHEに対して不正に鍵が設定される可能性がある。このため、本実施形態では、第2のECU20のSHE23に対して、次の式(2)で示される値のうち、値K
MASTER_ECU_KEYをMEK鍵に初期設定し、値K
BOOT_MAC_KEYをBMK鍵に初期設定し、値K
KEY<N>をKEY_N鍵に初期設定する。これにより、第2のECU20のSHE23に対して、不正に鍵が設定されることを防止する。なお、第1のECU10のSHE13に対しても、第2のECU20と同様に、鍵の初期設定を行ってもよい。
【0049】
但し、MSはマスター鍵(MASTER_SECRET:MS)である。マスター鍵MSは、初期鍵の生成に使用される。ID
aは、第2のECU20の識別子である。C
MASTER_ECU_KEYはMEK鍵を表す文字列である。C
BOOT_MAC_KEYはBMK鍵を表す文字列である。C
KEY_NはKEY_N鍵を表す文字列である。各文字列C
MASTER_ECU_KEY、C
BOOT_MAC_KEY、及びC
KEY_Nを含めることによって、鍵の種類を識別することができる。なお、上記の式(2)において、具体的にはダイジェストとしてCMACを使用する。
【0050】
次に、
図2から
図5を参照して、本実施形態に係るECU認証処理、鍵交換鍵配信処理、及び、MAC鍵配信処理を説明する。
【0051】
[ECU認証処理]
図2を参照して本実施形態に係るECU認証処理を説明する。
図2は、本実施形態に係るECU認証方法を示すシーケンスチャートである。鍵管理ECU10のSHE−A13のKEY_10鍵には、予め、例えば鍵管理ECU10の製造時などに、マスター鍵MSが設定される。被認証ECU20の初期鍵は、次の式(3)により算出される。
【0053】
具体的にはダイジェストとしてCMACを使用する。これにより、被認証ECU20の初期鍵は、次の式(4)により算出される。
【0055】
但し、ECU_IDは被認証ECU20の識別子である。上記の式(4)のCMACの算出には、マスター鍵MSが使用される。
【0056】
本実施形態では、鍵管理ECU10は、被認証ECU20の初期鍵を共有する処理を実行し、共有された初期鍵に基づいてチャレンジ・アンド・レスポンス方式により被認証ECU20の正当性を検証する。
【0057】
(ステップS101)被認証ECU20において、CPU21は、自己の被認証ECU20の識別子ECU_IDを鍵管理ECU10へ送信する。
【0058】
(ステップS102)鍵管理ECU10において、CPU11は、被認証ECU20から受信した被認証ECU20の識別子ECU_IDと文字列C
KEY_1とを使用して、コマンドCMD_GENERATE_MAC(ECU_ID||C
KEY_1)をSHE−A13へ入力する。
【0059】
(ステップS103)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_GENERATE_MAC(ECU_ID||C
KEY_1)に応じて、CMACを生成する。このCMACの生成では、SHE−A13は、KEY_10鍵に設定されているマスター鍵MSを使用して、上記の式(4)によりCMACを算出する。この算出されるCMACは、被認証ECU20の初期鍵であって被認証ECU20のSHE−B23のKEY_1鍵に設定されている値と同じ値である。SHE−A13は、生成したCMACをCPU11へ出力する。
【0060】
(ステップS104)鍵管理ECU10において、CPU11は、SHE−A13から受け取ったCMACを使用して、コマンドCMD_LOAD_PLAIN_KEY(CMAC)をSHE−A13へ入力する。
【0061】
(ステップS105)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_LOAD_PLAIN_KEY(CMAC)に応じて、該コマンドCMD_LOAD_PLAIN_KEY(CMAC)に含まれるCMACをRAM_KEY鍵に登録する。これにより、SHE−A13のRAM_KEY鍵に、被認証ECU20の初期鍵が登録されたことになる。
SHE−A13は、RAM_KEY鍵の登録完了「OK」をCPU11へ応答する。
【0062】
(ステップS106)鍵管理ECU10において、CPU11は、コマンドCMD_RNDをSHE−A13へ入力する。
【0063】
(ステップS107)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_RNDに応じて、乱数randを生成する。SHE−A13は、生成した乱数randをCPU11へ出力する。
【0064】
(ステップS108)鍵管理ECU10において、CPU11は、SHE−A13から受け取った乱数randを被認証ECU20へ送信する。
【0065】
(ステップS109)被認証ECU20において、CPU21は、鍵管理ECU10から受信した乱数randを使用して、コマンドCMD_GENERATE_MAC(rand)をSHE−B23へ入力する。
【0066】
(ステップS110)被認証ECU20において、SHE−B23は、CPU21から入力されたコマンドCMD_GENERATE_MAC(rand)に応じて、CMACを生成する。このCMACの生成では、SHE−B23は、KEY_1鍵に設定されている初期鍵を使用して、該コマンドCMD_GENERATE_MAC(rand)に含まれる乱数randについてCMACを算出する。SHE−B23は、生成したCMACをCPU21へ出力する。
【0067】
(ステップS111)被認証ECU20において、CPU21は、自己の被認証ECU20の識別子ECU_IDとSHE−B23から受け取ったCMACとを鍵管理ECU10へ送信する。
【0068】
(ステップS112)鍵管理ECU10において、CPU11は、被認証ECU20へ送信した乱数randと、被認証ECU20から受信したCMACとを使用して、コマンドCMD_VERIFY_MAC(rand,CMAC)をSHE−A13へ入力する。
【0069】
(ステップS113)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_VERIFY_MAC(rand,CMAC)に応じて、該コマンドCMD_VERIFY_MAC(rand,CMAC)に含まれるCMACを検証する。このCMACの検証では、SHE−A13は、RAM_KEY鍵に登録されている値つまり被認証ECU20の初期鍵を使用する。SHE−A13は、CMACの検証結果「合格(OK)又は不合格(NG)」をCPU11へ出力する。CPU11は、SHE−A13から受け取ったCMACの検証結果が合格(OK)である場合には被認証ECU20の正当性の認証が合格であると判断し、一方、SHE−A13から受け取ったCMACの検証結果が不合格(NG)である場合には被認証ECU20の正当性の認証が不合格であると判断する。
【0070】
[鍵交換鍵配信処理]
図3を参照して本実施形態に係る鍵交換鍵配信処理を説明する。
図3は、本実施形態に係る鍵交換鍵配信方法を示すシーケンスチャートである。本実施形態では、2個の鍵交換鍵を使用する。一方の第1の鍵交換鍵は暗号化処理及び復号処理に使用される。もう一方の第2の鍵交換鍵はMACの生成処理及び検証処理に使用される。第1の鍵交換鍵と第2の鍵交換鍵とは異なる値であることが好ましい。鍵管理ECU10は、第1の鍵交換鍵と第2の鍵交換鍵とを被認証ECU20へ配信する。被認証ECU20において、第1の鍵交換鍵はSHE−B23のKEY_2鍵に設定され、第2の鍵交換鍵はSHE−B23のKEY_3鍵に設定される。
【0071】
以下、
図3を参照して第1の鍵交換鍵を配信する場合を例に挙げて説明する。第2の鍵交換鍵を配信する場合も、第1の鍵交換鍵を配信する場合と同様である。
【0072】
(ステップS121)鍵管理ECU10において、CPU11は、鍵交換鍵の配信先の被認証ECU20の識別子ECU_IDと文字列C
MASTER_ECU_KEYとを使用して、コマンドCMD_GENERATE_MAC(ECU_ID||C
MASTER_ECU_KEY)をSHE−A13へ入力する。
【0073】
(ステップS122)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_GENERATE_MAC(ECU_ID||C
MASTER_ECU_KEY)に応じて、CMACを生成する。このCMACの生成では、SHE−A13は、KEY_10鍵に設定されているマスター鍵MSを使用して、上記の式(4)と同様にCMACを算出する。この算出されるCMACは、被認証ECU20のSHE−B23のMEK鍵に設定されている値と同じ値である。SHE−A13は、生成したCMACをCPU11へ出力する。
【0074】
(ステップS123)鍵管理ECU10において、CPU11は、SHE−A13から受け取ったCMACを使用して、コマンドCMD_LOAD_PLAIN_KEY(CMAC)をSHE−A13へ入力する。
【0075】
(ステップS124)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_LOAD_PLAIN_KEY(CMAC)に応じて、該コマンドCMD_LOAD_PLAIN_KEY(CMAC)に含まれるCMACをRAM_KEY鍵に登録する。これにより、SHE−A13のRAM_KEY鍵に、被認証ECU20のSHE−B23のMEK鍵が登録されたことになる。SHE−A13は、RAM_KEY鍵の登録完了「OK」をCPU11へ応答する。
【0076】
(ステップS125)鍵管理ECU10において、CPU11は、コマンドCMD_RNDをSHE−A13へ入力する。
【0077】
(ステップS126)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_RNDに応じて、乱数randを生成する。SHE−A13は、生成した乱数randをCPU11へ出力する。この乱数randは、第1の鍵交換鍵つまり被認証ECU20のSHE−B23のKEY_2鍵に使用される。
【0078】
(ステップS127)鍵管理ECU10において、CPU11は、値M1,M2及びM3を生成する。この値M1,M2及びM3は、CPU11がSHE−A13から受け取った乱数randつまり第1の鍵交換鍵を、被認証ECU20のSHE−B23のKEY_2鍵に登録するための各値である。CPU11は、値M2を生成する際には、コマンド「CMD_ENC_CBC with RAM_KEY」によってSHE−A13に暗号化処理を実行させる。値M2には、CPU11がSHE−A13から受け取った乱数randつまり第1の鍵交換鍵を含める。CPU11は、値M3を生成する際には、コマンド「CMD_GENERATE_MAC with RAM_KEY」によってSHE−A13にCMACを生成させる。CPU11は、生成した値M1,M2及びM3を被認証ECU20へ送信する。
【0079】
(ステップS128)被認証ECU20において、CPU21は、鍵管理ECU10から受信した値M1,M2及びM3を使用して、コマンドCMD_LOAD_KEY(M1,M2,M3)をSHE−B23へ入力する。
【0080】
(ステップS129)被認証ECU20において、SHE−B23は、CPU21から入力されたコマンドCMD_LOAD_KEY(M1,M2,M3)に応じて、該コマンドCMD_LOAD_KEY(M1,M2,M3)に含まれる乱数randつまり第1の鍵交換鍵をKEY_2鍵に登録する。SHE−B23は、KEY_2鍵の登録完了「OK」をCPU11へ応答する。
【0081】
(ステップS130)被認証ECU20において、CPU21は、第1の鍵交換鍵の登録完了「OK」を鍵管理ECU10へ送信する。
【0082】
(ステップS131)鍵管理ECU10において、CPU11は、被認証ECU20へ送信した乱数randつまり第1の鍵交換鍵を使用して、コマンドCMD_ENC_CBC(rand)をSHE−A13へ入力する。
【0083】
(ステップS132)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_ENC_CBC(rand)に応じて、該コマンドCMD_ENC_CBC(rand)に含まれる乱数randつまり第1の鍵交換鍵をKEY_9鍵で暗号化する。KEY_9鍵には、予め、暗号化処理及び復号処理に使用可能なモード0として値が設定される。
SHE−A13は、暗号化された第1の鍵交換鍵をCPU11へ出力する。CPU11は、SHE−A13から受け取った暗号化された第1の鍵交換鍵を記憶部12に格納する。
【0084】
なお、初回の第1の鍵交換鍵の配信時には、被認証ECU20のSHE−B23の鍵登録に必要となるMEK鍵又は予め設定されるKEY_2鍵は、被認証ECU20毎に異なる。このため、鍵管理ECU10は、被認証ECU20毎に、鍵登録メッセージ(値M1,M2及びM3)を個別に作成する必要がある。一方、二回目以降の第1の鍵交換鍵の更新時には、各被認証ECU20の第1の鍵交換鍵(SHE−B23のKEY_2鍵の値)は同一になっている。このため、二回目以降の第1の鍵交換鍵の更新では、第1の鍵交換鍵を使用して鍵登録メッセージを作成することが可能であり、被認証ECU20毎に個別に鍵登録メッセージを作成する必要はない。この点についても、第2の鍵交換鍵を配信する場合に同様に適用できる。
【0085】
[MAC鍵配信処理]
図4及び
図5を参照して本実施形態に係るMAC鍵配信処理を説明する。
図4及び
図5は、本実施形態に係るMAC鍵配信方法を示すシーケンスチャートである。自動車1の車載制御システムにおいて、MAC鍵には、「高速な処理速度」と「頻繁な書き換えに対する耐性」との二つの要求がある。SHEのKEY_N鍵には、書き換え回数に制限がある。このため、本実施形態では、SHEのRAM_KEY鍵にMAC鍵を登録する。MAC鍵にRAM_KEY鍵を使用することにより、暗号化及び復号、並びに、MACの生成及び検証を高速に行うことができる。KEY_N鍵とRAM_KEY鍵とを各々MAC鍵に使用した場合の処理速度の比較を以下に示す。KEY_N鍵とRAM_KEY鍵の両者共に同じベンチマークテストを実施した結果である。
KEY_N鍵をMAC鍵に使用した場合のMAC生成処理時間:42.8マイクロ秒
RAM_KEY鍵をMAC鍵に使用した場合のMAC生成処理時間:19.1マイクロ秒
【0086】
なお、コマンドCMD_LOAD_KEYによってRAM_KEY鍵を登録する場合には、鍵登録メッセージ内の値M2にカウンタ値Counterを含まないので、リプレイ攻撃に対する脆弱性がある。このため、本実施形態では、被認証ECU20のSHE−B23が鍵管理ECU10の正当性を認証するように構成する。具体的には、SHE−B23が乱数を発生し、この乱数を鍵管理ECU10へ送り、鍵管理ECU10が該乱数のCMACを生成してSHE−B23へ送り、SHE−B23が該CMACを検証する。
【0087】
被認証ECU20のSHE−B23には、KEY_2鍵に第1の鍵交換鍵(暗号化処理及び復号処理に使用される)が登録されており、KEY_3鍵に第2の鍵交換鍵(MACの生成処理及び検証処理に使用される)が登録されている。鍵管理ECU10の記憶部12は、第1の鍵交換鍵を鍵管理ECU10のSHE−A13のKEY_9鍵で暗号化したデータ(暗号化第1の鍵交換鍵)と、第2の鍵交換鍵を鍵管理ECU10のSHE−A13のKEY_9鍵で暗号化したデータ(暗号化第2の鍵交換鍵)と、を不揮発性メモリに格納している。
【0088】
なお、第1の鍵交換鍵は被認証ECU20のSHE−B23のKEY_2鍵と同じ値であり、第1の鍵交換鍵KEY_2と称する。第2の鍵交換鍵は被認証ECU20のSHE−B23のKEY_3鍵と同じ値であり、第2の鍵交換鍵KEY_3と称する。
【0089】
図4を参照して本実施形態に係るMAC鍵配信処理の第1段階を説明する。
図4に示すMAC鍵配信処理の第1段階は、例えば自動車1のエンジンが停止された後、所定期間以上経過してから、エンジンが始動された時に開始される。例えば、ある一日において初めてエンジンが始動された時に、MAC鍵配信処理の第1段階が開始される。
【0090】
(ステップS141)鍵管理ECU10において、CPU11は、被認証ECU20に対して乱数の要求を行う。
【0091】
(ステップS142)被認証ECU20において、CPU21は、鍵管理ECU10からの要求に応じて、コマンドCMD_RNDをSHE−B23へ入力する。
【0092】
(ステップS143)被認証ECU20において、SHE−B23は、CPU21から入力されたコマンドCMD_RNDに応じて、乱数1を生成する。SHE−B23は、生成した乱数1をCPU21へ出力する。
【0093】
(ステップS144)被認証ECU20において、CPU21は、SHE−B23から受け取った乱数1と、自己の被認証ECU20の識別子ECU_IDとを鍵管理ECU10へ送信する。
【0094】
なお、被認証ECU20から自発的に、SHE−B23で発生した乱数1と、自己の被認証ECU20の識別子ECU_IDとを鍵管理ECU10へ送ってもよい。
【0095】
(ステップS145)鍵管理ECU10において、CPU11は、コマンドCMD_RNDをSHE−A13へ入力する。
【0096】
(ステップS146)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_RNDに応じて、乱数2を生成する。SHE−A13は、生成した乱数2をCPU11へ出力する。この乱数2は、MAC鍵に使用される。CPU11は、SHE−A13から受け取った乱数2つまりMAC鍵を使用して、コマンドCMD_ENC_CBC(乱数2)をSHE−A13へ入力する。SHE−A13は、CPU11から入力されたコマンドCMD_ENC_CBC(乱数2)に応じて、該コマンドCMD_ENC_CBC(乱数2)に含まれる乱数2つまりMAC鍵をKEY_9鍵で暗号化する。SHE−A13は、暗号化されたMAC鍵をCPU11へ出力する。CPU11は、SHE−A13から受け取った暗号化されたMAC鍵を記憶部12に格納する。
【0097】
(ステップS147)鍵管理ECU10において、CPU11は、記憶部12に格納されている暗号化第2の鍵交換鍵を復号するために、該暗号化第2の鍵交換鍵を使用してコマンドCMD_DEC_CBC(暗号化第2の鍵交換鍵)をSHE−A13へ入力する。
【0098】
(ステップS148)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_DEC_CBC(暗号化第2の鍵交換鍵)に応じて、該コマンドCMD_DEC_CBC(暗号化第2の鍵交換鍵)に含まれる暗号化第2の鍵交換鍵をKEY_9鍵で復号する。KEY_9鍵は、暗号化第1の鍵交換鍵及び暗号化第2の鍵交換鍵の暗号化に使用された鍵である。SHE−A13は、暗号化第2の鍵交換鍵の復号の結果である第2の鍵交換鍵KEY_3をCPU11へ出力する。
【0099】
(ステップS149)鍵管理ECU10において、CPU11は、SHE−A13から受け取った第2の鍵交換鍵KEY_3を使用して、コマンドCMD_LOAD_PLAIN_KEY(KEY_3)をSHE−A13へ入力する。
【0100】
(ステップS150)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_LOAD_PLAIN_KEY(KEY_3)に応じて、該コマンドCMD_LOAD_PLAIN_KEY(KEY_3)に含まれる第2の鍵交換鍵KEY_3をRAM_KEY鍵に登録する。SHE−A13は、RAM_KEY鍵の登録完了「OK」をCPU11へ応答する。
【0101】
(ステップS151)鍵管理ECU10において、CPU11は、値M1,M2及びM3を生成する。この値M1,M2及びM3は、CPU11がSHE−A13から受け取った乱数2つまりMAC鍵を、被認証ECU20のSHE−B23のRAM_KEY鍵に登録するための各値である。CPU11は、値M2を生成する際には、コマンド「CMD_ENC_CBC with RAM_KEY」によってSHE−A13に暗号化処理を実行させる。値M2には、CPU11がSHE−A13から受け取った乱数2つまりMAC鍵を含める。CPU11は、値M3を生成する際には、コマンド「CMD_GENERATE_MAC with RAM_KEY」によってSHE−A13にCMACを生成させる。また、CPU11は、被認証ECU20から受信した乱数1を使用して、コマンドCMD_GENERATE_MAC(乱数1)をSHE−A13へ入力する。
【0102】
(ステップS152)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_GENERATE_MAC(乱数1)に応じて、CMACを生成する。このCMACの生成では、SHE−A13は、RAM_KEY鍵つまり第2の鍵交換鍵KEY_3を使用して乱数1のCMACを生成する。SHE−A13は、生成した乱数1のCMACをCPU11へ出力する。
【0103】
(ステップS153)鍵管理ECU10において、CPU11は、生成した値M1,M2及びM3と、SHE−A13から受け取った乱数1のCMACを被認証ECU20へ送信する。
【0104】
(ステップS154)被認証ECU20において、CPU21は、鍵管理ECU10から受信したCMACを検証するために、コマンドCMD_VERIFY_MACをSHE−A13へ入力する。
【0105】
(ステップS155)被認証ECU20において、SHE−B23は、CPU21から入力されたコマンドCMD_VERIFY_MACに応じて、該コマンドCMD_VERIFY_MACに含まれるCMACを検証する。このCMACの検証では、SHE−B23は、自己が生成した乱数1と、KEY_3鍵つまり第2の鍵交換鍵KEY_3とを使用する。SHE−B23は、CMACの検証結果「合格(OK)又は不合格(NG)」をCPU21へ出力する。CPU21は、SHE−B23から受け取ったCMACの検証結果が合格(OK)である場合には鍵管理ECU10の正当性の認証が合格であると判断し、一方、SHE−B23から受け取ったCMACの検証結果が不合格(NG)である場合には鍵管理ECU10の正当性の認証が不合格であると判断する。鍵管理ECU10の正当性の認証が合格である場合にはステップS156に進む。一方、鍵管理ECU10の正当性の認証が不合格である場合には
図4の処理を終了する。
【0106】
(ステップS156)被認証ECU20において、CPU21は、鍵管理ECU10から受信した値M1,M2及びM3を使用して、コマンドCMD_LOAD_KEY(M1,M2,M3)をSHE−B23へ入力する。
【0107】
(ステップS157)被認証ECU20において、SHE−B23は、CPU21から入力されたコマンドCMD_LOAD_KEY(M1,M2,M3)に応じて、該コマンドCMD_LOAD_KEY(M1,M2,M3)に含まれる乱数2つまりMAC鍵をRAM_KEY鍵に登録する。
SHE−B23は、RAM_KEY鍵の登録完了「OK」をCPU21へ応答する。
【0108】
次に
図5を参照して本実施形態に係るMAC鍵配信処理の第2段階を説明する。MAC鍵配信処理の第2段階は、上述した
図4に示すMAC鍵配信処理の第1段階によって被認証ECU20のSHE−B23のRAM_KEY鍵にMAC鍵が登録された後に実施される。被認証ECU20は、MAC鍵配信処理の第1段階のステップS153において鍵管理ECU10から受信した値M1,M2及びM3を、記憶部22の不揮発性メモリに格納している。
図5に示すMAC鍵配信処理の第2段階は、例えば自動車1の走行の際に駐車等によりエンジンが停止された後、所定期間内にエンジンが再始動された時に開始される。
【0109】
(ステップS171)被認証ECU20において、CPU21は、記憶部22の不揮発性メモリに格納されている値M1,M2及びM3を使用して、コマンドCMD_LOAD_KEY(M1,M2,M3)をSHE−B23へ入力する。
【0110】
(ステップS172)被認証ECU20において、SHE−B23は、CPU21から入力されたコマンドCMD_LOAD_KEY(M1,M2,M3)に応じて、該コマンドCMD_LOAD_KEY(M1,M2,M3)に含まれる乱数2つまりMAC鍵をRAM_KEY鍵に登録する。
SHE−B23は、RAM_KEY鍵の登録完了「OK」をCPU21へ応答する。
【0111】
(ステップS173)被認証ECU20において、CPU21は、コマンドCMD_RNDをSHE−B23へ入力する。
【0112】
(ステップS174)被認証ECU20において、SHE−B23は、CPU21から入力されたコマンドCMD_RNDに応じて、乱数1を生成する。SHE−B23は、生成した乱数1をCPU21へ出力する。
【0113】
(ステップS175)被認証ECU20において、CPU21は、自己の被認証ECU20の識別子ECU_IDと乱数1とを使用して、コマンドCMD_GENERATE_MAC(ECU_ID,乱数1)をSHE−B23へ入力する。
【0114】
(ステップS176)被認証ECU20において、SHE−B23は、CPU21から入力されたコマンドCMD_GENERATE_MAC(ECU_ID,乱数1)に応じて、CMACを生成する。このCMACの生成では、SHE−B23は、RAM_KEY鍵つまりMAC鍵を使用して、ECU_ID及び乱数1についてのCMACを生成する。例えば、ECU_IDと乱数1との連結データについてのCMACを生成する。SHE−B23は、生成したCMACをCPU21へ出力する。
【0115】
(ステップS177)被認証ECU20において、CPU21は、SHE−B23から受け取った乱数1と、自己の被認証ECU20の識別子ECU_IDと、SHE−B23から受け取ったCMACとを鍵管理ECU10へ送信する。
【0116】
(ステップS178)鍵管理ECU10において、CPU11は、記憶部12に格納されている暗号化されたMAC鍵を復号するために、該暗号化されたMAC鍵を使用してコマンドCMD_DEC_CBC(暗号化されたMAC鍵)をSHE−A13へ入力する。SHE−A13は、CPU11から入力されたコマンドCMD_DEC_CBC(暗号化されたMAC鍵)に応じて、該コマンドCMD_DEC_CBC(暗号化されたMAC鍵)に含まれる暗号化されたMAC鍵をKEY_9鍵で復号する。KEY_9鍵は、暗号化されたMAC鍵の暗号化に使用された鍵である。SHE−A13は、暗号化されたMAC鍵の復号の結果であるMAC鍵をCPU11へ出力する。CPU11は、SHE−A13から受け取ったMAC鍵を使用して、コマンドCMD_LOAD_PLAIN_KEY(MAC鍵)をSHE−A13へ入力する。SHE−A13は、CPU11から入力されたコマンドCMD_LOAD_PLAIN_KEY(MAC鍵)に応じて、該コマンドCMD_LOAD_PLAIN_KEY(MAC鍵)に含まれるMAC鍵をRAM_KEY鍵に登録する。SHE−A13は、RAM_KEY鍵の登録完了「OK」をCPU11へ応答する。CPU11は、被認証ECU20から受信した乱数1と被認証ECU20の識別子ECU_IDとCMACとを使用して、コマンドCMD_VERIFY_MAC(CMAC)をSHE−A13へ入力する。
【0117】
(ステップS179)鍵管理ECU10において、SHE−A13は、CPU11から入力されたコマンドCMD_VERIFY_MAC(CMAC)に応じて、該コマンドCMD_VERIFY_MAC(CMAC)に含まれるCMACを検証する。このCMACの検証では、SHE−A13は、該コマンドCMD_VERIFY_MAC(CMAC)に含まれる乱数1及び被認証ECU20の識別子ECU_IDと、RAM_KEY鍵に登録されているMAC鍵と、を使用する。
【0118】
SHE−A13は、CMACの検証結果「合格(OK)又は不合格(NG)」をCPU11へ出力する。CPU11は、SHE−A13から受け取ったCMACの検証結果が合格(OK)である場合には被認証ECU20の正当性の認証が合格であると判断し、一方、SHE−A13から受け取ったCMACの検証結果が不合格(NG)である場合には被認証ECU20の正当性の認証が不合格であると判断する。被認証ECU20の正当性の認証が合格である場合にはステップS180に進む。一方、被認証ECU20の正当性の認証が不合格である場合には
図5の処理を終了する。被認証ECU20の正当性の認証が不合格である場合には
図4に示すMAC鍵配信処理の第1段階を行ってもよい。
【0119】
次いでステップS180からS186までが実行される。ステップS180からS186までは、
図4に示すステップS151からS157までと同じである。但し、ステップS180で生成する値M1,M2及びM3は、新しいMAC鍵を、被認証ECU20のSHE−B23のRAM_KEY鍵に登録するための各値である。新しいMAC鍵には、
図4に示すステップS145からS146と同様にしてSHE−A13で発生させた新しい乱数2を使用してもよい。
【0120】
上述した
図5に示すMAC鍵配信処理の第2段階によって、新しいMAC鍵への更新が行われる。
【0121】
なお、上述した
図5のステップS180では、乱数1のCMACを生成するが、ステップS179においてCMACの検証結果が合格(OK)である場合には、CMACの検証の合格を示す文字列、例えば「OK」と被認証ECU20の識別子ECU_IDとについてのCMACを生成してもよい。例えば、文字列「OK」と被認証ECU20の識別子ECU_IDとの連結データについてのCMACを生成する。
【0122】
さらに、上述した
図5のステップS180では、新しいMAC鍵への更新を行うが、ステップS179においてCMACの検証結果が合格(OK)である場合には、新しいMAC鍵への更新を実施しないでSHE−B23のRAM_KEY鍵に現在登録されているMAC鍵を使用してもよい。これにより、鍵管理ECU10から被認証ECU20へ値M1,M2及びM3を送る必要がなくなるので、処理の高速化が可能である。
【0123】
また、本実施形態において、値M1の算出には鍵を使用しない。このため、鍵管理ECU10は、値M2及びM3のみを被認証ECU20へ送信し、値M1については被認証ECU20へ送信しないようにしてもよい。この場合、被認証ECU20は、自己が算出した値M1と、鍵管理ECU10から受信した値M2及びM3とを組み合わせて使用する。
これにより、鍵管理ECU10から被認証ECU20へ値M1を送る必要がなくなるので、処理の高速化が可能である。
【0124】
[第2実施形態]
図6は、本実施形態に係る自動車1に備わる車載コンピュータシステムの構成例を示す図である。
図6において、
図1の各部に対応する部分には同一の符号を付け、その説明を省略する。以下、第1実施形態と異なる部分を主に説明する。第1実施形態に係る第1のECU10では暗号処理チップとしてSHEを使用したが、第2実施形態に係る第1のECU10では暗号処理チップとして「Evita-medium」と呼ばれるHSM(Hardware Security Module)を使用する。
【0125】
図6において、第1のECU10は、CPU11と記憶部12とHSM14とを備える。HSM14は、「Evita-medium」と呼ばれるHSMである。HSM14は暗号処理機能を有する。HSM14は耐タンパー性を有する。HSM14はセキュアエレメントの例である。第2のECU20は、CPU21と記憶部22とSHE23とを備える。
【0126】
次に、
図7から
図10を参照して、本実施形態に係るECU認証処理、鍵交換鍵配信処理、及び、MAC鍵配信処理を説明する。
【0127】
[ECU認証処理]
図7を参照して本実施形態に係るECU認証処理を説明する。
図7は、本実施形態に係るECU認証方法を示すシーケンスチャートである。鍵管理ECU10のHSM14には、予め、例えば鍵管理ECU10の製造時などに、マスター鍵MSが設定される。
【0128】
(ステップS201)被認証ECU20において、CPU21は、自己の被認証ECU20の識別子ECU_IDを鍵管理ECU10へ送信する。
【0129】
(ステップS202)鍵管理ECU10において、CPU11は、被認証ECU20から受信した被認証ECU20の識別子ECU_IDをHSM14へ入力する。
【0130】
(ステップS203)鍵管理ECU10において、HSM14は、CPU11から入力された被認証ECU20の識別子ECU_IDと、自己が保持するマスター鍵MSとを使用して、被認証ECU20の初期鍵を生成する。この初期鍵の生成では、上記の式(4)によりCMACを算出する。この算出されるCMACは、被認証ECU20の初期鍵であって被認証ECU20のSHE−B23のKEY_1鍵に設定されている値と同じ値である。被認証ECU20の初期鍵のことを初期鍵KEY_1と称する。HSM14は、算出したCMACつまり初期鍵KEY_1を自己のメモリに格納する。また、HSM14は、乱数randを生成する。HSM14は、生成した乱数randをCPU11へ出力する。
HSM14は、生成した乱数randを自己のメモリに格納する。
【0131】
(ステップS204)鍵管理ECU10において、CPU11は、HSM14から受け取った乱数randを被認証ECU20へ送信する。
【0132】
次いでステップS205からS207までが実行される。ステップS205からS207までは、
図2に示すステップS109からS111までと同じである。
【0133】
(ステップS208)鍵管理ECU10において、CPU11は、被認証ECU20から受信した被認証ECU20の識別子ECU_IDとCMACとをHSM14へ入力する。
【0134】
(ステップS209)鍵管理ECU10において、HSM14は、CPU11から入力されたCMACの検証を行う。このCMACの検証では、HSM14は、自己のメモリに格納されている初期鍵KEY_1を使用して、自己のメモリに格納されている乱数randについてCMACを算出する。次いで、HSM14は、該算出したCMACと、CPU11から入力されたCMACとを比較する。この比較の結果、両者が一致する場合にはCMACの検証が合格であり、一方、両者が不一致である場合にはCMACの検証が不合格である。HSM14は、該CMACの検証結果「合格(OK)又は不合格(NG)」をCPU11へ出力する。CPU11は、HSM14から受け取ったCMACの検証結果が合格(OK)である場合には被認証ECU20の正当性の認証が合格であると判断し、一方、HSM14から受け取ったCMACの検証結果が不合格(NG)である場合には被認証ECU20の正当性の認証が不合格であると判断する。
【0135】
[鍵交換鍵配信処理]
図8を参照して本実施形態に係る鍵交換鍵配信処理を説明する。
図8は、本実施形態に係る鍵交換鍵配信方法を示すシーケンスチャートである。本実施形態では、第1実施形態と同様に、第1の鍵交換鍵(暗号化処理及び復号処理に使用される鍵)と第2の鍵交換鍵(MACの生成処理及び検証処理に使用される鍵)とを使用する。
【0136】
以下、
図8を参照して第1の鍵交換鍵を配信する場合を例に挙げて説明する。第2の鍵交換鍵を配信する場合も、第1の鍵交換鍵を配信する場合と同様である。
【0137】
(ステップS211)鍵管理ECU10において、CPU11は、鍵交換鍵の配信先の被認証ECU20の識別子ECU_IDを使用して、鍵交換鍵作成依頼(ECU_ID)をHSM14へ入力する。
【0138】
(ステップS212)鍵管理ECU10において、HSM14は、値M1,M2及びM3を生成する。この値M1,M2及びM3は、第1の鍵交換鍵を被認証ECU20のSHE−B23のKEY_2鍵に登録するための各値である。HSM14は、マスター鍵MSからMEK鍵を生成する。HSM14は、乱数を生成し、生成した乱数を第1の鍵交換鍵に使用する。なお、HSM14は、マスター鍵MSから第1の鍵交換鍵を生成してもよい。
HSM14は、第1の鍵交換鍵を自己のメモリに格納する。HSM14は、生成した値M1,M2及びM3をCPU11へ出力する。
【0139】
(ステップS213)鍵管理ECU10において、CPU11は、HSM14から受け取った値M1,M2及びM3を被認証ECU20へ送信する。
【0140】
次いでステップS214からS216までが実行される。ステップS214からS216までは、
図3に示すステップS128からS130までと同じである。
【0141】
なお、2回目以降の鍵交換鍵の配信では、登録済みの第1の鍵交換鍵を使用して、鍵登録メッセージ(値M1,M2及びM3)を生成することにより、該鍵登録メッセージ(値M1,M2及びM3)を各被認証ECU20に対して共通に使用できる。例えば、該鍵登録メッセージ(値M1,M2及びM3)をブロードキャストすることが可能である。この点についても、第2の鍵交換鍵を配信する場合に同様に適用できる。
【0142】
[MAC鍵配信処理]
図9及び
図10を参照して本実施形態に係るMAC鍵配信処理を説明する。
図9及び
図10は、本実施形態に係るMAC鍵配信方法を示すシーケンスチャートである。被認証ECU20のSHE−B23には、KEY_2鍵に第1の鍵交換鍵(暗号化処理及び復号処理に使用される)が登録されており、KEY_3鍵に第2の鍵交換鍵(MACの生成処理及び検証処理に使用される)が登録されている。鍵管理ECU10のHSM14は、第1の鍵交換鍵をと第2の鍵交換鍵とを自己のメモリに格納している。
【0143】
なお、第1の鍵交換鍵は被認証ECU20のSHE−B23のKEY_2鍵と同じ値であり、第1の鍵交換鍵KEY_2と称する。第2の鍵交換鍵は被認証ECU20のSHE−B23のKEY_3鍵と同じ値であり、第2の鍵交換鍵KEY_3と称する。
【0144】
図9を参照して本実施形態に係るMAC鍵配信処理の第1段階を説明する。
図9に示すMAC鍵配信処理の第1段階は、例えば自動車1のエンジンが停止された後、所定期間以上経過してから、エンジンが始動された時に開始される。例えば、ある一日において初めてエンジンが始動された時に、MAC鍵配信処理の第1段階が開始される。
【0145】
ステップS231からS234までが実行される。ステップS231からS234までは、
図4に示すステップS141からS144までと同じである。
【0146】
(ステップS235)鍵管理ECU10において、CPU11は、被認証ECU20から受信した乱数1をHSM14へ入力する。
【0147】
(ステップS236)鍵管理ECU10において、HSM14は、乱数を生成し、生成した乱数をMAC鍵に使用する。HSM14は、MAC鍵を自己のメモリに格納する。HSM14は、値M1,M2及びM3を生成する。この値M1,M2及びM3は、MAC鍵を被認証ECU20のSHE−B23のRAM_KEY鍵に登録するための各値である。HSM14は、自己のメモリに格納されている第1の鍵交換鍵KEY_2を使用して、値M1,M2及びM3を生成する。HSM14は、CPU11から入力された乱数1についてCMACを生成する。このCMACの生成では、HSM14は、自己のメモリに格納されている第2の鍵交換鍵KEY_3を使用して乱数1のCMACを生成する。HSM14は、生成した値M1,M2及びM3と、CMACとをCPU11へ出力する。
【0148】
(ステップS237)鍵管理ECU10において、CPU11は、HSM14から受け取った値M1,M2及びM3とCMACとを被認証ECU20へ送信する。
【0149】
次いでステップS238からS241までが実行される。ステップS238からS241までは、
図4に示すステップS154からS157までと同じである。
【0150】
(ステップS242)被認証ECU20において、CPU21は、MAC鍵の登録完了「OK」を鍵管理ECU10へ送信する。
【0151】
次に
図10を参照して本実施形態に係るMAC鍵配信処理の第2段階を説明する。MAC鍵配信処理の第2段階は、上述した
図9に示すMAC鍵配信処理の第1段階によって被認証ECU20のSHE−B23のRAM_KEY鍵にMAC鍵が登録された後に実施される。被認証ECU20は、MAC鍵配信処理の第1段階のステップS237において鍵管理ECU10から受信した値M1,M2及びM3を、記憶部22の不揮発性メモリに格納している。
図10に示すMAC鍵配信処理の第2段階は、例えば自動車1の走行の際に駐車等によりエンジンが停止された後、所定期間内にエンジンが再始動された時に開始される。
【0152】
ステップS261からS267までが実行される。ステップS261からS267までは、
図5に示すステップS171からS177までと同じである。
【0153】
(ステップS268)鍵管理ECU10において、CPU11は、被認証ECU20から受信した乱数1と被認証ECU20の識別子ECU_IDとCMACとをHSM14へ入力する。
【0154】
(ステップS269)鍵管理ECU10において、HSM14は、CPU11から入力されたCMACを検証する。このCMACの検証では、HSM14は、自己のメモリに格納されているMAC鍵を使用する。
【0155】
HSM14は、CMACの検証結果「合格(OK)又は不合格(NG)」をCPU11へ出力する。CPU11は、HSM14から受け取ったCMACの検証結果が合格(OK)である場合には被認証ECU20の正当性の認証が合格であると判断し、一方、HSM14から受け取ったCMACの検証結果が不合格(NG)である場合には被認証ECU20の正当性の認証が不合格であると判断する。被認証ECU20の正当性の認証が合格である場合には以降の処理を実行する。一方、被認証ECU20の正当性の認証が不合格である場合には
図10の処理を終了する。被認証ECU20の正当性の認証が不合格である場合には
図9に示すMAC鍵配信処理の第1段階を行ってもよい。
【0156】
HSM14は、CPU11から入力された乱数1についてCMACを生成する。このCMACの生成では、HSM14は、自己のメモリに格納されている第2の鍵交換鍵KEY_3を使用して乱数1のCMACを生成する。
【0157】
HSM14は、新しいMAC鍵を生成し、値M1,M2及びM3を生成する。この値M1,M2及びM3は、新しいMAC鍵を、被認証ECU20のSHE−B23のRAM_KEY鍵に登録するための各値である。新しいMAC鍵には、新たに乱数を生成し、生成した乱数を新しいMAC鍵に使用する。なお、被認証ECU20のMAC鍵を新しいMAC鍵に更新しない場合には、新しいMAC鍵の生成と値M1,M2及びM3の生成とを行わない。
【0158】
HSM14は、生成したCMACと値M1,M2及びM3とをCPU11へ出力する。
【0159】
(ステップS270)鍵管理ECU10において、CPU11は、HSM14から受け取った値M1,M2及びM3とCMACとを被認証ECU20へ送信する。
【0160】
次いでステップS271からS275までが実行される。ステップS271からS275までは、
図9に示すステップS238からS242までと同じである。
【0161】
上述した
図10に示すMAC鍵配信処理の第2段階によって、新しいMAC鍵への更新が行われる。
【0162】
[第3実施形態]
図11は、本実施形態に係る自動車1に備わる車載コンピュータシステムの構成例を示す図である。
図11において、
図1の各部に対応する部分には同一の符号を付け、その説明を省略する。以下、第1実施形態と異なる部分を主に説明する。
【0163】
第3実施形態では、自動車1は通信モジュール40を備える。通信モジュール40は、無線通信ネットワークを利用して無線通信を行う。通信モジュール40は、SIM(Subscriber Identity Module)41を備える。SIM41は、無線通信ネットワークを利用するための情報が書き込まれたSIMである。通信モジュール40は、SIM41を使用することにより該無線通信ネットワークに接続して無線通信を行うことができる。
【0164】
なお、SIM41として、eSIM(Embedded Subscriber Identity Module)を使用してもよい。SIM及びeSIMは耐タンパー性を有する。SIM及びeSIMはセキュアエレメントの例である。SIM及びeSIMは、コンピュータの一種であり、コンピュータプログラムによって所望の機能を実現する。
【0165】
通信モジュール40は第1のECU10に接続される。第1のECU10は、通信モジュール40とデータを交換する。
【0166】
なお、
図11の構成では第1のECU10と通信モジュール40とを直接接続することにより第1のECU10と通信モジュール40の間でデータを交換するが、これに限定されない。例えば、通信モジュール40を自動車1に備わるインフォテイメント機器等の他の装置に接続したり又は該他の装置に備えたりし、第1のECU10が、該他の装置例えばインフォテイメント機器を介して、通信モジュール40とデータを交換してもよい。又は、自動車1の診断ポート、例えばOBD(On-board Diagnostics)ポートと呼ばれる診断ポートに接続される自動車1の外部の装置に通信モジュール40を備え、第1のECU10が、該診断ポートを介して、該診断ポートに接続された該外部の装置の通信モジュール40とデータを交換してもよい。又は、第1のECU10が、SIM41を含む通信モジュール40を備えてもよい。
【0167】
また、本実施形態では、通信モジュール40に備わるSIM41を使用するが、SIMの代わりに、耐タンパー性を有するIC(Integrated Circuit)チップを使用してもよい。例えば、ICカードに組み込まれたICチップを使用してもよい。又は、自動車1の診断ポートに接続される自動車1の外部のメインテナンスツールに備わる制御モジュールに搭載されたICチップを使用してもよい。
【0168】
図11において、第1のECU10は、CPU11と記憶部12とSHE13とを備える。第2のECU20は、CPU21と記憶部22とSHE23とを備える。
【0169】
次に、本実施形態に係るECU認証処理、鍵交換鍵配信処理、及び、MAC鍵配信処理を説明する。
【0170】
[ECU認証処理]
図12を参照して本実施形態に係るECU認証処理を説明する。
図12は、本実施形態に係るECU認証方法を示すシーケンスチャートである。通信モジュール40のSIM41には、予め、例えばSIM41の製造時などに、マスター鍵MSが設定される。SIM41は、比較的堅牢な耐タンパー性を有するので、マスター鍵MSの安全性は高い。
【0171】
鍵管理ECU10は、通信モジュール40を介してSIM41とデータを交換する。鍵管理ECU10とSIM41との間では正当性の認証が行われる。鍵管理ECU10とSIM41との間の正当性の認証が合格した場合には、鍵管理ECU10とSIM41との間のデータの交換が安全に行われる。一方、鍵管理ECU10とSIM41との間の正当性の認証が不合格になった場合には、鍵管理ECU10とSIM41との間のデータの交換は制限される。
【0172】
(ステップS301)被認証ECU20において、CPU21は、自己の被認証ECU20の識別子ECU_IDを鍵管理ECU10へ送信する。
【0173】
(ステップS302)鍵管理ECU10において、CPU11は、被認証ECU20から受信した被認証ECU20の識別子ECU_IDをSIM41へ送信する。
【0174】
(ステップS303)SIM41は、鍵管理ECU10から受信した被認証ECU20の識別子ECU_IDと、自己が保持するマスター鍵MSとを使用して、被認証ECU20の初期鍵を生成する。この初期鍵の生成では、上記の式(4)によりCMACを算出する。この算出されるCMACは、被認証ECU20の初期鍵であって被認証ECU20のSHE23のKEY_1鍵に設定されている値と同じ値である。被認証ECU20の初期鍵のことを初期鍵KEY_1と称する。SIM41は、算出したCMACつまり初期鍵KEY_1を自己のメモリに格納する。また、SIM41は、乱数randを生成する。SIM41は、生成した乱数randを鍵管理ECU10へ送信する。SIM41は、生成した乱数randを自己のメモリに格納する。
【0175】
(ステップS304)鍵管理ECU10において、CPU11は、SIM41から受信した乱数randを被認証ECU20へ送信する。
【0176】
次いでステップS305からS307までが実行される。ステップS305からS307までは、
図2に示すステップS109からS111までと同じである。
【0177】
(ステップS308)鍵管理ECU10において、CPU11は、被認証ECU20から受信した被認証ECU20の識別子ECU_IDとCMACとをSIM41へ送信する。
【0178】
(ステップS309)SIM41は、鍵管理ECU10から受信したCMACの検証を行う。このCMACの検証では、SIM41は、自己のメモリに格納されている初期鍵KEY_1を使用して、自己のメモリに格納されている乱数randについてCMACを算出する。次いで、SIM41は、該算出したCMACと、鍵管理ECU10から受信したCMACとを比較する。この比較の結果、両者が一致する場合にはCMACの検証が合格であり、一方、両者が不一致である場合にはCMACの検証が不合格である。SIM41は、該CMACの検証結果「合格(OK)又は不合格(NG)」を鍵管理ECU10へ送信する。鍵管理ECU10のCPU11は、SIM41から受信したCMACの検証結果が合格(OK)である場合には被認証ECU20の正当性の認証が合格であると判断し、一方、HSM14から受け取ったCMACの検証結果が不合格(NG)である場合には被認証ECU20の正当性の認証が不合格であると判断する。
【0179】
[鍵交換鍵配信処理]
図13を参照して本実施形態に係る鍵交換鍵配信処理を説明する。
図13は、本実施形態に係る鍵交換鍵配信方法を示すシーケンスチャートである。本実施形態では、第1実施形態と同様に、第1の鍵交換鍵(暗号化処理及び復号処理に使用される鍵)と第2の鍵交換鍵(MACの生成処理及び検証処理に使用される鍵)とを使用する。
【0180】
以下、
図13を参照して第1の鍵交換鍵を配信する場合を例に挙げて説明する。第2の鍵交換鍵を配信する場合も、第1の鍵交換鍵を配信する場合と同様である。
【0181】
(ステップS311)鍵管理ECU10において、CPU11は、鍵交換鍵の配信先の被認証ECU20の識別子ECU_IDを使用して、鍵交換鍵作成依頼(ECU_ID)をSIM41へ送信する。
【0182】
(ステップS312)SIM41は、値M1,M2及びM3を生成する。この値M1,M2及びM3は、第1の鍵交換鍵を被認証ECU20のSHE23のKEY_2鍵に登録するための各値である。SIM41は、マスター鍵MSからMEK鍵を生成する。SIM41は、乱数を生成し、生成した乱数を第1の鍵交換鍵に使用する。なお、SIM41は、マスター鍵MSから第1の鍵交換鍵を生成してもよい。SIM41は、第1の鍵交換鍵を自己のメモリに格納する。SIM41は、生成した値M1,M2及びM3を鍵管理ECU10へ送信する。
【0183】
(ステップS313)鍵管理ECU10において、CPU11は、SIM41から受信した値M1,M2及びM3を被認証ECU20へ送信する。CPU11は、SIM41から受信した値M1,M2及びM3を使用して、SHE13により、第1の鍵交換鍵をSHE13のKEY_9鍵で暗号化したデータ(暗号化第1の鍵交換鍵)を生成させる。CPU11は、SHE13によって生成された暗号化第1の鍵交換鍵を記憶部12に格納する。
【0184】
次いでステップS314からS316までが実行される。ステップS314からS316までは、
図3に示すステップS128からS130までと同じである。
【0185】
なお、2回目以降の第1の鍵交換鍵の配信には、
図3に示される第1実施形態の鍵交換鍵配信処理を適用できる。これは、2回目以降の第1の鍵交換鍵の配信では、鍵管理ECU10は、
図13に示される本実施形態の鍵交換鍵配信処理により初回の第1の鍵交換鍵の配信で設定された第1の鍵交換鍵を使用して、値M1,M2及びM3を生成できるからである。この点についても、第2の鍵交換鍵を配信する場合に同様に適用できる。
【0186】
[MAC鍵配信処理]
第3実施形態のMAC鍵の配信には、
図4及び
図5に示される第1実施形態のMAC鍵配信処理を適用できる。
【0187】
[第4実施形態]
図14は、本実施形態に係る自動車1に備わる車載コンピュータシステムの構成例を示す図である。
図11において、
図6の各部に対応する部分には同一の符号を付け、その説明を省略する。以下、第2実施形態と異なる部分を主に説明する。
【0188】
第4実施形態では、自動車1は通信モジュール40を備える。通信モジュール40は、無線通信ネットワークを利用して無線通信を行う。通信モジュール40は、SIM41を備える。SIM41は、無線通信ネットワークを利用するための情報が書き込まれたSIMである。通信モジュール40は、SIM41を使用することにより該無線通信ネットワークに接続して無線通信を行うことができる。
【0189】
なお、SIM41として、eSIMを使用してもよい。SIM及びeSIMは耐タンパー性を有する。SIM及びeSIMはセキュアエレメントの例である。SIM及びeSIMは、コンピュータの一種であり、コンピュータプログラムによって所望の機能を実現する。
【0190】
通信モジュール40は第1のECU10に接続される。第1のECU10は、通信モジュール40とデータを交換する。
【0191】
なお、
図14の構成では第1のECU10と通信モジュール40とを直接接続することにより第1のECU10と通信モジュール40の間でデータを交換するが、これに限定されない。例えば、通信モジュール40を自動車1に備わるインフォテイメント機器等の他の装置に接続したり又は該他の装置に備えたりし、第1のECU10が、該他の装置例えばインフォテイメント機器を介して、通信モジュール40とデータを交換してもよい。又は、自動車1の診断ポート、例えばOBDポートと呼ばれる診断ポートに接続される自動車1の外部の装置に通信モジュール40を備え、第1のECU10が、該診断ポートを介して、該診断ポートに接続された該外部の装置の通信モジュール40とデータを交換してもよい。又は、第1のECU10が、SIM41を含む通信モジュール40を備えてもよい。
【0192】
また、本実施形態では、通信モジュール40に備わるSIM41を使用するが、SIMの代わりに、耐タンパー性を有するICチップを使用してもよい。例えば、ICカードに組み込まれたICチップを使用してもよい。又は、自動車1の診断ポートに接続される自動車1の外部のメインテナンスツールに備わる制御モジュールに搭載されたICチップを使用してもよい。
【0193】
図14において、第1のECU10は、CPU11と記憶部12とHSM14とを備える。第2のECU20は、CPU21と記憶部22とSHE23とを備える。
【0194】
次に、本実施形態に係るECU認証処理、鍵交換鍵配信処理、及び、MAC鍵配信処理を説明する。
【0195】
[ECU認証処理]
図15を参照して本実施形態に係るECU認証処理を説明する。
図15は、本実施形態に係るECU認証方法を示すシーケンスチャートである。通信モジュール40のSIM41には、予め、例えばSIM41の製造時などに、マスター鍵MSが設定される。SIM41は、比較的堅牢な耐タンパー性を有するので、マスター鍵MSの安全性は高い。
【0196】
鍵管理ECU10は、通信モジュール40を介してSIM41とデータを交換する。鍵管理ECU10とSIM41との間では正当性の認証が行われる。鍵管理ECU10とSIM41との間の正当性の認証が合格した場合には、鍵管理ECU10とSIM41との間のデータの交換が安全に行われる。一方、鍵管理ECU10とSIM41との間の正当性の認証が不合格になった場合には、鍵管理ECU10とSIM41との間のデータの交換は制限される。
【0197】
(ステップS401)被認証ECU20において、CPU21は、自己の被認証ECU20の識別子ECU_IDを鍵管理ECU10へ送信する。
【0198】
(ステップS402)鍵管理ECU10において、CPU11は、被認証ECU20から受信した被認証ECU20の識別子ECU_IDをSIM41へ送信する。
【0199】
(ステップS403)SIM41は、鍵管理ECU10から受信した被認証ECU20の識別子ECU_IDと、自己が保持するマスター鍵MSとを使用して、被認証ECU20の初期鍵を生成する。この初期鍵の生成では、上記の式(4)によりCMACを算出する。この算出されるCMACは、被認証ECU20の初期鍵であって被認証ECU20のSHE23のKEY_1鍵に設定されている値と同じ値である。被認証ECU20の初期鍵のことを初期鍵KEY_1と称する。SIM41は、算出したCMACつまり初期鍵KEY_1を自己のメモリに格納する。また、SIM41は、乱数randを生成する。SIM41は、生成した乱数randを鍵管理ECU10へ送信する。SIM41は、生成した乱数randを自己のメモリに格納する。
【0200】
(ステップS404)鍵管理ECU10において、CPU11は、SIM41から受信した乱数randを被認証ECU20へ送信する。
【0201】
次いでステップS405からS407までが実行される。ステップS405からS407までは、
図7に示すステップS205からS207までと同じである。
【0202】
(ステップS408)鍵管理ECU10において、CPU11は、被認証ECU20から受信した被認証ECU20の識別子ECU_IDとCMACとをSIM41へ送信する。
【0203】
(ステップS409)SIM41は、鍵管理ECU10から受信したCMACの検証を行う。このCMACの検証では、SIM41は、自己のメモリに格納されている初期鍵KEY_1を使用して、自己のメモリに格納されている乱数randについてCMACを算出する。次いで、SIM41は、該算出したCMACと、鍵管理ECU10から受信したCMACとを比較する。この比較の結果、両者が一致する場合にはCMACの検証が合格であり、一方、両者が不一致である場合にはCMACの検証が不合格である。SIM41は、該CMACの検証結果「合格(OK)又は不合格(NG)」を鍵管理ECU10へ送信する。鍵管理ECU10のCPU11は、SIM41から受信したCMACの検証結果が合格(OK)である場合には被認証ECU20の正当性の認証が合格であると判断し、一方、HSM14から受け取ったCMACの検証結果が不合格(NG)である場合には被認証ECU20の正当性の認証が不合格であると判断する。
【0204】
[鍵交換鍵配信処理]
図16、
図17を参照して本実施形態に係る鍵交換鍵配信処理を説明する。
図16、
図17は、本実施形態に係る鍵交換鍵配信方法を示すシーケンスチャートである。本実施形態では、第2実施形態と同様に、第1の鍵交換鍵(暗号化処理及び復号処理に使用される鍵)と第2の鍵交換鍵(MACの生成処理及び検証処理に使用される鍵)とを使用する。
【0205】
以下、
図16、
図17を参照して第1の鍵交換鍵を配信する場合を例に挙げて説明する。第2の鍵交換鍵を配信する場合も、第1の鍵交換鍵を配信する場合と同様である。初めに
図16を参照して初回の第1の鍵交換鍵の配信について説明する。
【0206】
(ステップS411)鍵管理ECU10において、CPU11は、鍵交換鍵の配信先の被認証ECU20の識別子ECU_IDを使用して、鍵交換鍵作成依頼(ECU_ID)をSIM41へ送信する。
【0207】
(ステップS412)SIM41は、値M1,M2及びM3を生成する。この値M1,M2及びM3は、第1の鍵交換鍵を被認証ECU20のSHE23のKEY_2鍵に登録するための各値である。SIM41は、マスター鍵MSからMEK鍵を生成する。SIM41は、乱数を生成し、生成した乱数を第1の鍵交換鍵に使用する。なお、SIM41は、マスター鍵MSから第1の鍵交換鍵を生成してもよい。SIM41は、第1の鍵交換鍵を自己のメモリに格納する。SIM41は、生成した値M1,M2及びM3を鍵管理ECU10へ送信する。
【0208】
(ステップS413)鍵管理ECU10において、CPU11は、SIM41から受信した値M1,M2及びM3を被認証ECU20へ送信する。CPU11は、SIM41から受信した値M1,M2及びM3を使用して、HSM14に、第1の鍵交換鍵を取得させる。HSM14は、第1の鍵交換鍵を自己のメモリに格納する。
【0209】
次いでステップS414からS416までが実行される。ステップS414からS416までは、
図8に示すステップS214からS216までと同じである。
【0210】
なお、2回目以降の第1の鍵交換鍵の配信には、
図17に示される鍵交換鍵配信処理を適用できる。これは、2回目以降の第1の鍵交換鍵の配信では、鍵管理ECU10は、
図16に示される本実施形態の鍵交換鍵配信処理により初回の第1の鍵交換鍵の配信で設定された第1の鍵交換鍵を使用して、値M1,M2及びM3を生成できるからである。この点についても、第2の鍵交換鍵を配信する場合に同様に適用できる。
図17を参照して2回目以降の第1の鍵交換鍵の配信について説明する。
【0211】
(ステップS421)鍵管理ECU10において、CPU11は、鍵交換鍵作成依頼をHSM14へ入力する。
【0212】
(ステップS422)鍵管理ECU10において、HSM14は、値M1,M2及びM3を生成する。この値M1,M2及びM3は、新しい第1の鍵交換鍵を被認証ECU20のSHE23のKEY_2鍵に登録するための各値である。HSM14は、乱数を生成し、生成した乱数を新しい第1の鍵交換鍵に使用する。HSM14は、新しい第1の鍵交換鍵を自己のメモリに格納する。HSM14は、生成した値M1,M2及びM3をCPU11へ出力する。
【0213】
(ステップS423)鍵管理ECU10において、CPU11は、HSM14から受け取った値M1,M2及びM3を被認証ECU20へ送信する。
【0214】
次いでステップS424からS426までが実行される。ステップS424からS426までは、
図8に示すステップS214からS216までと同じである。
【0215】
[MAC鍵配信処理]
第4実施形態のMAC鍵の配信には、
図9及び
図10に示される第2実施形態のMAC鍵配信処理を適用できる。
【0216】
上述した各実施形態によれば、第1のECU10及び第2のECU20に備わる暗号処理チップ(SHE又はHSM)に応じた暗号処理手順を実行することができる。これにより、自動車1の車載制御システムにおけるデータの安全性を向上させることができるという効果が得られる。
【0217】
[鍵の管理方法]
鍵の管理方法の例について説明する。
【0218】
(鍵の管理単位)
(1)初期鍵
(1−a)ECU単位
ECU毎に異なる初期鍵を持つ場合、もしある初期鍵が漏洩したときの影響は小さい。
一方、個々のECUの初期鍵を鍵管理ECU10と共有することになるので、鍵の管理コストは大きくなる。
(1−b)全ECU共通
全ECUで共通の初期鍵を持つ場合、もし初期鍵が漏洩したときの影響は大きい。一方、鍵の管理コストは小さい。
【0219】
(2)鍵交換鍵
(2−a)ECU単位
ECU毎に異なる鍵交換鍵を持つ場合、ECU毎に個別の鍵交換鍵を使用してMAC鍵を配信することになるので、MAC鍵の配信に要する時間は長くなる。一方、もし鍵交換鍵が漏洩したときの影響は小さい。
(2−b)全ECU共通
全ECUで共通の鍵交換鍵を持つ場合、一つの自動車内では同じ鍵交換鍵を使用して全ECUに共通にMAC鍵を配信できるので、MAC鍵の配信に要する時間は短くできる。
一方、もし鍵交換鍵が漏洩したときの影響は大きい。
(2−c)自動車単位
自動車毎に異なる鍵交換鍵を持つ場合、一つの自動車内では同じ鍵交換鍵を使用して全ECUに共通にMAC鍵を配信できるので、MAC鍵の配信に要する時間は短くできる。
また、もし鍵交換鍵が漏洩したときの影響は、一自動車の範囲に留まるので小さい。
【0220】
(3)MAC鍵
(3−a)全ECU共通
全ECUで共通のMAC鍵を持つ場合、もしMAC鍵が漏洩したときの影響は大きい。
(3−b)自動車単位
自動車毎に異なるMAC鍵を持つ場合、もしMAC鍵が漏洩したときの影響は、一自動車の範囲に留まるので小さい。
【0221】
(初期鍵の生成方法)
初期鍵はECUの正当性の認証に使用される。このため、初期鍵が漏洩したときの影響を考慮すると、ECU単位で初期鍵を管理できるように、ECU毎に異なる初期鍵を持つことが好ましい。この場合、鍵管理ECU10と各被認証ECU20との初期鍵の共有方法が課題である。以下、その課題を解決するための初期鍵生成方法の例を説明する。
【0222】
マスター鍵(MASTER_SECRET:MS)を使用した初期鍵の生成方法について説明する。
初期鍵は、マスター鍵MSと被認証ECUの識別子ECU_IDとを使用して次式により算出される。
初期鍵 = ダイジェスト(MS,ECU_ID)
ダイジェストは例えばCMACである。又は、ダイジェストは例えば排他的論理和である。この初期鍵は、ECU毎に異なる値になる。また、マスター鍵MSが鍵管理ECU10やSIM41で安全に保管されることにより、初期鍵の漏洩を防ぐことができる。例えば鍵管理ECU10がマスター鍵MSを安全に保管することにより、鍵管理ECU10は、被認証ECU20の識別子ECU_IDを取得して該被認証ECU20の初期鍵を生成し、該生成した初期鍵を該被認証ECU20と安全に共有できる。
【0223】
初期鍵書込み装置は、ECUベンダに設けられる。初期鍵書込み装置は、マスター鍵MSを備え、該マスター鍵MSと、入力された被認証ECU20の識別子ECU_IDとを使用して該被認証ECU20の初期鍵を生成し、生成した初期鍵を該被認証ECU20へ書き込む。初期鍵書込み装置において、マスター鍵MSは安全に保管される。
【0224】
マスター鍵書込み装置は、マスター鍵MSが設定される鍵管理ECU10のECUベンダ、マスター鍵MSが設定されるSIM41のSIMベンダ、及び、マスター鍵MSが設定されるICチップを備えるICカード等のベンダに設けられる。マスター鍵書込み装置は、マスター鍵MSを生成し、生成したマスター鍵MSを被書込み装置へ書き込む。マスター鍵書込み装置において、マスター鍵MSの生成及び保管は安全に行われる。
【0225】
マスター鍵MSは、例えば次式により算出される。
MS = A xor B xor C
但し、「A xor B」は値Aと値Bの排他的論理和である。
マスター鍵書込み装置において、各値A,B,Cが別々に入力されることをマスター鍵MSの生成条件に含める。例えば、マスター鍵書込み装置は、正当性認証済みの異なるユーザIDよって各値A,B,Cが別々に入力された場合にのみ、マスター鍵MSを生成する。これにより、マスター鍵MSの漏洩を抑制することができる。なお、マスター鍵MSの算出式は、上記の排他的論理和演算に限定されない。マスター鍵MSの算出式としては、複数の値、例えば値A,B及びCが全て得られた場合にのみ生成できる算出式であればよい。
【0226】
また、ECUベンダは、ECUメーカからECUの識別子ECU_IDのリストを取得し、各識別子ECU_IDに対応する初期鍵のリストを生成し、生成した初期鍵のリストをECUメーカへ提供してもよい。
【0227】
また、上述した初期鍵生成方法の例では、もし初期鍵が漏洩すると、漏洩した初期鍵を不正にECUに設定することによって被認証ECU20のなりすましが可能である。このため、自動車1に搭載された後に一度認証された被認証ECU20の初期鍵は該被認証ECU20から消去するようにしてもよい。これにより、例えば第2のECU20の交換によって自動車1から取り外された第2のECU20から初期鍵が漏洩することを防止できる。また、被認証ECU20の認証実績を管理する管理サーバを設け、管理サーバによって被認証ECU20の認証状況を把握できるようにしてもよい。
【0228】
[第5実施形態]
図18は、本実施形態に係る鍵生成装置100の構成例を示す図である。
図18において、鍵生成装置100は、入力部101とダイジェスト算出部102と出力部103とマスター鍵記憶部104とを備える。入力部101は、鍵の生成に使用される情報を入力する。マスター鍵記憶部104は、鍵の生成に使用されるマスター鍵を記憶する。ダイジェスト算出部102は、入力部101により入力された情報と、マスター鍵記憶部104に記憶されているマスター鍵とを使用して、ダイジェストを算出する。出力部103は、ダイジェスト算出部102により算出されたダイジェスト(鍵)を出力する。
【0229】
本実施形態では、鍵生成装置100は、次式により鍵を算出する。
鍵=ダイジェスト(マスター鍵、ECU識別子、N_key)
但し、マスター鍵は、マスター鍵記憶部104に格納されているマスター鍵である。ECU識別子は、鍵を格納する先のECUの識別子である。N_keyは、鍵の種類を表す変数である。ダイジェストとして、例えば、ハッシュ(hash)関数により算出される値、排他的論理和演算により算出される値、又は、CMACなどが挙げられる。
【0230】
次に
図19を参照して本実施形態に係る鍵生成方法を説明する。
図19は、本実施形態に係る鍵生成方法の一例を示すシーケンスチャートである。
図19には、第2のECU20のSHE23に対して、初期設定する鍵(初期鍵)を生成する手順の一例が示されている。ここでは、第2のECU20のSHE23に対して、上記の式(2)で示される値のうち、値K
MASTER_ECU_KEYをMEK鍵に初期設定し、値K
BOOT_MAC_KEYをBMK鍵に初期設定し、値K
KEY<N>をKEY_N鍵に初期設定する。鍵生成装置100のマスター鍵記憶部104は、マスター鍵MSを予め格納している。
【0231】
図19の鍵生成方法の手順は、例えば、自動車の製造工場において、自動車の製造工程で自動車1に搭載された第2のECU20に適用してもよい。ここでは、一例として、鍵生成装置100は、有線又は無線により自動車1と通信を行い、該自動車1に搭載された第2のECU20とデータを送受する。
【0232】
(ステップS1000)鍵生成装置100の入力部101は、変数N_keyの指定を受け付ける。この例では、MEK鍵を表す変数N_keyは文字列C
MASTER_ECU_KEYである。また、BMK鍵を表す変数N_keyは文字列C
BOOT_MAC_KEYである。また、KEY_N鍵を表す変数N_keyは文字列C
KEY_Nである。変数N_keyの指定は一つでもよく、又は複数でもよい。鍵生成装置100は、指定された変数N_keyについての鍵を生成する。なお、鍵生成装置100に対して、生成する鍵の種類の変数N_keyを予め指定しておいてもよい。
【0233】
(ステップS1001)鍵生成装置100の入力部101は、初期鍵を格納する先の第2のECU20のECU識別子ECUIDを取得する。なお、鍵生成装置100に対して、初期鍵を格納する先の第2のECU20のECU識別子ECUIDを予め設定しておいてもよい。
【0234】
(ステップS1002)鍵生成装置100のダイジェスト算出部102は、マスター鍵記憶部104に格納されているマスター鍵MSと、初期鍵を格納する先の第2のECU20のECU識別子ECUIDと、指定された変数N_keyとを使用して、「ダイジェスト(MS、ECUID、N_key)」を算出する。
【0235】
(ステップS1003)鍵生成装置100の出力部103は、ダイジェスト算出部102が算出した「ダイジェスト(MS、ECUID、N_key)」を、当該変数N_keyが表す種類の初期鍵として出力する。第2のECU20は、その出力された初期鍵を受信する。
【0236】
(ステップS1004)第2のECU20は、鍵生成装置100から受信した初期鍵を、SHE23の該当する種類の鍵としてSHE23に格納する。
【0237】
なお、第1のECU10のSHE13に対しても、上述した第2のECU20と同様に、初期鍵の生成及び設定を行ってもよい。
【0238】
第5実施形態によれば、変数N_keyを変えることによって、同じマスター鍵とECU識別子から複数の種類の鍵を柔軟に生成することができる。
【0239】
以上、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【0240】
上述した実施形態では、車両として自動車を例に挙げたが、原動機付自転車や鉄道車両等の自動車以外の他の車両にも適用可能である。
【0241】
また、上述した各装置の機能を実現するためのコンピュータプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行するようにしてもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものであってもよい。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、フラッシュメモリ等の書き込み可能な不揮発性メモリ、DVD(Digital Versatile Disc)等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。
【0242】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(例えばDRAM(Dynamic Random Access Memory))のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。
さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。