以下において、図面を参照しながら、本開示を実施するための複数の形態を説明する。各形態において、先行する形態で説明した事項に対応する部分には同一の参照符号を付して重複する説明を省略する場合がある。各形態において、構成の一部のみを説明している場合は、構成の他の部分については先行して説明した他の形態を参照し適用することができる。
(第1実施形態)
図1~図5を用いて、本実施形態のECU11に関して説明する。本実施形態では、電子制御装置をECU11に適用した例を採用する。ECU11は、例えば車両に搭載されて、各種制御を実行する装置である。ECU11は、メインCPU1が実行する制御用のプログラムの書き換えが可能に構成されている。つまり、ECU11は、制御用のプログラムのリプログラミングが可能に構成されている。制御用のプログラムは、車載機器を制御するためのプログラムである。以下においては、制御用のプログラムを制御プログラムとも称する。制御プログラムは、特許請求の範囲におけるプログラムに相当する。また、制御プログラムは、制御ソフトともいえる。
本実施形態では、一例として、書換ツール21(RWT)から書込データを受信するECU11を採用している。書込データ(wd1~wd3)は、ECU11のROM3に記憶されている制御プログラムを更新するデータである。ROM3に記憶されている制御プログラムは、書込データに書き換えられるといえる。このように、書込データは、更新される新たな制御プログラムを構成する少なくとも一部のデータである。なお、ROM3に記憶されている制御プログラムは、全体が複数の書込データで書き換えられてもよく、一部が複数の書込データで書き換えられてもよい。
新たな制御プログラムは、書換ツール21から受信した複数の書込データを含んでいる。よって、ECU11は、リプログラミングするために複数の書込データを受信する。なお、リプログラミングは、簡略化してリプロやリプログとも記載する。
このように、書換ツール21は、ECU11に記憶されている制御プログラムをリプログするためのツールである。書換ツール21は、有線によってECU11と電気的に接続される。また、書換ツール21は、ディーラや工場などによって、ECU11に接続される。
<構成>
図1を用いて、ECU11の構成に関して説明する。ECU11は、メインCPU1、RAM2、ROM3、通信装置4、セキュリティモジュール5を備えている。なお、図1では、メインCPU1をMCPU、通信装置4をCOM、セキュリティモジュール5をHSMと記載している。
メインCPU1は、第1処理装置に相当する。メインCPU1は、RAM2やROM3に記憶されたプログラムを実行する。メインCPU1は、プログラムを実行することで各種演算を実行し、その演算結果を出力する。また、メインCPU1は、演算結果を一時的にRAM2に記憶しつつ演算を行う。本開示では、メインCPU1がRAM2に記憶されたプログラムを実行するモードをRAM実行モード、メインCPU1がROM3に記憶されたプログラムを実行するモードをROM実行モードと称する。
RAM2は、第2記憶装置に相当する。RAM2は、演算結果に加えて、受信した書込データを一時的に記憶される。また、RAM2は、後ほど説明するリプログソフトが一時的に記憶される。
ROM3は、第1記憶装置に相当する。ROM3としては、EEPROMやフラッシュROMなどの不揮発性半導体記憶装置を採用できる。ROM3は、電気的に内容の消去や書き換えができる。また、ROM3は、所定単位で消去や書き換えができる。
ROM3は、プログラムとして、制御プログラムとリプログ用のリプログソフト(rps)とが記憶されている。ROM3は、書き換え可能に制御プログラムが記憶されている。ROM3に記憶されている制御プログラムは、書換ツール21から受信した書込データに書き換えられる。
ROM3は、ROM3への書き込み処理中に、ROM3へのアクセス制限がかかる。つまり、ROM3へのリードアクセスができない。よって、メインCPU1は、ROM3への書き込み処理中にROM実行モードで動作することができない。しかしながら、メインCPU1は、ROM3への書き込み処理中であっても、RAM実行モードで動作できる。また、セキュアCPU51は、ROM3への書き込み処理中にROM3にアクセスできない。書き込みは、格納や記憶ともいえる。
通信装置4は、受信装置に相当する。通信装置4は、書換ツール21と通信可能に構成されている。通信装置4は、ROM3に記憶されたプログラムを更新する複数の書込データを受信する。
セキュリティモジュール5は、セキュアCPU51とセキュアメモリ52を備えている。なお、図1では、セキュアCPU51をSCPU、セキュアメモリ52をSMDと記載している。セキュリティモジュール5は、暗号サービスを実行する装置である。セキュリティモジュール5は、ハードウェアセキュリティモジュールとも称することができる。
セキュアメモリ52は、RAMとROMなどを含んでいる。セキュアメモリ52は、セキュアCPU51が実行するプログラムが記憶されている。このプログラムは、セキュアメモリ52のROMに記憶されている。また、プログラムは、セキュアメモリ52のROMからRAMに展開して、RAM上で実行することも可能である。
例えば、セキュアメモリ52のROMは、ROM3と同じ不揮発性半導体記憶装置における、ROM3とは異なる領域を用いることができる。よって、セキュアメモリ52のROMは、上記と同様にアクセス制限がかかる。
セキュアCPU51は、第2処理装置に相当する。セキュアCPU51は、メインCPU1とは独立して処理を実行できる。セキュアCPU51は、セキュアメモリ52に記憶されているプログラム(暗号処理ソフト、cps)を実行することで、暗号サービスの演算処理を実行する。セキュアCPU51は、暗号サービスの演算処理の一例として、受信した書込データの改ざん検知処理を行う。なお、暗号サービスとしては、他のECUの認証や外部機器の認証なども含まれる。また、図5などでは、図面をわかりやすくするために、ROM3とセキュアメモリ52をまとめて図示している。
セキュアCPU51は、書換ツール21から受信した、新しい書込データと鍵から生成された認証子を用いて改ざん検知処理を行う。セキュアCPU51は、受信した書込データと鍵を使って認証子を演算する。本実施形態では、一例として、受信してROM3に記憶された書込データと鍵とを使って認証子の演算を行う例を採用する。なお、ECU11は、例えば、ECU11の出荷前に予めROM3に鍵が保存される。
このとき、演算に用いる鍵は、秘密鍵であればセキュアメモリ52上に配置される。一方、公開鍵であれば、セキュアメモリ52ではないROM3やRAM2に配置することもできる。
また、セキュアCPU51は、各書込データ単位で認証子の演算を進めることができる。なぜなら、認証子の演算処理は、使用する暗号アルゴリズムの処理サイズ(処理ブロック)単位で処理分割が可能であるため。
そして、セキュアCPU51は、受信した認証子と、演算で得られた認証子とを比較する。つまり、セキュアCPU51は、受信した認証子と、演算で得られた認証子とが一致するか否かを確認する。セキュアCPU51は、一致した場合に改ざんされていないと判定し、一致しなかった場合に改ざんされていると判定する。なお、改ざん検知の方法は、これに限定されない。本開示は、認証子の代わりにデジタル署名を用いることもできる。
<処理動作>
図2~図5を用いて、ECU11の処理動作に関して説明する。まず、図2を用いてメインCPU1の処理動作に関して説明する。メインCPU1は、書換ツール21から通信許可の要求をうけると図2のフローチャートに示す処理(書き換え処理)を開始する。また、メインCPU1は、書換ツール21がECU11と通信可能に接続されたタイミングや、書換ツール21によってROM3のプログラムが消去されたタイミングで図2のフローチャートに示す処理を開始してもよい。
なお、図2のフローチャートを開始するタイミングでは、ROM3は、書換ツール21からの指示によって制御プログラムが消去されているものとする。よって、図5に示すように、ROM3の制御プログラムが記憶される領域は、ブランク領域(bla)となっている。
メインCPU1は、ROM実行モードでステップS10~S13を行う。つまり、メインCPU1は、ROM3に記憶されているリプログソフトを実行することで、ステップS10~S13を行う。
ステップS10では、書込データを受信したか否かを判定する(受信処理)。メインCPU1は、書換ツール21から送信された書込要求データを、通信装置4を介して受信したか否かによって判定する。書込要求データには、書込データも含まれている。メインCPU1は、書込要求データを受信したと判定した場合、書込データを受信したとみなしてステップS11へ進む。メインCPU1は、書込要求データを受信したと判定しなかった場合、書込データを受信していないとみなしてステップS10を繰り返す。
なお、書換ツール21は、各書込データの書き込みを要求するたびに、書込要求データを送信する。よって、書換ツール21は、全書込データのそれぞれの書き込みを要求するために、書込要求データを複数回送信する。このため、メインCPU1は、書込要求データを複数回受信する。
ステップS11では、受信した書込データをRAMに格納する(受信処理)。メインCPU1は、通信装置4を介して受信した書込データをRAM2に格納する。
ステップS12では、所定サイズ分の書込データの受信が完了したか否かを判定する(受信処理)。メインCPU1は、RAM2への書き込みサイズをカウントすることで、所定サイズ分の書込データの受信が完了したか否かを判定する。メインCPU1は、所定サイズ分の書込データの受信が完了したと判定した場合、ステップS13へ進む。メインCPU1は、所定サイズ分の書込データの受信が完了したと判定しなかった場合、ステップS11へ戻る。
このとき、図4、図5に示すように、メインCPU1は、ROM実行モードでステップS10~S12を行う。そして、メインCPU1は、タイミングt1、t3、t5で書込データの受信処理(rp)を行う。
タイミングt1では、メインCPU1は、所定サイズ分の第1書込データwd1を受信して(tf1)、受信した第1書込データwd1をRAM2に格納する。タイミングt3では、メインCPU1は、所定サイズ分の第2書込データwd2を受信して(tf2)、受信した第2書込データwd2をRAM2に格納する。タイミングt5では、メインCPU1は、所定サイズ分の第3書込データwd3を受信して(tf3)、受信した第3書込データwd3をRAM2に格納する。
各書込データwd1~wd3は、それぞれ所定サイズ分の書込データである。また、本実施形態では、代表例として、三つの書込データwd1~wd3を採用している。しかしながら、本開示は、これに限定されず、複数の書込データであれば採用できる。
ステップS13では、要求未送信であるか、または、完了通知を受信したか否かを判定する。メインCPU1は、セキュアCPU51へ改ざん検知処理の演算開始の要求を未送信であると判定した場合、ステップS14へ進む。一方、メインCPU1は、セキュアCPU51へ改ざん検知処理の演算開始要求を未送信であると判定しなかった場合、ステップS13を繰り返す。または、メインCPU1は、前回要求分の演算完了通知を受信したと判定した場合、ステップS14へ進む。メインCPU1は、前回要求分の演算完了通知を受信したと判定しなった場合、ステップS13を繰り返す。なお、前回要求とは、セキュアCPU51に対する前回の改ざん検知処理の演算開始要求である。
メインCPU1は、RAM実行モードでステップS14~S15を行う。つまり、メインCPU1は、RAM2に展開されているリプログソフトを実行することで、ステップS14~S15を行う。メインCPU1は、ステップS13とステップS14との間にRAM実行モードへ移行する。また、メインCPU1は、ステップS15とステップS16との間にROM実行モードへ移行する。
ステップS14では、ROMに書込データを書き込む(書き込み処理)。メインCPU1は、RAM2に記憶されている書込データをROM3に書き込む。
ステップS15では、書込データの書き込みが完了したか否かを判定する(書き込み処理)。メインCPU1は、ROM3への書き込みサイズをカウントすることで、所定サイズ分の書込データのROM3への書き込みが完了したか否かを判定する。メインCPU1は、所定サイズ分の書込データの書き込みが完了したと判定した場合、ROM3への書き込みが完了したとみなしてステップS16へ進む。一方、メインCPU1は、所定サイズ分の書込データの書き込みが完了したと判定しなった場合、ROM3への書き込みが完了したとみなさずステップS15を繰り返す。
このとき、図4、図5に示すように、メインCPU1は、RAM実行モードでステップS14、S15を行う。そして、メインCPU1は、タイミングt2、t4、t6で書込データの書き込み処理(wp)を行う。タイミングt2では、メインCPU1は、RAM2に記憶されている第1書込データwd1をROM3のブランク領域に格納する。タイミングt4では、メインCPU1は、RAM2に記憶されている第2書込データwd2をROM3のブランク領域に格納する。タイミングt6では、メインCPU1は、RAM2に記憶されている第3書込データwd3をROM3のブランク領域に格納する。
ステップS16では、セキュアCPUへ改ざん検知処理の演算開始を要求する。メインCPU1は、セキュアCPU51へ改ざん検知処理の演算開始要求(cr1、cr2)を行う。詳述すると、メインCPU1は、RAM2に記憶された書込データをROM3に記憶すると、セキュアCPU51に改ざん検知処理の実行を要求する。つまり、メインCPU1は、全ての書込データをROM3に格納したタイミングではなく、所定サイズ分の書込データをROM3に格納したタイミングで演算開始要求を送信する。これは、セキュアCPU51に対して、改ざん検知処理の演算を複数回にわけて実行させるためである。また、これは、メインCPU1による書き換え処理と並行して、セキュアCPU51に対して、改ざん検知処理の演算を実行させるためである。
図4、図5の例では、メインCPU1は、タイミングt2で第1書込データwd1をROM3のブランク領域に格納すると、セキュアCPU51へ改ざん検知処理の演算開始要求(cr1)を行う。また、メインCPU1は、タイミングt4で第2書込データwd2をROM3のブランク領域に格納すると、セキュアCPU51へ改ざん検知処理の演算開始要求(cr2)を行う。
ステップS17では、書換ツールに結果を応答する。メインCPU1は、書換ツール21から送信された書込要求データに対する結果を応答する。つまり、メインCPU1は、書込要求データに対する結果として、書込データwd1~wd3のROM3への書き込み完了を示す情報(wc1、wc2)を書換ツール21に送信する。また、メインCPU1は、全ての書込データをROM3に格納したタイミングではなく、所定サイズ分の書込データをROM3に格納完了したタイミングで書き込み完了を示す情報を送信する。なお、メインCPU1は、書込データの受信、書込データの書き込み処理、改ざん検知処理の演算開始要求、書き込み完了を示す情報の送信までの一連の処理を必要に応じて繰り返す。しかしながら、図4、図5では、その一部のみを図示している。
図4の例では、メインCPU1は、タイミングt2での第1書込データwd1の書き込み処理が完了すると、書き込み完了を示す情報(wc1)を書換ツール21に送信する。また、メインCPU1は、タイミングt4での第2書込データwd2の書き込み処理が完了すると、書き込み完了を示す情報(wc2)を書換ツール21に送信する。
ステップS18では、全書込データの書き込みが完了したか否かを判定する。メインCPU1は、書換ツール21から送信されるすべての書込データのROM3への書き込みが完了したか否かを判定する。メインCPU1は、ROM3に書き込まれた制御プログラムのサイズによって、書き込みが完了したか否かを判定する。つまり、メインCPU1は、ROM3に書き込まれた制御プログラムのサイズが予め決められた完了サイズに達している場合に完了したと判定する。また、メインCPU1は、ROM3に書き込まれた制御プログラムのサイズが完了サイズに達していない場合に完了していないと判定する。
そして、メインCPU1は、書き込みが完了したと判定した場合、図2のフローチャートを終了する。一方、メインCPU1は、書き込みが完了したと判定しなかった場合、ステップS10へ戻る。
このように、メインCPU1は、書込データを通信装置4で受信してRAM2に記憶し、RAM2に記憶された書込データをROM3に記憶する処理を、全ての書込データを対象として順番に行う(書き換え処理)。言い換えると、メインCPU1は、全ての書込データの書き込みが完了するまで、受信処理と書き込み処理を交互に行う。
なお、全ての書込データとは、ROM3に記憶されている制御プログラムの全体もしくは一部を更新するための複数の書込データである。また、全ての書込データとは、全ての書き換え対象の書込データである。
次に、図3を用いて、セキュアCPU51の処理動作に関して説明する。セキュアCPU51は、所定時間ごとに図3のフローチャートに示す処理を開始する。
ステップS20では、メインCPUから演算開始要求を受信したか否かを判定する。セキュアCPU51は、メインCPU1がステップS16で送信した改ざん検知処理の演算開始要求を受信したか否かを判定する。セキュアCPU51は、演算開始要求を受信したと判定した場合、ステップS21へ進む。セキュアCPU51は、演算開始要求を受信したと判定しなかった場合、ステップS20を繰り返す。
ステップS21では、指定の暗号サービスを行う。セキュアCPU51は、暗号サービスの演算処理の一例として、受信した書込データの改ざん検知処理を行う。セキュアCPU51は、ROM3にアクセスして、ROM3に新たに記憶された書込データを対象に改ざん検知処理の演算処理(cp)を行う。
上記のように、メインCPU1は、RAM2に記憶された書込データをROM3に記憶すると、演算開始要求を送信する。このため、セキュアCPU51は、メインCPU1が次の書込データを通信装置4で受信してRAM2に記憶している際に、改ざん検知処理を行うことになる。つまり、セキュアCPU51は、メインCPU1の受信処理と並行して、改ざん検知処理の演算処理を行う。また、セキュアCPU51は、すでにROM3に記憶された改ざん検知処理が行われていない書込データを対象に改ざん検知処理を行う。
図4、図5の例では、セキュアCPU51は、タイミングt3でメインCPU1が第2書込データwd2の受信処理を行っている際に、第1書込データwd1に対する改ざん検知処理の演算処理を行う。また、セキュアCPU51は、タイミングt5でメインCPU1が第3書込データの受信処理を行っている際に、第2書込データwd2に対する改ざん検知処理の演算処理を行う。
ステップS22では、暗号サービスが完了したか否かを判定する。セキュアCPU51は、改ざん検知処理の演算処理が完了したと判定した場合、暗号サービスが完了したとみなしてステップS23へ進む。一方、セキュアCPU51は、改ざん検知処理の演算処理が完了したと判定しなった場合、暗号サービスが完了していないとみなしてステップS22を繰り返す。
ステップS23では、メインCPUへ演算完了通知を送信する。セキュアCPU51は、メインCPU1に対して演算完了通知を送信する。図4に示すように、セキュアCPU51は、第1書込データに対する改ざん検知処理の演算処理が完了すると演算完了通知を送信する(cc1)。また、セキュアCPU51は、第2書込データに対する改ざん検知処理の演算処理が完了すると演算完了通知を送信する(cc2)。
<効果>
このように、ECU11は、メインCPU1による書き換え処理と並行して、セキュアCPU51が改ざん検知処理を行う。このため、ECU11は、メインCPU1による書き換え処理が完了した後に、セキュアCPU51が改ざん検知処理を行う場合よりも、リプログラミングの時間を短縮できる。特に、ECU11は、書込データの書き込み処理<書込データの受信処理、書込データの書き込み処理<改ざん検知処理の演算処理の場合に、効率的にリプログラミングの時間を短縮できる。なお、リプログラミングの時間は、リプログラミングを介して、全ての書込データに対する改ざん検知処理の演算処理が完了するまでの時間である。
本実施形態では、上記のように、ROM3への書き込み処理中にアクセス制限がかかるROM3を採用している。しかしながら、ECU11は、メインCPU1による書き込み処理と、セキュアCPU51による改ざん検知処理の演算処理とが時間的に重ならない。このため、ECU11は、ROM3へのアクセス競合を回避できる。さらに、ECU11は、セキュアCPU51による改ざん検知処理の演算処理をROM実行モードとすることができる。この場合、セキュアCPU51は、セキュアメモリ52のROMに記憶された暗号処理ソフトを実行することになる。つまり、セキュアCPU51は、暗号処理ソフトをセキュアメモリ52のRAMに展開して実行する必要がない。よって、ECU11は、セキュアCPU51側のプログラム展開先のRAMのサイズが小さくても実施できる。
また、ECU11は、セキュアCPU51によって改ざん検知処理の演算処理を行うため、セキュリティ性を高く保つことができる。
以上、本開示の好ましい実施形態について説明した。しかしながら、本開示は、上記実施形態に何ら制限されることはなく、本開示の趣旨を逸脱しない範囲において、種々の変形が可能である。以下に、本開示のその他の形態として、第2実施形態、第3実施形態に関して説明する。上記実施形態および第2実施形態、第3実施形態は、それぞれ単独で実施することも可能であるが、適宜組み合わせて実施することも可能である。本開示は、実施形態において示された組み合わせに限定されることなく、種々の組み合わせによって実施可能である。
(第2実施形態)
図6~図8を用いて、第2実施形態のECUに関して説明する。本実施形態のECUは、基本的な構成がECU11と同じである。このため、本実施形態では、ECU11と同じ符号を用いる。また、セキュアCPU51の処理動作は、上記実施形態と同様である。
本実施形態のECU11は、ROM3の構成上、書き込み処理中にリプログソフトをRAM実行モードで動作させる必要がない点が、上記実施形態のメインCPU1と異なる。よって、本実施形態のECU11は、実行モードに制約がないといえる。また、これに伴って、本実施形態のメインCPU1は、各処理の順番が、上記実施形態のメインCPU1と異なる。
図6を用いてメインCPU1の処理動作に関して説明する。メインCPU1は、上記実施形態と同様、書換ツール21から通信許可の要求などに応じて図6のフローチャートに示す処理(書き換え処理)を開始する。メインCPU1は、ROM実行モードで各ステップS30~S38を行う。
メインCPU1は、各ステップS30~S36の処理順序が上記実施形態と異なる。ステップS30はステップS13と同じである。ステップS31はステップS10と同じである。ステップS32はステップS11と同じである。ステップS33はステップS12と同じである。ステップS34はステップS16と同じである。ステップS35はステップS14と同じである。ステップS36はステップS15と同じである。また、ステップS37、S38は、ステップS17、S18と同じである。
メインCPU1は、ステップS34で、セキュアCPU51へ改ざん検知処理の演算開始要求(cr1、cr2)を行う。また、メインCPU1は、ステップS31~S33で受信処理を行った後にステップS34を行う。つまり、メインCPU1は、各書込データwd1~wd3を通信装置4で受信してRAM2に記憶すると、セキュアCPU51に改ざん検知処理の実行を要求する。
しかしながら、メインCPU1は、最初に第1書込データwd1を通信装置4で受信してRAM2に記憶したタイミングでは改ざん検知処理の実行を要求しない。これは、このタイミングでは、ROM3に書込データが記憶されていないためである。
図7、図8の例では、メインCPU1は、タイミングt1、t3、t5で書込データwd1~wd3の受信処理(rp)行う。メインCPU1は、タイミングt1で第1書込データwd1をRAM2に記憶しても、セキュアCPU51へ改ざん検知処理の演算開始要求を行わない。しかしながら、メインCPU1は、タイミングt3で第2書込データwd2をRAM2に記憶すると、セキュアCPU51へ改ざん検知処理の演算開始要求(cr1)を行う。また、メインCPU1は、タイミングt5で第3書込データwd3をRAM2に記憶すると、セキュアCPU51へ改ざん検知処理の演算開始要求(cr2)を行う。
このため、セキュアCPU51は、メインCPU1がRAM2に記憶された書込データwd1~wd3をROM3に記憶している際に、改ざん検知処理を行うことになる。つまり、セキュアCPU51は、メインCPU1の書き込み処理と並行して、改ざん検知処理の演算処理を行う。また、セキュアCPU51は、すでにROM3に記憶された改ざん検知処理が行われていない書込データを対象に改ざん検知処理を行う。
図7、図8の例では、メインCPU1は、タイミングt2、t4、t6で書込データwd1~wd3の書き込み処理(wp)を行う。セキュアCPU51は、タイミングt2では演算開始要求を受信していないため改ざん検知処理の演算処理を行わない。そして、セキュアCPU51は、タイミングt4でメインCPU1が第2書込データwd2の書き込み処理を行っている際に、第1書込データwd1に対する改ざん検知処理の演算処理を行う。また、セキュアCPU51は、タイミングt6でメインCPU1が第3書込データwd3の書き込み処理を行っている際に、第2書込データwd2に対する改ざん検知処理の演算処理を行う。
ECU11は、上記実施形態と同様の効果を奏することができる。特に、ECU11は、実行モードに制約がないため、書込データwd1~wd3の書き込み処理と並行して改ざん検知処理の演算処理を行うことができる。また、ECU11は、書込データの受信処理<書込データの書き込み処理、書込データの受信処理<改ざん検知処理の演算処理の場合に、効率的にリプログラミングの時間を短縮できる。つまり、ECU11は、無駄な待ち時間が発生せずより一層効率的に処理ができる。
(第3実施形態)
図9~図16を用いて、第3実施形態のECU12に関して説明する。ECU12は、基本的な構成がECU11と同じである。このため、ECU12の構成要素には、ECU11と同じ符号を用いる。また、セキュアCPU51の処理動作は、上記実施形態と同様である。
ECU12は、無線通信装置22(DCM)と通信可能に構成されている点がECU11と異なる。そして、ECU12は、無線通信装置22を介して書込データを受信する点がECU11と異なる。つまり、ECU12は、制御プログラムをOTA(Over the Air)によって更新するものである。また、ECU12は、ROM3の構成がECU11と異なる。
無線通信装置22は、センターに設置されたセンター装置と無線通信可能に構成されている。無線通信装置22は、ECU12と電気的に接続されている。無線通信装置22は、センター装置から受信した書込データなどをECU12に出力する。
センターは、車両の外部に設けられている。センター装置は、CPU、ROM、RAMなどを備えたコンピュータである。センター装置は、書換ツールと同様、書込データの送信などを行う。しかしながら、センター装置は、書換ツールと異なり、書込データを無線で送信する。
図15に示すように、ROM3は、セキュアメモリ52のROMと同じ不揮発性半導体記憶装置における、セキュアメモリ52のROMとは異なる領域である。この不揮発性半導体記憶装置は、2バンク構成となっている。第1バンク(bnk1)は、制御プログラム(ecs)、リプログソフト(rps)、暗号処理ソフト(cps)が記憶されている。第2バンク(bnk2)は、リプログソフト(rps)、暗号処理ソフト(cps)が記憶されている。また、第2バンクは、書込データを書き込むためのブランク領域(bla)がある。つまり、第2バンクのブランク領域にも制御プログラム(ecs)が記憶される。
なお、図15では、リプログソフトを使用して、第2バンクの制御プログラムの書き換えを実施する際の、書込データの受信から書き込み処理の流れを示している。2バンク構成のROM3は、例えば第2バンクの書込み処理を行っている最中でも、第1バンクであればリードアクセスが可能である。このため、ECU12は、制御プログラムを動作させながら、リプログラミングが可能となる。
タイミングt12、t14の書き込み処理中の場合、セキュアCPU51は、暗号処理ソフトを実行して、RAM2上の書込データをリードアクセスして改ざん検知処理の演算処理を実行することができる。また、タイミングt13の受信処理中の場合、セキュアCPU51は、暗号処理ソフトを実行して、すでにROM3に書き込んだ書込データをリードアクセスして改ざん検知処理の演算処理を実行することができる。
図10~図16を用いて、ECU12の処理動作に関して説明する。まず、図10、図11、図12を用いて、メインCPU1の処理動作に関して説明する。メインCPU1は、所定時間ごとに図10のフローチャートに示す処理を開始する。なお、メインCPU1は、所定のイベント発生時に図10のフローチャートに示す処理を開始してもよい。
ステップS40では、ECU制御処理を実行する。メインCPU1は、ROM3に記憶されている制御プログラムを実行して、ECU制御処理を行う。
ここで、図11を用いて、ECU制御処理に関して説明する。ステップS50では、制御処理を実行する。メインCPU1は、制御プログラムに従って、制御処理(A)を実行する。図16のタイミングt20などに示すように、メインCPU1は、所定時間ごとに、制御処理を実行する。
ステップS51では、暗号サービス要求の実行が必要か否かを判定する。メインCPU1は、例えば、センター装置から通信許可の要求をうけたか否かによって、暗号サービス要求の実行が必要か否かを判定する。なお、暗号サービス要求の実行が必要か否かの判定は、これに限定されない。メインCPU1は、例えば他ECUからの制御データを受信した際に認証処理が必要になるケースなど、制御処理の内容によって、暗号サービス要求の実行が必要か否かを判定してもよい。
メインCPU1は、通信許可の要求をうけた場合、暗号サービス要求の実行が必要と判定してステップS52へ進む。一方、メインCPU1は、通信許可の要求をうけてない場合、暗号サービス要求の実行が必要と判定せずに図11のフローチャートを終了する。暗号サービス要求は、例えば、受信した書込データの改ざん検知処理の演算開始の要求である。
ステップS52では、暗号処理状態(stt)がアイドル状態か否かを判定する。メインCPU1は、暗号処理状態がアイドル状態(I)か否かを判定する。メインCPU1は、暗号処理状態がアイドル状態と判定した場合、ステップS53へ進む。一方、メインCPU1は、暗号処理状態がアイドル状態と判定しなかった場合、ステップS56へ進む。アイドル状態は、制御プログラム要求、リプログソフト要求ともに実行中でない状態である。
図16に示すように、暗号処理状態は、I、R1、R2の三つの状態がある。Iは、アイドル状態を示している。R1は、制御プログラム要求実行中を示している。R2は、リプログソフト要求実行中を示している。暗号処理状態は、RAMやレジスタなどに設定可能に構成されている。
ステップS53では、メインCPU1は、暗号サービス要求待ちフラグをオフする。暗号サービス要求待ちフラグは、RAM2やレジスタなどに設けられている。ステップS54では、メインCPU1は、暗号処理状態を制御プログラム要求実行中(R1)に変更する。
ステップS55では、セキュアCPUへ暗号サービスの実行を要求する。メインCPU1は、タイミングt20などに示すように、セキュアCPU51へ暗号サービスの実行を要求する。ここでの暗号サービスは、リプロソフト要求の書込データの改ざん検知処理の演算処理とは異なる。なお、Dは、セキュアCPU51による暗号サービスの処置中を示している。
また、タイミングt30に示すように、メインCPU1は、セキュアCPU51が暗号サービスを実行中の場合、要求保留とする。しかしながら、メインCPU1は、性能優先のため演算完了の通知を受け取り次第リトライする。なお、暗号サービスの実行要求は、暗号処理要求や改ざん検知処理の演算開始要求ともいえる。
ステップS56では、メインCPU1は、暗号サービス要求待ちフラグをオンする。暗号サービス要求待ちフラグは、上記のように要求保留した暗号サービスの完了通知を受け取った際に、リトライするためのものである。
ここで、図10のフローチャートに戻る。ステップS41では、リプロ処理実行が必要か否かを判定する。リプロ処理は、書き換え処理と同意である。メインCPU1は、センター装置からのリプロ要求があるか否かで、リプロ処理の実行が必要か否かを判定する。メインCPU1は、センター装置からのリプロ要求がある場合、リプロ処理の実行が必要と判定してステップS42へ進む。一方、メインCPU1は、センター装置からのリプロ要求がない場合、リプロ処理の実行が必要と判定せずに図10のフローチャート通信装置を終了する。
ステップS42では、リプロ処理を実行する。メインCPU1は、リプログソフトに従ってリプロ処理(B、C)を行う。リプロ処理は、上記実施形態と同様、書込データの受信処理と書込データの書き込み処理である。ここで、図12、図13を用いて、リプロ処理に関して説明する。メインCPU1は、リプログソフトを実行する。
ステップS60では、メインCPU1は、暗号処理状態がアイドル状態か否かを判定する。メインCPU1は、暗号処理状態がアイドル状態と判定した場合、ステップS61へ進む。一方、メインCPU1は、暗号処理状態がアイドル状態と判定しなかった場合、ステップS68へ進む。例えばタイミングt22に示すように、メインCPU1は、リプログソフトを実行中に、暗号サービス処理が実行中のため要求を保留する。
ステップS61では、メインCPU1は、データ格納情報を確認して、データ格納領域がRAM2であるか否かを判定する。メインCPU1は、データ格納領域がRAM2であると判定した場合、ステップS62へ進む。一方、メインCPU1は、データ格納領域がRAM2であると判定しなかった場合、ステップS64へ進む。
ステップS64では、メインCPU1は、データ格納情報を確認して、データ格納領域がROM3であるか否かを判定する。メインCPU1は、データ格納領域がROM3であると判定した場合、ステップS65へ進む。一方、メインCPU1は、データ格納領域がROM3であると判定しなかった場合、ステップS68へ進む。なお、データ格納情報は、RAMやレジスタなどに設定可能に構成されている。
ステップS62、S65では、メインCPU1は、暗号処理状態をリプログソフト要求実行中(R2)に変更する。
ステップS63では、メインCPU1は、RAM上の書込データを対象にセキュアCPUへ暗号サービスの実行要求を行う。例えばタイミングt26では、メインCPU1は、暗号処理状態がアイドル状態であるため、RAM2に書込み済の第2書込データwd2に対する暗号サービスの実行要求を行う。また、タイミングt29では、メインCPU1は、RAM2に書き込み済の第3書込データwd3に対する暗号サービスの実行要求を行う。これによって、セキュアCPU51は、改ざん検知処理の演算処理(E)を行う。
つまり、メインCPU1は、ROM3に記憶されたプログラムを実行中に、セキュアCPU51にRAM2を対象とした改ざん検知処理の実行を要求する。また、メインCPU1は、セキュアCPU51がアイドル状態であり、かつ、書込データを通信装置4で受信してRAM2に記憶した場合、セキュアCPU51にRAM2を対象とした改ざん検知処理の実行を要求する。
ステップS66では、ROM上の書込データを対象にセキュアCPUへ暗号サービスの実行要求を行う。例えばタイミングt24では、メインCPU1は、暗号処理状態がアイドル状態であるためROM3に書込み済の第1書込データwd1に対する暗号サービスの実行要求を行う。これによって、セキュアCPU51は、改ざん検知処理の演算処理(E)を行う。なお、図16のWは、書き込みアクセスを示している。Rは、読み出しアクセスを示している。
つまり、メインCPU1は、ROM3に記憶されたプログラムを実行中に、セキュアCPU51にROM3を対象とした改ざん検知処理の実行を要求する。また、メインCPU1は、セキュアCPU51がアイドル状態であり、かつ、RAM2に記憶された書込データをROM3に記憶した場合、セキュアCPU51にROM3を対象とした改ざん検知処理の実行を要求する。
このように、ECU12は、セキュアCPU51がアイドル状態のときに、改ざん検知処理の演算処理を実行する。また、書込データは、セキュアCPU51のアイドル状態のタイミングによって、格納されている領域が異なる。つまり、書込データは、ROM3に格納されているときと、RAM2に格納されているときがある。
このため、ECU12は、セキュアCPU51による改ざん検知処理のためにセキュアCPU51がアクセスする対象をRAM2とROM3で動的に切り替える。言い換えると、ECU12は、セキュアCPU51による改ざん検知処理の対象を、RAM2に格納されている書込データと、ROM3に格納されている書込データとで切り替える。また、ECU12は、アイドル状態のタイミングにより、これらを切り替える。
ステップS67では、メインCPU1は、データ格納情報になしを設定する。ステップS68では、メインCPU1は、センター装置から書込データを受信したか否かを判定する(受信処理)。メインCPU1は、センター装置から書込データを受信したと判定するとステップS69へ進む。一方、メインCPU1は、センター装置から書込データを受信したと判定しないと図12、図13のフローチャートを終了する。
ステップS69では、受信した書込データをRAMに格納する(受信処理)。ステップS70では、メインCPU1は、所定サイズ分の書込データの受信が完了か否かを判定する(受信処理)。メインCPU1は、所定サイズ分の書込データの受信が完了と判定した場合、ステップS71へ進む。一方、メインCPU1は、所定サイズ分の書込データの受信が完了と判定しなかった場合、ステップS72へ進む。
ステップS71では、メインCPU1は、データ格納情報にRAM2を設定する。これは、書込データがRAM2に格納されていることを示すためである。
ステップS72では、メインCPU1は、書込データの書き込みが完了したか否かを判定する(受信処理)。メインCPU1は、書込データのROM3への書き込みが完了したと判定した場合、ステップS73へ進む。一方、メインCPU1は、書込データのROM3への書き込みが完了したと判定しなかった場合、ステップS74へ進む。
ステップS73では、メインCPU1は、データ格納情報にROM3を設定する。これは、書込データがROM3に格納されていることを示すためである。
ステップS74では、メインCPU1は、書き込みが未開始であるか否かを判定する。メインCPU1は、書き込みが未開始であると判定した場合、ステップS75へ進む。一方、メインCPU1は、書き込みが未開始であると判定しなかった場合、つまり、書込み途中である場合、図12、図13のフローチャートを終了する。なお、書き込みの開始から書き込みの完了までは、フラッシュコントローラが動作する。このため、書き込み処理中は、メインCPU1を占有しない。
ステップS75では、メインCPU1は、データ格納情報を確認して、データ格納領域がRAMであるか否かを判定する。メインCPU1は、データ格納領域がRAMであると判定した場合、ステップS76へ進む。一方、メインCPU1は、データ格納領域がRAMであると判定しなかった場合、図12、図13のフローチャートを終了する。
ステップS76では、メインCPU1は、ROM3に書込データの書き込みを開始する(書き込み処理)。
メインCPU1は、タイミングt21で第1書込データwd1の受信とRAM2への書き込みが完了する。メインCPU1は、タイミングt23で第1書込データwd1のROM3への書き込みが完了する。タイミングt21からタイミングt23の期間は、RAM2に格納された第1書込データwd1のアクセスが可となっている。
メインCPU1は、タイミングt25で第2書込データwd2の受信とRAM2への書き込みが完了する。メインCPU1は、タイミングt27で第2書込データwd2のROM3への書き込みが完了する。タイミングt25からタイミングt27の期間は、RAM2に格納された第2書込データwd2のアクセスが可となっている。
メインCPU1は、タイミングt28で第3書込データwd3の受信とRAM2への書き込みが完了する。メインCPU1は、タイミングt31で第3書込データwd3のROM3への書き込みが完了する。タイミングt28からタイミングt31の期間は、RAM2に格納された第3書込データwd3のアクセスが可となっている。なお、セキュアCPU51は、タイミングt23から次のROM3の書き込みアクセスWの直前まで、および、タイミングt27から次のROM3の書き込みアクセスWの直前までの区間で、ROM3へのアクセスが可能となっている。ROM3の書き込みアクセスWの間は、フラッシュコントローラが書き込み処理中のため、各CPU1,5からROM3へのアクセスができない。
次に、図14を用いて、メインCPU1の完了通知後の処理に関して説明する。メインCPU1は、セキュアCPU51から演算完了の通知を受信すると図14のフローチャートに示す処理を開始する。
ステップS80では、暗号サービス要求待ちフラグがオンであるか否かを判定する。メインCPU1は、暗号サービス要求待ちフラグがオンであると判定するとステップS81へ進む。一方、メインCPU1は、暗号サービス要求待ちフラグがオンであると判定しないとステップS84へ進む。
ステップS81では、メインCPU1は、暗号サービス要求待ちフラグをオフする。ステップS82では、メインCPU1は、暗号処理状態を制御ソフト要求実行中(R1)に変更する。ステップS83では、メインCPU1は、セキュアCPU51へ暗号サービスの実行要求を行う。ステップS84では、メインCPU1は、暗号処理状態をアイドル状態(I)に変更する。
ECU12は、ECU11と同様の効果を奏することができる。ECU12は、メインCPU1による制御プログラムの実行を妨げることなく、OTAによってリプログを行うことができる。また、ECU12は、メインCPU1による制御プログラムの実行を妨げることなく、メインCPU1による書き換え処理が完了した後に、セキュアCPU51が改ざん検知処理を行う場合よりも、リプログラミングの時間を短縮できる。
本開示は、実施例に準拠して記述されたが、本開示は当該実施例や構造に限定されるものではないと理解される。本開示は、様々な変形例や均等範囲内の変形をも包含する。加えて、様々な組み合わせや形態が本開示に示されているが、それらに一要素のみ、それ以上、あるいはそれ以下、を含む他の組み合わせや形態をも、本開示の範畴や思想範囲に入るものである。