以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の監視システムを示す図である。監視システム1は、複数の電子装置を有する。各電子装置は、ネットワーク5を介して通信可能である。電子装置は、ECUでもよい。ネットワーク5は、CANでもよい。CANは、例えば、産業機器、農業機械、医療機器および自動車などにおける各部の動作制御に用いられる。各電子装置は、相互にメッセージを送受信し、自動車などの動作を制御する。例えば、ネットワーク5が自動車に設けられる場合、ネットワーク5を車載ネットワークと呼べる。
メッセージは、制御種別に応じた識別情報(ID)および各部に対する制御内容の情報を含む。何れかの電子装置が送信したメッセージは、ネットワーク5に接続された各装置に対してブロードキャスト(同報送信)される。各電子装置は、自身が処理すべきIDを予め保持しており、受信したメッセージを自身で処理するか否かを、当該メッセージに含まれるIDによって判別する。
監視システム1は、ネットワーク5に送信されたメッセージを検証し、不正な電子装置が接続されているか否かを監視する機能を備えている。監視システム1は、計算装置10,10a、検出装置20および電子装置30,30a,30bを有する。ネットワーク5における監視機能は、計算装置10,10aおよび検出装置20によって提供される。
計算装置10は、電子装置30に接続されている。計算装置10は、電子装置30の外部に設けられてもよいし、電子装置30の一部でもよい。計算装置10は、ネットワーク5と電子装置30との間に設けられ、ネットワーク5と電子装置30との間でメッセージを中継する。計算装置10は、記憶部11および演算部12を有する。
記憶部11は、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、フラッシュメモリなどの不揮発性記憶装置でもよい。記憶部11は、演算部12により生成される各種データを記憶する。
演算部12は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。演算部12はプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。
演算部12は、電子装置30により送信されたメッセージM1をネットワーク5に転送する。演算部12は、メッセージM1をネットワーク5に転送する際に、メッセージM1に基づいて、メッセージM1に対応する所定のコードを生成する。例えば、当該コードは、メッセージ認証コード(MAC)でもよい。当該コードは、メッセージM1に基づく所定の演算によって算出されるハッシュ値でもよい。演算部12は、ある1つのIDについて、前回送信されたメッセージに対応するコードと、今回送信されたメッセージM1とに基づいて、メッセージM1に対応するコードを算出してもよい。演算部12は、メッセージM1のIDに対応づけて、生成したコードを記憶部11に格納する。
演算部12は、電子装置30以外の電子装置(例えば、電子装置30aまたは電子装置30b)が送信したメッセージを、ネットワーク5を介して受信する。演算部12は、記憶部11に記憶されたIDと同じIDのメッセージを受信した場合、ネットワーク5に不正な電子装置が接続されているか否かの検証を要求する検証要求メッセージ(単に検証要求と称することがある)を送信する。検証要求は、特定ID(例えば、“IDx”)によって識別される。また、検証要求は、記憶部11に記憶された検証対象のID、および、当該検証対象のIDに対応するコードを含む。検証要求は、通常のメッセージよりも高い優先度で送信されるメッセージである。検証要求は、検出装置20によって処理される(計算装置で受信されても破棄される)。演算部12は、検証要求を送信した後、記憶部11に記憶されている該当のIDに対応するコード(該当のIDに対して保持されたコード)を初期化する(例えば、当該コードを消去する、または、初期値に設定するなど)。初期化した結果、計算装置10では、当該IDに対応するコードを保持していない状態となる。
なお、計算装置10aも、計算装置10と同様に、記憶部11と同様の機能を有する記憶部、および、演算部12と同様の機能を有する演算部を有する。計算装置10aも、計算装置10と同様に、ネットワーク5および電子装置30aに接続され、ネットワーク5と電子装置30aとの間でメッセージを中継する。
検出装置20は、ネットワーク5に接続されている。検出装置20は、記憶部21、受信バッファ22および演算部23を有する。記憶部21および受信バッファ22は、記憶部11と同様に、RAMなどの揮発性記憶装置でもよいし、フラッシュメモリなどの不揮発性記憶装置でもよい。記憶部21は、演算部23により生成される各種データを記憶する。受信バッファ22は、検出装置20が受信したメッセージを一時的に記憶する。受信バッファ22は、メッセージのIDごとに設けられる。
演算部23は、演算部12と同様に、CPU、DSP、ASIC、FPGAなどを含み得る。演算部23はプログラムを実行するプロセッサであってもよい。演算部23は、ネットワーク5から受信したメッセージを受信バッファ22に格納する。演算部23は、受信バッファ22に格納されたメッセージに基づいて、当該メッセージに対応する所定のコードを生成し、記憶部21に格納する。演算部23は、演算部12と同じ演算を用いて、メッセージごとのコードを生成する。
演算部23は、ネットワーク5から受信した検証要求に応じて、メッセージごとのコードの検証を行う。ここで、演算部23によるコードの検証を適切に行うために、演算部12,23は、コードを生成する演算に共通の鍵を用いる。例えば、演算部23は、演算用の鍵を予め生成し、計算装置10,10aに予め配布しておく。演算部23は、メッセージのIDおよびコードを検証要求から取得し、演算部23自身が生成した当該IDおよびコードと照合する。両コードが一致すれば正常であり、両コードが不一致であれば異常である。演算部23は、異常を検出した場合、不正な電子装置がネットワーク5に接続されている可能性がある旨を報知する(例えば、検出装置20に接続されたディスプレイに不正な電子装置が存在している旨を表示するなど)。
電子装置30,30a,30bは、例えばECUであり、自動車や機械などの各部の動作を制御する。電子装置30は、記憶部31および演算部32を有する。記憶部31は、RAMなどの揮発性記憶装置でもよいし、フラッシュメモリなどの不揮発性記憶装置でもよい。記憶部31は、演算部32により生成される各種データを記憶する。演算部32は、演算部12と同様に、CPU、DSP、ASIC、FPGAなどを含み得る。演算部32はプログラムを実行するプロセッサであってもよい。電子装置30a,30bも電子装置30と同様に記憶部および演算部を有する。ここで、電子装置30,30aは、正規の電子装置である。電子装置30,30aそれぞれには、計算装置10,10aが接続されている。一方、電子装置30bは、不正な電子装置であり、何れの計算装置も接続されていない。例えば、計算装置10および検出装置20は、下記の手順により不正な電子装置30bがネットワーク5に接続されていることを検出する。
まず、電子装置30がメッセージM1を送信する。メッセージM1は、ID“ID1”を含む。すると、演算部12は、メッセージM1の内容に対する所定の演算によりコード“Code1”を生成し、メッセージM1のID“ID1”に対応づけて記憶部11に格納する。演算部12は、メッセージM1をネットワーク5側へ転送する(ステップS1)。前述のように、各メッセージはネットワーク5内でブロードキャストされる。
例えば、計算装置10aは、メッセージM1を受信する。計算装置10aは、受信したメッセージM1のID“ID1”を確認し、電子装置30aが送信するIDのメッセージでないと判断し、メッセージM1を電子装置30aに転送する(メッセージM1を素通りさせる)。電子装置30aは、メッセージM1のIDに応じてメッセージM1に応じた制御を行う。電子装置30aは、メッセージM1が自身で処理すべきIDのメッセージでなければ、メッセージM1を破棄する。
また、検出装置20は、メッセージM1を受信する。検出装置20は、全てのIDのメッセージをIDごとの受信バッファに格納する。このため、演算部23は、受信したメッセージM1を受信バッファ22に格納する。
次に、電子装置30bがメッセージM2を送信する。メッセージM2は、ID“ID1”を含む。演算部12は、メッセージM2を受信する。演算部23も、メッセージM2を受信し、受信バッファ22に格納する。演算部23は、ID“ID1”を含むメッセージとして、メッセージM2の前に受信したメッセージM1を受信バッファ22から取得し、メッセージM1に対応するコード“Code1”を生成する。演算部23は、メッセージM1のID“ID1”に対応づけて、生成したコード“Code1”を記憶部21に格納する(ステップS2)。
演算部12は、メッセージM2に含まれるID“ID1”が、記憶部11に格納されたID“ID1”に一致していることを検出する。すると、演算部12は、ID“ID1”に対応するコード“Code1”を記憶部11から取得し、ID“ID1”およびコード“Code1”を含む検証要求M3を送信する(ステップS3)。そして、演算部12は、記憶部11に記憶されたID“ID1”に対するコード“Code1”を初期化する(ステップS4)。計算装置10は、ID“ID1”に対するコードを初期化した結果、ID“ID1”に対するコードを保持していない状態となる。
演算部23は、検証要求M3を受信する。すると、検証要求M3に含まれるID“ID1”およびコード“Code1”を抽出し、記憶部21に記憶されたID“ID1”に対応するコード“Code1”と照合する。この場合、両コードは一致しているので、演算部23は、メッセージM1までは正常なメッセージであると判断する。
続いて、演算部23は、記憶部21に記憶されたID“ID1”のコード“Code1”を初期化し、受信バッファ22に記憶されたメッセージM2に対応するコードを生成する。そして、例えば、演算部23は、検証対象のID“ID1”を指定した検証要求の送信要求を送信する。
ここで、検証要求の送信要求は、指定したIDに対応する検証要求の送信を、各計算装置に対して要求するメッセージである。検証要求の送信要求は、検証要求の送信を要求するものであり、単に「送信要求」と呼ばれてもよい。検証要求の送信要求は、検証要求と同様に、検証要求の送信要求を示す特定ID(例えば、“IDy”)によって識別される。検証要求の送信要求は、検証要求および通常のメッセージよりも高い優先度で送信されるメッセージである。各計算装置は、検証要求の送信要求で指定されたID(例えば、“ID1”)に対応するコードを保持している場合、当該IDおよび当該コードを含む検証要求を、通常のメッセージよりも優先して送信する。
ところが、上記の例では、メッセージM2は、電子装置30bにより送信されたものである。電子装置30bは、計算装置を介さずにネットワーク5に接続されている。このため、検出装置20は、検証要求の送信要求に対する応答(検証要求)を受信しないことになる。なぜなら、計算装置10は、ID“ID1”に対するコードを初期化済であるし、電子装置30bが先に送信したメッセージM2に対するコードを保持している計算装置が存在していないからである。すなわち、その後、検証要求の送信要求に対する検証要求を受信しないまま、検出装置20は、何れかの電子装置(電子装置30,30a,30bの何れか)が送信したメッセージを受信する。この場合、演算部23は、計算装置を有していない不正な電子装置(本例では電子装置30b)がネットワーク5に接続されていると検出する。演算部23は、異常を検出した場合、不正な電子装置がネットワーク5に接続されている可能性がある旨をユーザに報知する(例えば、検出装置20に接続されたディスプレイに不正な電子装置が存在している旨を表示するなど)。
なお、検出装置20は、送信要求の送信後、電子装置30bから、偽の検証要求を受信することも考えられる(電子装置30bが検証要求を不正に送出するケース)。この場合でも、検出装置20は、電子装置30bとコード検証用の鍵を共有していないため、コード検証がエラーとなり、不正な電子装置30bがネットワーク5に接続されていることを検出できる。
このように、監視システム1によれば、不正な電子装置を効率的に検出できる。特に、計算装置10は、計算装置10に接続された電子装置30が送信したメッセージM1のIDと同じIDを含むメッセージM2をネットワーク5から受信したタイミングで、メッセージM1に対応するコードを含む検証要求を送信する。このため、メッセージごとに当該メッセージに対応するMACを送信する方法に比べて、メッセージごとにMACを送信しなくてもよくなり、通信量を低減できる。更に、計算装置10は、検証要求M3の送信後、記憶部11に記憶されたコードを初期化するので、検出装置20から検証要求の送信要求を受信しても、検証済のコードを含む余計な検証要求を送信せずに済む。こうして、監視システム1は、不正な電子装置を効率的に検出できる。
[第2の実施の形態]
図2は、第2の実施の形態の車載システムを示す図である。第2の実施の形態の車載システムは、自動車に設けられる。車載システムは、複数のECU装置を含む。複数のECU装置それぞれは、自動車のエンジン、ブレーキ、自動変速、エアコン、表示パネルなど自動車が備える種々の装備の制御に用いられる。
第2の実施の形態の車載システムは、計算装置100,100a,100b、検出装置200およびECU装置300,300a,300bを含む。計算装置100,100a,100bおよび検出装置200は、CAN6に接続されている。ECU装置300は、計算装置100に接続されている。ECU装置300aは、計算装置100aに接続されている。ECU装置300bは、計算装置100bに接続されている。ECU装置300,300a,300bは、それぞれ計算装置100,100a,100bを介してCAN6に接続されているということもできる。ECU装置300,300a,300bは、計算装置100,100a,100bおよびCAN6を介して、CANプロトコルにより相互に通信可能である。
計算装置100,100a,100bは、それぞれECU装置300,300a,300bに接続され、CAN6とECU装置300,300a,300bとの間でメッセージを中継する。計算装置100,100a,100bは、第1の実施の形態の計算装置10,10aの一例である。
検出装置200は、計算装置100,100a,100bと連携して、不正なECU装置がCAN6に接続されているか否かを検出する。検出装置200は、不正なECU装置が接続されている可能性がある場合、ユーザに対して、その旨を通知する。検出装置200は、第1の実施の形態の検出装置20の一例である。
ECU装置300,300a,300bは、自動車の各種装備の制御を行う。ECU装置300は、計算装置100に接続されており、計算装置100を介して、CAN6に対してメッセージを送信したり、CAN6からメッセージを受信したりする。ECU装置300aは、計算装置100aに接続されており、計算装置100aを介して、CAN6に対してメッセージを送信したり、CAN6からメッセージを受信したりする。ECU装置300bは、計算装置100bに接続されており、計算装置100bを介して、CAN6に対してメッセージを送信したり、CAN6からメッセージを受信したりする。ECU装置300,300a,300bは、他のECU装置から受信したメッセージに応じた制御を行ったり、他のECU装置に対して制御用のメッセージを送信したりする。ECU装置300,300a,300bは、第1の実施の形態の電子装置30,30a,30bの一例である。ECU装置300,300a,300bは、電子制御装置と呼ばれてもよい。
CAN6には、新たなECU装置を接続することができる。例えば、ECU装置300cを、CAN6に接続可能である。ただし、ECU装置300cが不正なメッセージを送信するECU装置(不正ECU装置)であることもある。この場合、ECU装置300cにより自動車の安全な走行を妨げるおそれがある。例えば、ECU装置300cが、ECU装置300,300a,300bの何れかまたは複数に対して異常な制御を実行させるメッセージを送信すると、自動車の走行中に適切な速度を保てない、ユーザが適切な運転操作を行えないなどの被害が生じ得る。また、このような制御異常は、重大な事故に繋がるおそれもある。
そこで、上記のように、第1の実施の形態の車載システムでは、計算装置100,100a,100bおよび検出装置200により、不正なECU装置300cがCAN6に接続されていることを検出する機能を提供する。
図3は、計算装置のハードウェア例を示す図である。計算装置100は、制御部101、記憶部102、MAC生成部103、ECU−IF(InterFace)104、ネットワークIF105、メッセージ受信部106およびMAC蓄積部107を有する。各ユニットは計算装置100のバスに接続されている。計算装置100a,100bも計算装置100と同様のユニットを用いて実現できる。
制御部101は、計算装置100の情報処理を制御する。制御部101は、プロセッサでもよく、マルチプロセッサであってもよい。制御部101は、例えばCPU、DSP、ASICまたはFPGAなどである。制御部101は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
記憶部102は、計算装置100の主記憶装置である。記憶部102は、制御部101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムを記憶する。また、記憶部102は、制御部101による処理に用いる各種データを記憶する。なお、計算装置100は、記憶部102とは別個に、OSのプログラムやアプリケーションプログラムを記憶する、フラッシュメモリなどの不揮発性の記憶装置を備えてもよい。
MAC生成部103は、計算装置100に接続されているECU装置300が送信したメッセージに対応するメッセージ認証コード(MAC)を生成し、MAC蓄積部107に格納する。第2の実施の形態の例では、MACはある値(MAC値と称する)を示すビット列で表わされる。MAC値の生成方法の詳細は、後述される。
ECU−IF104は、ECU装置300と接続される接続インタフェースである。ECU−IF104は、ECU装置300からのメッセージの受信やECU装置300へのメッセージの転送に用いられる。計算装置100は、ECU−IF104を介して、ECU装置300と直接接続されているともいえる。
ネットワークIF105は、CAN6と接続される接続インタフェースである。ネットワークIF105は、CAN6からのメッセージの受信や、CAN6へのメッセージの送信に用いられる。
メッセージ受信部106は、ECU−IF104やネットワークIF105を用いて、メッセージを受信し、メッセージの内容を解析する。
MAC蓄積部107は、MAC生成部103が生成したMAC値を、メッセージごとのIDに対応づけて記憶する。
図4は、検出装置のハードウェア例を示す図である。検出装置200は、制御部201、記憶部202、MAC生成部203、MAC比較部204、ネットワークIF205、メッセージ受信部206、MAC蓄積部207および異常通知部208を有する。
制御部201は、検出装置200の情報処理を制御する。制御部201は、プロセッサでもよく、マルチプロセッサであってもよい。制御部201は、例えばCPU、DSP、ASICまたはFPGAなどである。制御部201は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
記憶部202は、検出装置200の主記憶装置である。記憶部202は、制御部201に実行させるOSのプログラムやアプリケーションプログラムを記憶する。また、記憶部202は、制御部201による処理に用いる各種データを記憶する。なお、検出装置200は、記憶部202とは別個に、OSのプログラムやアプリケーションプログラムを記憶するフラッシュメモリなどの不揮発性の記憶装置を備えてもよい。
MAC生成部203は、検出装置200が受信したメッセージに対応するMAC値を生成し、MAC蓄積部207に格納する。MAC値の生成方法の詳細は、後述される。
MAC比較部204は、あるIDについて、MAC蓄積部207に記憶されたMAC値と、検証要求メッセージに含まれるMAC値とを比較する。MAC比較部204は、MAC値の比較に応じて、不正なECU装置がCAN6に接続されているか否かを判定する。MAC比較部204は、不正なECU装置がCAN6に接続されていると判定すると、異常通知部208に、異常通知を行うよう指示する。
ネットワークIF205は、CAN6と接続される接続インタフェースである。ネットワークIF205は、CAN6からのメッセージの受信や、CAN6へのメッセージの送信に用いられる。
メッセージ受信部206は、ネットワークIF205を用いて、メッセージを受信し、メッセージの内容を解析する。
MAC蓄積部207は、MAC生成部203により生成されたMAC値を、メッセージごとのIDに対応づけて記憶する。
異常通知部208は、MAC比較部204による異常通知の指示に応じて、不正なECU装置が接続されている旨を自動車の運転者や保守員などに通知する。通知の方法としては、例えば、検出装置200が備えるエラーLED(Light Emitting Diode)を点灯させる、検出装置200に接続されたディスプレイに不正なECU装置が接続されている旨を文字表示させる、などの方法が考えられる。
図5は、ECU装置のハードウェア例を示す図である。ECU装置300は、制御部301、記憶部302、通信データ生成部303、ネットワークIF304、駆動制御部305およびセンサ制御部306を有する。
制御部301は、ECU装置300の情報処理を制御する。制御部301は、プロセッサでもよく、マルチプロセッサであってもよい。制御部301は、例えばCPU、DSP、ASICまたはFPGAなどである。制御部301は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
記憶部302は、ECU装置の主記憶装置である。記憶部302は、制御部301に実行させるOSのプログラムやアプリケーションプログラムを記憶する。また、記憶部302は、制御部301による処理に用いる各種データを記憶する。なお、ECU装置300は、記憶部302とは別個に、OSのプログラムやアプリケーションプログラムを記憶する、フラッシュメモリなどの不揮発性の記憶装置を備えてもよい。
通信データ生成部303は、通信データ(すなわち、メッセージ)を生成する。
ネットワークIF304は、計算装置100に接続されている。ネットワークIF304は、計算装置100を介したCAN6へのメッセージの送信、および、CAN6からのメッセージの受信に用いられる。
駆動制御部305は、自動車が備える駆動機構の駆動を制御する。例えば、駆動制御部305は、他のECU装置から受信したメッセージにより、駆動機構の駆動方法を変更することもある。また、駆動制御部305は、現在の駆動状況などの情報を含むメッセージを通信データ生成部303により生成させ、ネットワークIF304を用いて他のECU装置に送信することもある。
センサ制御部306は、自動車が備えるセンサの動作を制御する。例えば、センサ制御部306は、他のECU装置から受信したメッセージにより、センサの動作方法を変更することもある。また、センサ制御部306は、センシング結果などの情報を含むメッセージを通信データ生成部303により生成させ、ネットワークIF304を用いて他のECU装置に送信することもある。
なお、計算装置100、検出装置200およびECU装置300それぞれは、プロセッサ(制御部に相当)およびメモリ(記憶部に相当)を有するコンピュータにより実現されてもよい。
図6は、計算装置により保持される情報の例を示す図である。図6(A)は、記憶部102に格納される受信バッファ110を例示している。図6(B)は、MAC蓄積部107に格納されるMAC値バッファ120を例示している。
受信バッファ110は、計算装置100が受信したメッセージを一時的に格納しておくバッファである。MAC値バッファ120は、メッセージのIDごとに、前回のMAC値(旧MAC値)と、今回のMAC値(新MAC値)とを記憶するバッファである。
例えば、受信バッファ110には、IDが“Ms1”、旧MAC値が“A1”、新MAC値が“A2”という情報が登録されている。これは、ID“Ms1”を含むメッセージに対して、旧MAC値が“A1”であり、新MAC値が“A2”であることを示す。後述するように、処理の過程で、新MAC値の項目に格納された値が、旧MAC値の項目に格納されることになるため、旧MAC値の項目の設定値と新MAC値の項目の設定値とが同じ値であることもある。例えば、ID“Ms2”のレコードでは、旧MAC値の項目および新MAC値の項目の何れの設定値も“B1”である。なお、以下の説明では、旧MAC値の項目に設定される値を単に旧MAC値と称することがある。また、新MAC値の項目の設定される値を単に新MAC値と称することがある。
図7は、検出装置により保持される情報の例を示す図である。図7(A)は、記憶部202に格納される受信バッファ210を例示している。図7(B)は、MAC蓄積部207に格納されるMAC値バッファ220を例示している。
受信バッファ210は、検出装置200が受信したメッセージを、メッセージのIDごとに一時的に格納しておくバッファである。例えば、受信バッファ210には、IDが“Ms1”、受信メッセージが“Msg1”という情報が登録されている。これは、ID“Ms1”に対して、メッセージ本体“Msg1”が受信バッファ210に格納されていることを示す。受信バッファ210には、第2の実施の形態の車載システムでECU装置300,300a,300bにより送信され得るメッセージのIDごとに、所定のバッファ領域(受信メッセージを格納するための記憶領域)が予め確保されている。
MAC値バッファ220は、メッセージのIDごとに、旧MAC値と、新MAC値とを記憶するバッファである。例えば、MAC値バッファ220には、IDが“Ms1”、旧MAC値が“A1”、新MAC値が“A2”という情報が登録されている。これは、ID“Ms1”を含むメッセージに対して、旧MAC値が“A1”であり、新MAC値が“A2”であることを示す。
図8は、メッセージの例を示す図である。図8(A)は、第2の実施の形態の車載システムで用いられるメッセージフォーマットを例示している。図8(B)は、MAC検証要求メッセージ(単に、MAC検証要求と称することがある)を例示している。図8(C)は、MAC検証要求の送信要求メッセージ(単に、送信要求と称することがある)を例示している。
図8(A)において、メッセージフォーマットは、ID、メッセージ長、データおよびエラーチェックのフィールドを含む。IDフィールドには、メッセージのIDが設定される。メッセージ長フィールドには、メッセージのサイズが設定される。データフィールドは、自動車内の各種装備に対する制御内容の情報が設定される。エラーチェックフィールドには、エラーチェック用の符号(エラーチェックコード)が設定される。
図8(B)のMAC検証要求メッセージは、上記メッセージフォーマットを用いて、計算装置100,100a,100bにより生成される。例えば、IDフィールドには“X”が設定される。ID“X”は、MAC検証要求メッセージを識別するIDとして予め定められたIDである。メッセージ長フィールドには、“Len1”が設定される。データフィールドには、検証対象とするID(検証対象IDと称する)およびMAC値が設定される。エラーチェックフィールドには、エラーチェックコードが設定される。
図8(C)のMAC検証要求の送信要求メッセージは、上記メッセージフォーマットを用いて、検出装置200により生成される。例えば、IDフィールドには、“Y”が設定される。ID“Y”は、MAC検証要求の送信要求メッセージを識別するIDとして予め定められたIDである。メッセージ長フィールドには、“Len2”が設定される。データフィールドには、検証対象IDが設定される。エラーチェックフィールドには、エラーチェックコードが設定される。
ここで、メッセージを送信する際の優先度は、IDによって決定される。具体的には、「緊急メッセージのID」の優先度が最も高く、次いで「MAC検証要求の送信要求のID“Y”」、「MAC検証要求のID“X”」、「一般メッセージのID」の順に、優先度が低くなっていく。なお、「緊急メッセージ」はシステムの非常時に送信されるメッセージである。また、MAC検証要求の送信要求は、MAC検証要求の送信を要求するものであり、単に「送信要求」と呼ばれてもよい。
図9は、MAC値の計算例を示す図である。計算装置100は、次のようにしてMAC値を計算する。なお、計算装置100a,100bおよび検出装置200も、計算装置100と同様にして、各メッセージのMAC値を計算する。
計算装置100は、MAC蓄積部107により、IDごとの旧MAC値および新MAC値を記憶している。MAC生成部103は、あるIDのメッセージ(受信メッセージと称する)をECU装置300から受信すると次の処理を実行する。
まず、MAC生成部103は、受信メッセージのIDフィールド、データフィールドの設定、および、シーケンス番号を用いた第1段階の演算により、受信メッセージ単体に対応するMAC値(受信メッセージMAC値と称する)を生成する。ただし、IDフィールドをMAC計算の対象としなくてもよい。ここで、シーケンス番号は、CAN6に送信されたメッセージのカウント数である。すなわち、シーケンス番号は、CAN6上を流れるメッセージ数に同期する。具体的には、計算装置100は、メッセージをECU300、または、CAN6から受信すると、無条件でカウントアップする(例えば、不正なECU装置から送信されたメッセージを受信してもカウントアップする)。また、検出装置200は、メッセージをCAN6から受信するごとに検出装置200のカウンタをカウントアップする。これにより、各計算装置および検出装置200のカウンタ値は同期される。例えば、制御部101は、ECU装置300が送信したメッセージおよびCAN6から受信するメッセージのIDごとにシーケンス番号をカウントし、記憶部102に格納し得る。例えば、IDごとのシーケンス番号は、MAC値の初期化の際に初期値(例えば、“0”またはそれ以外の所定値)に設定され得る。
MAC生成部103は、第1段階の演算として、例えば、H−MAC(Hash-based MAC)演算や、C−MAC(Cipher-based MAC)演算を利用できる。MAC生成部103は、受信メッセージMAC値に基づく第2段階の演算により、新MAC値を生成する。具体的には下記の通りである。
MAC生成部103は、該当のIDのメッセージに対して、第2段階の演算により前回生成したMAC値(旧MAC値)を、MAC蓄積部107から取得する。そして、MAC生成部103は、旧MAC値と今回の受信メッセージに対して生成した受信メッセージMAC値とを用いた第2段階の演算により、新MAC値を生成する。例えば、旧MAC値と受信メッセージMAC値とを用いた所定の演算(例えば、両MAC値を結合して1つの値とする、または、両MAC値が同一桁数であれば同一桁のビット同士の論理積をとるなど)の結果を、ハッシュ関数hに入力することが考えられる。このとき、MAC生成部103は、ハッシュ関数hに対して、検出装置200から配布されたMAC検証鍵も入力する。こうして、MAC生成部103は、新MAC値を生成する。この場合、第2段階の演算を、H−MAC演算と考えてもよい。今回生成された新MAC値は、次回のMAC生成の際に、旧MAC値としてMAC生成の演算に利用される。例えば、第2段階の演算の方法として、SHA−256(Secure Hash Algorithm 256)などのアルゴリズムを用いることができる。
ここで、以下の説明において、単にMAC値、旧MAC値、新MAC値という場合、上記の第2段階の演算によって算出されるMAC値を示すものとする。
なお、あるIDのメッセージに対する初回のMAC生成の際には、MAC蓄積部107に旧MAC値が記憶されていない。この場合、MAC生成部103は、旧MAC値を用いずに第2段階の演算をおこなってもよいし、旧MAC値を所定の初期値(例えば、全て“0”の所定桁のビット列)として第2段階の演算を行ってもよい。
図10は、計算装置のメッセージ受信時の処理例を示す図である。計算装置100は、ECU装置300から受信したメッセージM11に対して、図9で例示した演算により、新MAC値を生成する。
具体的には、計算装置100は、ECU装置300からメッセージM11を受信し、受信バッファ110に格納する。計算装置100は、MAC生成部103の機能により、メッセージM11に対して求めた受信メッセージMAC値と、MAC蓄積部107に記憶された旧MAC値とを用いて、メッセージM11に対応する新MAC値を生成する。計算装置100は、生成した新MAC値をMAC蓄積部107に格納する。そして、計算装置100は、メッセージM11をCAN6側に転送する。計算装置100は、受信バッファ110に格納されたメッセージM11を破棄する。
図11は、検出装置のメッセージ受信時の処理例を示す図である。検出装置200は、CAN6からメッセージM11を受信する。メッセージM11は、ECU装置300により送信されたメッセージである。また、メッセージM11は、メッセージM11に含まれるIDについて、検出装置200により受信された最新メッセージである。
検出装置200は、メッセージM11を受信バッファ210に格納する。ここで、受信バッファ210には、メッセージM11と同じIDで、メッセージM11よりも1つ前に受信されたメッセージM10が格納されている。メッセージM10は、メッセージM11よりも1つ前に送信されたメッセージM11と同一IDの旧メッセージである。
検出装置200は、メッセージM11(最新メッセージ)を受信すると、MAC生成部203により、メッセージM10(旧メッセージ)に対応する新MAC値を生成する。生成方法は、図9で例示した方法と同じである。MAC生成部203は、新MAC値を生成する際に、計算装置100,100a,100bに配布したMAC検証鍵を用いる。検出装置200は、生成した新MAC値をMAC蓄積部207に格納する。検出装置200は、受信バッファ210に格納されたメッセージM10(旧メッセージ)を破棄する。すなわち、検出装置200において、メッセージM10に対応する新MAC値が生成された時点では、メッセージM10と同一IDの最新メッセージであるメッセージM11が、受信バッファ210に、格納されていることになる。
図12は、同一IDのメッセージ受信時の処理例(その1)を示す図である。図12では、次の順番でメッセージが送信される場合を例示している。1番目に、ECU装置300はメッセージM21を送信する。2番目に、ECU装置300は、メッセージM22を送信する。3番目に、ECU装置300aはメッセージM23を送信する。ここで、メッセージM21,M22,M23のIDフィールドには、同じIDが設定されている。4番目に、計算装置100は、MAC検証要求M24を送信する。このとき、計算装置100,100aおよび検出装置200は次のような処理を行う。なお、計算装置100bおよびECU装置300bについては、着目するIDのメッセージに関与しない(該当IDのメッセージを送信せず、該当IDのメッセージを受信しても破棄する)ため、図12の例の説明では省略する。
計算装置100は、ECU装置300からメッセージM21を受信する。計算装置100は、メッセージM21に対応するMAC値“V1”を生成し、メッセージM21のIDに対応づけて保持する。計算装置100は、メッセージM21をCAN6に転送する。メッセージM21は、計算装置100aおよび検出装置200に到着する。
検出装置200は、メッセージM21を受信バッファ210に格納する(メッセージM21が受信バッファ210に格納された状態の図示を省略している)。また、この段階で、計算装置100aは、メッセージM21を受信するが、計算装置100aは該当IDのメッセージを送信しておらず、該当IDのMAC値をもたないので、MAC検証要求を送信しない(計算装置100aに該当IDのMAC値があればMAC検証要求を送信し検証が行われることになる)。計算装置100aは、メッセージM21をECU装置300aに転送する(図示を省略している)。ECU装置300aに到着したメッセージM21は、ECU装置300aで処理されるべきものであれば、ECU装置300aで処理され、そうでなければ破棄される。
次に、計算装置100は、ECU装置300からメッセージM22を受信する。計算装置100は、メッセージM22とMAC値“V1”とを基にMAC値“V2”を生成し、メッセージM22のID(メッセージM21と同じID)に対応づけて保持する。計算装置100は、メッセージM22をCAN6に転送する。メッセージM22は、計算装置100aおよび検出装置200に到着する。
検出装置200は、メッセージM22を受信バッファ210に格納する(メッセージM22が受信バッファ210に格納された状態の図示を省略している)。検出装置200は、受信バッファ210に格納されたメッセージM21を取得し、メッセージM21を基に、MAC値“V1”を生成し、メッセージM21のIDに対応づけて保持する。なお、検出装置200は、受信バッファ210からメッセージM21を取得する際に、メッセージM21のIDのシーケンス番号をインクリメントする。すなわち、検出装置200は、今回受信したメッセージM22を含めないシーケンス番号によって、メッセージM21のMAC値を生成することになる(以降のメッセージのMAC値を生成する際も同様)。計算装置100aに到着したメッセージM22は、メッセージM21と同様に処理される。
続いて、計算装置100aは、ECU装置300aからメッセージM23を受信する。計算装置100aは、メッセージM23に対応するMAC値“V3”を生成し、メッセージM23のID(メッセージM21,M22と同じID)に対応づけて保持する。計算装置100aは、メッセージM23をCAN6に転送する。メッセージM23は、計算装置100および検出装置200に到着する。
検出装置200は、メッセージM23を受信バッファ210に格納する。検出装置200は、受信バッファ210に格納されたメッセージM22とMAC値“V1”とを基に、MAC値“V2”を生成し、メッセージM22のIDに対応づけて保持する。
計算装置100は、メッセージM23を受信する。計算装置100は、メッセージM23に含まれるIDが、計算装置100が保持するMAC値“V2”に対応づけられたIDに一致していることを検出する。すると、計算装置100は、当該IDおよびMAC値“V2”を含むMAC検証要求M24を生成し、CAN6に送信する。計算装置100は、計算装置100で保持されている当該IDに対するMAC値を初期化する(MAC値の初期化の際は、該当IDのシーケンス番号も初期値にする)。MAC検証要求M24は、計算装置100aおよび検出装置200に到着する。
検出装置200は、MAC検証要求M24に含まれるIDおよびMAC値“V2”の組が、検出装置200が保持するIDおよびMAC値“V2”の組に一致するかを比較する。検出装置200は当該IDおよびMAC値“V2”の組が一致することを検出する。すると、検出装置200は、当該IDに対するMAC値を初期化する(該当IDのシーケンス番号も初期値にする)。
なお、計算装置100aは、MAC検証要求M24を受信するが、計算装置100aで処理すべきメッセージではないと判断して、MAC検証要求M24を破棄する。
図13は、同一IDのメッセージ受信時の処理例(その2)を示す図である。図13では、図12の処理に続いて実行される処理を例示している。図13の処理では、次の順番でメッセージが送信される。1番目に、検出装置200は、送信要求M25を送信する。送信要求M25は、検証対象のIDとして、メッセージM23のID(メッセージM21,M22と同じID)を含む。2番目に、計算装置100aは、MAC検証要求M26を送信する。このとき、計算装置100,100aおよび検出装置200は次のような処理を行う。
検出装置200は、送信要求M25を送信する際に、受信バッファ210に格納されたメッセージM23を基に、MAC値“V3”を生成し、メッセージM23のIDに対応づけて保持する。そして、検出装置200は、送信要求M25をCAN6に送信する。
計算装置100は、送信要求M25を受信する。計算装置100は、送信要求M25に含まれる検証対象のIDに対応するMAC値を保持していない(初期化済であるため)。このため、計算装置100は、送信要求M25に対して応答せずに、送信要求M25を破棄する。
計算装置100aは、送信要求M25を受信する。計算装置100aは、送信要求M25に含まれる検証対象のIDに対応するMAC値(MAC値“V3”)を保持している。このため、計算装置100aは、送信要求M25に応答する。具体的には、計算装置100aは、検証対象のIDおよび当該IDに対応づけて保持しているMAC値“V3”を含むMAC検証要求M26を生成し、CAN6に送信する。計算装置100aは、該当のIDに対するMAC値を初期化する(該当IDのシーケンス番号も初期値にする)。MAC検証要求M26は、計算装置100および検出装置200に到着する。
検出装置200は、MAC検証要求M26に含まれるIDおよびMAC値“V3”の組が、検出装置200が保持するIDおよびMAC値“V3”の組に一致するかを比較する。検出装置200は、当該IDとMAC値“V3”との組が一致することを検出する。すると、検出装置200は、当該IDに対するMAC値を初期化する(該当IDのシーケンス番号も初期値にする)。
なお、計算装置100は、MAC検証要求M26を受信するが、計算装置100で処理すべきメッセージではないと判断して、MAC検証要求M26を破棄する。
この場合、図12,13で例示した検出装置200によるMAC値の検証は、何れも成功したことになる。その結果、検出装置200は、不正なECU装置がCAN6に接続されていないと判断する。
一方、検出装置200は、該当のIDについて、MAC検証要求M26に含まれるMAC値と、検出装置200が保持するMAC値とが一致していない場合(MAC値の検証に失敗)、CAN6に不正なICU装置が接続されていると判断する。
また、不正なECU装置がCAN6に接続されている場合、不正なECU装置は、計算装置を介さずにCAN6に接続されることになるため、図12,13で例示した検証を検出装置200により適切に行えないことになる。この場合、検出装置200は、不正なECU装置がCAN6に接続されていると判断する。具体的には次の通りである。
図14は、同一IDのメッセージ受信時の処理例(その3)を示す図である。図14では、図12の処理に続いて実行される処理を例示している。図14の処理では、次の順番でメッセージが送信される。1番目に、検出装置200は、送信要求M25を送信する。送信要求M25は、検証対象のIDとして、メッセージM23のID(メッセージM21,M22と同じID)を含む。ただし、図14の例では、メッセージM23は、ECU装置300aが送信したものではなく、不正なECU装置(例えば、ECU装置300c)が送信したものとする。2番目に、何れかのECU装置は、当該IDを含む新規のメッセージM27を送信する。
この場合、検出装置200は、送信要求M25を送信する際に、受信バッファ210に格納されたメッセージM23を基に、MAC値“V3”を生成し、メッセージM23のIDに対応づけて保持する。その後、検出装置200は、送信要求M25の送信に対して、MAC検証要求を受信することなく、該当のIDを含むメッセージM27を受信することになる。
ここで、前述のように、MAC検証要求は、他のメッセージよりも優先度が高い。したがって、図13で例示したECU装置300a(正規のECU装置)のように、メッセージ送信元のECU装置が計算装置を介してCAN6に接続されていれば、検出装置200は、送信要求M25の送信後、何れかの計算装置により送信されたMAC検証要求を受信するはずである。これに対して、上記のようにMAC検証要求を受信することなく、検証対象のIDを含むメッセージM27を受信したということは、計算装置と接続されていない、あるいは、計算装置の機能をもたない不正なECU装置が、CAN6に接続されていることになる。よって、この場合、検出装置200は、不正なECU装置がCAN6に接続されていると判断する。
次に、第2の実施の形態の車載システムで実行される処理手順を説明する。
図15は、検出装置の初期化処理の例を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。ここで、初期化処理は、例えば、検出装置200が電源オンになり、運用状態へ遷移する前に実行される処理である。
(S11)制御部201は、受信バッファ210およびMAC値バッファ220を初期化する。これにより、受信バッファ210およびMAC値バッファ220内のデータが消去される。MAC生成部103は、MAC検証鍵を生成する。
(S12)制御部201は、ECU装置の認証を行う(ECU認証)。例えば、制御部201は、CAN6に接続されているECU装置から当該ECU装置の識別番号を取得し、検出装置200に予め登録された識別番号に合致するかを確認することで、ECU装置の認証を行う(合致すれば認証成功、合致しなければ認証失敗)。
(S13)制御部201は、該当のECU装置の認証に成功したか否かを判定する。認証に成功した場合、処理をステップS15に進める。認証に失敗した場合、処理をステップS14に進める。
(S14)異常通知部208は、不正なECU装置が接続されている旨をユーザに通知する。例えば、異常通知部208は、検出装置200が備えるエラーLEDを点灯させる、検出装置200に接続されたディスプレイに不正なECU装置が接続されている旨を文字表示させるなどの方法によって、不正なECU装置が接続されている旨をユーザに通知する。そして、処理を終了する。
(S15)MAC生成部203は、CAN6を介し、認証に成功したECU装置に対してMAC検証鍵を配布する。例えば、MAC生成部103は、認証に成功したECU装置との間で、鍵配布用に専用のセッションを確立してMAC検証鍵を配布してもよい。
(S16)制御部201は、全てのECU装置の認証に成功したか否かを判定する。全てのECU装置の認証に成功した場合、処理をステップS17に進める。未認証のECU装置がある場合、処理をステップS12に進める。
(S17)制御部201は、各ECU装置に対して、通信の開始通知を送信する。検出装置200は、開始通知を送信する際に、シーケンス番号をカウントするカウンタを初期化する。各計算装置では、開始通知を受信した際にカウンタが初期化されることになる。これにより、カウンタを同期させる。
(S18)制御部201は、運用状態に遷移する。検出装置200は、運用状態では、受信するメッセージに応じて、後述する種々の処理を実行する。
なお、ステップS12〜S16において、MAC生成部103は、例えば、最初に、CAN6に接続されている全てのECU装置から識別番号を取得し、取得した全ての識別番号が認証成功した場合に、全てのECU装置に対してMAC検証鍵を配布してもよい。
次に、計算装置100による処理手順を説明する。計算装置100について主に説明するが、計算装置100a,100bも計算装置100と同様の処理を実行する。
図16は、計算装置の初期化処理の例を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。
(S21)制御部101は、計算装置100に接続されているECU装置300の認証を行う(ECU認証)。具体的には、制御部101は、ECU装置300の識別番号を取得し、計算装置100に予め登録された識別番号に合致するかを確認することで、ECU装置300の認証を行う(合致すれば認証成功、合致しなければ認証失敗)。
(S22)制御部101は、検出装置200の認証に成功したか否かを判定する。認証に成功した場合、処理をステップS24に進める。認証に失敗した場合、処理をステップS23に進める。
(S23)制御部101は、計算装置100に接続された所定のLEDまたはディスプレイなどを用いて認証失敗のエラーを表示する。また、制御部101は、計算装置100によるMAC値の計算機能を無効とする。この場合、計算装置100は、以後、ECU装置300から受信するメッセージを、CAN6へ素通りさせるようになる。
(S24)制御部101は、検出装置200によって配布されたMAC検証鍵を受信する。ステップS23は、図15のステップS15に対応する処理である。
(S25)制御部101は、受信バッファ110およびMAC値バッファ120を初期化する。これにより、受信バッファ110およびMAC値バッファ120内のデータが消去される。また、制御部101は、MAC検証鍵を記憶部102に格納する。
(S26)制御部101は、検出装置200から通信の開始通知を受信すると、運用状態に遷移する。計算装置100は、運用状態では、受信するメッセージに応じて、後述する種々の処理を実行する。なお、制御部101は、検出装置200から開始通知を受信するとシーケンス番号をカウントするカウンタを初期化する。
図17は、計算装置の運用状態の処理例(その1)を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。図17では、計算装置100が、計算装置100に接続されているECU装置300からメッセージを受信した場合の手順を例示する。
(S31)メッセージ受信部106は、ECU−IF104を介して、ECU装置300からメッセージを受信する。
(S32)メッセージ受信部106は、受信したメッセージ(受信メッセージ)を受信バッファ110に記録する。メッセージ受信部106は、受信メッセージに含まれるIDをMAC値バッファ120に登録する。ただし、MAC値バッファ120に該当のIDが登録済のこともある。該当のIDが登録済の場合、メッセージ受信部106は、該当のIDを上書きしてもよいし、IDの登録を行わなくてもよい。メッセージ受信部106は、該当のIDのシーケンス番号をインクリメントする。
(S33)MAC生成部103は、受信メッセージのIDに対して、MAC値バッファ120に、旧MAC値があるか否かを判定する。旧MAC値がない場合、処理をステップS34に進める。旧MACがある場合、処理をステップS35に進める。
(S34)MAC生成部103は、受信メッセージを基にMAC値を計算し、MAC値バッファ120の新MAC値に格納する。そして、処理をステップS36に進める。
(S35)MAC生成部103は、受信メッセージと旧MAC値(受信メッセージのIDに対応する旧MAC値)とを基にMAC値を計算し、MAC値バッファ120の新MAC値に格納する。そして、処理をステップS36に進める。
(S36)制御部101は、ネットワークIF105を介して、受信メッセージをCAN6へ送信する。
(S37)制御部101は、メッセージの送信に成功したか否かを判定する。例えば、制御部101は、他の装置により送信されたメッセージとの衝突有無やCAN6の通信路上に流れるメッセージがステップS36で送信したメッセージに合致しているかなどの検証によって、メッセージの送信に成功したか否かを判定することが考えられる。メッセージの送信に成功した場合、処理をステップS38に進める。メッセージの送信に成功しなかった場合、処理を終了する。なお、メッセージの送信に成功しなかった場合、制御部101は、送信失敗をECU装置300に通知する。すると、ECU装置300は、同じメッセージの再送を試みる。当該再送の際には、計算装置100は、ステップS31の処理から再度順番に実行することになる。
(S38)制御部101は、今回送信成功したメッセージのIDについて、MAC値バッファ120における新MAC値を、旧MAC値に格納する。
このようにして、計算装置100は、ECU装置300からメッセージを受信するたびに、当該メッセージのIDごとにMAC値を計算し、MAC蓄積部107に蓄積する。
図18は、計算装置の運用状態の処理例(その2)を示すフローチャートである。以下、図18に示す処理をステップ番号に沿って説明する。図18では、計算装置100がCA6側からメッセージを受信した場合の手順を例示する。
(S41)メッセージ受信部106は、ネットワークIF105を介して、CAN6よりメッセージを受信する。
(S42)制御部101は、受信したメッセージ(受信メッセージ)のIDがMAC値バッファ120に登録済のIDであるか否かを判定する。登録済のIDである場合、処理をステップS43に進める。登録済のIDでない場合、受信メッセージをECU装置300へ送信して、処理を終了する。
(S43)制御部101は、受信メッセージのIDに対応する旧MAC値が、MAC値バッファ120にあるか否かを判定する。該当のIDに対応する旧MAC値がある場合、処理をステップS44に進める。該当のIDに対応する旧MAC値がない場合、処理を終了する。
(S44)制御部101は、受信メッセージのIDおよび当該IDに対応する旧MAC値を含むMAC検証要求を、ネットワークIF105を介して、CAN6へ送信する。
(S45)制御部101は、MAC検証要求の送信に成功したか否かを判定する。例えば、制御部101は、ステップS37で例示した方法と同様の方法を用いて、MAC検証要求の送信に成功したか否かを判定できる。MAC検証要求の送信に成功した場合、処理をステップS46に進める。MAC検証要求の送信に成功しなかった場合、処理を終了する。
(S46)制御部101は、ステップS44で送信した検証要求に含まれるIDについて、MAC値バッファ120に登録された旧MAC値を初期化する。制御部101は、該当IDのシーケンス番号も初期値に設定する。そして、処理を終了する。
このようにして、計算装置100は、CAN6側から受信したメッセージに含まれるIDに対し、MAC値バッファ120に旧MAC値が登録済である場合、当該IDおよび旧MAC値を含むMAC検証要求を送信し、検出装置200による検証を促す。
なお、ステップS43またはステップS45の判定でNoの場合、制御部101は、受信メッセージをECU装置300へ転送してもよい。あるいは、ステップS43またはステップS45の判定でNoの場合、制御部101は、受信メッセージのIDを基にECU装置300で処理されるメッセージではないことが明らかであれば、当該受信メッセージを破棄してもよい。また、ステップS42では、制御部101は、受信したメッセージのIDごとにシーケンス番号をカウントするカウンタをカウンタアップする。
図19は、計算装置の運用状態の処理例(その3)を示すフローチャートである。以下、図19に示す処理をステップ番号に沿って説明する。図19では、計算装置100がCAN6側から送信要求を受信した場合の手順を例示する。
(S51)メッセージ受信部106は、ネットワークIF105を介して、CAN6よりMAC検証要求の送信要求を受信する。前述のように、送信要求は、データフィールドに検証対象IDを含む。
(S52)制御部101は、送信要求に含まれる検証対象IDを取得する。制御部101は、検証対象IDと同じIDについて、MAC値バッファ120に旧MAC値があるか否かを判定する。該当IDの旧MAC値がある場合、処理をステップS53に進める。該当IDの旧MAC値がない場合、送信要求を破棄して、処理を終了する。
(S53)制御部101は、検証対象IDおよび当該IDに対応する旧MAC値を含むMAC検証要求を、ネットワークIF105を介して、CAN6へ送信する。
(S54)制御部101は、ステップS53で送信した検証要求に含まれるIDについて、MAC値バッファ120に登録された旧MAC値を初期化する。制御部101は、該当IDのシーケンス番号も初期値に設定する。そして、処理を終了する。
このようにして、計算装置100は、送信要求を受信し、送信要求で指定された検証対象IDに対応する旧MAC値を保持している場合、当該IDおよび当該旧MAC値を含むMAC検証要求をCAN6に送信する。
図20は、検出装置の運用状態の処理例(その1)を示すフローチャートである。以下、図20に示す処理をステップ番号に沿って説明する。図20では、検出装置200がMAC検証要求以外のメッセージを受信した場合の手順を例示する。
(S61)メッセージ受信部206は、ネットワークIF205を介して、CAN6よりメッセージを受信する。
(S62)制御部201は、受信したメッセージ(受信メッセージ)に含まれるIDが、受信バッファ210の何れかのIDに一致するか否かを判定する。一致する場合、処理をステップS63に進める。一致しない場合、受信メッセージを破棄して、処理を終了する。
(S63)MAC生成部203は、受信メッセージのIDと同じIDであって、受信バッファ210に格納されているメッセージ(当該IDに対する前回の受信メッセージ)を取得する。MAC生成部203は、当該IDのシーケンス番号をインクリメントする。MAC生成部203は、当該IDについて、MAC値バッファ220に格納された旧MAC値を取得する。MAC生成部203は、当該IDに対する前回の受信メッセージと、当該旧MAC値とを基に、新MAC値を計算し、MAC値バッファ220の新MAC値に格納する。なお、当該IDのメッセージが受信バッファ210に未だ格納されていないこともある。その場合、MAC生成部203は、受信バッファ210から当該IDに対する前回のメッセージを取得できないので、ステップS63をスキップする。
(S64)制御部201は、ステップS61で受信した受信メッセージ(今回の受信メッセージ)を受信バッファ210に格納する。ここで、MAC生成部203は、ステップS63で計算した新MAC値を、MAC値バッファ220の該当IDに対応する旧MAC値に設定する(ただし、ステップS63で新MAC値を計算していない場合は当該旧MAC値の設定を行わない)。
このようにして、検出装置200は、CAN6から受信するメッセージについて、IDごとにMAC値を計算し、保持する。このとき、該当のIDについて今回受信した最新のメッセージについてはMAC値を計算せずに、受信バッファ210に格納しておく。
図21は、検出装置の運用状態の処理例(その2)を示すフローチャートである。以下、図21に示す処理をステップ番号に沿って説明する。図21では、検出装置200がMAC検証要求を受信した場合の手順を例示する。
(S71)メッセージ受信部206は、ネットワークIF205を介して、CAN6よりMAC検証要求を受信する。MAC検証要求は、前述のように、検証対象IDおよびMAC値を含む。
(S72)MAC比較部204は、MAC検証要求に含まれる検証対象IDに対応するMAC値(旧MAC値)を、MAC値バッファ220から取得する。MAC比較部204は、MAC値バッファ220から取得したMAC値と、MAC検証要求に含まれるMAC値とを比較する。
(S73)MAC比較部204は、ステップS72の比較により、両者が一致するか否かを判定する。一致しない場合、処理をステップS74に進める。一致する場合、処理をステップS75に進める。
(S74)異常通知部208は、不正なECU装置が接続されている旨をユーザに通知する。例えば、異常通知部208は、検出装置200が備えるエラーLEDを点灯させる、検出装置200に接続されたディスプレイに不正なECU装置が接続されている旨を文字表示させるなどの方法によって、不正なECU装置が接続されている旨をユーザに通知する。そして、処理を終了する。
(S75)MAC生成部203は、受信バッファ210に保持されたメッセージのうち検証対象IDに対応するメッセージを基に、新MAC値を計算する。このとき、MAC生成部203は、新MAC値の計算前に、該当IDのシーケンス番号を1単位分インクリメントする。MAC生成部203は、計算した新MAC値を、MAC値バッファ220の当該検証対象IDに対応する旧MAC値に登録する(MAC値バッファ220に格納)。
(S76)制御部201は、受信バッファ210に格納された検証対象IDに対応するメッセージを削除する。
(S77)制御部201は、該当の検証対象IDを含むMAC検証要求の送信要求を、ネットワークIF205を介して、CAN6へ送信する。
(S78)制御部201は、送信要求に対する応答待ち状態へ遷移する。
このように、検出装置200は、MAC検証要求に応じて、MAC値の検証を行う。MAC検証要求に対するMAC値の検証に成功した場合でも、最新のメッセージに対するMAC値の検証を行うため、検出装置200は、送信要求を送信する。
図22は、検出装置の応答待ち状態の処理例を示すフローチャートである。以下、図22に示す処理をステップ番号に沿って説明する。図22では、検出装置200が、送信要求の送信後、応答待ち状態にある場合の手順を例示する。
(S81)メッセージ受信部206は、ネットワークIF205を介して、CAN6よりメッセージを受信する。
(S82)メッセージ受信部206は、受信したメッセージがMAC検証要求であるか否かを判定する。MAC検証要求である場合、処理をステップS83に進める。MAC検証要求でない場合、処理をステップS85に進める。
(S83)MAC比較部204は、MAC検証要求に含まれる検証対象IDに対応するMAC値(旧MAC値)を、MAC値バッファ220から取得する。MAC比較部204は、MAC値バッファ220から取得したMAC値と、MAC検証要求に含まれるMAC値とを比較する。
(S84)MAC比較部204は、ステップS83の比較により、両者が一致するか否かを判定する。一致しない場合、処理をステップS85に進める。一致する場合、MAC値バッファ220の該当のIDに対するMAC値(旧MAC値および新MAC値)を初期化(該当IDのシーケンス番号も初期値に設定)して、処理をステップS86に進める。
(S85)異常通知部208は、不正なECU装置が接続されている旨をユーザに通知する。例えば、異常通知部208は、検出装置200が備えるエラーLEDを点灯させる、検出装置200に接続されたディスプレイに不正なECU装置が接続されている旨を文字表示させるなどの方法によって、不正なECU装置が接続されている旨をユーザに通知する。そして、処理を終了する。
(S86)制御部201は、運用状態へ遷移する。これにより、MAC検証要求の送信要求に対する応答待ち状態は解除される。
このように、検出装置200は、MAC検証要求の送信要求を送信することで、ECU装置によるMAC検証要求の送信を促す。そして、検出装置200は、MAC検証要求を受信しないまま、通常のメッセージを受信した場合や、MAC検証要求に含まれるMAC値の検証に失敗した場合に、不正なECU装置がCAN6に接続されていると判断する。
なお、検出装置200は、運用状態において、何れかのECU装置からMAC検証要求を受信した場合だけでなく、MAC検証要求の送信要求を定期的にCAN6に送信することで、計算装置が置き換えられたことを検出してもよい。
図23は、検出装置の運用状態の処理例(その3)を示すフローチャートである。以下、図23に示す処理をステップ番号に沿って説明する。
(S91)制御部201は、前回の送信要求の送信から一定時間が経過したか否かを判定する。一定時間が経過した場合、処理をステップS92に進める。一定時間が経過していない場合、処理を終了する(制御部201は、一定時間経過したか否かの監視を継続する)。
(S92)制御部201は、CAN6へ送信要求を送信する。このとき、制御部201は、送信要求に、検証対象IDを含める。例えば、制御部201は、IDごとにタイマを用意して、IDごとに送信要求を定期的に送信してもよい。あるいは、制御部201は、検証対象IDを1つずつ順番に選択し、送信要求に含めてもよい(例えば、今回の定期送信のタイミングでは検証対象IDを第1のIDとし、次回の定期送信のタイミングでは検証対象IDを第2のIDとするなど)。
(S93)制御部201は、送信要求に対する応答待ち状態へ遷移する。その後、検出装置200の各部は、図22で説明した手順を実行する。
なお、制御部201は、IDごとのメッセージの受信数に応じて、送信要求の送信タイミングを決定してもよい。例えば、制御部201は、該当のIDについて、前回の送信要求の送信タイミングから所定数のメッセージを受信したタイミングで、当該IDを検証対象IDとして含むMAC検証溶融要求をCAN6に送信する。
検出装置200は、こうして定期的にMAC検証要求の確認を行うことで、何れかの計算装置の置き換えまたは取り外しを適切に監視できる。
図24は、ECU装置によるメッセージ送信例を示す図である。図24では、ECU装置300,300a,300c(ECU装置300cは、不正ECU装置である)が送信するメッセージの表記例を示している。具体的には、ECU装置300が送信するメッセージを、送信される順番を示す番号n(nは1以上の整数)とともに、メッセージanと表記する。例えば、メッセージa1は、ECU装置300が送信した1番目のメッセージである。同様に、ECU装置300aが送信するn番目のメッセージを、メッセージbnと表記する。また、ECU装置300cが送信するn番目のメッセージを、メッセージdnと表記する。
図25は、監視の具体例を示す図である。図25では、第2の実施の形態の監視の具体例とともに、他の監視方法との比較例も例示されている。図25(A)は、MAC値によるメッセージ認証を行わない場合である。図25(B)は、メッセージごとにMAC値を送信して監視を行う場合である。図25(C)は、第2の実施の形態の車載システムによる監視の具体例である。なお、以下では、図25(A)、図25(B)の説明を行う場合にも、第2の実施の形態の説明に用いた装置名/符号を便宜的に用いる。ただし、図25(A)、図25(B)で想定されるシステムでは、計算装置が含まれておらず、各ECU装置は、計算装置を介さずにCANに接続されているものとする。また、図25(A)、図25(B)、図25(C)の何れの場合も、最初のメッセージ(メッセージa1)の送信前には、何のメッセージも送信されていないものとする。更に、送信されるメッセージan,bn,dnの何れも、IDフィールドのIDは全て同じであるものとする。
図25(A)において、まず、ECU装置300が、一連のメッセージa1,a2,・・・,an(合計でN個のメッセージ)を送信する。次に、ECU装置300aが、メッセージb1を送信する。その後、ECU装置300c(不正ECU装置)が不正なメッセージd1を送信する。しかし、図25(A)の例では、MAC値によるメッセージ認証を行っていないため、ECU装置300cにより送信された不正なメッセージd1を、不正なメッセージとして検出することができない。なお、図25(A)の例では、メッセージa1からメッセージd1までの一連のメッセージの個数は、N+1+1個(=N+2個)である。
図25(B)において、ECU装置300は、メッセージa1、メッセージa1のMAC値を含むMACメッセージ、メッセージa2、メッセージa2のMAC値を含むMACメッセージ、・・・、メッセージan、メッセージanのMAC値を含むMACメッセージというように、メッセージごとにMACメッセージを送信する。次に、ECU装置300aは、メッセージb1、メッセージb1のMAC値を含むMACメッセージを順に送信する。次に、ECU装置300cは、メッセージd1を送信する。次に、ECU装置300aは、メッセージb2を送信する。この場合、メッセージd1に続くMAC値が送信されていないため、例えば、検出装置200は、メッセージb2が送信された時点で、不正なメッセージ(メッセージd1)を送信した不正なECU装置(ECU装置300c)が存在することを発見できる。この場合、ECU装置300によるメッセージa1の送信から、不正なECU装置の存在が検出される直前までに送信されるメッセージの数は、2(N+1)+1個(=2N+3個)である。
図25(C)において、ECU装置300は、メッセージa1,メッセージa2,・・・,メッセージanを順に送信する。次に、ECU装置300aは、メッセージb1を送信する。すると、ECU装置300に接続されている計算装置100は、メッセージb1の受信に応じて、MAC検証要求M31(図25では検証要求と略記している)を送信する。
検出装置200は、検証要求M31を受信すると、MAC値の検証を行う。検出装置200は、MAC値の検証に成功すると、MAC検証要求の送信要求M32(図25では送信要求と表記している)を送信する。計算装置100aは、送信要求M32を受信すると、MAC検証要求M33を送信する。検出装置200は、MAC検証要求M33に対して、MAC値の検証を行い、メッセージb1までが正規のECU装置によって送信されたものであると判断する。
続いて、ECU装置300c(不正なECU装置)が、メッセージd1を送信する。メッセージd1は、計算装置100,100aに到達する。計算装置100,100aでは、該当IDに対応するMAC値を初期化済である。このため、計算装置100,100aは、メッセージd1を受信してもMAC検証要求を送信しない。
その後、検出装置200は、送信要求の定期送信のタイミングに達したことを検知し、送信要求M34を送信する。送信要求M34では、検証対象IDとして、メッセージan,bn,dnのIDと同じIDが設定されている。送信要求M34は、計算装置100,100aに到達するが、計算装置100,100aは、何れも検証対象IDに対するMAC値を保持していないので、送信要求M34に対してMAC検証要求を送信しない。その後、ECU装置300aは、メッセージb2を送信する。
このとき、検出装置200は、送信要求M34に対するMAC検証要求を受信しないまま、新規のメッセージb2を受信することになる。このため、検出装置200は、このタイミングで、不正なECU装置(ECU装置300c)が存在することを発見できる。この場合、ECU装置300によるメッセージa1の送信から、不正なECU装置の存在が検出される直前までに送信されるメッセージの数は、N+1+3+1+1個(=N+6個)である。メッセージ認証の比較例(図25(B))の方法でのメッセージ総数(2N+3)個と、図25(C)の方法でのメッセージ総数(N+6)個とを比べると、後者の方が、Nが増えたときの、送信されるメッセージの増加を抑えることができる。特に、実際のケースでは、N>3になるケースが多いため、図25(C)の方法はメッセージ数を低減するために十分有効な方法である。こうして、第2の実施の形態の車載システムによれば、不正なECU装置を効率的に検出可能となる。
更に、図25(B)の方法では、メッセージごとにMACメッセージを送信するため、メッセージa1〜anまでの送信に、図25(A)の方法に比べて2倍の時間がかかり、通信が遅延する。一方、図25(C)の方法では、計算装置100によりMAC値によるメッセージ検証が行われるべきタイミングに絞ってMAC検証要求が送信されるので、メッセージa1〜anまでを送信するまでの所要時間が、図25(A)の方法と同等の時間で済む。すなわち、第2の実施の形態の方法(図25(C))では、メッセージ認証の比較例(図25(B))の方法に比べて、一連のメッセージを送信するための所要時間を短縮できるという利点もある。
なお、図25では、メッセージd1の後に、MAC検証要求の送信要求M34が送信されるケースを例示した。検出装置200は、それ以外のケースでも適切に不正なECU装置を検出可能である。一例として、メッセージd1の後、MAC検証要求の送信要求M34が送信されずに、ECU装置300aによりメッセージb2が送信され、次いでECU装置300cによりメッセージd2が送信される場合を考える。この場合、検出装置200は、その後、計算装置100aによるMAC検証要求を受け付けることになり、当該MAC検証要求に応じたMAC値によるメッセージ認証を行うことで、MAC値の不一致を確認し、不正なECU装置300cの存在を適切に検出できる。
また、一定数のメッセージ送信ごとにMACを付与する方法も考えられるが、この方法では、複数のECU装置が同一のIDのメッセージを送信するシステムで利用することができない。一方、第2の実施の形態の監視方法によれば、同一IDのメッセージを複数のECU装置が送信する場合でも、不正メッセージおよび不正ECU装置を検出可能である。
また、メッセージ送信の周期性を利用し、通常とは異なる周期でメッセージを送信するECU装置を検出することで、不正ECU装置を検出する方法も考えられるが、この方法では、通常のメッセージが周期性をもたずに送信されるシステムで利用することができない。一方、第2の実施の形態の監視方法によれば、通常のメッセージが周期性をもたずに送信される場合でも不正ECU装置を適切に検出できる。
以上の第1,第2の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
(付記1) 計算装置が、前記計算装置に接続されている電子装置が送信した第1のメッセージの識別情報ごとに、前記第1のメッセージを基に生成されるコードを保持し、
前記計算装置が、前記第1のメッセージの識別情報と同じ識別情報を含む第2のメッセージをネットワークを介して受信すると、前記識別情報および前記コードを含んでおり前記ネットワークに不正な電子装置が接続されているか否かの検証を要求する検証要求を前記ネットワークに送信し、前記検証要求の送信後、保持された前記コードを初期化する、
監視方法。
(付記2) 検出装置が、前記ネットワークを介して受信したメッセージを基に生成される前記コードを当該メッセージの識別情報ごとに保持し、
前記検出装置が、前記検証要求を受信し、前記検証要求に含まれる第1のコードと、前記検証要求に含まれる識別情報に対して前記検出装置が保持している第2のコードとの比較に応じて、前記ネットワークに不正な電子装置が接続されていることを検出する、
付記1記載の監視方法。
(付記3) 前記検出装置が、前記第1のコードと前記第2のコードとが一致しない場合に、前記ネットワークに不正な電子装置が接続されていると判定する、付記2記載の監視方法。
(付記4) 前記検出装置が、前記第1のコードと前記第2のコードとが一致する場合に、検証対象のメッセージの識別情報を含み前記検証要求の送信を要求する送信要求を前記ネットワークに送信する、付記2または3記載の監視方法。
(付記5) 前記検出装置が、メッセージを受信すると、当該メッセージの識別情報ごとに、今回受信したメッセージを受信バッファに保持し、前回受信したメッセージを基に前記コードを生成し、保持する、付記4記載の監視方法。
(付記6) 前記検出装置が、前記送信要求を送信する際に、検証対象の識別情報に対して保持している前記コードを初期化し、前記受信バッファに格納されているメッセージを基に当該コードを生成し、保持する、付記5記載の監視方法。
(付記7) 他の計算装置が、前記送信要求を受信し、前記送信要求に含まれる検証対象の識別情報と、当該識別情報に対して前記他の計算装置が保持する第3のコードとを含む前記検証要求を前記ネットワークに送信し、前記検証要求の送信後、保持された前記第3のコードを初期化する、付記4乃至6の何れか1つに記載の監視方法。
(付記8) 前記検出装置が、前記送信要求の送信後、前記送信要求に応じた前記検証要求を受信する前に、前記検証対象の識別情報を含み前記検証要求とは異なるメッセージを受信した場合、前記ネットワークに不正な電子装置が接続されていると判定する、付記4乃至7の何れか1つに記載の監視方法。
(付記9) 前記検出装置が、識別情報ごとに、所定の周期で、または、所定数のメッセージの受信後に、当該識別情報を検証対象として含む前記送信要求を前記ネットワークに送信する、付記4乃至8の何れか1つに記載の監視方法。
(付記10) 前記計算装置が、前記電子装置の認証を行い、認証不成功時には前記計算装置による前記コードを生成する機能を無効にし、認証成功時には前記コードを生成する機能を有効にする、付記1乃至9の何れか1つに記載の監視方法。
(付記11) 前記コードは、メッセージを基に生成されるハッシュ値である、付記1乃至10の何れか1つに記載の監視方法。
(付記12) 前記検証要求は、前記電子装置により送信される通常のメッセージよりも優先して送信されるメッセージである、付記1乃至11の何れか1つに記載の監視方法。
(付記13) 前記ネットワークは、コントローラエリアネットワークである、付記1乃至12の何れか1つに記載の監視方法。
(付記14) 複数の電子装置と、
電子装置とネットワークとの間でメッセージを中継し、前記電子装置が送信した第1のメッセージの識別情報ごとに、前記第1のメッセージを基に生成されるコードを保持し、前記第1のメッセージの識別情報と同じ識別情報を含む第2のメッセージを前記ネットワークを介して受信すると、前記識別情報および前記コードを含んでおり前記ネットワークに不正な電子装置が接続されているか否かの検証を要求する検証要求を前記ネットワークに送信し、前記検証要求の送信後、保持された前記コードを初期化する、計算装置と、
を有する監視システム。