図1を参照して、通信システムを具体化した一実施形態について説明する。本実施形態の通信システムは、図示しない車両に搭載された車載ネットワークに適用された通信システムである。
図1に示すように、通信システムは、送信装置及び受信装置の少なくとも一方としての第1〜第4電子制御装置(ECU)21〜24と、第1及び第2ECU21,22が通信可能に接続される通信用バスL1と、第3及び第4ECU23,24が通信可能に接続される通信用バスL2とを有している。本実施形態では、通信用バスL1と通信用バスL2とが通信ネットワークを構成する。また、通信システムは、通信用バスL1と通信用バスL2とに通信可能に接続される管理装置としてのゲートウェイ10を備えている。ゲートウェイ10は、通信用バスL1と通信用バスL2との間で通信メッセージMBを相互に転送(中継)することができる。よって、通信用バスL1に接続された第1及び第2ECU21,22と、通信用バスL2に接続された第3及び第4ECU23,24とは、ゲートウェイ10を介して、相互に通信メッセージMBの送受信が可能である。
通信システムは、通信プロトコルとして、例えば、CAN(コントローラエリアネットワーク)プロトコルが採用されている。また、通信システムは、通信経路の一部に無線通信を含んでいたり、ゲートウェイ等を介してその他のネットワークを経由する経路が含まれていたりしてもよい。
CANプロトコルには、通信メッセージの構造であるフレームが規定されており、そのフレームには、通信メッセージの種類を示す識別子としての「メッセージID」の格納領域、ユーザが指定したデータである「メッセージデータ」の格納領域である「データフィールド」等が設けられている。「メッセージID」は、通信メッセージの種類毎に特定の値が定められており、各ECUは、送信する通信メッセージに、その種類に対応する「メッセージID」を付与して送信し、受信した通信メッセージの種類を「メッセージID」に基づいて判断する。この通信システムでは、ある1つの「メッセージID」を通信メッセージに付与して送信することができるのは、定められた一つのECUに限定されている。また、「メッセージデータ」が格納される領域である「データフィールド」は、0〜64ビット(8ビット×0〜8バイト)のうちのいずれかの長さで設定される。
ゲートウェイ10は、演算装置(CPU)や記憶装置を有するマイクロコンピュータを含み構成されている。ゲートウェイ10には、プログラムの演算処理を実行する演算装置と、そのプログラムやデータ等が記憶された読み出し専用メモリ(ROM)と、演算装置の演算結果が一時的に記憶される揮発性メモリ(RAM)とが設けられている。これにより、ゲートウェイ10は、記憶装置に保持されているプログラムを演算装置に読み込み、実行することで、所定の機能を提供する。例えば、ゲートウェイ10は、2つの通信用バスL1,L2の間で通信メッセージMBを転送する処理や、管理コードとしてのメッセージカウンタMC(図2参照)を管理する処理を行う。また、ゲートウェイ10は、バッテリから常に電力が供給されることにより設定値や演算値を記憶保持するバックアップメモリを備えている。
ゲートウェイ10は、メッセージカウンタMC(図2参照)を管理するコード管理部11と、メッセージカウンタMCの一部を送信する送信部12と、ゲートウェイ10が接続された各通信用バスL1,L2との間で各通信メッセージMBを授受する通信I/F部13とを備える。なお、コード管理部11及び送信部12の各機能は、ゲートウェイ10によるプログラムの演算処理により実現される。
通信I/F13は、通信用バスL1,L2との間でCANプロトコルに基づく通信メッセージMBを送受信する。また、通信I/F13は、送信部12等との間で通信メッセージMBを授受する。これにより、ゲートウェイ10は、自身が出力する同期用メッセージMAを通信用バスL1,L2に送信可能であるとともに、通信用バスL1,L2を介して他のECUが送信する通信メッセージMBを取得することができる。なお、本実施形態では、同期用メッセージMAは、CANプロトコルに基づく通常の通信メッセージのうちで同期用メッセージであることを示すメッセージIDが付与されたものである。よって、同期用メッセージMAは、通常の通信メッセージと同様に、各通信用バスL1,L2に接続されているECU21〜24に対してブロードキャストで送信される。
図2を参照して、コード管理部11について説明する。
コード管理部11は、ゲートウェイ10のバックアップメモリに記憶されるメッセージカウンタMCを管理する。なお、コード管理部11は、メッセージカウンタMCのうちの「上位ビットMCH」を記憶、管理する。また、コード管理部11は、メッセージカウンタMCのうちの「下位ビットMCL」の最新の値を通信メッセージMBから取得して、その値を監視するために記憶する。以下では、メッセージカウンタMCの全長については、単にメッセージカウンタMCと記載する。
メッセージカウンタMCは、「メッセージID」毎に管理されているカウンタであり、対応する「メッセージID」を有する通信メッセージが新たに生成されることに応じて、その値が更新されるカウンタである。つまり、「メッセージID」毎に対応するメッセージカウンタMCが更新される。本実施形態では、メッセージカウンタMCは、1ずつ増加させられるカウンタである。なお、以下では、1つの「メッセージID」と、これに対応するメッセージカウンタMCとを例にして説明し、説明の便宜上、その他の「メッセージID」とそれに対応するメッセージカウンタMCとの例についての説明は割愛する。
本実施形態では、メッセージカウンタMCを第1の情報としての「上位ビットMCH」と第2の情報としての「下位ビットMCL」とに2分割する。そして、「上位ビットMCH」をゲートウェイ10で記憶、管理及び送信し、「下位ビットMCL」を各ECU21〜24で記憶、管理及び送信するようにしている。また、メッセージカウンタMCは、「下位ビットMCL」が「0」から最大値まで変化したことに応じて、ゲートウェイ10が「上位ビットMCH」の値を「1」だけ増加させるとともに、その「上位ビットMCH」の増加に応じてECUが「下位ビットMCL」を初期値「0」に設定することを繰り返す。これにより、メッセージカウンタMCは、二度と同じ値にならないようになっている。なお、ゲートウェイ10は、メッセージカウンタMCを記憶する領域として確保された記憶領域にメッセージカウンタMCのうちの「上位ビットMCH」を記憶して、管理する。このとき、ゲートウェイ10は、メッセージカウンタMCのうちの「下位ビットMCL」を上記確保した記憶領域の下位ビットに対応する位置に入れて管理してもよいし、上記確保したメッセージカウンタMCを記憶する記憶領域とは別に確保した記憶領域にメッセージカウンタMCと分けて格納して、管理してもよい。つまり、ゲートウェイ10は、メッセージカウンタMCのうちの「下位ビットMCL」に対応するビットに、通信メッセージMBで受信される「下位ビットMCL」を入れてもよいし、所定の値を設定しておいてもよいし、「下位ビットMCL」に対応するビットを含まないかたちで管理してもよい。
メッセージカウンタMCは、通信メッセージMBの信頼性を担保できる情報量、すなわちビット長(ビット数)に設定される。例えば、メッセージカウンタMCを単調増加させつつ、二度と同じ値で使用することがないようにすることで通信メッセージMBの信頼性を担保する場合、車両寿命と通信メッセージMBの送信頻度とから、メッセージカウンタMCの長さ(ビット数)は、計算上、8バイトの長さが必要である。この8バイトの長さは、「データフィールド」の最大長64ビット(=8バイト)と同じ長さであるため、もし、メッセージカウンタMCを通信メッセージMBに格納して送信しようとすると、通信メッセージMBにユーザが指定したデータである「メッセージデータ」が格納できないことになってしまう。そこで、上述のように、メッセージカウンタMCを「上位ビットMCH」と「下位ビットMCL」とに2分割にして管理する。
詳述すると、コード管理部11は、メッセージカウンタMCのうちの「上位ビットMCH」を管理する。例えば、本実施形態では、メッセージカウンタMCが8バイト長である場合、「上位ビットMCH」を7バイト(=56ビット)長、「下位ビットMCL」を1バイト(=8ビット)長とする。この場合「下位ビットMCL」の最大値は「255」になる。
コード管理部11は、メッセージカウンタMCが二度と同じ値にならないように、メッセージカウンタMCのうちの「上位ビットMCH」を更新し、管理する。具体的には、コード管理部11は、メッセージカウンタMCのうちの「上位ビットMCH」を、更新タイミングで単調増加させることで更新する。更新タイミングは、メッセージカウンタMCのうちの「下位ビットMCL」が最大値になったタイミング、すなわち、「下位ビットMCL」の有する全てのパターンが使い切られるタイミングである。例えば、コード管理部11は、第1ECU21が送信する通信メッセージMBを受信することでメッセージカウンタMCのうちの「下位ビットMCL」を監視し、この「下位ビットMCL」が最大値以上になったときを更新タイミングにする。
コード管理部11は、メッセージカウンタMCのうちの「上位ビットMCH」を更新することに応じて、メッセージカウンタMCのうちの「上位ビットMCH」を送信部12に伝達する。
送信部12は、メッセージカウンタMCのうちの「上位ビットMCH」から「認証子AC1」を生成するとともに、生成した「認証子AC1」とメッセージカウンタMCのうちの「上位ビットMCH」とを含む同期用メッセージMAを生成する。同期用メッセージMAは、「データフィールド」にメッセージカウンタMCのうちの「上位ビットMCH」と、メッセージカウンタMCのうちの「上位ビットMCH」を暗号化した「認証子AC1」とを格納した通信メッセージである。そして、送信部12は、通信I/F13を介して、同期用メッセージMAを、CANプロトコルにおいて優先度の高いメッセージIDを有する通信メッセージとして、第1〜第4ECU21〜24へ送信する。なお、優先度の高いメッセージIDは、同期用メッセージMAのために予め設定されているものとする。そして、同期用メッセージMAは、ゲートウェイ10で管理しているメッセージカウンタMCのうちの「上位ビットMCH」を第1〜第4ECU21〜24へそれぞれ通知し、各ECU21〜24で管理されているメッセージカウンタMCのうちの「上位ビットMCH」を同期させる。
図2に示すように、送信部12は、暗号化エンジン111を備えている。暗号化エンジン111は、暗号鍵EKが設定されており、コード管理部11からメッセージカウンタMCのうちの「上位ビットMCH」を入力し、この入力したメッセージカウンタMCのうちの「上位ビットMCH」を暗号鍵EKで暗号化することで「認証子AC1」を生成する。そして、送信部12は、メッセージカウンタMCのうちの「上位ビットMCH」と、「認証子AC1」とから同期用メッセージMAを生成する。なお、暗号鍵EKは、耐タンパメモリ等を用いて外部から取得不可能であればなおよい。
また、送信部12は、同期用メッセージMAを、メッセージカウンタMCのうちの「上位ビットMCH」が更新されることに応じて、全てのECUに対して送信する。つまり、ゲートウェイ10は、メッセージカウンタMCのうちの「上位ビットMCH」を送信する。
図3及び図4を参照して、第1〜第4ECU21〜24について説明する。なお、第1〜第4ECU21〜24は、いずれも同様の構成を有しているので、ここでは第1ECU21について詳しく説明し、その他のECUの構成についての説明は割愛する。
第1ECU21は、演算装置(CPU)や記憶装置を有するマイクロコンピュータを含み構成されている。第1ECU21には、プログラムの演算処理を実行する演算装置と、そのプログラムやデータ等が記憶された読み出し専用メモリ(ROM)と、演算装置の演算結果が一時的に記憶される揮発性メモリ(RAM)とが設けられている。これにより、第1ECU21は、記憶装置に保持されているプログラムを演算装置に読み込み、実行することで、所定の機能を提供する。例えば、第1ECU21は、通信用バスL1との間で通信メッセージMBを送受信する処理や同期用メッセージMAを受信する処理、管理コードとしてのメッセージカウンタMCを管理する処理を行う。また、第1ECU21は、バッテリから常に電力が供給されることにより設定値や演算値を記憶保持するバックアップメモリを備えている。
図3及び図4に示すように、第1ECU21は、CANプロトコル用の通信I/F30と、通信メッセージが一時的に格納される複数のMBOX(MessageBox)31a,31b,31cと、送信する通信メッセージMB等に含まれる「認証子AC2」を生成する認証子生成部33とを備える。また、第1ECU21は、認証子を含み送受信される通信メッセージMBを処理するメッセージ処理部34と、「メッセージデータDT」を処理する情報処理部32と、通信メッセージMBの受信の可否を「上位ビットMCH」の更新状態に応じて判定する仮受信判定部37とを備える。なお、認証子生成部33、メッセージ処理部34及び仮受信判定部37の各機能は、第1ECU21によるプログラムの演算処理により実現される。
通信I/F部30は、通信用バスL1を介して同期用メッセージMAを受信したり、通信メッセージMBを送受信したりする。
複数のMBOX31a,31b,31cは、通信I/F部30によって受信された通信メッセージMBを中継する。また、複数のMBOX31a,31b,31cは、通信I/F部30から送信する通信メッセージMBを中継する。例えば、MBOX31aは、通信I/F部30と情報処理部32との間で認証子を含まない通信メッセージを中継する。また、MBOX31bは、通信I/F部30と認証子生成部33との間で通信メッセージを中継する。MBOX31bは、特に、メッセージカウンタMCの管理に必要である同期用メッセージMAを中継する。MBOX31cは、通信I/F部30とメッセージ処理部34との間で通信メッセージを中継する。MBOX31cは、特に、通信メッセージMBを中継等する。
情報処理部32は、第1ECU21が受信した通信メッセージに含まれる「メッセージデータDT」を利用する各種アプリケーションを実行する。また、情報処理部32は、各種アプリケーションが出力したデータを外部へ送信する「メッセージデータDT」として出力する。
認証子生成部33は、「メッセージデータDT」と「メッセージカウンタMC」とから「認証子AC2」を生成する。認証子生成部33は、メッセージカウンタMCのうちの「上位ビットMCH」を保持しているとともに、「下位ビットMCL」を記憶及び管理している。なお、認証子生成部33は、メッセージカウンタMCのうちの「上位ビットMCH」と「下位ビットMCL」とを1つだけ確保されたメッセージカウンタMCの記憶領域の対応する位置に記憶するようにしてもよいし、「上位ビットMCH」と「下位ビットMCL」とをそれぞれ別々に確保された記憶領域に記憶してもよい。
仮受信判定部37は、認証子生成部33とメッセージ処理部34との間で授受した情報に基づいて仮受信の可否判断を行う。仮受信判定部37は、認証子生成部33に記憶されている「上位ビットMCH」とその状態を取得し、仮受信の可否結果を出力する。
詳述すると、仮受信判定部37は、認証子生成部33に記憶されている「上位ビットMCH」に基づいて通信メッセージMBの仮受信の可否について判定し、この判定した結果をメッセージ処理部34に出力する。仮受信判定部37は、認証子生成部33に記憶されている「上位ビットMCH」の状態を判定し、この判定で「上位ビットMCH」が過渡状態であれば仮受信が「可」であると判定し、定常状態であれば仮受信が「否」である旨を判定する。ここで定常状態とは、「上位ビットMCH」が定期的に更新されている状態や、先の更新から所定の期間以内である状態をいう。逆に、過渡状態とは、「上位ビットMCH」が初期値のままである状態をいう。なお、過渡状態に「上位ビットMCH」の更新が停止されている状態や、先の更新から所定の期間を超えても更新されない状態等を含ませることもできる。仮受信判定部37は、認証子生成部33が認証子を認証する必要があるときに仮受信の可否の判定を行い、その判定結果を認証子生成部33やメッセージ処理部34に出力することができる。
メッセージ処理部34は、送受信される通信メッセージMBの信頼性を以下のようにして確保する。
通信メッセージMBを受信したとき、メッセージ処理部34は、MBOX31cから通信メッセージMBを入力し、この入力した通信メッセージMBの受信可否の判定及び認証処理を行う。そして、メッセージ処理部34は、認証子生成部33で認証された通信メッセージMBに含まれる「メッセージデータDT」を情報処理部32に出力する。具体的には、メッセージ処理部34は、認証処理を行うため、受信した通信メッセージMBを認証子生成部33に送り、認証子生成部33から通信メッセージMBに対する認証の結果を得る。認証子生成部33で認証されたメッセージ処理部34は、受信した通信メッセージMBから「メッセージデータDT」が取得され、この取得された「メッセージデータDT」が情報処理部32に送られる。
一方、認証子生成部33で認証されなかった場合、メッセージ処理部34は、受信した通信メッセージMBについて受信可否の判定を取得する。詳述すると、認証子生成部33は、受信した通信メッセージMBを仮受信判定部37に送り、仮受信判定部37から受信の可否の判定結果が入力される。そして、メッセージ処理部34は、仮受信「否」の判定結果が入力されると、受信した通信メッセージMBを破棄する。これに対し、メッセージ処理部34は、仮受信「可」の判定結果が入力されると、認証子生成部33で認証されなかった受信した通信メッセージMBであれ、この受信した通信メッセージMBに対して認証されたときと同様の処理を行う。すなわち、メッセージ処理部34は、仮受信「可」と判定された受信した通信メッセージMBから「メッセージデータDT」を取得し、この取得した「メッセージデータDT」を情報処理部32に送る。これにより、電源投入直後やリセット直後等であって、「上位ビットMCH」が初期値のままであるときであっても、「メッセージデータDT」が情報処理部32に送られて、この「メッセージデータDT」が第1ECU21と第3ECU23とで共用される。
また、通信メッセージMBを送信するとき、メッセージ処理部34は、情報処理部32から「メッセージデータDT」を入力し、この入力した「メッセージデータDT」に基づく「認証子AC2」を生成する。そして、メッセージ処理部34は、「メッセージデータDT」と「認証子AC2」とを含む送信する通信メッセージMBを生成し、この生成した送信する通信メッセージMBをMBOX31cに出力する。
認証子生成部33は、メッセージカウンタMCのうちの「上位ビットMCH」と「下位ビットMCL」とを管理している。なお、認証子生成部33は、メッセージカウンタMCのうちの「上位ビットMCH」と「下位ビットMCL」とを1つだけ確保されたメッセージカウンタMCの記憶領域の対応する位置に記憶するようにしてもよいし、「上位ビットMCH」と「下位ビットMCL」とをそれぞれ別々に確保された記憶領域に記憶するようにしてもよい。また、認証子生成部33は、電源遮断やリセットによって「下位ビットMCL」を記憶保持するため記憶領域や、「上位ビットMCH」を記憶保持するため記憶領域の値が初期化により初期値になるようになっている。この初期化は、他のECUやゲートウェイ10とは非同期に生じることも少なくない。
認証子生成部33は、メッセージカウンタの同期処理と、通信メッセージの送信時処理と、通信メッセージの受信時処理とを行う。そこで各処理について、以下に詳述する。
[メッセージカウンタの同期処理]
認証子生成部33は、MBOX31bから同期用メッセージMAが入力されたとき、同期用メッセージMAを認証するとともに、認証できたことを条件に「上位ビットMCH」の値を同期用メッセージMAに含まれている「上位ビットMCH」の値により更新する。また、認証子生成部33は、「上位ビットMCH」の値の更新を条件に「下位ビットMCL」の値を初期化して「0」にする。これにより「下位ビットMCL」は「0」から最大値までの範囲で更新可能に設定される。
また、認証子生成部33は、同期用メッセージMAの認証を行う。認証子生成部33は、MBOX31bから入力した同期用メッセージMAから「認証子AC1」と「上位ビットMCH」を取得する。そして、認証子生成部33は、取得した「上位ビットMCH」を、暗号化エンジン35で暗号化して認証子を再生成する。そして、認証子生成部33は、再生成した認証子と同期用メッセージMAから取得した「認証子AC1」とを比較し、比較の結果が一致すれば同期用メッセージMAを認証する旨を判定し、一致しないのであれば同期用メッセージMAを認証しない旨を判定する。
通常、認証子生成部33に記憶されている「上位ビットMCH」は、同期用メッセージMAが入力されることで、定期的、又は、所定の期間以内毎に更新される。一方、電源投入直後やリセット直後であって同期用メッセージMAが受信されて入力されるまでの間は、認証子生成部33に記憶されている「上位ビットMCH」は、初期値のままであったり、更新されていない状態であったりする。更新されていない状態とは、「上位ビットMCH」が所定の期間初期値であって、一度も、又は、長期間、同期用メッセージが受信されていないために更新されていない状態である。
なお、認証子生成部33は、暗号化エンジン35を備えている。暗号化エンジン35は、暗号鍵EKが設定されており、認証子生成部33からメッセージデータDTやメッセージカウンタMCを入力し、暗号鍵EKで暗号化することで認証子を生成する。暗号鍵EKは、ゲートウェイ10と同じものが設定されていることから、第1ECU21とゲートウェイ10との間、及び、第1ECU21と第2〜4ECU22〜24との間ではそれぞれ暗号化された通信が可能である。なお、暗号鍵EKは、耐タンパメモリ等を用いて外部から取得不可能であればなおよい。
[通信メッセージの送信時処理]
認証子生成部33は、通信メッセージMBの送信時処理として、送信する通信メッセージMBの認証子の生成処理を行う。認証子生成部33は、メッセージ処理部34から「メッセージデータDT」が入力される。認証子生成部33は、管理している「下位ビットMCL」と同期用メッセージMAから取得して保持している「上位ビットMCH」とから、メッセージカウンタMCを再構成するとともに、暗号化エンジン35で、再構成したメッセージカウンタMCと入力されたメッセージデータDTとを暗号鍵EKで暗号化して「認証子AC2」を生成する。また、認証子生成部33は、入力した「メッセージデータDT」と、「認証子AC2」の生成に使用した「下位ビットMCL」と、生成した「認証子AC2」とをメッセージ処理部34に出力する。そして、メッセージ処理部34は、認証子生成部33から入力した「メッセージデータDT」、「下位ビットMCL」及び「認証子AC2」から送信する通信メッセージMBを生成するとともに、この生成した通信メッセージMBをMBOX31cに出力する。また、認証子生成部33は、「認証子AC2」を生成したことに対応して「下位ビットMCL」を1つ大きい値に更新する。これによって、「認証子AC2」が生成されるとき、メッセージカウンタMCが過去の値と二度と同じ値にならないようになっている。
[通信メッセージの受信時処理]
認証子生成部33は、通信メッセージMBの受信時処理として、受信した通信メッセージMBの認証処理を行う。認証処理では、「認証子AC2」に基づく認証を行う。
つまり、図5に示すように、認証子生成部33には、メッセージ処理部34から受信した通信メッセージMBの「メッセージデータDT」と、メッセージカウンタMCのうちの「下位ビットMCL」と、「認証子AC2」とが入力される。認証子生成部33は、入力された「下位ビットMCL」と、保持している「上位ビットMCH」とから、メッセージカウンタMCを再構成するとともに、暗号化エンジン35で、再構成したメッセージカウンタMCと入力された「メッセージデータDT」とを暗号鍵EKで暗号化して「認証子AC3」を再生成する。また、認証子生成部33は、入力した「認証子AC2」と、再生成した「認証子AC3」とを比較して、一致すれば認証する旨を判定し、一致しないのであれば認証しない旨を判定する。そして、認証子生成部33は、認証の判定結果をメッセージ処理部34に出力する。メッセージ処理部34は、認証された通信メッセージMBの「メッセージデータDT」を情報処理部32に出力する。一方、メッセージ処理部34は、認証されなかった通信メッセージMBに対して仮受信判定部37から受信の可否判断を取得し、受信「可」であれば、通信メッセージMBの「メッセージデータDT」を情報処理部32に出力し、受信「否」であれば、通信メッセージMBの「メッセージデータDT」を破棄する。
本実施形態の通信システムの動作を説明する。
ここでは説明の便宜上、通信メッセージMBは、第1ECU21から送信されて、第3ECU23に受信されるものとする。
[上位ビットの更新]
図6及び図7には、ECU21〜24の認証子生成部33が保持しているメッセージカウンタMCのうちの「上位ビットMCH」を更新する手順を示す。この手順は、ゲートウェイ10やECU21〜24で所定の周期毎、又は所定の条件が成立する毎に実行が開始される。
図6に示すように、ゲートウェイ10は、同期用メッセージMAを送信するタイミングであるか否かを判定する(図6のステップS10)。送信するタイミングは、例えば、メッセージカウンタMCのうちの「上位ビットMCH」がゲートウェイ10のコード管理部11により更新されたとき等である。送信するタイミングではないと判定した場合(図6のステップS10でNO)、上位ビットを更新する処理が一旦終了される。
一方、送信するタイミングであると判定した場合(図6のステップS10でYES)、ゲートウェイ10は、「同期用メッセージMA」を全ECU21〜24に送信する(図6のステップS11)。そして、上位ビットを更新する処理は一旦終了する。
図7に示すように、各ECU21〜24は、同期用メッセージMAを受信したか否かを判定する(図7のステップS20)。同期用メッセージMAを受信していないと判定した場合(図7のステップS20でNO)、上位ビットを更新する処理は一旦終了する。一方、同期用メッセージMAを受信したと判定した場合(図7のステップS20でYES)、各ECU21〜24は、受信した同期用メッセージMAの「認証子AC1」を認証する(図7のステップS21)。「認証子AC1」の認証は、認証子生成部33で再生成した認証子との比較で行われ、比較の結果が一致すれば認証される一方、比較の結果が一致しなければ認証されない。同期用メッセージMAの「認証子AC1」を認証できない場合(図7のステップS21でNO)、上位ビットを更新する処理は一旦終了する。
一方、同期用メッセージMAの認証子AC1を認証した場合(図7のステップS21でYES)、各ECU21〜24は、記憶しているメッセージカウンタMCのうちの「上位ビットMCH」を更新する(図7のステップS22)。そして、上位ビットを更新する処理は一旦終了する。
[通信メッセージの送信処理]
図4に示すように、第1ECU21は、情報処理部32が「メッセージデータDT」を生成すると、認証子生成部33で「メッセージデータDT」とメッセージカウンタMCとに基づいて「識別子AC2」を生成する。そして、第1ECU21は、「識別子AC2」を生成したときの「メッセージデータDT」及びメッセージカウンタMCのうちの「下位ビットMCL」と、生成した「識別子AC2」とから通信メッセージMBを生成するとともに、この生成した通信メッセージMBを通信用バスL1に送信する。通信用バスL1に送信された通信メッセージMBは、ゲートウェイ10で通信用バスL1から通信用バスL2に転送されて、通信用バスL2に接続されている第3ECU23で受信できるようになる。
[通信メッセージの受信処理]
図8及び図9に示す通信メッセージの受信処理は、所定の周期で繰り返し実行される、又は、通信メッセージMBの受信に応じて実行される。
図8に示すように、第3ECU23は、受信した通信メッセージMBがメッセージ処理部34で取得されたことに基づいて、認証子生成部33で同期用メッセージMAを受信しているか否かを判定する(図8のステップS50)。同期用メッセージMAを受信しているか否かは、同期用メッセージMAに対応するメッセージIDを有する通信メッセージが受信されたか否か、及び、同期用メッセージMAが認証子生成部33に入力されたか否かの少なくとも一方に基づいて判定される。よって、同期用メッセージMAが受信できていいないことは、同期用メッセージMAに対応するメッセージIDを有する通信メッセージが受信されていないこと、及び、同期用メッセージMAが認証子生成部33に入力されていないことの少なくとも一方に基づいて判定される。また、受信しているか否かは、第3ECU23が電源投入されたことやリセットされたことによってECUが起動された後であることに基づいて判定される。同期用メッセージMAを受信していないと判定した場合(図8のステップS50でNO)、第3ECU23は、ECU起動から所定期間経過しているか否かを判定する(図8のステップS51)。ECU起動とは、電源投入後やリセット後にECUが起動することであり、所定期間は、ECU起動後に同期用メッセージMAが受信されることが期待される通常の期間であるとともに、メッセージID毎に予め設定されている期間である。ECU起動から所定期間経過していると判定した場合(図8のステップS51でYES)、第3ECU23は、メッセージ処理部34で受信した「メッセージデータDT」を破棄するとともに、認証失敗を情報処理部32のアプリケーションに通知する(図8のステップS56)。そして、第3ECU23は、通信メッセージMBの受信処理を一旦終了する。
一方、ECU起動から所定期間経過していないと判定した場合(図8のステップS51でNO)、第3ECU23は、暗号化エンジン35で「メッセージデータDT」と再構成したメッセージカウンタMCとから「認証子AC3」を再生成する(図8のステップS52)。続いて、第3ECU23は、認証子生成部33で、受信した通信メッセージMBから取得した「識別子AC2」と、上記再生成した「認証子AC3」とを比較して一致するか否か判定する(図8のステップS53)。一致しないと判定した場合(図8のステップS53でNO)、第3ECU23は、再度、ECU起動から所定期間経過しているか否かを判定する(図8のステップS54)。そして、ECU起動から所定期間経過していると判定した場合(図8のステップS54でYES)、上述したステップS56の処理が行なわれ、その後、通信メッセージMBの受信処理が一旦終了される。他方、ECU起動から所定期間経過していないと判定した場合(図8のステップS54でNO)、又は、上記ステップS53の判定で一致すると判定した場合(図8のステップS53でYES)、第3ECU23は、「メッセージデータDT」を情報処理部32のアプリケーションに送る(図8のステップS55)。そして、第3ECU23は、通信メッセージMBの受信処理を一旦終了する。
一方、図9に示すように、同期用メッセージMAを受信していると判定した場合(図8のステップS50でYES)、第3ECU23は、認証子生成部33で同期用メッセージMAを受信処理しているか否かを判定する(図9のステップS40)。ここで、同期用メッセージMAを受信処理しているか否かは、同期用メッセージMAが受信処理されて「上位ビットMCH」が適切に更新されているか否かに基づいて判定される。すなわち、受信しているか否かは、第3ECU23が電源投入されたことやリセットされたことによってECUが起動された後について判定される。また、適切に更新されていることは、「上位ビットMCH」が初期値から変更されていること、更新が停止されていないこと、及び、定期的に更新されていることに基づいて判定される。同期用メッセージMAを受信処理していないと判定した場合(図9のステップS40でNO)、第3ECU23は、メッセージ処理部34で受信した「メッセージデータDT」を破棄するとともに、認証失敗を情報処理部32のアプリケーションに通知する(図9のステップS45)。そして、第3ECU23は、通信メッセージMBの受信処理を一旦終了する。
一方、同期用メッセージMAを受信処理していると判定した場合(図9のステップS40でYES)、図5を併せて参照すると、第3ECU23は、認証子生成部33で通信メッセージMBから「メッセージデータDT」と、メッセージカウンタMCのうちの「下位ビットMCL」と、「識別子AC2」とを取得する(図9のステップS41)。また、第3ECU23は、認証子生成部33でメッセージカウンタMCのうちの「下位ビットMCL」と、同期用メッセージMAから事前に取得したメッセージカウンタMCのうちの「上位ビットMCH」とからメッセージカウンタMCを再構成する。そして、第3ECU23は、暗号化エンジン35で「メッセージデータDT」と再構成したメッセージカウンタMCとから「認証子AC3」を再生成する(図9のステップS42)。続いて、第3ECU23は、認証子生成部33で、取得した「識別子AC2」と再生成した「認証子AC3」とを比較して一致するか否か判定する(図9のステップS43)。
一致すると判定された場合(図9のステップS43でYES)、第3ECU23は、「メッセージデータDT」を情報処理部32のアプリケーションに送る(図9のステップS44)。一方、一致しないと判定した場合(図9のステップS43でNO)、第3ECU23は、上述したステップS45の処理、つまり、メッセージ処理部34で受信したメッセージデータDTを破棄するとともに、認証失敗を情報処理部32のアプリケーションに通知する処理を行う。そして、第3ECU23は、通信メッセージMBの受信処理を一旦終了する。
以上説明した一連の処理により、時変パラメータを利用して通信メッセージの信頼性を確保する場合、認証されなかった通信メッセージMBであっても仮受信が「可」であれば、「メッセージデータDT」が情報処理部32へ送られるようになり、通信メッセージの授受にかかる遅延を抑制することができる。
以上説明したように、本実施形態に係る通信システムによれば、以下に示すような効果が得られるようになる。
(1)通信メッセージMBにはメッセージカウンタMCのうちの「下位ビットMCL」だけが含まれることとなり、メッセージデータのために多くの領域を確保することができる。また、「上位ビットMCH」は、ゲートウェイ10によって管理されることから、各ECU21〜24のそれぞれの間で同期されるようにもなる。つまり、受信側の各ECU21〜24は、ゲートウェイ10からの「上位ビットMCH」と、通信メッセージMBに含まれる「下位ビットMCL」とを組み合わせることで、送信側の各ECU21〜24で「認証子AC2」の生成に利用されたメッセージカウンタMCを再構成することができる。これにより、メッセージカウンタMCの大きさを信頼性の確保に必要とされるサイズにしたとしても、通信メッセージMBの格納に要する容量を少なく抑えて、メッセージデータのための容量の減少を抑制することができる。これにより、通信量の増大を抑えつつ、通信メッセージMBの信頼性を確保することができるようになる。
(2)ゲートウェイ10から送信されたメッセージカウンタMCのうちの「上位ビットMCH」が受信されることによって、各ECU21〜24に記憶されているメッセージカウンタMCのうちの「上位ビットMCH」が、受信したメッセージカウンタMCのうちの「上位ビットMCH」に更新されて、すなわち同期される。これにより、メッセージカウンタMCが「上位ビットMCH」と「下位ビットMCL」とに2分割されたとしても、通信メッセージMBをメッセージカウンタMCによって認証することが可能になる。
また、各ECU21〜24に記憶されているメッセージカウンタMCのうちの「上位ビットMCH」を同期させることができる。よって、各ECU21〜24に記憶されているメッセージカウンタMCのうちの「上位ビットMCH」がECU21〜24のリセット等により非同期に初期化されたりしたとしても、記憶しているメッセージカウンタMCが正常な値に設定し直されることで、認証を正常に行うことが可能にもなる。
(3)「メッセージID」の別にメッセージカウンタMCが管理されるので、メッセージカウンタMCの大きさが抑えられる。また、「メッセージID」の別であればメッセージカウンタMCのうちの「下位ビットMCL」の更新にも時間的な余裕が得られるようになることからメッセージカウンタMCの同期の自由度も高められる。
(4)同期用メッセージMAで送信されるメッセージカウンタMCのうちの「上位ビットMCH」を暗号鍵EKを用いて暗号化して得られる「認証子AC1」を利用することで、ゲートウェイ10から同期用メッセージMAで送信されるメッセージカウンタMCのうちの「上位ビットMCH」についても、その通信内容の信頼性が維持されるようになる。
すなわち、ゲートウェイ10から同期用メッセージMAで送信される「認証子AC1」は、メッセージカウンタMCのうちの「上位ビットMCH」から生成された「認証子AC1」である。このため、この同期用メッセージMAを受信した各ECU21〜24においても、同期用メッセージMAで送信された「認証子AC1」と、この同期用メッセージMAで送信されるメッセージカウンタMCのうちの「上位ビットMCH」から再生成した認証子とが取得でき、これら認証子の比較で、同期用メッセージMAの認証が可能になる。よって、各ECU21〜24は、ゲートウェイ10からの同期用メッセージMAを受信することで、信頼性の確保されたメッセージカウンタMCのうちの「上位ビットMCH」を取得し、これに基づく同期用メッセージMAの認証を行うことができるようになる。
(5)メッセージカウンタMCの値が重複することがないように更新されるので、一度送信された通信メッセージMBが再送信されたとしてもこれを無効と判断することができるようになる。
(6)認証子AC1,AC2の信頼性、つまり通信メッセージMBの信頼性が共通の暗号鍵EKにより確保される。耐タンパメモリ等を用いて暗号鍵EKを外部から取得不可能にすればなおよい。
(7)第3ECU23は、メッセージカウンタMCのうちの上位ビットMCHを含む同期用メッセージMAが受信できていないことを条件に、受信した通信メッセージMBを認証されたものとして取り扱う。これにより、第3ECU23は、電源投入直後やリセット後であって、メッセージカウンタMCのうちの上位ビットMCHを含む同期用メッセージMAをゲートウェイ10からまだ受信できていない場合であっても、第1ECU21と第3ECU23との間で共有する必要のあるメッセージデータDTを共有できるようになる。なお、その後、同期用メッセージMAが受信されれば、通信メッセージMBが認証されるようになることから必要とされる信頼性も維持される。
(その他の実施形態)
なお、上記実施形態は、以下の態様で実施することもできる。
[同期用メッセージ]
・上記実施形態では、メッセージカウンタが同期用メッセージで送信される場合について例示した。このとき、1つのメッセージIDに対して、同期用メッセージに用いるメッセージIDを1つずつ設けるようにしてもよい。この場合、通信システム全体としてメッセージIDの数が2倍以上になるおそれがある。
また、すべてのメッセージIDに対して、同期用メッセージに用いるメッセージIDを1つだけ設けるようにしてもよい。この場合、通信システム全体としてメッセージIDの数が1つ増えるだけである。さらに、全部よりも少ない複数のメッセージIDに対して、同期用メッセージに用いるメッセージIDを1つずつ設けるようにしてもよい。すなわち、同期用メッセージを共用することができれば、数に限りのあるメッセージIDのなかから同期用メッセージに割り当てるメッセージIDの数を少なく抑えることができる。メッセージIDの数が少なく抑えられれば、メッセージIDやメッセージデータを記憶するための領域の増加の抑制、処理負荷の増大の抑制、通信負荷の増大の抑制等も図られる。
[ゲートウェイ]
・上記実施形態では、ゲートウェイ10は、複数の通信用バスL1,L2の間における通信メッセージを中継する場合について例示した。しかしこれに限らず、ゲートウェイは、1つの通信用バスに接続されていてもよいし、2つよりも多い通信用バスの間に通信メッセージを中継してもよい。
・上記実施形態では、ゲートウェイ10が同期用メッセージMAを管理して送信する場合について例示した。しかしこれに限らず、ECUが同期用メッセージを管理して送信してもよい。
・上記実施形態では、1つのゲートウェイ10が同期用メッセージMAを管理して送信する場合について例示した。しかしこれに限らず、複数のゲートウェイやECUが同期用メッセージを分担して管理してもよい。
・上記実施形態では、コード管理部11は、メッセージカウンタMCのうちの「上位ビットMCH」を記憶、管理する場合について例示した。しかしこれに限らず、コード管理部は、メッセージカウンタMCの全長を保持していてもよい。そして、メッセージカウンタMCの「上位ビットMCH」に対応するビット部分を管理するようにしてもよい。なお、メッセージカウンタMCのうちの「下位ビットMCL」は最新の値を通信メッセージMBから取得してもよい。
・上記実施形態では、送信部12はメッセージカウンタMCの一部を送信する場合について例示した。しかしこれに限らず、ゲートウェイがメッセージカウンタの全体を保持していれば、送信部は同期用メッセージでメッセージカウンタの全体(全ビット数)を送信してもよい。なお、同期用メッセージを受信したECUは、メッセージカウンタの全体(全ビット数)のうちから上位ビットに対応する部分だけを利用すればよい。
[通信プロトコル]
・上記実施形態では、通信プロトコルがCANプロトコルである場合について例示した。しかしこれに限らず、通信メッセージの信頼性確保にメッセージカウンタを用いるのであれば、通信プロトコルは、CANプロトコル以外のプロトコル、例えば、イーサーネット(登録商標)やフレックスレイ(登録商標)などの通信プロトコルであってもよい。
[メッセージカウンタ]
・上記実施形態では、メッセージカウンタMCが「下位ビットMCL」と「上位ビットMCH」とからなる場合について例示した。しかしこれに限らず、メッセージカウンタは、ビット列のうち上位ビットとする位置と、下位ビットとする位置とが逆になってもよいし、別に確保された記憶領域をそれぞれ上位ビット用と下位ビット用として扱うようにしてもよい。
・上記実施形態では、メッセージカウンタMCの長さが8バイト(64ビット)である場合について例示した。しかしこれに限らず、二度と同じ値が繰り返されないか、又は、同じ値が繰り返されるにしても長時間の時間間隔が確保できれば、メッセージカウンタの長さは、64ビットよも長い124ビット等や、逆に、64ビットよも短い32ビット等であってもよい。
・上記実施形態では、コード管理部11は、「下位ビットMCL」が最大値になることに応じて「上位ビットMCH」を更新する場合、いわゆる、ビット列において桁上がりが生じることと同様の態様について例示した。しかしこれに限らず、コード管理部はさらに、同期用メッセージMAを送信する所定の条件が成立することに応じて「上位ビットMCH」を更新してもよい。所定の条件には、イグニッションが「オフ」から「オン」された場合や、先の同期用メッセージを更新(送信)した時点から所定の時間(例えば、Ymsec:Yは設定可能な値)が経過した場合等の1又は複数の条件、及び、それらの条件の組み合わせからなる条件とすることができる。
・上記実施形態では、メッセージカウンタMCの「下位ビットMCL」が「0」から最大値まで変化したことに応じてゲートウェイ10で「上位ビットMCH」の値が「1」だけ増加される(単調増加される)場合について例示した。しかしこれに限らず、メッセージカウンタMCが二度と同じ値にならないようにできるのであれば、「下位ビットMCL」が最大値を超えるよりも以前のタイミングを更新タイミングとして「上位ビットMCH」を更新してもよい。このとき、できるだけ「下位ビットMCL」の最大値に近い値であるときを更新タイミングとすれば、メッセージカウンタMCのビット数を有効に利用できるようになる。例えば、コード管理部で、ECUが送信する通信メッセージを受信することでメッセージカウンタのうちの「下位ビットMCL」を監視し、この「下位ビットMCL」が最大値未満に設定された閾値である更新値以上になったときを更新タイミングにするようにすればよい。
・上記実施形態では、メッセージカウンタMCのうちの「下位ビットMCL」が初期値の「0」から最大値に向けて変化する場合について例示した。しかしこれに限らず、初期値を「0」より大きい値に設定し、最大値の次に「0」に戻して初期値の手前の値まで変化させるようにしてもよい。
・上記実施形態では、メッセージカウンタは通信メッセージが送信される都度、値が「1」ずつ増加される場合について例示した。しかしこれに限らず、通信メッセージの信頼性が確保されるのであれば、メッセージカウンタは、例えば、二度と同じ値を使用しないように最大値から「0」まで減少してもよいし、不規則な変化をしてもよい。なお、上位ビットと下位ビットとは別々に管理されることから、上位ビットの変化態様と下位ビットの変化態様とは同一であってもよいし、別々であってもよい。
・上記実施形態では、1つのメッセージIDに1つのメッセージカウンタMCが対応している場合について例示した。しかしこれに限らず、1つのメッセージカウンタに、複数のメッセージIDが対応してもよい。メッセージカウンタが、複数のメッセージIDに対応する場合、管理するメッセージカウンタの数を減らすことができるようにもなる。
・上記実施形態では、メッセージカウンタMCが二度と同じ値にならないようにしている場合について例示したが、これに限らず、メッセージカウンタMCが一時的に同じ値になったりしてもよい。例えば、「上位ビット」の更新が間に合わなかったり、同期できなかったりした場合、メッセージカウンタが一時的に過去と同じ値になって二度使用されてもよい。また、必要な信頼性が確保できるのであれば、同じ値を、所定回数だけ使いまわすようにしてもよい。
・上記実施形態では、「上位ビットMCH」を7バイト、「下位ビットMCL」を1バイトとする場合について例示した。しかしこれに限らず、上位ビットと下位ビットとは、それ以外のバイト、例えば、「6バイト」及び「2バイト」等で区切ってもよい。また、バイト単位で区切るのではなく、例えば「60ビット」と「4ビット」と等、ビットの単位で区切ってもよい。
[メッセージボックス]
・上記実施形態では、複数のMBOX31a,31b,31cを備える場合について例示したが、これに限らず、MBOXは、送受信する通信メッセージがECUのなかの適切な部分と授受できるように中継及び一時格納できるのであれば、1つでもよいし、2つや、4つ以上であってもよい。
[認証子生成部]
・上記実施形態では、「認証子AC2」に基づく認証を行う場合について例示した。このとき、「認証子AC2」に基づく認証に先立ち、通信メッセージMBからメッセージカウンタMCのうちの「下位ビットMCL」を取得し、取得した「下位ビットMCL」が、前回の取得した「下位ビットMCL」よりも大きい(更新されている)か否かを確認してもよい。そして、大きい(更新されている)場合、「認証子AC2」に基づく認証を行い、逆に、大きくない(更新されていない)場合、認証しない旨を判定するとともに、「認証子AC2」に基づく認証を割愛してもよい。