(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025135254
(43)【公開日】2025-09-18
(54)【発明の名称】車載装置、車載装置の起動方法、及び起動プログラム
(51)【国際特許分類】
G06F 21/57 20130101AFI20250910BHJP
G06F 9/4401 20180101ALI20250910BHJP
B60R 16/02 20060101ALI20250910BHJP
【FI】
G06F21/57 350
G06F9/4401
B60R16/02 660W
【審査請求】未請求
【請求項の数】13
【出願形態】OL
(21)【出願番号】P 2024033008
(22)【出願日】2024-03-05
(71)【出願人】
【識別番号】395011665
【氏名又は名称】株式会社オートネットワーク技術研究所
(71)【出願人】
【識別番号】000183406
【氏名又は名称】住友電装株式会社
(71)【出願人】
【識別番号】000002130
【氏名又は名称】住友電気工業株式会社
(74)【代理人】
【識別番号】110000280
【氏名又は名称】弁理士法人サンクレスト国際特許事務所
(72)【発明者】
【氏名】井上 和之
(72)【発明者】
【氏名】河野 仁志
(72)【発明者】
【氏名】松本 真
(72)【発明者】
【氏名】菊地 慶剛
(72)【発明者】
【氏名】竹内 祐介
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AE13
5B376AE52
5B376AE56
5B376AE61
5B376FA11
5B376GA08
(57)【要約】
【課題】複数のプログラムの検証を効率的に行う。
【解決手段】
車載装置は、第1プログラム、及び前記第1プログラムを用いて実行される第2プログラムを格納する格納部と、前記格納部に格納された前記第1プログラム及び前記第2プログラムのそれぞれを検証する検証部と、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が成功した場合に、前記第1プログラム及び前記第2プログラムのそれぞれを起動し、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が失敗した場合に、前記第1プログラムを起動し、前記第2プログラムを起動しない起動制御部と、を備える。
【選択図】
図3
【特許請求の範囲】
【請求項1】
第1プログラム、及び前記第1プログラムを用いて実行される第2プログラムを格納する格納部と、
前記格納部に格納された前記第1プログラム及び前記第2プログラムのそれぞれを検証する検証部と、
前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が成功した場合に、前記第1プログラム及び前記第2プログラムのそれぞれを起動し、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が失敗した場合に、前記第1プログラムを起動し、前記第2プログラムを起動しない起動制御部と、
を備える、
車載装置。
【請求項2】
前記検証部は、前記第1プログラムを検証した後に、前記第2プログラムを検証する、
請求項1に記載の車載装置。
【請求項3】
前記格納部は、前記第1プログラム及び前記第2プログラムの検証の順番を示す順番情報を格納し、
前記検証部は、前記順番情報に基づいて、前記第1プログラム及び前記第2プログラムを順番に検証する、
請求項2に記載の車載装置。
【請求項4】
前記検証部は、前記順番情報をさらに検証する、
請求項3に記載の車載装置。
【請求項5】
前記検証部は、前記順番情報を検証した後に、前記第1プログラムを検証する、
請求項4に記載の車載装置。
【請求項6】
前記検証部は、前記順番情報の検証に失敗した場合、前記第1プログラムの検証を行わない、
請求項5に記載の車載装置。
【請求項7】
前記起動制御部は、前記第1プログラムの検証が成功した場合において、前記検証部によって前記第2プログラムの検証が行われている間に前記第1プログラムを起動する、
請求項1から請求項6のいずれか1項に記載の車載装置。
【請求項8】
前記格納部は、前記第2プログラムを用いて実行される第3プログラムを格納し、
前記検証部は、前記第1プログラムと、前記第2プログラムとを検証した後に、前記第3プログラムを検証し、
前記起動制御部は、前記第1プログラムの検証が成功し、前記第2プログラムの検証が成功し、且つ、前記第3プログラムの検証が成功した場合に、前記第1プログラムと、前記第2プログラムと、前記第3プログラムとのそれぞれを起動し、前記第1プログラムの検証が成功し、前記第2プログラムの検証が成功し、且つ、前記第3プログラムの検証が失敗した場合に、前記第1プログラムと、前記第2プログラムとを起動し、前記第3プログラムを起動しない、
請求項1から請求項6のいずれか1項に記載の車載装置。
【請求項9】
前記格納部は、前記第1プログラムを用いて実行される第4プログラムを格納し、
前記検証部は、前記第1プログラムと、前記第2プログラムとを検証した後に、前記第4プログラムを検証し、
前記起動制御部は、前記第1プログラムの検証が成功し、前記第2プログラムの検証が成功し、且つ、前記第4プログラムの検証が成功した場合に、前記第1プログラムと、前記第2プログラムと、前記第4プログラムとのそれぞれを起動し、前記第1プログラムの検証が成功し、前記第2プログラムの検証が失敗し、且つ、前記第4プログラムの検証が成功した場合に、前記第1プログラムを起動し、前記第2プログラムとを起動せず、前記第4プログラムを起動する、
請求項1から請求項6のいずれか1項に記載の車載装置。
【請求項10】
前記第1プログラム及び前記第2プログラムを実行するプロセッサをさらに備え、
前記起動制御部は、前記プロセッサに前記第1プログラムの実行を指示することにより、前記第1プログラムを起動し、前記プロセッサに前記第2プログラムの実行を指示することにより、前記第2プログラムを起動する、
請求項1から請求項6のいずれか1項に記載の車載装置。
【請求項11】
前記検証部及び前記起動制御部は、HSMにより実現される、
請求項10に記載の車載装置。
【請求項12】
第1プログラム、及び前記第1プログラムを用いて実行される第2プログラムのそれぞれを検証するステップと、
前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が成功した場合に、前記第1プログラム及び前記第2プログラムのそれぞれを起動するステップと、
前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が失敗した場合に、前記第1プログラムを起動し、前記第2プログラムを起動しないステップと、
を含む、
車載装置の起動方法。
【請求項13】
車載装置の起動時に実行される起動プログラムであって、
コンピュータに、
第1プログラム、及び前記第1プログラムを用いて実行される第2プログラムのそれぞれを検証するステップと、
前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が成功した場合に、前記第1プログラム及び前記第2プログラムのそれぞれを起動するステップと、
前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が失敗した場合に、前記第1プログラムを起動し、前記第2プログラムを起動しないステップと、
を実行させるための、
起動プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、車載装置、車載装置の起動方法、及び起動プログラムに関する。
【背景技術】
【0002】
車両には、エンジン、トランスミッション等を制御する制御系ECU(Electronic Control Unit)、ヘッドライト、パワーウインドウ等を制御するボディ系ECU、ナビゲーション装置、マルチメディア機器等の情報系ECU等、多種の車載装置が搭載される。各車載装置は、車載ネットワークに接続され、相互に通信することができる。これらのECUでは、それぞれの機能を実現するために様々なコンピュータプログラム(以下、単に「プログラム」ともいう)が稼働する。
【0003】
ECUの起動時に、プログラムの改竄を検出するための処理であるセキュアブートが実行される。特許文献1には、プログラムを分割した複数の分割プログラム及び検証用認証子を予め記憶しておき、暗号演算により複数の分割プログラムそれぞれの部分認証子を生成し、生成した複数の部分認証子を用いた論理演算を行って演算認証子を生成し、検証用認証子と演算認証子とが一致するか否かによってプログラムの改竄の有無を検証する方法が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
1つのECUには、オペレーティングシステム、アプリケーションソフトウェア等の複数のプログラムが稼働するため、各プログラムに対して改竄の検出が行われる必要がある。しかしながら、特許文献1に開示された方法は、1つのプログラムを複数に分割し、各分割プログラムに対して暗号演算を行うことで複数の部分認証子を生成することによって、1つのプログラムを検証しているのであって、複数のプログラムの検証についてはなんら考慮されていない。
【課題を解決するための手段】
【0006】
本開示の一態様に係る車載装置は、第1プログラム、及び前記第1プログラムを用いて実行される第2プログラムを格納する格納部と、前記格納部に格納された前記第1プログラム及び前記第2プログラムのそれぞれを検証する検証部と、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が成功した場合に、前記第1プログラム及び前記第2プログラムのそれぞれを起動し、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が失敗した場合に、前記第1プログラムを起動し、前記第2プログラムを起動しない起動制御部と、を備える。
【発明の効果】
【0007】
本開示によれば、複数のプログラムの検証を効率的に行うことができる。
【図面の簡単な説明】
【0008】
【
図1】
図1は、実施形態に係る車載システムの構成の一例を示すブロック図である。
【
図2】
図2は、実施形態に係る中継ECUのハードウェア構成の一例を示すブロック図である。
【
図3】
図3は、実施形態に係る中継ECUの機能の一例を示す機能ブロック図である。
【
図4】
図4は、不揮発性メモリにおけるプログラムの格納位置の一例を説明するための図である。
【
図5】
図5は、実施形態に係る中継ECUのセキュリティプロセッサによる起動処理の一例を示すフローチャートである。
【
図6】
図6は、実施形態に係る中継ECUにおける起動シーケンスの一例を示すシーケンス図である。
【発明を実施するための形態】
【0009】
<本開示の実施形態の概要>
以下、本開示の実施形態の概要を列記して説明する。
【0010】
(1) 本実施形態に係る車載装置は、第1プログラム、及び前記第1プログラムを用いて実行される第2プログラムを格納する格納部と、前記格納部に格納された前記第1プログラム及び前記第2プログラムのそれぞれを検証する検証部と、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が成功した場合に、前記第1プログラム及び前記第2プログラムのそれぞれを起動し、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が失敗した場合に、前記第1プログラムを起動し、前記第2プログラムを起動しない起動制御部と、を備える。第1プログラム及び第2プログラムを個別に検証することにより、第1プログラム及び第2プログラムの検証を効率的に行うことができる。
【0011】
(2) 上記(1)において、前記検証部は、前記第1プログラムを検証した後に、前記第2プログラムを検証してもよい。これにより、第1プログラム及び第2プログラムを依存関係に応じて順番に検証することができる。
【0012】
(3) 上記(2)において、前記格納部は、前記第1プログラム及び前記第2プログラムの検証の順番を示す順番情報を格納し、前記検証部は、前記順番情報に基づいて、前記第1プログラム及び前記第2プログラムを順番に検証してもよい。これにより、順番情報によって第1プログラム及び第2プログラムを順番に検証することができる。
【0013】
(4) 上記(3)において、前記検証部は、前記順番情報をさらに検証してもよい。これにより、順番情報の改竄を検出することができる。
【0014】
(5) 上記(4)において、前記検証部は、前記順番情報を検証した後に、前記第1プログラムを検証してもよい。これにより、第1プログラム及び第2プログラムの検証に先立って、順番情報を検証することができる。
【0015】
(6) 上記(5)において、前記検証部は、前記順番情報の検証に失敗した場合、前記第1プログラムの検証を行わなくてもよい。これにより、順番情報が改竄された場合に、不正な順番でプログラムの検証が行われることを防止することができる。
【0016】
(7) 上記(1)から(6)のいずれか1つにおいて、前記起動制御部は、前記第1プログラムの検証が成功した場合において、前記検証部によって前記第2プログラムの検証が行われている間に前記第1プログラムを起動してもよい。第1プログラムの起動と第2プログラムの検証とを同時に行うことで、車載装置を短時間に起動することができる。
【0017】
(8) 上記(1)から(7)のいずれか1つにおいて、前記格納部は、前記第2プログラムを用いて実行される第3プログラムを格納し、前記検証部は、前記第1プログラムと、前記第2プログラムとを検証した後に、前記第3プログラムを検証し、前記起動制御部は、前記第1プログラムの検証が成功し、前記第2プログラムの検証が成功し、且つ、前記第3プログラムの検証が成功した場合に、前記第1プログラムと、前記第2プログラムと、前記第3プログラムとのそれぞれを起動し、前記第1プログラムの検証が成功し、前記第2プログラムの検証が成功し、且つ、前記第3プログラムの検証が失敗した場合に、前記第1プログラムと、前記第2プログラムとを起動し、前記第3プログラムを起動しなくてもよい。これにより、第1プログラム、第2プログラム、及び第3プログラムそれぞれの検証結果によって、依存関係に応じて正しく選択されたプログラムを起動することができる。
【0018】
(9) 上記(1)から(8)のいずれか1つにおいて、前記格納部は、前記第1プログラムを用いて実行される第4プログラムを格納し、前記検証部は、前記第1プログラムと、前記第2プログラムとを検証した後に、前記第4プログラムを検証し、前記起動制御部は、前記第1プログラムの検証が成功し、前記第2プログラムの検証が成功し、且つ、前記第4プログラムの検証が成功した場合に、前記第1プログラムと、前記第2プログラムと、前記第4プログラムとのそれぞれを起動し、前記第1プログラムの検証が成功し、前記第2プログラムの検証が失敗し、且つ、前記第3プログラムの検証が成功した場合に、前記第1プログラムを起動し、前記第2プログラムとを起動せず、前記第3プログラムを起動してもよい。これにより、第1プログラム、第2プログラム、及び第4プログラムそれぞれの検証結果によって、依存関係に応じて正しく選択されたプログラムを起動することができる。
【0019】
(10) 上記(1)から(9)のいずれか1つにおいて、前記車載装置は、前記第1プログラム及び前記第2プログラムを実行するプロセッサをさらに備え、前記起動制御部は、前記プロセッサに前記第1プログラムの実行を指示することにより、前記第1プログラムを起動し、前記プロセッサに前記第2プログラムの実行を指示することにより、前記第2プログラムを起動してもよい。これにより、プログラムの実行をプロセッサに指示することで、プロセッサにプログラムを起動させることができる。
【0020】
(11) 上記(10)において、前記検証部及び前記起動制御部は、HSM(Hardware Security Module)により実現されてもよい。これにより、プログラムの検証及びプログラムの起動指示を安全に行うことができる。
【0021】
(12) 本実施形態に係る車載装置の起動方法は、第1プログラム、及び前記第1プログラムを用いて実行される第2プログラムのそれぞれを検証するステップと、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が成功した場合に、前記第1プログラム及び前記第2プログラムのそれぞれを起動するステップと、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が失敗した場合に、前記第1プログラムを起動し、前記第2プログラムを起動しないステップと、を含む。第1プログラム及び第2プログラムを個別に検証することにより、第1プログラム及び第2プログラムの検証を効率的に行うことができる。
【0022】
(13) 本実施形態に係る起動プログラムは、車載装置の起動時に実行される起動プログラムであって、コンピュータに、第1プログラム、及び前記第1プログラムを用いて実行される第2プログラムのそれぞれを検証するステップと、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が成功した場合に、前記第1プログラム及び前記第2プログラムのそれぞれを起動するステップと、前記第1プログラムの検証が成功し、且つ、前記第2プログラムの検証が失敗した場合に、前記第1プログラムを起動し、前記第2プログラムを起動しないステップと、を実行させる。第1プログラム及び第2プログラムを個別に検証することにより、第1プログラム及び第2プログラムの検証を効率的に行うことができる。
【0023】
本開示は、上記のような特徴的な構成を備える車載装置、特徴的な処理をステップとする車載装置の起動方法、及び車載装置に特徴的な処理を実行させるための起動プログラムとして実現することができるだけでなく、車載装置を含む車載システムとして実現したり、車載装置の一部又は全部を半導体集積回路として実現したりすることができる。
【0024】
<本開示の実施形態の詳細>
以下、図面を参照しつつ、本発明の実施形態の詳細を説明する。なお、以下に記載する実施形態の少なくとも一部を任意に組み合わせてもよい。
【0025】
[1.車載システム]
図1は、実施形態に係る車載システムの構成の一例を示すブロック図である。車両には、車載ネットワーク100が搭載されている。実施形態に係る車載ネットワーク100は、CAN(Controller Area Network)による通信が可能なCANネットワークである。車載ネットワーク100は、CANバスであるバス400A,400B,400Cを含む。
【0026】
車載システム10は、中継ECU200と、ECU300A,300B,300C,300D,300Eとを含む。
【0027】
複数のECU300A,300B,300C,300D,300Eは、車両の各部に配置される。ECU300A,300B,300C,300D,300Eは、車両の各部のハードウェアを個別に制御したり、車両の各部のハードウェアの状態、車両の周囲の状態、若しくは車両の周囲の物体を検出若しくは監視したりする。例えば、ECU300A,300B,300C,300D,300Eは、制御系、ボディ系、情報系のECUである。なお、以下の説明では、ECU300A,300B,300C,300Dを総称して「ECU300」ともいう。
【0028】
ECU300の機能は、ソフトウェアによって実現される。すなわち、ECU300は、車両の各部のハードウェアを個別に制御したり、車両の各部のハードウェアの状態、車両の周囲の状態、若しくは車両の周囲の物体を検出若しくは監視したりするためのアプリケーションソフトウェアを記憶し、アプリケーションソフトウェアを実行することができる。
【0029】
中継ECU200は、ECU300A,300B,300C,300D,300Eのそれぞれとバス400A,400B,400Cを介して接続されている。具体的には、バス400Aには、ECU300A,300Bが接続されている。バス400Bには、ECU300C,300Dが接続されている。バス400Cには、ECU300Eが接続されている。中継ECU200は、ECU300A,300B,300C,300D,300Eのそれぞれと相互に通信することができる。中継ECU200,ECU300A,300B,300C,300D,300Eは、「車載装置」の例である。
【0030】
中継ECU200及びECU300は、周期的又は非周期的にメッセージを送受信するための通信プロトコルを使用する。通信プロトコルは、例えば、CAN又はCAN FD(CAN with Flexible Data Rate)である。他の例では、通信プロトコルは、イーサネット(登録商標)である。イーサネットプロトコルを使用する場合、車載ネットワークは、スター型のネットワークトポロジを有するイーサネットネットワークとなる。
【0031】
中継ECU200は、複数のECU300間の通信を中継するゲートウェイとしての機能を有する。具体的には、中継ECU200は、バス400A,400B,400Cの間で通信(フレーム)を中継する。ECU300は、フレームを送信することができる。フレームは、上述した通信プロトコルに準拠したメッセージである。中継ECU200は、バス400A,400B,400Cの間でフレームを中継する。
【0032】
中継ECU200の機能は、プログラムによって実現される。すなわち、中継ECU200は、フレームを中継するためのアプリケーションソフトウェアを記憶し、アプリケーションソフトウェアを実行することができる。
【0033】
中継ECU200は、バス400Cを介して外部通信装置350に接続されている。外部通信装置350は、例えばTCU(Telematics Control Unit)であり、車外の装置と通信することができる。外部通信装置350は、例えば第5世代移動通信システム(5G)、又は第4世代移動通信システム(4G)等の移動通信システム用の無線通信インタフェースを備える。外部通信装置350は、例えば、TCP/IP(Transmission Control Protocol/Internet Protocol)のパケットを送受信することができる。外部通信装置350は、移動通信ネットワークの基地局(図示せず)に論理的に接続し、インターネットに接続された装置と、基地局を介して通信することができる。具体的には、外部通信装置350は、サーバ500と通信することができる。外部通信装置350は、中継ECU200とサーバ500との間の通信を中継する。
【0034】
サーバ500は、中継ECU200及びECU300のアプリケーションソフトウェアの更新を管理する。サーバ500は、アプリケーションソフトウェアの更新用のソフトウェア(更新ソフトウェア)を中継ECU200及びECU300に提供する。すなわち、サーバ500は、アプリケーションソフトウェアの更新が必要であるとき、更新ソフトウェアを送信する。外部通信装置350は、更新ソフトウェアを受信し、受信した更新ソフトウェアを更新対象の車載装置、つまり中継ECU200又はECU300へ転送する。更新対象の車載装置は、更新ソフトウェアを受信すると再起動し、再起動後に更新ソフトウェアを実行することにより、アプリケーションソフトウェアを更新する。
【0035】
[2.中継ECUのハードウェア構成]
図2は、実施形態に係る中継ECUのハードウェア構成の一例を示すブロック図である。中継ECU200は、メインプロセッサ201と、不揮発性メモリ202と、揮発性メモリ203と、インタフェース(以下、「I/F」ともいう)204A,204B,204Cと、セキュリティモジュール270とを含む。
【0036】
メインプロセッサ201と、不揮発性メモリ202と、揮発性メモリ203と、I/F204A,204B,204Cと、セキュリティモジュールとのそれぞれは、バス(データバス)205によって互いに接続されている。メインプロセッサ201と、不揮発性メモリ202と、揮発性メモリ203と、通信I/F204A,204B,204Cと、セキュリティモジュール270とのそれぞれは、バス205を介して互いにデータを伝送することができる。
【0037】
揮発性メモリ203は、例えばSRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)等の半導体メモリである。不揮発性メモリ202は、例えばフラッシュメモリ、ハードディスク等の書き換え可能な不揮発性メモリである。不揮発性メモリ202には、ブートローダ210、オペレーティングシステム(OS)220、アプリケーションソフトウェア230が格納される。なお、ここでいう「ソフトウェア」とは、複数のコンピュータプログラムの集合体である。すなわち、ソフトウェアに含まれる複数のプログラムが協調して動作することにより、1又は複数の機能が実現される。中継ECU200の中継機能は、アプリケーションソフトウェア230がメインプロセッサ201によって実行されることで実現される。以下、「ソフトウェア」を「SW」ともいう。
【0038】
メインプロセッサ201は、例えばCPU(Central Processing Unit)である。ただし、メインプロセッサ201は、CPUに限られない。メインプロセッサ201は、GPU(Graphics Processing Unit)であってもよい。具体的な一例では、メインプロセッサ201は、マルチコアプロセッサである。メインプロセッサ201は、シングルコアプロセッサであってもよい。メインプロセッサ201は、コンピュータプログラムを実行可能に構成される。ただしメインプロセッサ201は、例えば、ASIC(Application Specific Integrated Circuit)を一部に含んでもよいし、FPGA(Field Programmable Gate Array)等のプログラマブルロジックデバイスを一部に含んでもよい。
【0039】
ブートローダ210は、中継ECU200の起動に必要な処理(ブートストラップ)を実行するためのプログラムである。ブートストラップでは、OS220が不揮発性メモリ202から読み出され、揮発性メモリ203にロードされる。
【0040】
APP230は、車両の各部のハードウェアを個別に制御したり、車両の各部のハードウェアの状態、車両の周囲の状態、若しくは車両の周囲の物体を検出若しくは監視したりするためのソフトウェアである。中継ECU200のAPP230は、フレームの中継機能を実現するためのソフトウェアである。
【0041】
APP230は、プログラムA、プログラムB、及びプログラムCを含む。プログラムA、プログラムB、及びプログラムCの間には、依存関係が存在する。例えば、プログラムAは、通信機能を実現するためのプログラムである。プログラムBは、ECU300との同期機能を実現するためのプログラムである。プログラムCは、中継ECU200の自己診断機能を実現するためのプログラムである。
【0042】
さらに具体的な例を用いてプログラムA,B,Cについて説明する。プログラムAは、例えば、CANプロトコルを用いた診断機能を実現する。プログラムBは、例えば、ECU300とCANプロトコルによる通信を行い、ECU300と同期をとる機能を実現する。プログラムCは、例えば、車載ネットワーク100に接続された診断装置から診断の実行指令をCANプロトコルによって受信し、診断を実行し、診断結果を診断装置へCANプロトコルによって送信する機能を実現する。プログラムBは、プログラムAの実行を必要とする。プログラムCは、プログラムAの実行を必要とする。すなわち、プログラムB及びプログラムCは、プログラムAを用いて実行されるプログラムである。プログラムBは、プログラムAの実行中に実行され、プログラムCは、プログラムAの実行中に実行される。
【0043】
不揮発性メモリ202には、さらに、順番情報240が格納される。順番情報240は、ブートローダ210、OS220、プログラムA、プログラムB、及びプログラムCの検証の順番を示す。順番情報240の詳細は、後述する。
【0044】
更新データ250は、更新SW251を含むデータである。更新SW251は、APP230を更新するためのソフトウェアである。更新SW251は、新バージョンのAPP230が公開されたときに提供され、更新SW251を実行することによってAPP230がバージョンアップされる。サーバ500から更新データ250が提供されたときにのみ、更新データ250は不揮発性メモリ202に格納される。APP230の更新後は、更新データ250は不揮発性メモリ202から削除される。
【0045】
APP230が更新されると、APP230の部品であるプログラムの構成が変更される。したがって、APP230の更新に伴って、順番情報240を更新する必要がある。更新データ250には、新バージョンのAPP230に対応した順番情報252が含まれる。APP230の更新の際には、順番情報240があらたな順番情報252に書き換えられる。
【0046】
I/F204A,204B,204Cは、上述した車載ネットワーク用の通信プロトコルに準拠した通信インタフェースである。すなわち、I/F204A,204B,204Cは、例えばCANインタフェースである。他の例では、I/F204A,204B,204Cは、イーサネットインタフェースである。
【0047】
I/F204Aは、バス400Aに接続されている。I/F204Bは、バス400Bに接続されている。I/F204Cは、バス400Cに接続されている。中継ECU200は、I/F204Aによって、ECU300A及び300Bと通信することができる。中継ECU200は、I/F204Bによって、ECU300C及び300Dと通信することができる。中継ECU200は、I/F204Cによって、ECU300Eと通信することができる。さらに、中継ECU200は、I/F204Cによって、外部通信装置350を介してサーバ500と通信することができる。
【0048】
セキュリティモジュール270は、プログラムの検証を行うためのハードウェアモジュールであり、例えばHSM(Hardware Security Module)である。セキュリティモジュール270は、セキュリティプロセッサ271と、不揮発性メモリ272と、揮発性メモリ273とを含む。
【0049】
揮発性メモリ273は、例えばSRAM、DRAM等の半導体メモリである。不揮発性メモリ272は、例えばフラッシュメモリ等の書き換え可能な不揮発性メモリである。不揮発性メモリ272には、起動プログラム280が格納される。起動プログラム280は、中継ECU200の起動時にプログラムの検証処理を実行し、検証に成功したプログラムを起動させるためのプログラムである。
【0050】
セキュリティプロセッサ271は、例えばCPUである。ただし、セキュリティプロセッサ271は、CPUに限られない。セキュリティプロセッサ271は、GPUであってもよい。具体的な一例では、セキュリティプロセッサ271は、マルチコアプロセッサである。セキュリティプロセッサ271は、シングルコアプロセッサであってもよい。セキュリティプロセッサ271は、コンピュータプログラムを実行可能に構成される。ただしセキュリティプロセッサ271は、例えば、ASIC又はプログラマブルロジックデバイスを一部に含んでもよい。
【0051】
セキュリティモジュール270は、プログラムの検証処理を内部において完結させる。セキュリティモジュール270は、プログラムの検証処理において生成されたデータを、セキュリティモジュール270の外部に漏出しないように構成されている。
【0052】
[3.中継ECUの機能]
図3は、実施形態に係る中継ECUの機能の一例を示す機能ブロック図である。
【0053】
中継ECU200は、実行部211と、検証部281と、起動制御部282との各機能を有する。実行部211は、メインプロセッサ201によって実現される第1機能201Aであり、検証部281と、起動制御部282とのそれぞれは、セキュリティプロセッサ271によって実現される第2機能271Aである。
【0054】
検証部281は、不揮発性メモリ202に格納されたプログラムを検証する。具体的な一例では、検証部281は、不揮発性メモリ202に格納されたブートローダ210、OS220、プログラムA、プログラムB、及びプログラムCのそれぞれを検証する。不揮発性メモリ202は、「格納部」の一例である。
【0055】
ここで、検証処理について説明する。セキュリティモジュール270では、公開鍵方式の検証処理が実行される。まず、セキュリティモジュール270が検証対象のプログラムを不揮発性メモリ202から読み出す。プログラムには、予めプログラム作成者が秘密鍵を用いて作成した電子署名が付与されている。電子署名は、プログラムのコードから生成されたハッシュ値を秘密鍵で暗号化することによって生成された情報である。セキュリティプロセッサ271は、セキュリティモジュール270が予め保持する公開鍵を用いて電子署名を復号化し、復号化によって得られたハッシュ値と、プログラムのコードから生成したハッシュ値とを比較し、プログラムが正当であるか否かを検証する。
【0056】
プログラムの検証の順番は、プログラム間の依存関係にしたがって定まる。すなわち、他のプログラムの実行に用いられるプログラムは、優先度が高く、他のプログラムよりも先に検証される。例えば、OS220は、全てのプログラムの実行の基礎となるプログラムであり、最も優先度が高い。したがって、OS220を起動するためのプログラムであるブートローダ210及びOS220は、最初に検証される。プログラムAは、プログラムB及びプログラムCの実行に必要なプログラムである。したがって、プログラムAは、プログラムB及びプログラムCよりも優先度が高く、プログラムB及びプログラムCよりも先に検証される。プログラムB及びプログラムCは、他のプログラムの実行には使用されない。このため、プログラムB及びプログラムCは、最も優先度が低く、最後に検証される。なお、プログラムB及びプログラムCは、どちらが先に検証されてもよい。ここでは、プログラムBがプログラムCよりも先に検証されることとして説明する。すなわち、ブートローダ210、OS220、プログラムA、プログラムB、及びプログラムCの順番で検証される。
【0057】
順番情報240は、プログラムの検証の順番を規定する。すなわち順番情報240には、ブートローダ210、OS220、プログラムA、プログラムB、及びプログラムCの順番が定められている。実施形態では、検証部281は、順番情報240に基づいて、ブートローダ210、OS220、プログラムA、プログラムB、及びプログラムCを順番に検証する。OS220を「第1プログラム」とする場合、プログラムAは「第2プログラム」に相当し、プログラムB及びプログラムCは「第3プログラム」に相当する。プログラムAを「第1プログラム」とする場合、プログラムB及びプログラムCは「第2プログラム」に相当する。
【0058】
順番情報240は、検証対象のプログラムの格納位置を特定するための格納位置情報を含む。
【0059】
図4は、不揮発性メモリにおけるプログラムの格納位置の一例を説明するための図である。
図4の例では、不揮発性メモリ202におけるブートローダ210の格納領域の先頭アドレスは「ADDR01」であり、ブートローダ210のデータサイズは「SZ01」である。すなわち、先頭アドレス「ADDR01」及びデータサイズ「SZ01」によって、ブートローダ210の格納位置が特定される。順番情報240では、例えば、ブートローダ210の格納位置情報として、先頭アドレス「ADDR01」及びデータサイズ「SZ01」が含まれる。
【0060】
同様に、
図4の例では、不揮発性メモリ202におけるOS220の格納領域の先頭アドレスは「ADDR02」であり、OS220のデータサイズは「SZ02」である。順番情報240では、例えば、OS220の格納位置情報として、先頭アドレス「ADDR02」及びデータサイズ「SZ02」が含まれる。
【0061】
同様に、
図4の例では、不揮発性メモリ202におけるプログラムAの格納領域の先頭アドレスは「ADDR03」であり、プログラムAのデータサイズは「SZ03」である。順番情報240では、例えば、プログラムAの格納位置情報として、先頭アドレス「ADDR03」及びデータサイズ「SZ03」が含まれる。
【0062】
同様に、
図4の例では、不揮発性メモリ202におけるプログラムBの格納領域の先頭アドレスは「ADDR04」であり、プログラムBのデータサイズは「SZ04」である。順番情報240では、例えば、プログラムBの格納位置情報として、先頭アドレス「ADDR04」及びデータサイズ「SZ04」が含まれる。
【0063】
同様に、
図4の例では、不揮発性メモリ202におけるプログラムCの格納領域の先頭アドレスは「ADDR05」であり、プログラムCのデータサイズは「SZ05」である。順番情報240では、例えば、プログラムCの格納位置情報として、先頭アドレス「ADDR05」及びデータサイズ「SZ05」が含まれる。
【0064】
順番情報240において、上述したプログラムの格納位置情報が、検証の順番で並んでいる。検証部281は、順番情報240の先頭の格納位置情報に示される格納位置からプログラムを読み出し、読み出したプログラムの検証処理を実行する。
【0065】
順番情報240は、さらに、各プログラムについて、そのプログラムの実行に必要なプログラムを特定する情報(以下、「使用プログラム特定情報」という)を含む。例えば、プログラムBの実行にはプログラムAが必要である。したがって、プログラムBの実行に必要なプログラムAを特定する使用プログラム特定情報が、順番情報240に含まれる。同様に、プログラムCの実行にはプログラムAが必要である。したがって、プログラムCの実行に必要なプログラムAを特定する使用プログラム特定情報が、順番情報240に含まれる。
【0066】
図3に戻り、起動制御部282は、検証したプログラムを起動する。具体的には、第1プログラムの検証が成功し、且つ、第2プログラムの検証が成功した場合に、起動制御部282は、第1プログラム及び第2プログラムのそれぞれを起動する。第1プログラムの検証が成功し、且つ、第2プログラムの検証が失敗した場合に、起動制御部282は、第1プログラムを起動し、第2プログラムを起動しない。
【0067】
上述したように、第1プログラムがブートローダ210及びOS220であり、第2プログラムがプログラムAであると考えることができる。したがって、ブートローダ210及びOS220の検証が成功し、且つ、プログラムAの検証が成功した場合、起動制御部282は、ブートローダ210を起動する。ブートローダ210が実行されると、OS220が起動する。起動制御部282は、OS220の起動後、検証が成功したプログラムAを起動する。
【0068】
ブートローダ210及びOS220の検証が成功し、且つ、プログラムAの検証が失敗した場合、起動制御部282は、ブートローダ210を起動する。ブートローダ210が実行されると、OS220が起動する。起動制御部282は、OS220の起動後、検証が失敗したプログラムAを起動しない。
【0069】
上述したように、第1プログラムがプログラムAであり、第2プログラムがプログラムB又はプログラムCであると考えることができる。したがって、プログラムAの検証が成功し、且つ、プログラムBの検証が成功した場合、起動制御部282は、プログラムAを起動し、プログラムAの起動後、プログラムBを起動することができる。同様に、プログラムAの検証が成功し、且つ、プログラムCの検証が成功した場合、起動制御部282は、プログラムAを起動し、プログラムAの起動後、プログラムCを起動することができる。
【0070】
プログラムAの検証が成功し、且つ、プログラムBの検証が失敗した場合、起動制御部282は、プログラムAを起動する。プログラムAの起動後、検証が失敗したプログラムBを起動しない。同様に、プログラムAの検証が成功し、且つ、プログラムCの検証が失敗した場合、起動制御部282は、プログラムAを起動する。プログラムAの起動後、検証が失敗したプログラムCを起動しない。
【0071】
起動制御部282は、第1プログラムの検証が成功し、第2プログラムの検証が成功し、且つ、第3プログラムの検証が成功した場合に、第1プログラムと、第2プログラムと、第3プログラムとのそれぞれを起動する。起動制御部282は、第1プログラムの検証が成功し、第2プログラムの検証が成功し、且つ、第3プログラムの検証が失敗した場合に、第1プログラムと、第2プログラムとを起動し、第3プログラムを起動しない。
【0072】
第1プログラムがブートローダ210及びOS220であり、第2プログラムがプログラムAであるとした場合、第3プログラムがプログラムB又はプログラムCであると考えることができる。したがって、ブートローダ210及びOS220の検証が成功し、プログラムAの検証が成功し、且つ、プログラムB(又はプログラムC)の検証が成功した場合、起動制御部282は、ブートローダ210を起動する。ブートローダ210が実行されると、OS220が起動する。起動制御部282は、OS220の起動後、検証が成功したプログラムAを起動する。起動制御部282は、プログラムAの起動後、検証が成功したプログラムB(又はプログラムC)を起動する。
【0073】
ブートローダ210及びOS220の検証が成功し、プログラムAの検証が成功し、且つ、プログラムB(又はプログラムC)の検証が失敗した場合、起動制御部282は、ブートローダ210を起動する。ブートローダ210が実行されると、OS220が起動する。起動制御部282は、OS220の起動後、検証が成功したプログラムAを起動する。起動制御部282は、プログラムAの起動後、検証が失敗したプログラムB(又はプログラムC)を起動しない。
【0074】
第1プログラムの検証が成功し、且つ、第2プログラムの検証が失敗した場合に、検証部281は、第3プログラムの検証を行わない。この場合、起動制御部282は、第3プログラムを起動しない。すなわち、第1プログラムの検証が成功し、且つ、第2プログラムの検証が失敗した場合に、起動制御部282は、第1プログラムを起動し、且つ、第2プログラム及び第3プログラムを起動しない。
【0075】
第1プログラムがブートローダ210及びOS220であり、第2プログラムがプログラムAであり、第3プログラムがプログラムB及びプログラムCであると考える。ブートローダ210及びOS220の検証が成功し、且つ、プログラムAの検証が失敗した場合、検証部281は、プログラムB及びプログラムCの検証を行わない。この場合、起動制御部282は、ブートローダ210及びOS220を起動し、プログラムA、プログラムB及びプログラムCを起動しない。
【0076】
検証部281は、さらに、順番情報240を検証する。検証部281は、最初に順番情報240を検証することができる。すなわち、検証部281は、順番情報240を検証した後に、ブートローダ210及びOS220を検証する。
【0077】
さらに具体的には、順番情報240の検証が成功した場合、検証部281は、第1プログラムであるブートローダ210及びOS220を検証する。順番情報240の検証が失敗した場合、検証部281は、第1プログラムであるブートローダ210及びOS220を検証しない。この場合、起動制御部282は、第1プログラムであるブートローダ210及びOS220を起動しない。
【0078】
起動制御部282は、メインプロセッサ201にプログラムの実行を指示することにより、プログラムの起動を制御する。すなわち、起動制御部282は、メインプロセッサ201によって実現される実行部211にプログラムの実行を指示する。
【0079】
起動制御部282は、ブートローダ210及びOS220を起動する場合、実行部211にブートローダ210の実行を指示する。実行部211は、ブートローダ210の実行指示を受け付けると、不揮発性メモリ202に格納されたブートローダ210を起動する。ブートローダ210が実行されると、揮発性メモリ203にOS220がロードされ、OS220が起動する。
【0080】
起動制御部282は、プログラムAを起動する場合、実行部211にプログラムAの実行を指示する。実行部211は、プログラムAの実行指示を受け付けると、OS220が起動した後に、不揮発性メモリ202に格納されたプログラムAを起動する。
【0081】
起動制御部282は、プログラムB(又はプログラムC)を起動する場合、実行部211にプログラムB(又はプログラムC)の実行を指示する。実行部211は、プログラムB(又はプログラムC)の実行指示を受け付けると、プログラムAが起動した後に、不揮発性メモリ202に格納されたプログラムB(又はプログラムC)を起動する。
【0082】
[4.中継ECUの動作]
中継ECU200は、例えば停止状態から電源を投入された場合に起動する。他の例では、中継ECU200は、スリープ状態において、NMフレーム(NM:Network Management)を受信した場合に起動(ウェイクアップ)する。このように中継ECU200が起動する場合、セキュリティプロセッサ271が起動プログラム280を開始する。これにより、セキュリティプロセッサ271によって起動処理が実行される。
図5は、実施形態に係る中継ECUのセキュリティプロセッサによる起動処理の一例を示すフローチャートである。
【0083】
セキュリティプロセッサ271は、検証順番を示す変数iを初期化する(ステップS101)。例えば、変数iの初期値は0である。
【0084】
セキュリティプロセッサ271は、不揮発性メモリ202から順番情報240を読み出し、順番情報240に対する検証処理を実行する(ステップS102)。
【0085】
セキュリティプロセッサ271は、順番情報240の検証が成功したか否かを判定する(ステップS103)。順番情報240の検証が失敗した場合(ステップS103においてNO)、セキュリティプロセッサ271は、起動処理を終了する。
【0086】
順番情報240の検証が成功した場合(ステップS103においてYES)、セキュリティプロセッサ271は、順番情報240を参照し、ブートローダ210及びOS220の格納位置を特定する。セキュリティプロセッサ271は、特定した格納位置からブートローダ210及びOS220を読み出し、ブートローダ210及びOS220のそれぞれに対する検証処理を実行する(ステップS104)。
【0087】
セキュリティプロセッサ271は、ブートローダ210又はOS220の検証が成功したか否かを判定する(ステップS105)。ブートローダ210及びOS220のすくなくとも1つの検証が失敗した場合(ステップS105においてNO)、セキュリティプロセッサ271は、起動処理を終了する。
【0088】
ブートローダ210及びOS220の検証が成功した場合(ステップS105においてYES)、セキュリティプロセッサ271は、メインプロセッサ201へブートローダ210の実行を指示する(ステップS106)。メインプロセッサ201は、この実行指示を受け付けると、ブートローダ210を起動する。ブートローダ210が実行されると、OS220が揮発性メモリ203にロードされ、OS220が起動する。
【0089】
セキュリティプロセッサ271は、変数iの値をインクリメントする(ステップS107)。
【0090】
セキュリティプロセッサ271は、順番情報240の使用プログラム特定情報を参照し、検証順番がi番目のプログラムの実行に必要なプログラムあれば、そのプログラムを特定する。セキュリティプロセッサ271は、i番目のプログラムの実行に必要なプログラムがある場合、そのプログラムの検証が失敗したか否かを判定する。すなわち、セキュリティプロセッサ271は、検証順番がi番目のプログラムが、検証に失敗したプログラムを必要とするプログラムであるか否かを判定する(ステップS108)。
【0091】
検証順番がi番目のプログラムが、検証に失敗したプログラムを必要とするプログラムである場合(ステップS108においてYES)、セキュリティプロセッサ271は、以下のステップS109からS111をスキップし、ステップS112へ進む。
【0092】
検証順番がi番目のプログラムが、検証に失敗したプログラムを必要とするプログラムでない場合(ステップS108においてNO)、セキュリティプロセッサ271は、順番情報240を参照し、検証順番がi番目のプログラムの格納位置を特定する。セキュリティプロセッサ271は、特定した格納位置のプログラムに対する検証処理を実行する(ステップS109)。
【0093】
セキュリティプロセッサ271は、i番目のプログラムの検証が成功したか否かを判定する(ステップS110)。
【0094】
i番目のプログラムの検証が成功した場合(ステップS110においてYES)、セキュリティプロセッサ271は、メインプロセッサ201へi番目のプログラムの実行を指示する(ステップS111)。メインプロセッサ201は、この実行指示を受け付けると、i番目のプログラムを起動する。
【0095】
i番目のプログラムの検証が失敗した場合(ステップS110においてNO)、セキュリティプロセッサ271は、ステップS111をスキップする。これにより、i番目のプログラムが起動しない。
【0096】
セキュリティプロセッサ271は、iがNに一致しているか否かを判定する(ステップS112)。ここで、Nは、中継ECU200において検証する対象のプログラムの総数である。すなわち、iがNより小さい場合、検証されていないプログラムが残っている。iがNに一致している場合、全てのプログラムの検証が完了している。
【0097】
iがNに一致していない場合(ステップS112においてNO)、セキュリティプロセッサ271は、ステップS107に戻る。これにより、検証順番が次のプログラムが検証される。
【0098】
iがNに一致している場合(ステップS112においてYES)、セキュリティプロセッサ271は、起動処理を終了する。
【0099】
図6は、実施形態に係る中継ECUにおける起動シーケンスの一例を示すシーケンス図である。ここで、起動シーケンスとは、中継ECU200の起動開始(電源投入又はNMフレームの受信)から、検証に成功した全てのプログラムの起動が完了するまでの処理をいう。
【0100】
まず、セキュリティプロセッサ271は、不揮発性メモリ202から順番情報240を読み出し、順番情報240に対する検証処理を実行する(ステップS21)。
【0101】
セキュリティプロセッサ271は、順番情報240を参照し、ブートローダ210及びOS220の格納位置を特定する。セキュリティプロセッサ271は、特定した格納位置からブートローダ210及びOS220を読み出し、ブートローダ210及びOS220に対する検証処理を実行する(ステップS22)。
【0102】
ブートローダ210及びOS220の検証が成功した場合、セキュリティプロセッサ271は、メインプロセッサ201へブートローダ210の実行を指示する(ステップS23)。メインプロセッサ201は、ブートローダ210の実行指示を受け付けると、ブートローダ210を起動する(ステップS11)。これにより、OS220が起動する。
【0103】
セキュリティプロセッサ271は、順番情報240を参照し、プログラムAの格納位置を特定する。セキュリティプロセッサ271は、特定した格納位置からプログラムAを読み出し、プログラムAに対する検証処理を実行する(ステップS24)。プログラムAの検証処理は、メインプロセッサ201におけるOS220の起動と同時に実行される。
【0104】
プログラムAの検証が成功した場合、セキュリティプロセッサ271は、メインプロセッサ201へプログラムAの実行を指示する(ステップS25)。メインプロセッサ201は、プログラムAの実行指示を受け付けると、プログラムAを起動する(ステップS12)。例えば、プログラムAの実行指示は、OS220の起動完了の後にメインプロセッサ201へ出力される。
【0105】
セキュリティプロセッサ271は、順番情報240を参照し、プログラムBの格納位置を特定する。セキュリティプロセッサ271は、特定した格納位置からプログラムBを読み出し、プログラムBに対する検証処理を実行する(ステップS26)。プログラムBの検証処理は、メインプロセッサ201におけるプログラムAの起動と同時に実行される。
【0106】
プログラムBの検証が成功した場合、セキュリティプロセッサ271は、メインプロセッサ201へプログラムBの実行を指示する(ステップS27)。メインプロセッサ201は、プログラムBの実行指示を受け付けると、プログラムBを起動する(ステップS13)。例えば、プログラムBの実行指示は、プログラムBの実行に必要なプログラムAの起動完了の後にメインプロセッサ201へ出力される。
【0107】
セキュリティプロセッサ271は、順番情報240を参照し、プログラムCの格納位置を特定する。セキュリティプロセッサ271は、特定した格納位置からプログラムCを読み出し、プログラムCに対する検証処理を実行する(ステップS28)。プログラムCの検証処理は、メインプロセッサ201におけるプログラムBの起動と同時に実行される。
【0108】
プログラムCの検証が成功した場合、セキュリティプロセッサ271は、メインプロセッサ201へプログラムCの実行を指示する(ステップS29)。メインプロセッサ201は、プログラムCの実行指示を受け付けると、プログラムCを起動する。例えば、プログラムCの実行指示は、プログラムCの実行に必要なプログラムAの起動完了の後にメインプロセッサ201へ出力される。プログラムBは、プログラムCの実行に必要ではないため、プログラムBの起動中に、プログラムCの実行指示がメインプロセッサ201へ出力されてもよい。
【0109】
上記の起動シーケンスにおいて、プログラムBの検証が失敗した場合、セキュリティプロセッサ271は、プログラムBの実行指示を出力せずに、プログラムCの検証処理を実行する。このため、検証に失敗したプログラムBは起動されず、検証に成功したプログラムA及びプログラムCが起動される。
【0110】
上記の起動シーケンスにおいて、プログラムAの検証が失敗した場合、セキュリティプロセッサ271は、プログラムAの実行指示を出力しない。さらに、セキュリティプロセッサ271は、プログラムAを必要とするプログラムB及びプログラムCの検証処理をスキップし、このため、プログラムB及びプログラムCの実行指示も出力しない。このように、プログラムAの検証が失敗した場合に、検証する必要がないプログラムB及びプログラムCの検証処理が省略される。
【0111】
[5.変型例]
上述した実施形態では、順番情報240が不揮発性メモリ202に格納され、順番情報240によってプログラムの検証順番を特定したが、これに限定されない。例えば、起動プログラム280に、プログラムの検証順番を示す情報が含まれてもよい。この場合、順番情報240の検証を省略することができる。
【0112】
上述した各実施形態では、中継ECU200の起動シーケンスについて説明したが、これに限定されるものではない。ECU300の起動シーケンスにおいても、上記と同様の処理とすることができる。
【0113】
[6.補記]
今回開示された実施の形態はすべての点で例示であって、制限的ではない。本発明の権利範囲は、上述の実施形態ではなく特許請求の範囲によって示され、特許請求の範囲と均等の意味及びその範囲内でのすべての変更が含まれる。
【符号の説明】
【0114】
10 車載システム
100 車載ネットワーク
200 中継ECU(車載装置)
201 メインプロセッサ
201A 第1機能
202 不揮発性メモリ
203 揮発性メモリ
204A,204B,204C インタフェース(I/F)
205 バス
210 ブートローダ
211 実行部
220 オペレーティングシステム(OS)
230 アプリケーションソフトウェア(APP)
240 順番情報
250 更新データ
251 更新ソフトウェア(更新SW)
252 順番情報
270 セキュリティモジュール
271 セキュリティプロセッサ
271A 第2機能
272 不揮発性メモリ
273 揮発性メモリ
280 起動プログラム
281 検証部
282 起動制御部
300,300A,300B,300C,300D,300E ECU(車載装置)
350 外部通信装置
400A,400B,400C バス
500 サーバ