(57)【要約】【課題】比較的小さいコストで、ネットワークに接続された電子制御装置が不正データにより誤作動することを防ぐことを目的とする。【解決手段】本発明に係る電子制御装置は、通信バスに対して通信制御部と並列に接続されたＩ／Ｏ制御部を備え、Ｉ／Ｏ制御部は不正データのＡＣＫフィールドを受信する前に当該不正データを無効化する信号を通信バスに対して出力する。【選択図】図４
2014236248.tif 000002
【特許請求の範囲】
【請求項１】
電子機器の動作を制御する装置であって、
通信バスを介して他の電子機器との間でデータを送受信する通信制御部、
前記通信制御部と並行して前記通信バスとの間でデータを送受信するＩ／Ｏ制御部、
前記Ｉ／Ｏ制御部が前記通信バスから受信したデータが不正データであるか否かを判定する不正判定部、
を備え、
前記Ｉ／Ｏ制御部は、前記不正判定部が不正データであると判定したデータの受信確認フィールドを前記通信バスから受信する前に、前記不正データを無効化させる信号を前記通信バスに対して出力する
ことを特徴とする電子制御装置。
【請求項２】
前記電子制御装置は、前記通信制御部を介して前記他の電子機器から所定周期毎にデータを受信するように構成されたプロセッサを備え、
前記不正判定部は、前記Ｉ／Ｏ制御部が前記通信バスから前記所定周期よりも短い時間間隔でデータを受信した場合は、当該データは不正データであると判定する
ことを特徴とする請求項１記載の電子制御装置。
【請求項３】
前記通信制御部は、ＣＡＮプロトコルを用いて前記他の電子機器との間でデータを送受信するように構成されており、
前記Ｉ／Ｏ制御部は、前記不正判定部が不正データであると判定したデータのＣＲＣ境界フィールドをドミナントレベルに変更する信号を前記通信バスに対して出力することにより、前記不正データを無効化させる
ことを特徴とする請求項２記載の電子制御装置。
【請求項４】
前記通信制御部は、ＣＡＮプロトコルを用いて前記他の電子機器との間でデータを送受信するように構成されており、
前記Ｉ／Ｏ制御部は、前記不正判定部が不正データであると判定したデータの受信確認フィールドを前記通信バスから受信する前に、ＣＡＮプロトコル上において前記不正データが無効データであるとみなされる個数以上のドミナントレベル信号を連続して前記通信バスに対して出力することにより、前記不正データを無効化させる
ことを特徴とする請求項２記載の電子制御装置。
【請求項５】
前記Ｉ／Ｏ制御部は、前記不正データを無効化させる信号を前記通信バスに対して出力した後、前記通信制御部が次のデータを前記通信バスから受信し始める前までに、前記不正データを無効化させる信号を停止する
ことを特徴とする請求項１記載の電子制御装置。
【請求項６】
前記電子制御装置は、前記不正判定部が正常動作しているか否かを示す監視信号を受信してその監視信号に基づき前記不正判定部の動作状態を判定する監視部を備え、
前記不正判定部は、メモリ装置内に格納された不正判定プログラムとして構成されており、
前記不正判定プログラムは、前記メモリ装置内のアドレスをジャンプしながら実行されるように構成されており、
前記不正判定プログラムは、最後の前記ジャンプを完了した後に、前記監視信号の信号レベルを反転させて前記監視部に対して出力し、
前記監視部は、前記不正判定プログラムの実行周期毎に前記監視信号の信号レベルが反転していない場合は、前記不正判定部が正常動作していない旨のアラートを出力する
ことを特徴とする請求項１記載の電子制御装置。
【請求項７】
請求項１記載の電子制御装置を複数備え、
いずれかの前記電子制御装置が備える前記不正判定部または前記Ｉ／Ｏ制御部が故障したときは、他の前記電子制御装置が備える前記不正判定部および前記Ｉ／Ｏ制御部が、故障した前記電子制御装置に代行して動作する
ことを特徴とする電子制御システム。
【請求項８】
請求項１記載の電子制御装置と、
前記不正判定部が正常動作しているか否かを示す監視信号を受信してその監視信号に基づき前記不正判定部の動作状態を判定する監視部を備えた第２電子制御装置と、
を有し、
前記不正判定部は、メモリ装置内に格納された不正判定プログラムとして構成されており、
前記不正判定プログラムは、前記メモリ装置内のアドレスをジャンプしながら実行されるように構成されており、
前記不正判定プログラムは、最後の前記ジャンプを完了した後に、前記監視信号の信号レベルを反転させて前記監視部に対して出力し、
前記監視部は、前記不正判定プログラムの実行周期毎に前記監視信号の信号レベルが反転していない場合は、前記不正判定部が正常動作していない旨のアラートを出力する
ことを特徴とする電子制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子制御装置に関するものである。
【背景技術】
【０００２】
従来、本技術分野に関連する技術として、「不必要なデータの転送をなくすことができる車載ゲートウェイを提供する。」ことを課題とし、「ゲートウェイ１００ｂはユーザに対してクローズなバス１０３とユーザに対してオープンなバス１０５との間に接続され、プロトコルを変換する機能などを有する。必要なデータや正規のデータがゲートウェイ１００ｂに送られたときには、それらのデータを他のバスに転送する。一方、不完全なデータや不正なデータがゲートウェイ１００ｂに送られてきたときには、それらのデータはゲートウェイ１００ｂにおいて転送しない。」ことを解決手段とする技術が提案されている（特許文献１：要約）。
【０００３】
また、「ローカルエリアネットワークを介して共通の暗号鍵を用いた暗号通信を行う通信システムにおいて、鍵交換に要する時間の短縮を図ることを目的とする。」ことを課題とし、解決手段として、「システムが起動すると、ゲートウェイＥＣＵ（ＧＷ）が暗号鍵を生成し、これを種鍵を用いて暗号化した暗号化データを、放送形式で全ＥＣＵ（ＥＣＵ１ 〜ＥＣＵＮ ）に一括配信する。各ＥＣＵは、受信した暗号化データを種鍵を用いて復号し、復号結果を暗号鍵として以後の通信データの暗号化、復号に用いる。また暗号鍵を設定したＥＣＵは、その旨を表す応答（鍵確認）を生成し、これを暗号鍵を用いて暗号化した暗号化データをゲートウェイＥＣＵに返送する。ゲートウェイＥＣＵは、その応答に基づいて各ＥＣＵの正当性を判定する。」ことを解決手段とする技術が提案されている（特許文献２：要約）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−０１６６１４号公報
【特許文献２】特開２００５−３４１５２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記特許文献１においては、不正データの侵入を防御する技術として、車載ネットワークの入口にファイヤーウォール機能を実装したＧＷを実装することが記載されている。しかし例えば、ＧＷの内側に不正データを送信する機器を取り付けるなど、ＧＷを介さず不正データを車載ネットワークに侵入させる攻撃は防御することができず、防御できる範囲が限定的となるため、信頼性に課題が残る。
【０００６】
上記特許文献２においては、ネットワーク全体を暗号化して、車載電子制御装置に不正データを認識させないことにより、不正データによる車載電子制御装置の誤作動を防御することが記載されている。しかしこれを実現するためには、ネットワークに接続された車載電子制御装置のすべてを暗号化に対応させる必要があり、品質確保のための工数が大きい。また品質確保のための作業工程において不具合が入り込む可能性がある。
【０００７】
本発明は上記課題に鑑みてなされたものであり、比較的小さいコストで、ネットワークに接続された電子制御装置が不正データにより誤作動することを防ぐことを目的とするものである。
【課題を解決するための手段】
【０００８】
本発明に係る電子制御装置は、通信バスに対して通信制御部と並列に接続されたＩ／Ｏ制御部を備え、Ｉ／Ｏ制御部は不正データのＡＣＫフィールドを受信する前に当該不正データを無効化する信号を通信バスに対して出力する。
【発明の効果】
【０００９】
本発明に係る電子制御装置によれば、簡易な構成により、不正データによる誤作動を防ぐことができる。また、不正データを無効化することにより、不正機器がネットワーク内に侵入しても、その攻撃から電子制御装置を防御することができる。
【図面の簡単な説明】
【００１０】
【図１】実施形態１に係る電子制御システム２を搭載した車両１の構成図である。
【図２】電子制御システム２と電子制御システム４の接続例を示す図である。
【図３】電子制御システム２の内部構成例を示す図である。
【図４】ＥＣＵ３０２の内部構成図である。
【図５】ネットワークバス３０１上を流れるデータのフレーム構造例を示す図である。
【図６】不正データを受信したときにおけるＥＣＵ３０２の動作タイミングとネットワークバス３０１の状態を示すタイムチャートである。
【図７】ＥＣＵ３０２が不正データを検出して無効化する処理を説明するフローチャートである。
【図８】ステップＳ７０１の詳細を示すフローチャートである。
【図９】ステップＳ７０３の詳細を示すフローチャートである。
【図１０】ステップＳ７０４の詳細を示すフローチャートである。
【図１１】実施形態３におけるＥＣＵ３０２の内部構成を示す。
【図１２】ＣＰＵ制御部４０５が不正防止プログラム４０７１〜４０７４を実行する手順を説明するフローチャートである。
【図１３】実施形態４におけるＥＣＵ３０２と監視ＥＣＵ１３１の内部構成を示す図である。
【発明を実施するための形態】
【００１１】
＜実施の形態１：電子制御システムの構成＞
図１は、本発明の実施形態１に係る電子制御システム２を搭載した車両１の構成図である。車両１は、電子制御システム２を有する。電子制御システム２は、例えばＣＡＮ、ＦｌｅｘＲａｙ（登録商標）、Ｅｔｈｅｒｎｅｔ、などのプロトコルを用いて電子制御装置同士が接続された車載ネットワークシステムである。無線通信部３は、電子制御システム２の外部と無線通信（例えば携帯電話、無線ＬＡＮ、ＷＡＮ、等を使用した通信）する。電子制御システム４は、電子制御システム２とは別の車載ネットワークシステムである。有線通信部５は、例えば診断端子（ＯＢＤ）、Ｅｔｈｅｒｎｅｔ端子、外部記録媒体（例えばＵＳＢメモリ、ＳＤカード、等）端子など、有線接続により電子制御システム２にアクセスする。表示装置６は、例えば電子制御システム２からのデータを受信し、メッセージなど必要な情報を表示する、液晶ディスプレイなどのデバイスである。
【００１２】
図２は、電子制御システム２と電子制御システム４の接続例を示す図である。ゲートウェイ（ＧＷ）７は、各電子制御システムのネットワークバス間でデータを中継する。また必要に応じて通信プロトコルを変換する。
【００１３】
図３は、電子制御システム２の内部構成例を示す図である。ネットワークバス３０１はネットワーク上の電子制御装置３０２を接続する、例えばＣＡＮバスなどの通信バスである。ＥＣＵ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ：電子制御装置）３０２は、ネットワークバス３０１に接続され、ネットワークバス３０１を介して他のＥＣＵ３０２との間でデータを送受信する。ＥＣＵ３０２は、ネットワークバス３０１を介して図示しないＨ／Ｗに接続され、そのＨ／Ｗを制御する。例えば、表示装置６をＥＣＵ３０２が制御するように構成することができる。
【００１４】
ＧＷ７とＥＣＵ３０２は、双方の機能を備える場合もあるし、いずれか一方の機能のみを備える場合もある。本発明に係る電子制御装置は、ＥＣＵ３０２を想定しているが、ＧＷ７を同様に構成することもできる。
【００１５】
図４は、ＥＣＵ３０２の内部構成図である。ＭａｉｎＣＰＵ４０１は、例えばエンジン、トランスミッション等の車両１が備えるＨ／Ｗを制御するプロセッサである。ＳｕｂＣＰＵ４０２は、例えばＭａｉｎＣＰＵの暴走監視等の制御を実行するプロセッサである。通信Ｉ／Ｆ４０３は、ネットワークバス３０１との間でデータを送受信する。内部バス４０４は、ＥＣＵ３０２内部における通信のための通信バスである。
【００１６】
ＭａｉｎＣＰＵ４０１は、ＣＰＵ制御部４０５、Ｉ／Ｏ制御部４０６、記憶素子４０７、通信制御部４０８を備える。
【００１７】
ＣＰＵ制御部４０５は、記憶素子４０７が記憶している情報を読み出して演算を実施する機能、記憶素子４０７に演算結果を格納する機能、Ｉ／Ｏ制御部４０６と通信制御部４０８に対する命令を生成する機能を有する。Ｉ／Ｏ制御部４０６は、ネットワークバス３０１に対して通信制御部４０８および通信Ｉ／Ｆ４０３と並列に接続されており、ネットワークバス３０１から受信したデータを記憶素子４０７に格納する機能、ＣＰＵ制御部４０５からの命令にしたがってネットワークバス３０１に対して電気信号を出力する機能を有する。記憶素子４０７は、ＲＯＭ、ＲＡＭ、レジスタ等の記憶素子である。通信制御部４０８は、ＣＰＵ制御部４０５からの命令にしたがって通信Ｉ／Ｆ４０３に通信データを送受信するよう指示する機能、受信した値を記憶素子４０７に格納する機能を有する。
【００１８】
ＳｕｂＣＰＵ４０２は、ＣＰＵ制御部４０９、Ｉ／Ｏ制御部４１０、記憶素子４１１を備える。これらの機能は、ＣＰＵ制御部４０５、Ｉ／Ｏ制御部４０６、記憶素子４０７と同様である。
【００１９】
通信Ｉ／Ｆ４０３はネットワークバス３０１上を流れる電気信号を監視し、ネットワークバス３０１に対して他の電子機器から送信されたデータを受信完了したタイミングで、電気信号をデータに変換して通信制御部４０８に出力する。通信制御部４０８は、受け取ったデータからＥＣＵ３０２が受信すべきデータをフィルタリングして記憶素子４０７に格納する。ＥＣＵ３０２が受信すべきデータは、ＣＰＵ制御部４０５がそのデータのＩＤを通信制御部４０８に対して指定することによりフィルタリングすることができる。
【００２０】
ＣＰＵ制御部４０５は、送信するデータを記憶素子４０７に記憶し、通信制御部４０８に対して送信指示を出力する。通信制御部４０８は、ＣＰＵ制御部４０５から送信指示を受け取ると、記憶素子４０７から送信すべきデータを読み出し、準拠すべき通信プロトコルに合わせたデータ形式に変換し、送信指示と併せて通信Ｉ／Ｆ４０３に出力する。通信Ｉ／Ｆ４０３は、通信制御部４０８から送信データと送信指示を受け取ると、送信データを電気信号に変換してネットワークバス３０１に出力する。
【００２１】
Ｉ／Ｏ制御部４０６は、ネットワークバス３０１と直接結線されており、ＣＰＵ制御部４０５はＩ／Ｏ制御部４０６を介してネットワークバス３０１上を流れる電気信号レベルをリアルタイムにモニタする。これにより、通信Ｉ／Ｆ４０３がネットワークバス３０１上を流れるデータを受信完了するまで待つことなく、リアルタイムでネットワークバス３０１上を流れるデータを監視することができる。Ｉ／Ｏ制御部４０６はネットワークバス３０１上を流れる電気信号レベルを取り込み、記憶素子４０７に格納する。ＣＰＵ制御部４０５は、記憶素子４０７が記憶しているネットワークバス３０１の現在の電気信号レベルを読み取ることにより、ネットワークバス３０１の電気信号レベルをリアルタイムで監視する。
【００２２】
Ｉ／Ｏ制御部４０６は、通信制御部４０８と通信Ｉ／Ｆ４０３を介することなく、ネットワークバス３０１に対して直接電気信号を出力することができる。Ｉ／Ｏ制御部４０６は、ネットワークバス３０１に対して電気信号を出力するようにＣＰＵ制御部４０５から命令を受けると、その命令にしたがって通信制御部４０８と通信Ｉ／Ｆ４０３を介さずにネットワークバス３０１に対して電気信号を出力する。
【００２３】
＜実施の形態１：ネットワークプロトコルの例＞
図５は、ネットワークバス３０１上を流れるデータのフレーム構造例を示す図である。ここでは通信プロトコルとしてＣＡＮを使用した場合におけるデータフレームのデータ構造を示している。各フィールドの数値はビット数を表している。
【００２４】
ＣＡＮにおいては、ネットワーク装置がデータを送信するときバス信号をドミナントレベル（０）に設定し、同一バス上に接続されたネットワーク装置がデータを送信または受信するときにバス信号がドミナントレベル（０）またはリセッシブレベル（１）のいずれであるかを検知することにより、データ通信を調停する。ドミナントレベルはリセッシブレベルより優先度が高いため、いずれかのネットワーク装置がドミナントレベルを送信しているとき、他のネットワーク装置がリセッシブレベルを送信しても、ネットワークバス３０１はドミナントレベルに設定される。
【００２５】
ＳＯＦ（Ｓｔａｒｔ  Ｏｆ  Ｆｒａｍｅ）はデータフレームの開始位置を示しており、データフレームの同期を取るために用いられ。ＳＯＦは常にドミナントが送信される。
【００２６】
識別子（ＩＤ）は、データのＩＤ（以下データＩＤ）を示しており、このデータＩＤにより各ネットワーク装置は当該データの種類を識別することができる。
【００２７】
ＩＤおよびＲＴＲ（Ｒｅｍｏｔｅ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｒｅｑｕｅｓｔ）ビットをアービトレーション・フィールドと呼び、このフィールドによりネットワークバス３０１のアービトレーション（調停）を実施する。ＲＴＲは図５（ａ）に示す例においては常にドミナントレベルが設定される。ＲＴＲの値がリセッシブレベルである場合は、図５（ｂ）のような拡張フォーマットを用いることを示す。この場合はＩＤを２９ビットで表現することができる。拡張フォーマットのデータ・フィールド以降の構成は図５（ａ）と同様である。
【００２８】
ＲＢ１とＲＢ０は予約ビットであり、常にドミナントレベルが設定される。
ＤＬＣは、データ・フィールドのデータ長（バイト数）を表している。
【００２９】
データ・フィールドは、送信するデータの内容を示しており、Ｎバイト分のデータが可変長で送信される。
【００３０】
ＣＲＣ・フィールドはデータフレームのＣＲＣが入力される。ＣＲＣ境界はアクノリッジとＣＲＣ・フィールドとの間の境界を表し、常にリセッシブレベルで送信される。ＣＲＣ境界がドミナントレベルにセットされている場合、当該データフレームは無効なものとみなされる。
【００３１】
アクノリッジは、受信ノード（ＥＣＵ３０２やＧＷ７）が正しくデータを受信した場合に、確認応答としてドミナントレベルに設定して送信するためのフィールドである。アクノリッジ境界は、アクノリッジとＥＯＦとの間の境界を表し、常にリセッシブレベルで送信される。
【００３２】
ＥＯＦ（Ｅｎｄ  Ｏｆ  Ｆｒａｍｅ）はデータフレームの終端を示し、７ビットのリセッシブレベルが送信される。
【００３３】
車載ネットワークにおいては、特定のネットワーク装置が定期的にネットワークに対して自ネットワーク装置が観測した値（例えばセンサの値）を送信し、別のネットワーク装置に対してその状態を通知する。ＣＡＮにおいては、図５で説明したフォーマットのデータを送受信する。データを受信するネットワーク装置は、送信されたデータが所定のフォーマットとは異なるフォーマットで送信されたことを検出すると、それをフォーム・エラーとして検出する。フォーム・エラーを検出したネットワーク装置は、即時にエラーフレームを出力し、以後のバス上におけるデータ送信を無効化する。
【００３４】
＜実施の形態１：なりすまし攻撃の例＞
本発明において主に防御対象とする、不正データを侵入させてネットワーク装置を誤動作させる攻撃を、なりすまし攻撃と呼ぶ。ＣＡＮにおけるなりすまし攻撃は、データＩＤを既存のデータＩＤになりすます。さらに、なりすます対象のデータに、チェックサムなどのチェック符号が付与されている場合は、その符号もなりすます。これにより、不正データを受信したネットワーク装置がそのデータを不正データであるか否か判断できないようにする。
【００３５】
＜実施の形態１：不正データを検出する方法の例＞
本実施形態１において採用する、不正データを検出する方法について説明する。検出対象とするのは、所定周期で送信されるデータである。記憶素子４０７は、不正データ判定用データベース（ＤＢ）と呼ばれる、不正データを判定するためのデータベースを格納している。不正データ判定用ＤＢは、所定周期で送信されるデータそれぞれについて、データＩＤと送信周期を格納する。
【００３６】
ＣＰＵ制御部４０５は、ネットワークバス３０１に対して送信されたデータについて、前回の送信タイミングと今回の送信タイミングとの間の差分から算出した送信周期と、不正データ判定用ＤＢに登録されている送信周期を比較する。比較の結果、算出した送信周期が、不正データ判定用ＤＢに登録されている送信周期よりも短い場合、ＣＰＵ制御部４０５は当該データが所定周期の送信タイミングに侵入した不正データであると判定する。不正データ判定用ＤＢは、ネットワークバス３０１を流れるデータのＩＤ毎に送信周期を格納する。
【００３７】
以下の説明においては、送信周期に基づき不正データを検出する方法を用いることを前提として説明する。しかし以下に説明するように、受信したデータが不正データであるか否かをＣＲＣ境界までに判定して無効化することができる限り、その他の手法を用いて不正データを検出してもよい。
【００３８】
＜実施の形態１：なりすまし攻撃を防御する方法の例＞
図６は、不正データを受信したときにおけるＥＣＵ３０２（Ｉ／Ｏ制御部４０６およびＣＰＵ制御部４０５）の動作タイミングとネットワークバス３０１の状態を示すタイムチャートである。以下図６にしたがって、ＥＣＵ３０２が不正データを無効化する手順を説明する。
【００３９】
Ｉ／Ｏ制御部４０６は、不正データを無効化するとき以外は、ネットワークバス３０１に干渉しないように、リセッシブレベルを出力する。不正データを無効化するときの動作については以下に述べる。
【００４０】
Ｉ／Ｏ制御部４０６は、ネットワークバス３０１を流れる電気信号レベルをリアルタイムで監視する。ＣＰＵ制御部４０５は、バスフリーの状態から信号レベルが変化することを検出することにより、ネットワークバス３０１に対してデータ送信が開始された（ＳＯＦ）ことを検出する。
【００４１】
ＣＰＵ制御部４０５は、Ｉ／Ｏ制御部４０６がＩＤフィールドを受信完了した時刻６０１において、受信したＩＤに対応する送信周期を不正データ検出用ＤＢから読み出し、所定周期で送信されたデータであるか否かを判定する。受信したデータが不正データではないと判定した場合は、Ｉ／Ｏ制御部４０６はネットワークバス３０１上を流れるデータに干渉しないようにリセッシブレベルを出力し続ける。受信したデータが不正データであると判定した場合は、Ｉ／Ｏ制御部４０６は以下に説明する不正データを無効化する処理を実施する。
【００４２】
Ｉ／Ｏ制御部４０６は、不正データのＣＲＣ境界がネットワークバス３０１上に送信されるタイミング（時刻６０２）において、不正データを無効化するため、ドミナントレベルを出力する。これにより、ネットワークバス３０１上には、不正データのＣＲＣ境界であるリセッシブレベル信号と、Ｉ／Ｏ制御部４０６が出力するドミナントレベル信号とが併存することになるが、ドミナントレベルとリセッシブレベルの優先順位にしたがって、ネットワークバス３０１の電気信号レベルはドミナントとなる。ＣＲＣ境界の電気信号レベルがドミナントである場合、不正データを受信したネットワーク装置はフォーム・エラーを検出してエラーフレームを送信する。これにより不正データは無効化される。
【００４３】
不正データを無効化するための信号は、他のネットワーク装置が不正データを受信確認する前までに送信する必要がある。すなわち、Ｉ／Ｏ制御部４０６が不正データのアクノリッジを受信する前まで（例えば上述のようにＣＲＣ境界）に、不正データを無効化する信号を送信する必要がある。そこでＣＰＵ制御部４０５は、ＣＰＵ制御部４０５とＩ／Ｏ制御部４０６の処理時間を考慮して、ＣＲＣ境界より前の時刻（例えば時刻６０３）において、Ｉ／Ｏ制御部４０６に対してＣＲＣ境界をドミナントレベルにセットするよう指示する。
【００４４】
図７は、ＥＣＵ３０２が不正データを検出して無効化する処理を説明するフローチャートである。以下、図７の各ステップについて説明する。
【００４５】
（図７：ステップＳ７０１）
Ｉ／Ｏ制御部４０６は、ネットワークバス３０１からデータを受信する。本ステップの詳細は後述の図８で説明する。
【００４６】
（図７：ステップＳ７０２〜Ｓ７０４）
ＣＰＵ制御部４０５は、ステップＳ７０１において受信したデータのＩＤフィールドを受信完了した時点（図６の時刻６０１）でステップＳ７０４を実施し、ＣＲＣ境界を受信するよりも前の時点（図６の時刻６０３）でステップＳ７０３を実施する。ステップＳ７０３とＳ７０４の詳細は後述の図９〜図１０で説明する。ステップＳ７０３の後は本フローチャートを終了し、ステップＳ７０４の後はステップＳ７０５に進む。
【００４７】
（図７：ステップＳ７０５）
Ｉ／Ｏ制御部４０６は、不正データのみを無効化してその他のデータに干渉しないようにするため、出力をリセッシブレベルに戻す。
【００４８】
図８は、ステップＳ７０１の詳細を示すフローチャートである。Ｓ８０１においてＩ／Ｏ制御部４０６は、受信したデータの各フィールドを特定する。Ｓ８０２においてＩ／Ｏ制御部４０６は、受信したデータの各フィールド値（ドミナント／リセッシブ）を読み取り、送信開始（ＳＯＦ）から現在までのデータ内容を記憶素子４０７に格納する。
【００４９】
図９は、ステップＳ７０３の詳細を示すフローチャートである。ステップＳ７０３は、不正データを無効化する信号を出力する処理である。以下、図９の各ステップについて説明する。
【００５０】
（図９：ステップＳ９０１）
ＣＰＵ制御部４０５は、ドミナントレベルを出力すべき旨の要求が存在しているか否かを判定する。同要求の有無は、例えば図１０で説明するドミナント出力要求フラグの値に基づき判定する。同フラグがセットされていればステップＳ９０２とＳ９０３に進み、それ以外であれば本フローチャートを終了する。
【００５１】
（図９：ステップＳ９０２）
ＣＰＵ制御部４０５は、ネットワークバス３０１に対してドミナントレベル信号を出力すべき旨の命令を、Ｉ／Ｏ制御部４０６に対して送信する。Ｉ／Ｏ制御部４０６は、同命令を受け取ると、ネットワークバス３０１に対して、不正データを無効化するためのドミナントレベル信号を出力する。
【００５２】
（図９：ステップＳ９０３）
ＣＰＵ制御部４０５は、不正データのみを無効化してその他のデータに干渉しないようにするため、セットされているドミナント出力要求フラグをクリアする。
【００５３】
図１０は、ステップＳ７０４の詳細を示すフローチャートである。ステップＳ７０４は不正データを検出する処理である。以下、図１０の各ステップについて説明する。
【００５４】
（図１０：ステップＳ１００１）
ＣＰＵ制御部４０５は、図７のステップＳ７０１において取り込んだデータ内容に基づき、受信したデータのＩＤを特定する。
【００５５】
（図１０：ステップＳ１００２）
ＣＰＵ制御部４０５は、ステップＳ７０１において受信したデータの今回の受信時刻と前回の受信時刻との間の差分に基づき、当該データの送信周期を算出する。例えばＭａｉｎＣＰＵ４０１が実装している内部タイマなどを用いて時刻の差分を計算することができる。
【００５６】
（図１０：ステップＳ１００３）
ＣＰＵ制御部４０５は、ステップＳ１００２において算出した送信周期と、不正データ判定用ＤＢに登録されている送信周期とを比較する。算出した送信周期が、不正データ判定用ＤＢに登録されている送信周期よりも短い場合は、受信したデータが不正データであると判定する。不正データである場合はステップＳ１００４へ進み、それ以外であればステップＳ１００５へスキップする。本ステップにおけるＣＰＵ制御部４０５の動作は、「不正判定部」に相当する。
【００５７】
（図１０：ステップＳ１００４〜Ｓ１００５）
ＣＰＵ制御部４０５は、ドミナント出力要求フラグをセットする（Ｓ１００４）。ＣＰＵ制御部４０５は、ネットワークバス３０１からデータを受信した時刻を記憶素子４０７に格納する。ステップＳ１００２における前回の受信時刻は、本ステップにおいて記憶素子４０７に格納した時刻を用いる。
【００５８】
＜実施の形態１：まとめ＞
以上のように、本実施形態１に係るＥＣＵ３０２によれば、Ｉ／Ｏ制御部４０６がネットワークバス３０１を監視し、他のＥＣＵが不正データを受信完了する（アクノリッジ）前にこれを検出して無効化することができる。これにより、車載ネットワークに接続している全ての電子制御装置を、なしすまし攻撃から防御することができる。また、車載ネットワーク内にＥＣＵ３０２が１つでも接続されていれば、車載ネットワーク全範囲を防御することができるので、信頼性が確保された車載ネットワークを提供することができる。さらに、ＥＣＵ３０２が不正データを無効化するので、全ての電子制御装置が同等の不正防止機能を備える必要はなく、比較的小さい品質確保の工数で上記機能を実現することができる。これにより、品質確保の作業工程で不具合が入り込む可能性が低くなるため、比較的小さいコストで車載ネットワークをなしすまし攻撃から防衛することができる。
【００５９】
本実施形態１において、ＣＡＮのＣＲＣ境界をドミナントレベルにセットすることにより不正データを無効化することを説明したが、不正データを無効化する手法はこれに限られるものではなく、通信プロトコルに応じてその他適当な手法を用いることができる。例えばＣＡＮにおいては、ドミナントレベルが所定個数連続すると当該データフレームは無効とみなされるので、不正データを検出した時点でＩ／Ｏ制御部４０６がその個数以上連続してドミナントレベル信号をネットワークバス３０１に出力し、これにより不正データを無効化することもできる。
【００６０】
本実施形態１においては、他のＥＣＵがアクナリッジを出力する前までに不正データを無効化すればよいので、ＣＲＣ境界をドミナントレベルにセットすることと同様の効果を発揮することができれば、その他のフィールドをドミナントレベルにセットすることにより不正データを無効化してもよい。ただし、リセッシブレベルとドミナントレベルの優先順位に鑑みて、ドミナントレベルを用いる必要がある。また、不正データを無効化する手法を複数併用してもよい。
【００６１】
本実施形態１において、Ｉ／Ｏ制御部４０６がネットワークバス３０１上を流れるデータをリアルタイムで監視することを説明したが、同様の処理は、例えばＳｕｂＣＰＵ４０２のＩ／Ｏ制御部４１０、Ｉ／Ｏ制御部４０６と同様の機能を実装した専用ＩＣ、などを用いて実現することもできる。あるいは、通信Ｉ／Ｆ４０３が受信途中であるデータをＣＰＵ制御部４０５が参照できるようにすることによって同様の機能を実現することもできる。Ｉ／Ｏ制御部４０６がネットワークバス３０１に対して信号を出力する際も同様に、他の機能部が同様の機能を実現してもよい。Ｉ／Ｏ制御部４０６が取り込んだデータは、例えばＳｕｂＣＰＵ４０２の記憶素子４１１に格納してもよいし、別途追加した専用ＩＣの記憶素子に格納してもよい。
【００６２】
＜実施の形態２＞
実施形態１において、不正データを無効化するＥＣＵ３０２と同等の機能を別のＥＣＵにも実装し、不正防止機能を冗長系にすることができる。これにより、故障などの影響で実施形態１の不正防止機能をＥＣＵ３０２が実施できなくなった場合でも、なりすまし攻撃に対する信頼性を維持することができる。
【００６３】
＜実施の形態３＞
実施形態１〜２において、不正データを無効化する機能がプログラムによって実装されている場合、同プログラムを格納した記憶素子４０７が改竄される攻撃を受けると、同機能が有効に動作しているか否か判別できなくなる。そこで本発明の実施形態３では、不正防止機能を実装したプログラムの改竄を検出する構成例を説明する。その他の構成は実施形態１〜２と同様である。なお記載の便宜上、一部の構成要素については省略した。
【００６４】
図１１は、本実施形態３におけるＥＣＵ３０２の内部構成を示す。本実施形態３において、記憶素子４０７は実施形態１で説明した不正防止機能を実装した不正防止プログラムを格納しており、同プログラムは複数（図１１の例においては４つ）の記憶領域に分かれて格納されている。ＭａｉｎＣＰＵ４０１は、記憶素子４０７内の記憶領域をジャンプしながら、不正防止プログラムを実行する。不正防止プログラムは、単一のプログラムが複数の記憶領域に分かれて格納されているものとして構成することもできるし、複数のプログラムが次のプログラムを呼び出すものとして構成することもできる。以下では４つのプログラム４０７１〜４０７４がこの順序で次のプログラムを呼び出すように構成されているものと想定する。
【００６５】
ＭａｉｎＣＰＵ４０１のＩ／Ｏ制御部４０６とＳｕｂＣＰＵ４０２のＩ／Ｏ制御部４１０は内部バスを介して接続されている。ＣＰＵ制御部４０５は、後述の図１２で説明するフローチャートにしたがって、不正防止プログラムが改竄されているか否かを監視するための監視信号を、Ｉ／Ｏ制御部４０６に出力させる。Ｉ／Ｏ制御部４０６は、ＣＰＵ制御部４０５からの命令にしたがって、Ｉ／Ｏ制御部４１０に対して監視信号を出力する。
【００６６】
不正防止プログラムは、全ての記憶領域に格納された処理を完了すると、監視信号の信号レベル（Ｈｉ／Ｌｏ）を切り替えるように構成されている。処理が完了する前のいずれかの記憶領域が改竄された場合、記憶領域間のジャンプが正常に動作せず途中で中断し、不正防止プログラムは監視信号の信号レベルを切り替えないまま終了する。ＣＰＵ制御４０９は、監視信号の信号レベル（Ｈｉ／Ｌｏ）が不正防止プログラムの実行周期毎に切り替わっているか否かを監視することにより、記憶素子４０７内の不正防止プログラムが改竄されたことを検出する。
【００６７】
ＣＰＵ制御部４０５は、所定周期でプログラム４０７１を起動する。プログラム４０７２〜プログラム４０７４は、この順序で次のプログラムを呼び出す。プログラム４０７４は、監視信号の信号レベルを反転させる命令を出力するように構成されている。ＣＰＵ制御部４０５は、プログラム４０７４の記述にしたがって、監視信号の信号レベルを反転させる命令をＩ／Ｏ制御部４０６に対して出力する。
【００６８】
ＣＰＵ制御部４０９は、不正防止プログラム４０７１と同じ周期で、監視信号を監視するためのプログラムを起動する。監視信号の信号レベルが前回実行時から反転していない場合、記憶素子４０７の全部または一部が改竄される攻撃を受けたと判定し、その旨を示すエラー信号を出力する。
【００６９】
図１２は、ＣＰＵ制御部４０５が不正防止プログラム４０７１〜４０７４を実行する手順を説明するフローチャートである。不正防止プログラム４０７１〜４０７４は、図１２に示す順序で後続のプログラムを起動するように構成されている。不正防止プログラム４０７４は、監視信号を反転する。
【００７０】
以上の説明においては、ＳｕｂＣＰＵ４０２がＭａｉｎＣＰＵ４０１を監視することを説明したが、ＳｕｂＣＰＵ４０２と同様の機能を、ＣＰＵ制御部とＩ／Ｏ制御部を有する専用ＩＣ上に実装することもできる。
【００７１】
＜実施の形態４＞
実施形態３においては、ＥＣＵ３０２が搭載しているＳｕｂＣＰＵ４０２が記憶素子４０７内の不正防止プログラムの改竄を検出することを説明した。本発明の実施形態４では他のＥＣＵが不正防止プログラムの改竄を検出する構成例を説明する。その他の構成は実施形態３と同様である。
【００７２】
図１３は、本実施形態４におけるＥＣＵ３０２と監視ＥＣＵ１３１の内部構成を示す図である。本実施形態４において、ＥＣＵ３０２内のＳｕｂＣＰＵ４０２は、記憶素子４０７の改竄を監視する機能を備えていない。監視ＥＣＵ１３１は、ネットワークバス３０１に接続されておらず、ＭａｉｎＣＰＵ１３２とＳｕｂＣＰＵ１３３を備える。
【００７３】
ＭａｉｎＣＰＵ１３２は、ＣＰＵ制御部１３４とＩ／Ｏ制御部１３５を備える。Ｉ／Ｏ制御部１３５は、Ｉ／Ｏ制御部４０６から監視信号を受け取る。ＣＰＵ制御部１３４は、実施形態３におけるＳｕｂＣＰＵ４０２と同様の手法により、監視信号に基づき記憶素子４０７の全部または一部が改竄される攻撃を検出する。
【００７４】
以上の説明においては、監視用ＥＣＵ１３１のＣＰＵ制御部１３４とＩ／Ｏ制御部１３５が記憶素子４０７の改竄を監視することを説明したが、ＳｕｂＣＰＵ１３３が同様の機能を備えることもできる。また、ＣＰＵ制御部１３４およびＩ／Ｏ制御部１３５と同様の機能を有する専用ＩＣを監視ＥＣＵ１３１内に追加して、記憶素子４０７の改竄を監視することもできる。
【００７５】
図１３において、監視ＥＣＵ１３１はネットワークバス３０１に接続されていないことを説明したが、これは、監視用ＥＣＵ１３１がネットワークバス３０１を介して攻撃されないようにするためのものである。したがって監視ＥＣＵ１３１はネットワークバスに接続しないことが望ましいが、監視ＥＣＵ１３１をネットワークバス３０１に接続した構成においても、記憶素子４０７を監視することはできる。
【００７６】
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。上記実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることもできる。また、ある実施形態の構成に他の実施形態の構成を加えることもできる。また、各実施形態の構成の一部について、他の構成を追加・削除・置換することもできる。
【００７７】
例えば各実施形態において、例えば車載ネットワークのように、ＥＣＵ３０２がネットワークバス３０１からデータを受信完了するまで、ＣＰＵ制御部４０５がそのデータを参照できないようなネットワークを想定したが、一般的なネットワークにおける電子制御装置に対して本発明を適用することを妨げるものではない。
【００７８】
上記各構成、機能、処理部、処理手段等は、それらの一部や全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に格納することができる。
【符号の説明】
【００７９】
３０１：ネットワークバス、３０２：ＥＣＵ、４０１：ＭａｉｎＣＰＵ、４０２：ＳｕｂＣＰＵ、４０３：通信Ｉ／Ｆ、４０５：ＣＰＵ制御部、４０６：Ｉ／Ｏ制御部、４０７：記憶素子、４０８：通信制御部。
【図１】
2014236248.tif 000003
【図２】
2014236248.tif 000004
【図３】
2014236248.tif 000005
【図４】
2014236248.tif 000006
【図５】
2014236248.tif 000007
【図６】
2014236248.tif 000008
【図７】
2014236248.tif 000009
【図８】
2014236248.tif 000010
【図９】
2014236248.tif 000011
【図１０】
2014236248.tif 000012
【図１１】
2014236248.tif 000013
【図１２】
2014236248.tif 000014
【図１３】
2014236248.tif 000015