以下、図面を参照しながら実施形態に係るネットワークシステム10について詳細に説明する。ネットワークシステム10は、電子制御装置(ECU)のコストを小さくするとともに、電子制御装置に記憶されているデータの更新時間を短くすることを目的とする。
図1は、実施形態に係るネットワークシステム10を示す図である。ネットワークシステム10は、提供装置20と、制御対象システム22とを備える。
提供装置20は、サーバ等の情報処理装置である。提供装置20は、インターネット等の外部ネットワークを介して制御対象システム22と接続される。
制御対象システム22は、少なくとも1つの電子制御装置24と、中継装置26とを有する。本実施形態において、制御対象システム22は、車両である。制御対象システム22は、車両に限らず、例えば、ロボットシステム、飛行機、または、ホームネットワークシステムであってもよい。
それぞれの電子制御装置24は、対象装置を制御する。対象装置は、制御対象システム22内に設けられる装置である。本実施形態において、対象装置は、例えば、エンジン等の車両の運動系の装置、燃料供給装置等のエネルギー系の装置、窓またはドア等のボディー系の装置、または、オーディオ装置等のエンターテイメント系の装置である。
電子制御装置24は、ハードウェアとして、CPU(Central Processing Unit)等の処理ユニット、ROM(Read Only Memory)、RAM(Random Access Memory)、不揮発性記憶装置等の記憶ユニット、対象装置と接続するためのインターフェイスユニット、並びに、中継装置26と通信するための通信ユニット等を有する。
電子制御装置24の記憶ユニットは、ファームウェアを記憶する。ファームウェアは、CPU等の処理ユニットにより実行されるプログラム、または、CPU等の処理ユニットにより読み出されるデータである。電子制御装置24は、ファームウェアとハードウェアとが協働して対象装置を制御する。電子制御装置24は、1つのファームウェアを記憶していてもよいし、複数のファームウェアを記憶していてもよい。
また、電子制御装置24は、ファームウェアを更新する。電子制御装置24は、現在記憶しているファームウェアの実体データよりも新しいバージョンの実体データが、ファームウェアの開発者(開発者、開発グループまたは提供者等)により提供された場合、現在記憶しているファームウェアの実体データを、新しいバージョンの実体データに更新する。例えば、電子制御装置24は、現在記憶しているファームウェアの実体データを削除して新しいバージョンの実体データを新たに記憶したり、現在記憶しているファームウェアの実体データの記憶領域に新しいバージョンの実体データを上書きしたりすることにより、更新をする。電子制御装置24は、新しいファームウェアの実体データと更新指示とを外部から受け取った場合に、更新処理を実行する。
ここで、本実施形態においては、記憶しているファームウェアの実体データを、“現FWデータ”と呼ぶ。また、記憶しているファームウェアの実体データよりも新しいバージョンの実体データを、“新FWデータ”と呼ぶ。
中継装置26は、それぞれの電子制御装置24に対して記憶している現FWデータを新FWデータに更新させるための装置である。中継装置26は、コンピュータ等と同様のハードウェア構成を有する情報処理装置である。中継装置26は、外部ネットワークを介して提供装置20と接続する。本実施形態においては制御対象システム22が車両であるので、中継装置26は、無線通信により外部ネットワークに接続する。
中継装置26は、内部ネットワークを介してそれぞれの電子制御装置24と接続する。外部ネットワークと内部ネットワークとは、中継装置26を介して接続されているが、直接には接続されていない。
図2は、中継装置26の機能構成を示す図である。中継装置26は、取得部30と、更新部32と、管理データ記憶部34と、共有鍵記憶部36と、一時記憶部38と、状態記憶部40とを備える。
取得部30は、提供装置20から現FWデータおよび新FWデータ等を受信する。更新部32は、提供装置20から受信した新FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを新FWデータに更新させる。また、更新部32は、現FWデータを新FWデータに更新する更新処理が失敗した場合、提供装置20から受信した現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。
管理データ記憶部34は、それぞれの電子制御装置24に記憶されている現FWデータに関する管理データを記憶する。共有鍵記憶部36は、現FWデータおよび新FWデータが正当であるかを検証するための共有鍵データを含む鍵情報を記憶する。共有鍵データは、ファームウェアの開発者との間で共有され、第三者には秘匿される。一時記憶部38は、取得部30が受信した現FWデータおよび新FWデータ等を含む取得情報を記憶する。状態記憶部40は、電子制御装置24の状態を示す状態情報を記憶する。
図3は、管理データ記憶部34に記憶される管理データの内容を示す図である。管理データ記憶部34は、制御対象システム22が備えるそれぞれの電子制御装置24に記憶されたそれぞれのファームウェアについて、図3に示す管理データを記憶する。
管理データは、ECUID、FWID、現FWのMAC(Message Authentication Code)値、現FWのバージョン番号、ECUのドメイン、現FWの開発者ID、更新タイミング情報、および、FW取得状況情報を含む。
ECUIDは、そのファームウェアを記憶している電子制御装置24の識別子である。FWIDは、そのファームウェアの識別子である。現FWのMAC値は、電子制御装置24に書き込まれている現FWデータのMAC値である。
ここで、MAC値とは、データが改ざんされていないことを検証するためのデータである。MAC値は、対象データと鍵データとを用いて算出および検証がされる。MAC値の生成および検証は、同一の鍵データが用いられる。例えば、送信者と受信者とが同一の鍵データを保持しているとする。この鍵データは、第三者に対して秘匿される。この場合、送信者は、対象データと自身が保持している鍵データとによりMAC値を算出する。そして、送信者は、対象データとMAC値とを受信者に送信する。受信者は、受信した送信データと、自身が保持している鍵データとによりMAC値を算出する。そして、受信者は、算出したMAC値と送信者から受信したMAC値とを比較する。受信者は、一致した場合、受信した対象データが送信者により生成されたものである(すなわち、正当である)と判断することができる。
現FWのバージョン番号は、電子制御装置24に書き込まれている現FWデータのバージョンを表す。バージョン番号は、ファームウェアの実体データのバージョンが新しくなる毎に大きくなる数値または文字であってよい。
ECUのドメインは、対象装置が有する機能を表す。例えば、ECUのドメインは、対象装置が、運動系の装置、エネルギー系の装置、ボディー系の装置またはエンターテイメント系の装置の何れであるかを表す。
現FWの開発者IDは、現FWデータの開発者を識別する情報である。共有鍵データは、開発者ID毎に割り当てられる。
更新タイミング情報は、そのファームウェアを更新可能なタイミングを示す。例えば、更新タイミング情報は、車両の運転中に更新可能であるか否か、車両がブレーキによる停止中に更新可能であるか否か、車両がアイドリング中に更新可能であるか否か、および、車両のエンジンが停止中に更新可能であるか否か等を示す。
FW取得状況情報は、中継装置26による新FWデータの取得状況を示す。例えば、FW取得状況情報は、何もしていない状況、提供装置20に問い合わせ中の状況、データを受信中の状況、または、検証中の状況の何れかを示す。
図4は、共有鍵記憶部36に記憶される鍵情報の内容を示す図である。共有鍵記憶部36は、ファームウェアの開発者毎に、図4に示す鍵情報を記憶する。
鍵情報は、開発者IDと、共有鍵データとを含む。開発者IDは、ファームウェアの開発者を識別する情報である。共有鍵データは、MAC値を算出するために用いられるデータである。
なお、開発者IDは、ファームウェアのバージョン毎に異なっていてもよい。例えば、現FWデータの開発者IDと、新FWデータの開発者IDとが異なってもよいし、同一であってもよい。現FWデータの開発者IDと新FWデータの開発者IDとが異なる場合、それぞれに対応する共有鍵データは異なる。
図5は、一時記憶部38に記憶される取得情報の内容を示す図である。一時記憶部38は、提供装置20から受信した現FWデータおよび新FWデータが正当であると判断される毎に、図5に示す取得情報を記憶する。
取得情報は、ECUID、FWID、現FWデータ、新FWデータ、新FWのMAC値、新FWのバージョン番号、新FWの開発者ID、取得エラー回数および更新エラー回数を含む。
ECUIDは、更新対象の電子制御装置24の識別子である。FWIDは、更新対象のファームウェアの識別子である。
現FWデータおよび新FWデータは、提供装置20から受信したファームウェアの実体データである。なお、現FWデータは、電子制御装置24に現在書き込まれている現FWデータと同一であるべきデータである。
新FWのMAC値は、提供装置20から受信した新FWデータのMAC値である。新FWのMAC値は、例えば、新FWデータの開発者により生成される。新FWのバージョン番号は、新FWデータのバージョンを表す。新FWの開発者IDは、新FWデータの開発者を識別する情報である。
取得エラー回数は、提供装置20から受信した現FWデータまたは新FWデータが正当でなかったと判定された回数を表す。更新エラー回数は、電子制御装置24に書き込んだ新FWデータが正当でなかったと判定された回数を表す。
図6は、状態記憶部40に記憶される状態情報の内容を示す図である。状態記憶部40は、電子制御装置24毎に、図6に示す状態情報を記憶する。
状態情報は、ECUID、ECUのドメインおよびECU状態情報を含む。ECUIDは、その電子制御装置24の識別子である。ECUのドメインは、その電子制御装置24が制御する対象装置が有する機能を表す。
ECU状態情報は、その電子制御装置24の現在の状態を示す。例えば、ECU状態情報は、通常動作中の状態、更新待ちの状態、更新対象のデータの受信中の状態、書き込み中の状態、検証中の状態、または、データを有効化している状態の何れかを示す。
図7は、提供装置20および中継装置26の機能構成を示す図である。提供装置20は、提供情報記憶部50と、要求受信部54と、特定部56と、応答送信部58とを有する。中継装置26の取得部30は、要求送信部52と、応答受信部60と、第1検証値生成部62と、第1検証部64と、状況更新部66とを有する。
提供情報記憶部50は、中継装置26に提供すべき情報を記憶する。提供情報記憶部50は、ファームウェア毎に、ECUID、FWID、それぞれのバージョンの実体データ、それぞれのバージョンの実体データのMAC値、それぞれのバージョンのバージョン番号およびそれぞれのバージョンの開発者IDを記憶する。開発者IDは、バージョン毎に共通であってもよい。
要求送信部52は、制御対象システム22が備えるそれぞれの電子制御装置24に記憶されたそれぞれのファームウェアについて、取得要求を提供装置20に送信する。要求送信部52は、例えば、ファームウェア毎に予め定められたタイミングで(例えば定期的に)、取得要求を送信する。
要求送信部52は、電子制御装置24を識別するECUID(装置識別子)と、現FWデータを識別するFWID(データ識別子)と、現FWデータのバージョンを特定可能なバージョン特定情報とを含む取得要求を、提供装置20に送信する。要求送信部52は、管理データ記憶部34から、そのファームウェアについての管理データを読み出して、取得要求を生成する。
バージョン特定情報は、現FWデータのMAC値(電子制御装置24に記憶されている現FWデータを検証するための検証値)である。バージョン特定情報は、MAC値に代えて、現FWデータのバージョン番号であってもよい。
要求受信部54は、取得要求を中継装置26から受信する。特定部56は、提供情報記憶部50から、取得要求に含まれるECUIDおよびFWIDに対応するファームウェアに関する情報を読み出す。特定部56は、読み出した情報に基づき、バージョン特定情報により特定されるバージョンよりも新しいバージョンの実体データが、開発者から提供されているかを判断する。すなわち、特定部56は、取得要求により特定されるファームウェアについて、電子制御装置24が記憶している現FWデータのバージョンよりも新しいバージョンの実体データ(新FWデータ)が、存在するか否かを判断する。
応答送信部58は、受信した取得要求に応じた応答情報を、中継装置26に送信する。応答送信部58は、新FWデータが存在しない場合、ECUID、FWIDおよび更新フラグを含む応答情報を送信する。応答送信部58は、新FWデータが存在する場合、ECUID、FWID、更新フラグ、現FWデータ、新FWデータ、新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを含む応答情報を送信する。
応答情報に含まれるECUIDおよびFWIDは、取得要求に含まれるECUIDおよびFWIDと同一である。更新フラグは、バージョン特定情報により特定されるバージョンよりも新しいバージョンのFWデータ(新FWデータ)が存在するか否かを示すフラグである。本実施形態においては、更新フラグは、新FWデータが存在しない場合には0、新FWデータが存在する場合には0以外の値となる。なお、開発者IDがバージョン毎に共通である場合、応答送信部58は、開発者IDを送信しなくてもよい。
応答受信部60は、取得要求に応じた応答情報を、提供装置20から受信する。新FWデータが存在しない場合、応答受信部60は、ECUID、FWIDおよび更新フラグを含む応答情報を受信する。新FWデータが存在する場合、応答受信部60は、ECUID、FWID、更新フラグ、現FWデータ、新FWデータ、新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを含む応答情報を受信する。
第1検証値生成部62は、提供装置20から受信した現FWデータについて、MAC値(第2検証値)を算出する。具体的には、第1検証値生成部62は、現FWの開発者IDに対応する共有鍵データを共有鍵記憶部36から読み出す。第1検証値生成部62は、読み出した共有鍵データと、提供装置20から受信した現FWデータとによりMAC値を算出する。
さらに、第1検証値生成部62は、提供装置20から受信した新FWデータについて、MAC値(第4検証値)を算出する。具体的には、第1検証値生成部62は、新FWの開発者IDに対応する共有鍵データを共有鍵記憶部36から読み出す。第1検証値生成部62は、読み出した共有鍵データと、提供装置20から受信した新FWデータとによりMAC値を算出する。
第1検証部64は、提供装置20から受信した現FWデータが正当であるか否かを判断する。具体的には、第1検証部64は、電子制御装置24に記憶されている現FWデータを検証するための第1検証値と、提供装置20から受信した現FWデータを検証するための第2検証値とが一致する場合に、提供装置20から受信した現FWデータが正当であると判断する。
ここで、第1検証値は、管理データ記憶部34に記憶されている現FWのMAC値である。第2検証値は、第1検証値生成部62により算出された現FWデータのMAC値である。すなわち、第1検証部64は、提供装置20から受信した現FWデータが、電子制御装置24に記憶されている現FWデータと同一であるか否かを検証する。
さらに、第1検証部64は、提供装置20から受信した新FWデータが正当であるか否かを判断する。具体的には、第1検証部64は、提供装置20から受信した第3検証値と、共有鍵データと提供装置20から受信した新FWデータとにより算出された第4検証値とが一致する場合に、提供装置20から受信した新FWデータが正当であると判断する。
ここで、第3検証値は、取得要求に応じて、提供装置20から受信した新FWデータのMAC値(新FWのMAC値)である。第4検証値は、第1検証値生成部62により算出された新FWデータのMAC値である。すなわち、第1検証部64は、提供装置20から受信した新FWデータの開発者が、中継装置26と同一の共有鍵データを保持しているか否かを検証する。
第1検証部64は、提供装置20から受信した現FWデータまたは新FWデータの何れかが正当でない場合、要求送信部52に対して、再度、取得要求を送信させる。第1検証部64は、一定回数、同一の取得要求を送信しても現FWデータおよび新FWデータの何れかが正当ではない場合、取得要求の送信を中止させる。
第1検証部64は、提供装置20から受信した現FWデータおよび新FWデータが正当であることを条件として、応答受信部60が受信した情報を一時記憶部38に記憶させる。具体的には、第1検証部64は、提供装置20から受信した、ECUID、FWID、現FWデータ、新FWデータ、新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを、一時記憶部38に記憶させる。なお、バージョン毎に開発者IDが共通である場合、第1検証部64は、一時記憶部38に新FWの開発者IDを記憶させなくてもよい。また、第1検証部64は、現FWデータおよび新FWデータの何れかが正当ではないと判断された回数(エラー回数)も、一時記憶部38に記憶させてもよい。
状況更新部66は、それぞれのファームウェアについて、FW取得状況情報を管理データ記憶部34に書き込む。
以上の構成により、中継装置26は、提供装置20から現FWデータおよび新FWデータを受信することができる。さらに、中継装置26は、受信した現FWデータおよび新FWデータが正当であるか否かを判断することができる。そして、中継装置26は、受信した現FWデータおよび新FWデータが正当であることを条件として、一時記憶部38に現FWデータおよび新FWデータを記憶させることができる。
図8は、中継装置26による取得処理フローを示す図である。取得部30は、図8に示す取得処理を実行する。
まず、ステップS11において、取得部30は、何れかのファームウェアについて、予め定められたタイミングにおいて取得要求を提供装置20に送信する。この場合において、取得部30は、ECUIDと、FWIDと、バージョン特定情報(現FWのMAC値または現FWのバージョン番号)とを含む取得要求を、提供装置20に送信する。
提供装置20は、取得要求に応じて、対応するファームウェアについての応答情報を中継装置26に送信する。具体的には、提供装置20は、対応する新FWデータが存在しない場合、ECUID、FWID、および、値が0とされた更新フラグを含む応答情報を送信する。提供装置20は、新FWデータが存在する場合、ECUID、FWID、値が0以外とされた更新フラグ、現FWデータ、新FWデータ、新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを含む応答情報を送信する。
続いて、ステップS12において、取得部30は、応答情報を受信する。続いて、ステップS13において、取得部30は、応答情報に含まれる更新フラグが、0以外の値であるか否かを判断する。更新フラグが0である場合(S13のNo)、取得部30は、本フローを終了する。更新フラグが0以外の値である場合(S13のYes)、処理をステップS14に進める。
ステップS14において、取得部30は、受信した現FWデータが正当であるか否かを判断する。ステップS14の処理については、図9のフローにおいてさらに詳細に説明する。取得部30は、正当である場合(S14のYes)、処理をステップS15に進め、正当でない場合(S14のNo)、処理をステップS17に進める。
ステップS15において、取得部30は、受信した新FWデータが正当であるか否かを判断する。ステップS15の処理については、図10のフローにおいてさらに詳細に説明する。取得部30は、正当である場合(S15のYes)、処理をステップS16に進め、正当でない場合(S15のNo)、処理をステップS17に進める。
ステップS16において、取得部30は、提供装置20から受信したECUID、FWID、現FWデータ、新FWデータ、新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを、一時記憶部38に書き込む。ステップS16を終えると、取得部30は、本フローを終了する。この場合、取得部30は、正当な現FWデータまたは新FWデータを受信できている。
ステップS17において、取得部30は、同一の取得要求を送信しても現FWデータおよび新FWデータの何れかが正当ではなかった回数(エラー回数)が、一定回数以上であるか否かを判断する。エラー回数が一定回数未満である場合(S17のNo)、取得部30は、処理をステップS11に戻す。これにより、取得部30は、通信エラー等により正当なデータが受信できなかった場合であっても、次の機会において正当なデータを受信させることができる。
エラー回数が一定回数以上である場合(S17のYes)、取得部30は、本フローを終了する。
図9は、提供装置20から受信した現FWデータの正当性を判断するフローを示す図である。取得部30は、ステップS14において、図9に示す処理を実行する。
まず、取得部30は、管理データ記憶部34に記憶されている現FWのMAC値(第1検証値)を読み出す(S21)。続いて、取得部30は、現FWの開発者IDを管理データ記憶部34から読み出す(S22)。続いて、取得部30は、現FWの開発者IDに対応する共有鍵データを共有鍵記憶部36から読み出す(S23)。続いて、取得部30は、提供装置20から受信した現FWデータを取得する(S24)。続いて、取得部30は、読み出した共有鍵データと、提供装置20から受信した現FWデータとによりMAC値(第2検証値)を算出する(S25)。
続いて、取得部30は、第1検証値と第2検証値とが一致するか否かを判断する(S26)。取得部30は、第1検証値と第2検証値とが一致する場合(S26のYes)、提供装置20から受信した現FWデータが正当である(S27)として、処理を終了する。取得部30は、第1検証値と第2検証値とが一致しない場合(S26のNo)、提供装置20から受信した現FWデータが正当ではない(S28)として、処理を終了する。
図10は、提供装置20から受信した新FWデータの正当性を判断するフローを示す図である。取得部30は、ステップS15において、図10に示す処理を実行する。
まず、取得部30は、提供装置20から受信した、新FWのMAC値(第3検証値)を取得する(S31)。続いて、取得部30は、提供装置20から受信した新FWの開発者IDを取得する(S32)。続いて、取得部30は、新FWの開発者IDに対応する共有鍵データを共有鍵記憶部36から読み出す(S33)。続いて、取得部30は、提供装置20から受信した新FWデータを取得する(S34)。続いて、取得部30は、読み出した共有鍵データと、提供装置20から受信した新FWデータとによりMAC値(第4検証値)を算出する(S35)。
続いて、取得部30は、第3検証値と第4検証値とが一致するか否かを判断する(S36)。取得部30は、第3検証値と第4検証値とが一致する場合(S36のYes)、提供装置20から受信した新FWデータが正当である(S37)として、処理を終了する。取得部30は、第3検証値と第4検証値とが一致しない場合(S36のNo)、提供装置20から受信した新FWデータが正当ではない(S38)として、処理を終了する。
図11は、中継装置26および電子制御装置24の機能構成を示す図である。電子制御装置24は、データ記憶部70と、制御部72と、状態送信部74と、開始受信部82と、データ受信部86と、書込部88と、第1鍵記憶部90と、第2検証値生成部92と、検証値送信部94と、終了受信部104とを有する。中継装置26の更新部32は、状態受信部76と、開始検知部78と、開始送信部80と、データ送信部84と、検証値受信部96と、第2検証部98と、確定部100と、通知部102とを有する。
データ記憶部70は、ファームウェアの実体データ(現FWデータ)を記憶する。制御部72は、データ記憶部70に記憶された現FWデータに基づき対象装置を制御する。
状態送信部74は、電子制御装置24の状態を検知する。例えば、状態送信部74は、通常動作中の状態、更新待ちの状態、更新対象のデータの受信中の状態、書き込み中の状態、検証中の状態、または、データを有効化している状態の何れかを検知する。状態送信部74は、検知した状態を示すECU状態情報を中継装置26に送信する。
状態受信部76は、電子制御装置24からECU状態情報を受信する。状態受信部76は、受信したECU状態情報を状態記憶部40に記憶させる。
開始検知部78は、提供装置20から正当な新FWデータおよび現FWデータの検証が完了し、未だ新FWデータを電子制御装置24に書き込んでいないファームウェアについて、更新可能か否かを判断する。例えば、開始検知部78は、制御対象システム22の状態が管理データ記憶部34に記憶された更新タイミング情報と一致、且つ、ECU状態情報が通常動作中を示している場合、更新可能と判断する。開始検知部78は、更新可能である場合、開始送信部80およびデータ送信部84に開始指示を与える。
開始送信部80は、開始指示を受け取ると、更新対象の電子制御装置24に更新開始を示す情報を送信する。これにより、更新対象の電子制御装置24は、データの受信の準備等をすることができる。また、開始送信部80は、他の電子制御装置24に、更新対象の電子制御装置24がファームウェアの更新を開始する旨を示す情報を送信する。これにより、他の電子制御装置24は、更新期間中に動作の不具合が生じないように、動作の制限をしたり、ユーザに警告したりすることができる。
開始受信部82は、中継装置26から更新開始を示す情報を受信する。開始受信部82は、更新開始を示す情報を受信した場合、制御部72による動作を制限させる。これにより、開始受信部82は、更新期間中に、対象装置に動作の不具合が生じないように制御することができる。
データ送信部84は、開始検知部78から開始指示を受け取ると、提供装置20から受信した新FWデータを電子制御装置24に送信して、電子制御装置24に記憶されている現FWデータを新FWデータに更新させる。具体的には、データ送信部84は、一時記憶部38に記憶された新FWデータを電子制御装置24に送信するとともに、更新指示を送信する。
なお、一時記憶部38には、正当であると判断された新FWデータが記憶される。従って、データ送信部84は、正当であると判断された新FWデータを電子制御装置24へ送信することができる。また、データ送信部84は、開始検知部78から開始指示を受けた場合に新FWデータを送信するので、電子制御装置24による制御の対象装置が予め定められた状態となった場合に、新FWデータを送信することができる。
データ受信部86は、中継装置26から、新FWデータおよび更新指示を受信する。書込部88は、更新指示を受信した場合、データ記憶部70に記憶されている現FWデータを、中継装置26から受信した新FWデータに更新する。例えば、書込部88は、データ記憶部70における現FWデータが記憶されている領域に新FWデータを上書きしたり、データ記憶部70に記憶されている現FWデータを削除してデータ記憶部70の予め定められた領域に新FWデータを書き込んだりする。
第1鍵記憶部90は、データ記憶部70に書き込まれたデータを検証するために用いる鍵データを記憶する。本実施形態においては、第1鍵記憶部90は、現FWの開発者IDに対応する共有鍵データおよび新FWの開発者IDに対応する共有鍵データを記憶する。現FWの開発者IDと新FWの開発者IDとが同一であれば、第1鍵記憶部90は、1つの共有鍵データを記憶する。
なお、第1鍵記憶部90は、中継装置26と提供装置20とが共有する共有鍵データとは異なる鍵データを記憶していてもよい。この場合、第1鍵記憶部90は、この鍵データを中継装置26と共有しており、第三者に対して秘匿している。更新部32は、この鍵データを記憶する記憶部およびこの鍵データからMAC値を生成するための検証値生成部を有する。また、この鍵データは、定期的に更新されてもよいし、中継装置26と電子制御装置24とが秘匿化通信をする毎に新たに生成されてもよい。
第2検証値生成部92は、更新処理においてデータ記憶部70に書き込まれた新FWデータを検証するためのMAC値(第5検証値)を算出する。具体的には、第2検証値生成部92は、新FWの開発者IDに対応する共有鍵データを第1鍵記憶部90から読み出す。そして、第2検証値生成部92は、読み出した共有鍵データと、更新処理においてデータ記憶部70に書き込まれた新FWデータとによりMAC値を算出する。
検証値送信部94は、更新処理においてデータ記憶部70に書き込まれた新FWデータを検証するためのMAC値を中継装置26に送信する。検証値受信部96は、電子制御装置24から、更新処理においてデータ記憶部70に書き込まれた新FWデータを検証するためのMAC値を受信する。
第2検証部98は、更新処理において電子制御装置24に書き込まれた新FWデータが正当であるか否かを検証する。具体的には、第2検証部98は、更新処理において電子制御装置24に書き込まれた新FWデータを検証するための第5検証値と、電子制御装置24へと送信した新FWデータを検証するための第6検証値とが一致しない場合に、更新処理により電子制御装置24に書き込まれた新FWデータが正当ではないと判断する。
ここで、第5検証値は、第2検証値生成部92により算出された、データ記憶部70に書き込まれた新FWデータに対するMAC値である。また、第6検証値は、提供装置20から受信した新FWデータのMAC値である。すなわち、第2検証部98は、提供装置20から受信した新FWデータが、改竄されずに電子制御装置24に書き込まれたか否かを検証する。
第2検証部98は、更新処理において電子制御装置24に書き込まれた新FWデータが正当であると判断した場合、確定部100および通知部102に通知する。
確定部100は、更新処理において電子制御装置24に書き込まれた新FWデータが正当である旨の通知を受けた場合、一時記憶部38に記憶されている情報を読み出して、管理データ記憶部34に記憶させる。具体的には、確定部100は、新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを一時記憶部38から読み出し、同一のファームウェアについての管理データに含まれる、現FWのMAC値、現FWのバージョン番号および現FWの開発者IDとして、管理データ記憶部34に書き込む。これにより、中継装置26は、管理データ記憶部34に記憶される管理データを更新することができる。なお、確定部100は、管理データ記憶部34に必要な情報を記憶させた後、一時記憶部38に記憶されている情報を削除してもよい。
通知部102は、第2検証部98から新FWデータが正当である旨の通知を受けた場合、他の電子制御装置24および更新対象の電子制御装置24に、ファームウェアの更新を完了したことを示す情報を送信する。これにより、他の電子制御装置24は、動作の制限を解除したり、ユーザに対する警告を解除したりすることができる。
終了受信部104は、中継装置26から、ファームウェアの更新を完了したことを示す情報を受信する。終了受信部104は、更新を完了したことを示す情報を受信した場合、制御部72による動作の制限を解除させる。これにより、制御部72は、新FWデータに基づき対象装置を制御することができる。
一方、第2検証部98は、更新処理において電子制御装置24に書き込まれた新FWデータが正当ではないと判断した場合、更新処理が失敗したことを、データ送信部84に通知する。
データ送信部84は、更新処理が失敗した場合、提供装置20から受信した現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。具体的には、データ送信部84は、一時記憶部38に記憶された現FWデータを電子制御装置24に送信するとともに、復元指示を送信する。なお、一時記憶部38には、正当であると判断された現FWデータが記憶される。従って、データ送信部84は、正当であると判断された現FWデータを電子制御装置24へ送信することができる。
データ受信部86は、中継装置26から、現FWデータおよび復元指示を受信する。書込部88は、復元指示を受信した場合、データ記憶部70に記憶されていた現FWデータを復元する。例えば、書込部88は、データ記憶部70における現FWデータが元々記憶されていた領域に、受信した現FWデータを上書きする。また、書込部88は、更新処理において書き込まれた新FWデータを削除してから、現FWデータを書き込んでもよい。
第2検証値生成部92は、復元処理においてデータ記憶部70に書き込まれた現FWデータを検証するためのMAC値(第7検証値)を算出する。具体的には、第2検証値生成部92は、第1鍵記憶部90に記憶された現FWの開発者IDに対応する共有鍵データを第1鍵記憶部90から読み出す。そして、第2検証値生成部92は、読み出した共有鍵データと、復元処理においてデータ記憶部70に書き込まれた現FWデータとによりMAC値を算出する。
検証値送信部94は、復元処理においてデータ記憶部70に書き込まれた現FWデータを検証するためのMAC値を中継装置26に送信する。検証値受信部96は、電子制御装置24から、復元処理においてデータ記憶部70に書き込まれた現FWデータを検証するためのMAC値を受信する。
第2検証部98は、復元処理において電子制御装置24に書き込まれた現FWデータが正当であるか否かを検証する。具体的には、第2検証部98は、復元処理において電子制御装置24に書き込まれた現FWデータを検証するための第7検証値と、電子制御装置24へと送信した現FWデータを検証するための第8検証値とが一致しない場合に、復元処理により電子制御装置24に書き込まれた現FWデータが正当ではないと判断する。
ここで、第7検証値は、第2検証値生成部92により算出された、データ記憶部70に書き込まれた現FWデータに対するMAC値である。また、第8検証値は、管理データ記憶部34に記憶されている現FWデータのMAC値である。すなわち、第2検証部98は、管理データ記憶部34に元々記憶されていた現FWデータと同一のデータが、電子制御装置24に書き込まれたか否かを検証する。
第2検証部98は、復元処理において電子制御装置24に書き込まれた現FWデータが正当であると判断した場合、通知部102に通知する。通知部102は、第2検証部98から現FWデータが正当である旨の通知を受けた場合、他の電子制御装置24および更新対象の電子制御装置24に、処理が完了したことを示す情報を送信する。これにより、他の電子制御装置24は、動作の制限を解除したり、ユーザに対する警告を解除したりすることができる。
終了受信部104は、中継装置26から処理が完了したことを示す情報を受信する。終了受信部104は、処理が完了したことを示す情報を受信した場合、制御部72による動作の制限を解除させる。これにより、制御部72は、現FWデータに基づき対象装置を制御することができる。
また、第2検証部98は、復元処理において電子制御装置24に書き込まれた現FWデータが正当でないと判断した場合、復元処理が失敗したことをデータ送信部84に通知する。データ送信部84は、復元処理が失敗した場合、再度、提供装置20から受信した現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。これにより、第2検証部98は、電子制御装置24に繰り返して復元処理を実行させることができる。
ただし、第2検証部98は、復元処理において電子制御装置24に書き込んだ現FWデータが正当でなかった回数(エラー回数)が一定回数以上となった場合、データ送信部84による現FWデータの再送信を終了させる。また、第2検証部98は、現FWデータが正当ではないと判断された回数(エラー回数)を、一時記憶部38に記憶させてもよい。
そして、第2検証部98は、電子制御装置24に正当なデータが書き込まれていないことを通知部102に通知する。通知部102は、第2検証部98から、正当なデータが書き込まれていないことの通知を受けると、他の電子制御装置24および更新対象の電子制御装置24に、正当なデータが書き込まれていないことを示す情報を送信する。これにより、他の電子制御装置24は、更新対象の電子制御装置24に関連する動作を制限したり、ユーザに対する警告をしたりすることができる。
また、通知部102は、正当なデータが書き込まれていないことを示す通知を受け取ると、更新対象の電子制御装置24に、正当なデータが書き込まれていないことを示す情報を送信する。終了受信部104は、正当なデータが書き込まれていないことを示す情報を受信した場合、制御部72による動作を制限する。これにより、制御部72は、正当でないデータに基づく対象装置の制御を禁止することができる。
以上の構成により、中継装置26は、電子制御装置24に記憶された現FWデータを、提供装置20から受信した新FWデータに更新することができる。また、中継装置26は、更新処理において電子制御装置24に書き込まれた新FWデータが正当ではない場合には、提供装置20から受信した現FWデータにより、電子制御装置24に記憶された現FWデータを復元することができる。
図12は、中継装置26による更新処理フローを示す図である。更新部32は、図12に示す更新処理を実行する。
まず、ステップS41において、更新部32は、更新対象のファームウェアについての更新タイミング情報を管理データ記憶部34から読み出す。続いて、ステップS42において、更新部32は、更新対象の電子制御装置24についてのECU状態情報を状態記憶部40から読み出す。
続いて、ステップS43において、更新部32は、更新処理を開始するか否かを判断する。具体的には、更新部32は、制御対象システム22の状態が更新タイミング情報と一致し、且つ、ECU状態情報が通常動作中を示している場合、更新可能と判断する。更新部32は、更新可能ではない場合(S43のNo)、処理をステップS44に進めて一定時間待機した後に、再度、ステップS42から処理を繰り返す。更新部32は、更新可能である場合(S43のYes)、処理をステップS45に進める。
ステップS45において、更新部32は、更新対象の電子制御装置24に更新開始を示す情報を送信する。続いて、ステップS46において、更新部32は、他の電子制御装置24に、更新対象の電子制御装置24におけるファームウェアの更新の開始を示す情報を送信する。
続いて、ステップS47において、更新部32は、提供装置20から受信した新FWデータを電子制御装置24に送信して、電子制御装置24に記憶されている現FWデータを新FWデータに更新させる。具体的には、更新部32は、一時記憶部38に記憶されている正当であると判断された新FWデータを、更新指示とともに電子制御装置24に送信する。
ここで、更新対象の電子制御装置24は、中継装置26から、新FWデータおよび更新指示を受信した場合、記憶している現FWデータを、中継装置26から受信した新FWデータに更新する。続いて、電子制御装置24は、更新処理においてデータ記憶部70に書き込まれた新FWデータを検証するためのMAC値(第5検証値)を算出する。
続いて、ステップS48において、更新部32は、更新対象の電子制御装置24から、書き込んだ新FWデータを検証するためのMAC値(第5検証値)を受信する。
続いて、ステップS49において、更新部32は、更新処理において電子制御装置24に書き込まれた新FWデータが正当であるか否かを検証する。ステップS49の処理については、図13のフローにおいてさらに詳細に説明する。更新部32は、正当である場合(S49のYes)、処理をステップS50に進め、正当でない場合(S49のNo)、処理をステップS52に進める。
ステップS50において、更新部32は、一時記憶部38に記憶されている情報を読み出して、管理データ記憶部34に転送する。具体的には、更新部32は、一時記憶部38から新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを読み出して、現FWのMAC値、現FWのバージョン番号および現FWの開発者IDとして管理データ記憶部34に記憶させる。
続いて、ステップS51において、更新部32は、更新対象の電子制御装置24および他の電子制御装置24に、更新対象の電子制御装置24におけるファームウェアの更新の完了を示す終了通知を送信する。そして、更新部32は、本ファームウェアについて更新処理を終了する。
一方、ステップS52において、更新部32は、提供装置20から受信した現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。具体的には、更新部32は、一時記憶部38に記憶されている正当であると判断された現FWデータを、復元指示とともに電子制御装置24に送信する。
ここで、更新対象の電子制御装置24は、中継装置26から、現FWデータおよび復元指示を受信した場合、中継装置26から受信した現FWデータを記憶する。具体的には、電子制御装置24は、更新処理において書き込まれた新FWデータを削除して、データ記憶部70における現FWデータが元々記憶されていた領域に、受信した現FWデータを書き込む。そして、電子制御装置24は、復元処理においてデータ記憶部70に書き込まれた現FWデータを検証するためのMAC値(第7検証値)を算出する。
続いて、ステップS53において、更新部32は、更新対象の電子制御装置24から、書き込んだ現FWデータを検証するためのMAC値(第7検証値)を受信する。
続いて、ステップS54において、更新部32は、復元処理において電子制御装置24に書き込まれた現FWデータが正当であるか否かを検証する。ステップS54の処理については、図14のフローにおいてさらに詳細に説明する。更新部32は、正当である場合(S54のYes)、処理をステップS51に進め、終了通知を送信して、本ファームウェアについて更新処理を終了する。更新部32は、正当でない場合(S54のNo)、処理をステップS55に進める。
ステップS55において、更新部32は、復元処理において電子制御装置24に書き込まれた現FWデータが正当でなかった回数(エラー回数)が、一定回数以上であるか否かを判断する。エラー回数が一定回数未満である場合(S55のNo)、更新部32は、処理をステップS52に戻して、現FWデータの送信から処理を繰り返す。エラー回数が一定回数以上である場合(S55のYes)、処理をステップS56に進める。
ステップS56において、更新部32は、更新対象の電子制御装置24および他の電子制御装置24に、更新対象の電子制御装置24に正当なデータが書き込まれていないことを示す失敗通知を送信する。そして、更新部32は、本ファームウェアについて更新処理を終了する。
図13は、更新処理において電子制御装置24に書き込まれた新FWデータの正当性を判断するフローを示す図である。更新部32は、ステップS49において、図13に示す処理を実行する。
まず、更新部32は、更新処理において電子制御装置24に書き込まれた新FWデータを検証するための第5検証値を取得する(S61)。第5検証値は、電子制御装置24により算出された、電子制御装置24に書き込まれた新FWデータに対するMAC値である。続いて、更新部32は、一時記憶部38から新FWのMAC値(第6検証値)を読み出す(S62)。
続いて、更新部32は、第5検証値と第6検証値とが一致するか否かを判断する(S63)。更新部32は、第5検証値と第6検証値とが一致する場合(S63のYes)、電子制御装置24に書き込まれた新FWデータが正当である(S64)として、処理を終了する。更新部32は、第5検証値と第6検証値とが一致しない場合(S63のNo)、電子制御装置24に書き込まれた新FWデータが正当ではない(S65)として、処理を終了する。
図14は、復元処理において電子制御装置24に書き込まれた現FWデータの正当性を判断するフローを示す図である。更新部32は、ステップS54において、図14に示す処理を実行する。
まず、更新部32は、復元処理において電子制御装置24に書き込まれた現FWデータを検証するための第7検証値を取得する(S71)。第7検証値は、電子制御装置24により算出された、電子制御装置24に書き込まれた現FWデータに対するMAC値である。続いて、更新部32は、管理データ記憶部34から現FWのMAC値(第8検証値)を読み出す(S72)。
続いて、更新部32は、第7検証値と第8検証値とが一致するか否かを判断する(S73)。更新部32は、第7検証値と第8検証値とが一致する場合(S73のYes)、電子制御装置24に書き込まれた現FWデータが正当である(S74)として、処理を終了する。更新部32は、第7検証値と第8検証値とが一致しない場合(S73のNo)、電子制御装置24に書き込まれた現FWデータが正当ではない(S75)として、処理を終了する。
以上のように、本実施形態に係るネットワークシステム10は、電子制御装置24に、データを更新するための別個のバッファを備えなくてもよい。これにより、本実施形態に係るネットワークシステム10によれば、電子制御装置24のコストを小さくすることができる。
本実施形態に係るネットワークシステム10は、中継装置26が予め現FWデータおよび新FWデータの両者を提供装置20から受信する。そして、電子制御装置24に対する現FWデータから新FWデータへの更新が失敗した場合、中継装置26が、予め受信している現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。これにより、本実施形態に係るネットワークシステム10によれば、更新処理が失敗した場合に提供装置20にアクセスしなくてよいので、全体の更新時間を短くすることができる。
(第1変形例)
図15は、第1変形例に係る提供装置20および中継装置26の機能構成を示す図である。図16は、最新バージョン情報を示す図である。
なお、第1変形例について説明をするにあたり、図1から図14を参照して説明したブロックと略同一の機能および構成を有するブロックについては、同一の符号を付けて相違点を除き説明を省略する。第2変形例以降においても同様である。
第1変形例に係る提供装置20は、バージョン送信部122をさらに有する。第1変形例に係る中継装置26の取得部30は、バージョン受信部124とバージョン判定部126とをさらに有する。
バージョン送信部122は、それぞれのファームウェアについて、提供装置20から送信可能な新FWデータのバージョンを表す最新バージョン情報を中継装置26に送信する。最新バージョン情報は、図16に示すように、ECUIDと、FWIDおよびMAC値を含む。MAC値は、最新のFWデータのMAC値である。バージョン送信部122は、複数のファームウェアについての最新バージョン情報を含むリストを送信してよい。バージョン送信部122は、最新バージョン情報を、例えば一定期間毎に送信する。
バージョン受信部124は、提供装置20から送信可能な新FWデータのバージョンを表す最新バージョン情報を受信する。バージョン判定部126は、受信した最新バージョン情報に基づき、電子制御装置24に記憶されている現FWデータのバージョンより、提供装置20から送信可能な新FWデータのバージョンが新しいかを判断する。
要求送信部52は、電子制御装置24に記憶されている現FWデータのバージョンより、提供装置20から送信可能な新FWデータのバージョンが新しい場合、バージョン判定部126から通知を受ける。そして、要求送信部52は、電子制御装置24に記憶されている現FWデータのバージョンより、提供装置20から送信可能な新FWデータのバージョンが新しいことを条件として、そのファームウェアについての取得要求を提供装置20に送信する。
図17は、第1変形例に係る中継装置26による取得処理フローを示す図である。第1変形例において、取得部30は、図17に示す取得処理を実行する。
まず、ステップS81において、取得部30は、提供装置20から最新バージョン情報を受信する。続いて、ステップS82において、取得部30は、ECUIDおよびFWIDが最新バージョン情報と一致する管理データが管理データ記憶部34に記憶されているかを判断する。一致する管理データが無い場合(S82のNo)、取得部30は、本フローを終了する。一致する管理データが有る場合(S82のYes)、取得部30は、処理をステップS83に進める。
ステップS83において、取得部30は、最新バージョン情報に含まれるMAC値と、ECUIDおよびFWIDが一致する管理データに含まれる現FWのMAC値とを比較する。MAC値が一致した場合(S83のYes)、取得部30は、電子制御装置24に記憶されている現FWデータのバージョンと、提供装置20から送信可能な最新のバージョンとが同一であるとして、本フローを終了する。一致しなかった場合(S83のNo)、取得部30は、電子制御装置24に記憶されている現FWデータのバージョンより、提供装置20から送信可能な新FWデータのバージョンが新しいと判断し、処理をステップS84に進める。
ステップS84において、取得部30は、最新バージョン情報に含まれるECUIDおよびFWIDにより特定されるファームウェアについて、取得要求を提供装置20に送信する。提供装置20は、中継装置26から取得要求を受信すると、図8の場合と同様に応答情報を中継装置26に送信する。
続いて、ステップS85において、取得部30は、提供装置20から応答情報を受信する。そして、以後、取得部30は、図8のステップS14からステップS17までの処理と同様の処理を実行する。ただし、ステップS17において、エラー回数が一定回数未満の場合(S17のNo)、取得部30は、処理をステップS84に戻す。
このような第1変形例に係る中継装置26は、電子制御装置24に記憶されている現FWデータのバージョンより、提供装置20から送信可能な新FWデータのバージョンが新しい場合に、取得要求を送信することができる。従って、中継装置26によれば、効率良く取得要求を送信することができる。
(第2変形例)
図18は、第2変形例に係る中継装置26および電子制御装置24の機能構成を示す図である。第2変形例に係る電子制御装置24は、記憶しているデータが正当であるか否かの検証を実行することができる。従って、第2変形例においては、電子制御装置24に書き込まれた新FWデータおよび現FWデータの検証を、電子制御装置24が実行する。
第2変形例に係る電子制御装置24は、図11に示した構成と比較して、第3検証部142および結果送信部144をさらに有し、検証値送信部94を有さない構成である。また、第2変形例に係る中継装置26の更新部32は、図11に示した構成と比較して、結果受信部146をさらに有し、検証値受信部96および第2検証部98を有さない構成である。
第2変形例において、データ送信部84は、開始検知部78から開始指示を受け取ると、提供装置20から受信した新FWデータ、および、提供装置20から受信した新FWデータを検証するための第6検証値を、更新指示とともに電子制御装置24に送信する。第6検証値は、提供装置20から受信した新FWデータのMAC値である。これにより、データ送信部84は、電子制御装置24に現FWデータを新FWデータに更新させることができるとともに、電子制御装置24に書き込まれた新FWデータの正当性を検証させることができる。
第3検証部142は、更新処理において電子制御装置24に書き込まれた新FWデータが正当であるか否かを検証する。具体的には、第3検証部142は、更新処理において電子制御装置24に書き込まれた新FWデータを検証するための第5検証値と、中継装置26から受信した新FWデータを検証するための第6検証値とが一致しない場合に、更新処理により電子制御装置24に書き込まれた新FWデータが正当ではないと判断する。
ここで、第5検証値は、第2検証値生成部92により算出された、データ記憶部70に書き込まれた新FWデータに対するMAC値である。また、第6検証値は、中継装置26から受信した新FWデータのMAC値である。
結果送信部144は、更新処理において電子制御装置24に書き込まれた新FWデータが正当であるか否かの結果を中継装置26に送信する。結果受信部146は、更新処理において電子制御装置24に書き込まれた新FWデータが正当であるか否かの結果を電子制御装置24から受信する。
結果受信部146は、更新処理において電子制御装置24に書き込まれた新FWデータが正当であったことを示す結果を受信した場合、その結果を、確定部100および通知部102に通知する。確定部100は、結果受信部146から、書き込まれた新FWデータが正当である旨の通知を受けた場合、一時記憶部38に記憶されている情報を読み出して、管理データ記憶部34に記憶させる。通知部102は、結果受信部146から、書き込まれた新FWデータが正当である旨の通知を受けた場合、他の電子制御装置24および更新対象の電子制御装置24に、更新対象の電子制御装置24におけるファームウェアの更新が完了したことを示す情報を送信する。
一方、結果受信部146は、更新処理において電子制御装置24に書き込まれた新FWデータが正当でなかったことを示す結果を受信した場合、更新処理が失敗したことを、データ送信部84に通知する。
データ送信部84は、更新処理が失敗した場合、提供装置20から受信した現FWデータ、および、現FWデータを検証するための第8検証値を、復元指示とともに電子制御装置24に送信する。第8検証値は、管理データ記憶部34に記憶されている現FWデータのMAC値である。これにより、データ送信部84は、電子制御装置24に現FWデータを復元させることができるとともに、電子制御装置24に書き込まれた現FWデータの正当性を検証させることができる。
第3検証部142は、復元処理において電子制御装置24に書き込まれた現FWデータが正当であるか否かを検証する。具体的には、第3検証部142は、復元処理において電子制御装置24に書き込まれた現FWデータを検証するための第7検証値と、中継装置26から受信した現FWデータを検証するための第8検証値とが一致しない場合に、復元処理により電子制御装置24に書き込まれた現FWデータが正当ではないと判断する。
ここで、第7検証値は、第2検証値生成部92により算出された、データ記憶部70に書き込まれた現FWデータにおけるMAC値である。また、第8検証値は、中継装置26から受信した現FWデータのMAC値である。
結果送信部144は、復元処理において電子制御装置24に書き込まれた現FWデータが正当であるか否かの結果を中継装置26に送信する。結果受信部146は、復元処理において電子制御装置24に書き込まれた現FWデータが正当であるか否かの結果を電子制御装置24から受信する。
結果受信部146は、復元処理において電子制御装置24に書き込まれた現FWデータが正当であったことを示す結果を受信した場合、その結果を、通知部102に通知する。通知部102は、結果受信部146から、書き込まれた現FWデータが正当である旨の通知を受けた場合、他の電子制御装置24および復元対象の電子制御装置24に、更新対象の電子制御装置24における処理が完了したことを示す情報を送信する。
また、結果受信部146は、復元処理において電子制御装置24に書き込まれた現FWデータが正当でなかったことを示す結果を受信した場合、復元処理が失敗したことをデータ送信部84に通知する。
データ送信部84は、復元処理が失敗した場合、現FWデータおよび第8検証値を復元指示とともに電子制御装置24に送信する処理を繰り返す。これにより、データ送信部84は、電子制御装置24に対して繰り返して復元処理を実行させることができる。
ただし、結果受信部146は、復元処理において電子制御装置24に書き込んだ現FWデータが正当でなかったことを示す結果を受信した回数(エラー回数)が一定回数以上となった場合、データ送信部84による現FWデータの送信を終了させる。そして、結果受信部146は、電子制御装置24に正当なデータが書き込まれていないことを通知部102に通知する。通知部102は、結果受信部146から、正当なデータが書き込まれていないことを示す通知を受けると、他の電子制御装置24および更新対象の電子制御装置24に、更新対象の電子制御装置24に正当なデータが書き込まれていないことを示す情報を送信する。
図19は、第2変形例に係る中継装置26による更新処理フローを示す図である。第2変形例において、更新部32は、図19に示す更新処理を実行する。
まず、更新部32は、図12のステップS41からステップS46までと同様の処理を実行する。ステップS46を終了すると、更新部32は、処理をステップS91に進める。
ステップS91において、更新部32は、提供装置20から受信した新FWデータ、および、提供装置20から受信した新FWデータのMAC値(第6検証値)を、更新指示とともに電子制御装置24に送信する。続いて、ステップS92において、更新部32は、電子制御装置24から、書き込んだ新FWデータが正当であるか否かの結果を受信する。
続いて、ステップS93において、更新部32は、更新処理において電子制御装置24に書き込まれた新FWデータが正当であるか否かを判断する。更新部32は、正当である場合(S93のYes)、処理をステップS50に進め、正当でない場合(S93のNo)、処理をステップS94に進める。
ステップS50およびステップS51において、更新部32は、図12の場合と同様に処理を実行する。ステップS51を終了すると、更新部32は、本ファームウェアについて更新処理を終了する。
ステップS94において、更新部32は、提供装置20から受信した現FWデータおよび現FWデータのMAC値(第8検証値)を、復元指示とともに電子制御装置24に送信する。続いて、ステップS95において、更新部32は、電子制御装置24から、復元処理において書き込んだ現FWデータが正当であるか否かの検証結果を受信する。
続いて、ステップS96において、更新部32は、復元処理において電子制御装置24に書き込まれた現FWデータが正当であるか否かを判断する。更新部32は、正当である場合(S96のYes)、処理をステップS51に進め、正当でない場合(S96のNo)、処理をステップS97に進める。
ステップS97において、更新部32は、復元処理のエラー回数が、一定回数以上であるか否かを判断する。エラー回数が一定回数未満である場合(S97のNo)、更新部32は、処理をステップS94に戻して、現FWデータの送信から処理を繰り返す。エラー回数が一定回数以上である場合(S97のYes)、処理をステップS56に進める。
ステップS56において、更新部32は、図12の場合と同様に処理を実行する。そして、ステップS56を終了すると、更新部32は、本ファームウェアについて更新処理を終了する。
このような第2変形例に係る中継装置26は、電子制御装置24に書き込まれたデータの正当性を、電子制御装置24において検証をさせることができる。
(第3変形例)
図20は、第3変形例に係る中継装置26および電子制御装置24の機能構成を示す図である。図21は、第3変形例に係る状態記憶部40に記憶される情報の内容を示す図である。
第3変形例に係る中継装置26は、電子制御装置24に書き込まれたデータの正当性を、電子制御装置24で検証するか、中継装置26で検証するかを切り替えることができる。第3変形例において、電子制御装置24は、図11に示す構成、または、図18に示す構成である。電子制御装置24が図11に示す構成の場合、電子制御装置24に書き込まれたデータの正当性を中継装置26が検証する。電子制御装置24が図18に示す構成の場合、電子制御装置24に書き込まれたデータの正当性を電子制御装置24が検証する。
第3変形例に係る中継装置26の更新部32は、図11に示した構成に加えて、結果受信部146と、切替部152とをさらに有する。結果受信部146は、図18に示した構成と同様の機能を有する。
第3変形例において、状態記憶部40は、図21に示すように、検証主体情報をさらに記憶する。検証主体情報は、電子制御装置24に書き込まれたデータが正当であるか否かの検証を、中継装置26で実行するか電子制御装置24で実行するかを示す。
切替部152は、更新対象の電子制御装置24についての検証主体情報を状態記憶部40から読み出す。切替部152は、読み出した検証主体情報に基づき、検証を中継装置26で実行させるか電子制御装置24で実行させるかを切り替える。
切替部152は、検証を中継装置26で実行させる場合、検証値受信部96および第2検証部98の機能を有効化し、結果受信部146の機能を停止させる。切替部152は、検証を電子制御装置24で実行させる場合、検証値受信部96および第2検証部98の機能を停止させ、結果受信部146の機能を有効化させる。
図22は、第3変形例に係る中継装置26による更新処理フローを示す図である。第3変形例において、更新部32は、図22に示す更新処理を実行する。
まず、更新部32は、図12のステップS41からステップS46までと同様の処理を実行する。ステップS46を終了すると、更新部32は、処理をステップS111に進める。
ステップS111において、更新部32は、更新対象の電子制御装置24についての検証主体情報を状態記憶部40から読み出す。続いて、ステップS112において、更新部32は、読み出した検証主体情報に基づき、検証を中継装置26で実行させるか、電子制御装置24で実行させるかを判断する。
更新部32は、検証を中継装置26で実行させる場合(S112のYes)、処理をステップS113の第1更新フローに進める。更新部32は、検証を電子制御装置24で実行させる場合(S112のNo)、処理をステップS114の第2更新フローに進める。
ステップS113の第1更新フローは、図12に示すステップS47以降の処理フローと同様である。また、ステップS114の第2更新フローは、図19に示すステップS91以降の処理フローと同様である。
以上の処理を実行することにより、更新部32は、電子制御装置24に書き込まれたデータの検証を中継装置26または電子制御装置24に実行させることができる。
図23は、第2更新処理フローの他の一例を示す図である。電子制御装置24は、記憶しているデータを更新する場合、外部から受信したデータを一時的に記憶するためのバッファを有する場合がある。このような構成の電子制御装置24は、中継装置26から受信した新FWデータをバッファに一時的に格納し、バッファに格納した状態において新FWデータの正当性を検証することができる。
そして、電子制御装置24は、バッファに格納した新FWデータが正当であると判断した場合、新FWデータをバッファからデータ記憶部70に転送する。これにより、電子制御装置24は、記憶している現FWデータを新FWデータに更新することができる。
一方、電子制御装置24は、バッファに格納した新FWデータが正当ではないと判断した場合、バッファに記憶している新FWデータをデータ記憶部70には転送せずに、削除する。この場合、電子制御装置24は、データ記憶部70には現FWデータが残っており、再度、現FWデータを書き込む必要がない。
そこで、電子制御装置24がこのようなバッファを有する構成の場合、更新部32は、ステップS114の第2更新フローにおいて、図23に示す処理を実行してもよい。
まず、ステップS121において、更新部32は、提供装置20から受信した新FWデータ、および、提供装置20から受信した新FWデータのMAC値(第6検証値)を、更新指示とともに電子制御装置24に送信する。続いて、ステップS122において、更新部32は、電子制御装置24から、新FWデータが正当であるか否かの検証結果を受信する。
続いて、ステップS123において、更新部32は、電子制御装置24に送信した新FWデータが正当であったか否かを判断する。更新部32は、正当である場合(S123のYes)、処理をステップS124に進め、正当でない場合(S123のNo)、処理をステップS125に進める。
ステップS124において、更新部32は、一時記憶部38に記憶されている情報を読み出して、管理データ記憶部34に転送する。具体的には、更新部32は、一時記憶部38から新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを読み出して、現FWのMAC値、現FWのバージョン番号および現FWの開発者IDとして管理データ記憶部34に記憶させる。更新部32は、ステップS124を終えると、処理をステップS125に進める。
ステップS125において、更新部32は、更新対象の電子制御装置24および他の電子制御装置24に、更新対象の電子制御装置24がファームウェアの更新を完了した旨を示す終了通知を送信する。この場合、送信した新FWデータが正当であれば、電子制御装置24は新FWデータに基づき動作する。また、送信した新FWデータが正当でなければ、電子制御装置24は現FWデータに基づき動作をする。そして、更新部32は、本ファームウェアについて更新処理を終了する。
(第4変形例)
図24は、第4変形例に係る中継装置26の機能構成を示す図である。第4変形例は、図1から図14を参照して説明したネットワークシステム10を変形した構成であるが、第1変形例、第2変形例および第3変形例に適用されてもよい。
中継装置26は、現FWデータ記憶部201(現データ記憶部)をさらに備える。現FWデータ記憶部201は、制御対象システム22に備えられるそれぞれの電子制御装置24に記憶されている現FWデータを記憶する。
取得部30は、提供装置20から新FWデータを受信する。取得部30は、提供装置20から新FWデータを受信した場合、受信した新FWデータが正当であるか否かを判断する。更新部32は、提供装置20から受信した正当である新FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを新FWデータに更新させる。更新部32は、現FWデータを新FWデータに更新する更新処理が成功した場合、電子制御装置24に送信した新FWデータを現FWデータ記憶部201に転送して、現FWデータとして記憶させる。
また、取得部30は、提供装置20から新FWデータを受信した場合、現FWデータ記憶部201に記憶されている現FWデータが正当であるか否かも判断する。更新部32は、更新処理が失敗した場合、現FWデータ記憶部201に記憶されている正当である現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。
また、取得部30は、現FWデータ記憶部201に記憶されている現FWデータが正当でないと判断された場合、提供装置20から現FWデータを受信する。取得部30は、提供装置20から現FWデータを受信した場合、受信した現FWデータが正当であるか否かを判断する。更新部32は、現FWデータ記憶部201に記憶されている現FWデータが正当でなかった場合であって且つ更新処理が失敗した場合、受信した正当な現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。そして、更新部32は、復元処理が成功した場合、電子制御装置24に送信した現FWデータを現FWデータ記憶部201に転送して、記憶させる。
図25は、現FWデータ記憶部201に記憶される現ファームウェア情報の内容を示す図である。現FWデータ記憶部201は、それぞれの電子制御装置24に記憶されたそれぞれのファームウェア毎に、図25に示す現ファームウェア情報を記憶する。
現ファームウェア情報は、ECUID、FWIDおよび現FWデータを含む。ECUIDは、その電子制御装置24の識別子である。FWIDは、そのファームウェアの識別子である。
現FWデータは、そのファームウェアの実体データである。つまり、現FWデータは、電子制御装置24に現在書き込まれているべきファームウェアの実体データである。
図26は、第4変形例に係る提供装置20および中継装置26の機能構成を示す図である。
要求送信部52は、要求識別子と、ECUIDと、FWIDと、バージョン特定情報とを含む取得要求を、提供装置20に送信する。要求識別子は、新FWデータの送信を要求する取得要求か、現FWデータの送信を要求する取得要求かを識別する情報である。
要求送信部52は、ファームウェア毎に、予め定められた更新タイミングで(例えば定期的に)、新FWデータの送信を要求する取得要求を提供装置20に送信する。また、要求送信部52は、ファームウェアの更新において、現FWデータ記憶部201に記憶されている現FWデータが正当でないと判断された場合、そのファームウェアの現FWデータの送信を要求する取得要求を提供装置20に送信する。
特定部56は、新FWデータの取得要求を受信した場合、そのファームウェアについて、電子制御装置24が記憶している現FWデータのバージョンよりも新しいバージョンの実体データ(新FWデータ)が、存在するか否かを判断する。
応答送信部58は、新FWデータの取得要求を受信した場合であって且つ新FWデータが存在しない場合、ECUID、FWIDおよび更新フラグを含む応答情報を送信する。応答送信部58は、新FWデータの取得要求を受信した場合であって且つ新FWデータが存在する場合、ECUID、FWID、更新フラグ、新FWデータ、新FWのMAC値(第3検証値)、新FWのバージョン番号および新FWの開発者IDを含む応答情報を送信する。更新フラグは、新FWデータが存在しない場合には0、新FWデータが存在する場合には0以外の値となる。
また、応答送信部58は、現FWデータの取得要求を受信した場合、ECUID、FWID、更新フラグ、現FWデータ、現FWのMAC値(第9検証値)、現FWのバージョン番号および現FWの開発者IDを含む応答情報を送信する。更新フラグは、0以外の値となる。
応答受信部60は、新FWデータの取得要求を送信した場合であって且つ新FWデータが存在しない場合、ECUID、FWIDおよび更新フラグを含む応答情報を受信する。応答受信部60は、新FWデータの取得要求を送信した場合であって且つ新FWデータが存在する場合、ECUID、FWID、更新フラグ、新FWデータ、新FWのMAC値(第3検証値)、新FWのバージョン番号および新FWの開発者IDを含む応答情報を受信する。また、応答受信部60は、現FWデータの取得要求を送信した場合、ECUID、FWID、更新フラグ、現FWデータ、現FWのMAC値(第9検証値)、現FWのバージョン番号および現FWの開発者IDを含む応答情報を受信する。
第1検証値生成部62は、新FWデータの取得要求を送信した場合、提供装置20から受信した新FWデータについて、MAC値(第4検証値)を算出する。また、新FWデータの取得要求を送信した場合、第1検証値生成部62は、現FWデータ記憶部201に記憶された現FWデータについて、MAC値(第10検証値)を算出する。具体的には、第1検証値生成部62は、現FWの開発者IDに対応する共有鍵データを共有鍵記憶部36から読み出す。第1検証値生成部62は、読み出した共有鍵データと、現FWデータ記憶部201に記憶された現FWデータとによりMAC値を算出する。
また、第1検証値生成部62は、現FWデータの取得要求を送信した場合、提供装置20から受信した現FWデータについて、MAC値(第11検証値)を算出する。具体的には、第1検証値生成部62は、現FWの開発者IDに対応する共有鍵データを共有鍵記憶部36から読み出す。第1検証値生成部62は、読み出した共有鍵データと、提供装置20から受信した現FWデータとによりMAC値を算出する。
第1検証部64は、提供装置20から受信した新FWデータが正当であるか否かを判断する。具体的には、第1検証部64は、提供装置20から受信した第3検証値と、共有鍵データと提供装置20から受信した新FWデータとにより算出された第4検証値とが一致する場合に、提供装置20から受信した新FWデータが正当であると判断する。これにより、第1検証部64は、提供装置20から受信した新FWデータの開発者が、中継装置26と同一の共有鍵データを保持しているか否かを検証することができる。
なお、第1検証部64は、提供装置20から受信した新FWデータが正当でない場合、要求送信部52に対して、再度、新FWデータの取得要求を送信させてもよい。第1検証部64は、一定回数、同一の取得要求を送信しても新FWデータが正当ではない場合、取得要求の送信を中止させる。
また、新FWデータの取得要求を送信した場合、第1検証部64は、現FWデータ記憶部201に記憶された現FWデータが正当であるか否かを判断する。具体的には、第1検証部64は、電子制御装置24に記憶されている現FWデータを検証するための第1検証値と、現FWデータ記憶部201に記憶された現FWデータを検証するための第10検証値とが一致する場合に、現FWデータ記憶部201に記憶された現FWデータが正当であると判断する。
ここで、第1検証値は、管理データ記憶部34に記憶されている現FWのMAC値である。第10検証値は、第1検証値生成部62により算出された、現FWデータ記憶部201に記憶された現FWデータについてのMAC値である。すなわち、第1検証部64は、現FWデータ記憶部201に記憶された現FWデータが、電子制御装置24に記憶されている現FWデータと同一であるか否かを検証する。
第1検証部64は、現FWデータ記憶部201に記憶された現FWデータが正当でない場合、要求送信部52に対して、現FWデータの取得要求を送信させる。
現FWデータの取得要求を送信した場合、第1検証部64は、提供装置20から受信した現FWデータが正当であるか否かを判断する。具体的には、第1検証部64は、提供装置20から受信した第9検証値と、共有鍵データと提供装置20から受信した現FWデータとにより算出された第11検証値とが一致する場合に、提供装置20から受信した現FWデータが正当であると判断する。
ここで、第9検証値は、現FWデータの取得要求に応じて、提供装置20から受信した現FWデータのMAC値(現FWのMAC値)である。第11検証値は、第1検証値生成部62により算出された現FWデータのMAC値である。すなわち、第1検証部64は、提供装置20から受信した現FWデータの開発者が、中継装置26と同一の共有鍵データを保持しているか否かを検証する。
なお、第1検証部64は、提供装置20から受信した現FWデータが正当でない場合、要求送信部52に対して、再度、現FWデータの取得要求を送信させてもよい。第1検証部64は、一定回数、同一の取得要求を送信しても現FWデータが正当ではない場合、取得要求の送信を中止させる。
第1検証部64は、提供装置20から受信した新FWデータ、および、現FWデータ記憶部201に記憶された現FWデータ(または提供装置20から受信した現FWデータ)が正当であることを条件として、応答受信部60が受信した情報等を一時記憶部38に記憶させる。具体的には、第1検証部64は、提供装置20から受信した、ECUID、FWID、新FWデータ、新FWのMAC値、新FWのバージョン番号、新FWの開発者IDを、一時記憶部38に記憶させる。さらに、第1検証部64は、現FWデータ記憶部201に記憶された現FWデータ(または提供装置20から受信した現FWデータ)を、一時記憶部38に記憶させる。
以上の構成により、中継装置26は、提供装置20から新FWデータを受信することができる。さらに、中継装置26は、現FWデータ記憶部201に記憶された現FWデータが正当であるか否かを判断することができる。また、中継装置26は、現FWデータ記憶部201に記憶された現FWデータが正当でない場合には、提供装置20から現FWデータを受信することができる。中継装置26は、受信した現FWデータが正当であるか否かを判断することができる。そして、中継装置26は、新FWデータおよび現FWデータが正当であることを条件として、一時記憶部38に新FWデータおよび現FWデータを記憶させることができる。
なお、要求送信部52は、ファームウェアの更新タイミングに関わらず(例えば定期的に)、現FWデータの送信を要求する取得要求を提供装置20に送信してもよい。これにより、取得部30は、予め正当な現FWデータを取得して現FWデータ記憶部201に記憶させておくことができる。なお、この場合、応答情報に含まれる更新フラグは、0となる。
また、この場合、第1検証部64は、提供装置20から受信した応答情報に含まれる現FWのMAC値と、管理データ記憶部34に記憶されている現FWのMAC値とが一致するか否かを判断してもよい。一致しない場合、現FWのMAC値を生成するために用いた共有鍵データが更新された可能性がある。従って、一致しない場合、第1検証部64は、MAC値が一致しない旨をユーザ等に通知する。これにより、第1検証部64は、共有鍵データの更新を促すことができる。
図27は、第4変形例に係る中継装置26による取得処理フローを示す図である。本変形例に係る取得部30は、図27に示す取得処理を実行する。
まず、ステップS201において、取得部30は、何れかのファームウェアについて、予め定められたタイミングにおいて、新FWデータの取得要求を提供装置20に送信する。
提供装置20は、新FWデータの取得要求に応じて、対応するファームウェアについての応答情報を中継装置26に送信する。具体的には、提供装置20は、対応する新FWデータが存在しない場合、ECUID、FWID、および、値が0とされた更新フラグを含む応答情報を送信する。提供装置20は、新FWデータが存在する場合、ECUID、FWID、値が0以外とされた更新フラグ、新FWデータ、新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを含む応答情報を送信する。
続いて、ステップS202において、取得部30は、応答情報を受信する。続いて、ステップS203において、取得部30は、応答情報に含まれる更新フラグが、0以外の値であるか否かを判断する。更新フラグが0である場合(S203のNo)、取得部30は、本フローを終了する。更新フラグが0以外の値である場合(S203のYes)、処理をステップS204に進める。
ステップS204において、取得部30は、受信した新FWデータが正当であるか否かを判断する。取得部30は、正当である場合(S204のYes)、処理をステップS206に進め、正当でない場合(S204のNo)、処理をステップS205に進める。
ステップS205において、取得部30は、新FWデータが正当ではなかった回数(エラー回数)が、一定回数以上であるか否かを判断する。エラー回数が一定回数未満である場合(S205のNo)、取得部30は、処理をステップS201に戻す。エラー回数が一定回数以上である場合(S205のYes)、取得部30は、本フローを終了する。
ステップS206において、取得部30は、現FWデータ記憶部201に記憶された現FWデータが正当であるか否かを判断する。取得部30は、正当である場合(S206のYes)、処理をステップS211に進め、正当でない場合(S206のNo)、処理をステップS207に進める。
ステップS207において、取得部30は、同一のファームウェアについて、現FWデータの取得要求を提供装置20に送信する。提供装置20は、現FWデータの取得要求に応じて、対応するファームウェアについての応答情報を中継装置26に送信する。具体的には、提供装置20は、ECUID、FWID、値が0以外とされた更新フラグ、現FWデータ、現FWのMAC値、現FWのバージョン番号および現FWの開発者IDを含む応答情報を送信する。
続いて、ステップS208において、取得部30は、応答情報を受信する。ステップS209において、取得部30は、受信した現FWデータが正当であるか否かを判断する。取得部30は、正当である場合(S209のYes)、処理をステップS211に進め、正当でない場合(S209のNo)、処理をステップS210に進める。
ステップS210において、取得部30は、現FWデータが正当ではなかった回数(エラー回数)が、一定回数以上であるか否かを判断する。エラー回数が一定回数未満である場合(S210のNo)、取得部30は、処理をステップS207に戻す。エラー回数が一定回数以上である場合(S210のYes)、取得部30は、本フローを終了する。
ステップS211において、取得部30は、提供装置20から受信したECUID、FWID、新FWデータ、新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを、一時記憶部38に書き込む。さらに、取得部30は、現FWデータ記憶部201に記憶された現FWデータ、または、提供装置20から受信した現FWデータを、一時記憶部38に書き込む。
ステップS211を終えると、取得部30は、本フローを終了する。この場合、取得部30は、正当な現FWデータまたは新FWデータを受信できている。
図28は、第4変形例に係る中継装置26および電子制御装置24の機能構成を示す図である。
確定部100は、更新処理において電子制御装置24に書き込まれた新FWデータが正当である旨の通知を受けた場合、一時記憶部38に記憶されている新FWデータを読み出す。そして、確定部100は、読み出した新FWデータを現FWデータ記憶部201に転送して、現FWデータ記憶部201に書き込む。すなわち、確定部100は、更新処理が成功した場合、電子制御装置24に送信した新FWデータを、現FWデータとして現FWデータ記憶部201に書き込む。
また、第2検証部98は、更新処理において電子制御装置24に書き込まれた新FWデータが正当ではないと判断した場合、更新処理が失敗したことを、データ送信部84に通知する。データ送信部84は、更新処理が失敗した場合、一時記憶部38に記憶されている現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。すなわち、データ送信部84は、現FWデータ記憶部201に記憶されている正当である現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。また、現FWデータ記憶部201に記憶されている現FWデータが正当でなかった場合、データ送信部84は、提供装置20から受信した正当である現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。
また、確定部100は、復元処理において電子制御装置24に書き込まれた現FWデータが正当である旨の通知を受けた場合、一時記憶部38に記憶されている現FWデータを読み出す。そして、確定部100は、読み出した現FWデータを現FWデータ記憶部201に転送して、現FWデータ記憶部201に書き込む。すなわち、確定部100は、復元処理が成功した場合、電子制御装置24に送信した現FWデータを現FWデータ記憶部201に書き込む。
このような本変形例に係る中継装置26は、電子制御装置24に記憶された現FWデータを、新FWデータに更新することができる。また、中継装置26は、更新処理において電子制御装置24に書き込まれた新FWデータが正当ではない場合には、現FWデータ記憶部201に記憶されている正当な現FWデータにより、電子制御装置24に記憶された現FWデータを復元することができる。さらに、現FWデータ記憶部201に記憶されている現FWデータが正当でなかった場合にも、中継装置26は、提供装置20から受信した正当な現FWデータにより、電子制御装置24に記憶された現FWデータを復元することができる。
図29は、第4変形例に係る中継装置26による更新処理フローを示す図である。本変形例に係る更新部32は、図29に示す更新処理を実行する。
本変形例に係る更新部32は、図12に示したフローと比較して、S221およびS222の処理をさらに実行する点において異なる。
更新部32は、ステップS50の後、処理をS221に進める。S221において、更新部32は、一時記憶部38に記憶されている新FWデータを読み出して、読み出した新FWデータを、現FWデータとして現FWデータ記憶部201に書き込む。更新部32は、S221を終えると、処理をS51に進める。
また、更新部32は、S54で復元処理において電子制御装置24に書き込まれた現FWデータが正当であると判断した場合(S54のYes)、処理をステップS222に進める。S222において、更新部32は、一時記憶部38に記憶されている現FWデータを読み出して、読み出した現FWデータを、現FWデータ記憶部201に書き込む。更新部32は、S222を終えると、処理をS51に進める。
以上のように、第4変形例に係る中継装置26は、電子制御装置24に書き込まれた現FWデータを現FWデータ記憶部201に記憶しておき、新FWデータへの更新処理が失敗した場合、現FWデータ記憶部201に記憶された現FWデータを用いて復元処理をすることができる。これにより、第4変形例に係る中継装置26によれば、提供装置20との通信量を減らすことができる。また、第4変形例に係るネットワークシステム10は、中継装置26が現FWデータを記憶するので、それぞれの電子制御装置24がファームェアをバックアップするためのメモリを備えなくてよい。従って、第4変形例に係るネットワークシステム10によれば、コストを小さくすることができる。
なお、更新部32は、書き込まれた新FWデータが正当でない場合、現FWデータを電子制御装置24に書き込む復元処理を実行する。しかし、更新部32は、復元処理を一定回数以上失敗する可能性もある。現FWデータ記憶部201は、復元処理が失敗した状況を解析するためのファームウェア、電子制御装置24を最低限の機能で動作させるためのファームウェア、または、これらの両者の機能を有するファームウェアを記憶してもよい。そして、更新部32は、復元処理を一定回数以上失敗した場合、このようなファームウェアを電子制御装置24に送信して、電子制御装置24に記憶させてもよい。
また、電子制御装置24は、ファームウェアを更新するためのプログラムを、例えばブートローダ等を記憶したROM領域に、ファームウェアとは別個に記憶してもよい。そして、電子制御装置24は、このプログラムを実行することにより、更新処理および復元処理を実行してもよい。これにより、電子制御装置24は、更新処理中の電源遮断等により再起動された場合、または、上書きしたファームウェアが異常であった場合等に、ファームウェアを更新するためのプログラムに不具合が生じる可能性を少なくすることができる。
また、中継装置26は、提供装置20等にファームウェアの更新結果等を通知する場合、電子制御装置24と提供装置20とが共有する鍵により算出したMAC値を付加してもよい。これにより、提供装置20は、それぞれの電子制御装置24の更新結果を安全に取得することができる。
(第5変形例)
図30は、第5変形例に係る提供装置20および中継装置26の機能構成を示す図である。なお、第5変形例は、第4変形例をさらに変形した構成であるが、図1から図14を参照して説明したネットワークシステム10、第1変形例、第2変形例および第3変形例に適用されてもよい。
中継装置26は、新FWデータ生成部211(新データ生成部)をさらに備える。
提供情報記憶部50は、ファームウェアのそれぞれのバージョンについて、差分データをさらに記憶する。差分データは、当該バージョンの実体データから、直前のバージョンの実体データを除いたデータである。
応答送信部58は、新FWデータの取得要求を受信した場合であって且つ新FWデータが存在する場合、新FWデータに代えて、新FWの差分データを含む応答情報を送信する。すなわち、応答受信部60は、新FWデータの取得要求を送信した場合であって且つ新FWデータが存在する場合、ECUID、FWID、更新フラグ、新FWの差分データ、新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを含む応答情報を受信する。
新FWデータ生成部211は、新FWデータの取得要求を送信した場合であって且つ新FWデータが存在する場合、新FWデータを生成する。具体的には、新FWデータ生成部211は、応答情報に含まれる差分データと、現FWデータ記憶部201に記憶されている現FWデータとに基づき、新FWデータを生成する。
第1検証値生成部62は、新FWデータの取得要求を送信した場合、新FWデータ生成部211により生成された新FWデータについて、MAC値(第4検証値)を算出する。
第1検証部64は、提供装置20から受信した差分データに基づき生成された新FWデータが正当であるか否かを判断する。具体的には、第1検証部64は、提供装置20から受信した第3検証値と、共有鍵データと新FWデータ生成部211が生成した新FWデータとにより算出された第4検証値とが一致する場合に、提供装置20から受信した差分データに基づき生成された新FWデータが正当であると判断する。
第1検証部64は、提供装置20から受信した差分データに基づき生成した新FWデータ、および、現FWデータ記憶部201に記憶された現FWデータが正当であることを条件として、応答受信部60が受信した情報等を一時記憶部38に記憶させる。
以上のように、本変形例に係る中継装置26は、新FWデータに代えて、差分データを提供装置20から受信する。これにより、中継装置26は、提供装置20から受信するデータ量を少なくすることができる。
(第6変形例)
図31は、第6変形例に係る中継装置26の機能構成を示す図である。なお、第6変形例は、第4変形例をさらに変形した構成であるが、図1から図14を参照して説明したネットワークシステム10、第1変形例、第2変形例、第3変形例および第5変形例に適用されてもよい。
第6変形例に係る中継装置26は、制御対象システム22が有する複数の電子制御装置24のファームウェアを協調して更新する。中継装置26は、システム情報記憶部221をさらに備える。システム情報記憶部221は、システム情報を記憶する。
取得部30は、提供装置20から、制御対象システム22が有する複数の電子制御装置24のうちの、更新対象の少なくとも1つの電子制御装置24についての新FWデータ等を受信する。更新部32は、提供装置20から受信したそれぞれの新FWデータを対応する電子制御装置24に送信して、対応する電子制御装置24に現FWデータを新FWデータに更新させる。
また、更新部32は、何れかの1つの電子制御装置24において更新処理が失敗した場合、更新対象であった全ての電子制御装置24に現FWデータを送信して、それぞれの電子制御装置24に現FWデータを復元させる。
図32は、システム情報記憶部221に記憶されるシステム情報の内容を示す図である。システム情報記憶部221は、図32に示すシステム情報を記憶する。
システム情報は、システム識別子およびシステムバージョン情報を含む。システム識別子は、制御対象システム22が有する複数の電子制御装置24の組を識別する情報である。制御対象システム22が車両であれば、車両の種別を識別する情報であってよい。例えば、提供装置20は、システム識別子に基づき、制御対象システム22が有する複数の電子制御装置24を特定することができる。
システムバージョン情報は、システムリストのバージョンを表す。システムバージョン情報は、システムリストが新しくなる毎に大きくなる数値または文字であってよい。
システムリストは、制御対象システム22が有する複数の電子制御装置24のそれぞれに記憶されている現FWデータのバージョンの組を表す。例えば、システムリストは、ECUIDとFWIDとFWデータのバージョン番号との組を含むリストであってよい。
図33は、第6変形例に係る提供装置20および中継装置26の機能構成を示す図である。提供情報記憶部50は、システムリストをバージョン毎に記憶する。
例えば、制御対象システム22が有する複数の電子制御装置24のうち、ある1つの電子制御装置24のファームウェアのバージョンが更新されても、他の電子制御装置24もファームウェアが更新されていなければ、安定して動作しない場合がある。システムリストは、このような不安定な動作をしないように保証されたファームウェアのバージョンの組を表す。また、システムリストは、適宜、バージョンが更新される。システムリストは、それぞれのバージョン毎にバージョン番号が割り当てられている。
要求送信部52は、予め定められた更新タイミングで(例えば定期的に)、新FWデータの取得要求に代えて、一括取得要求を、提供装置20に送信する。一括取得要求は、システム情報記憶部221に記憶されたシステム識別子とシステムバージョン情報とを含む。
特定部56は、提供情報記憶部50から一括取得要求を受信した場合、一括取得要求に含まれるシステムバージョン情報により特定されるバージョンよりも新しいバージョンのシステムリストが提供されているかを判断する。新しいバージョンのシステムリストが提供されている場合、特定部56は、バージョンを更新すべき更新対象の少なくとも1つのファームウェアを特定する。具体的には、特定部56は、新しいバージョンのシステムリストにおいて、現在のバージョンのシステムリストから、バージョンが更新されているファームウェアを特定する。
応答送信部58は、新しいバージョンのシステムリストが存在しない場合、システム識別子および更新フラグを含む応答情報を送信する。応答送信部58は、新しいバージョンのシステムリストが存在する場合、更新フラグ、並びに、特定された更新対象のファームウェアのそれぞれについての新FWデータ等を含む応答情報を送信する。なお、更新フラグは、新しいバージョンのシステムリストが存在しない場合には0、新しいバージョンのシステムリストが存在する場合には0以外の値となる。
応答受信部60は、新しいバージョンのシステムリストが存在しない場合、システム識別子および更新フラグを含む応答情報を受信する。応答受信部60は、新しいバージョンのシステムリストが存在する場合、更新フラグ、並びに、特定された更新対象のファームウェアのそれぞれについての新FWデータ等を含む応答情報を受信する。
第1検証値生成部62は、更新対象のファームウェアのそれぞれについて、新FWデータのMAC値(第4検証値)を算出する。また、第1検証値生成部62は、更新対象のファームウェアのそれぞれについて、現FWデータ記憶部201に記憶された現FWデータのMAC値(第10検証値)を算出する。
第1検証部64は、更新対象のファームウェアのそれぞれについて、提供装置20から受信した新FWデータが正当であるか否かを判断する。また、第1検証部64は、更新対象のファームウェアのそれぞれについて、現FWデータ記憶部201に記憶された現FWデータが正当であるか否かを判断する。
第1検証部64は、更新対象のファームウェアのそれぞれについて、提供装置20から受信した新FWデータ、および、現FWデータ記憶部201に記憶された現FWデータが正当であることを条件として、応答受信部60が受信した情報等を一時記憶部38に記憶させる。具体的には、第1検証部64は、更新対象のファームウェアのそれぞれについて、提供装置20から受信した、ECUID、FWID、新FWデータ、新FWのMAC値、新FWのバージョン番号、新FWの開発者IDを、一時記憶部38に記憶させる。さらに、第1検証部64は、更新対象のファームウェアのそれぞれについて、現FWデータ記憶部201に記憶された現FWデータを、一時記憶部38に記憶させる。
以上の構成により、中継装置26は、更新対象のファームウェアのそれぞれについて、一括して、提供装置20から新FWデータを受信することができる。さらに、中継装置26は、更新対象のファームウェアのそれぞれについて、受信した新FWデータ、および、現FWデータ記憶部201に記憶された現FWデータが正当であるか否かを、一括して判断することができる。
なお、第1検証部64は、提供装置20から受信した何れかの新FWデータが正当でない場合、要求送信部52に対して、その新FWデータの取得要求を送信させてもよい。そして、第1検証部64は、一定回数、同一の取得要求を送信しても新FWデータが正当ではない場合、更新対象の全てのファームウェアについて、取得処理を終了する。
また、第1検証部64は、現FWデータ記憶部201に記憶された現FWデータが正当でない場合、要求送信部52に対して、現FWデータの取得要求を送信させてもよい。そして、第1検証部64は、一定回数、同一の取得要求を送信しても現FWデータが正当ではない場合、更新対象の全てのファームウェアについて、取得処理を終了する。
図34は、第6変形例に係る中継装置26による取得処理フローを示す図である。本変形例に係る取得部30は、図34に示す取得処理を実行する。
まず、ステップS231において、取得部30は、予め定められたタイミングにおいて、一括取得要求を提供装置20に送信する。
提供装置20は、一括取得要求に応じて、対応する応答情報を中継装置26に送信する。提供装置20は、新しいバージョンのシステムリストが提供されていない場合には、値が0とされた更新フラグを含む応答情報を送信する。また、提供装置20は、新しいバージョンのシステムリストが提供されている場合には、値が0以外とされた更新フラグ、および、更新対象のファームウェアのそれぞれについての新FWデータ等を含む応答情報を送信する。
続いて、ステップS232において、取得部30は、応答情報を受信する。続いて、ステップS233において、取得部30は、応答情報に含まれる更新フラグが、0以外の値であるか否かを判断する。更新フラグが0である場合(S233のNo)、取得部30は、本フローを終了する。更新フラグが0以外の値である場合(S233のYes)、処理をステップS234に進める。
S234において、取得部30は、更新対象のファームウェアのうちの1つを検証対象のファームウェアとして特定する。続いて、ステップS235において、取得部30は、検証対象のファームウェアについて、新FWデータが正当であるか否かを判断する。取得部30は、正当である場合(S235のYes)、処理をステップS236に進め、正当でない場合(S235のNo)、本フローを終了する。
ステップS236において、取得部30は、検証対象のファームウェアについて、現FWデータ記憶部201に記憶された現FWデータが正当であるか否かを判断する。取得部30は、正当である場合(S236のYes)、処理をステップS237に進め、正当でない場合(S236のNo)、本フローを終了する。
ステップS237において、取得部30は、検証対象のファームウェアについて、提供装置20から受信した新FWデータ等を一時記憶部38に書き込む。さらに、取得部30は、検証対象のファームウェアについて、現FWデータ記憶部201に記憶された現FWデータを一時記憶部38に書き込む。
続いて、ステップS238において、取得部30は、更新対象の全てのファームウェアを検証したか否かを判断する。まだ全てを検証していない場合には(S238のNo)、取得部30は、処理をS234に戻し、他のファームウェアを検証対象として特定して処理を続ける。全てを検証した場合には(S238のYes)、取得部30は、本フローを終了する。
図35は、第6変形例に係る中継装置26および電子制御装置24の機能構成を示す図である。
開始検知部78は、更新対象のファームウェアを記憶するそれぞれの電子制御装置24が、更新可能か否かを判断する。開始検知部78は、更新対象のファームウェアを記憶するそれぞれの電子制御装置24が全て更新可能である場合、開始送信部80およびデータ送信部84に開始指示を与える。
開始送信部80は、開始指示を受け取ると、更新対象のファームウェアを記憶するそれぞれの電子制御装置24に更新開始を示す情報を送信する。
データ送信部84は、開始検知部78から開始指示を受け取ると、更新対象のファームウェアを記憶するそれぞれの電子制御装置24に、提供装置20から受信した対応する新FWデータを電子制御装置24に送信して、電子制御装置24に記憶されている現FWデータを新FWデータに更新させる。
検証値受信部96は、更新対象のファームウェアを記憶するそれぞれの電子制御装置24から、更新処理においてデータ記憶部70に書き込まれた新FWデータを検証するためのMAC値を受信する。
第2検証部98は、更新対象のファームウェアのそれぞれについて、更新処理において電子制御装置24に書き込まれた新FWデータが正当であるか否かを検証する。第2検証部98は、更新対象のファームウェアのそれぞれについて、更新処理において電子制御装置24に書き込まれた新FWデータが正当であると判断した場合、確定部100および通知部102に通知する。
確定部100は、更新対象のファームウェアのそれぞれについて、更新処理において電子制御装置24に書き込まれた新FWデータが正当である旨の通知を受けた場合、一時記憶部38に記憶されている情報を読み出して、管理データ記憶部34に記憶させる。
通知部102は、更新対象のファームウェアの全てについて、第2検証部98から新FWデータが正当である旨の通知を受けた場合、他の電子制御装置24および更新対象の電子制御装置24に、ファームウェアの更新を完了したことを示す情報を送信する。
一方、第2検証部98は、何れか1つの電子制御装置24に書き込まれた新FWデータが正当ではないと判断した場合、更新処理が失敗したことを、データ送信部84に通知する。
データ送信部84は、更新処理が失敗した場合、更新対象のファームウェアのそれぞれについて、対応する現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。具体的には、データ送信部84は、更新対象のファームウェアのそれぞれについて、一時記憶部38に記憶された現FWデータを電子制御装置24に送信するとともに、復元指示を送信する。なお、データ送信部84は、まだ新FWデータへ送信しておらず更新を開始していない電子制御装置24については、復元処理をさせなくてもよい。
検証値受信部96は、復元対象のファームウェアのそれぞれについて、電子制御装置24から、復元処理においてデータ記憶部70に書き込まれた現FWデータを検証するためのMAC値を受信する。
第2検証部98は、復元対象のファームウェアのそれぞれについて、復元処理において電子制御装置24に書き込まれた現FWデータが正当であるか否かを検証する。第2検証部98は、復元対象のファームウェアのそれぞれについて、復元処理において電子制御装置24に書き込まれた現FWデータが正当であると判断した場合、通知部102に通知する。通知部102は、復元対象のファームウェアの全てについて、第2検証部98から現FWデータが正当である旨の通知を受けた場合、他の電子制御装置24および更新対象の電子制御装置24に、処理が完了したことを示す情報を送信する。
また、第2検証部98は、復元対象のファームウェアの何れかについて、復元処理において電子制御装置24に書き込まれた現FWデータが正当でないと判断した場合、電子制御装置24に正当なデータが書き込まれていないことを通知部102に通知する。通知部102は、第2検証部98から、正当なデータが書き込まれていないことの通知を受けると、他の電子制御装置24および更新対象の電子制御装置24に、正当なデータが書き込まれていないことを示す情報を送信する。
確定部100は、更新対象のファームウェアのそれぞれについて、更新処理において電子制御装置24に書き込まれた新FWデータが正当である旨の通知を受けた場合、一時記憶部38に記憶されている新FWデータを現FWデータ記憶部201に転送して、現FWデータ記憶部201に書き込む。また、確定部100は、復元処理において電子制御装置24に書き込まれた現FWデータが正当である旨の通知を受けた場合、一時記憶部38に記憶されている現FWデータを現FWデータ記憶部201に転送して、現FWデータ記憶部201に書き込む。
図36は、第6変形例に係る中継装置26による更新処理フローを示す図である。更新部32は、図36に示す更新処理を実行する。
まず、ステップS241において、更新部32は、更新対象のファームウェアのそれぞれについて、更新タイミング情報を管理データ記憶部34から読み出す。続いて、ステップS242において、更新部32は、更新対象のファームウェアを記憶するそれぞれの電子制御装置24についてのECU状態情報を状態記憶部40から読み出す。
続いて、ステップS243において、更新部32は、読み出したECU状態情報等に基づき、更新対象のファームウェアを記憶する全ての電子制御装置24が更新可能か否かを判断する。更新部32は、更新可能ではない場合(S243のNo)、処理をステップS244に進めて一定時間待機した後に、再度、ステップS242から処理を繰り返す。更新部32は、更新可能である場合(S243のYes)、処理をステップS245に進める。
ステップS245において、更新部32は、更新対象のファームウェアを記憶するそれぞれの電子制御装置24に更新開始を示す情報を送信する。続いて、ステップS246において、更新部32は、他の電子制御装置24に、更新対象の電子制御装置24におけるファームウェアの更新の開始を示す情報を送信する。
続いて、ステップS247において、更新部32は、更新対象の少なくとも1つのファームウェアのうちの1つのファームウェアを、書き込み対象のファームウェアとして特定する。
続いて、ステップS248において、更新部32は、書き込み対象のファームウェアについて、提供装置20から受信した新FWデータを電子制御装置24に送信して、電子制御装置24に記憶されている現FWデータを新FWデータに更新させる。
続いて、ステップS249において、更新部32は、更新対象の電子制御装置24から、書き込んだ新FWデータを検証するためのMAC値を受信する。
続いて、ステップS250において、更新部32は、書き込み対象のファームウェアについて、更新処理において電子制御装置24に書き込まれた新FWデータが正当であるか否かを検証する。正当でない場合(S250のNo)、更新部32は、処理をS251に進めてロールバック処理を実行する。なお、S251のロールバック処理については、図37でさらに説明する。
正当である場合(S250のYes)、更新部32は、処理をS252に進める。ステップS252において、更新部32は、一時記憶部38に記憶されている、書き込み対象のファームウェアについての新FWのMAC値、新FWのバージョン番号および新FWの開発者IDを読み出して、現FWのMAC値、現FWのバージョン番号および現FWの開発者IDとして管理データ記憶部34に記憶させる。
続いて、S253において、更新部32は、一時記憶部38に記憶されている、書き込み対象のファームウェアについての新FWデータを読み出して、読み出した新FWデータを現FWデータとして、現FWデータ記憶部201に書き込む。更新部32は、S253を終えると、処理をS254に進める。
続いて、ステップS254において、更新部32は、更新対象の全てのファームウェアについて、新FWデータを書き込んだか否かを判断する。全てをまだ書き込んでいない場合には(S254のNo)、更新部32は、処理をS247に戻し、他のファームウェアを書き込み対象として特定して処理を続ける。全てを書き込んだ場合には(S254のYes)、更新部32は、本フローを終了する。
図37は、第6変形例に係る中継装置26によるロールバック処理フローを示す図である。更新部32は、図36で示したS251において、図37に示すロールバック処理を実行する。
まず、ステップS261において、更新部32は、更新対象のファームウェアのうちの1つのファームウェアを、復元対象のファームウェアとして特定する。なお、更新部32は、新FWデータへ送信しておらず更新を開始していないファームウェアについては、復元対象から除いてよい。
続いて、ステップS262において、更新部32は、復元対象のファームウェアについて、一時記憶部38に記憶された現FWデータを電子制御装置24に送信して、電子制御装置24に現FWデータを復元させる。
続いて、ステップS263において、更新部32は、復元対象の電子制御装置24から、書き込んだ現FWデータを検証するためのMAC値を受信する。
続いて、ステップS264において、更新部32は、復元処理において電子制御装置24に書き込まれた現FWデータが正当であるか否かを検証する。更新部32は、正当でない場合(S264のNo)、処理をステップS265に進め、正当である場合(S264のYes)、処理をステップS266に進める。
ステップS265において、更新部32は、復元対象の電子制御装置24および他の電子制御装置24に、復元対象の電子制御装置24に正当なデータが書き込まれていないことを示す失敗通知を送信する。ステップS265を終えると、更新部32は、処理をS268に進める。
ステップS266において、更新部32は、一時記憶部38に記憶されている、書き込み対象のファームウェアについての現FWのMAC値、現FWのバージョン番号および現FWの開発者IDを読み出して管理データ記憶部34に記憶させる。
続いて、ステップS267において、更新部32は、一時記憶部38に記憶されている、書き込み対象のファームウェアについての現FWデータを読み出して、読み出した現FWデータを、現FWデータ記憶部201に書き込む。更新部32は、ステップS267を終えると、処理をS268に進める。
続いて、ステップS268において、更新部32は、更新対象の全てのファームウェアについて、現FWデータを書き込んだか否かを判断する。まだ全てを書き込んでいない場合には(S268のNo)、更新部32は、処理をS261に戻し、他のファームウェアを復元対象として特定して処理を続ける。全てを書き込んだ場合には(S268のYes)、更新部32は、本フローを終了する。
このような本変形例に係る中継装置26は、複数の電子制御装置24のファームウェアを協調して更新することができる。これにより、中継装置26は、複数の電子制御装置24のファームウェアを、安定して動作をするバージョンの組み合わせとなるように更新することができる。なお、第6変形例に係る構成は、図1から図14を参照して説明したネットワークシステム10に適用されてもよい。
(第7変形例)
図38は、第7変形例に係るネットワークシステム10を示す図である。なお、第7変形例は、第4変形例をさらに変形した構成であるが、第5変形例および第6変形例に適用されてもよい。
制御対象システム22は、中継装置26の外部に、記憶装置251をさらに備える。記憶装置251は、内部ネットワークを介して中継装置26と接続されていてもよいし、内部ネットワークとは異なるネットワークで中継装置26と接続されていてもよい。中継装置26は、情報を記憶装置251に書き込むことができる。また、中継装置26は、記憶装置251に記憶されている情報を読み出すことができる。
図39は、第7変形例に係る中継装置26および記憶装置251の機能構成を示す図である。中継装置26は、第1通信部261をさらに有する。記憶装置251は、第2通信部262と、現FWデータ記憶部201とを有する。
第1通信部261および第2通信部262は、互いに情報を送受信する。現FWデータ記憶部201は、第1通信部261および第2通信部262を介して、中継装置26の取得部30および更新部32からアクセスがされる。取得部30および更新部32は、外部の記憶装置251に対して、現FWデータの書き込みおよび読み出しをする。
また、更新部32の確定部100は、書き込まれた新FWデータまたは現FWデータが正当である旨の通知(更新結果通知)を電子制御装置24から受け取る。確定部100は、電子制御装置24から送信された更新結果通知と新FWデータ(または現FWデータ)との組を外部の記憶装置251に送信して、記憶させてもよい。これにより、制御対象システム22は、外部の記憶装置251に記憶されている現FWデータが、電子制御装置24に書き込まれていることを保証することができる。
このような制御対象システム22は、例えば中継装置26のプログラムが故障した場合であっても、現FWデータ記憶部201に記憶されている現FWデータが不正に書き換えられたり故障したりすることを回避することができる。また、中継装置26および記憶装置251は、共有鍵を用いて現FWデータのMAC値を算出して、送受信する現FWデータを検証してもよい。これにより、制御対象システム22は記憶装置251に記憶される現FWデータの不正な書き換えを防止することができる。
また、制御対象システム22は、電子制御装置24毎に、記憶装置251を備えてもよい。また、制御対象システム22は、電子制御装置24毎に、中継装置26および記憶装置251に共有鍵を保持させてもよい。これにより、制御対象システム22は、現FWデータの不正な書き換えをより強力に防止することができる。
さらに、中継装置26は、更新結果通知に、電子制御装置24に書き込まれた新FWデータ(または現FWデータ)のハッシュ値を付与した情報のMAC値を生成してもよい。そして、中継装置26は、生成したMAC値と、更新結果通知と、新FWデータ(または現FWデータ)とを記憶装置251に送信する。この場合、記憶装置251の第2通信部262は、受信した新FWデータ(または現FWデータ)のハッシュ値を生成し、更新結果通知にハッシュ値を付与した情報のMAC値を生成して、比較する。これにより、第2通信部262は、受信した新FWデータ(または現FWデータ)が確かに電子制御装置24に記憶されているものであることを、中継装置26にマルウェアが進入しているような状況下であっても保証できる。
なお、中継装置26および記憶装置251は、記憶装置251が生成した乱数を用いたチャレンジレスポンス方式を利用して、更新結果通知をやり取りしてもよい。これにより、中継装置26および記憶装置251は、過去に有効であった更新結果通知を利用した攻撃を防ぎ、セキュリティを向上させることができる。中継装置26および記憶装置251は、チャレンジレスポンス方式ではなく、公開鍵を用いた方式で過去に有効であった更新結果通知を利用した攻撃を防いでもよい。
図40は、実施形態に係る情報処理装置300のハードウェア構成の一例を示す図である。上述した中継装置26は、例えば図40に示すような情報処理装置300により実現することができる。
情報処理装置300は、通常のコンピュータと同様の構成をしている。すなわち、情報処理装置300は、CPU302と、ROM304と、RAM306と、記憶装置308と、外部通信装置310と、内部通信装置312とを有する。CPU302、ROM304、RAM306、記憶装置308、外部通信装置310および内部通信装置312は、バスにより接続されている。CPU302、ROM304、RAM306は1つのチップで構成され、それと、記憶装置308、外部通信装置310および内部通信装置312がバスにより接続されてもよい。
CPU302は、記憶装置308に記憶されたプログラムをRAM306に展開して実行し、各部を制御して入出力を行ったり、データの加工を行ったりする。ROM304には、OSの起動用プログラムを記憶装置308からRAM306に読み出すスタートプログラムが記憶されている。RAM306は、CPU302の作業領域としてデータを記憶する。
記憶装置308は、例えば、ハードディスクドライブまたはフラッシュメモリ等である。記憶装置308は、オペレーティングシステム、アプリケーションプログラムおよびデータを記憶している。これらのプログラムは、インストール可能な形式または実行可能な形式のファイルで、コンピュータで読み取り可能な記録メディアに記録して配布される。また、プログラムは、サーバからダウンロードすることにより配布されてもよい。
外部通信装置310は、外部ネットワークに接続するためのインターフェイス装置である。内部通信装置312は、内部ネットワークに接続するためのインターフェイス装置である。
本実施形態の情報処理装置300で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM、フレキシブルディスク(FD)、CD−R、DVD等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
また、本実施形態の情報処理装置300で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態の情報処理装置300で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。また、本実施形態のプログラムを、ROM304等に予め組み込んで提供するように構成してもよい。
情報処理装置300を中継装置26として機能させるためのプログラムは、取得モジュール(要求送信モジュール、応答受信モジュール、第1検証値生成モジュール、第1検証モジュールおよび状況更新モジュール等を含む)と、更新モジュール(状態受信モジュール、開始検知モジュール、開始送信モジュール、データ送信モジュール、検証値受信モジュール、第2検証モジュール、確定モジュールおよび通知モジュール等)とを有する。情報処理装置300は、実際のハードウェアとしてはプロセッサ(CPU302)が記憶媒体(記憶装置308等)からプログラムを読み出して実行することにより上記各部が主記憶装置(RAM306)上にロードされ、取得部30(要求送信部52、応答受信部60、第1検証値生成部62、第1検証部64および状況更新部66等を含む)と、更新部32(状態受信部76、開始検知部78、開始送信部80、データ送信部84、検証値受信部96、第2検証部98、確定部100および通知部102等)とが、主記憶装置上に生成されるようになっている。
本発明のいくつかの実施形態および変形例を説明したが、これらの実施形態および変形例は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。