以下、本願に係る車両用制御装置の実施の形態について、図面を参照して説明する。
1.実施の形態1
図1は、実施の形態1に係る、車両用制御装置201と車両101の内外の他の制御装置との接続を示す全体構成図である。車両101は、車両用制御装置201、202、203を備えている。車両101の搭載する車両用制御装置201、202、203は有線通信501で接続されている。車両101の外部とは、車両用制御装置202を介して、無線通信502で接続されている。他の車両102およびサーバ1001と無線通信502で接続されている。このサーバ1001には、例えば車両メーカ、制御装置のサプライヤなどが設けるサーバが用いられる。そのほか車両101に搭載された車両用制御装置201、202、203は、車両101と同様の車両用制御装置を備える他の車両102の車両用制御装置とも無線通信502を介して接続される。このほか、有線通信501または無線通信502を介して、車両内の制御装置を診断する車両外の診断装置とも接続可能である(不図示)。車両102にも、車両101と同様の構成要素、または一部の構成要素を有する車両用制御装置が搭載されている。また、車外との無線通信502を行う車両用制御装置202は、主制御部を有しない、交換機であってもよい。
<車両用制御装置>
図2は、実施の形態1に係る車両用制御装置201のハードウェア構成図である。本実施の形態では、車両用制御装置201は、エンジン制御、変速機制御、ステアリング制御、ブレーキ制御、オーディオ制御、ビデオ制御、衝突予防制御、車間距離制御、ヘッドライト制御、ドア制御、パワーウィンドウ制御、無線キーロック制御、などの車載機器を制御する制御装置である。車両用制御装置201の各機能は、車両用制御装置201が備えた処理回路により実現される。具体的には、車両用制御装置201は、図2に示すように、処理回路として、CPU(Central Processing Unit)等の演算処理装置90(コンピュータ)、演算処理装置90とデータのやり取りをする記憶装置91、演算処理装置90に外部の信号を入力する入力回路92、及び演算処理装置90から外部に信号を出力する出力回路93等を備えている。
演算処理装置90として、ASIC(Application Specific Integrated Circuit)、IC(Integrated Circuit)、DSP(Digital Signal Processor)、FPGA(Field Programmable Gate Array)、各種の論理回路、及び各種の信号処理回路等が備えられてもよい。また、演算処理装置90として、同じ種類のものまたは異なる種類のものが複数備えられ、各処理が分担して実行されてもよい。記憶装置91として、演算処理装置90からデータを読み出し及び書き込みが可能に構成されたRAM(Random Access Memory)、演算処理装置90からデータを読み出し可能に構成されたROM(Read Only Memory)、フラッシュメモリ等が備えられている。入力回路92は、各種のセンサ及びスイッチが接続され、これらセンサ及びスイッチの出力信号を演算処理装置90に入力するA/D変換器等を備えている。出力回路93は、電気負荷が接続され、これら電気負荷に演算処理装置90からの制御信号を変換して出力する駆動回路等を備えている。
車両用制御装置201が備える各機能は、演算処理装置90が、ROM等の記憶装置91に記憶されたソフトウェア(プログラム)を実行し、記憶装置91、入力回路92、及び出力回路93等の制御装置3の他のハードウェアと協働することにより実現される。なお、制御装置3が用いる閾値、判定値等の設定データは、ソフトウェア(プログラム)の一部として、ROM等の記憶装置91に記憶されている。
図1の車両用制御装置201の構成要素の機能について説明する。図1の車両用制御装置201の内部に記載された401から409で示された各機能は、それぞれソフトウェアのモジュールで構成されるものであってもよいが、ソフトウェアとハードウェアの組み合わせによって構成されるものであってもよい。
実施の形態1に係る車両用制御装置201は、車載機器の制御を行う主制御部401と、主制御部401の入出力の監視処理を実行する第一の保護制御部402と、第一の保護制御部402の健全性の検証処理を実行する第二の保護制御部406と、第二の保護制御部406が検証処理を実行するタイミングを指示する確認部405を備えた車両用制御装置201であって、確認部405は車両用制御装置201の起動後の作動状態に応じて検証処理を実行するタイミングを決定するものである。以下、個別に各機能について説明する。
<主制御部>
主制御部401は、車両101の車載機器を操作する機能を果たす。例示的には、車両の走る・曲がる・止まるに関わる機能である、エンジン制御、変速機制御、ステアリング制御、ブレーキ制御などの機能、ユーザに車内エンターテインメントを提供するオーディオ制御、ビデオ制御などの機能、車両101がより安全に走行するための衝突予防制御、車間距離制御などの機能、車両101のライト、ドア、窓と物理的な鍵を操作するヘッドライト制御、ドア制御、パワーウィンドウ制御、無線キーロック制御などの機能の少なくともひとつを実施する。車両用制御装置201、202、203は、単一の主制御部または複数の主制御部を有する。また、車両用制御装置202は、無線通信502の送受信制御の機能を有するが、これを車両用制御装置202の主制御部の機能としてもよい。
なお、車両101の有する機能は、1つの車両用制御装置201が備える主制御部401のみで実現されるもの以外に、複数の車両用制御装置を用いて実現されるものも存在する。たとえば、車両用制御装置201、202、203の主制御部がそれぞれ、外部情報取得機能、状況算出機能、ステアリング制御機能を果たす場合に、車両101の車線維持制御を実施する機能は、車両101の外部の情報を取得する車両用制御装置202、取得した情報を分析して現在状況と予測状況と目標状況を算出する車両用制御装置203、算出した目標状況に基づきステアリングの操作を行う車両用制御装置201の3つの車両用制御装置で実現される。
<第一の保護制御部>
第一の保護制御部402は、主制御部401の入出力の監視処理を実施する。監視処理は、主制御部401の入力が異常であるか否かを判定する処理、主制御部401の処理が異常か否かを判定する処理、主制御部401の出力が異常であるか否かを判定する処理の全部または一部からなる。
主制御部401の入力が、予想できる範囲外であれば、不正な入力がされていると判断でき、その場合の主制御部401の出力は信用できないとして退けるべきである。主制御部401の入力に対して、出力が妥当でないと判断できる場合、主制御部401の処理が異常であると判断できる。例えば、出力の最小許容値と最大許容値の範囲内であっても、主制御部401の処理が車載機器を制御目標値から外れる方向に制御している場合がこれに相当する。また、主制御部401の出力が、出力の最小許容値と最大許容値の範囲外である場合、不正出力データとして主制御部401の異常が判断できる。
よって、第一の保護制御部402の監視処理を実行することによって、主制御部401の入出力が監視され、入出力に異常があれば、主制御部の異常を判定できる。
さらに、主制御部401が不正な値を出力しようとすると、車両101の挙動とユーザへ悪影響を与えないようにする処理を行ってもよい。具体的には、主制御部401の出力範囲を制限し、縮退運転をさせる。これらはISO 26262のSafety Mechanismの要求を満足するために設定されてもよい。
<呼び出しテーブル>
呼び出しテーブル403は、第一の保護制御部402で実施される監視処理と、その他の処理の実施順序を規定するテーブルである。第一の保護制御部402で実施する監視処理は、所定の事前処理の後に呼ばれることが呼び出しテーブル403によって規定されている。呼び出しテーブル403は、車両用制御装置201内部の記憶装置91に登録されているものであり、たとえばワンチップマイコンが内蔵するフラッシュメモリ、外付けのEEPROMなどで実現される。
呼び出しテーブル403に登録される事前処理は1つとは限らず、第一の保護制御部402で実施する監視処理は複数の事前処理から呼ばれる構造となっていてもよい。第一の保護制御部402で実施する監視処理が複数の処理で構成されていてもよい。なお、第一の保護制御部402で実施する監視処理あるいは事前処理が複数の処理となった場合は、第一の保護制御部402で実施する監視処理が実行されるまでの事前処理を構成する複数の処理の実行順序あるいは回数についても、呼び出しテーブルに規定していることが望ましい。
呼び出しテーブル403で規定される内容は、呼び出して実行される処理の順序であるが、処理が呼び出される階層を規定することとしてもよい。すなわち、実行される処理と、その処理の中で呼び出される処理を規定することで、呼び出し処理とその呼び出し元の処理を規定することとしてもよい。例えば、第一の保護制御部402で実施する監視処理は、特定の上位処理の中で呼び出されることが、呼び出しテーブル403で規定されていることとしてもよい。
呼び出しテーブル403で、第一の保護制御部402で実施する監視処理の順序、または呼び出し元が規定されるので、正規の監視処理については、必ず所定の事前処理のあと実行される、または所定の上位処理の中で呼び出されることとなる。監視処理の実行順序が所定の事前処理の後ではない、または呼び出し元の処理が所定の上位処理でない場合は、正規の手順ではない不正な監視処理がなされていると判断することができる。例えば、セキュリティ攻撃により、第一の保護制御部402が不正な呼び出し順序、あるいは不正な呼び出し元により呼び出されることが考えられ、この場合異常と判定する。
以上のように、呼び出しテーブル403で規定している、処理の順序または呼び出し処理とその呼び出し元と、実際の第一の保護制御部402で実施する監視処理の順序、または呼び出し元を比較するだけで、監視処理の健全性の検証をするので、複雑な処理を伴わず効果的な検証ができる。
また、呼び出しテーブル403は信頼される暗号技術で保護されていて、データが完全であること、呼出時に確実に参照されていること、特定範囲外へ情報漏洩しないようにすること、といったセキュリティが確保されていてもよい。これらの保護に用いられる暗号鍵は車両用制御装置201、車両101内の他の車両用制御装置、サーバ1001のいずれかで保管されることが望ましい。
<計時部>
計時部404は、第一の保護制御部402の監視処理の実行時間を計測するものであり、監視処理の実行開始から実行終了までの時間を計測する。第一の保護制御部402の監視処理が複数の処理で構成されている場合は、最初の処理の実行開始から最後の処理の実行終了までの時間を計測する。第一の保護制御部402の監視処理の実行が、他の処理の空き時間を利用して細切れで行われている場合は、実際に監視処理が実行されている時間を積算して、実行時間の計測値としてもよい。
第一の保護制御部402の監視処理の実行時間の範囲をあらかじめ確認しておくことによって、監視処理の実行時間が所定範囲から外れている時、不正な監視処理が実行されていると判断することができる。例えば、セキュリティ攻撃により第一の保護制御部402の処理が変更されていたり、第一の保護制御部402の処理全てを実行することができなかったりする場合には、予め設計した時間通りに第一の保護制御部402の処理が行われないため、異常であると判断する。
以上のように、第一の保護制御部402の監視処理の実行時間を計測し、所定の範囲内にあるか否かで監視処理の健全性を検証するので、複雑な処理を伴わず効果的な検証ができる。
<第二の保護制御部>
第二の保護制御部406は、第一の保護制御部402の健全性の検証処理を実施する。
具体的には、第二の保護制御部は、所定の検証用データを入力し、第一の保護制御部402の監視処理を実行させる。第一の保護制御部402の監視処理の実行後の出力が妥当かどうかを確認して、第一の保護制御部402の健全性を検証する。第二の保護制御部406から第一の保護制御部402の監視処理を呼び出すことを呼び出しテーブル403に規定しておく。
第一の保護制御部402がソフトウェアモジュールのみによって構成されている場合は、検証用の入出力データおよび、第一の保護制御部402の監視処理の実行後の出力データは、主制御部の車載機器の制御用データとして用いられないよう、データを切り分ける。第二の保護制御部406から第一の保護制御部402の監視処理を呼び出して実行させるときの入出力データと、監視処理を実行した結果である出力データは、健全性の検証にのみ用いる。健全性の検証に効果が大きい検証用の入出力データを準備できるので意義がある。
第一の保護制御部402がハードウェアを含んで構成されている場合は、検証用の入力および、第一の保護制御部402の監視処理の実行後の出力が、主制御部の車載機器の制御に影響を与えないように切り離す。第一の保護制御部402の入出力端子と、主制御部の車載機器の制御用入出力端子を、リレー回路等により物理的に切り離して、健全性の検証を行う。第一の保護制御部402がハードウェアを含んで構成されている場合は、以下の入力データ、出力データ、検証用データは、入力信号、出力信号、検証用信号と読み替えることとする。
第一の保護制御部402の健全性の検証処理のために入力する検証用データは、第一の保護制御部402が主制御部401の入出力が異常であると判断すべきデータと、異常がないと判断すべきデータの双方を準備して、監視処理の健全性の検証に用いることが望ましい。また、監視処理のうち、主制御部401の入力値が異常であるか否かを判定する処理、主制御部401の処理が異常か否かを判定する処理、主制御部401の出力が異常であるか否かを判定する処理について、それぞれについて可能な範囲で、異常がある場合と異常がない場合の入力データを準備して検証を実施することが望ましい。
<通信部>
通信部407は、車両用制御装置201が、車両101に搭載される他の車両用制御装置202、203と有線通信501を介してデータを送受信する機能であり、例えば各種の自動車用LAN、車内通信プロトコルを用いることができる。さらに、車両用制御装置202を介して、車外の通信網601とも無線通信502で通信することができるものである。無線通信として、携帯電話用の電波網、衛星通信回線、無線LAN回線を利用してもよい。
第二の保護制御部406が、第一の保護制御部402の健全性の検証処理を実行した結果、健全性が否定的と判断した場合、通信部407を介して判断結果を他の車両用制御装置202、203に伝達する。同一車輛101内の他の車両用制御装置202、203に第一の保護制御部402の非健全性を伝えることで、車両用制御装置201の入出力についての信頼性への警告ができ、車両用制御装置201がセキュリティ攻撃を受けた場合は、他の車両用制御装置202、203も、セキュリティ攻撃の影響を受けている可能性があることを伝達できるからである。また、車両用制御装置202を介して無線通信502によって車外のサーバ1001、他の車両102、診断装置にも、判断結果を伝えることができる。社外のサーバ1001は、他の車両についても第一の保護制御部402の健全性の検証の必要性を考慮することができ、第一の保護制御部402のプログラムの更新に関しても与える影響を考慮することができる。他の車両102についても、セキュリティ攻撃の可能性に備えることができる。また、診断装置にて自己診断結果を読み出し、車両用制御装置201の修理の必要性を確認できる。
<攻撃検知部>
攻撃検知部408は、車両101へのセキュリティ攻撃を検知、あるいは推測する処理を実施する。通信部407が、予め定められた通信データ以外のデータで主制御部に直接影響があるデータを受信した場合、予め定められたタイミングで通信データを受信しなかった場合、予め定められたタイミング以外で通信データを受信した場合、予め定められた異常な受信データを受信した場合、暗号技術を施したデータを正しく処理できなかった場合、などにセキュリティ攻撃を受けたと判断し、攻撃検知部408はセキュリティ攻撃の検知を出力する。そのほか、車両用制御装置201が備えるべき機能以外の動作を実行したことを確認した場合、車両101の走行状態等から想定される車両用制御装置201の処理を外れる処理が実行されていることを確認した場合に、セキュリティ攻撃を受けたと判断し、攻撃検知部408はセキュリティ攻撃の検知を出力する。
セキュリティ攻撃の推測としては、例えば主制御部401には直接影響がないが、通信部407が想定外の通信データを受信した場合、車両用制御装置201そのものとそれ以外の車両用制御装置202、203、あるいは車両102などの他の車両で検出した不審な通信データまたは制御状態を、車両用制御装置201が把握した場合、セキュリティ攻撃の兆候があるとして、攻撃検知部408はセキュリティ攻撃の推測を出力する。第一の保護制御部402が検出しなくとも、複数の情報を用いて想定される状況と現状発生している事象とが整合しない場合、例えば車両状態、乗員状態、周辺環境から判断して起こりえない事象が車両101の構成要素に発生した場合もセキュリティ攻撃の兆候があるとして、攻撃検知部408はセキュリティ攻撃の推測を出力する。攻撃検知部408がセキュリティ攻撃を検知または推測した場合、速やかに、第一の保護制御部402の健全性の検証処理を実行することが望ましい。セキュリティ攻撃の推測は、広義のセキュリティ攻撃ととらえて、セキュリティ攻撃の対策を実施することができる。しかし、セキュリティ攻撃対策の負荷が増えすぎる弊害を考慮して、セキュリティ攻撃の推測については対策の実施を省略することもできる。
<確認部>
確認部405は、第二の保護制御部406に対し、第一の保護制御部402の健全性の検証処理を行うタイミングを指示する。そのタイミングは、主制御部401が稼働中に第一の保護制御部402を利用することがないタイミングであり、例えば車両101の電源オフ直前、スリープ機能により車両用制御装置201がスリープする直前に、第二の保護制御部406に対し、第一の保護制御部402の健全性の検証処理を行うよう指示する。
車両101の電源オフ直前であれば、主制御部401が車載機器を緊急に操作しなければならない可能性が低く、主制御部401の稼働を妨げることなく、第一の保護制御部402の健全性の検証処理を行うことができるからである。スリープ機能により車両用制御装置201がスリープする直前についても、同様であり、主制御部401の稼働を妨げることなく、第一の保護制御部402の健全性の検証処理を行うことができる。
また、攻撃検知部408がセキュリティ攻撃を検知あるいは推測した時点に、確認部405は、第二の保護制御部406に対し、第一の保護制御部402の健全性の検証処理を行う指示を出すこともできる。セキュリティ攻撃の検知に対し、第一の保護制御部402の健全性の検証が優先的に必要となり、即応性が求められるからである。
このほかに、確認部405は、主制御部401の稼働を阻害しない範囲で、例えば所定時間ごとに、または、停車、エンジンストップなどのイベントごとに、第二の保護制御部406に対し、第一の保護制御部402の健全性の検証処理を行う指示をすることとしてもよい。その場合、主制御部401の処理が実行され、第一の保護制御部402の処理が実行された直後に限定して、第一の保護制御部402の健全性の検証処理を行う指示をすることとしてもよい。直近の主制御部401の処理の実施によって、車載機器が制御され、主制御部401の入出力の監視処理が実行されて安全性が確認された直後であれば、次回の車載機器の操作が変更されるまで、時間的余裕があると考えられるからである。
以上のように、確認部405が車両用制御装置201の起動後の作動状態に応じて、第一の保護制御部402の健全性の検証処理を行うタイミングを決定し指示するので、適正なタイミングで検証処理を実行することができる。
<管理部>
車両用制御装置201の管理部409は、プログラム更新依頼の通知を受けて、車両用制御装置201の処理を更新する機能を備える。プログラム更新依頼の通知は、車両用制御装置201の内部、または外部から送信される。管理部409は、少なくとも第一の保護制御部402の処理が記載されたプログラムを更新して最新化する。この時、管理部409は、第一の保護制御部402の処理を記述した現在のプログラムおよびそれ以前に格納されていたプログラムを保持している。
攻撃検知部408がセキュリティ攻撃を検知あるいは推測した場合、第一の保護制御部402の処理がセキュリティ攻撃によって改変されている可能性を考慮し、管理部409は第一の保護制御部402の処理を、以前に格納されていたプログラムに書き換える。ひとつ前のバージョンのプログラムに書き戻すことで、使用実績のある信頼性の高いプログラムを使用できるからである。この時、管理部409が書き戻すプログラムは、前回使用していたプログラムではなく、車両用制御装置201が製造時に書き込まれていた初期プログラムに書き戻してもよい。セキュリティ攻撃を、より以前から受けていて、前回使用していたプログラムも改変がされている恐れがあり、この可能性を払拭できるからである。
また、書き換えるプログラムを、セキュリティ攻撃を受けたときのために準備された、セキュリティ攻撃対応プログラムとしてもよい。セキュリティ攻撃によって、データ等が改変された場合でも、より安全側に処理がされるように作成されたプログラムを準備することができるからである。
第一の保護制御部の健全性の検証処理を実行した結果、健全性が否定的と判断された場合、第一の保護制御部402の処理が改変されている可能性を考慮し、管理部409は第一の保護制御部402の処理を、以前に格納されていたプログラムに書き換える。ひとつ前のバージョンのプログラムに書き戻すことで、使用実績のある信頼性の高いプログラムを使用できるからである。この時、管理部409が書き戻すプログラムは、前回使用していたプログラムではなく、車両用制御装置201が製造時に書き込まれていた初期プログラムに書き戻してもよい。より以前からプログラムの改変が行われていて、前回使用していたプログラムも改変がされている恐れがあり、この可能性を払拭できるからである。
また、書き換えるプログラムを、異常対応に準備された、異常対応プログラムとしてもよい。プログラムの異常があった場合でも、より安全側に処理がされるように作成されたプログラムを準備することができるからである。
図3、4、5、6、7を参照して、車両用制御装置の制御手順についてフローチャートに基づいて説明する。図3は、実施の形態1に係る、主制御部401の処理のフローチャートである。図4は、実施の形態1に係る、第一の保護制御部402の処理のフローチャートである。図5は、実施の形態1に係る、第二の保護制御部406の処理の第一のフローチャートである。図6は、実施の形態1に係る、第二の保護制御部406の処理の第二のフローチャートであり、図5の第一のフローチャートの続きである。図7は、実施の形態1に係る、異常処理のフローチャートである。
<主制御部の処理の流れ>
図3にて、車両用制御装置201の主制御部401の処理が実行される流れを説明する。図3の処理は、所定時間ごと(例えば10msごと)に実行され、車載機器が操作される。実行タイミングは所定時間ごとではなく、クランク角信号、車輪回転信号、トルクセンサ信号などの信号をトリガとして処理が開始されることにしてもよい。
ステップS301で開始された処理は、主制御部演算処理ステップS302にて、主制御部が処理すべき入力データを処理して車載機器を駆動するための出力データを算出するステップである。入力データ、出力データともに所定のレジスタに設定され、監視処理の準備がされる。出力データはこの段階では車載機器の操作に反映されない。次に、ステップS400で、第一の保護制御部402の監視処理が呼び出されて実行される。図3では、ステップS400が呼び出される前の処理がステップS302であり、呼び出しテーブル403に実行順序が記載されている。第一の保護制御部402の監視処理ステップS400で、主制御部401の入出力が監視され、異常の有無が判断され、異常時は縮退運転処理によって出力が制限される。次のステップの主制御部車載機器操作ステップS304にて、出力データが車載機器の操作に反映される。次のステップS305にて主制御部401の処理が終了する。このフローにより、主制御部401の処理が、第一の保護制御部による監視付きで実行され、セーフティ対処がなされている。
<第一の保護制御部の処理の流れ>
図4は、図3で呼び出される処理である、第一の保護制御部402の監視処理ステップS400の処理内容を展開したフローチャートである。ステップS401で開始された処理は、次に入力チェックステップS402で、主制御部401の入力値をチェックする。ステップS403で主制御部401の入力値が、予想できる範囲外かどうかを判定する。範囲内の場合はステップS404で入力異常フラグをクリアする。範囲外の場合は、不正な入力がされていると判断でき、ステップS405で入力異常フラグをセットする。
ステップS404、ステップS405の後、ステップS406で主制御部401の処理内容をチェックする。主制御部401の入力情報に対して、出力情報が妥当でないと判断できる場合、主制御部401の処理が異常であると判断できる。例えば、出力の最小許容値と最大許容値の範囲内であっても、主制御部401の処理が車載機器を制御目標値から外れる方向に制御している場合、または、安定性を失う方向に制御する場合がこれに相当する。ステップS407で処理が異常でないと判断した場合は、ステップS408で処理異常フラグをクリアする。ステップS407で処理が異常と判断した場合は、ステップS409で処理異常フラグをセットする。
ステップS408、ステップS409の後、ステップS410で主制御部401の出力をチェックする。主制御部401の出力が、出力の最小許容値と最大許容値の範囲外である場合、不正出力として主制御部401の異常が判断できる。ステップS411で出力が異常かどうか判断する。ステップS411で主制御部401の出力が異常でないと判断した場合は、ステップS412で出力異常フラグをクリアする。ステップS411で主制御部401の出力が異常と判断した場合は、ステップS413で出力異常フラグをセットする。
ステップS412、ステップS413の後、ステップS414で入力異常フラグ、処理異常フラグ、出力異常フラグのいずれかがセットされているかどうかをチェックする。いずれのフラグもセットされていなければ、ステップS416で第一の保護制御部402の監視処理を終了する。いずれかのフラグがセットされている場合は、ステップS415で縮退運転制御を実施し、縮退運転の場合の縮退運転テーブルによって、入力データに応じた出力データを算出し、出力データとして、処理を終了する。ここで、異常が発生している場合、縮退運転テーブルによって出力データを算出したが、出力データを所定範囲に限定することで対処してもよい。車載機器を制御するために、より安全側の出力データを得ることができれば問題ない。
<第二の保護制御部の処理の流れ>
図5、図6にて、車両用制御装置201の第二の保護制御部406の処理が実行される流れについて説明する。図5、図6の処理は、所定時間ごと(例えば10msごと)に実行される。実行タイミングは所定時間ごとではなく、センサ信号などをトリガとして処理が開始されることとしてもよい。加えて、車両101の電源オフ直前、スリープ機能により車両用制御装置201がスリープする直前、攻撃検知部408がセキュリティ攻撃を検知あるいは推測した時点、停車、エンジンストップなどのイベント発生時に実施してもよい。
ステップS501で開始された処理は、第二の保護制御部406の処理が実行されるタイミングが決定されるステップS502に進む。確認部405は、第二の保護制御部406に対し、第一の保護制御部402の健全性の検証処理を行うタイミングを決定する。検証処理の実施タイミングとしては、車両101の電源オフ直前、スリープ機能により車両用制御装置201がスリープする直前、攻撃検知部408がセキュリティ攻撃を検知あるいは推測した時点、停車、エンジンストップなどのイベント発生時、所定時間ごとなどが考えられる。これらはいずれも、車両用制御装置201の起動後の作動状態に応じて決定されるタイミングである。
これにより、適切なタイミングで第一の保護制御部402の監視処理の健全性を検証することができる。次に、ステップS503でタイミングが合致したかどうかを確認し、現時点が決定された検証処理の実施タイミングでない場合は、ステップS531に進む。タイミングの合致は、ステップS502で定めたタイミングに対して現在時点が定めたタイミングである、もしくはそのタイミングを過ぎている場合を言う。前回、ステップS503を実行したとき以降に、ステップS502で定めたタイミングとなった場合、次のステップS503を実行した時、タイミング合致と判断する。
ステップS503で、現在が決定された検証処理の実施タイミングである場合は、ステップS504に進み、検証用入出力データ1を設定する。検証用入出力データ1は、主制御部401の処理として入力データに対して異常な出力データである。入力データ、出力データともに所定のレジスタに設定され、監視処理の準備がされる。ステップS504の後、ステップS505で、第一の保護制御部402の監視処理が呼び出されて実行される。ステップS505は図3のステップS400と同じ処理である。図5では、ステップS505が呼び出される前の処理がステップS504であり、呼び出しテーブル403に実行順序が記載されている。第一の保護制御部402の監視処理ステップS505で、入出力データが監視され、異常の有無が判断され、異常時は縮退運転処理によって出力が制限される。監視処理ステップS505による判定結果が、入力異常フラグ、処理異常フラグ、出力異常フラグのセット、クリアの状態で示される。例えば、処理異常フラグがセットされており、縮退運転テーブルによって求められた新たな出力データがレジスタに設定される。
検証用入出力データ1の入力データと出力データの組み合わせに対して、第一の保護制御部402の正しい判断によるフラグの設定と縮退運転による出力データが、あらかじめ用意されている。ステップS506で、ステップS505にて実行した第一の保護制御部402の処理による、フラグの設定と縮退運転による出力データが、あらかじめ用意されたデータと照合される。照合結果が合致している場合は、ステップS507で第一の保護制御部402の判断が健全であるとして、不正1フラグがクリアされる。照合結果が不一致の場合は、ステップS508で第一の保護制御部402の判断が健全でないとして、不正1フラグがセットされる。出力データの照合結果の合致は、所定の幅をもって許容されるものとする。
ステップS507、ステップS508の後、ステップS509で検証用入出力データ2を設定する。検証用入出力データ2は、主制御部401の処理として入力データに対して正常な出力データである。入力データ、出力データともに所定のレジスタに設定され、監視処理の準備がされる。ステップS509の後、ステップS510で、第一の保護制御部402の監視処理が呼び出されて実行される。ステップS510は図3のステップS400と同じ処理である。図5では、ステップS510が呼び出される前の処理がステップS509であり、呼び出しテーブル403に実行順序が記載されている。第一の保護制御部402の監視処理ステップS510で、入出力データが監視され、異常の有無が判断され、異常時は縮退運転処理によって出力が制限される。監視処理ステップS510による判定結果が、入力異常フラグ、処理異常フラグ、出力異常フラグのセット、クリアの状態で示される。例えば、すべてのフラグがクリアされて、出力データは適正としてそのまま出力データがレジスタに設定される。
検証用入出力データ2の入力データと出力データの組み合わせに対して、第一の保護制御部402の正しい判断によるフラグの設定と縮退運転による出力データが、あらかじめ用意されている。検証用入出力データ2は、入力データに対して正常な出力データなので、フラグは全てクリアされ、出力データはそのまま維持される。ステップS511で、ステップS510にて実行した第一の保護制御部402の処理による、フラグの設定と出力データが、あらかじめ用意されたデータと照合される。照合結果が合致している場合は、ステップS512で第一の保護制御部402の判断が健全であるとして、不正1フラグがクリアされる。照合結果が不一致の場合は、ステップS513で第一の保護制御部402の判断が健全でないとして、不正1フラグがセットされる。出力データの照合結果の合致は、所定の幅をもって許容されるものとする。
ステップS512、ステップS513の後、ステップS514で検証用入出力データ3を設定する。検証用入出力データ3は、入力データが、予想できる範囲外である。入力データ、出力データともに所定のレジスタに設定され、監視処理の準備がされる。ステップS514の後、ステップS515で、第一の保護制御部402の監視処理が呼び出されて実行される。ステップS515は図3のステップS400と同じ処理である。図5では、ステップS515が呼び出される前の処理がステップS514であり、呼び出しテーブル403に実行順序が記載されている。第一の保護制御部402の監視処理ステップS515で、入出力データが監視され、異常の有無が判断され、異常時は縮退運転処理によって出力が制限される。監視処理ステップS515による判定結果が、入力異常フラグ、処理異常フラグ、出力異常フラグのセット、クリアの状態で示される。例えば、入力異常フラグがセットされて、出力データはより安全側の値が選択される。
検証用入出力データ3の入力データと出力データの組み合わせに対して、第一の保護制御部402の正しい判断によるフラグの設定と縮退運転による出力データが、あらかじめ用意されている。検証用入出力データ3は、入力データが、予想できる範囲外であるので、入力異常フラグがセットされ、出力データはより安全側の値が選択される。ステップS516で、ステップS515にて実行した第一の保護制御部402の処理による、フラグの設定と出力データが、あらかじめ用意されたデータと照合される。照合結果が合致している場合は、ステップS517で第一の保護制御部402の判断が健全であるとして、不正3フラグがクリアされる。照合結果が不一致の場合は、ステップS518で第一の保護制御部402の判断が健全でないとして、不正3フラグがセットされる。
ステップS517、ステップS518の後、ステップS519で検証用入出力データ4を設定する。検証用入出力データ4は、出力データが、予想できる範囲外である。入力データ、出力データともに所定のレジスタに設定され、監視処理の準備がされる。ステップS519の後、ステップS520で、第一の保護制御部402の監視処理が呼び出されて実行される。ステップS520は図3のステップS400と同じ処理である。図6では、ステップS520が呼び出される前の処理がステップS519であり、呼び出しテーブル403に実行順序が記載されている。第一の保護制御部402の監視処理ステップS520で、入出力データが監視され、異常の有無が判断され、異常時は縮退運転処理によって出力が制限される。監視処理ステップS520による判定結果が、入力異常フラグ、処理異常フラグ、出力異常フラグのセット、クリアの状態で示される。例えば、出力異常フラグがセットされて、出力データはより安全側の値が選択される。
検証用入出力データ4の入力データと出力データの組み合わせに対して、第一の保護制御部402の正しい判断によるフラグの設定と縮退運転による出力データが、あらかじめ用意されている。検証用入出力データ4は、出力データが、出力の最小許容値と最大許容値の範囲外なので、出力異常フラグがセットされ、出力データはより安全側の値が選択される。ステップS521で、ステップS520にて実行した第一の保護制御部402の処理による、フラグの設定と出力データが、あらかじめ用意されたデータと照合される。照合結果が合致している場合は、ステップS522で第一の保護制御部402の判断が健全であるとして、不正4フラグがクリアされる。照合結果が不一致の場合は、ステップS523で第一の保護制御部402の判断が健全でないとして、不正4フラグがセットされる。
ステップS522、ステップS523の後、ステップS524で第一の保護制御部402の監視処理が実行される直前に実行された処理について、呼び出しテーブル403に規定されている処理であるかどうか照合する。第一の保護制御部402の監視処理の直前に実行される事前処理は、呼び出しテーブル403にて規定されているので、規定されていない処理が直前に実行されていれば、不正な処理が実行されているとみなされる。呼び出しテーブル403で規定される内容は、呼び出して実行される処理の順序であるが、処理が呼び出される階層を規定することとしてもよい。すなわち、実行される処理と、その処理の中で呼び出される処理を規定することで、呼び出し処理とその呼び出し元の処理を規定することとしてもよい。
第一の保護制御部402の処理がされたステップとその直前の事前処理のステップについて、記憶されている処理が、呼び出しテーブルの記載と合致した場合はステップS525で呼び出しテーブル不一致フラグがクリアされる。記憶されている処理が、呼び出しテーブルの記載と不一致の場合はステップS526で呼び出しテーブル不一致フラグがセットされる。
ステップS525、ステップS526の後、ステップS527で計時部404によって計測された第一の保護制御部402の監視処理の実行時間が、所定範囲内であったかどうか判定される。監視処理の実行時間が所定範囲から外れている時、不正な監視処理が実行された判断する。監視処理の実行時間が所定範囲内である時、ステップS528で実行時間異常フラグがクリアされる。監視処理の実行時間が所定範囲外である時、ステップS529で実行時間異常フラグがセットされる。
ステップS528、ステップS529の後、ステップS530で不正1フラグ、不正2フラグ、不正3フラグ、不正4フラグ、呼び出しテーブル不一致フラグ、実行時間異常フラグのいずれかがセットされているかどうか判定する。すべてのフラグがクリアされていれば、ステップS531へ進む。いずれかのフラグがセットされていた場合は異常処理ステップS600を実行した後、ステップS533へ進んで処理を終了する。
ステップS531では、攻撃検知部408がセキュリティ攻撃を検知あるいは推測したかどうかを確認する。セキュリティ攻撃を検知あるいは推測していない場合は、ステップS533へ進み処理を終了する。セキュリティ攻撃を検知あるいは推測している場合は、ステップS532でプログラムの書き戻しを実行する。管理部409が第一の保護制御部402の処理を、以前に格納されていたプログラムに書き換える。この時、以前に格納されていたプログラムに書き換えるかわりに、初期プログラムに書き戻してもよい。また、セキュリティ攻撃対応に準備された、セキュリティ攻撃対応プログラムに書き換えることもできる。ステップS532の後、ステップS533で処理を終了する。
以上のような流れで、車両用制御装置201の第二の保護制御部406の処理によって、適切なタイミングで、第一の保護制御部402の監視処理の健全性を検証することができる。また、第一の保護制御部402の監視処理を実施する順序、実行時間から監視処理の健全性を検証することができる。さらに、セキュリティ攻撃を検知あるいは推測した場合に、第一の保護制御部402の監視処理のプログラムを書き戻すことができる。
<異常処理の流れ>
図7にて実施の形態1に係る異常処理の流れについて説明する。図7は、図6のステップS600で呼び出される異常処理の内容を示すフローチャートである。ステップS601で異常処理を開始し、次にステップS602で、通信部407を介して、異常状態を通知する。車両101に搭載される他の車両用制御装置202、203に有線通信501を介して異常状態を送信する。また、車両用制御装置202を介して、無線通信で別の車両102とサーバ1001に通知する。また、有線通信501または無線通信502を介して診断装置にも異常状態を送信する、
ステップS602の後、ステップS603にてプログラムの書き戻しを実行する。管理部409が第一の保護制御部402の処理を、以前に格納されていたプログラムに書き換える。この時、以前に格納されていたプログラムに書き換えるかわりに、初期プログラムに書き戻してもよい。また、異常対応に準備された、異常対応プログラムに書き換えることもできる。ステップS603の後、ステップS604で異常処理が終了する。
上記の、図1、5の説明では、実施の形態1において、確認部405が、第二の保護制御部406による第一の保護制御部402の健全性の検証の実施タイミングを指示することとしたが、確認部405が健全性の検証結果の正否判定を行う構成としてもよい。また、確認部405と第二の保護制御部406の機能を統合して第二の保護制御部406の機能に取り込んでもよい。
上記の説明では、実施の形態1において、車両101および車両101外とのネットワーク構成を図1のとおりとしたが、車両用制御装置の数、車両用制御装置間の通信線の結線方法はこの限りでなく、接続される車両用制御装置間で情報をやり取りすることができる構成であれば、実施の形態1の特徴を適用可能である。
第一の保護制御部402がソフトウェアモジュールのみによって構成されている場合は、検証用の入出力データおよび、第一の保護制御部402の監視処理の実行後の出力データは、主制御部の車載機器の制御用データとして用いられないよう、データを切り分けることとした。しかし、第一の保護制御部402の処理と同様のソフトウェア処理を複数並行して、またはシリアルに実行させて、結果を比較することで健全性の検証としてもよい。また、その場合、不一致の出力データを出力値として用いないようにしてもよい。
2.実施の形態2
図8は、実施の形態2に係る、第二の保護制御部406の処理の第一のフローチャートである。図9は、実施の形態2に係る、第二の保護制御部406の処理の第二のフローチャートであり、図8の続きである。実施の形態1では、車両用制御装置201の確認部405が、健全性の検証処理の実行タイミングを指示すべき対象の、第一の保護制御部402が一つである場合について、図5、図6にて説明した。実施の形態2に係る、図8、図9の第二の保護制御部406の処理のフローチャートが、図5、図6と異なるのは、車両用制御装置201の確認部405が、車両用制御装置201の第一の保護制御部402だけでなく、車両用制御装置202の第一の保護制御部と、車両用制御装置203の第一の保護制御部の、監視処理の健全性を検証するタイミングを決定する点である。
以下、図8、図9について説明する。第二の保護制御部406の処理のフローチャートの開始ステップS701のタイミングは実施の形態1と同様であり、所定時間ごと(例えば10msごと)、セキュリティ攻撃を受けた時、等に実行される。
ステップS702では、確認部405は、健全性の検証処理を実行すべき第一の保護制御部が複数ある場合、それらの処理の重要度を決定する。その後、ステップS703で、重要度を考慮して、第一の保護制御部ごとの健全性の検証処理を実行すべきタイミングを決定する。確認部405は、車両用制御装置201ごとに設ける必要はなく、車両101ごとに設けて車両内の車両用制御装置201、202、203の主制御部ごとに存在する第一の保護制御部について重要度に応じて健全性の検証処理を実行すべきタイミングを決定する。また、確認部405を、車外のサーバ1001上に設けることによって、車両ごとに複数存在する車両用制御装置の第一の保護制御部の重要度に応じて、それぞれの第一の保護制御部の健全性の検証処理を実行するタイミングを決めることとしてもよい。
それぞれの第一の保護制御部の処理の重要度は、第一の保護制御部に定められた安全確保がどれほど重要な役割を担っているかを判断指標としてもよい。たとえば、ISO 26262のASILに応じて決めることも可能である。ASIL DとASIL Aの第一の保護制御部がある場合には、ASIL Dの第一の保護制御部を処理の重要度が高いとして優先して検証する。
また、処理の重要度は、車両状態、乗員状態、周辺環境あるいは予め決定される運転計画に基づいて判断されてもよい。例えば、車両101が駐車した場合には次の発進に向けて必要となる車両の駆動に関わる主制御部の第一の保護制御部の重要度が高いため、優先的に検証する。そのほか車両101のユーザが設定した運転計画「一般道を走行、その後高速道路を走行」に沿った運転がなされている場合は、現在の周辺環境(一般道)を走行したのち、次の周辺環境(高速道路)になる場合に利用される車線維持、前車追従運転等の主制御部に対する第一の保護制御部の重要度が高い。
以上のように、第一の保護制御部402の処理の重要度に応じて、第一の保護制御部402の処理の健全性の検証を実行するタイミングを決められるので、重要度に応じた適切なタイミングで健全性の検証を実行できる。
ステップS703で、複数の第一の保護制御部の健全性の検証タイミングを、それぞれの重要度に基づいて決定した後、ステップS704でいずれかの検証タイミングと合致しているか否かを確認する。いずれの検証タイミングに合致していない場合は、健全性の検証を実施せずステップS990へ進む。タイミングの合致は、ステップS703で定めたタイミングに対して現在時点が定めたタイミングである、もしくはそのタイミングを過ぎている場合を言う。前回、ステップS704を実行したとき以降に、ステップS703で定めたタイミングとなった場合、次のステップS704を実行した時、タイミング合致と判断する。
ステップS704で、いずれかの検証タイミングになっている場合は、ステップS705で車両用制御装置201の第一の保護制御部402の健全性の検証タイミングか否かを確認する。車両用制御装置201の第一の保護制御部402の健全性検証タイミングであれば、ステップS706に進んで、第一の保護制御部402の健全性検証を開始する。ステップS706で、車両用制御装置201の第一の保護制御部402の検証用入出力データをレジスタに設定する。図8、図9のステップS706からステップS732の処理は、図5、図6のステップS504からステップS530までの処理と同様なので説明を省略し、図8では記載を省略した処理を破線で示している。
図9のステップS732の処理は、図6のステップS530の処理と同等である。第一の保護制御部402に関して健全性の検証をし、ステップS732で、不正1フラグ、不正2フラグ、不正3フラグ、不正4フラグ、呼び出しテーブル不一致フラグ、実行時間異常フラグのいずれかがセットされているかどうか判定する。すべてのフラグがクリアされていれば、ステップS733へ進む。いずれかのフラグがセットされていた場合は異常処理ステップS600を実行した後、ステップS990へ進んで処理を終了する。異常処理ステップS600は、図6のステップS600と同じ処理であって、図7にステップS601からステップS604に展開して説明している。
図9のステップS733は図6のステップS531の処理と同等である。図9のステップS733では、攻撃検知部408がセキュリティ攻撃を検知あるいは推測したかどうかを確認する。セキュリティ攻撃を検知あるいは推測していない場合は、ステップS990へ進み処理を終了する。セキュリティ攻撃を検知あるいは推測している場合は、ステップS734でプログラムの書き戻しを実行する。管理部409が第一の保護制御部402の処理を、以前に格納されていたプログラムに書き換える。この時、以前に格納されていたプログラムに書き換えるかわりに、初期プログラムに書き戻してもよい。また、セキュリティ攻撃対応に準備された、セキュリティ攻撃対応プログラムに書き換えることもできる。ステップS734の後、ステップS990で処理を終了する。
図8のステップS705で車両用制御装置201の第一の保護制御部402の健全性の検証タイミングでない場合、ステップS735で、車両用制御装置202の第一の保護制御部の健全性の検証タイミングか否かを確認する。そうであれば、ステップS736で車両用制御装置202の第一の保護制御部の健全性の検証のための検証用入出力データ21をレジスタに設定する。図8、図9のステップS736からステップS762までの処理は、対象の車両用制御装置が202となる以外は、図5、図6のステップS504からステップS530までの処理に準ずるので説明を省略する。図8では記載を省略した処理を破線で示している。
図9のステップS762は、対象の車両用制御装置が202となる以外は、図6のステップS530の処理に準ずる。図9のステップS762で不正1フラグ、不正2フラグ、不正3フラグ、不正4フラグ、呼び出しテーブル不一致フラグ、実行時間異常フラグのいずれかがセットされているかどうか判定する。すべてのフラグがクリアされていれば、ステップS763へ進む。いずれかのフラグがセットされていた場合は異常処理ステップS800を実行した後、ステップS990へ進んで処理を終了する。
ステップS763では、攻撃検知部がセキュリティ攻撃を検知あるいは推測したかどうかを確認する。セキュリティ攻撃を検知あるいは推測していない場合は、ステップS990へ進み処理を終了する。セキュリティ攻撃を検知あるいは推測している場合は、ステップS764で車両用制御装置202のプログラムの書き戻しを実行する。管理部が車両用制御装置202の第一の保護制御部の処理を、以前に格納されていたプログラムに書き換える。この時、以前に格納されていたプログラムに書き換えるかわりに、初期プログラムに書き戻してもよい。また、セキュリティ攻撃対応に準備された、セキュリティ攻撃対応プログラムに書き換えることもできる。ステップS764の後、ステップS990で処理を終了する。
図8のステップS735で車両用制御装置202の第一の保護制御部の健全性の検証タイミングでない場合、車両用制御装置203の第一の保護制御部の健全性の検証タイミングである。ステップS766で車両用制御装置203の第一の保護制御部の健全性の検証のための検証用入出力データ31をレジスタに設定する。図8、図9のステップS766からステップS792の処理は、対象の車両用制御装置が203となる以外は、図5、図6のステップS504からステップS530までの処理に準ずるので説明を省略する。図8では記載を省略した処理を破線で示している。
図9のステップS792は、対象の車両用制御装置が203となる以外は、図6のステップS530の処理に準ずる。図9のステップS792で不正1フラグ、不正2フラグ、不正3フラグ、不正4フラグ、呼び出しテーブル不一致フラグ、実行時間異常フラグのいずれかがセットされているかどうか判定する。すべてのフラグがクリアされていれば、ステップS793へ進む。いずれかのフラグがセットされていた場合は異常処理ステップS900を実行した後、ステップS990へ進んで処理を終了する。
ステップS793では、攻撃検知部がセキュリティ攻撃を検知あるいは推測したかどうかを確認する。セキュリティ攻撃を検知あるいは推測していない場合は、ステップS990へ進み処理を終了する。セキュリティ攻撃を検知あるいは推測している場合は、ステップS794で車両用制御装置203のプログラムの書き戻しを実行する。管理部が車両用制御装置203の第一の保護制御部の処理を、以前に格納されていたプログラムに書き換える。この時、以前に格納されていたプログラムに書き換えるかわりに、初期プログラムに書き戻してもよい。また、セキュリティ攻撃対応に準備された、セキュリティ攻撃対応プログラムに書き換えることもできる。ステップS734の後、ステップS990で処理を終了する。
図9のステップS800で呼び出される異常処理の内容は、対象となる車両用制御装置が、202となる以外は、図7に示される異常処理(ステップS601、ステップS602、ステップS603、ステップS604)に準ずるので説明を省略する。
図9のステップS900で呼び出される異常処理の内容は、対象となる車両用制御装置が、203となる以外は、図7に示される異常処理(ステップS601、ステップS602、ステップS603、ステップS604)に準ずるので説明を省略する。
図8、図9のフローチャートで、実施の形態2に係る、車両用制御装置201の確認部405が、健全性の検証処理の実行タイミングを指示すべき対象が、車両用制御装置201の第一の保護制御部402だけでなく、車両用制御装置202の第一の保護制御部と、車両用制御装置203の第一の保護制御部の監視処理の健全性を検証するタイミングを決定する場合について説明した。単一の確認部405が、監視処理の健全性を検証するタイミングを決定する対象は、これ以外の、同一の車両用制御装置の中の複数の主制御部に対応した複数の第一の保護制御部でもよい。また、異なる車両(例えば車両102)の車両用制御装置の監視処理の健全性を検証するタイミングを決定することとしてもよい。
また、確認部405、攻撃検知部408は、車両ではなくサーバ1001に設置されてもよい。たとえば、攻撃検知部408は、攻撃の兆候を検知しようとすると、多くの既存あるいは車両リリース後に発見される脅威、脆弱性の情報に基づいた判断が望ましい。この場合多くの情報を処理する必要があることから、車両用制御装置に搭載されるようなスペックよりも高い演算能力を有した計算機で攻撃有無を判断することで幅広い範囲の攻撃方法に対して、これを検知することができる。また、重要性を車両の走行状態、環境に応じて決定し変動させて、監視処理の健全性を検証するタイミングを決定するためにも、計算能力の高い制御装置が望ましいので、サーバ1001への設定が選択される場合がある。
本願は、様々な例示的な実施の形態及び実施例が記載されているが、1つ、または複数の実施の形態に記載された様々な特徴、態様、及び機能は特定の実施の形態の適用に限られるのではなく、単独で、または様々な組み合わせで実施の形態に適用可能である。従って、例示されていない無数の変形例が、本願明細書に開示される技術の範囲内において想定される。例えば、少なくとも1つの構成要素を変形する場合、追加する場合または省略する場合、さらには、少なくとも1つの構成要素を抽出し、他の実施の形態の構成要素と組み合わせる場合が含まれるものとする。