(57)【特許請求の範囲】
【請求項１】
電子制御装置に記憶されている現データを新データに更新させるための中継装置であって、
前記電子制御装置を識別する装置識別子と、前記現データを識別するデータ識別子と、前記現データのバージョンを特定可能なバージョン特定情報とを含む取得要求を、提供装置に送信する要求送信部と、
前記取得要求に応じて、前記提供装置から前記新データおよび前記現データを含む応答情報を受信する応答受信部と、
前記提供装置から受信した前記新データを前記電子制御装置に送信して前記電子制御装置に記憶されている前記現データを前記新データに更新させ、更新処理が失敗した場合、前記提供装置から受信した前記現データを前記電子制御装置に送信して前記電子制御装置に前記現データを復元させるデータ送信部と、
を備える中継装置。
【請求項２】
前記電子制御装置による制御の対象装置が予め定められた状態となった場合に、更新可能と判断する開始検知部をさらに備え、
前記データ送信部は、前記対象装置が前記予め定められた状態となったことを条件に、前記新データを前記電子制御装置に送信して前記電子制御装置に記憶されている前記現データを前記新データに更新させる
請求項１に記載の中継装置。
【請求項３】
前記提供装置から受信した前記現データおよび前記新データが正当であるか否かを判断する第１検証部をさらに備え、
前記データ送信部は、正当であると判断された前記現データおよび前記新データを前記電子制御装置へ送信する
請求項１または２に記載の中継装置。
【請求項４】
前記第１検証部は、前記電子制御装置に記憶されている前記現データを検証するための第１検証値と、前記提供装置から受信した前記現データを検証するための第２検証値とが一致する場合に、前記提供装置から受信した前記現データが正当であると判断する
請求項３に記載の中継装置。
【請求項５】
前記応答受信部は、前記新データを検証するための第３検証値を前記提供装置からさらに受信し、
前記第１検証部は、前記第３検証値と、共有鍵データと前記提供装置から受信した前記新データとにより算出された第４検証値とが一致する場合に、前記提供装置から受信した前記新データが正当であると判断する
請求項３または４に記載の中継装置。
【請求項６】
前記更新処理により前記電子制御装置に書き込まれた前記新データが正当であるか否かを検証する第２検証部をさらに備え、
前記データ送信部は、前記更新処理において前記電子制御装置に書き込まれた前記新データが正当ではない場合、前記提供装置から受信した前記現データを前記電子制御装置へ送信して前記電子制御装置に前記現データを復元させる
請求項３から５の何れか１項に記載の中継装置。
【請求項７】
前記第２検証部は、前記更新処理において前記電子制御装置に書き込まれた前記新データを検証するための第５検証値と、前記電子制御装置へと送信した前記新データを検証するための第６検証値とが一致しない場合に、前記更新処理により前記電子制御装置に書き込まれた前記新データが正当ではないと判断する
請求項６に記載の中継装置。
【請求項８】
前記第２検証部は、復元処理において前記電子制御装置に書き込まれた前記現データが正当であるか否かをさらに判断し、
前記中継装置は、前記電子制御装置に書き込まれた前記現データが正当ではない場合、前記電子制御装置に書き込まれたデータが正当でないことを外部に通知する通知部をさらに備える
請求項６または７に記載の中継装置。
【請求項９】
前記第２検証部は、前記復元処理において前記電子制御装置に書き込まれた前記現データを検証するための第７検証値と、前記電子制御装置へと送信した前記現データを検証するための第８検証値とが一致しない場合に、前記電子制御装置に書き込まれた前記現データが正当ではないと判断する
請求項８に記載の中継装置。
【請求項１０】
前記データ送信部は、前記提供装置から受信した前記新データおよび前記新データを検証するための第６検証値を前記電子制御装置に送信して前記電子制御装置に記憶されている前記現データを前記新データに更新させ、
前記中継装置は、前記更新処理において前記電子制御装置に書き込まれた前記新データが正当であるか否かの結果を前記電子制御装置から受信する結果受信部をさらに備え、
前記データ送信部は、前記更新処理において前記電子制御装置に書き込まれた前記新データが正当でなかったことを示す結果を受信した場合、前記提供装置から受信した前記現データおよび前記現データを検証するための第８検証値を前記電子制御装置へ送信して前記電子制御装置に前記現データを復元させる
請求項３から５の何れか１項に記載の中継装置。
【請求項１１】
前記提供装置から送信可能な前記新データのバージョンを表す情報を受信するバージョン受信部と、
前記電子制御装置に記憶されている前記現データのバージョンより、前記提供装置から送信可能な前記新データのバージョンが新しいかを判断するバージョン判定部と、
をさらに備え、
前記要求送信部は、前記電子制御装置に記憶されている前記現データのバージョンより、前記提供装置から送信可能な前記新データのバージョンが新しいことを条件として、前記取得要求を前記提供装置に送信する
請求項１から１０の何れか１項に記載の中継装置。
【請求項１２】
前記電子制御装置に書き込まれた前記新データが正当であるか否かの検証を前記中継装置で実行するか前記電子制御装置で実行するかを示す検証主体情報を記憶する状態記憶部と、
前記検証主体情報に基づき、前記検証を前記中継装置で実行させるか前記電子制御装置で実行させるかを切り替える切替部と、
をさらに備える請求項１に記載の中継装置。
【請求項１３】
前記現データを記憶する現データ記憶部と、
前記更新処理が成功した場合、前記電子制御装置に送信した前記新データを、前記現データとして前記現データ記憶部に書き込む確定部と、
をさらに備え、
前記要求送信部は、前記新データの送信を要求する前記取得要求を、前記提供装置に送信し、
前記応答受信部は、前記新データの送信を要求する前記取得要求に応じて、前記提供装置から前記新データを受信し、
前記データ送信部は、前記更新処理が失敗した場合、前記現データ記憶部に記憶されている前記現データを前記電子制御装置に送信して前記電子制御装置に前記現データを復元させる
請求項１に記載の中継装置。
【請求項１４】
前記提供装置から受信した前記新データおよび前記現データ記憶部に記憶されている前記現データが正当であるか否かを判断する第１検証部をさらに備え、
前記データ送信部は、正当である前記現データおよび前記新データを前記電子制御装置へ送信する
請求項１３に記載の中継装置。
【請求項１５】
前記要求送信部は、前記現データ記憶部に記憶されている前記現データが正当でないと判断された場合、前記現データの送信を要求する前記取得要求を、前記提供装置に送信し、
前記応答受信部は、前記現データの送信を要求する前記取得要求に応じて、前記提供装置から前記現データを受信し、
前記データ送信部は、前記更新処理が失敗した場合、前記提供装置から受信した前記現データを前記電子制御装置に送信して前記電子制御装置に前記現データを復元させる
請求項１４に記載の中継装置。
【請求項１６】
前記新データから前記現データを除いた差分データと、前記現データ記憶部に記憶された前記現データとに基づき、前記新データを生成する新データ生成部をさらに備え、
前記応答受信部は、前記新データの送信を要求する前記取得要求に応じて、前記提供装置から前記差分データを受信し、
前記新データ生成部は、前記提供装置から受信した前記差分データと、前記現データ記憶部に記憶された前記現データとに基づき、前記新データを生成し
前記データ送信部は、前記新データ生成部が生成した前記新データを前記電子制御装置に送信して前記電子制御装置に記憶されている前記現データを前記新データに更新させる
請求項１３から１５の何れか１項に記載の中継装置。
【請求項１７】
前記要求送信部は、複数の前記電子制御装置の組を識別するシステム識別子と、複数の前記電子制御装置のそれぞれに記憶されている前記現データのバージョンの組を表すシステムリストのバージョンを表すシステムバージョン情報とを含む前記取得要求を、前記提供装置に送信し、
前記応答受信部は、前記取得要求に応じて、前記新データへの更新を必要とする更新対象の少なくとも１つの前記電子制御装置のそれぞれについての前記新データを受信し、
前記データ送信部は、
前記提供装置から受信したそれぞれの前記新データを対応する前記電子制御装置に送信して、対応する前記電子制御装置に記憶されている前記現データを前記新データに更新させ、
何れかの前記電子制御装置において前記更新処理が失敗した場合、前記更新処理が失敗した前記電子制御装置および前記更新処理が成功したそれぞれの前記電子制御装置に、対応する前記現データを送信して、前記現データを復元させる
請求項１に記載の中継装置。
【請求項１８】
前記更新処理が成功した場合、前記電子制御装置に送信した前記新データを、前記現データとして、外部に設けられている現データ記憶部に書き込む確定部をさらに備え、
前記要求送信部は、前記新データの送信を要求する前記取得要求を、前記提供装置に送信し、
前記応答受信部は、前記新データの送信を要求する前記取得要求に応じて、前記提供装置から前記新データを受信し、
前記データ送信部は、前記更新処理が失敗した場合、前記現データ記憶部に記憶されている前記現データを前記電子制御装置に送信して前記電子制御装置に前記現データを復元させる
請求項１に記載の中継装置。
【請求項１９】
電子制御装置に記憶されている現データを新データに更新させるための中継装置により実行される中継方法であって、
前記電子制御装置を識別する装置識別子と、前記現データを識別するデータ識別子と、前記現データのバージョンを特定可能なバージョン特定情報とを含む取得要求を、提供装置に送信し、
前記取得要求に応じて、前記提供装置から前記新データおよび前記現データを含む応答情報を受信し、
前記提供装置から受信した前記新データを前記電子制御装置に送信して前記電子制御装置に記憶されている前記現データを前記新データに更新させ、更新処理が失敗した場合、前記提供装置から受信した前記現データを前記電子制御装置に送信して前記電子制御装置に前記現データを復元させる
中継方法。
【請求項２０】
情報処理装置を、電子制御装置に記憶されている現データを新データに更新させるための中継装置として機能させるためのプログラムであって、
前記情報処理装置を、
前記電子制御装置を識別する装置識別子と、前記現データを識別するデータ識別子と、前記現データのバージョンを特定可能なバージョン特定情報とを含む取得要求を、提供装置に送信する要求送信部と、
前記取得要求に応じて、前記提供装置から前記新データおよび前記現データを含む応答情報を受信する応答受信部と、
前記提供装置から受信した前記新データを前記電子制御装置に送信して前記電子制御装置に記憶されている前記現データを前記新データに更新させ、更新処理が失敗した場合、前記提供装置から受信した前記現データを前記電子制御装置に送信して前記電子制御装置に前記現データを復元させるデータ送信部と、
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、中継装置、中継方法およびプログラムに関する。
【背景技術】
【０００２】
車両は、例えばエンジン等を制御するための電子制御装置（ＥＣＵ）を備える。電子制御装置は、ファームウェアを実行してエンジン等を制御する。また、近年、ネットワークに接続可能な車両も提案されている。このような車両に備えられた電子制御装置は、ネットワークを介してデータをダウンロードし、ファームウェアを更新することができる。このような電子制御装置は、ファームウェアの脆弱性が発見された場合、車両を工場等に戻すことなく、ファームウェアを更新することができる。
【０００３】
ところで、電子制御装置は、ファームウェアの更新が失敗した場合、現行のファームウェアをダウンロードしてメモリに書き込まなければならなかった。このため、電子制御装置は、ファームウェアの更新の失敗時において、再度、サーバ等にアクセスをしなければならなく、更新を開始してから再度実行可能な状態となるまでの期間が長くなってしまっていた。
【０００４】
また、このような問題を解決するため、電子制御装置は、データを一時的に記憶するバッファを２個備える場合がある。このような構成の電子制御装置は、ファームウェアの更新において、一方のバッファに現行のファームウェアを保持させておき、他方のバッファを用いて新しいファームウェアをダウンロードする。そして、電子制御装置は、ファームウェアの更新が失敗した場合には、一方のバッファに記憶させていた現行のファームウェアをメモリに書き戻す。しかしながら、このような構成の電子制御装置は、バッファを２個備えなくてはならないので、コストが高くなってしまっていた。また、車両が複数の電子制御装置を備える場合、それぞれの電子制御装置がバッファを２個備えなければならないので、車両の全体のコストが高くなってしまっていた。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１１／０５５４４７号
【特許文献２】特開２００６−２６８５５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、電子制御装置のコストを小さくするとともに、電子制御装置に記憶されているデータの更新時間を短くすることにある。
【課題を解決するための手段】
【０００７】
実施形態の中継装置は、電子制御装置に記憶されている現データを新データに更新させるための装置である。前記中継装置は、要求送信部と、応答受信部と、データ送信部とを備える。前記要求送信部は、前記電子制御装置を識別する装置識別子と、前記現データを識別するデータ識別子と、前記現データのバージョンを特定可能なバージョン特定情報とを含む取得要求を、提供装置に送信する。前記応答受信部は、前記取得要求に応じて、前記提供装置から前記新データおよび前記現データを含む応答情報を受信する。前記データ送信部は、前記提供装置から受信した前記新データを前記電子制御装置に送信して前記電子制御装置に記憶されている前記現データを前記新データに更新させ、更新処理が失敗した場合、前記提供装置から受信した前記現データを前記電子制御装置に送信して前記電子制御装置に前記現データを復元させる。
【図面の簡単な説明】
【０００８】
【図１】実施形態に係るネットワークシステムを示す図。
【図２】中継装置の構成図。
【図３】管理データを示す図。
【図４】鍵情報を示す図。
【図５】取得情報を示す図。
【図６】状態情報を示す図。
【図７】提供装置および中継装置の構成図。
【図８】取得処理フロー図。
【図９】受信した現ＦＷデータの正当性の判断フロー図。
【図１０】受信した新ＦＷデータの正当性の判断フロー図。
【図１１】中継装置および電子制御装置の構成図。
【図１２】中継装置による更新処理フロー図。
【図１３】書き込まれた新ＦＷデータの正当性の判断フロー図。
【図１４】書き込まれた現ＦＷデータの正当性の判断フロー図。
【図１５】第１変形例に係る提供装置および中継装置の構成図。
【図１６】最新バージョン情報を示す図。
【図１７】第１変形例に係る取得処理フロー図。
【図１８】第２変形例に係る中継装置および電子制御装置の構成図。
【図１９】第２変形例に係る更新処理フロー図。
【図２０】第３変形例に係る中継装置および電子制御装置の構成図。
【図２１】第３変形例に係る状態情報を示す図。
【図２２】第３変形例に係る更新処理フロー図。
【図２３】第２更新処理フローの他の一例を示す図。
【図２４】第４変形例に係る中継装置の構成図。
【図２５】現ファームウェア情報を示す図。
【図２６】第４変形例に係る提供装置および中継装置の構成図。
【図２７】第４変形例に係る取得処理フロー図。
【図２８】第４変形例に係る中継装置および電子制御装置の構成図。
【図２９】第４変形例に係る更新処理フロー図。
【図３０】第５変形例に係る提供装置および中継装置の構成図。
【図３１】第６変形例に係る中継装置の構成図。
【図３２】システム情報を示す図。
【図３３】第６変形例に係る提供装置および中継装置の構成図。
【図３４】第６変形例に係る取得処理フロー図。
【図３５】第６変形例に係る中継装置および電子制御装置の構成図。
【図３６】第６変形例に係る更新処理フロー図。
【図３７】第６変形例に係るロールバック処理フロー図。
【図３８】第７変形例に係るネットワークシステムを示す図。
【図３９】第７変形例に係る中継装置および記憶装置の構成図。
【図４０】情報処理装置のハードウェア構成を示す図。
【発明を実施するための形態】
【０００９】
以下、図面を参照しながら実施形態に係るネットワークシステム１０について詳細に説明する。ネットワークシステム１０は、電子制御装置（ＥＣＵ）のコストを小さくするとともに、電子制御装置に記憶されているデータの更新時間を短くすることを目的とする。
【００１０】
図１は、実施形態に係るネットワークシステム１０を示す図である。ネットワークシステム１０は、提供装置２０と、制御対象システム２２とを備える。
【００１１】
提供装置２０は、サーバ等の情報処理装置である。提供装置２０は、インターネット等の外部ネットワークを介して制御対象システム２２と接続される。
【００１２】
制御対象システム２２は、少なくとも１つの電子制御装置２４と、中継装置２６とを有する。本実施形態において、制御対象システム２２は、車両である。制御対象システム２２は、車両に限らず、例えば、ロボットシステム、飛行機、または、ホームネットワークシステムであってもよい。
【００１３】
それぞれの電子制御装置２４は、対象装置を制御する。対象装置は、制御対象システム２２内に設けられる装置である。本実施形態において、対象装置は、例えば、エンジン等の車両の運動系の装置、燃料供給装置等のエネルギー系の装置、窓またはドア等のボディー系の装置、または、オーディオ装置等のエンターテイメント系の装置である。
【００１４】
電子制御装置２４は、ハードウェアとして、ＣＰＵ（Central  Processing  Unit）等の処理ユニット、ＲＯＭ（Read  Only  Memory）、ＲＡＭ（Random  Access  Memory）、不揮発性記憶装置等の記憶ユニット、対象装置と接続するためのインターフェイスユニット、並びに、中継装置２６と通信するための通信ユニット等を有する。
【００１５】
電子制御装置２４の記憶ユニットは、ファームウェアを記憶する。ファームウェアは、ＣＰＵ等の処理ユニットにより実行されるプログラム、または、ＣＰＵ等の処理ユニットにより読み出されるデータである。電子制御装置２４は、ファームウェアとハードウェアとが協働して対象装置を制御する。電子制御装置２４は、１つのファームウェアを記憶していてもよいし、複数のファームウェアを記憶していてもよい。
【００１６】
また、電子制御装置２４は、ファームウェアを更新する。電子制御装置２４は、現在記憶しているファームウェアの実体データよりも新しいバージョンの実体データが、ファームウェアの開発者（開発者、開発グループまたは提供者等）により提供された場合、現在記憶しているファームウェアの実体データを、新しいバージョンの実体データに更新する。例えば、電子制御装置２４は、現在記憶しているファームウェアの実体データを削除して新しいバージョンの実体データを新たに記憶したり、現在記憶しているファームウェアの実体データの記憶領域に新しいバージョンの実体データを上書きしたりすることにより、更新をする。電子制御装置２４は、新しいファームウェアの実体データと更新指示とを外部から受け取った場合に、更新処理を実行する。
【００１７】
ここで、本実施形態においては、記憶しているファームウェアの実体データを、“現ＦＷデータ”と呼ぶ。また、記憶しているファームウェアの実体データよりも新しいバージョンの実体データを、“新ＦＷデータ”と呼ぶ。
【００１８】
中継装置２６は、それぞれの電子制御装置２４に対して記憶している現ＦＷデータを新ＦＷデータに更新させるための装置である。中継装置２６は、コンピュータ等と同様のハードウェア構成を有する情報処理装置である。中継装置２６は、外部ネットワークを介して提供装置２０と接続する。本実施形態においては制御対象システム２２が車両であるので、中継装置２６は、無線通信により外部ネットワークに接続する。
【００１９】
中継装置２６は、内部ネットワークを介してそれぞれの電子制御装置２４と接続する。外部ネットワークと内部ネットワークとは、中継装置２６を介して接続されているが、直接には接続されていない。
【００２０】
図２は、中継装置２６の機能構成を示す図である。中継装置２６は、取得部３０と、更新部３２と、管理データ記憶部３４と、共有鍵記憶部３６と、一時記憶部３８と、状態記憶部４０とを備える。
【００２１】
取得部３０は、提供装置２０から現ＦＷデータおよび新ＦＷデータ等を受信する。更新部３２は、提供装置２０から受信した新ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを新ＦＷデータに更新させる。また、更新部３２は、現ＦＷデータを新ＦＷデータに更新する更新処理が失敗した場合、提供装置２０から受信した現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。
【００２２】
管理データ記憶部３４は、それぞれの電子制御装置２４に記憶されている現ＦＷデータに関する管理データを記憶する。共有鍵記憶部３６は、現ＦＷデータおよび新ＦＷデータが正当であるかを検証するための共有鍵データを含む鍵情報を記憶する。共有鍵データは、ファームウェアの開発者との間で共有され、第三者には秘匿される。一時記憶部３８は、取得部３０が受信した現ＦＷデータおよび新ＦＷデータ等を含む取得情報を記憶する。状態記憶部４０は、電子制御装置２４の状態を示す状態情報を記憶する。
【００２３】
図３は、管理データ記憶部３４に記憶される管理データの内容を示す図である。管理データ記憶部３４は、制御対象システム２２が備えるそれぞれの電子制御装置２４に記憶されたそれぞれのファームウェアについて、図３に示す管理データを記憶する。
【００２４】
管理データは、ＥＣＵＩＤ、ＦＷＩＤ、現ＦＷのＭＡＣ（Message  Authentication  Code）値、現ＦＷのバージョン番号、ＥＣＵのドメイン、現ＦＷの開発者ＩＤ、更新タイミング情報、および、ＦＷ取得状況情報を含む。
【００２５】
ＥＣＵＩＤは、そのファームウェアを記憶している電子制御装置２４の識別子である。ＦＷＩＤは、そのファームウェアの識別子である。現ＦＷのＭＡＣ値は、電子制御装置２４に書き込まれている現ＦＷデータのＭＡＣ値である。
【００２６】
ここで、ＭＡＣ値とは、データが改ざんされていないことを検証するためのデータである。ＭＡＣ値は、対象データと鍵データとを用いて算出および検証がされる。ＭＡＣ値の生成および検証は、同一の鍵データが用いられる。例えば、送信者と受信者とが同一の鍵データを保持しているとする。この鍵データは、第三者に対して秘匿される。この場合、送信者は、対象データと自身が保持している鍵データとによりＭＡＣ値を算出する。そして、送信者は、対象データとＭＡＣ値とを受信者に送信する。受信者は、受信した送信データと、自身が保持している鍵データとによりＭＡＣ値を算出する。そして、受信者は、算出したＭＡＣ値と送信者から受信したＭＡＣ値とを比較する。受信者は、一致した場合、受信した対象データが送信者により生成されたものである（すなわち、正当である）と判断することができる。
【００２７】
現ＦＷのバージョン番号は、電子制御装置２４に書き込まれている現ＦＷデータのバージョンを表す。バージョン番号は、ファームウェアの実体データのバージョンが新しくなる毎に大きくなる数値または文字であってよい。
【００２８】
ＥＣＵのドメインは、対象装置が有する機能を表す。例えば、ＥＣＵのドメインは、対象装置が、運動系の装置、エネルギー系の装置、ボディー系の装置またはエンターテイメント系の装置の何れであるかを表す。
【００２９】
現ＦＷの開発者ＩＤは、現ＦＷデータの開発者を識別する情報である。共有鍵データは、開発者ＩＤ毎に割り当てられる。
【００３０】
更新タイミング情報は、そのファームウェアを更新可能なタイミングを示す。例えば、更新タイミング情報は、車両の運転中に更新可能であるか否か、車両がブレーキによる停止中に更新可能であるか否か、車両がアイドリング中に更新可能であるか否か、および、車両のエンジンが停止中に更新可能であるか否か等を示す。
【００３１】
ＦＷ取得状況情報は、中継装置２６による新ＦＷデータの取得状況を示す。例えば、ＦＷ取得状況情報は、何もしていない状況、提供装置２０に問い合わせ中の状況、データを受信中の状況、または、検証中の状況の何れかを示す。
【００３２】
図４は、共有鍵記憶部３６に記憶される鍵情報の内容を示す図である。共有鍵記憶部３６は、ファームウェアの開発者毎に、図４に示す鍵情報を記憶する。
【００３３】
鍵情報は、開発者ＩＤと、共有鍵データとを含む。開発者ＩＤは、ファームウェアの開発者を識別する情報である。共有鍵データは、ＭＡＣ値を算出するために用いられるデータである。
【００３４】
なお、開発者ＩＤは、ファームウェアのバージョン毎に異なっていてもよい。例えば、現ＦＷデータの開発者ＩＤと、新ＦＷデータの開発者ＩＤとが異なってもよいし、同一であってもよい。現ＦＷデータの開発者ＩＤと新ＦＷデータの開発者ＩＤとが異なる場合、それぞれに対応する共有鍵データは異なる。
【００３５】
図５は、一時記憶部３８に記憶される取得情報の内容を示す図である。一時記憶部３８は、提供装置２０から受信した現ＦＷデータおよび新ＦＷデータが正当であると判断される毎に、図５に示す取得情報を記憶する。
【００３６】
取得情報は、ＥＣＵＩＤ、ＦＷＩＤ、現ＦＷデータ、新ＦＷデータ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号、新ＦＷの開発者ＩＤ、取得エラー回数および更新エラー回数を含む。
【００３７】
ＥＣＵＩＤは、更新対象の電子制御装置２４の識別子である。ＦＷＩＤは、更新対象のファームウェアの識別子である。
【００３８】
現ＦＷデータおよび新ＦＷデータは、提供装置２０から受信したファームウェアの実体データである。なお、現ＦＷデータは、電子制御装置２４に現在書き込まれている現ＦＷデータと同一であるべきデータである。
【００３９】
新ＦＷのＭＡＣ値は、提供装置２０から受信した新ＦＷデータのＭＡＣ値である。新ＦＷのＭＡＣ値は、例えば、新ＦＷデータの開発者により生成される。新ＦＷのバージョン番号は、新ＦＷデータのバージョンを表す。新ＦＷの開発者ＩＤは、新ＦＷデータの開発者を識別する情報である。
【００４０】
取得エラー回数は、提供装置２０から受信した現ＦＷデータまたは新ＦＷデータが正当でなかったと判定された回数を表す。更新エラー回数は、電子制御装置２４に書き込んだ新ＦＷデータが正当でなかったと判定された回数を表す。
【００４１】
図６は、状態記憶部４０に記憶される状態情報の内容を示す図である。状態記憶部４０は、電子制御装置２４毎に、図６に示す状態情報を記憶する。
【００４２】
状態情報は、ＥＣＵＩＤ、ＥＣＵのドメインおよびＥＣＵ状態情報を含む。ＥＣＵＩＤは、その電子制御装置２４の識別子である。ＥＣＵのドメインは、その電子制御装置２４が制御する対象装置が有する機能を表す。
【００４３】
ＥＣＵ状態情報は、その電子制御装置２４の現在の状態を示す。例えば、ＥＣＵ状態情報は、通常動作中の状態、更新待ちの状態、更新対象のデータの受信中の状態、書き込み中の状態、検証中の状態、または、データを有効化している状態の何れかを示す。
【００４４】
図７は、提供装置２０および中継装置２６の機能構成を示す図である。提供装置２０は、提供情報記憶部５０と、要求受信部５４と、特定部５６と、応答送信部５８とを有する。中継装置２６の取得部３０は、要求送信部５２と、応答受信部６０と、第１検証値生成部６２と、第１検証部６４と、状況更新部６６とを有する。
【００４５】
提供情報記憶部５０は、中継装置２６に提供すべき情報を記憶する。提供情報記憶部５０は、ファームウェア毎に、ＥＣＵＩＤ、ＦＷＩＤ、それぞれのバージョンの実体データ、それぞれのバージョンの実体データのＭＡＣ値、それぞれのバージョンのバージョン番号およびそれぞれのバージョンの開発者ＩＤを記憶する。開発者ＩＤは、バージョン毎に共通であってもよい。
【００４６】
要求送信部５２は、制御対象システム２２が備えるそれぞれの電子制御装置２４に記憶されたそれぞれのファームウェアについて、取得要求を提供装置２０に送信する。要求送信部５２は、例えば、ファームウェア毎に予め定められたタイミングで（例えば定期的に）、取得要求を送信する。
【００４７】
要求送信部５２は、電子制御装置２４を識別するＥＣＵＩＤ（装置識別子）と、現ＦＷデータを識別するＦＷＩＤ（データ識別子）と、現ＦＷデータのバージョンを特定可能なバージョン特定情報とを含む取得要求を、提供装置２０に送信する。要求送信部５２は、管理データ記憶部３４から、そのファームウェアについての管理データを読み出して、取得要求を生成する。
【００４８】
バージョン特定情報は、現ＦＷデータのＭＡＣ値（電子制御装置２４に記憶されている現ＦＷデータを検証するための検証値）である。バージョン特定情報は、ＭＡＣ値に代えて、現ＦＷデータのバージョン番号であってもよい。
【００４９】
要求受信部５４は、取得要求を中継装置２６から受信する。特定部５６は、提供情報記憶部５０から、取得要求に含まれるＥＣＵＩＤおよびＦＷＩＤに対応するファームウェアに関する情報を読み出す。特定部５６は、読み出した情報に基づき、バージョン特定情報により特定されるバージョンよりも新しいバージョンの実体データが、開発者から提供されているかを判断する。すなわち、特定部５６は、取得要求により特定されるファームウェアについて、電子制御装置２４が記憶している現ＦＷデータのバージョンよりも新しいバージョンの実体データ（新ＦＷデータ）が、存在するか否かを判断する。
【００５０】
応答送信部５８は、受信した取得要求に応じた応答情報を、中継装置２６に送信する。応答送信部５８は、新ＦＷデータが存在しない場合、ＥＣＵＩＤ、ＦＷＩＤおよび更新フラグを含む応答情報を送信する。応答送信部５８は、新ＦＷデータが存在する場合、ＥＣＵＩＤ、ＦＷＩＤ、更新フラグ、現ＦＷデータ、新ＦＷデータ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを含む応答情報を送信する。
【００５１】
応答情報に含まれるＥＣＵＩＤおよびＦＷＩＤは、取得要求に含まれるＥＣＵＩＤおよびＦＷＩＤと同一である。更新フラグは、バージョン特定情報により特定されるバージョンよりも新しいバージョンのＦＷデータ（新ＦＷデータ）が存在するか否かを示すフラグである。本実施形態においては、更新フラグは、新ＦＷデータが存在しない場合には０、新ＦＷデータが存在する場合には０以外の値となる。なお、開発者ＩＤがバージョン毎に共通である場合、応答送信部５８は、開発者ＩＤを送信しなくてもよい。
【００５２】
応答受信部６０は、取得要求に応じた応答情報を、提供装置２０から受信する。新ＦＷデータが存在しない場合、応答受信部６０は、ＥＣＵＩＤ、ＦＷＩＤおよび更新フラグを含む応答情報を受信する。新ＦＷデータが存在する場合、応答受信部６０は、ＥＣＵＩＤ、ＦＷＩＤ、更新フラグ、現ＦＷデータ、新ＦＷデータ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを含む応答情報を受信する。
【００５３】
第１検証値生成部６２は、提供装置２０から受信した現ＦＷデータについて、ＭＡＣ値（第２検証値）を算出する。具体的には、第１検証値生成部６２は、現ＦＷの開発者ＩＤに対応する共有鍵データを共有鍵記憶部３６から読み出す。第１検証値生成部６２は、読み出した共有鍵データと、提供装置２０から受信した現ＦＷデータとによりＭＡＣ値を算出する。
【００５４】
さらに、第１検証値生成部６２は、提供装置２０から受信した新ＦＷデータについて、ＭＡＣ値（第４検証値）を算出する。具体的には、第１検証値生成部６２は、新ＦＷの開発者ＩＤに対応する共有鍵データを共有鍵記憶部３６から読み出す。第１検証値生成部６２は、読み出した共有鍵データと、提供装置２０から受信した新ＦＷデータとによりＭＡＣ値を算出する。
【００５５】
第１検証部６４は、提供装置２０から受信した現ＦＷデータが正当であるか否かを判断する。具体的には、第１検証部６４は、電子制御装置２４に記憶されている現ＦＷデータを検証するための第１検証値と、提供装置２０から受信した現ＦＷデータを検証するための第２検証値とが一致する場合に、提供装置２０から受信した現ＦＷデータが正当であると判断する。
【００５６】
ここで、第１検証値は、管理データ記憶部３４に記憶されている現ＦＷのＭＡＣ値である。第２検証値は、第１検証値生成部６２により算出された現ＦＷデータのＭＡＣ値である。すなわち、第１検証部６４は、提供装置２０から受信した現ＦＷデータが、電子制御装置２４に記憶されている現ＦＷデータと同一であるか否かを検証する。
【００５７】
さらに、第１検証部６４は、提供装置２０から受信した新ＦＷデータが正当であるか否かを判断する。具体的には、第１検証部６４は、提供装置２０から受信した第３検証値と、共有鍵データと提供装置２０から受信した新ＦＷデータとにより算出された第４検証値とが一致する場合に、提供装置２０から受信した新ＦＷデータが正当であると判断する。
【００５８】
ここで、第３検証値は、取得要求に応じて、提供装置２０から受信した新ＦＷデータのＭＡＣ値（新ＦＷのＭＡＣ値）である。第４検証値は、第１検証値生成部６２により算出された新ＦＷデータのＭＡＣ値である。すなわち、第１検証部６４は、提供装置２０から受信した新ＦＷデータの開発者が、中継装置２６と同一の共有鍵データを保持しているか否かを検証する。
【００５９】
第１検証部６４は、提供装置２０から受信した現ＦＷデータまたは新ＦＷデータの何れかが正当でない場合、要求送信部５２に対して、再度、取得要求を送信させる。第１検証部６４は、一定回数、同一の取得要求を送信しても現ＦＷデータおよび新ＦＷデータの何れかが正当ではない場合、取得要求の送信を中止させる。
【００６０】
第１検証部６４は、提供装置２０から受信した現ＦＷデータおよび新ＦＷデータが正当であることを条件として、応答受信部６０が受信した情報を一時記憶部３８に記憶させる。具体的には、第１検証部６４は、提供装置２０から受信した、ＥＣＵＩＤ、ＦＷＩＤ、現ＦＷデータ、新ＦＷデータ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを、一時記憶部３８に記憶させる。なお、バージョン毎に開発者ＩＤが共通である場合、第１検証部６４は、一時記憶部３８に新ＦＷの開発者ＩＤを記憶させなくてもよい。また、第１検証部６４は、現ＦＷデータおよび新ＦＷデータの何れかが正当ではないと判断された回数（エラー回数）も、一時記憶部３８に記憶させてもよい。
【００６１】
状況更新部６６は、それぞれのファームウェアについて、ＦＷ取得状況情報を管理データ記憶部３４に書き込む。
【００６２】
以上の構成により、中継装置２６は、提供装置２０から現ＦＷデータおよび新ＦＷデータを受信することができる。さらに、中継装置２６は、受信した現ＦＷデータおよび新ＦＷデータが正当であるか否かを判断することができる。そして、中継装置２６は、受信した現ＦＷデータおよび新ＦＷデータが正当であることを条件として、一時記憶部３８に現ＦＷデータおよび新ＦＷデータを記憶させることができる。
【００６３】
図８は、中継装置２６による取得処理フローを示す図である。取得部３０は、図８に示す取得処理を実行する。
【００６４】
まず、ステップＳ１１において、取得部３０は、何れかのファームウェアについて、予め定められたタイミングにおいて取得要求を提供装置２０に送信する。この場合において、取得部３０は、ＥＣＵＩＤと、ＦＷＩＤと、バージョン特定情報（現ＦＷのＭＡＣ値または現ＦＷのバージョン番号）とを含む取得要求を、提供装置２０に送信する。
【００６５】
提供装置２０は、取得要求に応じて、対応するファームウェアについての応答情報を中継装置２６に送信する。具体的には、提供装置２０は、対応する新ＦＷデータが存在しない場合、ＥＣＵＩＤ、ＦＷＩＤ、および、値が０とされた更新フラグを含む応答情報を送信する。提供装置２０は、新ＦＷデータが存在する場合、ＥＣＵＩＤ、ＦＷＩＤ、値が０以外とされた更新フラグ、現ＦＷデータ、新ＦＷデータ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを含む応答情報を送信する。
【００６６】
続いて、ステップＳ１２において、取得部３０は、応答情報を受信する。続いて、ステップＳ１３において、取得部３０は、応答情報に含まれる更新フラグが、０以外の値であるか否かを判断する。更新フラグが０である場合（Ｓ１３のＮｏ）、取得部３０は、本フローを終了する。更新フラグが０以外の値である場合（Ｓ１３のＹｅｓ）、処理をステップＳ１４に進める。
【００６７】
ステップＳ１４において、取得部３０は、受信した現ＦＷデータが正当であるか否かを判断する。ステップＳ１４の処理については、図９のフローにおいてさらに詳細に説明する。取得部３０は、正当である場合（Ｓ１４のＹｅｓ）、処理をステップＳ１５に進め、正当でない場合（Ｓ１４のＮｏ）、処理をステップＳ１７に進める。
【００６８】
ステップＳ１５において、取得部３０は、受信した新ＦＷデータが正当であるか否かを判断する。ステップＳ１５の処理については、図１０のフローにおいてさらに詳細に説明する。取得部３０は、正当である場合（Ｓ１５のＹｅｓ）、処理をステップＳ１６に進め、正当でない場合（Ｓ１５のＮｏ）、処理をステップＳ１７に進める。
【００６９】
ステップＳ１６において、取得部３０は、提供装置２０から受信したＥＣＵＩＤ、ＦＷＩＤ、現ＦＷデータ、新ＦＷデータ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを、一時記憶部３８に書き込む。ステップＳ１６を終えると、取得部３０は、本フローを終了する。この場合、取得部３０は、正当な現ＦＷデータまたは新ＦＷデータを受信できている。
【００７０】
ステップＳ１７において、取得部３０は、同一の取得要求を送信しても現ＦＷデータおよび新ＦＷデータの何れかが正当ではなかった回数（エラー回数）が、一定回数以上であるか否かを判断する。エラー回数が一定回数未満である場合（Ｓ１７のＮｏ）、取得部３０は、処理をステップＳ１１に戻す。これにより、取得部３０は、通信エラー等により正当なデータが受信できなかった場合であっても、次の機会において正当なデータを受信させることができる。
【００７１】
エラー回数が一定回数以上である場合（Ｓ１７のＹｅｓ）、取得部３０は、本フローを終了する。
【００７２】
図９は、提供装置２０から受信した現ＦＷデータの正当性を判断するフローを示す図である。取得部３０は、ステップＳ１４において、図９に示す処理を実行する。
【００７３】
まず、取得部３０は、管理データ記憶部３４に記憶されている現ＦＷのＭＡＣ値（第１検証値）を読み出す（Ｓ２１）。続いて、取得部３０は、現ＦＷの開発者ＩＤを管理データ記憶部３４から読み出す（Ｓ２２）。続いて、取得部３０は、現ＦＷの開発者ＩＤに対応する共有鍵データを共有鍵記憶部３６から読み出す（Ｓ２３）。続いて、取得部３０は、提供装置２０から受信した現ＦＷデータを取得する（Ｓ２４）。続いて、取得部３０は、読み出した共有鍵データと、提供装置２０から受信した現ＦＷデータとによりＭＡＣ値（第２検証値）を算出する（Ｓ２５）。
【００７４】
続いて、取得部３０は、第１検証値と第２検証値とが一致するか否かを判断する（Ｓ２６）。取得部３０は、第１検証値と第２検証値とが一致する場合（Ｓ２６のＹｅｓ）、提供装置２０から受信した現ＦＷデータが正当である（Ｓ２７）として、処理を終了する。取得部３０は、第１検証値と第２検証値とが一致しない場合（Ｓ２６のＮｏ）、提供装置２０から受信した現ＦＷデータが正当ではない（Ｓ２８）として、処理を終了する。
【００７５】
図１０は、提供装置２０から受信した新ＦＷデータの正当性を判断するフローを示す図である。取得部３０は、ステップＳ１５において、図１０に示す処理を実行する。
【００７６】
まず、取得部３０は、提供装置２０から受信した、新ＦＷのＭＡＣ値（第３検証値）を取得する（Ｓ３１）。続いて、取得部３０は、提供装置２０から受信した新ＦＷの開発者ＩＤを取得する（Ｓ３２）。続いて、取得部３０は、新ＦＷの開発者ＩＤに対応する共有鍵データを共有鍵記憶部３６から読み出す（Ｓ３３）。続いて、取得部３０は、提供装置２０から受信した新ＦＷデータを取得する（Ｓ３４）。続いて、取得部３０は、読み出した共有鍵データと、提供装置２０から受信した新ＦＷデータとによりＭＡＣ値（第４検証値）を算出する（Ｓ３５）。
【００７７】
続いて、取得部３０は、第３検証値と第４検証値とが一致するか否かを判断する（Ｓ３６）。取得部３０は、第３検証値と第４検証値とが一致する場合（Ｓ３６のＹｅｓ）、提供装置２０から受信した新ＦＷデータが正当である（Ｓ３７）として、処理を終了する。取得部３０は、第３検証値と第４検証値とが一致しない場合（Ｓ３６のＮｏ）、提供装置２０から受信した新ＦＷデータが正当ではない（Ｓ３８）として、処理を終了する。
【００７８】
図１１は、中継装置２６および電子制御装置２４の機能構成を示す図である。電子制御装置２４は、データ記憶部７０と、制御部７２と、状態送信部７４と、開始受信部８２と、データ受信部８６と、書込部８８と、第１鍵記憶部９０と、第２検証値生成部９２と、検証値送信部９４と、終了受信部１０４とを有する。中継装置２６の更新部３２は、状態受信部７６と、開始検知部７８と、開始送信部８０と、データ送信部８４と、検証値受信部９６と、第２検証部９８と、確定部１００と、通知部１０２とを有する。
【００７９】
データ記憶部７０は、ファームウェアの実体データ（現ＦＷデータ）を記憶する。制御部７２は、データ記憶部７０に記憶された現ＦＷデータに基づき対象装置を制御する。
【００８０】
状態送信部７４は、電子制御装置２４の状態を検知する。例えば、状態送信部７４は、通常動作中の状態、更新待ちの状態、更新対象のデータの受信中の状態、書き込み中の状態、検証中の状態、または、データを有効化している状態の何れかを検知する。状態送信部７４は、検知した状態を示すＥＣＵ状態情報を中継装置２６に送信する。
【００８１】
状態受信部７６は、電子制御装置２４からＥＣＵ状態情報を受信する。状態受信部７６は、受信したＥＣＵ状態情報を状態記憶部４０に記憶させる。
【００８２】
開始検知部７８は、提供装置２０から正当な新ＦＷデータおよび現ＦＷデータの検証が完了し、未だ新ＦＷデータを電子制御装置２４に書き込んでいないファームウェアについて、更新可能か否かを判断する。例えば、開始検知部７８は、制御対象システム２２の状態が管理データ記憶部３４に記憶された更新タイミング情報と一致、且つ、ＥＣＵ状態情報が通常動作中を示している場合、更新可能と判断する。開始検知部７８は、更新可能である場合、開始送信部８０およびデータ送信部８４に開始指示を与える。
【００８３】
開始送信部８０は、開始指示を受け取ると、更新対象の電子制御装置２４に更新開始を示す情報を送信する。これにより、更新対象の電子制御装置２４は、データの受信の準備等をすることができる。また、開始送信部８０は、他の電子制御装置２４に、更新対象の電子制御装置２４がファームウェアの更新を開始する旨を示す情報を送信する。これにより、他の電子制御装置２４は、更新期間中に動作の不具合が生じないように、動作の制限をしたり、ユーザに警告したりすることができる。
【００８４】
開始受信部８２は、中継装置２６から更新開始を示す情報を受信する。開始受信部８２は、更新開始を示す情報を受信した場合、制御部７２による動作を制限させる。これにより、開始受信部８２は、更新期間中に、対象装置に動作の不具合が生じないように制御することができる。
【００８５】
データ送信部８４は、開始検知部７８から開始指示を受け取ると、提供装置２０から受信した新ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に記憶されている現ＦＷデータを新ＦＷデータに更新させる。具体的には、データ送信部８４は、一時記憶部３８に記憶された新ＦＷデータを電子制御装置２４に送信するとともに、更新指示を送信する。
【００８６】
なお、一時記憶部３８には、正当であると判断された新ＦＷデータが記憶される。従って、データ送信部８４は、正当であると判断された新ＦＷデータを電子制御装置２４へ送信することができる。また、データ送信部８４は、開始検知部７８から開始指示を受けた場合に新ＦＷデータを送信するので、電子制御装置２４による制御の対象装置が予め定められた状態となった場合に、新ＦＷデータを送信することができる。
【００８７】
データ受信部８６は、中継装置２６から、新ＦＷデータおよび更新指示を受信する。書込部８８は、更新指示を受信した場合、データ記憶部７０に記憶されている現ＦＷデータを、中継装置２６から受信した新ＦＷデータに更新する。例えば、書込部８８は、データ記憶部７０における現ＦＷデータが記憶されている領域に新ＦＷデータを上書きしたり、データ記憶部７０に記憶されている現ＦＷデータを削除してデータ記憶部７０の予め定められた領域に新ＦＷデータを書き込んだりする。
【００８８】
第１鍵記憶部９０は、データ記憶部７０に書き込まれたデータを検証するために用いる鍵データを記憶する。本実施形態においては、第１鍵記憶部９０は、現ＦＷの開発者ＩＤに対応する共有鍵データおよび新ＦＷの開発者ＩＤに対応する共有鍵データを記憶する。現ＦＷの開発者ＩＤと新ＦＷの開発者ＩＤとが同一であれば、第１鍵記憶部９０は、１つの共有鍵データを記憶する。
【００８９】
なお、第１鍵記憶部９０は、中継装置２６と提供装置２０とが共有する共有鍵データとは異なる鍵データを記憶していてもよい。この場合、第１鍵記憶部９０は、この鍵データを中継装置２６と共有しており、第三者に対して秘匿している。更新部３２は、この鍵データを記憶する記憶部およびこの鍵データからＭＡＣ値を生成するための検証値生成部を有する。また、この鍵データは、定期的に更新されてもよいし、中継装置２６と電子制御装置２４とが秘匿化通信をする毎に新たに生成されてもよい。
【００９０】
第２検証値生成部９２は、更新処理においてデータ記憶部７０に書き込まれた新ＦＷデータを検証するためのＭＡＣ値（第５検証値）を算出する。具体的には、第２検証値生成部９２は、新ＦＷの開発者ＩＤに対応する共有鍵データを第１鍵記憶部９０から読み出す。そして、第２検証値生成部９２は、読み出した共有鍵データと、更新処理においてデータ記憶部７０に書き込まれた新ＦＷデータとによりＭＡＣ値を算出する。
【００９１】
検証値送信部９４は、更新処理においてデータ記憶部７０に書き込まれた新ＦＷデータを検証するためのＭＡＣ値を中継装置２６に送信する。検証値受信部９６は、電子制御装置２４から、更新処理においてデータ記憶部７０に書き込まれた新ＦＷデータを検証するためのＭＡＣ値を受信する。
【００９２】
第２検証部９８は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であるか否かを検証する。具体的には、第２検証部９８は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータを検証するための第５検証値と、電子制御装置２４へと送信した新ＦＷデータを検証するための第６検証値とが一致しない場合に、更新処理により電子制御装置２４に書き込まれた新ＦＷデータが正当ではないと判断する。
【００９３】
ここで、第５検証値は、第２検証値生成部９２により算出された、データ記憶部７０に書き込まれた新ＦＷデータに対するＭＡＣ値である。また、第６検証値は、提供装置２０から受信した新ＦＷデータのＭＡＣ値である。すなわち、第２検証部９８は、提供装置２０から受信した新ＦＷデータが、改竄されずに電子制御装置２４に書き込まれたか否かを検証する。
【００９４】
第２検証部９８は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であると判断した場合、確定部１００および通知部１０２に通知する。
【００９５】
確定部１００は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当である旨の通知を受けた場合、一時記憶部３８に記憶されている情報を読み出して、管理データ記憶部３４に記憶させる。具体的には、確定部１００は、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを一時記憶部３８から読み出し、同一のファームウェアについての管理データに含まれる、現ＦＷのＭＡＣ値、現ＦＷのバージョン番号および現ＦＷの開発者ＩＤとして、管理データ記憶部３４に書き込む。これにより、中継装置２６は、管理データ記憶部３４に記憶される管理データを更新することができる。なお、確定部１００は、管理データ記憶部３４に必要な情報を記憶させた後、一時記憶部３８に記憶されている情報を削除してもよい。
【００９６】
通知部１０２は、第２検証部９８から新ＦＷデータが正当である旨の通知を受けた場合、他の電子制御装置２４および更新対象の電子制御装置２４に、ファームウェアの更新を完了したことを示す情報を送信する。これにより、他の電子制御装置２４は、動作の制限を解除したり、ユーザに対する警告を解除したりすることができる。
【００９７】
終了受信部１０４は、中継装置２６から、ファームウェアの更新を完了したことを示す情報を受信する。終了受信部１０４は、更新を完了したことを示す情報を受信した場合、制御部７２による動作の制限を解除させる。これにより、制御部７２は、新ＦＷデータに基づき対象装置を制御することができる。
【００９８】
一方、第２検証部９８は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当ではないと判断した場合、更新処理が失敗したことを、データ送信部８４に通知する。
【００９９】
データ送信部８４は、更新処理が失敗した場合、提供装置２０から受信した現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。具体的には、データ送信部８４は、一時記憶部３８に記憶された現ＦＷデータを電子制御装置２４に送信するとともに、復元指示を送信する。なお、一時記憶部３８には、正当であると判断された現ＦＷデータが記憶される。従って、データ送信部８４は、正当であると判断された現ＦＷデータを電子制御装置２４へ送信することができる。
【０１００】
データ受信部８６は、中継装置２６から、現ＦＷデータおよび復元指示を受信する。書込部８８は、復元指示を受信した場合、データ記憶部７０に記憶されていた現ＦＷデータを復元する。例えば、書込部８８は、データ記憶部７０における現ＦＷデータが元々記憶されていた領域に、受信した現ＦＷデータを上書きする。また、書込部８８は、更新処理において書き込まれた新ＦＷデータを削除してから、現ＦＷデータを書き込んでもよい。
【０１０１】
第２検証値生成部９２は、復元処理においてデータ記憶部７０に書き込まれた現ＦＷデータを検証するためのＭＡＣ値（第７検証値）を算出する。具体的には、第２検証値生成部９２は、第１鍵記憶部９０に記憶された現ＦＷの開発者ＩＤに対応する共有鍵データを第１鍵記憶部９０から読み出す。そして、第２検証値生成部９２は、読み出した共有鍵データと、復元処理においてデータ記憶部７０に書き込まれた現ＦＷデータとによりＭＡＣ値を算出する。
【０１０２】
検証値送信部９４は、復元処理においてデータ記憶部７０に書き込まれた現ＦＷデータを検証するためのＭＡＣ値を中継装置２６に送信する。検証値受信部９６は、電子制御装置２４から、復元処理においてデータ記憶部７０に書き込まれた現ＦＷデータを検証するためのＭＡＣ値を受信する。
【０１０３】
第２検証部９８は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であるか否かを検証する。具体的には、第２検証部９８は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータを検証するための第７検証値と、電子制御装置２４へと送信した現ＦＷデータを検証するための第８検証値とが一致しない場合に、復元処理により電子制御装置２４に書き込まれた現ＦＷデータが正当ではないと判断する。
【０１０４】
ここで、第７検証値は、第２検証値生成部９２により算出された、データ記憶部７０に書き込まれた現ＦＷデータに対するＭＡＣ値である。また、第８検証値は、管理データ記憶部３４に記憶されている現ＦＷデータのＭＡＣ値である。すなわち、第２検証部９８は、管理データ記憶部３４に元々記憶されていた現ＦＷデータと同一のデータが、電子制御装置２４に書き込まれたか否かを検証する。
【０１０５】
第２検証部９８は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であると判断した場合、通知部１０２に通知する。通知部１０２は、第２検証部９８から現ＦＷデータが正当である旨の通知を受けた場合、他の電子制御装置２４および更新対象の電子制御装置２４に、処理が完了したことを示す情報を送信する。これにより、他の電子制御装置２４は、動作の制限を解除したり、ユーザに対する警告を解除したりすることができる。
【０１０６】
終了受信部１０４は、中継装置２６から処理が完了したことを示す情報を受信する。終了受信部１０４は、処理が完了したことを示す情報を受信した場合、制御部７２による動作の制限を解除させる。これにより、制御部７２は、現ＦＷデータに基づき対象装置を制御することができる。
【０１０７】
また、第２検証部９８は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当でないと判断した場合、復元処理が失敗したことをデータ送信部８４に通知する。データ送信部８４は、復元処理が失敗した場合、再度、提供装置２０から受信した現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。これにより、第２検証部９８は、電子制御装置２４に繰り返して復元処理を実行させることができる。
【０１０８】
ただし、第２検証部９８は、復元処理において電子制御装置２４に書き込んだ現ＦＷデータが正当でなかった回数（エラー回数）が一定回数以上となった場合、データ送信部８４による現ＦＷデータの再送信を終了させる。また、第２検証部９８は、現ＦＷデータが正当ではないと判断された回数（エラー回数）を、一時記憶部３８に記憶させてもよい。
【０１０９】
そして、第２検証部９８は、電子制御装置２４に正当なデータが書き込まれていないことを通知部１０２に通知する。通知部１０２は、第２検証部９８から、正当なデータが書き込まれていないことの通知を受けると、他の電子制御装置２４および更新対象の電子制御装置２４に、正当なデータが書き込まれていないことを示す情報を送信する。これにより、他の電子制御装置２４は、更新対象の電子制御装置２４に関連する動作を制限したり、ユーザに対する警告をしたりすることができる。
【０１１０】
また、通知部１０２は、正当なデータが書き込まれていないことを示す通知を受け取ると、更新対象の電子制御装置２４に、正当なデータが書き込まれていないことを示す情報を送信する。終了受信部１０４は、正当なデータが書き込まれていないことを示す情報を受信した場合、制御部７２による動作を制限する。これにより、制御部７２は、正当でないデータに基づく対象装置の制御を禁止することができる。
【０１１１】
以上の構成により、中継装置２６は、電子制御装置２４に記憶された現ＦＷデータを、提供装置２０から受信した新ＦＷデータに更新することができる。また、中継装置２６は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当ではない場合には、提供装置２０から受信した現ＦＷデータにより、電子制御装置２４に記憶された現ＦＷデータを復元することができる。
【０１１２】
図１２は、中継装置２６による更新処理フローを示す図である。更新部３２は、図１２に示す更新処理を実行する。
【０１１３】
まず、ステップＳ４１において、更新部３２は、更新対象のファームウェアについての更新タイミング情報を管理データ記憶部３４から読み出す。続いて、ステップＳ４２において、更新部３２は、更新対象の電子制御装置２４についてのＥＣＵ状態情報を状態記憶部４０から読み出す。
【０１１４】
続いて、ステップＳ４３において、更新部３２は、更新処理を開始するか否かを判断する。具体的には、更新部３２は、制御対象システム２２の状態が更新タイミング情報と一致し、且つ、ＥＣＵ状態情報が通常動作中を示している場合、更新可能と判断する。更新部３２は、更新可能ではない場合（Ｓ４３のＮｏ）、処理をステップＳ４４に進めて一定時間待機した後に、再度、ステップＳ４２から処理を繰り返す。更新部３２は、更新可能である場合（Ｓ４３のＹｅｓ）、処理をステップＳ４５に進める。
【０１１５】
ステップＳ４５において、更新部３２は、更新対象の電子制御装置２４に更新開始を示す情報を送信する。続いて、ステップＳ４６において、更新部３２は、他の電子制御装置２４に、更新対象の電子制御装置２４におけるファームウェアの更新の開始を示す情報を送信する。
【０１１６】
続いて、ステップＳ４７において、更新部３２は、提供装置２０から受信した新ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に記憶されている現ＦＷデータを新ＦＷデータに更新させる。具体的には、更新部３２は、一時記憶部３８に記憶されている正当であると判断された新ＦＷデータを、更新指示とともに電子制御装置２４に送信する。
【０１１７】
ここで、更新対象の電子制御装置２４は、中継装置２６から、新ＦＷデータおよび更新指示を受信した場合、記憶している現ＦＷデータを、中継装置２６から受信した新ＦＷデータに更新する。続いて、電子制御装置２４は、更新処理においてデータ記憶部７０に書き込まれた新ＦＷデータを検証するためのＭＡＣ値（第５検証値）を算出する。
【０１１８】
続いて、ステップＳ４８において、更新部３２は、更新対象の電子制御装置２４から、書き込んだ新ＦＷデータを検証するためのＭＡＣ値（第５検証値）を受信する。
【０１１９】
続いて、ステップＳ４９において、更新部３２は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であるか否かを検証する。ステップＳ４９の処理については、図１３のフローにおいてさらに詳細に説明する。更新部３２は、正当である場合（Ｓ４９のＹｅｓ）、処理をステップＳ５０に進め、正当でない場合（Ｓ４９のＮｏ）、処理をステップＳ５２に進める。
【０１２０】
ステップＳ５０において、更新部３２は、一時記憶部３８に記憶されている情報を読み出して、管理データ記憶部３４に転送する。具体的には、更新部３２は、一時記憶部３８から新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを読み出して、現ＦＷのＭＡＣ値、現ＦＷのバージョン番号および現ＦＷの開発者ＩＤとして管理データ記憶部３４に記憶させる。
【０１２１】
続いて、ステップＳ５１において、更新部３２は、更新対象の電子制御装置２４および他の電子制御装置２４に、更新対象の電子制御装置２４におけるファームウェアの更新の完了を示す終了通知を送信する。そして、更新部３２は、本ファームウェアについて更新処理を終了する。
【０１２２】
一方、ステップＳ５２において、更新部３２は、提供装置２０から受信した現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。具体的には、更新部３２は、一時記憶部３８に記憶されている正当であると判断された現ＦＷデータを、復元指示とともに電子制御装置２４に送信する。
【０１２３】
ここで、更新対象の電子制御装置２４は、中継装置２６から、現ＦＷデータおよび復元指示を受信した場合、中継装置２６から受信した現ＦＷデータを記憶する。具体的には、電子制御装置２４は、更新処理において書き込まれた新ＦＷデータを削除して、データ記憶部７０における現ＦＷデータが元々記憶されていた領域に、受信した現ＦＷデータを書き込む。そして、電子制御装置２４は、復元処理においてデータ記憶部７０に書き込まれた現ＦＷデータを検証するためのＭＡＣ値（第７検証値）を算出する。
【０１２４】
続いて、ステップＳ５３において、更新部３２は、更新対象の電子制御装置２４から、書き込んだ現ＦＷデータを検証するためのＭＡＣ値（第７検証値）を受信する。
【０１２５】
続いて、ステップＳ５４において、更新部３２は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であるか否かを検証する。ステップＳ５４の処理については、図１４のフローにおいてさらに詳細に説明する。更新部３２は、正当である場合（Ｓ５４のＹｅｓ）、処理をステップＳ５１に進め、終了通知を送信して、本ファームウェアについて更新処理を終了する。更新部３２は、正当でない場合（Ｓ５４のＮｏ）、処理をステップＳ５５に進める。
【０１２６】
ステップＳ５５において、更新部３２は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当でなかった回数（エラー回数）が、一定回数以上であるか否かを判断する。エラー回数が一定回数未満である場合（Ｓ５５のＮｏ）、更新部３２は、処理をステップＳ５２に戻して、現ＦＷデータの送信から処理を繰り返す。エラー回数が一定回数以上である場合（Ｓ５５のＹｅｓ）、処理をステップＳ５６に進める。
【０１２７】
ステップＳ５６において、更新部３２は、更新対象の電子制御装置２４および他の電子制御装置２４に、更新対象の電子制御装置２４に正当なデータが書き込まれていないことを示す失敗通知を送信する。そして、更新部３２は、本ファームウェアについて更新処理を終了する。
【０１２８】
図１３は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータの正当性を判断するフローを示す図である。更新部３２は、ステップＳ４９において、図１３に示す処理を実行する。
【０１２９】
まず、更新部３２は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータを検証するための第５検証値を取得する（Ｓ６１）。第５検証値は、電子制御装置２４により算出された、電子制御装置２４に書き込まれた新ＦＷデータに対するＭＡＣ値である。続いて、更新部３２は、一時記憶部３８から新ＦＷのＭＡＣ値（第６検証値）を読み出す（Ｓ６２）。
【０１３０】
続いて、更新部３２は、第５検証値と第６検証値とが一致するか否かを判断する（Ｓ６３）。更新部３２は、第５検証値と第６検証値とが一致する場合（Ｓ６３のＹｅｓ）、電子制御装置２４に書き込まれた新ＦＷデータが正当である（Ｓ６４）として、処理を終了する。更新部３２は、第５検証値と第６検証値とが一致しない場合（Ｓ６３のＮｏ）、電子制御装置２４に書き込まれた新ＦＷデータが正当ではない（Ｓ６５）として、処理を終了する。
【０１３１】
図１４は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータの正当性を判断するフローを示す図である。更新部３２は、ステップＳ５４において、図１４に示す処理を実行する。
【０１３２】
まず、更新部３２は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータを検証するための第７検証値を取得する（Ｓ７１）。第７検証値は、電子制御装置２４により算出された、電子制御装置２４に書き込まれた現ＦＷデータに対するＭＡＣ値である。続いて、更新部３２は、管理データ記憶部３４から現ＦＷのＭＡＣ値（第８検証値）を読み出す（Ｓ７２）。
【０１３３】
続いて、更新部３２は、第７検証値と第８検証値とが一致するか否かを判断する（Ｓ７３）。更新部３２は、第７検証値と第８検証値とが一致する場合（Ｓ７３のＹｅｓ）、電子制御装置２４に書き込まれた現ＦＷデータが正当である（Ｓ７４）として、処理を終了する。更新部３２は、第７検証値と第８検証値とが一致しない場合（Ｓ７３のＮｏ）、電子制御装置２４に書き込まれた現ＦＷデータが正当ではない（Ｓ７５）として、処理を終了する。
【０１３４】
以上のように、本実施形態に係るネットワークシステム１０は、電子制御装置２４に、データを更新するための別個のバッファを備えなくてもよい。これにより、本実施形態に係るネットワークシステム１０によれば、電子制御装置２４のコストを小さくすることができる。
【０１３５】
本実施形態に係るネットワークシステム１０は、中継装置２６が予め現ＦＷデータおよび新ＦＷデータの両者を提供装置２０から受信する。そして、電子制御装置２４に対する現ＦＷデータから新ＦＷデータへの更新が失敗した場合、中継装置２６が、予め受信している現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。これにより、本実施形態に係るネットワークシステム１０によれば、更新処理が失敗した場合に提供装置２０にアクセスしなくてよいので、全体の更新時間を短くすることができる。
【０１３６】
（第１変形例）
図１５は、第１変形例に係る提供装置２０および中継装置２６の機能構成を示す図である。図１６は、最新バージョン情報を示す図である。
【０１３７】
なお、第１変形例について説明をするにあたり、図１から図１４を参照して説明したブロックと略同一の機能および構成を有するブロックについては、同一の符号を付けて相違点を除き説明を省略する。第２変形例以降においても同様である。
【０１３８】
第１変形例に係る提供装置２０は、バージョン送信部１２２をさらに有する。第１変形例に係る中継装置２６の取得部３０は、バージョン受信部１２４とバージョン判定部１２６とをさらに有する。
【０１３９】
バージョン送信部１２２は、それぞれのファームウェアについて、提供装置２０から送信可能な新ＦＷデータのバージョンを表す最新バージョン情報を中継装置２６に送信する。最新バージョン情報は、図１６に示すように、ＥＣＵＩＤと、ＦＷＩＤおよびＭＡＣ値を含む。ＭＡＣ値は、最新のＦＷデータのＭＡＣ値である。バージョン送信部１２２は、複数のファームウェアについての最新バージョン情報を含むリストを送信してよい。バージョン送信部１２２は、最新バージョン情報を、例えば一定期間毎に送信する。
【０１４０】
バージョン受信部１２４は、提供装置２０から送信可能な新ＦＷデータのバージョンを表す最新バージョン情報を受信する。バージョン判定部１２６は、受信した最新バージョン情報に基づき、電子制御装置２４に記憶されている現ＦＷデータのバージョンより、提供装置２０から送信可能な新ＦＷデータのバージョンが新しいかを判断する。
【０１４１】
要求送信部５２は、電子制御装置２４に記憶されている現ＦＷデータのバージョンより、提供装置２０から送信可能な新ＦＷデータのバージョンが新しい場合、バージョン判定部１２６から通知を受ける。そして、要求送信部５２は、電子制御装置２４に記憶されている現ＦＷデータのバージョンより、提供装置２０から送信可能な新ＦＷデータのバージョンが新しいことを条件として、そのファームウェアについての取得要求を提供装置２０に送信する。
【０１４２】
図１７は、第１変形例に係る中継装置２６による取得処理フローを示す図である。第１変形例において、取得部３０は、図１７に示す取得処理を実行する。
【０１４３】
まず、ステップＳ８１において、取得部３０は、提供装置２０から最新バージョン情報を受信する。続いて、ステップＳ８２において、取得部３０は、ＥＣＵＩＤおよびＦＷＩＤが最新バージョン情報と一致する管理データが管理データ記憶部３４に記憶されているかを判断する。一致する管理データが無い場合（Ｓ８２のＮｏ）、取得部３０は、本フローを終了する。一致する管理データが有る場合（Ｓ８２のＹｅｓ）、取得部３０は、処理をステップＳ８３に進める。
【０１４４】
ステップＳ８３において、取得部３０は、最新バージョン情報に含まれるＭＡＣ値と、ＥＣＵＩＤおよびＦＷＩＤが一致する管理データに含まれる現ＦＷのＭＡＣ値とを比較する。ＭＡＣ値が一致した場合（Ｓ８３のＹｅｓ）、取得部３０は、電子制御装置２４に記憶されている現ＦＷデータのバージョンと、提供装置２０から送信可能な最新のバージョンとが同一であるとして、本フローを終了する。一致しなかった場合（Ｓ８３のＮｏ）、取得部３０は、電子制御装置２４に記憶されている現ＦＷデータのバージョンより、提供装置２０から送信可能な新ＦＷデータのバージョンが新しいと判断し、処理をステップＳ８４に進める。
【０１４５】
ステップＳ８４において、取得部３０は、最新バージョン情報に含まれるＥＣＵＩＤおよびＦＷＩＤにより特定されるファームウェアについて、取得要求を提供装置２０に送信する。提供装置２０は、中継装置２６から取得要求を受信すると、図８の場合と同様に応答情報を中継装置２６に送信する。
【０１４６】
続いて、ステップＳ８５において、取得部３０は、提供装置２０から応答情報を受信する。そして、以後、取得部３０は、図８のステップＳ１４からステップＳ１７までの処理と同様の処理を実行する。ただし、ステップＳ１７において、エラー回数が一定回数未満の場合（Ｓ１７のＮｏ）、取得部３０は、処理をステップＳ８４に戻す。
【０１４７】
このような第１変形例に係る中継装置２６は、電子制御装置２４に記憶されている現ＦＷデータのバージョンより、提供装置２０から送信可能な新ＦＷデータのバージョンが新しい場合に、取得要求を送信することができる。従って、中継装置２６によれば、効率良く取得要求を送信することができる。
【０１４８】
（第２変形例）
図１８は、第２変形例に係る中継装置２６および電子制御装置２４の機能構成を示す図である。第２変形例に係る電子制御装置２４は、記憶しているデータが正当であるか否かの検証を実行することができる。従って、第２変形例においては、電子制御装置２４に書き込まれた新ＦＷデータおよび現ＦＷデータの検証を、電子制御装置２４が実行する。
【０１４９】
第２変形例に係る電子制御装置２４は、図１１に示した構成と比較して、第３検証部１４２および結果送信部１４４をさらに有し、検証値送信部９４を有さない構成である。また、第２変形例に係る中継装置２６の更新部３２は、図１１に示した構成と比較して、結果受信部１４６をさらに有し、検証値受信部９６および第２検証部９８を有さない構成である。
【０１５０】
第２変形例において、データ送信部８４は、開始検知部７８から開始指示を受け取ると、提供装置２０から受信した新ＦＷデータ、および、提供装置２０から受信した新ＦＷデータを検証するための第６検証値を、更新指示とともに電子制御装置２４に送信する。第６検証値は、提供装置２０から受信した新ＦＷデータのＭＡＣ値である。これにより、データ送信部８４は、電子制御装置２４に現ＦＷデータを新ＦＷデータに更新させることができるとともに、電子制御装置２４に書き込まれた新ＦＷデータの正当性を検証させることができる。
【０１５１】
第３検証部１４２は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であるか否かを検証する。具体的には、第３検証部１４２は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータを検証するための第５検証値と、中継装置２６から受信した新ＦＷデータを検証するための第６検証値とが一致しない場合に、更新処理により電子制御装置２４に書き込まれた新ＦＷデータが正当ではないと判断する。
【０１５２】
ここで、第５検証値は、第２検証値生成部９２により算出された、データ記憶部７０に書き込まれた新ＦＷデータに対するＭＡＣ値である。また、第６検証値は、中継装置２６から受信した新ＦＷデータのＭＡＣ値である。
【０１５３】
結果送信部１４４は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であるか否かの結果を中継装置２６に送信する。結果受信部１４６は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であるか否かの結果を電子制御装置２４から受信する。
【０１５４】
結果受信部１４６は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であったことを示す結果を受信した場合、その結果を、確定部１００および通知部１０２に通知する。確定部１００は、結果受信部１４６から、書き込まれた新ＦＷデータが正当である旨の通知を受けた場合、一時記憶部３８に記憶されている情報を読み出して、管理データ記憶部３４に記憶させる。通知部１０２は、結果受信部１４６から、書き込まれた新ＦＷデータが正当である旨の通知を受けた場合、他の電子制御装置２４および更新対象の電子制御装置２４に、更新対象の電子制御装置２４におけるファームウェアの更新が完了したことを示す情報を送信する。
【０１５５】
一方、結果受信部１４６は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当でなかったことを示す結果を受信した場合、更新処理が失敗したことを、データ送信部８４に通知する。
【０１５６】
データ送信部８４は、更新処理が失敗した場合、提供装置２０から受信した現ＦＷデータ、および、現ＦＷデータを検証するための第８検証値を、復元指示とともに電子制御装置２４に送信する。第８検証値は、管理データ記憶部３４に記憶されている現ＦＷデータのＭＡＣ値である。これにより、データ送信部８４は、電子制御装置２４に現ＦＷデータを復元させることができるとともに、電子制御装置２４に書き込まれた現ＦＷデータの正当性を検証させることができる。
【０１５７】
第３検証部１４２は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であるか否かを検証する。具体的には、第３検証部１４２は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータを検証するための第７検証値と、中継装置２６から受信した現ＦＷデータを検証するための第８検証値とが一致しない場合に、復元処理により電子制御装置２４に書き込まれた現ＦＷデータが正当ではないと判断する。
【０１５８】
ここで、第７検証値は、第２検証値生成部９２により算出された、データ記憶部７０に書き込まれた現ＦＷデータにおけるＭＡＣ値である。また、第８検証値は、中継装置２６から受信した現ＦＷデータのＭＡＣ値である。
【０１５９】
結果送信部１４４は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であるか否かの結果を中継装置２６に送信する。結果受信部１４６は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であるか否かの結果を電子制御装置２４から受信する。
【０１６０】
結果受信部１４６は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であったことを示す結果を受信した場合、その結果を、通知部１０２に通知する。通知部１０２は、結果受信部１４６から、書き込まれた現ＦＷデータが正当である旨の通知を受けた場合、他の電子制御装置２４および復元対象の電子制御装置２４に、更新対象の電子制御装置２４における処理が完了したことを示す情報を送信する。
【０１６１】
また、結果受信部１４６は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当でなかったことを示す結果を受信した場合、復元処理が失敗したことをデータ送信部８４に通知する。
【０１６２】
データ送信部８４は、復元処理が失敗した場合、現ＦＷデータおよび第８検証値を復元指示とともに電子制御装置２４に送信する処理を繰り返す。これにより、データ送信部８４は、電子制御装置２４に対して繰り返して復元処理を実行させることができる。
【０１６３】
ただし、結果受信部１４６は、復元処理において電子制御装置２４に書き込んだ現ＦＷデータが正当でなかったことを示す結果を受信した回数（エラー回数）が一定回数以上となった場合、データ送信部８４による現ＦＷデータの送信を終了させる。そして、結果受信部１４６は、電子制御装置２４に正当なデータが書き込まれていないことを通知部１０２に通知する。通知部１０２は、結果受信部１４６から、正当なデータが書き込まれていないことを示す通知を受けると、他の電子制御装置２４および更新対象の電子制御装置２４に、更新対象の電子制御装置２４に正当なデータが書き込まれていないことを示す情報を送信する。
【０１６４】
図１９は、第２変形例に係る中継装置２６による更新処理フローを示す図である。第２変形例において、更新部３２は、図１９に示す更新処理を実行する。
【０１６５】
まず、更新部３２は、図１２のステップＳ４１からステップＳ４６までと同様の処理を実行する。ステップＳ４６を終了すると、更新部３２は、処理をステップＳ９１に進める。
【０１６６】
ステップＳ９１において、更新部３２は、提供装置２０から受信した新ＦＷデータ、および、提供装置２０から受信した新ＦＷデータのＭＡＣ値（第６検証値）を、更新指示とともに電子制御装置２４に送信する。続いて、ステップＳ９２において、更新部３２は、電子制御装置２４から、書き込んだ新ＦＷデータが正当であるか否かの結果を受信する。
【０１６７】
続いて、ステップＳ９３において、更新部３２は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であるか否かを判断する。更新部３２は、正当である場合（Ｓ９３のＹｅｓ）、処理をステップＳ５０に進め、正当でない場合（Ｓ９３のＮｏ）、処理をステップＳ９４に進める。
【０１６８】
ステップＳ５０およびステップＳ５１において、更新部３２は、図１２の場合と同様に処理を実行する。ステップＳ５１を終了すると、更新部３２は、本ファームウェアについて更新処理を終了する。
【０１６９】
ステップＳ９４において、更新部３２は、提供装置２０から受信した現ＦＷデータおよび現ＦＷデータのＭＡＣ値（第８検証値）を、復元指示とともに電子制御装置２４に送信する。続いて、ステップＳ９５において、更新部３２は、電子制御装置２４から、復元処理において書き込んだ現ＦＷデータが正当であるか否かの検証結果を受信する。
【０１７０】
続いて、ステップＳ９６において、更新部３２は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であるか否かを判断する。更新部３２は、正当である場合（Ｓ９６のＹｅｓ）、処理をステップＳ５１に進め、正当でない場合（Ｓ９６のＮｏ）、処理をステップＳ９７に進める。
【０１７１】
ステップＳ９７において、更新部３２は、復元処理のエラー回数が、一定回数以上であるか否かを判断する。エラー回数が一定回数未満である場合（Ｓ９７のＮｏ）、更新部３２は、処理をステップＳ９４に戻して、現ＦＷデータの送信から処理を繰り返す。エラー回数が一定回数以上である場合（Ｓ９７のＹｅｓ）、処理をステップＳ５６に進める。
【０１７２】
ステップＳ５６において、更新部３２は、図１２の場合と同様に処理を実行する。そして、ステップＳ５６を終了すると、更新部３２は、本ファームウェアについて更新処理を終了する。
【０１７３】
このような第２変形例に係る中継装置２６は、電子制御装置２４に書き込まれたデータの正当性を、電子制御装置２４において検証をさせることができる。
【０１７４】
（第３変形例）
図２０は、第３変形例に係る中継装置２６および電子制御装置２４の機能構成を示す図である。図２１は、第３変形例に係る状態記憶部４０に記憶される情報の内容を示す図である。
【０１７５】
第３変形例に係る中継装置２６は、電子制御装置２４に書き込まれたデータの正当性を、電子制御装置２４で検証するか、中継装置２６で検証するかを切り替えることができる。第３変形例において、電子制御装置２４は、図１１に示す構成、または、図１８に示す構成である。電子制御装置２４が図１１に示す構成の場合、電子制御装置２４に書き込まれたデータの正当性を中継装置２６が検証する。電子制御装置２４が図１８に示す構成の場合、電子制御装置２４に書き込まれたデータの正当性を電子制御装置２４が検証する。
【０１７６】
第３変形例に係る中継装置２６の更新部３２は、図１１に示した構成に加えて、結果受信部１４６と、切替部１５２とをさらに有する。結果受信部１４６は、図１８に示した構成と同様の機能を有する。
【０１７７】
第３変形例において、状態記憶部４０は、図２１に示すように、検証主体情報をさらに記憶する。検証主体情報は、電子制御装置２４に書き込まれたデータが正当であるか否かの検証を、中継装置２６で実行するか電子制御装置２４で実行するかを示す。
【０１７８】
切替部１５２は、更新対象の電子制御装置２４についての検証主体情報を状態記憶部４０から読み出す。切替部１５２は、読み出した検証主体情報に基づき、検証を中継装置２６で実行させるか電子制御装置２４で実行させるかを切り替える。
【０１７９】
切替部１５２は、検証を中継装置２６で実行させる場合、検証値受信部９６および第２検証部９８の機能を有効化し、結果受信部１４６の機能を停止させる。切替部１５２は、検証を電子制御装置２４で実行させる場合、検証値受信部９６および第２検証部９８の機能を停止させ、結果受信部１４６の機能を有効化させる。
【０１８０】
図２２は、第３変形例に係る中継装置２６による更新処理フローを示す図である。第３変形例において、更新部３２は、図２２に示す更新処理を実行する。
【０１８１】
まず、更新部３２は、図１２のステップＳ４１からステップＳ４６までと同様の処理を実行する。ステップＳ４６を終了すると、更新部３２は、処理をステップＳ１１１に進める。
【０１８２】
ステップＳ１１１において、更新部３２は、更新対象の電子制御装置２４についての検証主体情報を状態記憶部４０から読み出す。続いて、ステップＳ１１２において、更新部３２は、読み出した検証主体情報に基づき、検証を中継装置２６で実行させるか、電子制御装置２４で実行させるかを判断する。
【０１８３】
更新部３２は、検証を中継装置２６で実行させる場合（Ｓ１１２のＹｅｓ）、処理をステップＳ１１３の第１更新フローに進める。更新部３２は、検証を電子制御装置２４で実行させる場合（Ｓ１１２のＮｏ）、処理をステップＳ１１４の第２更新フローに進める。
【０１８４】
ステップＳ１１３の第１更新フローは、図１２に示すステップＳ４７以降の処理フローと同様である。また、ステップＳ１１４の第２更新フローは、図１９に示すステップＳ９１以降の処理フローと同様である。
【０１８５】
以上の処理を実行することにより、更新部３２は、電子制御装置２４に書き込まれたデータの検証を中継装置２６または電子制御装置２４に実行させることができる。
【０１８６】
図２３は、第２更新処理フローの他の一例を示す図である。電子制御装置２４は、記憶しているデータを更新する場合、外部から受信したデータを一時的に記憶するためのバッファを有する場合がある。このような構成の電子制御装置２４は、中継装置２６から受信した新ＦＷデータをバッファに一時的に格納し、バッファに格納した状態において新ＦＷデータの正当性を検証することができる。
【０１８７】
そして、電子制御装置２４は、バッファに格納した新ＦＷデータが正当であると判断した場合、新ＦＷデータをバッファからデータ記憶部７０に転送する。これにより、電子制御装置２４は、記憶している現ＦＷデータを新ＦＷデータに更新することができる。
【０１８８】
一方、電子制御装置２４は、バッファに格納した新ＦＷデータが正当ではないと判断した場合、バッファに記憶している新ＦＷデータをデータ記憶部７０には転送せずに、削除する。この場合、電子制御装置２４は、データ記憶部７０には現ＦＷデータが残っており、再度、現ＦＷデータを書き込む必要がない。
【０１８９】
そこで、電子制御装置２４がこのようなバッファを有する構成の場合、更新部３２は、ステップＳ１１４の第２更新フローにおいて、図２３に示す処理を実行してもよい。
【０１９０】
まず、ステップＳ１２１において、更新部３２は、提供装置２０から受信した新ＦＷデータ、および、提供装置２０から受信した新ＦＷデータのＭＡＣ値（第６検証値）を、更新指示とともに電子制御装置２４に送信する。続いて、ステップＳ１２２において、更新部３２は、電子制御装置２４から、新ＦＷデータが正当であるか否かの検証結果を受信する。
【０１９１】
続いて、ステップＳ１２３において、更新部３２は、電子制御装置２４に送信した新ＦＷデータが正当であったか否かを判断する。更新部３２は、正当である場合（Ｓ１２３のＹｅｓ）、処理をステップＳ１２４に進め、正当でない場合（Ｓ１２３のＮｏ）、処理をステップＳ１２５に進める。
【０１９２】
ステップＳ１２４において、更新部３２は、一時記憶部３８に記憶されている情報を読み出して、管理データ記憶部３４に転送する。具体的には、更新部３２は、一時記憶部３８から新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを読み出して、現ＦＷのＭＡＣ値、現ＦＷのバージョン番号および現ＦＷの開発者ＩＤとして管理データ記憶部３４に記憶させる。更新部３２は、ステップＳ１２４を終えると、処理をステップＳ１２５に進める。
【０１９３】
ステップＳ１２５において、更新部３２は、更新対象の電子制御装置２４および他の電子制御装置２４に、更新対象の電子制御装置２４がファームウェアの更新を完了した旨を示す終了通知を送信する。この場合、送信した新ＦＷデータが正当であれば、電子制御装置２４は新ＦＷデータに基づき動作する。また、送信した新ＦＷデータが正当でなければ、電子制御装置２４は現ＦＷデータに基づき動作をする。そして、更新部３２は、本ファームウェアについて更新処理を終了する。
【０１９４】
（第４変形例）
図２４は、第４変形例に係る中継装置２６の機能構成を示す図である。第４変形例は、図１から図１４を参照して説明したネットワークシステム１０を変形した構成であるが、第１変形例、第２変形例および第３変形例に適用されてもよい。
【０１９５】
中継装置２６は、現ＦＷデータ記憶部２０１（現データ記憶部）をさらに備える。現ＦＷデータ記憶部２０１は、制御対象システム２２に備えられるそれぞれの電子制御装置２４に記憶されている現ＦＷデータを記憶する。
【０１９６】
取得部３０は、提供装置２０から新ＦＷデータを受信する。取得部３０は、提供装置２０から新ＦＷデータを受信した場合、受信した新ＦＷデータが正当であるか否かを判断する。更新部３２は、提供装置２０から受信した正当である新ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを新ＦＷデータに更新させる。更新部３２は、現ＦＷデータを新ＦＷデータに更新する更新処理が成功した場合、電子制御装置２４に送信した新ＦＷデータを現ＦＷデータ記憶部２０１に転送して、現ＦＷデータとして記憶させる。
【０１９７】
また、取得部３０は、提供装置２０から新ＦＷデータを受信した場合、現ＦＷデータ記憶部２０１に記憶されている現ＦＷデータが正当であるか否かも判断する。更新部３２は、更新処理が失敗した場合、現ＦＷデータ記憶部２０１に記憶されている正当である現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。
【０１９８】
また、取得部３０は、現ＦＷデータ記憶部２０１に記憶されている現ＦＷデータが正当でないと判断された場合、提供装置２０から現ＦＷデータを受信する。取得部３０は、提供装置２０から現ＦＷデータを受信した場合、受信した現ＦＷデータが正当であるか否かを判断する。更新部３２は、現ＦＷデータ記憶部２０１に記憶されている現ＦＷデータが正当でなかった場合であって且つ更新処理が失敗した場合、受信した正当な現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。そして、更新部３２は、復元処理が成功した場合、電子制御装置２４に送信した現ＦＷデータを現ＦＷデータ記憶部２０１に転送して、記憶させる。
【０１９９】
図２５は、現ＦＷデータ記憶部２０１に記憶される現ファームウェア情報の内容を示す図である。現ＦＷデータ記憶部２０１は、それぞれの電子制御装置２４に記憶されたそれぞれのファームウェア毎に、図２５に示す現ファームウェア情報を記憶する。
【０２００】
現ファームウェア情報は、ＥＣＵＩＤ、ＦＷＩＤおよび現ＦＷデータを含む。ＥＣＵＩＤは、その電子制御装置２４の識別子である。ＦＷＩＤは、そのファームウェアの識別子である。
【０２０１】
現ＦＷデータは、そのファームウェアの実体データである。つまり、現ＦＷデータは、電子制御装置２４に現在書き込まれているべきファームウェアの実体データである。
【０２０２】
図２６は、第４変形例に係る提供装置２０および中継装置２６の機能構成を示す図である。
【０２０３】
要求送信部５２は、要求識別子と、ＥＣＵＩＤと、ＦＷＩＤと、バージョン特定情報とを含む取得要求を、提供装置２０に送信する。要求識別子は、新ＦＷデータの送信を要求する取得要求か、現ＦＷデータの送信を要求する取得要求かを識別する情報である。
【０２０４】
要求送信部５２は、ファームウェア毎に、予め定められた更新タイミングで（例えば定期的に）、新ＦＷデータの送信を要求する取得要求を提供装置２０に送信する。また、要求送信部５２は、ファームウェアの更新において、現ＦＷデータ記憶部２０１に記憶されている現ＦＷデータが正当でないと判断された場合、そのファームウェアの現ＦＷデータの送信を要求する取得要求を提供装置２０に送信する。
【０２０５】
特定部５６は、新ＦＷデータの取得要求を受信した場合、そのファームウェアについて、電子制御装置２４が記憶している現ＦＷデータのバージョンよりも新しいバージョンの実体データ（新ＦＷデータ）が、存在するか否かを判断する。
【０２０６】
応答送信部５８は、新ＦＷデータの取得要求を受信した場合であって且つ新ＦＷデータが存在しない場合、ＥＣＵＩＤ、ＦＷＩＤおよび更新フラグを含む応答情報を送信する。応答送信部５８は、新ＦＷデータの取得要求を受信した場合であって且つ新ＦＷデータが存在する場合、ＥＣＵＩＤ、ＦＷＩＤ、更新フラグ、新ＦＷデータ、新ＦＷのＭＡＣ値（第３検証値）、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを含む応答情報を送信する。更新フラグは、新ＦＷデータが存在しない場合には０、新ＦＷデータが存在する場合には０以外の値となる。
【０２０７】
また、応答送信部５８は、現ＦＷデータの取得要求を受信した場合、ＥＣＵＩＤ、ＦＷＩＤ、更新フラグ、現ＦＷデータ、現ＦＷのＭＡＣ値（第９検証値）、現ＦＷのバージョン番号および現ＦＷの開発者ＩＤを含む応答情報を送信する。更新フラグは、０以外の値となる。
【０２０８】
応答受信部６０は、新ＦＷデータの取得要求を送信した場合であって且つ新ＦＷデータが存在しない場合、ＥＣＵＩＤ、ＦＷＩＤおよび更新フラグを含む応答情報を受信する。応答受信部６０は、新ＦＷデータの取得要求を送信した場合であって且つ新ＦＷデータが存在する場合、ＥＣＵＩＤ、ＦＷＩＤ、更新フラグ、新ＦＷデータ、新ＦＷのＭＡＣ値（第３検証値）、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを含む応答情報を受信する。また、応答受信部６０は、現ＦＷデータの取得要求を送信した場合、ＥＣＵＩＤ、ＦＷＩＤ、更新フラグ、現ＦＷデータ、現ＦＷのＭＡＣ値（第９検証値）、現ＦＷのバージョン番号および現ＦＷの開発者ＩＤを含む応答情報を受信する。
【０２０９】
第１検証値生成部６２は、新ＦＷデータの取得要求を送信した場合、提供装置２０から受信した新ＦＷデータについて、ＭＡＣ値（第４検証値）を算出する。また、新ＦＷデータの取得要求を送信した場合、第１検証値生成部６２は、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータについて、ＭＡＣ値（第１０検証値）を算出する。具体的には、第１検証値生成部６２は、現ＦＷの開発者ＩＤに対応する共有鍵データを共有鍵記憶部３６から読み出す。第１検証値生成部６２は、読み出した共有鍵データと、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータとによりＭＡＣ値を算出する。
【０２１０】
また、第１検証値生成部６２は、現ＦＷデータの取得要求を送信した場合、提供装置２０から受信した現ＦＷデータについて、ＭＡＣ値（第１１検証値）を算出する。具体的には、第１検証値生成部６２は、現ＦＷの開発者ＩＤに対応する共有鍵データを共有鍵記憶部３６から読み出す。第１検証値生成部６２は、読み出した共有鍵データと、提供装置２０から受信した現ＦＷデータとによりＭＡＣ値を算出する。
【０２１１】
第１検証部６４は、提供装置２０から受信した新ＦＷデータが正当であるか否かを判断する。具体的には、第１検証部６４は、提供装置２０から受信した第３検証値と、共有鍵データと提供装置２０から受信した新ＦＷデータとにより算出された第４検証値とが一致する場合に、提供装置２０から受信した新ＦＷデータが正当であると判断する。これにより、第１検証部６４は、提供装置２０から受信した新ＦＷデータの開発者が、中継装置２６と同一の共有鍵データを保持しているか否かを検証することができる。
【０２１２】
なお、第１検証部６４は、提供装置２０から受信した新ＦＷデータが正当でない場合、要求送信部５２に対して、再度、新ＦＷデータの取得要求を送信させてもよい。第１検証部６４は、一定回数、同一の取得要求を送信しても新ＦＷデータが正当ではない場合、取得要求の送信を中止させる。
【０２１３】
また、新ＦＷデータの取得要求を送信した場合、第１検証部６４は、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当であるか否かを判断する。具体的には、第１検証部６４は、電子制御装置２４に記憶されている現ＦＷデータを検証するための第１検証値と、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータを検証するための第１０検証値とが一致する場合に、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当であると判断する。
【０２１４】
ここで、第１検証値は、管理データ記憶部３４に記憶されている現ＦＷのＭＡＣ値である。第１０検証値は、第１検証値生成部６２により算出された、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータについてのＭＡＣ値である。すなわち、第１検証部６４は、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが、電子制御装置２４に記憶されている現ＦＷデータと同一であるか否かを検証する。
【０２１５】
第１検証部６４は、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当でない場合、要求送信部５２に対して、現ＦＷデータの取得要求を送信させる。
【０２１６】
現ＦＷデータの取得要求を送信した場合、第１検証部６４は、提供装置２０から受信した現ＦＷデータが正当であるか否かを判断する。具体的には、第１検証部６４は、提供装置２０から受信した第９検証値と、共有鍵データと提供装置２０から受信した現ＦＷデータとにより算出された第１１検証値とが一致する場合に、提供装置２０から受信した現ＦＷデータが正当であると判断する。
【０２１７】
ここで、第９検証値は、現ＦＷデータの取得要求に応じて、提供装置２０から受信した現ＦＷデータのＭＡＣ値（現ＦＷのＭＡＣ値）である。第１１検証値は、第１検証値生成部６２により算出された現ＦＷデータのＭＡＣ値である。すなわち、第１検証部６４は、提供装置２０から受信した現ＦＷデータの開発者が、中継装置２６と同一の共有鍵データを保持しているか否かを検証する。
【０２１８】
なお、第１検証部６４は、提供装置２０から受信した現ＦＷデータが正当でない場合、要求送信部５２に対して、再度、現ＦＷデータの取得要求を送信させてもよい。第１検証部６４は、一定回数、同一の取得要求を送信しても現ＦＷデータが正当ではない場合、取得要求の送信を中止させる。
【０２１９】
第１検証部６４は、提供装置２０から受信した新ＦＷデータ、および、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータ（または提供装置２０から受信した現ＦＷデータ）が正当であることを条件として、応答受信部６０が受信した情報等を一時記憶部３８に記憶させる。具体的には、第１検証部６４は、提供装置２０から受信した、ＥＣＵＩＤ、ＦＷＩＤ、新ＦＷデータ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号、新ＦＷの開発者ＩＤを、一時記憶部３８に記憶させる。さらに、第１検証部６４は、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータ（または提供装置２０から受信した現ＦＷデータ）を、一時記憶部３８に記憶させる。
【０２２０】
以上の構成により、中継装置２６は、提供装置２０から新ＦＷデータを受信することができる。さらに、中継装置２６は、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当であるか否かを判断することができる。また、中継装置２６は、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当でない場合には、提供装置２０から現ＦＷデータを受信することができる。中継装置２６は、受信した現ＦＷデータが正当であるか否かを判断することができる。そして、中継装置２６は、新ＦＷデータおよび現ＦＷデータが正当であることを条件として、一時記憶部３８に新ＦＷデータおよび現ＦＷデータを記憶させることができる。
【０２２１】
なお、要求送信部５２は、ファームウェアの更新タイミングに関わらず（例えば定期的に）、現ＦＷデータの送信を要求する取得要求を提供装置２０に送信してもよい。これにより、取得部３０は、予め正当な現ＦＷデータを取得して現ＦＷデータ記憶部２０１に記憶させておくことができる。なお、この場合、応答情報に含まれる更新フラグは、０となる。
【０２２２】
また、この場合、第１検証部６４は、提供装置２０から受信した応答情報に含まれる現ＦＷのＭＡＣ値と、管理データ記憶部３４に記憶されている現ＦＷのＭＡＣ値とが一致するか否かを判断してもよい。一致しない場合、現ＦＷのＭＡＣ値を生成するために用いた共有鍵データが更新された可能性がある。従って、一致しない場合、第１検証部６４は、ＭＡＣ値が一致しない旨をユーザ等に通知する。これにより、第１検証部６４は、共有鍵データの更新を促すことができる。
【０２２３】
図２７は、第４変形例に係る中継装置２６による取得処理フローを示す図である。本変形例に係る取得部３０は、図２７に示す取得処理を実行する。
【０２２４】
まず、ステップＳ２０１において、取得部３０は、何れかのファームウェアについて、予め定められたタイミングにおいて、新ＦＷデータの取得要求を提供装置２０に送信する。
【０２２５】
提供装置２０は、新ＦＷデータの取得要求に応じて、対応するファームウェアについての応答情報を中継装置２６に送信する。具体的には、提供装置２０は、対応する新ＦＷデータが存在しない場合、ＥＣＵＩＤ、ＦＷＩＤ、および、値が０とされた更新フラグを含む応答情報を送信する。提供装置２０は、新ＦＷデータが存在する場合、ＥＣＵＩＤ、ＦＷＩＤ、値が０以外とされた更新フラグ、新ＦＷデータ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを含む応答情報を送信する。
【０２２６】
続いて、ステップＳ２０２において、取得部３０は、応答情報を受信する。続いて、ステップＳ２０３において、取得部３０は、応答情報に含まれる更新フラグが、０以外の値であるか否かを判断する。更新フラグが０である場合（Ｓ２０３のＮｏ）、取得部３０は、本フローを終了する。更新フラグが０以外の値である場合（Ｓ２０３のＹｅｓ）、処理をステップＳ２０４に進める。
【０２２７】
ステップＳ２０４において、取得部３０は、受信した新ＦＷデータが正当であるか否かを判断する。取得部３０は、正当である場合（Ｓ２０４のＹｅｓ）、処理をステップＳ２０６に進め、正当でない場合（Ｓ２０４のＮｏ）、処理をステップＳ２０５に進める。
【０２２８】
ステップＳ２０５において、取得部３０は、新ＦＷデータが正当ではなかった回数（エラー回数）が、一定回数以上であるか否かを判断する。エラー回数が一定回数未満である場合（Ｓ２０５のＮｏ）、取得部３０は、処理をステップＳ２０１に戻す。エラー回数が一定回数以上である場合（Ｓ２０５のＹｅｓ）、取得部３０は、本フローを終了する。
【０２２９】
ステップＳ２０６において、取得部３０は、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当であるか否かを判断する。取得部３０は、正当である場合（Ｓ２０６のＹｅｓ）、処理をステップＳ２１１に進め、正当でない場合（Ｓ２０６のＮｏ）、処理をステップＳ２０７に進める。
【０２３０】
ステップＳ２０７において、取得部３０は、同一のファームウェアについて、現ＦＷデータの取得要求を提供装置２０に送信する。提供装置２０は、現ＦＷデータの取得要求に応じて、対応するファームウェアについての応答情報を中継装置２６に送信する。具体的には、提供装置２０は、ＥＣＵＩＤ、ＦＷＩＤ、値が０以外とされた更新フラグ、現ＦＷデータ、現ＦＷのＭＡＣ値、現ＦＷのバージョン番号および現ＦＷの開発者ＩＤを含む応答情報を送信する。
【０２３１】
続いて、ステップＳ２０８において、取得部３０は、応答情報を受信する。ステップＳ２０９において、取得部３０は、受信した現ＦＷデータが正当であるか否かを判断する。取得部３０は、正当である場合（Ｓ２０９のＹｅｓ）、処理をステップＳ２１１に進め、正当でない場合（Ｓ２０９のＮｏ）、処理をステップＳ２１０に進める。
【０２３２】
ステップＳ２１０において、取得部３０は、現ＦＷデータが正当ではなかった回数（エラー回数）が、一定回数以上であるか否かを判断する。エラー回数が一定回数未満である場合（Ｓ２１０のＮｏ）、取得部３０は、処理をステップＳ２０７に戻す。エラー回数が一定回数以上である場合（Ｓ２１０のＹｅｓ）、取得部３０は、本フローを終了する。
【０２３３】
ステップＳ２１１において、取得部３０は、提供装置２０から受信したＥＣＵＩＤ、ＦＷＩＤ、新ＦＷデータ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを、一時記憶部３８に書き込む。さらに、取得部３０は、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータ、または、提供装置２０から受信した現ＦＷデータを、一時記憶部３８に書き込む。
【０２３４】
ステップＳ２１１を終えると、取得部３０は、本フローを終了する。この場合、取得部３０は、正当な現ＦＷデータまたは新ＦＷデータを受信できている。
【０２３５】
図２８は、第４変形例に係る中継装置２６および電子制御装置２４の機能構成を示す図である。
【０２３６】
確定部１００は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当である旨の通知を受けた場合、一時記憶部３８に記憶されている新ＦＷデータを読み出す。そして、確定部１００は、読み出した新ＦＷデータを現ＦＷデータ記憶部２０１に転送して、現ＦＷデータ記憶部２０１に書き込む。すなわち、確定部１００は、更新処理が成功した場合、電子制御装置２４に送信した新ＦＷデータを、現ＦＷデータとして現ＦＷデータ記憶部２０１に書き込む。
【０２３７】
また、第２検証部９８は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当ではないと判断した場合、更新処理が失敗したことを、データ送信部８４に通知する。データ送信部８４は、更新処理が失敗した場合、一時記憶部３８に記憶されている現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。すなわち、データ送信部８４は、現ＦＷデータ記憶部２０１に記憶されている正当である現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。また、現ＦＷデータ記憶部２０１に記憶されている現ＦＷデータが正当でなかった場合、データ送信部８４は、提供装置２０から受信した正当である現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。
【０２３８】
また、確定部１００は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当である旨の通知を受けた場合、一時記憶部３８に記憶されている現ＦＷデータを読み出す。そして、確定部１００は、読み出した現ＦＷデータを現ＦＷデータ記憶部２０１に転送して、現ＦＷデータ記憶部２０１に書き込む。すなわち、確定部１００は、復元処理が成功した場合、電子制御装置２４に送信した現ＦＷデータを現ＦＷデータ記憶部２０１に書き込む。
【０２３９】
このような本変形例に係る中継装置２６は、電子制御装置２４に記憶された現ＦＷデータを、新ＦＷデータに更新することができる。また、中継装置２６は、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当ではない場合には、現ＦＷデータ記憶部２０１に記憶されている正当な現ＦＷデータにより、電子制御装置２４に記憶された現ＦＷデータを復元することができる。さらに、現ＦＷデータ記憶部２０１に記憶されている現ＦＷデータが正当でなかった場合にも、中継装置２６は、提供装置２０から受信した正当な現ＦＷデータにより、電子制御装置２４に記憶された現ＦＷデータを復元することができる。
【０２４０】
図２９は、第４変形例に係る中継装置２６による更新処理フローを示す図である。本変形例に係る更新部３２は、図２９に示す更新処理を実行する。
【０２４１】
本変形例に係る更新部３２は、図１２に示したフローと比較して、Ｓ２２１およびＳ２２２の処理をさらに実行する点において異なる。
【０２４２】
更新部３２は、ステップＳ５０の後、処理をＳ２２１に進める。Ｓ２２１において、更新部３２は、一時記憶部３８に記憶されている新ＦＷデータを読み出して、読み出した新ＦＷデータを、現ＦＷデータとして現ＦＷデータ記憶部２０１に書き込む。更新部３２は、Ｓ２２１を終えると、処理をＳ５１に進める。
【０２４３】
また、更新部３２は、Ｓ５４で復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であると判断した場合（Ｓ５４のＹｅｓ）、処理をステップＳ２２２に進める。Ｓ２２２において、更新部３２は、一時記憶部３８に記憶されている現ＦＷデータを読み出して、読み出した現ＦＷデータを、現ＦＷデータ記憶部２０１に書き込む。更新部３２は、Ｓ２２２を終えると、処理をＳ５１に進める。
【０２４４】
以上のように、第４変形例に係る中継装置２６は、電子制御装置２４に書き込まれた現ＦＷデータを現ＦＷデータ記憶部２０１に記憶しておき、新ＦＷデータへの更新処理が失敗した場合、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータを用いて復元処理をすることができる。これにより、第４変形例に係る中継装置２６によれば、提供装置２０との通信量を減らすことができる。また、第４変形例に係るネットワークシステム１０は、中継装置２６が現ＦＷデータを記憶するので、それぞれの電子制御装置２４がファームェアをバックアップするためのメモリを備えなくてよい。従って、第４変形例に係るネットワークシステム１０によれば、コストを小さくすることができる。
【０２４５】
なお、更新部３２は、書き込まれた新ＦＷデータが正当でない場合、現ＦＷデータを電子制御装置２４に書き込む復元処理を実行する。しかし、更新部３２は、復元処理を一定回数以上失敗する可能性もある。現ＦＷデータ記憶部２０１は、復元処理が失敗した状況を解析するためのファームウェア、電子制御装置２４を最低限の機能で動作させるためのファームウェア、または、これらの両者の機能を有するファームウェアを記憶してもよい。そして、更新部３２は、復元処理を一定回数以上失敗した場合、このようなファームウェアを電子制御装置２４に送信して、電子制御装置２４に記憶させてもよい。
【０２４６】
また、電子制御装置２４は、ファームウェアを更新するためのプログラムを、例えばブートローダ等を記憶したＲＯＭ領域に、ファームウェアとは別個に記憶してもよい。そして、電子制御装置２４は、このプログラムを実行することにより、更新処理および復元処理を実行してもよい。これにより、電子制御装置２４は、更新処理中の電源遮断等により再起動された場合、または、上書きしたファームウェアが異常であった場合等に、ファームウェアを更新するためのプログラムに不具合が生じる可能性を少なくすることができる。
【０２４７】
また、中継装置２６は、提供装置２０等にファームウェアの更新結果等を通知する場合、電子制御装置２４と提供装置２０とが共有する鍵により算出したＭＡＣ値を付加してもよい。これにより、提供装置２０は、それぞれの電子制御装置２４の更新結果を安全に取得することができる。
【０２４８】
（第５変形例）
図３０は、第５変形例に係る提供装置２０および中継装置２６の機能構成を示す図である。なお、第５変形例は、第４変形例をさらに変形した構成であるが、図１から図１４を参照して説明したネットワークシステム１０、第１変形例、第２変形例および第３変形例に適用されてもよい。
【０２４９】
中継装置２６は、新ＦＷデータ生成部２１１（新データ生成部）をさらに備える。
【０２５０】
提供情報記憶部５０は、ファームウェアのそれぞれのバージョンについて、差分データをさらに記憶する。差分データは、当該バージョンの実体データから、直前のバージョンの実体データを除いたデータである。
【０２５１】
応答送信部５８は、新ＦＷデータの取得要求を受信した場合であって且つ新ＦＷデータが存在する場合、新ＦＷデータに代えて、新ＦＷの差分データを含む応答情報を送信する。すなわち、応答受信部６０は、新ＦＷデータの取得要求を送信した場合であって且つ新ＦＷデータが存在する場合、ＥＣＵＩＤ、ＦＷＩＤ、更新フラグ、新ＦＷの差分データ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを含む応答情報を受信する。
【０２５２】
新ＦＷデータ生成部２１１は、新ＦＷデータの取得要求を送信した場合であって且つ新ＦＷデータが存在する場合、新ＦＷデータを生成する。具体的には、新ＦＷデータ生成部２１１は、応答情報に含まれる差分データと、現ＦＷデータ記憶部２０１に記憶されている現ＦＷデータとに基づき、新ＦＷデータを生成する。
【０２５３】
第１検証値生成部６２は、新ＦＷデータの取得要求を送信した場合、新ＦＷデータ生成部２１１により生成された新ＦＷデータについて、ＭＡＣ値（第４検証値）を算出する。
【０２５４】
第１検証部６４は、提供装置２０から受信した差分データに基づき生成された新ＦＷデータが正当であるか否かを判断する。具体的には、第１検証部６４は、提供装置２０から受信した第３検証値と、共有鍵データと新ＦＷデータ生成部２１１が生成した新ＦＷデータとにより算出された第４検証値とが一致する場合に、提供装置２０から受信した差分データに基づき生成された新ＦＷデータが正当であると判断する。
【０２５５】
第１検証部６４は、提供装置２０から受信した差分データに基づき生成した新ＦＷデータ、および、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当であることを条件として、応答受信部６０が受信した情報等を一時記憶部３８に記憶させる。
【０２５６】
以上のように、本変形例に係る中継装置２６は、新ＦＷデータに代えて、差分データを提供装置２０から受信する。これにより、中継装置２６は、提供装置２０から受信するデータ量を少なくすることができる。
【０２５７】
（第６変形例）
図３１は、第６変形例に係る中継装置２６の機能構成を示す図である。なお、第６変形例は、第４変形例をさらに変形した構成であるが、図１から図１４を参照して説明したネットワークシステム１０、第１変形例、第２変形例、第３変形例および第５変形例に適用されてもよい。
【０２５８】
第６変形例に係る中継装置２６は、制御対象システム２２が有する複数の電子制御装置２４のファームウェアを協調して更新する。中継装置２６は、システム情報記憶部２２１をさらに備える。システム情報記憶部２２１は、システム情報を記憶する。
【０２５９】
取得部３０は、提供装置２０から、制御対象システム２２が有する複数の電子制御装置２４のうちの、更新対象の少なくとも１つの電子制御装置２４についての新ＦＷデータ等を受信する。更新部３２は、提供装置２０から受信したそれぞれの新ＦＷデータを対応する電子制御装置２４に送信して、対応する電子制御装置２４に現ＦＷデータを新ＦＷデータに更新させる。
【０２６０】
また、更新部３２は、何れかの１つの電子制御装置２４において更新処理が失敗した場合、更新対象であった全ての電子制御装置２４に現ＦＷデータを送信して、それぞれの電子制御装置２４に現ＦＷデータを復元させる。
【０２６１】
図３２は、システム情報記憶部２２１に記憶されるシステム情報の内容を示す図である。システム情報記憶部２２１は、図３２に示すシステム情報を記憶する。
【０２６２】
システム情報は、システム識別子およびシステムバージョン情報を含む。システム識別子は、制御対象システム２２が有する複数の電子制御装置２４の組を識別する情報である。制御対象システム２２が車両であれば、車両の種別を識別する情報であってよい。例えば、提供装置２０は、システム識別子に基づき、制御対象システム２２が有する複数の電子制御装置２４を特定することができる。
【０２６３】
システムバージョン情報は、システムリストのバージョンを表す。システムバージョン情報は、システムリストが新しくなる毎に大きくなる数値または文字であってよい。
【０２６４】
システムリストは、制御対象システム２２が有する複数の電子制御装置２４のそれぞれに記憶されている現ＦＷデータのバージョンの組を表す。例えば、システムリストは、ＥＣＵＩＤとＦＷＩＤとＦＷデータのバージョン番号との組を含むリストであってよい。
【０２６５】
図３３は、第６変形例に係る提供装置２０および中継装置２６の機能構成を示す図である。提供情報記憶部５０は、システムリストをバージョン毎に記憶する。
【０２６６】
例えば、制御対象システム２２が有する複数の電子制御装置２４のうち、ある１つの電子制御装置２４のファームウェアのバージョンが更新されても、他の電子制御装置２４もファームウェアが更新されていなければ、安定して動作しない場合がある。システムリストは、このような不安定な動作をしないように保証されたファームウェアのバージョンの組を表す。また、システムリストは、適宜、バージョンが更新される。システムリストは、それぞれのバージョン毎にバージョン番号が割り当てられている。
【０２６７】
要求送信部５２は、予め定められた更新タイミングで（例えば定期的に）、新ＦＷデータの取得要求に代えて、一括取得要求を、提供装置２０に送信する。一括取得要求は、システム情報記憶部２２１に記憶されたシステム識別子とシステムバージョン情報とを含む。
【０２６８】
特定部５６は、提供情報記憶部５０から一括取得要求を受信した場合、一括取得要求に含まれるシステムバージョン情報により特定されるバージョンよりも新しいバージョンのシステムリストが提供されているかを判断する。新しいバージョンのシステムリストが提供されている場合、特定部５６は、バージョンを更新すべき更新対象の少なくとも１つのファームウェアを特定する。具体的には、特定部５６は、新しいバージョンのシステムリストにおいて、現在のバージョンのシステムリストから、バージョンが更新されているファームウェアを特定する。
【０２６９】
応答送信部５８は、新しいバージョンのシステムリストが存在しない場合、システム識別子および更新フラグを含む応答情報を送信する。応答送信部５８は、新しいバージョンのシステムリストが存在する場合、更新フラグ、並びに、特定された更新対象のファームウェアのそれぞれについての新ＦＷデータ等を含む応答情報を送信する。なお、更新フラグは、新しいバージョンのシステムリストが存在しない場合には０、新しいバージョンのシステムリストが存在する場合には０以外の値となる。
【０２７０】
応答受信部６０は、新しいバージョンのシステムリストが存在しない場合、システム識別子および更新フラグを含む応答情報を受信する。応答受信部６０は、新しいバージョンのシステムリストが存在する場合、更新フラグ、並びに、特定された更新対象のファームウェアのそれぞれについての新ＦＷデータ等を含む応答情報を受信する。
【０２７１】
第１検証値生成部６２は、更新対象のファームウェアのそれぞれについて、新ＦＷデータのＭＡＣ値（第４検証値）を算出する。また、第１検証値生成部６２は、更新対象のファームウェアのそれぞれについて、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータのＭＡＣ値（第１０検証値）を算出する。
【０２７２】
第１検証部６４は、更新対象のファームウェアのそれぞれについて、提供装置２０から受信した新ＦＷデータが正当であるか否かを判断する。また、第１検証部６４は、更新対象のファームウェアのそれぞれについて、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当であるか否かを判断する。
【０２７３】
第１検証部６４は、更新対象のファームウェアのそれぞれについて、提供装置２０から受信した新ＦＷデータ、および、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当であることを条件として、応答受信部６０が受信した情報等を一時記憶部３８に記憶させる。具体的には、第１検証部６４は、更新対象のファームウェアのそれぞれについて、提供装置２０から受信した、ＥＣＵＩＤ、ＦＷＩＤ、新ＦＷデータ、新ＦＷのＭＡＣ値、新ＦＷのバージョン番号、新ＦＷの開発者ＩＤを、一時記憶部３８に記憶させる。さらに、第１検証部６４は、更新対象のファームウェアのそれぞれについて、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータを、一時記憶部３８に記憶させる。
【０２７４】
以上の構成により、中継装置２６は、更新対象のファームウェアのそれぞれについて、一括して、提供装置２０から新ＦＷデータを受信することができる。さらに、中継装置２６は、更新対象のファームウェアのそれぞれについて、受信した新ＦＷデータ、および、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当であるか否かを、一括して判断することができる。
【０２７５】
なお、第１検証部６４は、提供装置２０から受信した何れかの新ＦＷデータが正当でない場合、要求送信部５２に対して、その新ＦＷデータの取得要求を送信させてもよい。そして、第１検証部６４は、一定回数、同一の取得要求を送信しても新ＦＷデータが正当ではない場合、更新対象の全てのファームウェアについて、取得処理を終了する。
【０２７６】
また、第１検証部６４は、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当でない場合、要求送信部５２に対して、現ＦＷデータの取得要求を送信させてもよい。そして、第１検証部６４は、一定回数、同一の取得要求を送信しても現ＦＷデータが正当ではない場合、更新対象の全てのファームウェアについて、取得処理を終了する。
【０２７７】
図３４は、第６変形例に係る中継装置２６による取得処理フローを示す図である。本変形例に係る取得部３０は、図３４に示す取得処理を実行する。
【０２７８】
まず、ステップＳ２３１において、取得部３０は、予め定められたタイミングにおいて、一括取得要求を提供装置２０に送信する。
【０２７９】
提供装置２０は、一括取得要求に応じて、対応する応答情報を中継装置２６に送信する。提供装置２０は、新しいバージョンのシステムリストが提供されていない場合には、値が０とされた更新フラグを含む応答情報を送信する。また、提供装置２０は、新しいバージョンのシステムリストが提供されている場合には、値が０以外とされた更新フラグ、および、更新対象のファームウェアのそれぞれについての新ＦＷデータ等を含む応答情報を送信する。
【０２８０】
続いて、ステップＳ２３２において、取得部３０は、応答情報を受信する。続いて、ステップＳ２３３において、取得部３０は、応答情報に含まれる更新フラグが、０以外の値であるか否かを判断する。更新フラグが０である場合（Ｓ２３３のＮｏ）、取得部３０は、本フローを終了する。更新フラグが０以外の値である場合（Ｓ２３３のＹｅｓ）、処理をステップＳ２３４に進める。
【０２８１】
Ｓ２３４において、取得部３０は、更新対象のファームウェアのうちの１つを検証対象のファームウェアとして特定する。続いて、ステップＳ２３５において、取得部３０は、検証対象のファームウェアについて、新ＦＷデータが正当であるか否かを判断する。取得部３０は、正当である場合（Ｓ２３５のＹｅｓ）、処理をステップＳ２３６に進め、正当でない場合（Ｓ２３５のＮｏ）、本フローを終了する。
【０２８２】
ステップＳ２３６において、取得部３０は、検証対象のファームウェアについて、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータが正当であるか否かを判断する。取得部３０は、正当である場合（Ｓ２３６のＹｅｓ）、処理をステップＳ２３７に進め、正当でない場合（Ｓ２３６のＮｏ）、本フローを終了する。
【０２８３】
ステップＳ２３７において、取得部３０は、検証対象のファームウェアについて、提供装置２０から受信した新ＦＷデータ等を一時記憶部３８に書き込む。さらに、取得部３０は、検証対象のファームウェアについて、現ＦＷデータ記憶部２０１に記憶された現ＦＷデータを一時記憶部３８に書き込む。
【０２８４】
続いて、ステップＳ２３８において、取得部３０は、更新対象の全てのファームウェアを検証したか否かを判断する。まだ全てを検証していない場合には（Ｓ２３８のＮｏ）、取得部３０は、処理をＳ２３４に戻し、他のファームウェアを検証対象として特定して処理を続ける。全てを検証した場合には（Ｓ２３８のＹｅｓ）、取得部３０は、本フローを終了する。
【０２８５】
図３５は、第６変形例に係る中継装置２６および電子制御装置２４の機能構成を示す図である。
【０２８６】
開始検知部７８は、更新対象のファームウェアを記憶するそれぞれの電子制御装置２４が、更新可能か否かを判断する。開始検知部７８は、更新対象のファームウェアを記憶するそれぞれの電子制御装置２４が全て更新可能である場合、開始送信部８０およびデータ送信部８４に開始指示を与える。
【０２８７】
開始送信部８０は、開始指示を受け取ると、更新対象のファームウェアを記憶するそれぞれの電子制御装置２４に更新開始を示す情報を送信する。
【０２８８】
データ送信部８４は、開始検知部７８から開始指示を受け取ると、更新対象のファームウェアを記憶するそれぞれの電子制御装置２４に、提供装置２０から受信した対応する新ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に記憶されている現ＦＷデータを新ＦＷデータに更新させる。
【０２８９】
検証値受信部９６は、更新対象のファームウェアを記憶するそれぞれの電子制御装置２４から、更新処理においてデータ記憶部７０に書き込まれた新ＦＷデータを検証するためのＭＡＣ値を受信する。
【０２９０】
第２検証部９８は、更新対象のファームウェアのそれぞれについて、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であるか否かを検証する。第２検証部９８は、更新対象のファームウェアのそれぞれについて、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であると判断した場合、確定部１００および通知部１０２に通知する。
【０２９１】
確定部１００は、更新対象のファームウェアのそれぞれについて、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当である旨の通知を受けた場合、一時記憶部３８に記憶されている情報を読み出して、管理データ記憶部３４に記憶させる。
【０２９２】
通知部１０２は、更新対象のファームウェアの全てについて、第２検証部９８から新ＦＷデータが正当である旨の通知を受けた場合、他の電子制御装置２４および更新対象の電子制御装置２４に、ファームウェアの更新を完了したことを示す情報を送信する。
【０２９３】
一方、第２検証部９８は、何れか１つの電子制御装置２４に書き込まれた新ＦＷデータが正当ではないと判断した場合、更新処理が失敗したことを、データ送信部８４に通知する。
【０２９４】
データ送信部８４は、更新処理が失敗した場合、更新対象のファームウェアのそれぞれについて、対応する現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。具体的には、データ送信部８４は、更新対象のファームウェアのそれぞれについて、一時記憶部３８に記憶された現ＦＷデータを電子制御装置２４に送信するとともに、復元指示を送信する。なお、データ送信部８４は、まだ新ＦＷデータへ送信しておらず更新を開始していない電子制御装置２４については、復元処理をさせなくてもよい。
【０２９５】
検証値受信部９６は、復元対象のファームウェアのそれぞれについて、電子制御装置２４から、復元処理においてデータ記憶部７０に書き込まれた現ＦＷデータを検証するためのＭＡＣ値を受信する。
【０２９６】
第２検証部９８は、復元対象のファームウェアのそれぞれについて、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であるか否かを検証する。第２検証部９８は、復元対象のファームウェアのそれぞれについて、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であると判断した場合、通知部１０２に通知する。通知部１０２は、復元対象のファームウェアの全てについて、第２検証部９８から現ＦＷデータが正当である旨の通知を受けた場合、他の電子制御装置２４および更新対象の電子制御装置２４に、処理が完了したことを示す情報を送信する。
【０２９７】
また、第２検証部９８は、復元対象のファームウェアの何れかについて、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当でないと判断した場合、電子制御装置２４に正当なデータが書き込まれていないことを通知部１０２に通知する。通知部１０２は、第２検証部９８から、正当なデータが書き込まれていないことの通知を受けると、他の電子制御装置２４および更新対象の電子制御装置２４に、正当なデータが書き込まれていないことを示す情報を送信する。
【０２９８】
確定部１００は、更新対象のファームウェアのそれぞれについて、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当である旨の通知を受けた場合、一時記憶部３８に記憶されている新ＦＷデータを現ＦＷデータ記憶部２０１に転送して、現ＦＷデータ記憶部２０１に書き込む。また、確定部１００は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当である旨の通知を受けた場合、一時記憶部３８に記憶されている現ＦＷデータを現ＦＷデータ記憶部２０１に転送して、現ＦＷデータ記憶部２０１に書き込む。
【０２９９】
図３６は、第６変形例に係る中継装置２６による更新処理フローを示す図である。更新部３２は、図３６に示す更新処理を実行する。
【０３００】
まず、ステップＳ２４１において、更新部３２は、更新対象のファームウェアのそれぞれについて、更新タイミング情報を管理データ記憶部３４から読み出す。続いて、ステップＳ２４２において、更新部３２は、更新対象のファームウェアを記憶するそれぞれの電子制御装置２４についてのＥＣＵ状態情報を状態記憶部４０から読み出す。
【０３０１】
続いて、ステップＳ２４３において、更新部３２は、読み出したＥＣＵ状態情報等に基づき、更新対象のファームウェアを記憶する全ての電子制御装置２４が更新可能か否かを判断する。更新部３２は、更新可能ではない場合（Ｓ２４３のＮｏ）、処理をステップＳ２４４に進めて一定時間待機した後に、再度、ステップＳ２４２から処理を繰り返す。更新部３２は、更新可能である場合（Ｓ２４３のＹｅｓ）、処理をステップＳ２４５に進める。
【０３０２】
ステップＳ２４５において、更新部３２は、更新対象のファームウェアを記憶するそれぞれの電子制御装置２４に更新開始を示す情報を送信する。続いて、ステップＳ２４６において、更新部３２は、他の電子制御装置２４に、更新対象の電子制御装置２４におけるファームウェアの更新の開始を示す情報を送信する。
【０３０３】
続いて、ステップＳ２４７において、更新部３２は、更新対象の少なくとも１つのファームウェアのうちの１つのファームウェアを、書き込み対象のファームウェアとして特定する。
【０３０４】
続いて、ステップＳ２４８において、更新部３２は、書き込み対象のファームウェアについて、提供装置２０から受信した新ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に記憶されている現ＦＷデータを新ＦＷデータに更新させる。
【０３０５】
続いて、ステップＳ２４９において、更新部３２は、更新対象の電子制御装置２４から、書き込んだ新ＦＷデータを検証するためのＭＡＣ値を受信する。
【０３０６】
続いて、ステップＳ２５０において、更新部３２は、書き込み対象のファームウェアについて、更新処理において電子制御装置２４に書き込まれた新ＦＷデータが正当であるか否かを検証する。正当でない場合（Ｓ２５０のＮｏ）、更新部３２は、処理をＳ２５１に進めてロールバック処理を実行する。なお、Ｓ２５１のロールバック処理については、図３７でさらに説明する。
【０３０７】
正当である場合（Ｓ２５０のＹｅｓ）、更新部３２は、処理をＳ２５２に進める。ステップＳ２５２において、更新部３２は、一時記憶部３８に記憶されている、書き込み対象のファームウェアについての新ＦＷのＭＡＣ値、新ＦＷのバージョン番号および新ＦＷの開発者ＩＤを読み出して、現ＦＷのＭＡＣ値、現ＦＷのバージョン番号および現ＦＷの開発者ＩＤとして管理データ記憶部３４に記憶させる。
【０３０８】
続いて、Ｓ２５３において、更新部３２は、一時記憶部３８に記憶されている、書き込み対象のファームウェアについての新ＦＷデータを読み出して、読み出した新ＦＷデータを現ＦＷデータとして、現ＦＷデータ記憶部２０１に書き込む。更新部３２は、Ｓ２５３を終えると、処理をＳ２５４に進める。
【０３０９】
続いて、ステップＳ２５４において、更新部３２は、更新対象の全てのファームウェアについて、新ＦＷデータを書き込んだか否かを判断する。全てをまだ書き込んでいない場合には（Ｓ２５４のＮｏ）、更新部３２は、処理をＳ２４７に戻し、他のファームウェアを書き込み対象として特定して処理を続ける。全てを書き込んだ場合には（Ｓ２５４のＹｅｓ）、更新部３２は、本フローを終了する。
【０３１０】
図３７は、第６変形例に係る中継装置２６によるロールバック処理フローを示す図である。更新部３２は、図３６で示したＳ２５１において、図３７に示すロールバック処理を実行する。
【０３１１】
まず、ステップＳ２６１において、更新部３２は、更新対象のファームウェアのうちの１つのファームウェアを、復元対象のファームウェアとして特定する。なお、更新部３２は、新ＦＷデータへ送信しておらず更新を開始していないファームウェアについては、復元対象から除いてよい。
【０３１２】
続いて、ステップＳ２６２において、更新部３２は、復元対象のファームウェアについて、一時記憶部３８に記憶された現ＦＷデータを電子制御装置２４に送信して、電子制御装置２４に現ＦＷデータを復元させる。
【０３１３】
続いて、ステップＳ２６３において、更新部３２は、復元対象の電子制御装置２４から、書き込んだ現ＦＷデータを検証するためのＭＡＣ値を受信する。
【０３１４】
続いて、ステップＳ２６４において、更新部３２は、復元処理において電子制御装置２４に書き込まれた現ＦＷデータが正当であるか否かを検証する。更新部３２は、正当でない場合（Ｓ２６４のＮｏ）、処理をステップＳ２６５に進め、正当である場合（Ｓ２６４のＹｅｓ）、処理をステップＳ２６６に進める。
【０３１５】
ステップＳ２６５において、更新部３２は、復元対象の電子制御装置２４および他の電子制御装置２４に、復元対象の電子制御装置２４に正当なデータが書き込まれていないことを示す失敗通知を送信する。ステップＳ２６５を終えると、更新部３２は、処理をＳ２６８に進める。
【０３１６】
ステップＳ２６６において、更新部３２は、一時記憶部３８に記憶されている、書き込み対象のファームウェアについての現ＦＷのＭＡＣ値、現ＦＷのバージョン番号および現ＦＷの開発者ＩＤを読み出して管理データ記憶部３４に記憶させる。
【０３１７】
続いて、ステップＳ２６７において、更新部３２は、一時記憶部３８に記憶されている、書き込み対象のファームウェアについての現ＦＷデータを読み出して、読み出した現ＦＷデータを、現ＦＷデータ記憶部２０１に書き込む。更新部３２は、ステップＳ２６７を終えると、処理をＳ２６８に進める。
【０３１８】
続いて、ステップＳ２６８において、更新部３２は、更新対象の全てのファームウェアについて、現ＦＷデータを書き込んだか否かを判断する。まだ全てを書き込んでいない場合には（Ｓ２６８のＮｏ）、更新部３２は、処理をＳ２６１に戻し、他のファームウェアを復元対象として特定して処理を続ける。全てを書き込んだ場合には（Ｓ２６８のＹｅｓ）、更新部３２は、本フローを終了する。
【０３１９】
このような本変形例に係る中継装置２６は、複数の電子制御装置２４のファームウェアを協調して更新することができる。これにより、中継装置２６は、複数の電子制御装置２４のファームウェアを、安定して動作をするバージョンの組み合わせとなるように更新することができる。なお、第６変形例に係る構成は、図１から図１４を参照して説明したネットワークシステム１０に適用されてもよい。
【０３２０】
（第７変形例）
図３８は、第７変形例に係るネットワークシステム１０を示す図である。なお、第７変形例は、第４変形例をさらに変形した構成であるが、第５変形例および第６変形例に適用されてもよい。
【０３２１】
制御対象システム２２は、中継装置２６の外部に、記憶装置２５１をさらに備える。記憶装置２５１は、内部ネットワークを介して中継装置２６と接続されていてもよいし、内部ネットワークとは異なるネットワークで中継装置２６と接続されていてもよい。中継装置２６は、情報を記憶装置２５１に書き込むことができる。また、中継装置２６は、記憶装置２５１に記憶されている情報を読み出すことができる。
【０３２２】
図３９は、第７変形例に係る中継装置２６および記憶装置２５１の機能構成を示す図である。中継装置２６は、第１通信部２６１をさらに有する。記憶装置２５１は、第２通信部２６２と、現ＦＷデータ記憶部２０１とを有する。
【０３２３】
第１通信部２６１および第２通信部２６２は、互いに情報を送受信する。現ＦＷデータ記憶部２０１は、第１通信部２６１および第２通信部２６２を介して、中継装置２６の取得部３０および更新部３２からアクセスがされる。取得部３０および更新部３２は、外部の記憶装置２５１に対して、現ＦＷデータの書き込みおよび読み出しをする。
【０３２４】
また、更新部３２の確定部１００は、書き込まれた新ＦＷデータまたは現ＦＷデータが正当である旨の通知（更新結果通知）を電子制御装置２４から受け取る。確定部１００は、電子制御装置２４から送信された更新結果通知と新ＦＷデータ（または現ＦＷデータ）との組を外部の記憶装置２５１に送信して、記憶させてもよい。これにより、制御対象システム２２は、外部の記憶装置２５１に記憶されている現ＦＷデータが、電子制御装置２４に書き込まれていることを保証することができる。
【０３２５】
このような制御対象システム２２は、例えば中継装置２６のプログラムが故障した場合であっても、現ＦＷデータ記憶部２０１に記憶されている現ＦＷデータが不正に書き換えられたり故障したりすることを回避することができる。また、中継装置２６および記憶装置２５１は、共有鍵を用いて現ＦＷデータのＭＡＣ値を算出して、送受信する現ＦＷデータを検証してもよい。これにより、制御対象システム２２は記憶装置２５１に記憶される現ＦＷデータの不正な書き換えを防止することができる。
【０３２６】
また、制御対象システム２２は、電子制御装置２４毎に、記憶装置２５１を備えてもよい。また、制御対象システム２２は、電子制御装置２４毎に、中継装置２６および記憶装置２５１に共有鍵を保持させてもよい。これにより、制御対象システム２２は、現ＦＷデータの不正な書き換えをより強力に防止することができる。
【０３２７】
さらに、中継装置２６は、更新結果通知に、電子制御装置２４に書き込まれた新ＦＷデータ（または現ＦＷデータ）のハッシュ値を付与した情報のＭＡＣ値を生成してもよい。そして、中継装置２６は、生成したＭＡＣ値と、更新結果通知と、新ＦＷデータ（または現ＦＷデータ）とを記憶装置２５１に送信する。この場合、記憶装置２５１の第２通信部２６２は、受信した新ＦＷデータ（または現ＦＷデータ）のハッシュ値を生成し、更新結果通知にハッシュ値を付与した情報のＭＡＣ値を生成して、比較する。これにより、第２通信部２６２は、受信した新ＦＷデータ（または現ＦＷデータ）が確かに電子制御装置２４に記憶されているものであることを、中継装置２６にマルウェアが進入しているような状況下であっても保証できる。
【０３２８】
なお、中継装置２６および記憶装置２５１は、記憶装置２５１が生成した乱数を用いたチャレンジレスポンス方式を利用して、更新結果通知をやり取りしてもよい。これにより、中継装置２６および記憶装置２５１は、過去に有効であった更新結果通知を利用した攻撃を防ぎ、セキュリティを向上させることができる。中継装置２６および記憶装置２５１は、チャレンジレスポンス方式ではなく、公開鍵を用いた方式で過去に有効であった更新結果通知を利用した攻撃を防いでもよい。
【０３２９】
図４０は、実施形態に係る情報処理装置３００のハードウェア構成の一例を示す図である。上述した中継装置２６は、例えば図４０に示すような情報処理装置３００により実現することができる。
【０３３０】
情報処理装置３００は、通常のコンピュータと同様の構成をしている。すなわち、情報処理装置３００は、ＣＰＵ３０２と、ＲＯＭ３０４と、ＲＡＭ３０６と、記憶装置３０８と、外部通信装置３１０と、内部通信装置３１２とを有する。ＣＰＵ３０２、ＲＯＭ３０４、ＲＡＭ３０６、記憶装置３０８、外部通信装置３１０および内部通信装置３１２は、バスにより接続されている。ＣＰＵ３０２、ＲＯＭ３０４、ＲＡＭ３０６は１つのチップで構成され、それと、記憶装置３０８、外部通信装置３１０および内部通信装置３１２がバスにより接続されてもよい。
【０３３１】
ＣＰＵ３０２は、記憶装置３０８に記憶されたプログラムをＲＡＭ３０６に展開して実行し、各部を制御して入出力を行ったり、データの加工を行ったりする。ＲＯＭ３０４には、ＯＳの起動用プログラムを記憶装置３０８からＲＡＭ３０６に読み出すスタートプログラムが記憶されている。ＲＡＭ３０６は、ＣＰＵ３０２の作業領域としてデータを記憶する。
【０３３２】
記憶装置３０８は、例えば、ハードディスクドライブまたはフラッシュメモリ等である。記憶装置３０８は、オペレーティングシステム、アプリケーションプログラムおよびデータを記憶している。これらのプログラムは、インストール可能な形式または実行可能な形式のファイルで、コンピュータで読み取り可能な記録メディアに記録して配布される。また、プログラムは、サーバからダウンロードすることにより配布されてもよい。
【０３３３】
外部通信装置３１０は、外部ネットワークに接続するためのインターフェイス装置である。内部通信装置３１２は、内部ネットワークに接続するためのインターフェイス装置である。
【０３３４】
本実施形態の情報処理装置３００で実行されるプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【０３３５】
また、本実施形態の情報処理装置３００で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態の情報処理装置３００で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。また、本実施形態のプログラムを、ＲＯＭ３０４等に予め組み込んで提供するように構成してもよい。
【０３３６】
情報処理装置３００を中継装置２６として機能させるためのプログラムは、取得モジュール（要求送信モジュール、応答受信モジュール、第１検証値生成モジュール、第１検証モジュールおよび状況更新モジュール等を含む）と、更新モジュール（状態受信モジュール、開始検知モジュール、開始送信モジュール、データ送信モジュール、検証値受信モジュール、第２検証モジュール、確定モジュールおよび通知モジュール等）とを有する。情報処理装置３００は、実際のハードウェアとしてはプロセッサ（ＣＰＵ３０２）が記憶媒体（記憶装置３０８等）からプログラムを読み出して実行することにより上記各部が主記憶装置（ＲＡＭ３０６）上にロードされ、取得部３０（要求送信部５２、応答受信部６０、第１検証値生成部６２、第１検証部６４および状況更新部６６等を含む）と、更新部３２（状態受信部７６、開始検知部７８、開始送信部８０、データ送信部８４、検証値受信部９６、第２検証部９８、確定部１００および通知部１０２等）とが、主記憶装置上に生成されるようになっている。
【０３３７】
本発明のいくつかの実施形態および変形例を説明したが、これらの実施形態および変形例は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０３３８】
１０  ネットワークシステム
２０  提供装置
２２  制御対象システム
２４  電子制御装置
２６  中継装置
３０  取得部
３２  更新部
３４  管理データ記憶部
３６  共有鍵記憶部
３８  一時記憶部
４０  状態記憶部
５０  提供情報記憶部
５２  要求送信部
５４  要求受信部
５６  特定部
５８  応答送信部
６０  応答受信部
６２  第１検証値生成部
６４  第１検証部
６６  状況更新部
７０  データ記憶部
７２  制御部
７４  状態送信部
７６  状態受信部
７８  開始検知部
８０  開始送信部
８２  開始受信部
８４  データ送信部
８６  データ受信部
８８  書込部
９０  第１鍵記憶部
９２  第２検証値生成部
９４  検証値送信部
９６  検証値受信部
９８  第２検証部
１００  確定部
１０２  通知部
１０４  終了受信部
１２２  バージョン送信部
１２４  バージョン受信部
１２６  バージョン判定部
１４２  第３検証部
１４４  結果送信部
１４６  結果受信部
１５２  切替部
２０１  現ＦＷデータ記憶部
２１１  新ＦＷデータ生成部
２２１  システム情報記憶部
２５１  記憶装置
２６１  第１通信部
２６２  第２通信部
【図１】
0006678548.tif 000002
【図２】
0006678548.tif 000003
【図３】
0006678548.tif 000004
【図４】
0006678548.tif 000005
【図５】
0006678548.tif 000006
【図６】
0006678548.tif 000007
【図７】
0006678548.tif 000008
【図８】
0006678548.tif 000009
【図９】
0006678548.tif 000010
【図１０】
0006678548.tif 000011
【図１１】
0006678548.tif 000012
【図１２】
0006678548.tif 000013
【図１３】
0006678548.tif 000014
【図１４】
0006678548.tif 000015
【図１５】
0006678548.tif 000016
【図１６】
0006678548.tif 000017
【図１７】
0006678548.tif 000018
【図１８】
0006678548.tif 000019
【図１９】
0006678548.tif 000020
【図２０】
0006678548.tif 000021
【図２１】
0006678548.tif 000022
【図２２】
0006678548.tif 000023
【図２３】
0006678548.tif 000024
【図２４】
0006678548.tif 000025
【図２５】
0006678548.tif 000026
【図２６】
0006678548.tif 000027
【図２７】
0006678548.tif 000028
【図２８】
0006678548.tif 000029
【図２９】
0006678548.tif 000030
【図３０】
0006678548.tif 000031
【図３１】
0006678548.tif 000032
【図３２】
0006678548.tif 000033
【図３３】
0006678548.tif 000034
【図３４】
0006678548.tif 000035
【図３５】
0006678548.tif 000036
【図３６】
0006678548.tif 000037
【図３７】
0006678548.tif 000038
【図３８】
0006678548.tif 000039
【図３９】
0006678548.tif 000040
【図４０】
0006678548.tif 000041