(57)【要約】【課題】ハッキング等に対するセキュリティ対策を高めることができる制御装置を提供する。【解決手段】制御装置１６は、各々が同一の入力値に対して同一の出力値を出力し、且つ、互いに異なる３以上のプログラムを記憶するプログラム記憶部２０と、３以上のプログラムの各々に同一の入力値が入力された際に、３以上のプログラムからそれぞれ出力された３以上の出力値を比較することにより、制御値を決定する決定部２４とを備える。【選択図】図２
2020064606.tif 000002
【特許請求の範囲】
【請求項１】
各々が同一の入力値に対して同一の出力値を出力し、且つ、互いに異なる３以上のプログラムを記憶するプログラム記憶部と、
前記３以上のプログラムの各々に同一の入力値が入力された際に、前記３以上のプログラムからそれぞれ出力された３以上の出力値を比較することにより、制御値を決定する決定部と、を備える
制御装置。
【請求項２】
前記３以上のプログラムの各々の処理手順は、互いに異なる、
請求項１に記載の制御装置。
【請求項３】
前記３以上のプログラムはそれぞれ、互いに異なる手法で難読化されている、
請求項１又は２に記載の制御装置。
【請求項４】
前記制御装置は、さらに、前記３以上のプログラムの各々を対応する更新用プログラムに基づいて書き換えるプログラム制御部を備え、
前記プログラム制御部は、前記３以上のプログラムのうち過半数のプログラムを一括で書き換えることを禁止する、
請求項１〜３のいずれか１項に記載の制御装置。
【請求項５】
前記制御装置は、さらに、前記３以上のプログラムのうち特定のプログラムが前記更新用プログラムに基づいて書き換えられた際に、書き換えられた前記特定のプログラム及び他の２以上のプログラムの各々に同一の入力値を入力することにより、書き換えられた前記特定のプログラムから出力された出力値と、前記他の２以上のプログラムからそれぞれ出力された２以上の出力値とが一致するか否かを判定する検証部を備える、
請求項４に記載の制御装置。
【請求項６】
前記プログラム制御部は、書き換えられた前記特定のプログラムから出力された出力値と、前記他の２以上のプログラムからそれぞれ出力された２以上の出力値とが一致しないと判定された場合に、前記特定のプログラムを書き換え前の状態に復元する、
請求項５に記載の制御装置。
【請求項７】
前記検証部は、書き換えられた前記特定のプログラムから出力された出力値と、前記他の２以上のプログラムからそれぞれ出力された２以上の出力値とが一致しないと判定した場合に、その旨を外部に通知する、
請求項５又は６に記載の制御装置。
【請求項８】
前記制御装置は、さらに、
前記更新用プログラムを一時的に記憶させるための一時記憶部と、
前記３以上のプログラムのうち特定のプログラムが前記更新用プログラムに基づいて書き換えられる前に、前記更新用プログラムを前記一時記憶部に一時的に記憶させた状態で、前記更新用プログラム及び他の２以上のプログラムの各々に同一の入力値を入力することにより、前記更新用プログラムから出力された出力値と、前記他の２以上のプログラムからそれぞれ出力された２以上の出力値とが一致するか否かを判定する検証部と、を備える
請求項４に記載の制御装置。
【請求項９】
前記制御装置は、さらに、
検証用入力値及び検証用出力値を記憶する検証用記憶部と、 
前記３以上のプログラムのうち特定のプログラムが前記更新用プログラムに基づいて書き換えられた際に、書き換えられた前記特定のプログラムに前記検証用入力値を入力することにより、書き換えられた前記特定のプログラムから出力された出力値と前記検証用出力値とが一致するか否かを判定する検証部と、を備える
請求項４に記載の制御装置。
【請求項１０】
前記決定部は、前記３以上のプログラムからそれぞれ出力された３以上の出力値のうち過半数の出力値が一致している場合に、一致している前記過半数の出力値により示される１つの値を前記制御値として決定する、
請求項１〜９のいずれか１項に記載の制御装置。
【請求項１１】
前記決定部は、前記３以上のプログラムからそれぞれ出力された３以上の出力値のうち、少なくとも１つの出力値が他の出力値と一致していない場合に、その旨を外部に通知する、
請求項１０に記載の制御装置。
【請求項１２】
前記制御装置は、さらに、前記３以上のプログラムの各々に対応して物理的に独立して設けられた３以上の処理部を備え、
前記決定部は、前記３以上の処理部におけるそれぞれの情報処理によって前記３以上のプログラムからそれぞれ出力された３以上の出力値を比較することにより、制御値を決定する、
請求項１〜１１のいずれか１項に記載の制御装置。
【請求項１３】
前記制御装置は、さらに、前記３以上の処理部の各々への電源の供給又は遮断を切り替えるスイッチ部を備え、
前記決定部は、前記３以上の出力値のうち過半数の出力値が一致している場合に、当該過半数の出力値と一致していない出力値を出力する処理部の電源を遮断する制御信号を前記スイッチ部に出力する、
請求項１２に記載の制御装置。
【請求項１４】
前記制御装置は、さらに、前記３以上の処理部の各々のリセットを制御するリセット制御部を備え、
前記決定部は、前記３以上の出力値のうち過半数の出力値が一致している場合に、当該過半数の出力値と一致していない出力値を出力する処理部をリセットするように、前記リセット制御部に指示する、
請求項１２に記載の制御装置。
【請求項１５】
前記３以上のプログラムは、それぞれ物理的に独立したプログラム記憶部に記憶され、前記決定部は論理回路として構成されている、
請求項１２〜１４のいずれか１項に記載の制御装置。
【請求項１６】
前記３以上のプログラムのうち、少なくとも１つのプログラムの処理手順は自動生成されたものである、
請求項１〜１５のいずれか１項に記載の制御装置。
【請求項１７】
前記決定部は、前記３以上の出力値のうち一部の出力値が一致していない場合に、退避動作を指示する制御信号を出力する、
請求項１〜１６のいずれか１項に記載の制御装置。
【請求項１８】
各々が同一の入力値に対して同一の出力値を出力し、且つ、互いに異なる３以上のプログラムをプログラム記憶部に記憶させるステップと、
前記３以上のプログラムの各々に同一の入力値が入力された際に、前記３以上のプログラムからそれぞれ出力された３以上の出力値を比較することにより、制御値を決定するステップと、を含む
制御方法。
【請求項１９】
請求項１８に記載の制御方法をコンピュータに実行させる
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、制御装置、制御方法及びプログラムに関する。
【背景技術】
【０００２】
近年、車両の加減速、操舵及び制動等の運転操作を自動で行う自動運転システムが知られている。この自動運転システムには、車両の運転操作を制御するためのプログラムが書き込まれた電子制御ユニットが搭載されている。
【０００３】
電子制御ユニットのプログラムが例えばハッキング等により不正に書き換えられる、あるいは、悪意のある第三者によりプログラムが解析されてプログラムの脆弱性が突かれた場合には、運転者の意図しない車両の挙動が誘発されるおそれがある。そのため、電子制御ユニットの動作の異常を検出するための制御装置が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−２２２４６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来の制御装置では、ハッキング等に対するセキュリティ対策が十分とは言えないという課題が生じる。
【０００６】
そこで、本開示は、ハッキング等に対するセキュリティ対策を高めることができる制御装置、制御方法及びプログラムを提供する。
【課題を解決するための手段】
【０００７】
本開示の一態様に係る制御装置は、各々が同一の入力値に対して同一の出力値を出力し、且つ、互いに異なる３以上のプログラムを記憶するプログラム記憶部と、前記３以上のプログラムの各々に同一の入力値が入力された際に、前記３以上のプログラムからそれぞれ出力された３以上の出力値を比較することにより、制御値を決定する決定部と、を備える。
【０００８】
なお、これらの包括的又は具体的な態様は、システム、方法、集積回路、コンピュータプログラム又はコンピュータで読み取り可能なＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）等の記録媒体で実現されてもよく、システム、方法、集積回路、コンピュータプログラム及び記録媒体の任意な組み合わせで実現されてもよい。
【発明の効果】
【０００９】
本開示の一態様に係る制御装置等によれば、ハッキング等に対するセキュリティ対策を高めることができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係る通信システムの概要を示すブロック図である。
【図２】実施の形態１に係る制御装置の機能構成を示すブロック図である。
【図３】実施の形態１に係る第１のプログラム、第２のプログラム及び第３のプログ ラムを説明するための概念図である。
【図４】実施の形態１に係る制御装置における第１のプログラム、第２のプログラム及び第３のプログラムの実行処理の流れを示すフローチャートである。
【図５Ａ】実施の形態１に係る制御装置における第１のプログラム、第２のプログラム及び第３のプログラムの実行処理を説明するための概念図である。
【図５Ｂ】実施の形態１に係る制御装置における第１のプログラム、第２のプログラム及び第３のプログラムの実行処理を説明するための概念図である。
【図５Ｃ】実施の形態１に係る制御装置における第１のプログラム、第２のプログラム及び第３のプログラムの実行処理を説明するための概念図である。
【図６】実施の形態１に係る制御装置における第１のプログラム、第２のプログラム及び第３のプログラムの書き換え処理の流れを示すフローチャートである。
【図７Ａ】実施の形態１に係る制御装置における第１のプログラムの書き換え処理を説明するための概念図である。
【図７Ｂ】実施の形態１に係る制御装置における第１のプログラムの書き換え処理を説明するための概念図である。
【図７Ｃ】実施の形態１に係る制御装置における第２のプログラムの書き換え処理を説明するための概念図である。
【図７Ｄ】実施の形態１に係る制御装置における第２のプログラムの書き換え処理を説明するための概念図である。
【図７Ｅ】実施の形態１に係る制御装置における第３のプログラムの書き換え処理を説明するための概念図である。
【図７Ｆ】実施の形態１に係る制御装置における第３のプログラムの書き換え処理を説明するための概念図である。
【図８】実施の形態２に係る制御装置の機能構成を示すブロック図である。
【図９】実施の形態２に係る制御装置における第１のプログラム、第２のプログラム及び第３のプログラムの書き換え処理の流れを示すフローチャートである。
【図１０Ａ】実施の形態２に係る制御装置における第１のプログラムの書き換え処理を説明するための概念図である。
【図１０Ｂ】実施の形態２に係る制御装置における第１のプログラムの書き換え処理を説明するための概念図である。
【図１０Ｃ】実施の形態２に係る制御装置における第２のプログラムの書き換え処理を説明するための概念図である。
【図１０Ｄ】実施の形態２に係る制御装置における第２のプログラムの書き換え処理を説明するための概念図である。
【図１０Ｅ】実施の形態２に係る制御装置における第３のプログラムの書き換え処理を説明するための概念図である。
【図１０Ｆ】実施の形態２に係る制御装置における第３のプログラムの書き換え処理を説明するための概念図である。
【図１１】実施の形態３に係る制御装置の機能構成を示すブロック図である。
【図１２】実施の形態３に係る制御装置における第１のプログラム、第２のプログラム及び第３のプログラムの書き換え処理の流れを示すフローチャートである。
【図１３Ａ】実施の形態３に係る制御装置における第１のプログラムの書き換え処理を説明するための概念図である。
【図１３Ｂ】実施の形態３に係る制御装置における第１のプログラムの書き換え処理を説明するための概念図である。
【図１３Ｃ】実施の形態３に係る制御装置における第２のプログラムの書き換え処理を説明するための概念図である。
【図１３Ｄ】実施の形態３に係る制御装置における第２のプログラムの書き換え処理を説明するための概念図である。
【図１３Ｅ】実施の形態３に係る制御装置における第３のプログラムの書き換え処理 を説明するための概念図である。
【図１３Ｆ】実施の形態３に係る制御装置における第３のプログラムの書き換え処理を説明するための概念図である。
【図１４】実施の形態４に係る制御装置の機能構成を示すブロック図である。
【図１５】実施の形態５に係る制御装置の機能構成を示すブロック図である。
【発明を実施するための形態】
【００１１】
本開示の一態様に係る制御装置は、各々が同一の入力値に対して同一の出力値を出力し、且つ、互いに異なる３以上のプログラムを記憶するプログラム記憶部と、前記３以上のプログラムの各々に同一の入力値が入力された際に、前記３以上のプログラムからそれぞれ出力された３以上の出力値を比較することにより、制御値を決定する決定部と、を備える。
【００１２】
本態様によれば、決定部は、プログラム記憶部に記憶された互いに異なる３以上のプログラムを用いて、制御値を決定する。これにより、例えばハッキング等の不正な手段により３以上のプログラムの全てを解析するのが困難となり、セキュリティ対策を高めることができる。
【００１３】
例えば、前記３以上のプログラムの各々の処理手順は、互いに異なるように構成してもよい。
【００１４】
本態様によれば、３以上のプログラムの各々の処理手順は互いに異なるので、プログラム記憶部には、見かけ上、異なる３種類以上のプログラムが記憶されるようになる。これにより、例えばハッキング等の不正な手段により、３以上のプログラムの全てが解析されるのを抑制することができる。
【００１５】
例えば、前記３以上のプログラムはそれぞれ、互いに異なる手法で難読化されているように構成してもよい。
【００１６】
本態様によれば、３以上のプログラムはそれぞれ、互いに異なる手法で難読化されているので、プログラム記憶部には、見かけ上、異なる３種類以上のプログラムが記憶されるようになる。これにより、例えばハッキング等の不正な手段により、３以上のプログラムの全てが解析されるのを抑制することができる。
【００１７】
例えば、前記制御装置は、さらに、前記３以上のプログラムの各々を対応する更新用プログラムに基づいて書き換えるプログラム制御部を備え、前記プログラム制御部は、前記３以上のプログラムのうち過半数のプログラムを一括で書き換えることを禁止するように構成してもよい。
【００１８】
本態様によれば、例えばハッキング等の不正な手段により、３以上のプログラムのうち過半数のプログラムが一括で書き換えられるのを禁止することができる。
【００１９】
例えば、前記制御装置は、さらに、前記３以上のプログラムのうち特定のプログラムが前記更新用プログラムに基づいて書き換えられた際に、書き換えられた前記特定のプログラム及び他の２以上のプログラムの各々に同一の入力値を入力することにより、書き換えられた前記特定のプログラムから出力された出力値と、前記他の２以上のプログラムからそれぞれ出力された２以上の出力値とが一致するか否かを判定する検証部を備えるように構成してもよい。
【００２０】
本態様によれば、特定のプログラムの書き換え結果を検証することができる。
【００２１】
例えば、前記プログラム制御部は、書き換えられた前記特定のプログラムから出力され 
た出力値と、前記他の２以上のプログラムからそれぞれ出力された２以上の出力値とが一致しないと判定された場合に、前記特定のプログラムを書き換え前の状態に復元するように構成してもよい。
【００２２】
本態様によれば、特定のプログラムの書き換え結果が検証ＮＧであった場合に、特定のプログラムを書き換え前の状態に復元させることができる。
【００２３】
例えば、前記検証部は、書き換えられた前記特定のプログラムから出力された出力値と、前記他の２以上のプログラムからそれぞれ出力された２以上の出力値とが一致しないと判定した場合に、その旨を外部に通知するように構成してもよい。
【００２４】
本態様によれば、特定のプログラムの書き換え結果が検証ＮＧであった場合に、その旨を外部に通知することができる。
【００２５】
例えば、前記制御装置は、さらに、前記更新用プログラムを一時的に記憶させるための一時記憶部と、前記３以上のプログラムのうち特定のプログラムが前記更新用プログラムに基づいて書き換えられる前に、前記更新用プログラムを前記一時記憶部に一時的に記憶させた状態で、前記更新用プログラム及び他の２以上のプログラムの各々に同一の入力値を入力することにより、前記更新用プログラムから出力された出力値と、前記他の２以上のプログラムからそれぞれ出力された２以上の出力値とが一致するか否かを判定する検証部と、を備えるように構成してもよい。
【００２６】
本態様によれば、特定のプログラムが更新用プログラムに基づいて書き換えられる前に、更新用プログラムの動作を事前に検証することができる。
【００２７】
例えば、前記制御装置は、さらに、検証用入力値及び検証用出力値を記憶する検証用記憶部と、前記３以上のプログラムのうち特定のプログラムが前記更新用プログラムに基づいて書き換えられた際に、書き換えられた前記特定のプログラムに前記検証用入力値を入力することにより、書き換えられた前記特定のプログラムから出力された出力値と前記検証用出力値とが一致するか否かを判定する検証部と、を備えるように構成してもよい。
【００２８】
本態様によれば、検証部は、検証用記憶部に記憶された検証用入力値及び検証用出力値を用いることにより、プログラム制御部により書き換えられた特定のプログラムの動作のみを検証すればよいので、検証部の処理負荷を低減することができる。
【００２９】
例えば、前記決定部は、前記３以上のプログラムからそれぞれ出力された３以上の出力値のうち過半数の出力値が一致している場合に、一致している前記過半数の出力値により示される１つの値を前記制御値として決定するように構成してもよい。
【００３０】
本態様によれば、万一、例えばハッキング等の不正な手段により３以上のプログラムの一部が書き換えられた場合であっても、一致している過半数の出力値により示される１つの値を制御値として適切に決定することができる。
【００３１】
例えば、前記決定部は、前記３以上のプログラムからそれぞれ出力された３以上の出力値のうち、少なくとも１つの出力値が他の出力値と一致していない場合に、その旨を外部に通知するように構成してもよい。
【００３２】
本態様によれば、少なくとも１つの出力値が他の出力値と一致していない場合に、その旨を外部に通知することができる。
【００３３】
例えば、前記制御装置は、さらに、前記３以上のプログラムの各々に対応して物理的に独立して設けられた３以上の処理部を備え、前記決定部は、前記３以上の処理部におけるそれぞれの情報処理によって前記３以上のプログラムからそれぞれ出力された３以上の出力値を比較することにより、制御値を決定するように構成してもよい。
【００３４】
本態様によれば、３つ以上の処理部が物理的に独立して設けられる。したがって、各プログラムからの出力値に応じて、各プログラムに対応する処理部の電源の遮断やリセットなどを個別に制御することができる。
【００３５】
例えば、前記制御装置は、さらに、前記３以上の処理部の各々への電源の供給または遮断を切り替えるスイッチ部を備え、前記決定部は、前記３以上の出力値のうち過半数の出力値が一致している場合に、当該過半数の出力値と一致していない出力値を出力する処理部の電源を遮断する制御信号を前記スイッチ部に出力するように構成してもよい。
【００３６】
本態様によれば、過半数の出力値と一致していない出力値を出力する処理部を個別に電源を遮断することができる。
【００３７】
例えば、前記制御装置は、さらに、前記３以上の処理部の各々のリセットを制御するリセット制御部を備え、前記決定部は、前記３以上の出力値のうち過半数の出力値が一致している場合に、当該過半数の出力値と一致していない出力値を出力する処理部をリセットするように構成してもよい。
【００３８】
本態様によれば、過半数の出力値と一致していない出力値を出力する処理部を個別にリセットすることができる。
【００３９】
例えば、前記制御装置は、前記３以上のプログラムが、それぞれ物理的に独立したプログラム記憶部に記憶され、前記決定部は論理回路として構成してもよい。
【００４０】
本態様によれば、決定部をハードウェアとして構成することができる。
【００４１】
例えば、前記制御装置は、前記３以上のプログラムのうち、少なくとも１つのプログラムの処理手順は自動生成されたものとして構成してもよい。
【００４２】
本態様によれば、プログラムのソースコードとして自動生成されたものを用いることができる。
【００４３】
例えば、前記決定部は、前記３以上の出力値のうち一部の出力値が一致していない場合に、退避動作を指示する制御信号を出力する構成としてもよい。
【００４４】
本態様によれば、３以上の出力値のうち一部の出力値が一致していない場合、通信機能の制限や減速状態への移行など、モビリティに退避動作を実行させることができる。
【００４５】
本開示の一態様に係る制御方法は、各々が同一の入力値に対して同一の出力値を出力し、且つ、互いに異なる３以上のプログラムをプログラム記憶部に記憶させるステップと、前記３以上のプログラムの各々に同一の入力値が入力された際に、前記３以上のプログラムからそれぞれ出力された３以上の出力値を比較することにより、制御値を決定するステップと、を含む。
【００４６】
本態様によれば、プログラム記憶部に記憶された互いに異なる３以上のプログラムを用いて、制御値を決定する。これにより、例えばハッキング等の不正な手段により３以上のプログラムの全てを解析するのが困難となり、セキュリティ対策を高めることができる。
【００４７】
本開示の一態様に係るプログラムは、上述した制御方法をコンピュータに実行させる。
【００４８】
なお、これらの包括的又は具体的な態様は、システム、方法、集積回路、コンピュータプログラム又はコンピュータで読み取り可能なＣＤ−ＲＯＭ等の記録媒体で実現されてもよく、システム、方法、集積回路、コンピュータプログラム又は記録媒体の任意な組み合わせで実現されてもよい。
【００４９】
以下、実施の形態について、図面を参照しながら具体的に説明する。
【００５０】
なお、以下で説明する実施の形態は、いずれも包括的又は具体的な例を示すものである。以下の実施の形態で示される数値、形状、材料、構成要素、構成要素の配置位置及び接続形態、ステップ、ステップの順序等は、一例であり、本開示を限定する主旨ではない。また、以下の実施の形態における構成要素のうち、最上位概念を示す独立請求項に記載されていない構成要素については、任意の構成要素として説明される。
【００５１】
（実施の形態１）
［１−１．通信システムの概要］
まず、図１を参照しながら、実施の形態１に係る通信システム２の概要について説明する。図１は、実施の形態１に係る通信システム２の概要を示すブロック図である。
【００５２】
本実施の形態の通信システム２は、例えば自動車等の車両に搭載された、車両の自動運転システムを実現するための車載ネットワークである。なお、車載ネットワークは、例えばＣＡＮ（Ｃｏｎｔｒｏｌｌｅｒ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）プロトコルに従って通信するネットワークである。
【００５３】
図１に示すように、通信システム２は、通信ＥＣＵ（Ｅｌｅｃｔｒｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）４と、ゲートウェイＥＣＵ６と、複数のＥＣＵ８と、複数のＣＡＮバス１０とを備えている。
【００５４】
通信ＥＣＵ４は、通信システム２とサーバ装置１２との通信を制御するための電子制御ユニットである。通信ＥＣＵ４は、例えばインターネット又は専用回線等のネットワーク１４を介して、車両の外部に配置されたサーバ装置１２と通信する。なお、サーバ装置１２は、通信システム２を管理するためのコンピュータである。また、通信ＥＣＵ４は、ゲートウェイＥＣＵ６及び複数のＣＡＮバス１０を介して、複数のＥＣＵ８の各々と通信する。
【００５５】
ゲートウェイＥＣＵ６は、車両の内部に構築された複数のＣＡＮバス１０に対して、ＣＡＮプロトコルに従った通信データを送受信するための電子制御ユニットである。ゲートウェイＥＣＵ６は、通信ＥＣＵ４及び複数のＣＡＮバス１０とそれぞれ接続されている。
【００５６】
複数のＥＣＵ８の各々は、例えば、車両の加減速、操舵、制動、ドアの開閉及びウィンドウの開閉等を制御するための電子制御ユニットである。複数のＥＣＵ８の各々は、ＣＡＮバス１０と接続されている。複数のＥＣＵ８の各々は、ＣＡＮバス１０を介してゲートウェイＥＣＵ６との間で通信データを送受信する。
【００５７】
複数のＥＣＵ８は、先進運転者支援システム（ＡＤＡＳ：Ａｄｖａｎｃｅｄ  Ｄｒｉｖｅｒ  Ａｓｓｉｓｔａｎｃｅ  Ｓｙｓｔｅｍ）における車両の運転操作を制御するためのＡＤＡＳＥＣＵ８ａを含んでいる。ＡＤＡＳＥＣＵ８ａは、制御装置１６（後述する図２参照）の一例である。制御装置１６の機能構成については後述する。
【００５８】
なお、複数のＥＣＵ８の各々は、例えば、プロセッサ及びメモリ等で構成されたデジタル回路、アナログ回路及び通信回路等を含む。メモリは、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）又はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等であり、プロセッサにより実行されるプログラム（すなわち、ソフトウェアとしてのコンピュータプログラム）を記憶する。例えばプロセッサがプログラムに従って動作することにより、複数のＥＣＵ８の各々は各種機能を実現する。
【００５９】
［１−２．制御装置の機能構成］
次に、図２及び図３を参照しながら、実施の形態１に係る制御装置１６の機能構成について説明する。図２は、実施の形態１に係る制御装置１６の機能構成を示すブロック図である。図３は、実施の形態１に係る第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３を説明するための概念図である。
【００６０】
制御装置１６は、例えば上述したＡＤＡＳＥＣＵ８ａとして機能する電子制御ユニットである。図２に示すように、制御装置１６は、通信部１８と、プログラム記憶部２０と、プログラム実行部２２と、決定部２４と、プログラム制御部２６と、検証部２８と、制御部３０とを備えている。
【００６１】
通信部１８は、ゲートウェイＥＣＵ６（図１参照）との間で通信データを送受信する。具体的には、通信部１８は、サーバ装置１２（図１参照）から送信されてきた更新用プログラム（後述する）を、通信ＥＣＵ４（図１参照）及びゲートウェイＥＣＵ６を介して受信する。また、通信部１８は、決定部２４により決定された制御値（後述する）を、ゲートウェイＥＣＵ６を介して他のＥＣＵ８に送信する。さらに、通信部１８は、決定部２４からの通知信号（後述する）をゲートウェイＥＣＵ６に送信する。なお、ゲートウェイＥＣＵ６は、通信部１８からの通知信号を、通信ＥＣＵ４を介してサーバ装置１２に送信する。
【００６２】
プログラム記憶部２０は、例えば３つのプログラムを記憶するためのメモリである。具体的には、プログラム記憶部２０は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３を記憶する。第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各々は、例えばＡＤＡＳにおける車両の運転操作（例えば車両の加減速、操舵及び制動等）を制御するためのソフトウェアとしてのコンピュータプログラムである。
【００６３】
図３の（ａ）〜（ｃ）に示すように、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３は、１つ以上の同一の入力値Ａ（あらゆる値を取り得る）に対して１つ以上の同一の出力値Ｂを出力する、互いに異なるプログラムである。具体的には、第１のプログラムＰｇ−１の処理手順Ａ、第２のプログラムＰｇ−２の処理手順Ｂ及び第３のプログラムＰｇ−３の処理手順Ｃは、互いに異なっている。また、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３はそれぞれ、互いに異なる手法Ａ、手法Ｂ及び手法Ｃで難読化されている。これにより、プログラム記憶部２０には、見かけ上、異なる３種類のプログラムが記憶されるようになる。
【００６４】
ここで、プログラムの処理手順とは、プログラムにより実行される計算手順等を表すソースコードをいう。プログラムの処理手順が互いに異なるとは、例えば次のような場合である。例えば、プログラムの処理手順Ａ及びＢの各々が「２４」を計算して「１６」を出力する場合、入力値を「２」及び「４」、出力値を「１６」とした時、処理手順Ａは「２×２×２×２」、処理手順Ｂは「２＋２＋２＋２＋２＋２＋２＋２」となる。
【００６５】
また、難読化とは、ソフトウェアとしてのプログラムを、逆アセンブル及び解読が困難なコードに変換することをいう。難読化の手法として、例えば、ａ）関数名及び変数名等のシンボルのリネーム、ｂ）命令の置き換え、ｃ）ダミーコードの挿入、ｄ）関数のインライン化、ｅ）文字列及び一部のコードの暗号化、ｆ）変数の異なるメモリ領域への配置等が挙げられる。但し、難読化は、プログラムの処理手順自体を変更するものではない。
【００６６】
プログラム実行部２２は、プログラム記憶部２０に記憶されている第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３を同時に実行する。なお、プログラム実行部２２は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３を１つずつ連続的に実行してもよい。
【００６７】
決定部２４は、プログラム実行部２２により実行された第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値に基づいて、ＡＤＡＳにおける車両の運転操作を制御するための制御値を決定する。具体的には、決定部２４は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値のうち２以上の出力値（すなわち、過半数の出力値）が一致している場合に、一致している２以上の出力値により示される１つの値を制御値として決定する。また、決定部２４は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値のうち、少なくとも１つの出力値が他の出力値と一致していない場合に、その旨をサーバ装置１２に通知するための通知信号を生成する。この時、決定部２４は、生成した通知信号を通信部１８に出力する。
【００６８】
プログラム制御部２６は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各々を、サーバ装置１２からの更新用プログラムに基づいて書き換える。また、プログラム制御部２６は、外部からの第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換えを監視し、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３のうち２以上のプログラム（すなわち、過半数のプログラム）の一括書き換えを禁止する。
【００６９】
検証部２８は、プログラム制御部２６により第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３が書き換えられた際に、それらの書き換え結果を検証する。具体的には、検証部２８は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３のうち特定のプログラム（例えば、第１のプログラムＰｇ−１）が書き換えられた際に、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各々に同一の入力値を入力することにより、書き換えられた特定のプログラムから出力された出力値と、他の２つのプログラム（例えば、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３）からそれぞれ出力された２つの出力値とが一致するか否かを判定する。なお、検証部２８は、サーバ装置１２からの更新用プログラムに付与されている電子署名が正しいか否かを検証してもよい。
【００７０】
制御部３０は、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等で構成された制御回路であり、制御装置１６の動作を統括的に制御する。
【００７１】
［１−３．制御装置の動作］
［１−３−１．第１〜第３のプログラムの実行処理］
次に、図４〜図５Ｃを参照しながら、実施の形態１に係る制御装置１６における第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の実行処理について説明する。図４は、実施の形態１に係る制御装置１６における第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の実行処理の流れを示すフローチャートである。図５Ａ〜図５Ｃは、実施の形態１に係る制御装置１６における第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の実行処理を説明するための概念図である。
【００７２】
本実施の形態では、車両の自動運転時において、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された出力値に基づいて制御値を決定し、決定された制御値に基づいて、ＡＤＡＳにおける車両の運転操作が制御される。以下、車両の自動運転時における、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の実行処理について説明する。
【００７３】
図４に示すように、プログラム実行部２２は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３を同時に実行する（Ｓ１０１）。この時、プログラム実行部２２は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各々に対して同一の入力値Ａを入力する。決定部２４は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値が全て一致するか否かを判定する（Ｓ１０２）。
【００７４】
図５Ａに示すように、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値Ｂが全て一致する場合には（Ｓ１０２でＹＥＳ）、決定部２４は、一致した出力値Ｂを制御値として決定する（Ｓ１０３）。
【００７５】
ステップＳ１０２に戻り、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値が全て一致しない場合には（Ｓ１０２でＮＯ）、決定部２４は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値のうち一部のみが一致するか否かを判定する（Ｓ１０４）。
【００７６】
図５Ｂに示すように、例えば、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された２つの出力値Ｂのみが一致する場合には（Ｓ１０４でＹＥＳ）、決定部２４は、過半数で一致した出力値Ｂを制御値として決定する（Ｓ１０５）。これにより、万一、例えばハッキング等の不正な手段により第１のプログラムＰｇ−１が書き換えられた場合であっても、一致している過半数の出力値Ｂを制御値として適切に決定することができる。その結果、運転者の意図しない車両の挙動が誘発されるのを抑制することができる。
【００７７】
この場合、決定部２４は、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、決定部２４は、第１のプログラムＰｇ−１から出力された出力値Ｂ’が他の出力値Ｂと一致しない旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ１０６）。
【００７８】
ステップＳ１０４に戻り、図５Ｃに示すように、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値Ｂ、出力値Ｂ’及び出力値Ｂ’’が全て異なる場合には（Ｓ１０４でＮＯ）、決定部２４は、制御値の決定を保留する（Ｓ１０７）。これは、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３のうち、少なくとも２つのプログラムが不正に書き換えられた可能性があると考えられるためである。制御値の決定を保留することにより、運転者の意図しない車両の挙動が誘発されるのを抑制することができる。
【００７９】
この場合、決定部２４は、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、決定部２４は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値Ｂ、出力値Ｂ’及び出力値Ｂ’’が全て異なる旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ１０６）。
【００８０】
なお、上述したステップＳ１０３及びＳ１０５において、決定部２４は、一致した出力値Ｂを制御値として決定したが、制御値は必ずしも出力値Ｂと同一でなくてもよい。決定部２４は、例えば、一致した出力値Ｂに所定の係数等を乗じたものを制御値として決定してもよい。
【００８１】
［１−３−２．第１〜第３のプログラムの書き換え処理］
次に、図６〜図７Ｆを参照しながら、実施の形態１に係る制御装置１６における第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換え処理について説明する。図６は、実施の形態１に係る制御装置１６における第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換え処理の流れを示すフローチャートである。図７Ａ及び図７Ｂは、実施の形態１に係る制御装置１６における第１のプログラムＰｇ−１の書き換え処理を説明するための概念図である。図７Ｃ及び図７Ｄは、実施の形態１に係る制御装置１６における第２のプログラムＰｇ−２の書き換え処理を説明するための概念図である。図７Ｅ及び図７Ｆは、実施の形態１に係る制御装置１６における第３のプログラムＰｇ−３の書き換え処理を説明するための概念図である。
【００８２】
図６に示すように、通信部１８は、サーバ装置１２から送信されてきた更新用プログラムとして、第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第６のプログラムＰｇ−６を受信する（Ｓ２０１）。なお、第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第６のプログラムＰｇ−６はそれぞれ、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３を更新するための更新用プログラムである。
【００８３】
プログラム制御部２６は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３をこの順に書き換える。最初に、図７Ａ及び図７Ｂに示すように、プログラム制御部２６は、第１のプログラムＰｇ−１を第４のプログラムＰｇ−４に書き換える（Ｓ２０２）。検証部２８は、第４のプログラムＰｇ−４、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３を同時に実行させ（Ｓ２０３）、第４のプログラムＰｇ−４への書き換え結果を検証する（Ｓ２０４）。この時、検証部２８は、第４のプログラムＰｇ−４、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各々に対して同一の入力値Ａを入力する。
【００８４】
図７Ａの（ｂ）に示すように、第４のプログラムＰｇ−４から出力された出力値Ｂが、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された２つの出力値Ｂと一致している場合には、検証部２８は、検証結果ＯＫと判定する（Ｓ２０４で「ＯＫ」）。
【００８５】
一方、図７Ｂの（ｂ）に示すように、第４のプログラムＰｇ−４から出力された出力値Ｂ’が、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された２つの出力値Ｂと一致していない場合には、検証部２８は、検証結果ＮＧと判定する（Ｓ２０４で「ＮＧ」）。この場合、検証部２８は、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、検証部２８は、第４のプログラムＰｇ−４への書き換えの検証結果がＮＧである旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ２０５）。その後、プログラム制御部２６は、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換えを実行することなく、処理を終了する。
【００８６】
ステップＳ２０４に戻り、検証部２８が検証結果ＯＫと判定した場合には（Ｓ２０４で「ＯＫ」）、図７Ｃ及び図７Ｄに示すように、プログラム制御部２６は、第２のプログラムＰｇ−２を第５のプログラムＰｇ−５に書き換える（Ｓ２０６）。検証部２８は、第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第３のプログラムＰｇ−３を同時に実行させ（Ｓ２０７）、第５のプログラムＰｇ−５への書き換え結果を検証する（Ｓ２０８）。この時、検証部２８は、第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第３のプログラムＰｇ−３の各々に対して同一の入力値Ａを入力する。
【００８７】
図７Ｃの（ｂ）に示すように、第５のプログラムＰｇ−５から出力された出力値Ｂが、第４のプログラムＰｇ−４及び第３のプログラムＰｇ−３からそれぞれ出力された２つの出力値Ｂと一致している場合には、検証部２８は、検証結果ＯＫと判定する（Ｓ２０８で「ＯＫ」）。
【００８８】
一方、図７Ｄの（ｂ）に示すように、第５のプログラムＰｇ−５から出力された出力値Ｂ’が、第４のプログラムＰｇ−４及び第３のプログラムＰｇ−３からそれぞれ出力された２つの出力値Ｂと一致していない場合には、検証部２８は、検証結果ＮＧと判定する（Ｓ２０８で「ＮＧ」）。この場合、検証部２８は、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、検証部２８は、第５のプログラムＰｇ−５への書き換えの検証結果がＮＧである旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ２０５）。その後、プログラム制御部２６は、第３のプログラムＰｇ−３の書き換えを実行することなく、処理を終了する。
【００８９】
ステップＳ２０８に戻り、検証部２８が検証結果ＯＫと判定した場合には（Ｓ２０８で「ＯＫ」）、図７Ｅ及び図７Ｆに示すように、プログラム制御部２６は、第３のプログラムＰｇ−３を第６のプログラムＰｇ−６に書き換える（Ｓ２０９）。検証部２８は、第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第６のプログラムＰｇ−６を同時に実行させ（Ｓ２１０）、第６のプログラムＰｇ−６への書き換え結果を検証する（Ｓ２１１）。この時、検証部２８は、第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第６のプログラムＰｇ−６の各々に対して同一の入力値Ａを入力する。
【００９０】
図７Ｅの（ｂ）に示すように、第６のプログラムＰｇ−６から出力された出力値Ｂが、第４のプログラムＰｇ−４及び第５のプログラムＰｇ−５からそれぞれ出力された２つの出力値Ｂと一致している場合には、検証部２８は、検証結果ＯＫと判定する（Ｓ２１１で「ＯＫ」）。この場合、第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第６のプログラムＰｇ−６への書き換えが全て正常に完了し、処理を終了する。
【００９１】
一方、図７Ｆの（ｂ）に示すように、第６のプログラムＰｇ−６から出力された出力値Ｂ’が、第４のプログラムＰｇ−４及び第５のプログラムＰｇ−５からそれぞれ出力された２つの出力値Ｂと一致していない場合には、検証部２８は、検証結果ＮＧと判定する（ Ｓ２１１で「ＮＧ」）。この場合、検証部２８は、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、検証部２８は、第６のプログラムＰｇ−６への書き換えの検証結果がＮＧである旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ２０５）。その後、処理を終了する。
【００９２】
なお、上述したステップＳ２０４において、検証部２８が検証結果ＮＧと判定した場合に（Ｓ２０４で「ＮＧ」）、プログラム制御部２６は、第４のプログラムＰｇ−４を書き換え前の第１のプログラムＰｇ−１に復元してもよい。この時、プログラム制御部２６は、第１のプログラムＰｇ−１を書き換える前に、第１のプログラムＰｇ−１をプログラム記憶部２０等に一時的に記憶させておく。
【００９３】
同様に、上述したステップＳ２０８において、検証部２８が検証結果ＮＧと判定した場合に（Ｓ２０８で「ＮＧ」）、プログラム制御部２６は、第５のプログラムＰｇ−５を書き換え前の第２のプログラムＰｇ−２に復元してもよい。この時、プログラム制御部２６は、第２のプログラムＰｇ−２を書き換える前に、第２のプログラムＰｇ−２をプログラム記憶部２０等に一時的に記憶させておく。
【００９４】
同様に、上述したステップＳ２１１において、検証部２８が検証結果ＮＧと判定した場合に（Ｓ２１１で「ＮＧ」）、プログラム制御部２６は、第６のプログラムＰｇ−６を書き換え前の第３のプログラムＰｇ−３に復元してもよい。この時、プログラム制御部２６は、第３のプログラムＰｇ−３を書き換える前に、第３のプログラムＰｇ−３をプログラム記憶部２０等に一時的に記憶させておく。
【００９５】
［１−４．効果］
上述したように、プログラム記憶部２０は、互いに異なる第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３を記憶している。これにより、プログラム記憶部２０には、見かけ上、異なる３種類のプログラムが記憶されるようになる。
【００９６】
そのため、例えばハッキング等の不正な手段により、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の全てを解析するのが困難となり、セキュリティ対策を高めることができる。
【００９７】
（実施の形態２）
［２−１．制御装置の機能構成］
図８を参照しながら、実施の形態２に係る制御装置１６Ａの機能構成について説明する。図８は、実施の形態２に係る制御装置１６Ａの機能構成を示すブロック図である。
【００９８】
図８に示すように、本実施の形態では、制御装置１６Ａが一時記憶部３２を備える点で、上記実施の形態１と異なっている。一時記憶部３２は、サーバ装置１２（図１参照）から送信されてきた更新用プログラムを一時的に記憶するためのメモリである。
【００９９】
また、検証部２８Ａは、プログラム制御部２６Ａにより第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３のいずれかが書き換えられる前に、更新用プログラムを一時記憶部３２に一時的に記憶させた状態で、更新用プログラムの動作を検証する。
【０１００】
［２−２．第１〜第３のプログラムの書き換え処理］
次に、図９〜図１０Ｆを参照しながら、実施の形態２に係る制御装置１６Ａにおける第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換え処理について説明する。図９は、実施の形態２に係る制御装置１６Ａにおける第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換え処理の流れを示すフローチャートである。図１０Ａ及び図１０Ｂは、実施の形態２に係る制御装置１６Ａにおける第１のプログラムＰｇ−１の書き換え処理を説明するための概念図である。図１０Ｃ及び図１０Ｄは、実施の形態２に係る制御装置１６Ａにおける第２のプログラムＰｇ−２の書き換え処理を説明するための概念図である。図１０Ｅ及び図１０Ｆは、実施の形態２に係る制御装置１６Ａにおける第３のプログラムＰｇ−３の書き換え処理を説明するための概念図である。
【０１０１】
図９に示すように、通信部１８は、サーバ装置１２から送信されてきた更新用プログラムとして、第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第６のプログラムＰｇ−６を受信する（Ｓ３０１）。検証部２８Ａは、受信された第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第６のプログラムＰｇ−６を一時記憶部３２に一時的に記憶させる（Ｓ３０２）。
【０１０２】
図１０Ａの（ａ）及び図１０Ｂに示すように、検証部２８Ａは、第４のプログラムＰｇ−４、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３を同時に実行させ（Ｓ３０３）、第４のプログラムＰｇ−４の動作を検証する（Ｓ３０４）。この時、検証部２８Ａは、第４のプログラムＰｇ−４、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各々に対して同一の入力値Ａを入力する。なお、ステップＳ３０３では、検証部２８Ａは、第１のプログラムＰｇ−１については実行させない。
【０１０３】
図１０Ａの（ａ）に示すように、第４のプログラムＰｇ−４から出力された出力値Ｂが、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された２つの出力値Ｂと一致している場合には、検証部２８Ａは、検証結果ＯＫと判定する（Ｓ３０４で「ＯＫ」）。この場合、第４のプログラムＰｇ−４が正常に動作することを事前に検証できたため、図１０Ａの（ｂ）に示すように、プログラム制御部２６Ａは、第１のプログラムＰｇ−１を第４のプログラムＰｇ−４に書き換える（Ｓ３０５）。
【０１０４】
一方、図１０Ｂに示すように、第４のプログラムＰｇ−４から出力された出力値Ｂ’が、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された２つの出力値Ｂと一致していない場合には、検証部２８Ａは、検証結果ＮＧと判定する（Ｓ３０４で「ＮＧ」）。この場合、第４のプログラムＰｇ−４が正常に動作しないことを事前に検証できたため、プログラム制御部２６Ａは、第１のプログラムＰｇ−１の書き換えを実行しない。検証部２８Ａは、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、検証部２８Ａは、第４のプログラムＰｇ−４の動作の検証結果がＮＧである旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ３０６）。その後、検証部２８Ａは、第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第６のプログラムＰｇ−６を一時記憶部３２から削除し（Ｓ３１３）、処理を終了する。
【０１０５】
ステップＳ３０５に戻り、第１のプログラムＰｇ−１が第４のプログラムＰｇ−４に書き換えられた後、図１０Ｃの（ａ）及び図１０Ｄに示すように、検証部２８Ａは、第５のプログラムＰｇ−５、第４のプログラムＰｇ−４及び第３のプログラムＰｇ−３を同時に実行させ（Ｓ３０７）、第５のプログラムＰｇ−５の動作を検証する（Ｓ３０８）。この時、検証部２８Ａは、第５のプログラムＰｇ−５、第４のプログラムＰｇ−４及び第３のプログラムＰｇ−３の各々に対して同一の入力値Ａを入力する。なお、ステップＳ３０７では、検証部２８Ａは、第２のプログラムＰｇ−２については実行させない。
【０１０６】
図１０Ｃの（ａ）に示すように、第５のプログラムＰｇ−５から出力された出力値Ｂが、第４のプログラムＰｇ−４及び第３のプログラムＰｇ−３からそれぞれ出力された２つ 
の出力値Ｂと一致している場合には、検証部２８Ａは、検証結果ＯＫと判定する（Ｓ３０８で「ＯＫ」）。この場合、第５のプログラムＰｇ−５が正常に動作することを事前に検証できたため、図１０Ｃの（ｂ）に示すように、プログラム制御部２６Ａは、第２のプログラムＰｇ−２を第５のプログラムＰｇ−５に書き換える（Ｓ３０９）。
【０１０７】
一方、図１０Ｄに示すように、第５のプログラムＰｇ−５から出力された出力値Ｂ’が、第４のプログラムＰｇ−４及び第３のプログラムＰｇ−３からそれぞれ出力された２つの出力値Ｂと一致していない場合には、検証部２８Ａは、検証結果ＮＧと判定する（Ｓ３０８で「ＮＧ」）。この場合、第５のプログラムＰｇ−５が正常に動作しないことを事前に検証できたため、プログラム制御部２６Ａは、第２のプログラムＰｇ−２の書き換えを実行しない。検証部２８Ａは、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、検証部２８Ａは、第５のプログラムＰｇ−５の動作の検証結果がＮＧである旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ３０６）。その後、上述したステップＳ３１３に進む。
【０１０８】
ステップＳ３０９に戻り、第２のプログラムＰｇ−２が第５のプログラムＰｇ−５に書き換えられた後、図１０Ｅの（ａ）及び図１０Ｆに示すように、検証部２８Ａは、第６のプログラムＰｇ−６、第４のプログラムＰｇ−４及び第５のプログラムＰｇ−５を同時に実行させ（Ｓ３１０）、第６のプログラムＰｇ−６の動作を検証する（Ｓ３１１）。この時、検証部２８Ａは、第６のプログラムＰｇ−６、第４のプログラムＰｇ−４及び第５のプログラムＰｇ−５の各々に対して同一の入力値Ａを入力する。なお、ステップＳ３１０では、検証部２８Ａは、第３のプログラムＰｇ−３については実行させない。
【０１０９】
図１０Ｅの（ａ）に示すように、第６のプログラムＰｇ−６から出力された出力値Ｂが、第４のプログラムＰｇ−４及び第５のプログラムＰｇ−５からそれぞれ出力された２つの出力値Ｂと一致している場合には、検証部２８Ａは、検証結果ＯＫと判定する（Ｓ３１１で「ＯＫ」）。この場合、第６のプログラムＰｇ−６が正常に動作することを事前に検証できたため、図１０Ｅの（ｂ）に示すように、プログラム制御部２６Ａは、第３のプログラムＰｇ−３を第６のプログラムＰｇ−６に書き換える（Ｓ３１２）。その後、上述したステップＳ３１３に進む。
【０１１０】
一方、図１０Ｆに示すように、第６のプログラムＰｇ−６から出力された出力値Ｂ’が、第４のプログラムＰｇ−４及び第５のプログラムＰｇ−５からそれぞれ出力された２つの出力値Ｂと一致していない場合には、検証部２８Ａは、検証結果ＮＧと判定する（Ｓ３１１で「ＮＧ」）。この場合、第６のプログラムＰｇ−６が正常に動作しないことを事前に検証できたため、プログラム制御部２６Ａは、第３のプログラムＰｇ−３の書き換えを実行しない。検証部２８Ａは、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、検証部２８Ａは、第６のプログラムＰｇ−６の動作の検証結果がＮＧである旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ３０６）。その後、上述したステップＳ３１３に進む。
【０１１１】
［２−３．効果］
本実施の形態では、プログラム制御部２６Ａにより第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３のいずれかが書き換えられる前に、更新用プログラムの動作を事前に検証することができる。その結果、正常に動作しない更新用プログラムに基づいて、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換えが実行されるのを抑制することができる。
【０１１２】
（実施の形態３）
［３−１．制御装置の機能構成］ 
図１１を参照しながら、実施の形態３に係る制御装置１６Ｂの機能構成について説明する。図１１は、実施の形態３に係る制御装置１６Ｂの機能構成を示すブロック図である。
【０１１３】
図１１に示すように、本実施の形態では、制御装置１６Ｂが検証用記憶部３４を備える点で、上記実施の形態１と異なっている。検証用記憶部３４は、検証用入力値及び検証用出力値を記憶するためのメモリである。検証用入力値及び検証用出力値はそれぞれ、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換え結果を検証するための期待値としての入力値及び出力値である。
【０１１４】
また、検証部２８Ｂは、検証用記憶部３４に記憶された検証用入力値及び検証用出力値を用いて、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換え結果を検証する。
【０１１５】
［３−２．第１〜第３のプログラムの書き換え処理］
次に、図１２〜図１３Ｆを参照しながら、実施の形態３に係る制御装置１６Ｂにおける第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換え処理について説明する。図１２は、実施の形態３に係る制御装置１６Ｂにおける第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換え処理の流れを示すフローチャートである。図１３Ａ及び図１３Ｂは、実施の形態３に係る制御装置１６Ｂにおける第１のプログラムＰｇ−１の書き換え処理を説明するための概念図である。図１３Ｃ及び図１３Ｄは、実施の形態３に係る制御装置１６Ｂにおける第２のプログラムＰｇ−２の書き換え処理を説明するための概念図である。図１３Ｅ及び図１３Ｆは、実施の形態３に係る制御装置１６Ｂにおける第３のプログラムＰｇ−３の書き換え処理を説明するための概念図である。
【０１１６】
図１２に示すように、通信部１８は、サーバ装置１２（図１参照）から送信されてきた更新用プログラムとして、第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第６のプログラムＰｇ−６を受信する（Ｓ４０１）。
【０１１７】
プログラム制御部２６は、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３をこの順に書き換える。最初に、図１３Ａ及び図１３Ｂに示すように、プログラム制御部２６は、第１のプログラムＰｇ−１を第４のプログラムＰｇ−４に書き換える（Ｓ４０２）。検証部２８Ｂは、第４のプログラムＰｇ−４のみを実行させ（Ｓ４０３）、第４のプログラムＰｇ−４への書き換え結果を検証する（Ｓ４０４）。この時、検証部２８Ｂは、第４のプログラムＰｇ−４に対して、検証用記憶部３４に記憶された検証用入力値を入力する。
【０１１８】
図１３Ａの（ｂ）に示すように、第４のプログラムＰｇ−４から出力された出力値Ｂが、検証用記憶部３４に記憶された検証用出力値と一致している場合には、検証部２８Ｂは、検証結果ＯＫと判定する（Ｓ４０４で「ＯＫ」）。
【０１１９】
一方、図１３Ｂの（ｂ）に示すように、第４のプログラムＰｇ−４から出力された出力値Ｂが、検証用記憶部３４に記憶された検証用出力値と一致していない場合には、検証部２８Ｂは、検証結果ＮＧと判定する（Ｓ４０４で「ＮＧ」）。この場合、検証部２８Ｂは、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、検証部２８Ｂは、第４のプログラムＰｇ−４への書き換えの検証結果がＮＧである旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ４０５）。その後、プログラム制御部２６は、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の書き換えを実行することなく、処理を終了する。
【０１２０】
ステップＳ４０４に戻り、検証部２８Ｂが検証結果ＯＫと判定した場合には（Ｓ４０４で「ＯＫ」）、図１３Ｃ及び図１３Ｄに示すように、プログラム制御部２６は、第２のプログラムＰｇ−２を第５のプログラムＰｇ−５に書き換える（Ｓ４０６）。検証部２８Ｂは、第５のプログラムＰｇ−５のみを実行させ（Ｓ４０７）、第５のプログラムＰｇ−５への書き換え結果を検証する（Ｓ４０８）。この時、検証部２８Ｂは、第５のプログラムＰｇ−５に対して、検証用記憶部３４に記憶された検証用入力値を入力する。
【０１２１】
図１３Ｃの（ｂ）に示すように、第５のプログラムＰｇ−５から出力された出力値Ｂが、検証用記憶部３４に記憶された検証用出力値と一致している場合には、検証部２８Ｂは、検証結果ＯＫと判定する（Ｓ４０８で「ＯＫ」）。
【０１２２】
一方、図１３Ｄの（ｂ）に示すように、第５のプログラムＰｇ−５から出力された出力値Ｂが、検証用記憶部３４に記憶された検証用出力値と一致していない場合には、検証部２８Ｂは、検証結果ＮＧと判定する（Ｓ４０８で「ＮＧ」）。この場合、検証部２８Ｂは、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、検証部２８Ｂは、第５のプログラムＰｇ−５への書き換えの検証結果がＮＧである旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ４０５）。その後、プログラム制御部２６は、第３のプログラムＰｇ−３の書き換えを実行することなく、処理を終了する。
【０１２３】
ステップＳ４０８に戻り、検証部２８Ｂが検証結果ＯＫと判定した場合には（Ｓ４０８で「ＯＫ」）、図１３Ｅ及び図１３Ｆに示すように、プログラム制御部２６は、第３のプログラムＰｇ−３を第６のプログラムＰｇ−６に書き換える（Ｓ４０９）。検証部２８Ｂは、第６のプログラムＰｇ−６のみを実行させ（Ｓ４１０）、第６のプログラムＰｇ−６への書き換え結果を検証する（Ｓ４１１）。この時、検証部２８Ｂは、第６のプログラムＰｇ−６に対して、検証用記憶部３４に記憶された検証用入力値を入力する。
【０１２４】
図１３Ｅの（ｂ）に示すように、第６のプログラムＰｇ−６から出力された出力値Ｂが、検証用記憶部３４に記憶された検証用出力値と一致している場合には、検証部２８Ｂは、検証結果ＯＫと判定する（Ｓ４１１で「ＯＫ」）。
【０１２５】
一方、図１３Ｆの（ｂ）に示すように、第６のプログラムＰｇ−６から出力された出力値Ｂが、検証用記憶部３４に記憶された検証用出力値と一致していない場合には、検証部２８Ｂは、検証結果ＮＧと判定する（Ｓ４１１で「ＮＧ」）。この場合、検証部２８Ｂは、通知信号を生成し、生成した通知信号を通信部１８に出力する。すなわち、検証部２８Ｂは、第６のプログラムＰｇ−６への書き換えの検証結果がＮＧである旨を、通信部１８を介してサーバ装置１２に通知する（Ｓ４０５）。その後、処理を終了する。
【０１２６】
［３−３．効果］
本実施の形態では、検証部２８Ｂは、検証用記憶部３４に記憶された検証用入力値及び検証用出力値を用いて、プログラム制御部２６により書き換えられた第４のプログラムＰｇ−４、第５のプログラムＰｇ−５及び第６のプログラムＰｇ−６のいずれかのみを検証すればよいので、検証部２８Ｂの処理負荷を低減することができる。
【０１２７】
（実施の形態４）
図１４を参照しながら、実施の形態４に係る制御装置１６Ｃの機能構成について説明する。図１４は、実施の形態４に係る制御装置１６Ｃの機能構成を示すブロック図である。
【０１２８】
図１４に示すように、本実施の形態では、制御装置１６Ｃは制御値決定部５０を備える点で、上記実施の形態１と異なっている。実施の形態１と同様、本実施の形態においても、制御部３０が、制御値決定部５０を含めて、制御装置１６Ｃを統括的に制御する。制御値決定部５０は、プログラム記憶部２０ａ、２０ｂ、２０ｃと、プログラム実行部２２ａ、２２ｂ、２２ｃ（処理部の一例）と、決定部２４Ｃと、電源スイッチ４０ａ、４０ｂ、４０ｃとを含んで構成される。
【０１２９】
プログラム記憶部２０ａ、２０ｂ、２０ｃは、物理的に独立して設けられている。例えば、プログラム記憶部２０ａ、２０ｂ、２０ｃは、独立して設けられた物理メモリとして構成されてもよい。プログラム記憶部２０ａ、２０ｂ、２０ｃは、それぞれ、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２、第３のプログラムＰｇ−３を記憶している。
【０１３０】
プログラム実行部２２ａ、２２ｂ、２２ｃは、物理的に独立して設けられている。例えば、プログラム実行部２２ａ、２２ｂ、２２ｃは、独立して設けられたＭＰＵ（マイクロプロセッシングユニット）として構成されてもよい。プログラム実行部２２ａはプログラム記憶部２０ａから第１のプログラムＰｇ−１を読み出して実行し、プログラム実行部２２ｂはプログラム記憶部２０ｂから第２のプログラムＰｇ−２を読み出して実行し、プログラム実行部２２ｃはプログラム記憶部２０ｃから第３のプログラムＰｇ−３を読み出して実行する。
【０１３１】
プログラム実行部２２ａ、２２ｂ、２２ｃは、それぞれ、独立した電源ラインにより電源の供給を受ける。プログラム実行部２２ａに電源を供給する電源ラインには電源スイッチ４０ａが設けられており、プログラム実行部２２ｂに電源を供給する電源ラインには電源スイッチ４０ｂが設けられており、プログラム実行部２２ｃに電源を供給する電源ラインには電源スイッチ４０ｃが設けられている。
【０１３２】
決定部２４Ｃは、論理回路により構成される。論理回路とは、ＡＮＤ、ＯＲ、ＮＯＴ、ＸＯＲなどの基本となる論理演算の集合体で、ソフトウェアを用いない演算部である。決定部２４Ｃは、論理回路における論理演算を実行することにより制御値を決定する。実施の形態１においては、決定部２４がソフトウェアの機能として動作する例として説明したが、制御値の決定については、本実施の形態における論理回路として構成された決定部２４Ｃも同様の動作を行う。
【０１３３】
決定部２４がソフトウェアの機能として動作する場合、決定部２４の動作を制御するプログラム自体が外部からの攻撃を受けて書き換えられる等して決定部２４が外部の悪意者に乗っ取られ、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からの出力結果が正しかったとしても、決定部２４から出力される制御値が異常値となるような問題が発生する可能性がある。これに対し、決定部２４Ｃのようにハードウェアの論理回路として構成されることにより、決定部２４Ｃが外部の悪意者に乗っ取られるおそれがないため、そのような問題が発生することを防止できる。
【０１３４】
すなわち、決定部２４Ｃは、プログラム実行部２２ａ、２２ｂ、２２ｃのそれぞれにより実行された第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値に基づいて、ＡＤＡＳにおける車両の運転操作を制御するための制御値を決定する。具体的には、決定部２４Ｃは、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値のうち２以上の出力値（すなわち、過半数の出力値）が一致している場合に、一致している２以上の出力値により示される１つの値を制御値として決定する。
【０１３５】
また、決定部２４Ｃは、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値のうち、少なくとも１つの出力値が他の出力値と一致していない場合に、その旨をサーバ装置１２（図１参照）に通知するための通知信号を生成する。この時、決定部２４Ｃは、生成した通知信号を通信部１８に出力する。なお、本実施の形態における制御値を決定する処理の流れについては、実施の形態１において図４〜図５Ｃを用いて説明した内容と同様であるため、詳細な説明は省略する。
【０１３６】
本実施の形態における決定部２４Ｃは、電源スイッチ４０ａ、４０ｂ、４０ｃのオン／オフの切り替えを制御することができる。例えば、決定部２４Ｃは、電源スイッチ４０ａ、４０ｂ、４０ｃのそれぞれと独立して接続され、個別にスイッチのオン／オフを切り替え可能に構成されていてもよいし、あるいは電源スイッチ４０ａ、４０ｂ、４０ｃのオン／オフの切り替えを個別に制御するための電源回路が設けられており、その電源回路を介してスイッチのオン／オフを切り替え可能に構成されていてもよく、特に限定はされない。例えば、決定部２４Ｃが電源スイッチ４０ａ、４０ｂ、４０ｃに対して電源を遮断する制御信号を出力した場合、電源スイッチ４０ａ、４０ｂ、４０ｃはスイッチをオフの状態になり、プログラム実行部２２ａ、２２ｂ、２２ｃに電源が供給されなくなる。
【０１３７】
例えば、図５Ａに示すように、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値Ｂが全て一致する場合には、決定部２４Ｃは、一致した出力値Ｂを制御値として決定する。このときは、決定部２４Ｃは、電源スイッチ４０ａ、４０ｂ、４０ｃに対して電源を遮断する制御信号を出力しない。
【０１３８】
例えば、図５Ｂに示すように、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された２つの出力値Ｂのみが一致する場合には、決定部２４Ｃは、過半数で一致した出力値Ｂを制御値として決定する。このとき、決定部２４Ｃは、一致していない出力値が出力された第１のプログラムＰｇ−１を実行するプログラム実行部２２ａへの電源の供給を遮断するために、電源スイッチ４０ａに対して電源を遮断する制御信号を出力する。これにより、万一、例えばハッキング等の不正な手段により第１のプログラムＰｇ−１が書き換えられた場合であっても、一致している過半数の出力値Ｂを制御値として適切に決定することができる。
【０１３９】
一方で、書き換えられた可能性のある第１のプログラムＰｇ−１を実行するプログラム実行部２２ａへの電源の供給を停止することで、プログラム実行部２２ａは機能を停止する。これにより、書き換えられた可能性のあるプログラムの実行を防止することができるようになる。また、例えば、プログラム実行部が３つ（プログラムが３種類）しかないような場合は、１つのプログラム実行部が停止することにより、以降、多数決が成立しないため制御値は出力されなくなる。このため、仮に第１のプログラムＰｇ−１が書き換えられた可能性が検知された後、第２のプログラムＰｇ−２が時間差でさらに書き換えられたとしても、多数決による制御値が出力されなくなるため、運転者の意図しない車両の挙動が誘発されるのを一段と抑制することができる。
【０１４０】
例えば、図５Ｃに示すように、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値Ｂ、出力値Ｂ’及び出力値Ｂ’’が全て異なる場合には、決定部２４Ｃは、制御値の決定を保留する。このとき、決定部２４Ｃは、電源スイッチ４０ａ、４０ｂ、４０ｃの全てに対して電源を遮断する制御信号を出力する。これにより、書き換えられた可能性のあるプログラムの実行を確実に防止することができるようになる。
【０１４１】
（実施の形態５）
図１５を参照しながら、実施の形態５に係る制御装置１６Ｄの機能構成について説明する。図１５は、実施の形態５に係る制御装置１６Ｄの機能構成を示すブロック図である。
【０１４２】
図１５に示すように、本実施の形態では、実施の形態４と同様、制御装置１６Ｄは制御値決定部５０Ｄを備える。本実施の形態においても、制御部３０が、制御値決定部５０Ｄを含めて、御装装置１６Ｄを統括的に制御する。制御値決定部５０Ｄは、プログラム記憶部２０ａ、２０ｂ、２０ｃと、プログラム実行部２２ａ、２２ｂ、２２ｃと、決定部２４Ｄと、リセットスイッチ４１ａ、４１ｂ、４１ｃとを含んで構成される。
【０１４３】
プログラム記憶部２０ａ、２０ｂ、２０ｃ及びプログラム実行部２２ａ、２２ｂ、２２ｃについては、実施の形態４と同様の構成であり、説明を省略する。また、決定部２４Ｄは、実施の形態４の決定部２４Ｃと同様、論理回路により構成され、プログラム実行部２２ａ、２２ｂ、２２ｃのそれぞれにより実行された第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値に基づいて、ＡＤＡＳにおける車両の運転操作を制御するための制御値を決定する。なお、本実施の形態における制御値を決定する処理の流れについては、実施の形態４と同様であるため、詳細な説明は省略する。
【０１４４】
本実施の形態における決定部２４Ｄは、リセットスイッチ４１ａ、４１ｂ、４１ｃのオン／オフの切り替えを制御することができる。例えば、決定部２４Ｄは、リセットスイッチ４１ａ、４１ｂ、４１ｃのそれぞれと独立して接続され、個別にリセットのオン／オフを切り替え可能に構成されていてもよいし、あるいはリセットスイッチ４１ａ、４１ｂ、４１ｃのオン／オフの切り替えを個別に制御するためのリセット回路が設けられており、そのリセット回路を介してスイッチのオン／オフを切り替え可能に構成されていてもよく、特に限定はされない。例えば、決定部２４Ｄがリセットスイッチ４１ａ、４１ｂ、４１ｃに対してリセットを実行する制御信号を出力した場合、リセットスイッチ４１ａ、４１ｂ、４１ｃはスイッチをオンの状態になり、プログラム実行部２２ａ、２２ｂ、２２ｃがプログラムを実行する際に用いるワーキングメモリの情報がリセットされる。すなわち、リセットスイッチがオンになった場合、プログラム実行部２２ａ、２２ｂ、２２ｃのワーキングメモリ上の情報は一旦削除され、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３がそれぞれプログラム記憶部２０ａ、２０ｂ、２０ｃから再ロードされる。
【０１４５】
例えば、図５Ａに示すように、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値Ｂが全て一致する場合には決定部２４Ｄは、一致した出力値Ｂを制御値として決定する。このときは、決定部２４Ｄは、リセットスイッチ４１ａ、４１ｂ、４１ｃに対してリセットを実行する制御信号を出力しない。
【０１４６】
例えば、図５Ｂに示すように、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された２つの出力値Ｂのみが一致する場合には、決定部２４Ｄは、過半数で一致した出力値Ｂを制御値として決定する。このとき、決定部２４Ｄは、一致していない出力値が出力された第１のプログラムＰｇ−１を実行するプログラム実行部２２ａのワーキングメモリ上の情報をリセットするために、リセットスイッチ４１ａに対してリセットを実行する制御信号を出力する。これにより、万一、例えばハッキング等の不正な手段により第１のプログラムＰｇ−１が書き換えられた場合であっても、一致している過半数の出力値Ｂを制御値として適切に決定することができる。
【０１４７】
一方で、書き換えられた可能性のある第１のプログラムＰｇ−１を実行するプログラム実行部２２ａのワーキングメモリ上で書き換えられた可能性のある情報を一旦消去し、プログラム記憶部２０ａから第１のプログラムＰｇ−１を再ロードすることで、プログラム実行部２２ａは再び正しいプログラムを実行することができるようになる。これにより、外部からの攻撃によってワーキングメモリ上でプログラムが書き換えられてしまった場合、書き換えられた可能性のあるプログラムの実行を防止することができるようになる。また、一旦、ワーキングメモリ上でプログラムが書き換えられたとしても、ワーキングメモリ上の情報がリセットされて正しいプログラムが再び読み出されて正常な状態に戻るため、攻撃者は同時に複数のプログラム実行部を攻撃して、それらのワーキングメモリ上のプログラムを同時に書き換えない限り乗っ取ることができないため、運転者の意図しない車両の挙動が誘発されるのを一段と抑制することができる。
【０１４８】
例えば、図５Ｃに示すように、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値Ｂ、出力値Ｂ’及び出力値Ｂ’’が全て異なる場合には、決定部２４Ｄは、制御値の決定を保留する。このとき、決定部２４Ｄは、リセットスイッチ４１ａ、４１ｂ、４１ｃの全てに対してリセットを実行する制御信号を出力する。これにより、書き換えられた可能性のあるプログラムの実行を確実に防止することができるようになる。  
【０１４９】
（他の変形例）
以上、一つ又は複数の態様に係る制御装置及び制御方法について、上記各実施の形態に基づいて説明したが、本開示は、上記各実施の形態に限定されるものではない。本開示の趣旨を逸脱しない限り、当業者が思い付く各種変形を上記各実施の形態に施したものや、異なる実施の形態における構成要素を組み合わせて構築される形態も、一つ又は複数の態様の範囲内に含まれてもよい。
【０１５０】
上記各実施の形態において、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３のソースコード（プログラムの処理手順）は、ハンドコードに限らず、処理手順を表現した設計モデルに基づいて自動生成されてもよい。なお、ソースコードの自動生成は、１つの設計モデルから異なる複数のソースコードを生成してもよい。また、元のソースコード自体は同じで難読化の仕方が異ならせてもよい。また、異なる複数のソースコードを生成した上で、さらに難読化の仕方を異ならせてもよい。なお、ソースコードの自動生成の手法については、例えばＡＩ（Ａｒｔｉｆｉｃｉａｌ  Ｉｎｔｅｌｉｇｅｎｃｅ）学習モデルを用いるなどしてもよく、特に限定はされない。また、ソースコードの自動生成は、例えばサーバ装置１２で行われてもよい。そして、ソースコードに対応するプログラムがネットワーク１４を通じて配信され、通信ＥＣＵ４を介してプログラム記憶部２０に実装されてもよい。なお、ソースコードの自動生成はサーバ１２以外で行われてもよく、特に限定はされない。ソースコードを自動生成することにより、複数のプログラムを開発するコストを低減することができる。
【０１５１】
上記各実施の形態において、決定部２４，２４Ｃ，２４Ｄは、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３からそれぞれ出力された３つの出力値のうち、少なくとも１つの出力値が他の出力値と一致していない場合に、退避動作を指示する制御信号生成し、通信システム２に含まれる各種のＥＣＵ等に対して退避動作を行わせるようにしてもよい。例えば、通信ＥＣＵ４の通信機能をオフにすれば、通信系を介した外部からのさらなる攻撃を回避することができる。また、例えば、自動車の自動運転プログラムが動作中の場合には、動力の伝達を切断して緩い減速状態になるように制御すると共に、ドライバーに警告する機能を備えていてもよい。これにより、より安全性を高めることができる。
【０１５２】
上記各実施の形態では、制御装置１６，１６Ａ，１６Ｂ，１６Ｃ，１６Ｄを車両の自動運転システムに搭載されたＡＤＡＳＥＣＵ８ａに適用したが、これに限定されず、例えば任意のシステムに搭載されたＥＣＵ等に適用してもよい。
【０１５３】
上記各実施の形態では、本開示に係る制御装置１６，１６Ａ，１６Ｂ，１６Ｃ，１６Ｄの適用例として、車両（自動車等）に搭載される車載ネットワークにおけるセキュリティ対策への適用について説明したが、本開示に係る制御装置１６，１６Ａ，１６Ｂ，１６Ｃ，１６Ｄの適用範囲はこれに限定されない。本開示に係る制御装置１６，１６Ａ，１６Ｂ，１６Ｃ，１６Ｄは、自動車等の車両に限定されず、例えば、建機、農機、船舶、鉄道又は飛行機等の任意のモビリティに適用してもよい。
【０１５４】
上記各実施の形態では、プログラム記憶部２０に互いに異なる３つのプログラムを記憶させたが、これに限定されず、互いに異なる４以上のプログラムを記憶させてもよい。
【０１５５】
上記各実施の形態では、第１のプログラムＰｇ−１の処理手順Ａ、第２のプログラムＰｇ−２の処理手順Ｂ及び第３のプログラムＰｇ−３の処理手順Ｃが互いに異なり、且つ、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３がそれぞれ互いに異なる手法Ａ、手法Ｂ及び手法Ｃで難読化されているが、これに限定されない。例えば、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各処理手順を同一にし、且つ、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各難読化の手法を互いに異ならせてもよい。あるいは、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各処理手順を互いに異ならせ、且つ、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各難読化の手法を同一にしてもよい。あるいは、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各々を難読化することなく、第１のプログラムＰｇ−１、第２のプログラムＰｇ−２及び第３のプログラムＰｇ−３の各処理手順を互いに異ならせてもよい。
【０１５６】
なお、上記実施の形態において、各構成要素は、専用のハードウェアで構成されるか、各構成要素に適したソフトウェアプログラムを実行することによって実現されてもよい。各構成要素は、ＣＰＵ又はプロセッサ等のプログラム実行部が、ハードディスク又は半導体メモリなどの記録媒体に記録されたソフトウェアプログラムを読み出して実行することによって実現されてもよい。
【０１５７】
また、上記実施の形態に係る制御装置の機能の一部又は全てを、ＣＰＵ等のプロセッサがプログラムを実行することにより実現してもよい。
【０１５８】
上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能なＩＣカード又は単体のモジュールから構成されているとしても良い。前記ＩＣカード又は前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭ等から構成されるコンピュータシステムである。前記ＩＣカード又は前記モジュールは、上記の超多機能ＬＳＩを含むとしても良い。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカード又は前記モジュールは、その機能を達成する。このＩＣカード又はこのモジュールは、耐タンパ性を有するとしても良い。
【０１５９】
本開示は、上記に示す方法であるとしても良い。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしても良いし、前記コンピュータプログラムからなるデジタル信号であるとしても良い。また、本開示は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えばフレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ（登録商標）  Ｄｉｓｃ）、半導体メモリ等に記録したものとしても良い。また、これらの記録媒体に記録されている前記デジタル信号であるとしても良い。また、本開示は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしても良い。また、本開示は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしても良い。また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしても良い。
【産業上の利用可能性】
【０１６０】
本開示に係る制御装置は、例えば自動運転システムに搭載されたＡＤＡＳＥＣＵ等に有用である。
【符号の説明】
【０１６１】
２  通信システム
４  通信ＥＣＵ
６  ゲートウェイＥＣＵ
８  ＥＣＵ
８ａ  ＡＤＡＳＥＣＵ
１０  ＣＡＮバス
１２  サーバ装置
１４  ネットワーク
１６，１６Ａ，１６Ｂ，１６Ｃ，１６Ｄ  制御装置
１８  通信部
２０，２０ａ，２０ｂ，２０ｃ  プログラム記憶部
２２，２２ａ，２２ｂ，２２ｃ  プログラム実行部
２４，２４Ｃ，２４Ｄ  決定部
２６，２６Ａ  プログラム制御部
２８，２８Ａ，２８Ｂ  検証部
３０  制御部
３２  一時記憶部
３４  検証用記憶部
４０ａ，４０ｂ，４０ｃ  電源スイッチ
４１ａ，４１ｂ，４１ｃ  リセットスイッチ
５０，５０Ｄ  制御値決定部
Ｐｇ−１  第１のプログラム
Ｐｇ−２  第２のプログラム
Ｐｇ−３  第３のプログラム
Ｐｇ−４  第４のプログラム
Ｐｇ−５  第５のプログラム
Ｐｇ−６  第６のプログラム 
【図１】
2020064606.tif 000003
【図２】
2020064606.tif 000004
【図３】
2020064606.tif 000005
【図４】
2020064606.tif 000006
【図５Ａ】
2020064606.tif 000007
【図５Ｂ】
2020064606.tif 000008
【図５Ｃ】
2020064606.tif 000009
【図６】
2020064606.tif 000010
【図７Ａ】
2020064606.tif 000011
【図７Ｂ】
2020064606.tif 000012
【図７Ｃ】
2020064606.tif 000013
【図７Ｄ】
2020064606.tif 000014
【図７Ｅ】
2020064606.tif 000015
【図７Ｆ】
2020064606.tif 000016
【図８】
2020064606.tif 000017
【図９】
2020064606.tif 000018
【図１０Ａ】
2020064606.tif 000019
【図１０Ｂ】
2020064606.tif 000020
【図１０Ｃ】
2020064606.tif 000021
【図１０Ｄ】
2020064606.tif 000022
【図１０Ｅ】
2020064606.tif 000023
【図１０Ｆ】
2020064606.tif 000024
【図１１】
2020064606.tif 000025
【図１２】
2020064606.tif 000026
【図１３Ａ】
2020064606.tif 000027
【図１３Ｂ】
2020064606.tif 000028
【図１３Ｃ】
2020064606.tif 000029
【図１３Ｄ】
2020064606.tif 000030
【図１３Ｅ】
2020064606.tif 000031
【図１３Ｆ】
2020064606.tif 000032
【図１４】
2020064606.tif 000033
【図１５】
2020064606.tif 000034