以下、実施形態に係る電子機器、メッセージ送信方法およびプログラムを、図面を参照して詳細に説明する。以下では、自動車に搭載される車載ネットワークにおいてメッセージの送信を行う電子制御ユニット(ECU)への適用例を例示するが、適用可能な電子機器はこれに限定されるものではなく、送信間隔が変化するメッセージを送信する様々な電子機器に対して有効に適用できる。
<実施形態の概要>
車載ネットワークは、自動車に設けられた多数のECU間で、メッセージ識別子により識別されるメッセージを送受信するネットワークである。この車載ネットワークへの攻撃として、正規のメッセージと同じメッセージ識別子を持つ「なりすまし」メッセージを不正送信する攻撃が知られている。本実施形態は、このようなメッセージの不正送信を適切かつ簡便に検知できる仕組みを提案する。以下では、正規のメッセージを送信するECUを「正規送信ECU」、メッセージを受信するECUを「受信ECU」、メッセージを不正送信するECUを「不正送信ECU」と呼ぶ。
図1は、本実施形態において想定する車載ネットワークの構成例を示す図である。本実施形態では、図1に示すように、正規送信ECU10と受信ECU20に加え、不正送信ECU30がネットワークバス40に接続された車載ネットワークを想定する。
正規送信ECU10は、受信ECU20に伝えるべきシグナルを含むユーザデータの先頭に、自身が送信するメッセージに対して割り当てられた所定のメッセージ識別子を付加したメッセージを、ネットワークバス40上に送信する。正規送信ECU10は、シグナルの変化などのメッセージ送信イベントが発生したときにメッセージの送信を行うことに加え、シグナルの変化がない場合でも、少なくとも予め定めた最長送信間隔Tlで1回はメッセージの送信を行う。最長送信間隔Tlは、直前のメッセージ送信時刻から起算されてもよいし、上述のAUTOSAR COMのMIXED送信モードにおけるPERIODIC送信の間隔であってもよい。このようなメッセージの送信方法は、特に、シグナルの変化の頻度が比較的低い場合に、通信量の削減とシグナル変化に対する応答性とを両立させる方法として有効である。
不正送信ECU30は、ネットワークバス40上に送信されるメッセージをモニタし、任意のタイミングで、正規送信ECU10が送信したメッセージと同じメッセージ識別子を持つメッセージを、ネットワークバス40上に不正送信する。
受信ECU20は、ネットワークバス40上に送信されるメッセージをモニタし、自身が受信すべきメッセージ識別子を持つメッセージがネットワークバス40上に送信されると、このメッセージを受信する。受信ECU20が受信するメッセージには、正規送信ECU10が送信したメッセージに加え、不正送信ECU30が不正送信したメッセージも含まれる。受信ECU20は、このようなメッセージの不正送信を検知する機能を持つ。
実施形態に係る電子機器、メッセージ送信方法およびプログラムは、一例として、図1に示す構成の車載ネットワークにおける正規送信ECU10に適用される。正規送信ECU10は、上述のように送信間隔が変化するメッセージを送信するが、このような送信間隔が変化するメッセージの不正送信を受信ECU20において適切かつ簡便に検知できるように、メッセージの送信を行う。
送信間隔が変化するメッセージの不正送信を検知する方法として、送信カウンタを用いる方法がある。送信カウンタは、メッセージを送信するたびに値をインクリメント(+1)するカウンタである。メッセージに送信カウンタの値(送信カウンタ値)を含めて送信することで、受信側では送信カウンタ値の不連続性からメッセージの不正送信が生じたことを検知できる。例えば図2に示すように、不正送信ECU30が、送信カウンタ値が1のメッセージが送信されたことを検知して、送信カウンタ値が2のメッセージを不正送信したとする。この場合、受信ECU20は、正規送信ECU10が送信した送信カウンタ値が2のメッセージを受信した時点で、受信したメッセージの送信カウンタ値に不連続が生じていることが分かり、メッセージの不正送信を検知できる。
図3は、送信カウンタを用いてメッセージの不正送信を検知する場合のメッセージのデータ構造の一例を示す図である。送信カウンタを用いる場合、図3に示すように、メッセージのユーザデータの領域の一部が送信カウンタ値を格納する領域に割り当てられる。ここで、送信カウンタ値のサイズが大きいとユーザデータの領域が圧迫されるため、N(一般にN=2n)回のカウントで巡回するカウンタ(モジュロNカウンタ)を送信カウンタとして用い、送信カウンタ値のサイズをできるだけ小さくすることが望ましい。
しかし、モジュロNカウンタを送信カウンタとして用いる場合、送信カウンタ値の不連続性から不正送信を検知できなくなる場合がある。例えば図4(a)に示すように、正規送信ECU10が最長送信間隔Tlでメッセージを送信する間に、不正送信ECU30が、送信カウンタ値が連続するようにN個のメッセージを不正送信したとする。この場合、正規送信、N個の不正送信、正規送信の順番で受信ECU20が受信するメッセージは、送信カウンタ値が連続することになるため、不正送信を検知できない。
そこで、本実施形態では、図4(b)に示すように、最長送信間隔Tlにおいて許容されるメッセージの最大送信回数M(M≦N)、あるいは、最長送信間隔Tlよりも短い間隔で送信するメッセージ(短間隔メッセージ)に許容される最短送信間隔Ts(Ts≧Tl/N)を定めるようにしている。そして、正規送信ECU10は、最大送信回数Mまたは最短送信間隔Tsを用いてメッセージの送信タイミングを制御し、受信ECU20は、送信カウンタ値の連続性に加えて、最大送信回数Mまたは最短送信間隔Tsを用いてメッセージの不正送信を検知する。なお、実際には通信のアービトレーションなどによりメッセージの送信間隔にばらつきが生じるため、最長送信間隔Tlや最短送信間隔Tsに変動を吸収するパラメータを加えてもよい。
例えば、正規送信ECU10が最長送信間隔Tlでメッセージを送信する間に、不正送信ECU30が、送信カウンタ値が連続するようにN個のメッセージを不正送信したとする。この場合、図4(c)に示すように、少なくとも1つのメッセージ送信間隔Tが最短送信間隔Tsよりも短くなるため、受信ECU20は、受信したメッセージの送信カウンタ値が連続していたとしても、最短送信間隔Tsの違反によりメッセージの不正送信を検知できる。また、受信ECU20が、正規送信ECU10が送信した送信カウンタ値が0のメッセージを受信してから最長送信間隔Tlの間で受信するメッセージの数は、不正送信ECU30が送信したN個のメッセージと、最長送信間隔Tlで正規送信ECU10が送信した送信カウンタ値が1のメッセージとを合せてN+1になる。このため、受信ECU20は、受信したメッセージの送信カウンタ値が連続していたとしても、最大送信回数Mの違反によりメッセージの不正送信を検知できる。
以下では、より具体的な実施形態について説明する。なお、以下に示す各実施形態においては、車載ネットワークの通信規格としてCAN(Controller Area Network)を用いることを想定する。CANは、メッセージ識別子(CAN_ID)で識別されるメッセージを送受信する車載ネットワークの通信規格として一般的な規格である。ただし、メッセージ識別子で識別されるメッセージを送受信する他の通信規格を用いてもよい。また、以下に説明する各実施形態において、同様の機能を持つ構成要素については同一の符号を付して、重複した説明を適宜省略する。
<第1実施形態>
まず、正規送信ECU10の構成について説明する。図5は、正規送信ECU10のハードウェア構成例を示すブロック図である。正規送信ECU10は、例えば図5に示すように、LSI(Large-Scale Integration)11と、ネットワークバス40に接続されるトランシーバ12とを備える。トランシーバ12は、ネットワークバス40における差動電位をデジタル信号に変換したり、デジタル信号を差動電位に変換したりといったアナログ処理を行う。
LSI11は、デジタル信号処理を行う集積回路(マイクロコンピュータ)であり、CPU13、RAM14、ROM15、通信コントローラ16、およびタイマ17などが実装されている。CPU13は、所定のプログラムを実行して正規送信ECU10全体の動作を制御するプロセッサである。RAM14は、CPU13がプログラムを実行する際のワークエリアとなるメモリであり、ROM15は、CPU13が実行するプログラムやデータを格納するメモリである。通信コントローラ16は、トランシーバ12と協働して、ネットワークバス40へのメッセージの送信を行うためのコントローラである。タイマ17は、正規送信ECU10で扱う時間の計測を行い、例えば、送信タイミングの判断や送信タイムスタンプの記録などのために時間を計測する。
実施形態に係る電子機器としての機能は、一例として、上述した正規送信ECU10のハードウェアとソフトウェア(プログラム)との協働により実現することができる。すなわち、正規送信ECU10を実施形態に係る電子機器として機能させるためのプログラムをROM15に格納し、CPU13が、RAM14をワークエリアとして利用して、ROM15に格納されたプログラムを読み出して実行することにより、正規送信ECU10を実施形態に係る電子機器として機能させることができる。
図6は、実施形態に係る電子機器としての機能を持つ正規送信ECU10の機能的な構成例を示すブロック図である。正規送信ECU10は、機能的な構成要素として、例えば図6に示すように、送信部51と、送信制御部52と、シグナル更新部55とを備える。また、正規送信ECU10は、送信制御部52が読み書きする送信履歴テーブル53と、送信制御部52が参照するシグナルテーブル54とを備える。
送信部51は、通信コントローラ16を制御して、ネットワークバス40にトランシーバ12を介してメッセージを送信する機能である。送信制御部52は、送信部51が送信するメッセージをバッファに設定し、適切なタイミングで送信部51に送信の指示を行う。送信部51が送信するメッセージは、上述のようにモジュロNカウンタとして構成される送信カウンタの値(送信カウンタ値)を含む。送信制御部52は、直前に送信したメッセージの送信カウンタ値をインクリメント(+1)してユーザデータに設定し、この送信カウンタ値を含むメッセージをバッファに設定し、適切なタイミングで送信部51に送信の指示を行う。なお、送信カウンタはモジュロNカウンタであるためNカウントで巡回する。ここで、インクリメントとは、送信カウンタ値がN−1から巡回して0に戻ることも含む。
送信履歴テーブル53は、メッセージ識別子が同一のメッセージごとに、少なくとも送信済みのメッセージの送信カウンタ値と送信タイムスタンプとを保持する。送信履歴テーブル53の一例を図7に示す。送信制御部52は、送信部51がメッセージを送信するたびに、そのメッセージに含まれる送信カウンタ値と、そのメッセージの送信時刻を示す送信タイムスタンプとの組み合わせを、新たなレコードとして送信履歴テーブル53に追加する。なお、送信履歴テーブル53に所定数(例えばM個)以上のレコードが溜まった場合は、古いレコードから削除するようにしてもよい。
シグナルテーブル54は、正規送信ECU10がモニタする各種シグナル(メッセージにより受信ECU20に伝えるべき各種シグナル)の最新の値を保持する。シグナルの変化が検知されると、シグナル更新部55が、シグナルテーブル54の該当するシグナルの値を、変化した後の値に更新する。
なお、以上説明した正規送信ECU10の構成は、基本的に、後述の各実施形態においても共通である。ただし、送信制御部52がメッセージの送信タイミングを制御する手法が、実施形態ごとに異なっている。
本実施形態の正規送信ECU10では、送信制御部52が、予め定めたメッセージの最長送信間隔Tlと、Tlにおいて許容されるメッセージの最大送信回数M(M≦N)とに基づいて、メッセージの送信タイミングを制御する。すなわち、本実施形態の正規送信ECU10は、直前のメッセージ送信時刻からTlが経過するまでの間にシグナルの変化などのメッセージ送信イベントが発生しない場合は、直前のメッセージ送信時刻からTlが経過すると、モジュロNの送信カウンタ値を含むメッセージを送信する。また、直前のメッセージ送信時刻からTlが経過する前にメッセージ送信イベントが発生した場合は、M個前のメッセージの送信時刻からTlが経過しているか否かを判断し、M個前のメッセージの送信時刻からTlが経過していれば、モジュロNの送信カウンタ値を含むメッセージをすぐに送信する。一方、M個前のメッセージの送信時刻からTlが経過していなければ、Tlが経過するまで待って、モジュロNの送信カウンタ値を含むメッセージを送信する。
本実施形態では、シグナルの変化などのメッセージ送信イベントが高頻度で発生する場合、最長送信間隔Tlの間にM回までのメッセージの送信が許容され、M+1回目のメッセージの送信は禁止される。したがって、図8に示すように、M個前のメッセージ送信時刻から最長送信間隔Tlが経過する前にメッセージ送信イベントが発生したとしても、Tlが経過するまでの間は送信禁止期間となり、Tlが経過したときにメッセージの送信が許容される。これにより、不正送信ECU30が送信カウンタ値に不連続が生じないようにメッセージの不正送信を行った場合には、最大送信回数Mの違反が生じ、受信ECU20がこの不正送信を検知することができる。
図9は、本実施形態の送信制御部52による処理手順の一例を示すフローチャートである。送信制御部52は、送信履歴テーブル53とシグナルテーブル54とを参照しながら、この図9のフローチャートで示す一連の処理を所定周期で繰り返し実行する。
送信制御部52は、まず、直前のメッセージ送信時刻からの経過時間Twが最長送信間隔Tlに達したか否かを判定し(ステップS101)、直前のメッセージ送信時刻からの経過時間Twが最長送信間隔Tlに達していなければ(ステップS101:No)、シグナルの変化などのメッセージ送信イベントが発生したか否かを判定する(ステップS102)。この判定は、例えば、送信制御部52がシグナルテーブル54を参照することで行ってもよいし、シグナルの変化が検知されたときにシグナル更新部55が送信制御部52に通知する構成として、この通知の有無に基づいて行ってもよい。
ここで、メッセージ送信イベントが発生していなければ(ステップS102:No)、ステップS101に戻って処理を繰り返す。一方、メッセージ送信イベントが発生した場合は(ステップS102:Yes)、送信制御部52は、次に、M個前のメッセージ送信時刻からの経過時間Tzが最長送信間隔Tlに達したか否かを判定する(ステップS103)。そして、TzがTlに達していれば(ステップS103:Yes)、送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS104)。
一方、TzがTlに達していなければ(ステップS103:No)、送信制御部52は、TzがTlに達するまで待機し、TzがTlに達した段階で送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS104)。また、ステップS101の判定で、TwがTlに達している場合(ステップS101:Yes)、送信制御部52は送信部51に対して送信の指示を行い、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS104)。
本実施形態では、正規送信ECU10の送信制御部52が以上のようにメッセージの送信タイミングを制御することにより、受信ECU20が、送信カウンタ値の不連続性または最大送信回数Mの違反により、メッセージの不正送信を検知することができる。
ここで、不正送信を検知する機能を持つ受信ECU20について説明する。図10は、受信ECU20の機能的な構成例を示すブロック図である。受信ECU20は、機能的な構成要素として、例えば図10に示すように、受信部61と、受信制御部62と、不正送信検知部64とを備える。また、受信ECU20は、受信制御部62により書き込まれて不正送信検知部64により参照される受信履歴テーブル63を備える。なお、受信ECU20のハードウェア構成は正規送信ECU10と同様(図5参照)であるため、説明を省略する。
受信部61は、通信コントローラ16を制御して、ネットワークバス40からトランシーバ12を介してメッセージを受信する機能である。受信制御部62は、ネットワークバス40に送信されたメッセージのメッセージ識別子をもとに、このメッセージを受信すべきか否かを判断し、受信すべきメッセージであれば受信部61に対して受信の指示を行う。
受信履歴テーブル63は、メッセージ識別子が同一のメッセージごとに、少なくとも受信済みのメッセージの送信カウンタ値と受信タイムスタンプとを保持する。受信履歴テーブル63の一例を図11に示す。受信制御部62は、受信部61がメッセージを送信するたびに、そのメッセージに含まれる送信カウンタ値と、そのメッセージの受信時刻を示す受信タイムスタンプとの組み合わせを、新たなレコードとして受信履歴テーブル63に追加する。なお、受信履歴テーブル63に所定数(例えばM個)以上のレコードが溜まった場合は、古いレコードから削除するようにしてもよい。
不正送信検知部64は、受信したメッセージに含まれる送信カウンタ値の不連続性または最大送信回数Mの違反を検知することで、送信間隔が変化するメッセージの不正送信を検知する。最大送信回数Mの違反は、正規送信ECU10と共有する最長送信間隔Tlと最大送信回数Mとに基づいて判断される。
なお、以上説明した受信ECU20の構成は、基本的に、後述の各実施形態においても共通である。ただし、不正送信検知部64が不正送信を検知する手順が、実施形態ごとに異なっている。
図12は、本実施形態の不正送信検知部64による処理手順の一例を示すフローチャートである。不正送信検知部64は、受信部61によりメッセージが受信されるたびに、受信履歴テーブル63を参照しながら、この図12のフローチャートで示す一連の処理を繰り返し実行する。
受信部61によりメッセージが受信されると、不正送信検知部64は、まず、今回受信したメッセージの受信時刻とM個前のメッセージの受信時刻との間隔Tz’が最長送信間隔Tl以上であるか否かを判定する(ステップS201)。そして、Tz’がTl以上であれば(ステップS201:Yes)、不正送信検知部64は、次に、今回受信したメッセージの送信カウンタ値Cm0が、直前に受信したメッセージの送信カウンタ値Cm1からインクリメントされているか否かを判定する(ステップS202)。
そして、Cm0がCm1からインクリメントされていれば(ステップS202:Yes)、不正送信検知部64は、不正送信なしと判断する(ステップS203)。一方、ステップS201の判定で、Tz’がTl未満であった場合(ステップS201:No)、または、ステップS202の判定で、Cm0がCm1からインクリメントされていない場合は(ステップS202:No)、不正送信検知部64は、不正送信ありと判断する(ステップS204)。
以上説明したように、本実施形態の正規送信ECU10は、直前のメッセージ送信時刻から最長送信間隔Tlが経過するまでの間にメッセージ送信イベントが発生しない場合は、直前のメッセージ送信時刻からTlが経過すると、モジュロNの送信カウンタ値を含むメッセージを送信する。また、直前のメッセージ送信時刻からTlが経過する前にメッセージ送信イベントが発生した場合は、M個前のメッセージの送信時刻からTlが経過しているか否かを判断し、M個前のメッセージの送信時刻からTlが経過していれば、モジュロNの送信カウンタ値を含むメッセージをすぐに送信する。一方、M個前のメッセージの送信時刻からTlが経過していなければ、Tlが経過するまで待って、モジュロNの送信カウンタ値を含むメッセージを送信する。したがって、受信ECU20は、送信カウンタ値の不連続性または最大送信回数Mの違反により、送信間隔が変化するメッセージの不正送信を適切かつ簡便に検知することができる。
<第2実施形態>
次に、第2実施形態について説明する。本実施形態では、正規送信ECU10の送信制御部52が、予め定めたメッセージの最長送信間隔Tlと、Tlよりも短い間隔で送信する短間隔メッセージに許容される最短送信間隔Ts(Ts≧Tl/N)とに基づいて、メッセージの送信タイミングを制御する。すなわち、本実施形態の正規送信ECU10は、直前のメッセージ送信時刻からTlが経過するまでの間にメッセージ送信イベントが発生しない場合は、直前のメッセージ送信時刻からTlが経過すると、モジュロNの送信カウンタ値を含むメッセージを送信する。また、直前のメッセージ送信時刻からTlが経過するまでの間にメッセージ送信イベントが発生した場合は、直前のメッセージの送信時刻から最短送信間隔Tsが経過しているか否かを判断し、直前のメッセージの送信時刻からTsが経過していれば、モジュロNの送信カウンタ値を含むメッセージをすぐに送信する。一方、直前のメッセージの送信時刻からTsが経過していなければ、Tsが経過するまで待って、モジュロNの送信カウンタ値を含むメッセージを送信する。
本実施形態では、シグナルの変化などのメッセージ送信イベントが高頻度で発生する場合、最短送信間隔Tsよりも短い間隔で短間隔メッセージを送信することが禁止される。したがって、図13に示すように、直前のメッセージ送信時刻から最短送信間隔Tsが経過する前にメッセージ送信イベントが発生したとしても、Tsが経過するまでの間は送信禁止期間となり、Tsが経過したときにメッセージの送信が許容される。これにより、不正送信ECU30が送信カウンタ値に不連続が生じないようにメッセージの不正送信を行った場合には、最短送信間隔Tsの違反が生じ、受信ECU20がこの不正送信を検知することができる。
図14は、本実施形態の送信制御部52による処理手順の一例を示すフローチャートである。送信制御部52は、送信履歴テーブル53とシグナルテーブル54とを参照しながら、この図14のフローチャートで示す一連の処理を所定周期で繰り返し実行する。
送信制御部52は、まず、直前のメッセージ送信時刻からの経過時間Twが最長送信間隔Tlに達したか否かを判定し(ステップS301)、直前のメッセージ送信時刻からの経過時間Twが最長送信間隔Tlに達していなければ(ステップS301:No)、シグナルの変化などのメッセージ送信イベントが発生したか否かを判定する(ステップS302)。
ここで、メッセージ送信イベントが発生していなければ(ステップS302:No)、ステップS301に戻って処理を繰り返す。一方、メッセージ送信イベントが発生した場合は(ステップS302:Yes)、送信制御部52は、次に、直前のメッセージ送信時刻からの経過時間Twが最短送信間隔Tsに達したか否かを判定する(ステップS303)。そして、TwがTsに達していれば(ステップS303:Yes)、送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS304)。
一方、TwがTsに達していなければ(ステップS303:No)、送信制御部52は、TwがTsに達するまで待機し、TwがTsに達した段階で送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS304)。また、ステップS301の判定で、TwがTlに達している場合(ステップS301:Yes)、送信制御部52は送信部51に対して送信の指示を行い、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS304)。
本実施形態では、正規送信ECU10の送信制御部52が以上のようにメッセージの送信タイミングを制御することにより、受信ECU20が、送信カウンタ値の不連続性または最短送信間隔Tsの違反により、メッセージの不正送信を検知することができる。
図15は、本実施形態の不正送信検知部64による処理手順の一例を示すフローチャートである。不正送信検知部64は、受信部61によりメッセージが受信されるたびに、受信履歴テーブル63を参照しながら、この図15のフローチャートで示す一連の処理を繰り返し実行する。
受信部61によりメッセージが受信されると、不正送信検知部64は、まず、直前に受信したメッセージの受信時刻と今回受信したメッセージの受信時刻との間隔Tw’が最短送信間隔Ts以上であるか否かを判定する(ステップS401)。そして、Tw’がTs以上であれば(ステップS401:Yes)、不正送信検知部64は、次に、今回受信したメッセージの送信カウンタ値Cm0が、直前に受信したメッセージの送信カウンタ値Cm1からインクリメントされているか否かを判定する(ステップS402)。
そして、Cm0がCm1からインクリメントされていれば(ステップS402:Yes)、不正送信検知部64は、不正送信なしと判断する(ステップS403)。一方、ステップS401の判定で、Tw’がTs未満であった場合(ステップS401:No)、または、ステップS402の判定で、Cm0がCm1からインクリメントされていない場合は(ステップS402:No)、不正送信検知部64は、不正送信ありと判断する(ステップS404)。
以上説明したように、本実施形態の正規送信ECU10は、直前のメッセージ送信時刻から最長送信間隔Tlが経過するまでの間にメッセージ送信イベントが発生しない場合は、直前のメッセージ送信時刻からTlが経過すると、モジュロNの送信カウンタ値を含むメッセージを送信する。また、直前のメッセージ送信時刻からTlが経過する前にメッセージ送信イベントが発生した場合は、直前のメッセージの送信時刻から最短送信間隔Tsが経過しているか否かを判断し、直前のメッセージの送信時刻からTsが経過していれば、モジュロNの送信カウンタ値を含むメッセージをすぐに送信する。一方、直前のメッセージの送信時刻からTsが経過していなければ、Tsが経過するまで待って、モジュロNの送信カウンタ値を含むメッセージを送信する。したがって、受信ECU20は、送信カウンタ値の不連続性または最短送信間隔Tsの違反により、送信間隔が変化するメッセージの不正送信を適切かつ簡便に検知することができる。
<第3実施形態>
次に、第3実施形態について説明する。本実施形態の送信制御部52は、上述の第2実施形態と同様に最長送信間隔Tlと最短送信間隔Tsとに基づいてメッセージの送信タイミングを制御するが、最長送信間隔Tlでメッセージを送信した直後の短間隔メッセージについては、最短送信間隔Tsの制限を適用しない。すなわち、本実施形態の正規送信ECU10は、直前のメッセージ送信時刻からTlが経過するまでの間にメッセージ送信イベントが発生しない場合は、直前のメッセージ送信時刻からTlが経過すると、モジュロNの送信カウンタ値を含むメッセージを送信する。また、直前のメッセージ送信時刻からTlが経過するまでの間にメッセージ送信イベントが発生した場合は、直前に送信したメッセージが短間隔メッセージでなければ(最長送信間隔Tlで送信したメッセージであれば)モジュロNの送信カウンタ値を含むメッセージをすぐに送信し、直前に送信したメッセージが短間隔メッセージであれば、直前のメッセージの送信時刻から最短送信間隔Tsが経過しているか否かを判断する。そして、直前のメッセージの送信時刻からTsが経過していれば、モジュロNの送信カウンタ値を含むメッセージをすぐに送信し、直前のメッセージの送信時刻からTsが経過していなければ、Tsが経過するまで待って、モジュロNの送信カウンタ値を含むメッセージを送信する。
本実施形態では、最長送信間隔Tlでメッセージを送信した直後の短間隔メッセージに最短送信間隔Tsの制限が適用されない。したがって、最短送信間隔Tsは、図16に示すように、直前の短間隔メッセージの送信時刻から起算され、最短送信間隔Tsが経過する前にメッセージ送信イベントが発生したとしても、Tsが経過するまでの間は送信禁止期間となり、Tsが経過したときにメッセージの送信が許容される。なお、本実施形態における最短送信間隔Tsは、送信カウンタの巡回するカウント数Nと最長送信間隔Tlとの関係から、Ts≧Tl/(N−1)と定義される。これにより、不正送信ECU30が送信カウンタ値に不連続が生じないようにメッセージの不正送信を行った場合には、最短送信間隔Tsの違反が生じ、受信ECU20がこの不正送信を検知することができる。
本実施形態の正規送信ECU10は、直前に送信したメッセージが最長送信間隔Tlで送信したメッセージか否かを判断する必要がある。そこで、例えば図17に示すように、送信履歴テーブル53に最長送信間隔Tlでの送信か否かを示す最長間隔送信フラグの値を格納するカラムを追加し、送信したメッセージが最長送信間隔Tlで送信したメッセージであれば1、そうでなければ0を格納する。
図18は、本実施形態の送信制御部52による処理手順の一例を示すフローチャートである。送信制御部52は、送信履歴テーブル53とシグナルテーブル54とを参照しながら、この図18のフローチャートで示す一連の処理を所定周期で繰り返し実行する。
送信制御部52は、まず、直前のメッセージ送信時刻からの経過時間Twが最長送信間隔Tlに達したか否かを判定し(ステップS501)、直前のメッセージ送信時刻からの経過時間Twが最長送信間隔Tlに達していなければ(ステップS501:No)、シグナルの変化などのメッセージ送信イベントが発生したか否かを判定する(ステップS502)。
ここで、メッセージ送信イベントが発生していなければ(ステップS502:No)、ステップS501に戻って処理を繰り返す。一方、メッセージ送信イベントが発生した場合は(ステップS502:Yes)、送信制御部52は、次に、直前に送信したメッセージの最長間隔送信フラグの値が1であるか否かを判定する(ステップS503)。そして、直前に送信したメッセージの最長間隔送信フラグの値が0であれば(ステップS503:No)、直前のメッセージ送信時刻からの経過時間Twが最短送信間隔Tsに達したか否かを判定し(ステップS504)、TwがTsに達していれば(ステップS504:Yes)、送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS505)。
一方、TwがTsに達していなければ(ステップS504:No)、送信制御部52は、TwがTsに達するまで待機し、TwがTsに達した段階で送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS505)。また、ステップS501の判定で、TwがTlに達している場合(ステップS501:Yes)、あるいは、ステップS503の判定で、直前に送信したメッセージの最長間隔送信フラグの値が1であれば(ステップS503:Yes)、送信制御部52は送信部51に対して送信の指示を行い、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS505)。
本実施形態では、正規送信ECU10の送信制御部52が以上のようにメッセージの送信タイミングを制御することにより、受信ECU20が、送信カウンタ値の不連続性または最短送信間隔Tsの違反により、メッセージの不正送信を検知することができる。
本実施形態の受信ECU20は、直前に受信したメッセージが最長送信間隔Tlで送信されたメッセージか否かを判断する必要がある。そこで、例えば図19に示すように、受信履歴テーブル63に最長送信間隔Tlでの送信か否かを示す最長間隔送信検知フラグの値を格納するカラムを追加し、メッセージの受信時に前回受信したメッセージとの受信時刻の差分を求め、前回受信したメッセージとの受信時刻の差分がTl+α以上であれば1、そうでなければ0を格納する。ここでαは、メッセージの送信間隔の変動を吸収するパラメータである。
図20は、本実施形態の不正送信検知部64による処理手順の一例を示すフローチャートである。不正送信検知部64は、受信部61によりメッセージが受信されるたびに、受信履歴テーブル63を参照しながら、この図20のフローチャートで示す一連の処理を繰り返し実行する。
受信部61によりメッセージが受信されると、不正送信検知部64は、まず、前回受信したメッセージの最長間隔送信検知フラグの値が1であるか否かを判定する(ステップS601)。そして、前回受信したメッセージの最長間隔送信検知フラグの値が0であれば(ステップS601:No)、不正送信検知部64は、次に、直前に受信したメッセージの受信時刻と今回受信したメッセージの受信時刻との間隔Tw’が最短送信間隔Ts以上であるか否かを判定し(ステップS602)、Tw’がTs以上であれば(ステップS602:Yes)、今回受信したメッセージの送信カウンタ値Cm0が、直前に受信したメッセージの送信カウンタ値Cm1からインクリメントされているか否かを判定する(ステップS603)。なお、ステップS601の判定で、前回受信したメッセージの最長間隔送信検知フラグの値が1であれば(ステップS601:Yes)、ステップS602の判定は行わずにステップS603に進む。
そして、Cm0がCm1からインクリメントされていれば(ステップS603:Yes)、不正送信検知部64は、不正送信なしと判断する(ステップS604)。一方、ステップS602の判定で、Tw’がTs未満であった場合(ステップS602:No)、または、ステップS603の判定で、Cm0がCm1からインクリメントされていない場合は(ステップS603:No)、不正送信検知部64は、不正送信ありと判断する(ステップS605)。
以上説明したように、本実施形態の正規送信ECU10は、直前のメッセージ送信時刻から最長送信間隔Tlが経過するまでの間にメッセージ送信イベントが発生しない場合は、直前のメッセージ送信時刻からTlが経過すると、モジュロNの送信カウンタ値を含むメッセージを送信する。また、直前のメッセージ送信時刻からTlが経過する前にメッセージ送信イベントが発生した場合は、直前に送信したメッセージが短間隔メッセージでなければモジュロNの送信カウンタ値を含むメッセージをすぐに送信し、直前に送信したメッセージが短間隔メッセージであれば、直前のメッセージの送信時刻から最短送信間隔Tsが経過しているか否かを判断し、直前のメッセージの送信時刻からTsが経過していれば、モジュロNの送信カウンタ値を含むメッセージをすぐに送信する。一方、直前のメッセージの送信時刻からTsが経過していなければ、Tsが経過するまで待って、モジュロNの送信カウンタ値を含むメッセージを送信する。したがって、受信ECU20は、送信カウンタ値の不連続性または最短送信間隔Tsの違反により、送信間隔が変化するメッセージの不正送信を適切かつ簡便に検知することができる。
<第4実施形態>
次に、第4実施形態について説明する。本実施形態は、AUTOSAR COMのMIXED送信モードでメッセージを行う場合の適用例である。MIXED送信モードは、所定周期でメッセージの送信を行うPERIODIC送信と、シグナルの変化などのメッセージ送信イベントに応じて不定期でメッセージの送信を行うDIRECT送信が混在する。MIXED送信モードでは、メッセージ送信イベントが発生しなくてもPERIODIC送信のタイミングでメッセージが送信されるため、PERIODIC送信の周期が最長送信間隔Tlとなる。なお、上述の各実施形態では、メッセージ送信イベントが発生することなく最長送信間隔Tlが経過するとメッセージを送信したが、本実施形態では、DIRECT送信の有無にかかわらず、PERIODIC送信のタイミングでは必ずメッセージを送信する。
本実施形態では、正規送信ECU10の送信制御部52が、メッセージの最長送信間隔(PERIODIC送信の周期)Tlと、Tlにおいて許容されるメッセージの最大送信回数(PERIODIC送信の間に許容されるDIRECT送信の最大数)Mとに基づいて、MIXED送信モードのPERIODIC送信とDIRECT送信のタイミングを制御する。なお、本実施形態における最大送信回数Mは、PERIODIC送信の間に許容されるDIRECT送信の最大数であるため、M≦N−1と定義される。
本実施形態では、受信ECU20が受信したメッセージがPERIODIC送信のメッセージであるかDIRECT送信のメッセージであるかを判断する必要がある。そこで、例えば図21に示すように、PERIODIC送信かDIRECT送信かを識別するためのPERIODIC送信フラグをメッセージに含めて送信する。PERIODIC送信フラグは、そのメッセージがPERIODIC送信のメッセージであれば1、DIRECT送信のメッセージであれば0をとる。
本実施形態の正規送信ECU10は、PERIODIC送信については、モジュロNの送信カウンタの値とPERIODIC送信フラグの値1とを含むPERIODIC送信のメッセージをTl周期で送信する。また、DIRECT送信については、直前のPERIODIC送信の後にDIRECT送信が行われた回数がMに達しているか否かを判断し、M未満であればモジュロNの送信カウンタの値とPERIODIC送信フラグの値0とを含むDIRECT送信のメッセージを送信し、Mに達していればDIRECT送信のメッセージは送信せずに、次のPERIODIC送信のタイミングでPERIODIC送信のメッセージを送信する。
図22は、本実施形態の送信制御部52による処理手順の一例を示すフローチャートである。送信制御部52は、送信履歴テーブル53とシグナルテーブル54とを参照しながら、この図22のフローチャートで示す一連の処理を所定周期で繰り返し実行する。
送信制御部52は、まず、PERIODIC送信のタイミングであるか否かを判定し(ステップS701)、PERIODIC送信のタイミングでなければ(ステップS701:No)、シグナルの変化などのメッセージ送信イベントが発生したか否かを判定する(ステップS702)。
ここで、メッセージ送信イベントが発生していなければ(ステップS702:No)、ステップS701に戻って処理を繰り返す。一方、メッセージ送信イベントが発生した場合は(ステップS702:Yes)、送信制御部52は、次に、前回のPERIODIC送信後のDIRECT送信の回数nが最大送信回数Mに達したか否かを判定する(ステップS703)。そして、nがMに達していなければ(ステップS703:No)、送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値とPERIODIC送信フラグの値0とを含むメッセージを送信する(ステップS704)。
一方、nがMに達していれば(ステップS703:Yes)、送信制御部52は、次のPERIODIC送信のタイミングとなるまで待ち(ステップS705)、PERIODIC送信のタイミングがくると、送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値とPERIODIC送信フラグの値1とを含むメッセージを送信する(ステップS706)。また、ステップS701の判定で、PERIODIC送信のタイミングであると判定した場合も(ステップS701:Yes)、送信制御部52は送信部51に対して送信の指示を行い、モジュロNの送信カウンタ値とPERIODIC送信フラグの値1とを含むメッセージを送信する(ステップS706)。
本実施形態では、正規送信ECU10の送信制御部52が以上のようにメッセージの送信タイミングを制御することにより、受信ECU20が、送信カウンタ値の不連続性または最大送信回数Mの違反により、メッセージの不正送信を検知することができる。
図23は、本実施形態の不正送信検知部64による処理手順の一例を示すフローチャートである。不正送信検知部64は、受信部61によりメッセージが受信されるたびに、受信履歴テーブル63を参照しながら、この図23のフローチャートで示す一連の処理を繰り返し実行する。
受信部61によりメッセージが受信されると、不正送信検知部64は、まず、今回受信したメッセージの送信カウンタ値Cm0が、直前に受信したメッセージの送信カウンタ値Cm1からインクリメントされているか否かを判定する(ステップS801)。そして、Cm0がCm1からインクリメントされていなければ(ステップS801:No)、不正送信検知部64は、不正送信ありと判断する(ステップS806)。
一方、Cm0がCm1からインクリメントされていれば(ステップS801:Yes)、不正送信検知部64は、次に、受信したメッセージのPERIODIC送信フラグの値が1であるか否かを判定し(ステップS802)、PERIODIC送信フラグの値が1であれば(ステップS802:Yes)、PERIODIC送信の周期が正常か否かを判定する(ステップS803)。この判定には、例えば特許文献1に記載の方法など、メッセージの周期異常を検知する公知の方法を用いればよい。そして、不正送信検知部64は、PERIODIC送信の周期が正常であれば(ステップS803:Yes)、不正送信なしと判断し(ステップS805)、PERIODIC送信の周期が異常であれば(ステップS803:No)、不正送信ありと判断する(ステップS806)。
また、ステップS802の判定で、受信したメッセージのPERIODIC送信フラグの値が0であれば(ステップS802:No)、不正送信検知部64は、直近のPERIODIC送信のメッセージ(PERIODIC送信フラグの値が1のメッセージ)を受信した後にDIRECT送信のメッセージ(PERIODIC送信フラグの値が1のメッセージ)を受信した回数nが、今回の受信も含めてM以下であるか否かを判定する(ステップS804)。そして、不正送信検知部64は、nがM以下であれば(ステップS804:Yes)、不正送信なしと判断し(ステップS805)、nがMを超えていれば(ステップS804:No)、不正送信ありと判断する(ステップS806)。
以上説明したように、本実施形態の正規送信ECU10は、PERIODIC送信については、モジュロNの送信カウンタの値とPERIODIC送信フラグの値1とを含むPERIODIC送信のメッセージをTl周期でPERIODIC送信し、DIRECT送信については、直前のPERIODIC送信の後にDIRECT送信が行われた回数がMに達しているか否かを判断し、M未満であればモジュロNの送信カウンタの値とPERIODIC送信フラグの値0とを含むDIRECT送信のメッセージを送信し、Mに達していればDIRECT送信のメッセージを送信せずに、次のPERIODIC送信のタイミングでPERIODIC送信のメッセージを送信する。したがって、受信ECU20は、送信カウンタ値の不連続性または最大送信回数Mの違反により、送信間隔が変化するメッセージの不正送信を適切かつ簡便に検知することができる。
<第5実施形態>
次に、第5実施形態について説明する。本実施形態の送信制御部52は、上述の第4実施形態と同様に最長送信間隔Tlと最大送信回数Mとに基づいてMIXED送信モードのPERIODIC送信とDIRECT送信のタイミングを制御するが、メッセージにPERIODIC送信フラグの値を含めない。その代わり、PERIODIC送信のメッセージに含める送信カウンタ値を、直前に送信したメッセージの送信カウンタ値と同じにすることで、受信ECU20が受信したメッセージがPERIODIC送信のメッセージであるかDIRECT送信のメッセージであるかを判断できるようにする。
すなわち、本実施形態では、PERIODIC送信の間にDIRECT送信がない場合は、図24(a)に示すように、最新のPERIODIC送信のメッセージに含まれる送信カウンタの値が、直近のPERIODIC送信のメッセージに含まれる送信カウンタの値と同じになる。また、PERIODIC送信の間にDIRECT送信があった場合は、図24(b)に示すように、最新のPERIODIC送信のメッセージに含まれる送信カウンタの値が、直前のDIRECT送信のメッセージに含まれる送信カウンタの値と同じになる。
図25は、本実施形態の送信制御部52による処理手順の一例を示すフローチャートである。送信制御部52は、送信履歴テーブル53とシグナルテーブル54とを参照しながら、この図25のフローチャートで示す一連の処理を所定周期で繰り返し実行する。
送信制御部52は、まず、PERIODIC送信のタイミングであるか否かを判定し(ステップS901)、PERIODIC送信のタイミングでなければ(ステップS901:No)、シグナルの変化などのメッセージ送信イベントが発生したか否かを判定する(ステップS902)。
ここで、メッセージ送信イベントが発生していなければ(ステップS902:No)、ステップS901に戻って処理を繰り返す。一方、メッセージ送信イベントが発生した場合は(ステップS902:Yes)、送信制御部52は、次に、前回のPERIODIC送信後のDIRECT送信の回数nが最大送信回数Mに達したか否かを判定する(ステップS903)。そして、nがMに達していなければ(ステップS903:No)、送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS904)。
一方、nがMに達していれば(ステップS903:Yes)、送信制御部52は、次のPERIODIC送信のタイミングとなるまで待ち(ステップS905)、PERIODIC送信のタイミングがくると、送信部51に対して送信の指示を行って、直前に送信したメッセージと同じ送信カウンタ値を含むメッセージを送信する(ステップS906)。また、ステップS901の判定で、PERIODIC送信のタイミングであると判定した場合も(ステップS901:Yes)、送信制御部52は送信部51に対して送信の指示を行い、直前に送信したメッセージと同じ送信カウンタ値を含むメッセージを送信する(ステップS906)。
図26は、本実施形態の不正送信検知部64による処理手順の一例を示すフローチャートである。不正送信検知部64は、受信部61によりメッセージが受信されるたびに、受信履歴テーブル63を参照しながら、この図26のフローチャートで示す一連の処理を繰り返し実行する。
受信部61によりメッセージが受信されると、不正送信検知部64は、まず、今回受信したメッセージの送信カウンタ値Cm0が、直前に受信したメッセージの送信カウンタ値Cm1と同じであるか否かを判定する(ステップS1001)。そして、Cm0がCm1と同じであれば(ステップS1001:Yes)、不正送信検知部64は、次に、PERIODIC送信の周期が正常か否かを判定し(ステップS1002)、PERIODIC送信の周期が正常であれば(ステップS1002:Yes)、不正送信なしと判断し(ステップS1005)、PERIODIC送信の周期が異常であれば(ステップS1002:No)、不正送信ありと判断する(ステップS1006)。
また、ステップS1001の判定で、Cm0がCm1と同じでなければ(ステップS1001:No)、不正送信検知部64は、次に、Cm0がCm1からインクリメントされているか否かを判定する(ステップS1003)。そして、Cm0がCm1からインクリメントされていなければ(ステップS1003:No)、不正送信検知部64は、不正送信ありと判断する(ステップS1006)。
一方、Cm0がCm1からインクリメントされていれば(ステップS1003:Yes)、不正送信検知部64は、次に、直近のPERIODIC送信のメッセージ(送信カウンタ値が1つ前と同じメッセージ)を受信した後にDIRECT送信のメッセージ(送信カウンタ値が1つ前からインクリメントされているメッセージ)を受信した回数nが、今回の受信も含めてM以下であるか否かを判定する(ステップS1004)。そして、不正送信検知部64は、nがM以下であれば(ステップS1004:Yes)、不正送信なしと判断し(ステップS1005)、nがMを超えていれば(ステップS1004:No)、不正送信ありと判断する(ステップS1006)。
以上説明したように、本実施形態では、PERIODIC送信については、直前に送信したメッセージと同じ値の送信カウンタ値をメッセージに含めるようにしているので、メッセージにPERIODIC送信フラグの値を含めることなく、PERIODIC送信とDIRECT送信とを区別できる。
<第6実施形態>
次に、第6実施形態について説明する。本実施形態の送信制御部52は、メッセージの最長送信間隔(PERIODIC送信の周期)Tlと、DIRECT送信のメッセージ(短間隔メッセージ)に許容される最短送信間隔Tsとに基づいて、MIXED送信モードのPERIODIC送信とDIRECT送信のタイミングを制御する。また、本実施形態では、PERIODIC送信の直後のDIRECT送信のメッセージについては、最短送信間隔Tsの制限を適用しない。このため、本実施形態における最短送信間隔Tsは、上述の第3実施形態と同様に、Ts≧Tl/(N−1)と定義される。また、本実施形態では、上述の第5実施形態と同様に、PERIODIC送信のメッセージに含める送信カウンタ値を、直前に送信したメッセージの送信カウンタ値と同じにすることで、受信ECU20が受信したメッセージがPERIODIC送信のメッセージであるかDIRECT送信のメッセージであるかを判断できるようにする。
すなわち、本実施形態の正規送信ECU10は、PERIODIC送信については、直前のメッセージに含まれる送信カウンタ値と同じ送信カウンタ値を含むPERIODIC送信のメッセージをTl周期で送信する。また、DIRECT送信については、直前に送信したメッセージがPERIODIC送信のメッセージであれば、モジュロNのカウンタ値を含むDIRECT送信のメッセージをすぐに送信し、直前に送信したメッセージがDIRECT送信のメッセージであれば、直前のDIRECT送信のメッセージの送信時刻から最短送信間隔Tsが経過しているか否かを判断する。そして、直前のDIRECT送信のメッセージの送信時刻からTsが経過していれば、モジュロNの送信カウンタ値を含むDIRECT送信のメッセージをすぐに送信し、直前のDIRECT送信のメッセージの送信時刻からTsが経過していなければ、Tsが経過するまで待って、モジュロNの送信カウンタ値を含むDIRECT送信のメッセージを送信する。また、直前のDIRECT送信のメッセージの送信時刻からTsが経過する前にPERIODIC送信のタイミングとなった場合は、DIRECT送信のメッセージは送信せずに、PERIODIC送信のメッセージを送信する。
本実施形態では、DIRECT送信の直後のDIRECT送信のメッセージについては、最短送信間隔Tsの制限が適用されない。したがって、最短送信間隔Tsは、図27に示すように、直前のDIRECT送信のメッセージの送信時刻から起算され、最短送信間隔Tsが経過する前にメッセージ送信イベントが発生したとしても、Tsが経過するまでの間は送信禁止期間となり、Tsが経過したときに次のDIRECT送信のメッセージを送信できる。また、直前のDIRECT送信のメッセージの送信時刻からTsが経過する前にPERIODIC送信のタイミングとなった場合は、DIRECT送信のメッセージは送信されず、PERIODIC送信のメッセージが送信される。
図28は、本実施形態の送信制御部52による処理手順の一例を示すフローチャートである。送信制御部52は、送信履歴テーブル53とシグナルテーブル54とを参照しながら、この図28のフローチャートで示す一連の処理を所定周期で繰り返し実行する。
送信制御部52は、まず、PERIODIC送信のタイミングであるか否かを判定し(ステップS1101)、PERIODIC送信のタイミングでなければ(ステップ1101:No)、シグナルの変化などのメッセージ送信イベントが発生したか否かを判定する(ステップS1102)。
ここで、メッセージ送信イベントが発生していなければ(ステップS1102:No)、ステップS1101に戻って処理を繰り返す。一方、メッセージ送信イベントが発生した場合は(ステップS1102:Yes)、送信制御部52は、次に、直前に送信したメッセージがPERIODIC送信のメッセージであるか否かを判定し(ステップS1103)、直前に送信したメッセージがPERIODIC送信のメッセージであれば(ステップS1103:Yes)、送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS1104)。
一方、直前に送信したメッセージがDIRECT送信のメッセージであれば(ステップS1103:No)、送信制御部52は、次に、直前のDIRECT送信のメッセージ送信時刻からの経過時間Twが最短送信間隔Tsに達したか否かを判定し(ステップS1105)、TwがTsに達していれば(ステップS1105:Yes)、送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS1104)。
一方、TwがTsに達していなければ(ステップS1105:No)、送信制御部52は、TwがTsに達するまで待機し、TwがTsに達する前にPERIODIC送信のタイミングになった場合は(ステップS1106:Yes)、送信部51に対して送信の指示を行い、直前に送信したメッセージと同じ送信カウンタ値を含むメッセージを送信する(ステップS1107)。一方、PERIODIC送信のタイミングになる前にTwがTsに達すると(ステップS1106:No、ステップS1105:Yes)、送信制御部52は送信部51に対して送信の指示を行って、モジュロNの送信カウンタ値を含むメッセージを送信する(ステップS1104)。
図29は、本実施形態の不正送信検知部64による処理手順の一例を示すフローチャートである。不正送信検知部64は、受信部61によりメッセージが受信されるたびに、受信履歴テーブル63を参照しながら、この図29のフローチャートで示す一連の処理を繰り返し実行する。
受信部61によりメッセージが受信されると、不正送信検知部64は、まず、今回受信したメッセージの送信カウンタ値Cm0が、直前に受信したメッセージの送信カウンタ値Cm1と同じであるか否かを判定する(ステップS1201)。そして、Cm0がCm1と同じであれば(ステップS1201:Yes)、不正送信検知部64は、次に、PERIODIC送信の周期が正常か否かを判定し(ステップS1202)、PERIODIC送信の周期が正常であれば(ステップS1202:Yes)、不正送信なしと判断し(ステップS1206)、PERIODIC送信の周期が異常であれば(ステップS1202:No)、不正送信ありと判断する(ステップS1207)。
また、ステップS1201の判定で、Cm0がCm1と同じでなければ(ステップS1201:No)、不正送信検知部64は、次に、Cm0がCm1からインクリメントされているか否かを判定する(ステップS1203)。そして、Cm0がCm1からインクリメントされていなければ(ステップS1203:No)、不正送信検知部64は、不正送信ありと判断する(ステップS1207)。
一方、Cm0がCm1からインクリメントされていれば(ステップS1203:Yes)、不正送信検知部64は、次に、直前に受信したメッセージの送信カウンタ値Cm1が、2つ前に受信したメッセージの送信カウンタ値Cm2と同じであるか否かを判定する(ステップS1204)。そして、Cm1がCm2と同じであれば(ステップS1204:Yes)、不正送信なしと判断する(ステップS1206)。一方、Cm1がCm2と同じでなければ(ステップS1204:No)、不正送信検知部64は、次に、直前に受信したDIRECT送信のメッセージの受信時刻と今回受信したDIRECT送信のメッセージの受信時刻との間隔Tw’が最短送信間隔Ts以上であるか否かを判定する(ステップS1205)。そして、不正送信検知部64は、Tw’がTs以上であれば(ステップS1205:Yes)、不正送信なしと判断し(ステップS1206)、Tw’がTs未満であれば(ステップS1205:No)、不正送信ありと判断する(ステップS1207)。
以上説明したように、本実施形態の正規送信ECU10は、PERIODIC送信については、直前のメッセージに含まれる送信カウンタ値と同じ送信カウンタ値を含むPERIODIC送信のメッセージをTl周期で送信し、DIRECT送信については、直前のメッセージがPERIODIC送信のメッセージであればモジュロNの送信カウンタの値を含むDIRECT送信のメッセージを送信し、直前のメッセージがDIRECT送信のメッセージであれば、直前のDIRECT送信のメッセージ送信時刻から最短送信間隔Tsが経過しているか否かを判断する。そして、直前のDIRECT送信のメッセージ送信時刻から最短送信間隔Tsが経過していればモジュロNの送信カウンタの値を含むDIRECT送信のメッセージを送信し、最短送信間隔Tsが経過していなければ、最短送信間隔Tsが経過した時点でDIRECT送信のメッセージを送信、あるいは次のPERIODIC送信のタイミングでPERIODIC送信のメッセージを送信する。したがって、受信ECU20は、送信カウンタ値の不連続性または最短送信間隔Tsの違反により、送信間隔が変化するメッセージの不正送信を適切かつ簡便に検知することができる。
また、本実施形態では、PERIODIC送信については、直前に送信したメッセージと同じ値の送信カウンタ値をメッセージに含めるようにしているので、上述の第5実施形態と同様に、メッセージにPERIODIC送信フラグの値を含めることなく、PERIODIC送信とDIRECT送信とを区別できる。
以上、本発明の実施形態を説明したが、ここで説明した実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。ここで説明した新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。ここで説明した実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。