(57)【要約】【課題】車載ネットワークシステムにおいて送信された不正なメッセージを効率的かつ適切に検知するための不正検知方法を提供する。【解決手段】車載ネットワークを介して通信する複数の電子制御ユニットを備える車載ネットワークシステムにおいて用いられる不正検知方法は、車載ネットワーク上で送信されたデータフレームを受信する受信ステップと、受信ステップでイベントドリブンのデータフレームが受信され、かつ、車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に限って、当該データフレーム中の所定位置のデータ値を検証する検証ステップとを含み、検証ステップで、検証が成功したときには、当該データフレームを正当なデータフレームとして検知し、検証ステップで、検証が失敗したときには、当該データフレームを不正なデータフレームとして検知する。【選択図】図１０
2020096368.tif 000002
【特許請求の範囲】
【請求項１】
車載ネットワークを介して通信する複数の電子制御ユニットを備える車載ネットワークシステムにおいて用いられる不正検知方法であって、
前記車載ネットワーク上で送信されたデータフレームを受信する受信ステップと、
前記受信ステップでイベントドリブンのデータフレームが受信され、かつ、前記車載ネットワークシステムを搭載する車両の走行状態が予め設定された状態である場合に限って、当該データフレーム中の予め設定された位置のデータ値を検証する検証ステップとを含み、
前記検証ステップで、前記予め設定された位置のデータ値についての前記検証が成功したときには、当該データフレームを正当なデータフレームとして検知し、
前記検証ステップで、前記予め設定された位置のデータ値についての前記検証が失敗したときには、当該データフレームを不正なデータフレームとして検知し、
前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値であり、
前記検証ステップでは、前記イベントドリブンの前記データフレーム中の前記所定位置のカウンタ値が、前記受信ステップで前記イベントドリブンのデータフレームが受信された回数を反映したカウンタ値と同一であるか否かを判別することにより前記検証を行う
不正検知方法。
【請求項２】
前記検証ステップでは、
前記受信したデータフレームが、イベントドリブンのデータフレームか否かを判定し、
前記受信したデータフレームが前記イベントドリブンのデータフレームであると判定された場合に、前記車両の走行状態が前記予め設定された状態であるか否かを判定し、
前記車両の走行状態が前記予め設定された状態であると判定された場合に、前記予め設定された位置のデータ値についての前記検証を行なう
請求項１記載の不正検知方法。
【請求項３】
前記検証ステップで、前記受信したデータフレームが前記イベントドリブンのデータフレームであると判定された場合に前記車両の走行状態が前記予め設定された状態でない場合は、当該データフレームを正当なデータフレームとして検知する
請求項２記載の不正検知方法。
【請求項４】
前記検証ステップで、前記受信したデータフレームが前記イベントドリブンのデータフレームであると判定された場合に前記車両の走行状態が前記予め設定された状態でない場合は、当該データフレームを不正なデータフレームとして検知する
請求項２記載の不正検知方法。
【請求項５】
前記複数の電子制御ユニットは、ＣＡＮ（Controller Area Network）プロトコルに従って通信を行う
請求項１記載の不正検知方法。
【請求項６】
車載ネットワークを介して通信する複数の電子制御ユニットを備える車載ネットワークシステムにおいて不正検知の対象となるデータフレームを送信する不正検知方法であって、
イベントドリブンのデータフレームを送信する場合で、
前記車載ネットワークシステムを搭載する車両の走行状態が予め設定された状態である場合に、当該データフレーム中の予め設定された位置にデータ値を付与し、前記車載ネットワークシステムを搭載する車両の走行状態が予め設定された状態でない場合には、当該データフレーム中の予め設定された位置にデータ値を付与しない付与ステップと、
前記付与ステップで付与された予め設定された位置のデータ値を含み前記イベントドリブンのデータフレームを前記車載ネットワークに送信する送信ステップとを含み、
前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値である
不正検知方法。
【請求項７】
車載ネットワークを介して通信する複数の電子制御ユニットを備える車載ネットワークシステムであって、
イベントドリブンのデータフレームを送信する場合で、
前記車載ネットワークシステムを搭載する車両の走行状態が予め設定された状態である場合に、当該データフレーム中の予め設定された位置にデータ値を付与し、前記車載ネットワークシステムを搭載する車両の走行状態が予め設定された状態でない場合には、当該データフレーム中の予め設定された位置にデータ値を付与しない付与部と、前記付与部で付与された前記データ値を含み前記イベントドリブンのデータフレームを前記車載ネットワークに送信する送信部とを有する第１電子制御ユニットと、
前記車載ネットワーク上で送信されたデータフレームを受信する受信部と、前記受信部により前記イベントドリブンのデータフレームが受信され、かつ、前記車載ネットワークシステムを搭載する車両の走行状態が予め設定された状態である場合に限って、当該データフレーム中の予め設定された位置のデータ値を検証する検証部とを有し、前記検証部は、前記予め設定された位置のデータ値についての前記検証が成功したときには、当該データフレームを正当なデータフレームとして検知し、前記予め設定された位置のデータ値についての前記検証が失敗したときには、当該データフレームを不正なデータフレームとして検知する第２電子制御ユニットとを備え、
前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値であり、
前記第２電子制御ユニットは、前記イベントドリブンの前記データフレーム中の前記所定位置のカウンタ値が、前記受信ステップで前記イベントドリブンのデータフレームが受信された回数を反映したカウンタ値と同一であるか否かを判別することにより前記検証を行う
車載ネットワークシステム。
【請求項８】
車載ネットワークを介して通信する電子制御ユニットであって、
イベントドリブンのデータフレームを送信する場合で、
前記電子制御ユニットを含む車載ネットワークシステムを搭載する車両の走行状態が予め設定された状態である場合に、当該データフレーム中の予め設定された位置にデータ値を付与し、前記車載ネットワークシステムを搭載する車両の走行状態が予め設定された状態でない場合には、当該データフレーム中の予め設定された位置にデータ値を付与しない付与部と、
前記付与部で付与された前記予め設定された位置のデータ値を含み前記イベントドリブンのデータフレームを前記車載ネットワークに送信する送信部とを備え、
前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値である
電子制御ユニット。
【請求項９】
車載ネットワークを介して通信する電子制御ユニットであって、
前記車載ネットワーク上で送信されたデータフレームを受信する受信部と、
前記受信部によりイベントドリブンのデータフレームが受信され、かつ、前記電子制御ユニットを含む車載ネットワークシステムを搭載する車両の走行状態が予め設定された状態である場合に限って、当該データフレーム中の予め設定された位置のデータ値を検証する検証部とを備え、前記検証部は、前記予め設定された位置のデータ値についての前記検証が成功したときには、当該データフレームを正当なデータフレームとして検知し、前記予め設定された位置のデータ値についての前記検証が失敗したときには、当該データフレームを不正なデータフレームとして検知し、
前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値であり、
前記検証部は、前記イベントドリブンの前記データフレーム中の前記所定位置のカウンタ値が、前記受信ステップで前記イベントドリブンのデータフレームが受信された回数を反映したカウンタ値と同一であるか否かを判別することにより前記検証を行う
電子制御ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、電子制御ユニットが通信を行う車載ネットワークにおいて送信された不正なフレームを検知する技術に関する。
【背景技術】
【０００２】
近年、自動車の中のシステムには、電子制御ユニット（ＥＣＵ：Electronic Control Unit）と呼ばれる装置が多数配置されている。これらのＥＣＵをつなぐネットワークは車載ネットワークと呼ばれる。車載ネットワークには、多数の規格が存在する。その中でも最も主流な車載ネットワークの一つに、ＩＳＯ１１８９８−１で規定されているＣＡＮ（Controller Area Network）という規格が存在する（「非特許文献１」参照）。
【０００３】
ＣＡＮでは、通信路は２本のバスで構成され、バスに接続されているＥＣＵはノードと呼ばれる。バスに接続されている各ノードは、フレームと呼ばれるメッセージを送受信する。フレームを送信する送信ノードは、２本のバスに電圧をかけ、バス間で電位差を発生させることによって、レセシブと呼ばれる「１」の値と、ドミナントと呼ばれる「０」の値を送信する。複数の送信ノードが全く同一のタイミングで、レセシブとドミナントを送信した場合は、ドミナントが優先されて送信される。受信ノードは、受け取ったフレームのフォーマットに異常がある場合には、エラーフレームと呼ばれるフレームを送信する。エラーフレームとは、ドミナントを６ｂｉｔ連続して送信することで、送信ノードや他の受信ノードにフレームの異常を通知するものである。
【０００４】
またＣＡＮでは送信先や送信元を指す識別子は存在せず、送信ノードはフレーム毎にメッセージＩＤと呼ばれるＩＤを付けて送信し（つまりバスに信号を送出し）、各受信ノードは予め定められたメッセージＩＤのみを受信する（つまりバスから信号を読み取る）。また、ＣＳＭＡ／ＣＡ（Carrier Sense Multiple Access/Collision Avoidance）方式を採用しており、複数ノードの同時送信時にはメッセージＩＤによる調停が行われ、メッセージＩＤの値が小さいフレームが優先的に送信される。
【０００５】
車載ネットワークにおいて不正なノードがバスに接続され、不正なノードが不正にデータフレームを送信した場合に、ＣＡＮでは送信元の識別子が存在しないことから、不正なデータフレームが送信されていることを受信ノードは検知できない。
【０００６】
そこで従来、ＥＣＵが周期的にデータフレームを送信するという特徴を用いて、正常な周期から逸脱するようなデータフレームの送信を不正なデータフレームであると検知する技術が提案されている（「非特許文献２」参照）。またデータフレームが正規のＥＣＵから送信されていることを示すために、メッセージ認証コード（ＭＡＣ：Message Authentication Code）の技術を用いた不正検知方法が提案されている（「非特許文献３」参照）。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】“ＣＡＮ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ２．０  Ｐａｒｔ  Ａ”、［ｏｎｌｉｎｅ］、ＣＡＮ  ｉｎ  Ａｕｔｏｍａｔｉｏｎ（ＣｉＡ）、［平成２６年１１月１４日検索］、インターネット（ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｃａｎ−ｃｉａ．ｏｒｇ／ｆｉｌｅａｄｍｉｎ／ｃｉａ／ｓｐｅｃｉｆｉｃａｔｉｏｎｓ／ＣＡＮ２０Ａ．ｐｄｆ）
【非特許文献２】大塚敏史、石郷岡祐、“既存ＥＣＵを変更不要な車載ＬＡＮ向け侵入検知手法”、情報処理学会研究報告．組込みシステム研究会、２０１３−ＥＭＢ−２８（６）、ｐ．１−５
【非特許文献３】Ｄ．Ｋ．Ｎｉｌｓｓｏｎ、Ｕ．Ｅ．Ｌａｒｓｏｎ、Ｅ．Ｊｏｎｓｓｏｎ、“Ｅｆｆｉｃｉｅｎｔ  Ｉｎ−Ｖｅｈｉｃｌｅ  Ｄｅｌａｙｅｄ  Ｄａｔａ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｂａｓｅｄ  ｏｎ  Ｃｏｍｐｏｕｎｄ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅｓ”、Ｖｅｈｉｃｕｌａｒ  Ｔｅｃｈｎｏｌｏｇｙ  Ｃｏｎｆｅｒｅｎｃｅ、２００８−Ｆａｌｌ、ｐ．１−５
【非特許文献４】ＲＦＣ２１０４  ＨＭＡＣ：  Ｋｅｙｅｄ−Ｈａｓｈｉｎｇ  ｆｏｒ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、非特許文献２の技術では、ＥＣＵが周期的にデータフレームを送信するのに加えて、イベントをトリガに非周期的にデータフレーム（以下、非周期的に送信されるデータフレームを「イベントドリブンデータフレーム」と称する。）を送信することもある場合には、正当なイベントドリブンデータフレームを不正なデータフレームと誤検知してしまう。また、送信する全てのデータフレームにＭＡＣを付加する方法では、ＭＡＣの付加及び検証に要する処理負荷が大きい。
【０００９】
そこで、本開示は、ＣＡＮプロトコル等に従って通信する車載ネットワークシステムにおいて、バス上に不正なメッセージの送信が行われたことを効率的かつ適切に検知する電子制御ユニット（ＥＣＵ）を提供する。また、本開示は、不正なメッセージを効率的かつ適切に検知するための不正検知方法、及び、ＥＣＵを備える車載ネットワークシステムを提供する。
【課題を解決するための手段】
【００１０】
上記課題を解決するために本開示の一態様に係る不正検知方法は、車載ネットワークを介して通信する複数の電子制御ユニットを備える車載ネットワークシステムにおいて用いられる不正検知方法であって、前記車載ネットワーク上で送信されたデータフレームを受信する受信ステップと、前記受信ステップでイベントドリブンのデータフレームが受信され、かつ、前記車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に限って、当該データフレーム中の所定位置のデータ値を検証する検証ステップとを含み、前記検証ステップで、前記所定位置のデータ値についての前記検証が成功したときには、当該データフレームを正当なデータフレームとして検知し、前記検証ステップで、前記所定位置のデータ値についての前記検証が失敗したときには、当該データフレームを不正なデータフレームとして検知し、前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値であり、前記検証ステップでは、前記イベントドリブンの前記データフレーム中の前記所定位置のカウンタ値が、前記受信ステップで前記イベントドリブンのデータフレームが受信された回数を反映したカウンタ値と同一であるか否かを判別することにより前記検証を行う不正検知方法である。
【００１１】
また本開示の一態様に係る不正検知方法は、車載ネットワークを介して通信する複数の電子制御ユニットを備える車載ネットワークシステムにおいて不正検知の対象となるデータフレームを送信する不正検知方法であって、前記車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に、イベントドリブンのデータフレームの送信するときに限って、当該データフレーム中の所定位置にデータ値を付与する付与ステップと、前記付与ステップで付与された所定位置にデータ値を含み前記イベントドリブンのデータフレームを前記車載ネットワークに送信する送信ステップとを含み、前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値である不正検知方法である。
【００１２】
また、上記課題を解決するために本開示の一態様に係る車載ネットワークシステムは、車載ネットワークを介して通信する複数の電子制御ユニットを備える車載ネットワークシステムであって、前記車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に、イベントドリブンのデータフレームの送信するときに限って当該データフレーム中の所定位置にデータ値を付与する付与部と、前記付与部で付与された前記データ値を含み前記イベントドリブンのデータフレームを前記車載ネットワークに送信する送信部とを有する第１電子制御ユニットと、前記車載ネットワーク上で送信されたデータフレームを受信する受信部と、前記受信部により前記イベントドリブンのデータフレームが受信され、かつ、前記車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に限って、当該データフレーム中の所定位置のデータ値を検証する検証部とを有し、前記検証部は、前記所定位置のデータ値についての前記検証が成功したときには、当該データフレームを正当なデータフレームとして検知し、前記所定位置のデータ値についての前記検証が失敗したときには、当該データフレームを不正なデータフレームとして検知する第２電子制御ユニットとを備え、前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値であり、前記第２電子制御ユニットは、前記イベントドリブンの前記データフレーム中の前記所定位置のカウンタ値が、前記受信ステップで前記イベントドリブンのデータフレームが受信された回数を反映したカウンタ値と同一であるか否かを判別することにより前記検証を行う車載ネットワークシステムである。
【００１３】
また、上記課題を解決するために本開示の一態様に係る電子制御ユニット（ＥＣＵ）は、車載ネットワークを介して通信する電子制御ユニットであって、前記電子制御ユニットを含む車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に、イベントドリブンのデータフレームの送信に際して当該データフレーム中の所定位置にデータ値を付与する付与部と、前記付与部で付与された前記所定位置のデータ値を含み前記イベントドリブンのデータフレームを前記車載ネットワークに送信する送信部とを備え、前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値である電子制御ユニットである。
【００１４】
また本開示の一態様に係る電子制御ユニット（ＥＣＵ）は、車載ネットワークを介して通信する電子制御ユニットであって、前記車載ネットワーク上で送信されたデータフレームを受信する受信部と、前記受信部によりイベントドリブンのデータフレームが受信され、かつ、前記電子制御ユニットを含む車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に限って、当該データフレーム中の所定位置のデータ値を検証する検証部とを備え、前記検証部は、前記所定位置のデータ値についての前記検証が成功したときには、当該データフレームを正当なデータフレームとして検知し、前記所定位置のデータ値についての前記検証が失敗したときには、当該データフレームを不正なデータフレームとして検知し、前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値であり、前記検証部は、前記イベントドリブンの前記データフレーム中の前記所定位置のカウンタ値が、前記受信ステップで前記イベントドリブンのデータフレームが受信された回数を反映したカウンタ値と同一であるか否かを判別することにより前記検証を行う電子制御ユニットである。
【発明の効果】
【００１５】
本開示によれば、車載ネットワークシステムでバスに不正なノードが接続されて不正なデータフレームが送信された場合に効率的かつ適切にその検知が可能となる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１に係る車載ネットワークシステムの全体構成を示す図である。
【図２】ＣＡＮプロトコルで規定されるデータフレームのフォーマットを示す図である。
【図３】実施の形態１に係る車載ネットワークシステムで用いられるデータフィールドフォーマットの一例を示す図である。
【図４】実施の形態１に係るＥＣＵの構成図である。
【図５】実施の形態１に係るデータフレーム生成ルールの一例を示す図である。
【図６】実施の形態１に係る周期ルール情報の一例を示す図である。
【図７】実施の形態１に係るデータフレームの前回受信時刻を示す情報を列挙したリストの一例を示す図である。
【図８】実施の形態１に係るデータフレームの送受信の流れを示す図である。
【図９】実施の形態１に係るデータフレームの送信処理を示すフローチャートである。
【図１０】実施の形態１に係るデータフレームの受信処理を示すフローチャートである。
【図１１】実施の形態２に係る車載ネットワークシステムの全体構成を示す図である。
【図１２】実施の形態２に係る車載ネットワークシステムで用いられるデータフィールドフォーマットの一例を示す図である。
【図１３】実施の形態２に係るＥＣＵの構成図である。
【図１４】実施の形態２に係るデータフレーム生成ルール及び送信イベントカウンタの一例を示す図である。
【図１５】実施の形態２に係るデータフレームの前回受信時刻及び受信イベントカウンタを列挙したリストの一例を示す図である。
【図１６】実施の形態２に係るデータフレームの送信処理を示すフローチャートである。
【図１７】実施の形態２に係るデータフレームの受信処理を示すフローチャートである。
【図１８】実施の形態３に係る車載ネットワークシステムの全体構成を示す図である。
【図１９】実施の形態３に係る車載ネットワークシステムで用いられるデータフィールドフォーマットの一例を示す図である。
【図２０】実施の形態３に係るＥＣＵの構成図である。
【図２１】実施の形態３に係るデータフレーム生成ルールの一例を示す図である。
【図２２】実施の形態３に係る周期ルール情報の一例を示す図である。
【図２３】実施の形態３に係るデータフレームの送信処理を示すフローチャートである。
【図２４】実施の形態３に係るデータフレームの受信処理を示すフローチャートである。
【図２５】実施の形態４に係る車載ネットワークシステムの全体構成を示す図である。
【図２６】実施の形態４に係るＥＣＵの構成図である。
【図２７】実施の形態４に係るデータフレーム生成ルールの一例を示す図である。
【図２８】実施の形態４に係る周期ルール情報の一例を示す図である。
【図２９】実施の形態４に係る車状態保持部に保持された車両の状態の一例を示す図である。
【図３０】実施の形態４に係るデータフレームの送信処理を示すフローチャートである。
【図３１】実施の形態４に係るデータフレームの受信処理を示すフローチャートである。
【図３２】実施の形態４に係る車両の状態を示すデータフレームの送信処理を示すフローチャートである。
【図３３】実施の形態４に係るデータフレームの受信処理の変形例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
本開示の一態様に係る不正検知方法は、車載ネットワークを介して通信する複数の電子制御ユニットを備える車載ネットワークシステムにおいて用いられる不正検知方法であって、前記車載ネットワーク上で送信されたデータフレームを受信する受信ステップと、前記受信ステップでイベントドリブンのデータフレームが受信され、かつ、前記車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に限って、当該データフレーム中の所定位置のデータ値を検証する検証ステップとを含み、前記検証ステップで、前記所定位置のデータ値についての前記検証が成功したときには、当該データフレームを正当なデータフレームとして検知し、前記検証ステップで、前記所定位置のデータ値についての前記検証が失敗したときには、当該データフレームを不正なデータフレームとして検知し、前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値であり、前記検証ステップでは、前記イベントドリブンの前記データフレーム中の前記所定位置のカウンタ値が、前記受信ステップで前記イベントドリブンのデータフレームが受信された回数を反映したカウンタ値と同一であるか否かを判別することにより前記検証を行う不正検知方法である。このため、イベントドリブンのデータフレームであるため不正であると誤検知することが防止され、不正なデータフレーム（メッセージ）を適切に検知することが可能となる。また、このイベントドリブンのデータフレームのデータフィールド内の所定位置に配置されるカウンタ値の検証により不正なメッセージは検知可能となるため、全てのデータフレームについてその検証をする必要がなく、効率的な不正の検知が可能となる。なお、効率的な不正の検知は、車載ネットワークシステムの電力消費の抑制に繋がる。所定の状態は、例えば、不正なデータフレームがバス上に流れている場合に検知されるべき必要性が、所定の状態以外の状態よりも高いと想定される状態である。これにより、例えば不正検知の必要性が高いとき等といった車両が所定の状態である場合に効率的に検証を行うことが可能となる。また、データフレームを受信するＥＣＵにとっては、例えば不正検知の必要性が高いとき等の所定の状態である場合に限って効率的に検証を行うことが可能となる。
【００１８】
また、前記検証ステップでは、前記受信したデータフレームが、イベントドリブンのデータフレームか否かを判定し、前記受信したデータフレームが前記イベントドリブンのデータフレームであると判定された場合に、前記車両の状態が前記所定の状態であるか否かを判定し、前記車両の状態が前記所定の状態であると判定された場合に、前記所定位置のデータ値についての前記検証を行っても良い。また、前記検証ステップで、前記受信ステップで前記イベントドリブンのデータフレームが受信され、かつ、前記車載ネットワークシステムを搭載する車両の状態が前記所定の状態でない場合は、当該データフレームを正当なデータフレームとして検知することとしても良い。また、前記検証ステップで、前記受信ステップで前記イベントドリブンのデータフレームが受信され、かつ、前記車載ネットワークシステムを搭載する車両の状態が前記所定の状態でない場合は、当該データフレームを不正なデータフレームとして検知することとしても良い。不正なデータフレームとして検知された場合の取り扱いは車載ネットワークシステムにおいて定めておくことができ、取り扱いとしては、例えば、データフレームを破棄すること（データフレームの内容に基づいて車両の制御を行わないこと等）、ログとして記録すること、車両の動作モードを変更すること等が挙げられる。所定の状態は、例えば、不正なデータフレームがバス上に流れている場合に検知されるべき必要性が、所定の状態以外の状態よりも高いと想定される状態である。これにより、例えば不正検知の必要性が高いとき等といった車両が所定の状態である場合に効率的に検証を行うことが可能となる。
【００１９】
また、前記複数の電子制御ユニットは、ＣＡＮ（Controller Area Network）プロトコルに従って通信を行うものであっても良い。
【００２０】
また本開示の一態様に係る不正検知方法は、車載ネットワークを介して通信する複数の電子制御ユニットを備える車載ネットワークシステムにおいて不正検知の対象となるデータフレームを送信する不正検知方法であって、前記車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に、イベントドリブンのデータフレームの送信するときに限って、当該データフレーム中の所定位置にデータ値を付与する付与ステップと、前記付与ステップで付与された所定位置のデータ値を含み前記イベントドリブンのデータフレームを前記車載ネットワークに送信する送信ステップとを含み、前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値である不正検知方法である。これにより、イベントドリブンのデータフレームの受信側において当該データフレームのデータフィールド内の所定位置に配置されるカウンタ値を検証することで不正なデータフレームか否かの検知が可能となるように、車載ネットワークシステムを正規に構成する送信側のＥＣＵでカウンタ値を含めたイベントドリブンのデータフレームを送信する。このため、付与ステップと送信ステップとにより適切な不正検知が実現される。また、データフレームを受信するＥＣＵにとっては、例えば不正検知の必要性が高いとき等の所定の状態である場合に限って効率的に検証を行うことが可能となる。
【００２１】
また、上記課題を解決するために本開示の一態様に係る車載ネットワークシステムは、車載ネットワークを介して通信する複数の電子制御ユニットを備える車載ネットワークシステムであって、前記車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に、イベントドリブンのデータフレームの送信するときに限って当該データフレーム中の所定位置にデータ値を付与する付与部と、前記付与部で付与された前記データ値を含み前記イベントドリブンのデータフレームを前記車載ネットワークに送信する送信部とを有する第１電子制御ユニットと、前記車載ネットワーク上で送信されたデータフレームを受信する受信部と、前記受信部により前記イベントドリブンのデータフレームが受信され、かつ、前記車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に限って、当該データフレーム中の所定位置のデータ値を検証する検証部とを有し、前記検証部は、前記所定位置のデータ値についての前記検証が成功したときには、当該データフレームを正当なデータフレームとして検知し、前記所定位置のデータ値についての前記検証が失敗したときには、当該データフレームを不正なデータフレームとして検知する第２電子制御ユニットとを備え、前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値であり、前記第２電子制御ユニットは、前記イベントドリブンの前記データフレーム中の前記所定位置のカウンタ値が、前記受信ステップで前記イベントドリブンのデータフレームが受信された回数を反映したカウンタ値と同一であるか否かを判別することにより前記検証を行う車載ネットワークシステムである。これにより、送信周期が条件を満たさないデータフレームつまりイベントドリブンデータフレームが受信された場合において所定ルールに基づく正当性の判断はできないがデータフィールド内の所定位置に配置されるカウンタ値の検証により正当性の判断が可能になる。このため、所定ルールを満たさないため不正であると誤検知することが防止され、不正なデータフレーム（メッセージ）を適切に検知することが可能となる。また、データフレームを受信するＥＣＵにとっては、例えば不正検知の必要性が高いとき等の所定の状態である場合に限って効率的に検証を行うことが可能となる。
【００２２】
また、上記課題を解決するために本開示の一態様に係る電子制御ユニット（ＥＣＵ）は、車載ネットワークを介して通信する電子制御ユニットであって、前記電子制御ユニットを含む車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に、イベントドリブンのデータフレームの送信に際して当該データフレーム中の所定位置にデータ値を付与する付与部と、前記付与部で付与された前記所定位置のデータ値を含み前記イベントドリブンのデータフレームを前記車載ネットワークに送信する送信部とを備え、前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値である電子制御ユニットである。これにより、送信周期が条件を満たさないデータフレームつまりイベントドリブンデータフレームを送信する場合に、不正であると誤検知されないようにデータフレームを送信することが可能となる。
【００２３】
また本開示の一態様に係る電子制御ユニット（ＥＣＵ）は、車載ネットワークを介して通信する電子制御ユニットであって、前記車載ネットワーク上で送信されたデータフレームを受信する受信部と、前記受信部によりイベントドリブンのデータフレームが受信され、かつ、前記電子制御ユニットを含む車載ネットワークシステムを搭載する車両の状態が所定の状態である場合に限って、当該データフレーム中の所定位置のデータ値を検証する検証部とを備え、前記検証部は、前記所定位置のデータ値についての前記検証が成功したときには、当該データフレームを正当なデータフレームとして検知し、前記所定位置のデータ値についての前記検証が失敗したときには、当該データフレームを不正なデータフレームとして検知し、前記予め設定された位置のデータ値は、前記データフレームのデータフィールド内の所定位置に配置されるカウンタ値であり、前記検証部は、前記イベントドリブンの前記データフレーム中の前記所定位置のカウンタ値が、前記受信ステップで前記イベントドリブンのデータフレームが受信された回数を反映したカウンタ値と同一であるか否かを判別することにより前記検証を行う電子制御ユニットである。これにより、送信周期が条件を満たさないデータフレームつまりイベントドリブンデータフレームが受信された場合において所定ルールに基づく正当性の判断はできないがデータフィールド内の所定位置に配置されるカウンタ値の検証により正当性の判断が可能になる。このため、所定ルールを満たさないため不正であると誤検知することが防止され、不正なデータフレームを適切に検知することが可能となる。また、データフレームを受信するＥＣＵにとっては、例えば不正検知の必要性が高いとき等の所定の状態である場合に限って効率的に検証を行うことが可能となる。
【００２４】
なお、これらの全般的又は具体的な態様は、システム、方法、集積回路、コンピュータプログラム又はコンピュータで読み取り可能なＣＤ−ＲＯＭ等の記録媒体で実現されても良く、システム、方法、集積回路、コンピュータプログラム又は記録媒体の任意な組み合わせで実現されても良い。
【００２５】
以下、実施の形態に係る車載ネットワークシステム、ＥＣＵ等について、図面を参照しながら説明する。ここで示す実施の形態は、いずれも本開示の一具体例を示すものである。従って、以下の実施の形態で示される数値、形状、材料、構成要素、構成要素の配置及び接続形態、並びに、ステップ（工程）及びステップの順序等は、一例であって本開示を限定するものではない。以下の実施の形態における構成要素のうち、独立請求項に記載されていない構成要素については、任意に付加可能な構成要素である。また、各図は、模式図であり、必ずしも厳密に図示されたものではない。
【００２６】
（実施の形態１）
以下、本開示の実施の形態として、データフレームを送受信するＥＣＵ１００ａとＥＣＵ１００ｂとの間で、周期的に送信されるデータフレームに加えて非周期的なイベントドリブンデータフレームが送信され得る前提の下で、不正なデータフレームが送信されたことを適切に検知するための不正検知方法を実現する車載ネットワークシステム１０について図面を用いて説明する。
【００２７】
［１．１  車載ネットワークシステム１０の全体構成］
図１は、実施の形態１に係る車載ネットワークシステム１０の全体構成を示す図である。車載ネットワークシステム１０は、ＣＡＮプロトコルに従って通信するネットワーク通信システムの一例であり、制御装置、センサ等の各種機器が搭載された自動車におけるネットワーク通信システムである。車載ネットワークシステム１０は、各種機器に接続されたＥＣＵ１００ａ、１００ｂ、及び、各ＥＣＵをつなぐバス２００を含んで構成される。なお、図１では省略しているものの、車載ネットワークシステム１０にはＥＣＵ１００ａ、１００ｂ以外にもいくつものＥＣＵが含まれ得るが、ここでは、便宜上ＥＣＵ１００ａ、１００ｂに注目して説明を行う。ＥＣＵは、例えば、プロセッサ（マイクロプロセッサ）、メモリ等のデジタル回路、アナログ回路、通信回路等を含む装置である。メモリは、ＲＯＭ、ＲＡＭ等であり、プロセッサにより実行される制御プログラム（コンピュータプログラム）を記憶することができる。例えばプロセッサが、制御プログラム（コンピュータプログラム）に従って動作することにより、ＥＣＵは各種機能を実現することになる。なお、コンピュータプログラムは、所定の機能を達成するために、プロセッサに対する指令を示す命令コードが複数個組み合わされて構成されたものである。以下、バス２００には不正なデータフレームを送信する不正なＥＣＵが接続されている可能性があることを前提として説明する。
【００２８】
ＥＣＵ１００ａは、１つ以上のセンサを含む機器の一例としてのパワーウィンドウスイッチ１１０に接続されている。ＥＣＵ１００ａは、パワーウィンドウスイッチ１１０の状態を示す情報を含むデータフレームを周期的にバス２００に送信する。さらにパワーウィンドウスイッチ１１０の状態が変化した時にもパワーウィンドウスイッチ１１０の状態を示す情報（つまりセンサ値を示す情報）を含むデータフレームをバス２００に送信する。従って、ＥＣＵ１００ａは、一定の送信周期でデータフレームの送信を繰り返す他に、パワーウィンドウスイッチ１１０の状態の変化時がその送信周期と一致しないときに非周期的なイベントドリブンデータフレームをバス２００に送信することになる。またＥＣＵ１００ａは、ＥＣＵ１００ｂからバス２００上に送信されてバス２００に流れるデータフレームを受信し、例えばＥＣＵ１００ａが送信したデータフレームが正しく受信されていること等を確認する。
【００２９】
ＥＣＵ１００ｂは、パワーウィンドウ１２０に接続されており、ＥＣＵ１００ａから送信されバス２００に流れているデータフレームを受信し、そのデータフレームに含まれるパワーウィンドウスイッチ１１０の状態に応じて、パワーウィンドウ１２０の開閉の制御を行う。またパワーウィンドウ１２０の開閉の制御状態に応じたデータフレームを周期的にバス２００に送信する。この車載ネットワークシステム１０においてはＣＡＮプロトコルに従って各ＥＣＵがフレームの授受を行う。各ＥＣＵは、受信したデータフレームが不正なデータフレームであるか否かを判断する機能を有している。
【００３０】
［１．２  データフレームフォーマット］
以下、ＣＡＮプロトコルに従ったネットワークで用いられるフレームの１つであるデータフレームについて説明する。
【００３１】
図２は、ＣＡＮプロトコルで規定されるデータフレームのフォーマットを示す図である。同図には、ＣＡＮプロトコルで規定される標準ＩＤフォーマットにおけるデータフレームを示している。データフレームは、ＳＯＦ（Start Of Frame）、ＩＤフィールド、ＲＴＲ（Remote Transmission Request）、ＩＤＥ（Identifier Extension）、予約ビット「ｒ」、ＤＬＣ（Data Length Code）、データフィールド、ＣＲＣ（Cyclic Redundancy Check）シーケンス、ＣＲＣデリミタ「ＤＥＬ」、ＡＣＫ（Acknowledgement）スロット、ＡＣＫデリミタ「ＤＥＬ」、及び、ＥＯＦ（End Of Frame）の各フィールドで構成される。
【００３２】
ＳＯＦは、１ｂｉｔのドミナントで構成される。バスがアイドルの状態はレセシブになっており、ＳＯＦによりドミナントへ変更することでフレームの送信開始を通知する。
【００３３】
ＩＤフィールドは、１１ｂｉｔで構成される、データの種類を示す値であるＩＤ（メッセージＩＤ）を格納するフィールドである。複数のノードが同時に送信を開始した場合、このＩＤフィールドで通信調停を行うために、ＩＤが小さい値を持つフレームが高い優先度となるよう設計されている。
【００３４】
ＲＴＲは、データフレームとリモートフレームとを識別するための値であり、データフレームにおいてはドミナント１ｂｉｔで構成される。
【００３５】
ＩＤＥと「ｒ」とは、両方ドミナント１ｂｉｔで構成される。
【００３６】
ＤＬＣは、４ｂｉｔで構成され、データフィールドの長さを示す値である。なお、ＩＤＥ、「ｒ」及びＤＬＣを合わせてコントロールフィールドと称する。
【００３７】
データフィールドは、最大６４ｂｉｔで構成される送信するデータの内容を示す値である。８ｂｉｔ毎に長さを調整できる。送られるデータの仕様については、ＣＡＮプロトコルで規定されておらず、車載ネットワークシステム１０において定められる。従って、車種、製造者（製造メーカ）等に依存した仕様となる。
【００３８】
ＣＲＣシーケンスは、１５ｂｉｔで構成される。ＳＯＦ、ＩＤフィールド、コントロールフィールド及びデータフィールドの送信値より算出される。
【００３９】
ＣＲＣデリミタは、１ｂｉｔのレセシブで構成されるＣＲＣシーケンスの終了を表す区切り記号である。なお、ＣＲＣシーケンス及びＣＲＣデリミタを合わせてＣＲＣフィールドと称する。
【００４０】
ＡＣＫスロットは、１ｂｉｔで構成される。送信ノードはＡＣＫスロットをレセシブにして送信を行う。受信ノードはＣＲＣシーケンスまで正常に受信ができていればＡＣＫスロットをドミナントとして送信する。レセシブよりドミナントが優先されるため、送信後にＡＣＫスロットがドミナントであれば、送信ノードは、いずれかの受信ノードが受信に成功していることを確認できる。
【００４１】
ＡＣＫデリミタは、１ｂｉｔのレセシブで構成されるＡＣＫの終了を表す区切り記号である。
【００４２】
ＥＯＦは、７ｂｉｔのレセシブで構成されており、データフレームの終了を示す。
【００４３】
［１．３  データフィールドフォーマット］
以下、車載ネットワークシステム１０で用いられるデータフレームにおけるデータフィールドについて説明する。
【００４４】
図３は、車載ネットワークシステムで用いられるデータフィールドフォーマットの一例を示す図である。同図に示すように、データフィールドの最上位ビット「Ｉ」（先頭の１ビット）は、このデータフィールドを含むデータフレームが、イベントドリブンデータフレームであるか否かを識別するための識別フラグ（「イベントドリブン識別フラグ」と称する。）である。イベントドリブン識別フラグＩは、周期的に送信されるデータフレームにおいては０がセットされ、イベントドリブンデータフレームにおいては１がセットされる。イベントドリブン識別フラグＩに後続するデータ領域には、ＥＣＵが機器等から取得したセンサ値を示すデータ（ＥＣＵ１００ａが送信するデータフレームにおいては例えばパワーウィンドウスイッチ１１０の状態を示す値等）が含まれる。図３の例では最上位ビットをイベントドリブン識別フラグＩとしているが、イベントドリブン識別フラグＩを、データフィールド内における最下位ビット等の任意の箇所に設けても良い。
【００４５】
［１．４  ＥＣＵ１００ａの構成］
図４は、ＥＣＵ１００ａの構成図である。ＥＣＵ１００ａは、データフレーム送受信部１０１と、データフレーム生成部１０２と、データフレーム生成ルール保持部１０３と、不正データフレーム判断部１０４と、受信データフレーム周期保持部１０５と、データフレーム受信履歴保持部１０６と、データフレーム処理部１０７と、タイマ１０８と、センサ値取得部１０９とを含んで構成される。これらの各構成要素は、機能的な構成要素であり、その各機能は、ＥＣＵ１００ａにおける通信回路、メモリに格納された制御プログラムを実行するプロセッサ或いはデジタル回路等により実現される。なお、ＥＣＵ１００ｂもＥＣＵ１００ａと基本的に同様の構成を備える。但し、データフレーム生成ルール保持部１０３及び受信データフレーム周期保持部１０５及びデータフレーム受信履歴保持部１０６の各保持内容はＥＣＵ毎に異なる内容となり得る。また、データフレーム処理部１０７の処理内容は、ＥＣＵ毎に異なる。
【００４６】
データフレーム送受信部１０１は、バス２００に流れるデータフレームを受信し、ＣＡＮプロトコルに従ってデータフレームを解釈する。受信したデータフレームにおけるＩＤフィールドの内容であるＩＤ（メッセージＩＤ）が、自機（ＥＣＵ１００ａ）が受信するように予め定められているメッセージＩＤである場合は、データフレームの内容を不正データフレーム判断部１０４へ通知する。また、データフレーム送受信部１０１は、データフレーム生成部１０２から通知されたデータフレームをＣＡＮプロトコルに従ってバス２００へ送信する。
【００４７】
データフレーム生成部１０２は、データフレーム生成ルール保持部１０３に格納されたデータフレーム生成ルールに従い、データフレームを生成し、データフレーム送受信部１０１に通知する。データフレーム生成部１０２は、タイマ１０８から現在時刻を取得する。更にデータフレーム生成部１０２は、ＥＣＵ１００ａに接続された機器（パワーウィンドウスイッチ１１０）に関するデータ（センサ値）をセンサ値取得部１０９から取得する。ＥＣＵ１００ａからデータフレームを周期的に送信すべく、データフレーム生成部１０２は、現在時刻とデータフレーム生成ルール保持部１０３に格納される送信周期とによって、データフレームを生成するタイミングを決定し、データフレームの生成を周期的に行う。なお、データフレーム生成部１０２によりデータフレームが生成されると、そのデータフレームはデータフレーム送受信部１０１に通知され、データフレーム送受信部１０１はそのデータフレームの送信を行う。更に、データフレーム生成部１０２は、センサ値取得部１０９から取得されるセンサ値に変化があった時が、前述した周期的なタイミングとは異なる時である場合（例えば周期的なタイミングの許容範囲を示すマージンの範囲外である場合）には、イベントドリブンデータフレームの生成を行う。即ち、データフレーム生成部１０２は、送信周期を示すデータフレーム生成ルールに適合しないタイミングでデータフレームの送信をする際においてデータフレーム中にイベントドリブン識別フラグという特定識別子を付与したデータフレームを生成する、言わば付与部として働く。センサ値取得部１０９はセンサ（パワーウィンドウスイッチ１１０）からセンサ値に変更があった場合及び変更がない場合に随時センサ値を取得する方式で動作しても、センサ値に変更があった場合にのみセンサから供給されるセンサ値を取得する方式で動作しても良い。データフレーム生成部１０２は、センサ値取得部１０９が最後にセンサから取得したセンサ値をデータフィールドに格納したデータフレームを周期的に生成する他、前回のセンサ値から変化があったセンサ値を含むイベントドリブンデータフレームを生成することになる。なお、周期的にデータフレームを生成するタイミングにおいては、前回のセンサ値から変化がなく同じセンサ値を含むデータフレームを生成する可能性と、前回のセンサ値から変化があったセンサ値を含むデータフレームを生成する可能性とがある。また、その周期的なタイミングではないタイミングで生成されるイベントドリブンデータフレームは、前回のセンサ値から変化があったセンサ値を含むデータフレームである。従って、データフレーム送受信部１０１によりＥＣＵ１００ａからバス２００に、周期的にデータフレームが送信され、更に、非周期的にイベントドリブンデータフレームが送信される。即ち、データフレーム送受信部１０１は、バス２００上で送信されたデータフレームを受信する受信部としての機能の他に、特定識別子を含み送信周期を示すデータフレーム生成ルールに適合しないデータフレームであるイベントドリブンデータフレームをバス２００により他のＥＣＵに送信する、言わば送信部としての機能等を含む。
【００４８】
データフレーム生成ルール保持部１０３は、メモリ等の記憶媒体で実現され、データフレーム生成ルールとして、自機（ＥＣＵ１００ａ）が送信するメッセージＩＤ毎に周期的にデータフレームを送信するための送信周期を格納している。図５は、データフレーム生成ルール保持部１０３に格納されたデータフレーム生成ルールの一例を示す図である。ここでは、ＥＣＵ１００ａは、パワーウィンドウスイッチ１１０の状態を示すデータフレーム等、複数種類のデータフレーム（種類毎にメッセージＩＤで識別されるデータフレーム）を送信するものとする。図５の例は、ＥＣＵ１００ａから周期的に送信されるメッセージＩＤが０ｘ１００のデータフレームの送信周期は、５０ｍｓであり、メッセージＩＤが０ｘ２００のデータフレームの送信周期は、１００ｍｓであり、メッセージＩＤが０ｘ３００のデータフレームの送信周期は、３００ｍｓであることを示している。
【００４９】
不正データフレーム判断部１０４は、受信したデータフレームが正当なデータフレームであるか（不正なデータフレームでないか）否かについて判断する。即ち、不正データフレーム判断部１０４は、データフレーム送受信部１０１から通知されたデータフレームについて、受信データフレーム周期保持部１０５の周期ルール情報（後述）を参照して、メッセージＩＤ毎に予め定められた送信周期の条件を満たすか否かを確認し、送信周期の条件を満たす場合には正規のＥＣＵから送信されたデータフレーム（正当なデータフレーム）であると判断する。また、送信周期の条件を満たさないデータフレームであっても、イベントドリブンデータフレームであるか否かを識別するためのイベントドリブン識別フラグを確認し、イベントドリブンデータフレームであると識別された場合には正規ＥＣＵから送信されたデータフレーム（正当なデータフレーム）であると判断する。即ち、不正データフレーム判断部１０４は、送信周期を示すデータフレーム生成ルールに呼応した周期ルール情報（後述）に適合しないデータフレームがデータフレーム送受信部１０１により受信された場合に、そのデータフレーム中のイベントドリブン識別フラグという特定識別子を検証する、言わば検証部としての機能を有する。不正データフレーム判断部１０４は、受信したデータフレームが予め定められた送信周期の条件を満たさず、かつ、イベントドリブン識別フラグによってイベントドリブンデータフレームであると確認されない場合（つまり特定識別子の検証に失敗した場合）には、受信したデータフレームを不正なデータフレームであると判断する。不正データフレーム判断部１０４は、正当なデータフレームであると判断した場合には、データフレーム処理部１０７にそのデータフレームの処理を行わせ、不正なデータフレームであると判断した場合には、そのデータフレームを破棄する（つまりそのデータフレームについてデータフレーム処理部１０７に処理させない）。また、不正データフレーム判断部１０４は、送信周期の条件を満たすデータフレームを受信した場合に、受信時刻をデータフレーム受信履歴保持部１０６に前回受信時刻（後述）として記録する。
【００５０】
受信データフレーム周期保持部１０５は、メモリ等の記憶媒体で実現され、周期ルール情報を保持する。この周期ルール情報は、自機（ＥＣＵ１００ａ）が受信するデータフレームのメッセージＩＤ毎に、予め定められた送信周期と、データフレームの受信間隔について、送信周期の条件が満たされる（つまり正当な送信周期に合致する）と判断されるための許容範囲を示すマージンとを対応付けた情報である。データフレームの受信側のＥＣＵの受信データフレーム周期保持部１０５に保持される周期ルール情報における送信周期は、そのデータフレームの送信側のＥＣＵのデータフレーム生成ルール保持部１０３に保持されるデータフレーム生成ルールにおける送信周期に呼応する。図６は、ＥＣＵ１００ａから送信されたデータフレームを受信するＥＣＵ１００ｂにおける受信データフレーム周期保持部１０５に格納された周期ルール情報の一例を示す図である。同図の例では、メッセージＩＤが０ｘ１００のデータフレームの送信周期が５０ｍｓ、メッセージＩＤが０ｘ２００のデータフレームの送信周期が１００ｍｓ、メッセージＩＤが０ｘ３００のデータフレームの送信周期が７０ｍｓであることを示している。同図の例では、マージンは、どのメッセージＩＤについても１ｍｓである。このマージンが１ｍｓであるため、メッセージＩＤが０ｘ１００のデータフレームについて送信周期が４９ｍｓ以上５１ｍｓ以下の範囲であれば、ＥＣＵ１００ｂにおける不正データフレーム判断部１０４は、送信周期の条件が満たされると判断することになる。
【００５１】
データフレーム受信履歴保持部１０６は、メモリ等の記憶媒体で実現され、自機（ＥＣＵ１００ａ）が正常に受信（つまり正当なデータフレームとして受信）した周期的なデータフレームについてメッセージＩＤ毎に、周期的に受信した最終時刻である前回受信時刻を対応付けてなるリストを保持している。図７は、正当なデータフレームとして受信した周期的なデータフレームのメッセージＩＤ毎に、データフレームの前回受信時刻を示す情報を列挙したリストの一例を示している。同図の例は、ＥＣＵ１００ｂにおけるデータフレーム受信履歴保持部１０６が保持するリストの例である。この例では、メッセージＩＤが０ｘ１００であるデータフレームを周期的に受信した最終時刻（前回受信時刻）は２００ｍｓ、メッセージＩＤが０ｘ２００であるデータフレームを周期的に受信した前回受信時刻は２２０ｍｓ、メッセージＩＤが０ｘ３００であるデータフレームを周期的に受信した前回受信時刻は２３０ｍｓであることを示している。
【００５２】
データフレーム処理部１０７は、不正データフレーム判断部１０４により正当なデータフレームであると判断されたデータフレームについて、そのデータフレームに応じてＥＣＵ毎に予め定められた処理を行う。例えば、パワーウィンドウスイッチ１１０の状態を示すデータフレームを送信したＥＣＵ１００ａでは、ＥＣＵ１００ｂからパワーウィンドウ１２０の開閉の制御状態に応じたデータフレームを受信して、パワーウィンドウ１２０が適切に反応しているかを確認する処理、適切に反応していない場合にアラーム音を鳴らす処理或いは他のＥＣＵに異常を通知する処理等を行う。
【００５３】
タイマ１０８は、計時機構であり、例えば車両のエンジン始動時或いはバッテリからの電力供給開始時等において０にリセットされ、その時点から経過した時刻を、データフレーム生成部１０２及び不正データフレーム判断部１０４に通知する。タイマ１０８により、データフレーム生成部１０２は、データフレームを一定の送信周期で周期的に送信でき、不正データフレーム判断部１０４は、受信したデータフレームの受信周期が予め定められた送信周期の条件を満たすか否かを判断することができるようになる。
【００５４】
センサ値取得部１０９は、自機（ＥＣＵ１００ａ）が接続している機器（パワーウィンドウスイッチ１１０）の状態を示すセンサ値を取得し、データフレーム生成部１０２に周期的に通知し、更にセンサの値が変化した時にもセンサ値をデータフレーム生成部１０２に通知する。
【００５５】
［１．５  データフレームの送受信］
以下、図８〜図１０を用いて、バス２００を介したＥＣＵ間でのデータフレームの送受信について説明する。
【００５６】
図８は、ＥＣＵ１００ａをデータフレームの送信側とし、ＥＣＵ１００ｂをデータフレームの受信側としたときのデータフレームの送受信の流れを示す図である。
【００５７】
図８に示す期間Ｔは、周期的に送信されるデータフレームの送信周期である。この期間Ｔは、送信側であるＥＣＵ１００ａのデータフレーム生成ルール保持部１０３が保持するデータフレーム生成ルールにおける送信周期である。また、期間Ｔは、受信側であるＥＣＵ１００ｂの受信データフレーム周期保持部１０５が保持する周期ルール情報における送信周期と一致すると想定される。ＥＣＵ１００ａは、周期的にデータフレームを送信する。ＥＣＵ１００ａは、その周期的な送信に加えて、接続されたパワーウィンドウスイッチ１１０の状態の変化のタイミングがその周期的な送信タイミングと一致しない場合に、その状態の変化のタイミングで、イベントドリブンデータフレームを送信する。
【００５８】
車載ネットワークシステム１０においては、不正なＥＣＵがバス２００に接続された不正なデータフレームを送信した場合に、ＥＣＵ１００ａが送信した正当なデータフレームと区別できる。即ち、ＥＣＵ１００ｂにより不正なデータフレームと正当なデータフレームとは判別される。この判別には、上述した周期的に送信されるデータフレームについて周期ルール情報（送信周期に係る条件）が用いられ、また、その送信周期に係る条件を満たさないイベントドリブンデータフレームについてはデータフィールド中のイベントドリブン識別フラグという特定識別子が用いられる。
【００５９】
図９は、ＥＣＵ１００ａにおけるデータフレームの送信処理を示すフローチャートである。
【００６０】
ＥＣＵ１００ａは、データフレーム生成ルールにおける送信周期に従った送信タイミング（前回の送信から送信周期が経過したタイミング）、或いは、センサ値取得部１０９からのセンサ値が変化したタイミングで、データフレームの生成が必要となり、図９の送信処理を開始する。送信処理においては、まず、ＥＣＵ１００ａは、送信するデータフレームがイベントドリブンデータフレームか周期的なデータフレームかを判断する（ステップＳ１１０１）。
【００６１】
ＥＣＵ１００ａは、ステップＳ１１０１において、送信するデータフレームが、データフレーム生成ルールにおける送信周期に従っていないイベントドリブンデータフレームであると判断した場合は、生成するデータフレームのデータフィールドのイベントドリブン識別フラグＩ（図３参照）に、イベントドリブンデータフレームであることを示す１をセットする（ステップＳ１１０２）。
【００６２】
ＥＣＵ１００ａは、ステップＳ１１０１において、送信するデータフレームが、データフレーム生成ルールにおける送信周期に従う周期的なデータフレームであると判断した場合（イベントドリブンデータフレームでないと判断した場合）は、生成するデータフレームのデータフィールドのイベントドリブン識別フラグＩ（図３参照）に、イベントドリブンデータフレームでないことを示す０をセットする（ステップＳ１１０３）。
【００６３】
ＥＣＵ１００ａは、ステップＳ１１０２又はＳ１１０３での処理を終えると、データフィールドのデータ領域にはセンサ値取得部１０９から取得した最新のセンサ値をセットして、送信するデータフレームを生成し、バス２００へと送信する（ステップＳ１１０４）。これにより、バス２００上にデータフレームが流れ、ＥＣＵ１００ｂに受信されるようになる。
【００６４】
図１０は、ＥＣＵ１００ｂにおけるデータフレームの受信処理を示すフローチャートである。
【００６５】
ＥＣＵ１００ｂは、バス２００上に現れるデータフレームを受信する（ステップＳ１２０１）。なお、ＥＣＵ１００ｂは、自機が受信すべきメッセージＩＤを含まないデータフレームであればそのデータフレームを破棄して処理を終了する。自機が受信すべきメッセージＩＤを含むデータフレームを受信した場合に、ＥＣＵ１００ｂは、その受信が、保持している周期ルール情報で規定された送信周期範囲内か否かを判断する（ステップＳ１２０２）。なお、ＥＣＵ１００ｂの不正データフレーム判断部１０４は、受信したデータフレームの受信間隔（つまり送信周期）が規定の送信周期の範囲内であるか否か（つまり周期ルール情報で定められた送信周期の条件を満たすか否か）を、タイマ１０８、受信データフレーム周期保持部１０５及びデータフレーム受信履歴保持部１０６から得られる情報に基づいて判断する。なお、規定の送信周期の範囲内とは、前回受信時刻と今回受信したデータフレームの受信時刻の差分（受信間隔）が、受信したデータフレームのメッセージＩＤに対応して定められた送信周期からマージンを引いた値以上であり、かつ、その送信周期にマージンを加えた値以下である場合を意味する。
【００６６】
ステップＳ１２０２において、データフレームの受信間隔が送信周期の範囲内である場合には、送信周期の条件が満たされたことになり、ＥＣＵ１００ｂは、データフレーム受信履歴保持部１０６が保持するリストに、受信したデータフレームのメッセージＩＤに対応付けて、前回受信時刻として、そのデータフレームの受信時刻を記録（つまり前回受信時刻を更新）する（ステップＳ１２０４）。そして、ステップＳ１２０４での処理に続いて、ＥＣＵ１００ｂの不正データフレーム判断部１０４により、受信したデータフレームが正当なデータフレームであると判断され（ステップＳ１２０５）、データフレーム処理部１０７によりそのデータフレームに対応した処理がなされる。
【００６７】
また、ステップＳ１２０２において、データフレームの前回受信時刻と今回受信時刻の差分が送信周期の範囲内でない場合には、ＥＣＵ１００ｂは、データフレームのデータフィールドのイベントドリブン識別フラグＩが１であるか否かを判別する（ステップＳ１２０３）。イベントドリブン識別フラグＩが１である場合には、ＥＣＵ１００ｂの不正データフレーム判断部１０４は、受信したデータフレームが正当なデータフレームであると判断し（ステップＳ１２０５）、データフレーム処理部１０７によりそのデータフレームに対応した処理がなされる。
【００６８】
また、ステップＳ１２０３において、データフレームのデータフィールドのイベントドリブン識別フラグＩが１でないと判別した場合には、ＥＣＵ１００ｂは、受信したデータフレームが不正なデータフレームであると判断してデータフレームを破棄する（ステップＳ１２０６）。従って、ＥＣＵ１００ｂは、不正なＥＣＵにより送信された不正なデータフレームを処理しない。
【００６９】
なお、ステップＳ１２０２において、データフレームの受信間隔（つまり送信周期）が規定の送信周期の範囲内か否かを判断するに際して、初回等といった前回受信時刻が保存されていない場合においては、受信したデータフレームをイベントドリブンデータフレームと扱い、イベントドリブン識別フラグＩが正しいときにそのデータフレームの受信時刻を前回受信時刻として記録してからステップＳ１２０５の処理を行うことができる。この場合、送信側のＥＣＵでは初回等の周期的な送信の起点においてはイベントドリブンデータフレームを送信する。また、各ＥＣＵが例えばスリープ状態等に入ってデータフレームの周期的な送信を休止する期間がある場合には、その後の周期的な送信の再開時にデータフレームをイベントドリブンデータフレームとして送信することとしても良い。この場合には、受信側のＥＣＵでは前回受信時刻から一定時間以上の間、送信側のＥＣＵがスリープ状態に入って周期的な送信が途切れた場合に、前回受信時刻を無効にして次回を初回と扱い、受信したデータフレームをイベントドリブンデータフレームと扱い、その正当性を判断することができる。
【００７０】
ここでは、ＥＣＵ１００ａがデータフレームを送信してＥＣＵ１００ｂがデータフレームを受信する例を示したが、ＥＣＵ１００ｂがデータフレームを送信してＥＣＵ１００ａがデータフレームを受信する場合においても同様の処理がなされる。即ち、ＥＣＵ１００ｂも図９に示すものと同様の送信処理を実行し得るし、ＥＣＵ１００ａも図１０に示すものと同様の受信処理を実行し得る。
【００７１】
［１．６  実施の形態１の効果］
実施の形態１では、周期的に送信されるデータフレームに加えて、非周期的に送信されるイベントドリブンデータフレームが存在する場合でも、イベントドリブンデータフレーム内に特定識別子を含めることによって、正当なデータフレームか否かを区別可能にする車載ネットワークシステム１０を示した。即ち、車載ネットワークシステム１０では、送信周期の条件により正当なデータフレームであるか否かを判別し、送信周期の条件によっては判別ができない場合に限って特定識別子により正当なデータフレームであるか否かを判別するようにしている。不正なＥＣＵがデータフレームを送信する場合には、送信周期の条件を満たさない可能性が高く、特に特定識別子を付与しないため、このデータフレームを受信したＥＣＵによって不正なデータフレームであると判断されるようになる。なお、イベントドリブンデータフレームではないデータフレーム（つまり周期的に送信されるデータフレーム）においては、データフィールドにイベントドリブン識別フラグＩを含めずにデータフィールドに、ＥＣＵが機器等から取得したセンサ値を示すデータだけを含ませることとしても良い。このようにすれば、正規のＥＣＵが周期的に送信するデータフレームには、特定識別子を設ける必要がないため例えばデータフィールドを最大限に有効活用できる。
【００７２】
（実施の形態２）
以下、本開示の別の実施の形態として、データフレームを送受信するＥＣＵ２１００ａとＥＣＵ２１００ｂとの間で、周期的に送信されるデータフレームに加えて非周期的なイベントドリブンデータフレームが送信され得る前提の下で、不正なデータフレームが送信されたことを適切に検知するための不正検知方法を実現する車載ネットワークシステム１１について図面を用いて説明する。
【００７３】
［２．１  車載ネットワークシステム１１の全体構成］
図１１は、実施の形態２に係る車載ネットワークシステム１１の全体構成を示す図である。車載ネットワークシステム１１は、実施の形態１で示した車載ネットワークシステム１０の一部を変形したものであり、制御装置、センサ等の各種機器が搭載された自動車におけるネットワーク通信システムである。車載ネットワークシステム１１は、各種機器に接続されたＥＣＵ２１００ａ、２１００ｂ、及び、各ＥＣＵをつなぐバス２００を含んで構成される。車載ネットワークシステム１１の構成要素のうち、実施の形態１で示した車載ネットワークシステム１０と同様の機能を有する構成要素は、同じ符号を付して説明を省略する。ＥＣＵは、例えば、プロセッサ（マイクロプロセッサ）、メモリ等のデジタル回路、アナログ回路、通信回路等を含む装置である。以下、バス２００には不正なデータフレームを送信する不正なＥＣＵが接続されている可能性があることを前提として説明する。
【００７４】
ＥＣＵ２１００ａは、実施の形態１で示したＥＣＵ１００ａの一部を変形したものであり、パワーウィンドウスイッチ１１０に接続されている。ＥＣＵ２１００ａは、パワーウィンドウスイッチ１１０の状態を示す情報を含むデータフレームを周期的にバス２００に送信する。さらにパワーウィンドウスイッチ１１０の状態が変化した時にもパワーウィンドウスイッチ１１０の状態を示す情報（つまりセンサ値を示す情報）を含むデータフレームをバス２００に送信する。従って、ＥＣＵ２１００ａは、一定の送信周期でデータフレームの送信を繰り返す他に、パワーウィンドウスイッチ１１０の状態の変化時がその送信周期と一致しないときに非周期的なイベントドリブンデータフレームをバス２００に送信することになる。またＥＣＵ２１００ａは、ＥＣＵ２１００ｂからバス２００上に送信されてバス２００に流れるデータフレームを受信し、例えばＥＣＵ２１００ａが送信したデータフレームが正しく受信されていること等を確認する。
【００７５】
ＥＣＵ２１００ｂは、実施の形態１で示したＥＣＵ１００ｂの一部を変形したものであり、パワーウィンドウ１２０に接続されている。ＥＣＵ２１００ｂは、ＥＣＵ２１００ａから送信されバス２００に流れているデータフレームを受信し、そのデータフレームに含まれるパワーウィンドウスイッチ１１０の状態に応じて、パワーウィンドウ１２０の開閉の制御を行う。またパワーウィンドウ１２０の開閉の制御状態に応じたデータフレームを周期的にバス２００に送信する。この車載ネットワークシステム１１においてはＣＡＮプロトコルに従って各ＥＣＵがフレームの授受を行う。各ＥＣＵは、受信したデータフレームが不正なデータフレームであるか否かを判断する機能を有している。
【００７６】
［２．２  データフィールドフォーマット］
以下、車載ネットワークシステム１１で用いられるデータフレームにおけるデータフィールドについて説明する。
【００７７】
図１２は、車載ネットワークシステム１１で用いられるデータフィールドフォーマットの一例を示す図である。同図に示すように、データフィールドの上位８ビット「Ｉ」（先頭の８ビット）は、イベントドリブンデータフレームを送信する度に増加するカウンタ（「イベントカウンタ」と称する。）である。イベントカウンタＩの値は、周期的なデータフレームの送信時には変化せず、同じメッセージＩＤのイベントドリブンデータフレームを１回送信する度に値が１増加（インクリメント）する。なお、例外的にイベントカウンタＩの値が最大値（８ビットの最大値）になっている場合にイベントカウンタを１増加すると最小値になる。イベントカウンタＩは、データフレームの受信側において正当なイベントドリブンデータフレームであるか否かを識別するための特定識別子として働く。イベントカウンタＩに後続するデータ領域にはＥＣＵが機器等から取得したセンサ値を示すデータ（ＥＣＵ２１００ａが送信するデータフレームにおいては例えばパワーウィンドウスイッチ１１０の状態を示す値等）が含まれる。図１２の例では上位８ビットをイベントカウンタＩとしているが、イベントカウンタＩを、データフィールド内における下位８ビット等の任意の箇所に設けても良い。また、イベントカウンタＩの長さを８ビットとしているが、必ずしも８ビットである必要はなく、任意の長さにしても良い。
【００７８】
［２．３  ＥＣＵ２１００ａの構成］
図１３は、ＥＣＵ２１００ａの構成図である。ＥＣＵ２１００ａは、データフレーム送受信部１０１と、データフレーム生成部２１０２と、データフレーム生成ルール保持部２１０３と、不正データフレーム判断部２１０４と、受信データフレーム周期保持部１０５と、データフレーム受信履歴保持部２１０６と、データフレーム処理部１０７と、タイマ１０８と、センサ値取得部１０９とを含んで構成される。ＥＣＵ２１００ａの構成要素のうち、実施の形態１で示したＥＣＵ１００ａと同様の機能を有する構成要素は、同じ符号を付して説明を省略する。これらの各構成要素は、機能的な構成要素であり、その各機能は、ＥＣＵ２１００ａにおける通信回路、メモリに格納された制御プログラムを実行するプロセッサ或いはデジタル回路等により実現される。なお、ＥＣＵ２１００ｂもＥＣＵ２１００ａと基本的に同様の構成を備える。但し、データフレーム生成ルール保持部２１０３、受信データフレーム周期保持部１０５及びデータフレーム受信履歴保持部２１０６の各保持内容はＥＣＵ毎に異なる内容となり得る。また、データフレーム処理部１０７の処理内容は、ＥＣＵ毎に異なる。
【００７９】
データフレーム生成部２１０２は、データフレーム生成ルール保持部２１０３に格納されたデータフレーム生成ルールに従い、データフレームを生成し、データフレーム送受信部１０１に送信する。データフレーム生成部２１０２は、タイマ１０８から現在時刻を取得する。更にデータフレーム生成部２１０２は、ＥＣＵ２１００ａに接続された機器（パワーウィンドウスイッチ１１０）に関するデータ（センサ値）をセンサ値取得部１０９から取得する。ＥＣＵ２１００ａからデータフレームを周期的に送信すべく、データフレーム生成部２１０２は、現在時刻とデータフレーム生成ルール保持部２１０３に格納される送信周期とによって、データフレームを生成するタイミングを決定し、データフレームの生成を周期的に行う。なお、データフレーム生成部２１０２によりデータフレームが生成されると、そのデータフレームはデータフレーム送受信部１０１に通知され、データフレーム送受信部１０１はそのデータフレームの送信を行う。更に、データフレーム生成部２１０２は、センサ値取得部１０９から取得されるセンサ値に変化があった時が、周期的なタイミングとは異なる時である場合には、イベントドリブンデータフレームの生成を行う。従って、データフレーム送受信部１０１によりＥＣＵ２１００ａからバス２００に、周期的にデータフレームが送信され、更に、非周期的にイベントドリブンデータフレームが送信される。データフレーム生成部２１０２は、周期的に送信するデータフレーム及びイベントドリブンデータフレームのデータフィールドに、イベントカウンタＩとして、データフレーム生成ルール保持部２１０３に格納されている、メッセージＩＤ毎の送信イベントカウンタの値を含ませる。なお、データフレーム生成部２１０２は、イベントドリブンデータフレームを生成する場合には、データフレームの生成前にデータフレーム生成ルール保持部２１０３に格納されている送信イベントカウンタの値を１増加（インクリメント）する。データフレーム生成部２１０２も実施の形態１で示したデータフレーム生成部１０２と同様に、送信周期を示すデータフレーム生成ルールに適合しないタイミングでデータフレームの送信をする際においてデータフレーム中にイベントカウンタという特定識別子を付与したデータフレームを生成する付与部としての機能を有する。
【００８０】
データフレーム生成ルール保持部２１０３は、メモリ等の記憶媒体で実現され、データフレーム生成ルールとしてＥＣＵ２１００ａが送信するメッセージＩＤ毎に周期的にデータフレームを送信するための送信周期を格納しており、更に、データフレーム生成ルールに、送信したイベントドリブンデータフレームの回数を示す送信イベントカウンタを付与している。この送信イベントカウンタは、データフレームを送信する際に、データフィールドのイベントカウンタに設定する値として用いられる。データフレーム生成部２１０２がイベントドリブンデータフレームの送信時に、送信イベントカウンタを１増加し、その送信イベントカウンタの値をデータフィールド内のイベントカウンタＩとして用いる。図１４は、データフレーム生成ルール保持部２１０３に格納されたデータフレーム生成ルール及び送信イベントカウンタの一例を示す図である。ここでは、ＥＣＵ２１００ａは、パワーウィンドウスイッチ１１０の状態を示すデータフレーム等、複数種類のデータフレーム（種類毎にメッセージＩＤで識別されるデータフレーム）を送信するものとする。図１４の例では、ＥＣＵ２１００ａから周期的に送信されるメッセージＩＤが０ｘ１００のデータフレームについては、送信周期が５０ｍｓであり送信イベントカウンタが現在１５（例えばイベントドリブンデータフレームを１５回送信した状態を示す値）であり、メッセージＩＤが０ｘ２００のデータフレームについては、送信周期が１００ｍｓであり送信イベントカウンタが現在０（例えば未だイベントドリブンデータフレームを送信していない状態を示す値）であり、メッセージＩＤが０ｘ３００のデータフレームについては、送信周期が３００ｍｓであり送信イベントカウンタが現在５であることを示している。
【００８１】
不正データフレーム判断部２１０４は、受信したデータフレームが正当なデータフレームであるか（不正なデータフレームでないか）否かについて判断する。即ち、不正データフレーム判断部２１０４は、受信データフレーム周期保持部１０５の周期ルール情報を参照して、メッセージＩＤ毎に予め定められた送信周期の条件を満たすか否かを確認し、送信周期の条件を満たす場合には正規のＥＣＵから送信されたデータフレーム（正当なデータフレーム）であると判断する。また、送信周期の条件を満たさないデータフレームであっても、データフレーム受信履歴保持部２１０６に格納されている受信イベントカウンタの値と受信したデータフレームに含まれるイベントカウンタＩの値とを比較して確認し、イベントカウンタＩの値が正当なイベントドリブンデータフレームに期待される値であると判定された場合には、正規ＥＣＵから送信されたイベントドリブンデータフレーム（正当なデータフレーム）であると判断する。即ち、不正データフレーム判断部２１０４は、実施の形態１で示した不正データフレーム判断部１０４と同様に、送信周期を示すデータフレーム生成ルールに呼応した周期ルール情報に適合しないデータフレームがデータフレーム送受信部１０１により受信された場合に、そのデータフレーム中のイベントカウンタという特定識別子を検証する検証部としての機能を有する。受信したデータフレームに含まれるイベントカウンタＩの値が、受信イベントカウンタの値を１増加させた値と一致する場合には、正当なイベントドリブンデータフレームに期待される値であり、正当なデータフレームであると判断される。不正データフレーム判断部２１０４は、受信したデータフレームが予め定められた送信周期の条件を満たさず、かつ、イベントカウンタＩにより正当なイベントドリブンデータフレームであると判定されない場合には、受信したデータフレームを不正なデータフレームであると判断する。不正データフレーム判断部２１０４は、正当なデータフレームであると判断した場合には、データフレーム処理部１０７にそのデータフレームの処理を行わせ、不正なデータフレームであると判断した場合には、そのデータフレームを破棄する（つまりそのデータフレームについてデータフレーム処理部１０７に処理させない）。また、不正データフレーム判断部２１０４は、送信周期の条件を満たすデータフレームを受信した場合に、受信時刻をデータフレーム受信履歴保持部２１０６に前回受信時刻として記録する。
【００８２】
データフレーム受信履歴保持部２１０６は、メモリ等の記憶媒体で実現され、自機（ＥＣＵ２１００ａ）が正常に受信（つまり正当なデータフレームとして受信）した周期的なデータフレームについてメッセージＩＤ毎に、周期的に受信した最終時刻である前回受信時刻を対応付けてなるリストを保持しており、このリストには更に正当に受信したイベントドリブンデータフレームの受信回数である受信イベントカウンタがメッセージＩＤ毎に付与されている。図１５は、正当なデータフレームとして受信した周期的なデータフレームのメッセージＩＤ毎に、データフレームの前回受信時刻及び受信イベントカウンタを列挙したリストの一例を示している。同図の例は、ＥＣＵ２１００ｂにおけるデータフレーム受信履歴保持部２１０６が保持するリストの例である。この例では、メッセージＩＤが０ｘ１００であるデータフレームを周期的に受信した最終時刻（前回受信時刻）は２００ｍｓでありメッセージＩＤが０ｘ１００のイベントドリブンデータフレームに対応する受信イベントカウンタが現在１５（例えばイベントドリブンデータフレームを１５回受信した状態を示す値）であり、メッセージＩＤが０ｘ２００であるデータフレームを周期的に受信した前回受信時刻は２２０ｍｓであり受信イベントカウンタが現在０（例えば未だイベントドリブンデータフレームを受信していない状態を示す値）であり、メッセージＩＤが０ｘ３００であるデータフレームを周期的に受信した前回受信時刻は２３０ｍｓであり受信イベントカウンタが現在５であることを示している。
【００８３】
［２．４  ＥＣＵ２１００ａにおけるデータフレームの送信処理］
以下、ＥＣＵ２１００ａがデータフレームをバス２００に送信し、ＥＣＵ２１００ｂがデータフレームをバス２００から受信する例を想定して、ＥＣＵ２１００ａにおけるデータフレームの送信処理を説明する。
【００８４】
図１６は、ＥＣＵ２１００ａにおけるデータフレームの送信処理を示すフローチャートである。
【００８５】
ＥＣＵ２１００ａは、データフレーム生成ルールにおける送信周期に従った送信タイミング（前回の送信から送信周期が経過したタイミング）、或いは、センサ値取得部１０９からのセンサ値が変化したタイミングで、データフレームの生成が必要となり、図１６の送信処理を開始する。送信処理においては、まず、ＥＣＵ２１００ａは、送信するデータフレームがイベントドリブンデータフレームか周期的なデータフレームかを判断する（ステップＳ２１０１）。
【００８６】
ＥＣＵ２１００ａは、ステップＳ２１０１において、送信するデータフレームが、データフレーム生成ルールにおける送信周期に従っていないイベントドリブンデータフレームであると判断した場合は、データフレーム生成ルール保持部２１０３に格納されている送信イベントカウンタの値を１増加（インクリメント）する（ステップＳ２１０２）。また、ＥＣＵ２１００ａは、ステップＳ２１０１において、送信するデータフレームが、データフレーム生成ルールにおける送信周期に従う周期的なデータフレームであると判断した場合（イベントドリブンデータフレームでないと判断した場合）には、ステップＳ２１０２での送信イベントカウンタの値の増加をスキップする。
【００８７】
ＥＣＵ２１００ａは、ステップＳ２１０２での処理を終えた場合、及び、ステップＳ２１０２での処理をスキップした場合に、データフィールドのイベントカウンタＩに送信イベントカウンタの値をセットし、データフィールドのデータ領域にはセンサ値取得部１０９から取得した最新のセンサ値をセットして、送信するデータフレームを生成し、バス２００へと送信する（ステップＳ２１０３）。これにより、バス２００上にデータフレームが流れ、ＥＣＵ２１００ｂに受信されるようになる。
【００８８】
なお、ＥＣＵ２１００ｂも図１６に示すものと同様の送信処理を実行し得る。
【００８９】
［２．５  ＥＣＵ２１００ｂにおけるデータフレームの受信処理］
以下、ＥＣＵ２１００ａがデータフレームをバス２００に送信し、ＥＣＵ２１００ｂがデータフレームをバス２００から受信する例を想定して、ＥＣＵ２１００ｂにおけるデータフレームの受信処理を説明する。
【００９０】
図１７は、ＥＣＵ２１００ｂにおけるデータフレームの受信処理を示すフローチャートである。
【００９１】
ＥＣＵ２１００ｂは、バス２００上に現れるデータフレームを受信する（ステップＳ２２０１）。なお、ＥＣＵ２１００ｂは、自機が受信すべきメッセージＩＤを含まないデータフレームであればそのデータフレームを破棄して処理を終了する。自機が受信すべきメッセージＩＤを含むデータフレームを受信した場合に、ＥＣＵ２１００ｂは、その受信が、保持している周期ルール情報で規定された送信周期範囲内か否かを判断する（ステップＳ２２０２）。なお、ＥＣＵ２１００ｂの不正データフレーム判断部２１０４は、受信したデータフレームの受信間隔（つまり送信周期）が規定の送信周期の範囲内であるか否か（つまり周期ルール情報で定められた送信周期の条件を満たすか否か）を、タイマ１０８、受信データフレーム周期保持部１０５及びデータフレーム受信履歴保持部１０６から得られる情報に基づいて判断する。即ち、不正データフレーム判断部２１０４は、前回受信時刻と今回受信したデータフレームの受信時刻の差分（受信間隔）が、受信したデータフレームのメッセージＩＤに対応して定められた送信周期からマージンを引いた値以上であり、かつ、その送信周期にマージンを加えた値以下であるか否かを判断する。
【００９２】
ステップＳ２２０２において、データフレームの受信間隔が送信周期の範囲内である場合には、送信周期の条件が満たされたことになり、ＥＣＵ２１００ｂは、データフレーム受信履歴保持部２１０６が保持するリストに、受信したデータフレームのメッセージＩＤに対応付けて、前回受信時刻として、そのデータフレームの受信時刻を記録（つまり前回受信時刻を更新）する（ステップＳ２２０４）。そして、ステップＳ２２０４での処理に続いて、ＥＣＵ２１００ｂの不正データフレーム判断部２１０４により、受信したデータフレームが正当なデータフレームであると判断され（ステップＳ２２０６）、データフレーム処理部１０７によりそのデータフレームに対応した処理がなされる。
【００９３】
また、ステップＳ２２０２において、データフレームの前回受信時刻と今回受信時刻の差分が送信周期の範囲内でない場合には、ＥＣＵ２１００ｂは、データフレームのデータフィールドのイベントカウンタＩが、データフレーム受信履歴保持部２１０６に格納された受信イベントカウンタの値を１増加させた値と一致するか否かを判定する（ステップＳ２２０３）。一致する場合には、ＥＣＵ２１００ｂでは受信イベントカウンタの値を１増加（インクリメント）させる（ステップＳ２２０５）。続いてＥＣＵ２１００ｂの不正データフレーム判断部２１０４は、受信したデータフレームが正当なデータフレームであると判断し（ステップＳ２２０６）、データフレーム処理部１０７によりそのデータフレームに対応した処理がなされる。
【００９４】
ステップＳ２２０３において一致しないと判定した場合には、ＥＣＵ２１００ｂは、受信したデータフレームが不正なデータフレームであると判断してデータフレームを破棄する（ステップＳ２２０７）。従って、ＥＣＵ２１００ｂは、不正なＥＣＵにより送信された不正なデータフレームを処理しない。
【００９５】
なお、ステップＳ２２０２において、データフレームの受信間隔（つまり送信周期）が規定の送信周期の範囲内か否かを判断するに際して、初回等といった前回受信時刻が保存されていない場合においては、受信したデータフレームをイベントドリブンデータフレームと扱い、イベントカウンタが正しいときに受信イベントカウンタを１増加した後にそのデータフレームの受信時刻を前回受信時刻として記録してからステップＳ２２０６の処理を行うことができる。この場合、送信側のＥＣＵでは初回等の周期的な送信の起点においてはイベントドリブンデータフレームを送信する。また、各ＥＣＵが例えばスリープ状態等に入ってデータフレームの周期的な送信を休止する期間がある場合には、その後の周期的な送信の再開時にデータフレームをイベントドリブンデータフレームとして送信することとしても良い。この場合には、受信側のＥＣＵでは前回受信時刻から一定時間以上の間、送信側のＥＣＵがスリープ状態に入って周期的な送信が途切れた場合に、前回受信時刻を無効にして次回を初回と扱い、受信したデータフレームをイベントドリブンデータフレームと扱い、その正当性を判断することができる。
【００９６】
また、ＥＣＵ２１００ａも図１７に示すものと同様の受信処理を実行し得る。
【００９７】
［２．６  実施の形態２の効果］
実施の形態２では、周期的に送信されるデータフレームに加えて、非周期的に送信されるイベントドリブンデータフレームが存在する場合でも、イベントドリブンデータフレーム内に特定識別子（つまりイベントカウンタ）を含めることによって、正当なデータフレームか否かを区別可能にする車載ネットワークシステム１１を示した。即ち、車載ネットワークシステム１１では、送信周期の条件により正当なデータフレームであるか否かを判別し、送信周期の条件によっては判別ができない場合に限って特定識別子により正当なデータフレームであるか否かを判別するようにしている。イベントカウンタは、固定値ではないため、不正なＥＣＵがイベントカウンタと同じ値をデータフレームに付与し難い。不正なＥＣＵがデータフレームを送信する場合には、送信周期の条件を満たさない可能性が高く、正しくイベントカウンタをセットすることは容易ではないため、このデータフレームを受信したＥＣＵによって不正なデータフレームであると判断されるようになる。なお、イベントドリブンデータフレームではないデータフレーム（つまり周期的に送信されるデータフレーム）においては、データフィールドにイベントカウンタＩを含めずにデータフィールドに、ＥＣＵが機器等から取得したセンサ値を示すデータだけを含ませることとしても良い。このようにすれば、正規のＥＣＵが周期的に送信するデータフレームには、特定識別子を設ける必要がないため例えばデータフィールドを最大限に有効活用できる。
【００９８】
（実施の形態３）
以下、本開示の別の実施の形態として、データフレームを送受信するＥＣＵ３１００ａとＥＣＵ３１００ｂとの間で、周期的に送信されるデータフレームに加えて非周期的なイベントドリブンデータフレームが送信され得る前提の下で、不正なデータフレームが送信されたことを適切に検知するための不正検知方法を実現する車載ネットワークシステム１２について図面を用いて説明する。
【００９９】
［３．１  車載ネットワークシステム１２の全体構成］
図１８は、実施の形態３に係る車載ネットワークシステム１２の全体構成を示す図である。車載ネットワークシステム１２は、実施の形態１で示した車載ネットワークシステム１０の一部を変形したものであり、制御装置、センサ等の各種機器が搭載された自動車におけるネットワーク通信システムである。車載ネットワークシステム１２は、各種機器に接続されたＥＣＵ３１００ａ、３１００ｂ、及び、各ＥＣＵをつなぐバス２００を含んで構成される。車載ネットワークシステム１２の構成要素のうち、実施の形態１で示した車載ネットワークシステム１０と同様の機能を有する構成要素は、同じ符号を付して説明を省略する。ＥＣＵは、例えば、プロセッサ（マイクロプロセッサ）、メモリ等のデジタル回路、アナログ回路、通信回路等を含む装置である。以下、バス２００には不正なデータフレームを送信する不正なＥＣＵが接続されている可能性があることを前提として説明する。
【０１００】
ＥＣＵ３１００ａは、実施の形態１で示したＥＣＵ１００ａの一部を変形したものであり、パワーウィンドウスイッチ１１０に接続されている。ＥＣＵ３１００ａは、パワーウィンドウスイッチ１１０の状態を示す情報を含むデータフレームを周期的にバス２００に送信する。さらにパワーウィンドウスイッチ１１０の状態が変化した時にもパワーウィンドウスイッチ１１０の状態を示す情報（つまりセンサ値を示す情報）を含むデータフレームをバス２００に送信する。従って、ＥＣＵ３１００ａは、一定の送信周期でデータフレームの送信を繰り返す他に、パワーウィンドウスイッチ１１０の状態の変化時がその送信周期と一致しないときに非周期的なイベントドリブンデータフレームをバス２００に送信することになる。またＥＣＵ３１００ａは、ＥＣＵ３１００ｂからバス２００上に送信されてバス２００に流れるデータフレームを受信し、例えばＥＣＵ３１００ａが送信したデータフレームが正しく受信されていること等を確認する。
【０１０１】
ＥＣＵ３１００ｂは、実施の形態１で示したＥＣＵ１００ｂの一部を変形したものであり、パワーウィンドウ１２０に接続されている。ＥＣＵ３１００ｂは、ＥＣＵ３１００ａから送信されバス２００に流れているデータフレームを受信し、そのデータフレームに含まれるパワーウィンドウスイッチ１１０の状態に応じて、パワーウィンドウ１２０の開閉の制御を行う。またパワーウィンドウ１２０の開閉の制御状態に応じたデータフレームを周期的にバス２００に送信する。この車載ネットワークシステム１２においてはＣＡＮプロトコルに従って各ＥＣＵがフレームの授受を行う。各ＥＣＵは、受信したデータフレームが不正なデータフレームであるか否かを判断する機能を有している。
【０１０２】
［３．２  データフィールドフォーマット］
以下、車載ネットワークシステム１２で用いられるデータフレームにおけるデータフィールドについて説明する。
【０１０３】
図１９は、車載ネットワークシステム１２で用いられるデータフィールドフォーマットの一例を示す図である。同図の例は、イベントドリブンデータフレームの場合の一例であり、データフィールドの下位１６ビット「Ｉ」（後尾の１６ビット）は、メッセージ認証コード（ＭＡＣ：Message Authentication Code）を格納するＭＡＣフィールドＩである。イベントドリブンデータフレームについてのデータフィールドにＭＡＣフィールドＩを含むか否か、並びに、ＭＡＣフィールドＩを含む場合にはＭＡＣフィールドＩの位置及び長さについて、データフレーム生成ルール保持部３１０３に格納されているデータフレーム生成ルール内のイベントドリブンデータフレームフォーマット（後述）で規定される。イベントドリブンデータフレームを生成して送信する場合には、ＭＡＣフィールドＩにデータフレーム生成ルール保持部３１０３に格納されているイベントドリブンデータフレームフォーマットに従ってＭＡＣをセットする。ＭＡＣは、イベントドリブンデータフレームが正当であることを識別する特定識別子として機能する。周期的なデータフレームを生成して送信する場合には、データフィールド内にＭＡＣを格納する必要はなく、ＭＡＣの代わりに固定値を含めても良いが、特にＭＡＣ及びその代替データを含まずデータフィールド全域をデータ領域として活用して良い。ここでは、周期的なデータフレームにはＭＡＣは格納されず、イベントドリブンデータフレームにはＭＡＣが格納されることとして説明を続ける。データフィールドのＭＡＣフィールドＩ以外の領域であるデータ領域（図１９参照）には、ＥＣＵが機器等から取得したセンサ値を示すデータ（ＥＣＵ３１００ａが送信するデータフレームにおいては例えばパワーウィンドウスイッチ１１０の状態を示す値等）が含まれる。図１９の例では下位１６ビットをＭＡＣフィールドＩとしているが、イベントドリブンデータフレームフォーマットで規定すれば、上位ビット等、任意の箇所にＭＡＣフィールドを含めても良い。また、ＭＡＣのサイズを１６ビット以外にしても良い。
【０１０４】
［３．３  ＥＣＵ３１００ａの構成］
図２０は、ＥＣＵ３１００ａの構成図である。ＥＣＵ３１００ａは、データフレーム送受信部１０１と、データフレーム生成部３１０２と、データフレーム生成ルール保持部３１０３と、不正データフレーム判断部３１０４と、受信データフレーム周期保持部３１０５と、データフレーム受信履歴保持部１０６と、データフレーム処理部１０７と、タイマ１０８と、センサ値取得部１０９と、ＭＡＣ生成部３１１０と、ＭＡＣ鍵保持部３１１１と、カウンタ保持部３１１２とを含んで構成される。ＥＣＵ３１００ａの構成要素のうち、実施の形態１で示したＥＣＵ１００ａと同様の機能を有する構成要素は、同じ符号を付して説明を省略する。これらの各構成要素は、機能的な構成要素であり、その各機能は、ＥＣＵ３１００ａにおける通信回路、メモリに格納された制御プログラムを実行するプロセッサ或いはデジタル回路等により実現される。なお、ＥＣＵ３１００ｂもＥＣＵ３１００ａと基本的に同様の構成を備える。但し、データフレーム生成ルール保持部３１０３、受信データフレーム周期保持部３１０５及びデータフレーム受信履歴保持部１０６の各保持内容はＥＣＵ毎に異なる内容となり得る。また、データフレーム処理部１０７の処理内容は、ＥＣＵ毎に異なる。
【０１０５】
データフレーム生成部３１０２は、データフレーム生成ルール保持部３１０３に格納されたデータフレーム生成ルールに従い、データフレームを生成し、データフレーム送受信部１０１に送信する。データフレーム生成部３１０２は、タイマ１０８から現在時刻を取得する。更にデータフレーム生成部３１０２は、ＥＣＵ３１００ａに接続された機器（パワーウィンドウスイッチ１１０）に関するデータ（センサ値）をセンサ値取得部１０９から取得する。ＥＣＵ３１００ａからデータフレームを周期的に送信すべく、データフレーム生成部３１０２は、現在時刻とデータフレーム生成ルール保持部３１０３に格納される送信周期とによって、データフレームを生成するタイミングを決定し、データフレームの生成を周期的に行う。なお、データフレーム生成部３１０２によりデータフレームが生成されると、そのデータフレームはデータフレーム送受信部１０１に通知され、データフレーム送受信部１０１はそのデータフレームの送信を行う。更に、データフレーム生成部３１０２は、センサ値取得部１０９から取得されるセンサ値に変化があった時が、周期的なタイミングとは異なる時である場合には、イベントドリブンデータフレームの生成を行う。イベントドリブンデータフレームを生成する際には、データフレーム生成部３１０２は、データフレーム生成ルール保持部３１０３に格納されているメッセージＩＤ毎のデータフレーム生成ルールのイベントドリブンデータフレームフォーマットに従ってＭＡＣをデータフレームに含める。このＭＡＣは、ＭＡＣ生成部３１１０に、生成するデータフレームのメッセージＩＤ及びデータフィールドのデータ領域に格納するデータ（センサ値）を通知することによってＭＡＣ生成部３１１０から得られる値を、イベントドリブンデータフレームフォーマットで規定されるデータ長（ビット長）となるように切り捨てたものである。データフレーム生成部３１０２によるデータフレームの生成の結果として、データフレーム送受信部１０１によりＥＣＵ３１００ａからバス２００に、周期的にデータフレームが送信され、更に、非周期的にイベントドリブンデータフレームが送信される。データフレーム生成部３１０２も実施の形態１で示したデータフレーム生成部１０２と同様に、送信周期を示すデータフレーム生成ルールに適合しないタイミングでデータフレームの送信をする際においてデータフレーム中にＭＡＣという特定識別子を付与したデータフレームを生成する付与部としての機能を有する。
【０１０６】
データフレーム生成ルール保持部３１０３は、メモリ等の記憶媒体で実現され、データフレーム生成ルールとしてＥＣＵ３１００ａが送信するメッセージＩＤ毎に周期的にデータフレームを送信するための送信周期と、ＭＡＣの格納位置、データ長等を示すイベントドリブンデータフレームフォーマットとを格納している。図２１は、データフレーム生成ルール保持部３１０３に格納されたデータフレーム生成ルールの一例を示している。ここでは、ＥＣＵ３１００ａは、パワーウィンドウスイッチ１１０の状態を示すデータフレーム等、複数種類のデータフレーム（種類毎にメッセージＩＤで識別されるデータフレーム）を送信するものとする。図２１の例では、ＥＣＵ３１００ａから周期的に送信されるメッセージＩＤが０ｘ１００のデータフレームについては、送信周期が５０ｍｓであり、この送信周期に従わずイベントドリブンデータフレームとして送信する場合にはデータフィールドの下位１６ビットにＭＡＣを格納する必要があることを示している。また、メッセージＩＤが０ｘ２００のデータフレームについては、送信周期が１００ｍｓであり、メッセージＩＤが０ｘ２００のイベントドリブンデータフレームは送信されないことを示している。また、ＥＣＵ３１００ａから周期的に送信されるメッセージＩＤが０ｘ３００のデータフレームについては、送信周期が７０ｍｓであり、この送信周期に従わずイベントドリブンデータフレームとして送信する場合にはデータフィールドの下位１６ビットにＭＡＣを格納する必要があることを示している。
【０１０７】
不正データフレーム判断部３１０４は、受信したデータフレームが正当なデータフレームであるか（不正なデータフレームでないか）否かについて判断する。即ち、不正データフレーム判断部３１０４は、受信データフレーム周期保持部３１０５の周期ルール情報を参照して、メッセージＩＤ毎に予め定められた送信周期の条件を満たすか否かを確認し、送信周期の条件を満たす場合には正規のＥＣＵから送信されたデータフレーム（正当なデータフレーム）であると判断する。また、送信周期の条件を満たさないデータフレームであっても、データフィールドに正当なＭＡＣが含まれていることが検証された場合には、正当なデータフレームであると判断される。ＭＡＣの検証は、データフレームのメッセージＩＤ及びデータフィールドのデータ領域の内容をＭＡＣ生成部３１１０に通知することによってＭＡＣ生成部３１１０から得られる値と、データフィールド内のＭＡＣフィールドＩの内容とが、一致するか否かを判別することで行われ、一致した場合に検証に成功する。即ち、不正データフレーム判断部３１０４は、実施の形態１で示した不正データフレーム判断部１０４と同様に、送信周期を示すデータフレーム生成ルールに呼応した周期ルール情報に適合しないデータフレームがデータフレーム送受信部１０１により受信された場合に、そのデータフレーム中のＭＡＣという特定識別子を検証する検証部としての機能を有する。不正データフレーム判断部３１０４は、受信したデータフレームが予め定められた送信周期の条件を満たさず、かつ、ＭＡＣの検証により正当なイベントドリブンデータフレームであると判定されない場合には、受信したデータフレームを不正なデータフレームであると判断する。不正データフレーム判断部２１０４は、正当なデータフレームであると判断した場合には、データフレーム処理部１０７にそのデータフレームの処理を行わせ、不正なデータフレームであると判断した場合には、そのデータフレームを破棄する（つまりそのデータフレームについてデータフレーム処理部１０７に処理させない）。また、不正データフレーム判断部３１０４は、送信周期の条件を満たすデータフレームを受信した場合に、受信時刻をデータフレーム受信履歴保持部１０６に前回受信時刻として記録する。
【０１０８】
受信データフレーム周期保持部３１０５は、メモリ等の記憶媒体で実現され、周期ルール情報を保持する。この周期ルール情報は、自機（ＥＣＵ３１００ａ）が受信するデータフレームのメッセージＩＤ毎に、予め定められた送信周期と、データフレームの受信間隔について、送信周期の条件が満たされる（つまり正当な送信周期に合致する）と判断されるための許容範囲を示すマージンとを対応付けた情報である。周期ルール情報には、更に、送信周期の条件を満たさないイベントドリブンデータフレームのデータフィールド内に格納されるＭＡＣの格納位置、データ長等を示すイベントドリブンデータフレームフォーマットが含まれる。このイベントドリブンデータフレームフォーマットは、不正データフレーム判断部３１０４が、イベントドリブンデータフレームについての正当性を検証（つまりＭＡＣを検証）する際に用いられる。なお、データフレームの受信側のＥＣＵの受信データフレーム周期保持部３１０５に保持される周期ルール情報における送信周期は、そのデータフレームの送信側のＥＣＵのデータフレーム生成ルール保持部３１０３に保持されるデータフレーム生成ルールにおける送信周期に呼応する。また、データフレームの受信側のＥＣＵの受信データフレーム周期保持部３１０５に保持される周期ルール情報におけるイベントドリブンデータフレームフォーマットは、そのデータフレームの送信側のＥＣＵのデータフレーム生成ルール保持部３１０３に保持されるデータフレーム生成ルールにおけるイベントドリブンデータフレームフォーマットに呼応する。図２２は、ＥＣＵ３１００ａから送信されたデータフレームを受信するＥＣＵ３１００ｂにおける受信データフレーム周期保持部３１０５に格納された周期ルール情報の一例を示す図である。同図の例では、メッセージＩＤが０ｘ１００のデータフレームの送信周期が５０ｍｓ、メッセージＩＤが０ｘ２００のデータフレームの送信周期が１００ｍｓ、メッセージＩＤが０ｘ３００のデータフレームの送信周期が７０ｍｓであることを示している。同図の例では、マージンは、どのメッセージＩＤについても１ｍｓである。このマージンが１ｍｓであるため、メッセージＩＤが０ｘ１００のデータフレームについて送信周期が４９ｍｓ以上５１ｍｓ以下の範囲であれば、ＥＣＵ３１００ｂにおける不正データフレーム判断部３１０４は、送信周期の条件が満たされると判断することになる。また、図２２の例でのイベントドリブンデータフレームフォーマットについては、メッセージＩＤが０ｘ１００及び０ｘ３００のイベントドリブンデータフレームは、データフィールドの下位１６ビットにＭＡＣが付与されていることを示しており、メッセージＩＤが０ｘ２００のイベントドリブンデータフレームは送信されないことを示している。
【０１０９】
ＭＡＣ生成部３１１０は、不正データフレーム判断部３１０４或いはデータフレーム生成部３１０２から通知されたデータフレームの内容（メッセージＩＤ及びデータフィールドのデータ領域のデータ）に基づいて、ＭＡＣを生成してＭＡＣの値を通知元に与える。即ち、ＭＡＣ生成部３１１０は、通知されたメッセージＩＤと、データフィールドのデータ領域のデータ値と、カウンタ保持部３１１２に格納されている、通知されたメッセージＩＤに対応するカウンタ値とを連結したものに対して、ＭＡＣ鍵保持部３１１１に格納されている通知されたメッセージＩＤに対応するＭＡＣ鍵を用いてＨＭＡＣ（非特許文献４）の演算を行うことによりＭＡＣを生成して、通知元にＭＡＣの値を返す。
【０１１０】
ＭＡＣ鍵保持部３１１１は、メモリ等の記憶媒体で実現され、自機（ＥＣＵ３１００ａ）が送信するデータフレームのメッセージＩＤ毎にＭＡＣ生成に用いられる暗号鍵を格納しており、更に、自機（ＥＣＵ３１００ａ）が受信するデータフレームのメッセージＩＤ毎にＭＡＣ生成に用いられる暗号鍵を格納している。
【０１１１】
カウンタ保持部３１１２は、メモリ等の記憶媒体を含んで実現され、自機（ＥＣＵ３１００ａ）が送信するデータフレームのメッセージＩＤ毎に対応して送信カウンタと、自機（ＥＣＵ３１００ａ）が受信するデータフレームのメッセージＩＤ毎に対応して受信カウンタとを保持する。データフレーム生成部３１０２からの通知を受けてＭＡＣ生成部３１１０にＭＡＣが生成される度に、対応するメッセージＩＤの送信カウンタが１増加（インクリメント）される。また、不正データフレーム判断部３１０４が、受信したデータフレームが不正でないと判断し、データフレーム処理部１０７にそのデータフレームが通知される都度、対応するメッセージＩＤの受信カウンタが１増加（インクリメント）される。これにより、メッセージＩＤ毎のイベントドリブンデータフレームの送信側のＥＣＵが保持する送信カウンタと受信側のＥＣＵが保持する受信カウンタとが同じ値となるよう同期する。ＭＡＣ生成部３１１０は、データフレームの送信のためのＭＡＣの生成の際には送信カウンタを用いてＭＡＣを生成し、受信したデータフレームの検証のためのＭＡＣの生成の際には受信カウンタを用いてＭＡＣを生成する。
【０１１２】
［３．４  ＥＣＵ３１００ａにおけるデータフレームの送信処理］
以下、ＥＣＵ３１００ａがデータフレームをバス２００に送信し、ＥＣＵ３１００ｂがデータフレームをバス２００から受信する例を想定して、ＥＣＵ３１００ａにおけるデータフレームの送信処理を説明する。
【０１１３】
図２３は、ＥＣＵ３１００ａにおけるデータフレームの送信処理を示すフローチャートである。
【０１１４】
ＥＣＵ３１００ａは、データフレーム生成ルールにおける送信周期に従った送信タイミング（前回の送信から送信周期が経過したタイミング）、或いは、センサ値取得部１０９からのセンサ値が変化したタイミングで、データフレームの生成が必要となり、図２３の送信処理を開始する。送信処理においては、まず、ＥＣＵ３１００ａは、送信するデータフレームがイベントドリブンデータフレームか周期的なデータフレームかを判断する（ステップＳ３１０１）。
【０１１５】
ＥＣＵ３１００ａは、ステップＳ３１０１において、送信するデータフレームが、データフレーム生成ルールにおける送信周期に従っていないイベントドリブンデータフレームであると判断した場合には、イベントドリブンデータフレームフォーマットに従って、生成するデータフレームのデータフィールドのＭＡＣフィールドＩに、ＭＡＣを付与する（ステップＳ３１０２）。
【０１１６】
ＥＣＵ３１００ａは、ステップＳ３１０１において、送信するデータフレームが、データフレーム生成ルールにおける送信周期に従う周期的なデータフレームであると判断した場合（イベントドリブンデータフレームでないと判断した場合）には、ステップＳ３１０２での処理をスキップする。
【０１１７】
ＥＣＵ３１００ａは、ステップＳ３１０２の後、或いはステップＳ３１０２での処理をスキップした後に、データフィールドのデータ領域にセンサ値取得部１０９から取得した最新のセンサ値をセットして、送信するデータフレームを生成し、バス２００へと送信する（ステップＳ３１０３）。これにより、バス２００上にデータフレームが流れ、ＥＣＵ３１００ｂに受信されるようになる。
【０１１８】
なお、ＥＣＵ３１００ｂも図２３に示すものと同様の送信処理を実行し得る。
【０１１９】
［３．５  ＥＣＵ３１００ｂにおけるデータフレームの受信処理］
以下、ＥＣＵ３１００ａがデータフレームをバス２００に送信し、ＥＣＵ３１００ｂがデータフレームをバス２００から受信する例を想定して、ＥＣＵ３１００ｂにおけるデータフレームの受信処理を説明する。
【０１２０】
図２４は、ＥＣＵ３１００ｂにおけるデータフレームの受信処理を示すフローチャートである。
【０１２１】
ＥＣＵ３１００ｂは、バス２００上に現れるデータフレームを受信する（ステップＳ３２０１）。なお、ＥＣＵ３１００ｂは、自機が受信すべきメッセージＩＤを含まないデータフレームであればそのデータフレームを破棄して処理を終了する。自機が受信すべきメッセージＩＤを含むデータフレームを受信した場合に、ＥＣＵ３１００ｂは、その受信が、保持している周期ルール情報で規定された送信周期範囲内か否かを判断する（ステップＳ３２０２）。なお、ＥＣＵ３１００ｂの不正データフレーム判断部３１０４は、受信したデータフレームの受信間隔（つまり送信周期）が規定の送信周期の範囲内であるか否か（つまり周期ルール情報で定められた送信周期の条件を満たすか否か）を、タイマ１０８、受信データフレーム周期保持部３１０５及びデータフレーム受信履歴保持部１０６から得られる情報に基づいて判断する。即ち、不正データフレーム判断部３１０４は、前回受信時刻と今回受信したデータフレームの受信時刻の差分（受信間隔）が、受信したデータフレームのメッセージＩＤに対応して定められた送信周期からマージンを引いた値以上であり、かつ、その送信周期にマージンを加えた値以下であるか否かを判断する。
【０１２２】
ステップＳ３２０２において、データフレームの受信間隔が送信周期の範囲内である場合には、送信周期の条件が満たされたことになり、ＥＣＵ３１００ｂは、データフレーム受信履歴保持部１０６が保持するリストに、受信したデータフレームのメッセージＩＤに対応付けて、前回受信時刻として、そのデータフレームの受信時刻を記録（つまり前回受信時刻を更新）する（ステップＳ３２０４）。そして、ステップＳ３２０４での処理に続いて、ＥＣＵ３１００ｂの不正データフレーム判断部３１０４により、受信したデータフレームが正当なデータフレームであると判断され（ステップＳ３２０５）、データフレーム処理部１０７によりそのデータフレームに対応した処理がなされる。
【０１２３】
また、ステップＳ３２０２において、データフレームの前回受信時刻と今回受信時刻の差分が送信周期の範囲内でない場合には、ＥＣＵ３１００ｂは、受信データフレーム周期保持部３１０５に格納されているイベントドリブンデータフレームフォーマットに従ってデータフレームのデータフィールドをＭＡＣフィールドＩとデータ領域とに分けて、データ領域及びメッセージＩＤから算出されるＭＡＣと、ＭＡＣフィールドに含まれるＭＡＣとを比較することで、データフレームの正当性（ＭＡＣが正しいこと）を検証する（ステップＳ３２０３）。算出されるＭＡＣとＭＡＣフィールドに含まれるＭＡＣとが一致すればＭＡＣの検証（つまりＭＡＣの正当性の検証）に成功し、受信したデータフレームが正当なデータフレームであると判断され（ステップＳ３２０５）、データフレーム処理部１０７によりそのデータフレームに対応した処理がなされる。
【０１２４】
ステップＳ３２０３において、算出されるＭＡＣとＭＡＣフィールドに含まれるＭＡＣとが一致しない場合（ＭＡＣの検証に成功しない場合）には、ＥＣＵ３１００ｂは、受信したデータフレームが不正なデータフレームであると判断してデータフレームを破棄する（ステップＳ３２０６）。従って、ＥＣＵ３１００ｂは、不正なＥＣＵにより送信された不正なデータフレームを処理しない。
【０１２５】
なお、ステップＳ３２０２において、データフレームの受信間隔（つまり送信周期）が規定の送信周期の範囲内か否かを判断するに際して、初回等といった前回受信時刻が保存されていない場合においては、受信したデータフレームをイベントドリブンデータフレームと扱い、ＭＡＣの検証に成功したときにそのデータフレームの受信時刻を前回受信時刻として記録してからステップＳ３２０５の処理を行うことができる。この場合、送信側のＥＣＵでは初回等の周期的な送信の起点においては例外的にイベントドリブンデータフレームを送信する。また、各ＥＣＵが例えばスリープ状態等に入ってデータフレームの周期的な送信を休止する期間がある場合には、その後の周期的な送信の再開時にデータフレームをイベントドリブンデータフレームとして送信することとしても良い。この場合には、受信側のＥＣＵでは前回受信時刻から一定時間以上の間、送信側のＥＣＵがスリープ状態に入って周期的な送信が途切れた場合に、前回受信時刻を無効にして次回を初回と扱い、受信したデータフレームをイベントドリブンデータフレームと扱い、その正当性を判断することができる。
【０１２６】
また、ＥＣＵ３１００ａも図２４に示すものと同様の受信処理を実行し得る。
【０１２７】
［３．６  実施の形態３の効果］
実施の形態３では、周期的に送信されるデータフレームに加えて、非周期的に送信されるイベントドリブンデータフレームが存在する場合でも、イベントドリブンデータフレーム内に特定識別子としてのＭＡＣを含めることによって、正当なイベントドリブンデータフレームであることを検証可能にする車載ネットワークシステム１２を示した。即ち、車載ネットワークシステム１２では、送信周期の条件により正当なデータフレームであるか否かを判別し、送信周期の条件によっては判別ができない場合に限って特定識別子により正当なデータフレームであるか否かを判別（つまり検証）するようにしている。これにより、送信周期の条件を満たさない正当なイベントドリブンデータフレームが不正なものとして誤検知されることが防止される。また、不正なＥＣＵがデータフレームを送信する場合には、送信周期の条件を満たさない可能性が高く、正しくＭＡＣを付与できないため、このデータフレームを受信したＥＣＵによって不正なデータフレームであると判断されるようになる。なお、イベントドリブンデータフレームではないデータフレーム（つまり周期的に送信されるデータフレーム）においては、データフィールドにＭＡＣを含める必要がないため、例えばデータフィールドを最大限に有効活用できる。
【０１２８】
（実施の形態４）
以下、本開示の別の実施の形態として、データフレームを送受信するＥＣＵ４１００ａとＥＣＵ４１００ｂとの間で、周期的に送信されるデータフレームに加えて非周期的なイベントドリブンデータフレームが送信され得る前提の下で、車両の状態を踏まえて、不正なデータフレームが送信されたことを適切に検知するための不正検知方法を実現する車載ネットワークシステム１３について図面を用いて説明する。なお、車載ネットワークシステム１３は、実施の形態１で示した車載ネットワークシステム１０及び実施の形態３で示した車載ネットワークシステム１２の一部を変形したものであり、車載ネットワークシステム１３で用いられるデータフレームにおけるデータフィールドのフォーマットは、実施の形態３で示したものと同様である。
【０１２９】
［４．１  車載ネットワークシステム１３の全体構成］
図２５は、実施の形態４に係る車載ネットワークシステム１３の全体構成を示す図である。車載ネットワークシステム１３は、制御装置、センサ等の各種機器が搭載された自動車におけるネットワーク通信システムである。車載ネットワークシステム１３は、各種機器に接続されたＥＣＵ４１００ａ〜４１００ｃ、及び、各ＥＣＵをつなぐバス２００を含んで構成される。車載ネットワークシステム１３の構成要素のうち、前述した車載ネットワークシステム１０等と同様の機能を有する構成要素は、同じ符号を付して説明を省略する。ＥＣＵは、例えば、プロセッサ（マイクロプロセッサ）、メモリ等のデジタル回路、アナログ回路、通信回路等を含む装置である。以下、バス２００には不正なデータフレームを送信する不正なＥＣＵが接続されている可能性があることを前提として説明する。
【０１３０】
ＥＣＵ４１００ｃは、ギア４１３０に接続されており、ギア４１３０の状態に応じて、車両の状態を判定し、バス２００に車両の状態を示すデータフレームを送信する。ギア４１３０から判定される車両の状態は、例えば、走行中、駐車中等の各状態である。
【０１３１】
ＥＣＵ４１００ａは、実施の形態１で示したＥＣＵ１００ａの一部を変形したものであり、パワーウィンドウスイッチ１１０に接続されている。ＥＣＵ４１００ａは、パワーウィンドウスイッチ１１０の状態を示す情報を含むデータフレームを周期的にバス２００に送信する。さらにパワーウィンドウスイッチ１１０の状態が変化した時にもパワーウィンドウスイッチ１１０の状態を示す情報（つまりセンサ値を示す情報）を含むデータフレームをバス２００に送信する。従って、ＥＣＵ４１００ａは、一定の送信周期でデータフレームの送信を繰り返す他に、パワーウィンドウスイッチ１１０の状態の変化時がその送信周期と一致しないときに非周期的なイベントドリブンデータフレームをバス２００に送信することになる。またＥＣＵ４１００ａは、ＥＣＵ４１００ｂからバス２００上に送信されてバス２００に流れるデータフレームを受信し、例えばＥＣＵ４１００ａが送信したデータフレームが正しく受信されていること等を確認する。また、ＥＣＵ４１００ａは、ＥＣＵ４１００ｃが送信した車両の状態を示すデータフレームを受信し、車両の状態を把握し得る。
【０１３２】
ＥＣＵ４１００ｂは、実施の形態１で示したＥＣＵ１００ｂの一部を変形したものであり、パワーウィンドウ１２０に接続されている。ＥＣＵ４１００ｂは、ＥＣＵ４１００ａから送信されバス２００に流れているデータフレームを受信し、そのデータフレームに含まれるパワーウィンドウスイッチ１１０の状態に応じて、パワーウィンドウ１２０の開閉の制御を行う。またパワーウィンドウ１２０の開閉の制御状態に応じたデータフレームを周期的にバス２００に送信する。また、ＥＣＵ４１００ｂは、ＥＣＵ４１００ｃが送信した車両の状態を示すデータフレームを受信し、車両の状態を把握し得る。この車載ネットワークシステム１３においてはＣＡＮプロトコルに従って各ＥＣＵがフレームの授受を行う。各ＥＣＵは、受信したデータフレームが不正なデータフレームであるか否かを判断する機能を有している。
【０１３３】
［４．２  ＥＣＵ４１００ａの構成］
図２６は、ＥＣＵ４１００ａの構成図である。ＥＣＵ４１００ａは、データフレーム送受信部１０１と、データフレーム生成部４１０２と、データフレーム生成ルール保持部４１０３と、不正データフレーム判断部４１０４と、受信データフレーム周期保持部４１０５と、データフレーム受信履歴保持部１０６と、データフレーム処理部１０７と、タイマ１０８と、センサ値取得部１０９と、ＭＡＣ生成部３１１０と、ＭＡＣ鍵保持部３１１１と、カウンタ保持部３１１２とを含んで構成される。ＥＣＵ４１００ａの構成要素のうち、実施の形態１で示したＥＣＵ１００ａ或いは実施の形態３で示したＥＣＵ３１００ａと同様の機能を有する構成要素は、同じ符号を付して説明を省略する。これらの各構成要素は、機能的な構成要素であり、その各機能は、ＥＣＵ４１００ａにおける通信回路、メモリに格納された制御プログラムを実行するプロセッサ或いはデジタル回路等により実現される。なお、ＥＣＵ４１００ｂ及びＥＣＵ４１００ｃもＥＣＵ４１００ａと基本的に同様の構成を備える。但し、データフレーム生成ルール保持部４１０３、受信データフレーム周期保持部４１０５及びデータフレーム受信履歴保持部１０６の各保持内容はＥＣＵ毎に異なる内容となり得る。また、データフレーム処理部１０７の処理内容は、ＥＣＵ毎に異なる。
【０１３４】
データフレーム生成部４１０２は、データフレーム生成ルール保持部４１０３に格納されたデータフレーム生成ルールに従い、データフレームを生成し、データフレーム送受信部１０１に送信する。データフレーム生成部４１０２は、タイマ１０８から現在時刻を取得する。更にデータフレーム生成部４１０２は、ＥＣＵ４１００ａに接続された機器（パワーウィンドウスイッチ１１０）に関するデータ（センサ値）をセンサ値取得部１０９から取得する。ＥＣＵ４１００ａからデータフレームを周期的に送信すべく、データフレーム生成部４１０２は、現在時刻とデータフレーム生成ルール保持部４１０３に格納される送信周期とによって、データフレームを生成するタイミングを決定し、データフレームの生成を周期的に行う。なお、データフレーム生成部４１０２によりデータフレームが生成されると、そのデータフレームはデータフレーム送受信部１０１に通知され、データフレーム送受信部１０１はそのデータフレームの送信を行う。更に、データフレーム生成部４１０２は、センサ値取得部１０９から取得されるセンサ値に変化があった時が、周期的なタイミングとは異なる時である場合には、イベントドリブンデータフレームの生成を行う。イベントドリブンデータフレームを生成する際には、データフレーム生成部４１０２は、データフレーム生成ルール保持部４１０３に格納されているメッセージＩＤ毎のデータフレーム生成ルールのＭＡＣ付与条件（後述）に基づいてＭＡＣをイベントドリブンデータフレームに含めるか否かを判断し、ＭＡＣを含めると判断した場合にはイベントドリブンデータフレームフォーマットに従ってＭＡＣをデータフレームに含める。ＭＡＣは、実施の形態３で説明したものと同様である。即ち、データフレーム生成部４１０２も実施の形態３で示したデータフレーム生成部３１０２と同様に、送信周期を示すデータフレーム生成ルールに適合しないタイミングでデータフレームの送信をする際においてデータフレーム中にＭＡＣという特定識別子を付与したデータフレームを生成する付与部としての機能を有する。データフレーム生成部４１０２によるデータフレームの生成の結果として、データフレーム送受信部１０１によりＥＣＵ３１００ａからバス２００に、周期的にデータフレームが送信され、更に、非周期的にイベントドリブンデータフレームが送信される。また、データフレーム生成部４１０２は、ＥＣＵ４１００ａが送信を行う初回等（例えばエンジン始動時或いはその前、スリープ状態からの復帰時等）の周期的な送信の起点においてはデータフレームをイベントドリブンデータフレームの形式にして送信する。周期的な送信の起点においてイベントドリブンデータフレームではない周期的なデータフレームとしてしまうと、受信側で送信周期の条件に係る判断ができないからである。なお、初回等においてはイベントドリブンデータフレームにＭＡＣを含めることにしても良い。
【０１３５】
データフレーム生成ルール保持部４１０３は、メモリ等の記憶媒体で実現され、データフレーム生成ルールとしてＥＣＵ４１００ａが送信するメッセージＩＤ毎に周期的にデータフレームを送信するための送信周期と、ＭＡＣの格納位置、データ長等を示すイベントドリブンデータフレームフォーマットと、イベントドリブンデータフレームにＭＡＣを付与する条件であるＭＡＣ付与条件とを格納している。ＭＡＣ付与条件は、車両の状態がどのような場合にＭＡＣを付与すべきかについて定めている。図２７は、データフレーム生成ルール保持部４１０３に格納されたデータフレーム生成ルールの一例を示している。ここでは、ＥＣＵ４１００ａは、パワーウィンドウスイッチ１１０の状態を示すデータフレーム等、複数種類のデータフレーム（種類毎にメッセージＩＤで識別されるデータフレーム）を送信するものとする。図２７の例では、ＥＣＵ４１００ａから周期的に送信されるメッセージＩＤが０ｘ１００のデータフレームについては、送信周期が５０ｍｓであり、この送信周期に従わずイベントドリブンデータフレームとして送信する場合には、車両の状態が走行中であるときに限ってＭＡＣを付与し、ＭＡＣを付与する際にはデータフィールドの下位１６ビットにＭＡＣを格納する必要があることを示している。また、メッセージＩＤが０ｘ２００のデータフレームについては、送信周期が１００ｍｓであり、メッセージＩＤが０ｘ２００のイベントドリブンデータフレームは送信されないことを示している。また、ＥＣＵ４１００ａから周期的に送信されるメッセージＩＤが０ｘ３００のデータフレームについては、送信周期が７０ｍｓであり、この送信周期に従わずイベントドリブンデータフレームとして送信する場合には、車両の状態が走行中であるとき及び駐車中であるときにＭＡＣを付与し、ＭＡＣを付与する際にはデータフィールドの下位１６ビットにＭＡＣを格納する必要があることを示している。
【０１３６】
不正データフレーム判断部４１０４は、受信したデータフレームが正当なデータフレームであるか（不正なデータフレームでないか）否かについて判断する。即ち、不正データフレーム判断部４１０４は、受信データフレーム周期保持部４１０５の周期ルール情報を参照して、メッセージＩＤ毎に予め定められた送信周期の条件を満たすか否かを確認し、送信周期の条件を満たす場合には正規のＥＣＵから送信されたデータフレーム（正当なデータフレーム）であると判断する。また、不正データフレーム判断部４１０４は、送信周期の条件を満たさないデータフレームであっても、車状態保持部４１１３に格納されている車両の状態が受信データフレーム周期保持部４１０５に格納されているＭＡＣ付与イベントドリブンデータフレーム受信条件を満たす場合には、イベントドリブンデータフレームフォーマットに従ってデータフレームにＭＡＣが含まれていることを検証することで不正なデータフレームか否かを判断する。ＭＡＣ付与イベントドリブンデータフレーム受信条件は、車両の状態がどのような場合にＭＡＣが付与されたイベントドリブンデータフレームを受信するかを示す条件である。不正データフレーム判断部４１０４は、車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たす場合においてデータフィールド内のＭＡＣの検証に成功すれば、受信したデータフレームが正当であると判断し、検証に失敗すれば、受信したデータフレームが不正なデータフレームであると判断する。即ち、不正データフレーム判断部４１０４は、実施の形態３で示した不正データフレーム判断部３１０４と同様に、送信周期を示すデータフレーム生成ルールに呼応した周期ルール情報に適合しないデータフレームがデータフレーム送受信部１０１により受信された場合に、そのデータフレーム中のＭＡＣという特定識別子を検証する検証部としての機能を有する。ＭＡＣの検証は、データフレームのメッセージＩＤ及びデータフィールドのデータ領域の内容をＭＡＣ生成部３１１０に通知することによってＭＡＣ生成部３１１０から得られる値と、データフィールド内のＭＡＣフィールドＩの内容とが、一致するか否かを判別することで行われ、一致した場合に検証に成功する。不正データフレーム判断部４１０４は、受信したデータフレームが予め定められた送信周期の条件を満たさず、かつ、車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たさない場合には、ＭＡＣの検証を行わないでイベントドリブンデータフレームを正当なデータフレームであると判断する。つまり、イベントドリブンデータフレームについて、車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たす場合にはＭＡＣを検証し、その他の場合には検証を省略している。但し、周期的な送信の初回等において送信側がイベントドリブンデータフレームにＭＡＣを含めることにする場合には、対応したＭＡＣの検証を受信側で行うと良い。なお、不正データフレーム判断部４１０４は、送信周期の条件を満たすデータフレームを受信した場合に、受信時刻をデータフレーム受信履歴保持部１０６に前回受信時刻として記録する。不正データフレーム判断部４１０４は、受信したデータフレームが正当なデータフレームであると判断した場合には、データフレーム処理部１０７にそのデータフレームの処理を行わせ、不正なデータフレームであると判断した場合には、そのデータフレームを破棄する（つまりそのデータフレームについてデータフレーム処理部１０７に処理させない）。
【０１３７】
受信データフレーム周期保持部４１０５は、メモリ等の記憶媒体で実現され、周期ルール情報を保持する。この周期ルール情報は、自機（ＥＣＵ４１００ａ）が受信するデータフレームのメッセージＩＤ毎に、予め定められた送信周期と、データフレームの受信間隔について、送信周期の条件が満たされる（つまり正当な送信周期に合致する）と判断されるための許容範囲を示すマージンとを対応付けた情報である。周期ルール情報には、更に、送信周期の条件を満たさないイベントドリブンデータフレームのデータフィールド内に格納されるＭＡＣの格納位置、データ長等を示すイベントドリブンデータフレームフォーマットとＭＡＣ付与イベントドリブンデータフレーム受信条件とが含まれる。イベントドリブンデータフレームフォーマットは、不正データフレーム判断部４１０４が、イベントドリブンデータフレームについての正当性を検証（つまりＭＡＣを検証）する際に用いられる。また、ＭＡＣ付与イベントドリブンデータフレーム受信条件は、車両の状態に係る条件であり、車両の状態がどの状態であればイベントドリブンデータフレームについてＭＡＣを検証すべきかを示す。なお、データフレームの受信側のＥＣＵの受信データフレーム周期保持部４１０５に保持される周期ルール情報における送信周期は、そのデータフレームの送信側のＥＣＵのデータフレーム生成ルール保持部４１０３に保持されるデータフレーム生成ルールにおける送信周期に呼応する。また、データフレームの受信側のＥＣＵの受信データフレーム周期保持部４１０５に保持される周期ルール情報におけるイベントドリブンデータフレームフォーマットは、そのデータフレームの送信側のＥＣＵのデータフレーム生成ルール保持部４１０３に保持されるデータフレーム生成ルールにおけるイベントドリブンデータフレームフォーマットに呼応する。また、データフレームの受信側のＥＣＵの受信データフレーム周期保持部４１０５に保持される周期ルール情報におけるＭＡＣ付与イベントドリブンデータフレーム受信条件は、そのデータフレームの送信側のＥＣＵのデータフレーム生成ルール保持部４１０３に保持されるデータフレーム生成ルールにおけるＭＡＣ付与条件に呼応する。図２８は、ＥＣＵ４１００ａから送信されたデータフレームを受信するＥＣＵ４１００ｂにおける受信データフレーム周期保持部４１０５に格納された周期ルール情報の一例を示す図である。同図の例では、メッセージＩＤが０ｘ１００のデータフレームの送信周期が５０ｍｓ、メッセージＩＤが０ｘ２００のデータフレームの送信周期が１００ｍｓ、メッセージＩＤが０ｘ３００のデータフレームの送信周期が７０ｍｓであることを示している。同図の例では、マージンは、どのメッセージＩＤについても１ｍｓである。このマージンが１ｍｓであるため、メッセージＩＤが０ｘ１００のデータフレームについて送信周期が４９ｍｓ以上５１ｍｓ以下の範囲であれば、ＥＣＵ４１００ｂにおける不正データフレーム判断部４１０４は、送信周期の条件が満たされると判断することになる。また、図２８の例でのイベントドリブンデータフレームフォーマットについては、メッセージＩＤが０ｘ１００及び０ｘ３００のイベントドリブンデータフレームは、データフィールドの下位１６ビットにＭＡＣが付与されていることを示しており、メッセージＩＤが０ｘ２００のイベントドリブンデータフレームは送信されないことを示している。また、図２８の例でのＭＡＣ付与イベントドリブンデータフレーム受信条件については、メッセージＩＤが０ｘ１００のイベントドリブンデータフレームは車両の状態が走行中であるときにＭＡＣの検証が必要であることを示し、メッセージＩＤが０ｘ２００のイベントドリブンデータフレームは送信されないのでＭＡＣの検証が不要であることを示し、メッセージＩＤが０ｘ３００のイベントドリブンデータフレームは車両の状態が走行中及び駐車中のいずれかの状態であるときにＭＡＣの検証が必要であることを示している。
【０１３８】
車状態保持部４１１３は、メモリ等の記憶媒体で実現され、車両の状態を示す値が格納される。図２９に車状態保持部４１１３に格納された車両の状態の一例を示している。この例では車両の状態が、走行中であることを示している。車状態保持部４１１３における車両の状態は、ＥＣＵ４１００ｃから送信されるデータフレーム（車両の状態を示すデータフレーム）が受信され、正当なデータフレームであると判断された場合に、データフレーム処理部１０７により、そのデータフレームの内容に応じて格納（更新）がなされる。
【０１３９】
［４．３  ＥＣＵ４１００ａにおけるデータフレームの送信処理］
以下、ＥＣＵ４１００ａがデータフレームをバス２００に送信し、ＥＣＵ４１００ｂがデータフレームをバス２００から受信する例を想定して、ＥＣＵ４１００ａにおけるデータフレームの送信処理を説明する。
【０１４０】
図３０は、ＥＣＵ４１００ａにおけるデータフレームの送信処理を示すフローチャートである。
【０１４１】
ＥＣＵ４１００ａは、データフレーム生成ルールにおける送信周期に従った送信タイミング（前回の送信から送信周期が経過したタイミング）、或いは、センサ値取得部１０９からのセンサ値が変化したタイミングで、データフレームの生成が必要となり、図３０の送信処理を開始する。送信処理においては、まず、ＥＣＵ４１００ａは、送信するデータフレームがイベントドリブンデータフレームか周期的なデータフレームかを判断する（ステップＳ４１０１）。
【０１４２】
ＥＣＵ４１００ａは、ステップＳ４１０１において送信するデータフレームがデータフレーム生成ルールにおける送信周期に従っていないイベントドリブンデータフレームであると判断した場合には、ＥＣＵ４１００ｃからのデータフレームに対応して車状態保持部４１１３に格納された車両の状態がデータフレーム生成ルールのＭＡＣ付与条件を満たすか否かを判断する（ステップＳ４１０２）。例えば、ＭＡＣ付与条件が、走行中及び駐車中のいずれかを示し、ＥＣＵ４１００ａからのデータフレームで示された車両の状態（車状態保持部４１１３の車両の状態）が走行中を示す場合には、車両の状態がＭＡＣ付与条件を満たすと判断される。
【０１４３】
ＥＣＵ４１００ａは、ステップＳ４１０２において、車両の状態がＭＡＣ付与条件を満たすと判断した場合には、データフレーム生成ルールのイベントドリブンデータフレームフォーマットに従って、生成するデータフレームのデータフィールドのＭＡＣフィールドＩに、ＭＡＣを付与する（ステップＳ４１０３）。
【０１４４】
ＥＣＵ４１００ａは、ステップＳ４１０１において、送信するデータフレームが、データフレーム生成ルールにおける送信周期に従う周期的なデータフレームであると判断した場合（イベントドリブンデータフレームでないと判断した場合）には、ステップＳ４１０２、Ｓ４１０３での処理をスキップする。また、ＥＣＵ４１００ａは、ステップＳ４１０２において、車両の状態がＭＡＣ付与条件を満たさないと判断した場合には、ステップＳ４１０３での処理をスキップする。
【０１４５】
ＥＣＵ４１００ａは、ステップＳ４１０３の後、或いはステップＳ４１０３での処理をスキップした後に、データフィールドのデータ領域にセンサ値取得部１０９から取得した最新のセンサ値をセットして、送信するデータフレームを生成し、バス２００へと送信する（ステップＳ４１０４）。これにより、バス２００上にデータフレームが流れ、ＥＣＵ４１００ｂに受信されるようになる。
【０１４６】
なお、ＥＣＵ４１００ｂも図３０に示すものと同様の送信処理を実行し得る。
【０１４７】
［４．４  ＥＣＵ４１００ｂにおけるデータフレームの受信処理］
以下、ＥＣＵ４１００ａがデータフレームをバス２００に送信し、ＥＣＵ４１００ｂがデータフレームをバス２００から受信する例を想定して、ＥＣＵ４１００ｂにおけるデータフレームの受信処理を説明する。
【０１４８】
図３１は、ＥＣＵ４１００ｂにおけるデータフレームの受信処理を示すフローチャートである。
【０１４９】
ＥＣＵ４１００ｂは、バス２００上に現れるデータフレームを受信する（ステップＳ４２０１）。なお、ＥＣＵ４１００ｂは、自機が受信すべきメッセージＩＤを含まないデータフレームであればそのデータフレームを破棄して処理を終了する。自機が受信すべきメッセージＩＤを含むデータフレームを受信した場合に、ＥＣＵ４１００ｂは、その受信が、保持している周期ルール情報で規定された送信周期範囲内か否かを判断する（ステップＳ４２０２）。なお、ＥＣＵ４１００ｂの不正データフレーム判断部４１０４は、受信したデータフレームの受信間隔（つまり送信周期）が規定の送信周期の範囲内であるか否か（つまり周期ルール情報で定められた送信周期の条件を満たすか否か）を、タイマ１０８、受信データフレーム周期保持部４１０５及びデータフレーム受信履歴保持部１０６から得られる情報に基づいて判断する。即ち、不正データフレーム判断部４１０４は、前回受信時刻と今回受信したデータフレームの受信時刻の差分（受信間隔）が、受信したデータフレームのメッセージＩＤに対応して定められた送信周期からマージンを引いた値以上であり、かつ、その送信周期にマージンを加えた値以下であるか否かを判断する。
【０１５０】
ステップＳ４２０２において、データフレームの受信間隔が送信周期の範囲内である場合には、送信周期の条件が満たされたことになり、ＥＣＵ４１００ｂは、データフレーム受信履歴保持部１０６が保持するリストに、受信したデータフレームのメッセージＩＤに対応付けて、前回受信時刻として、そのデータフレームの受信時刻を記録（つまり前回受信時刻を更新）する（ステップＳ４２０４）。そして、ステップＳ４２０４での処理に続いて、ＥＣＵ４１００ｂの不正データフレーム判断部４１０４により、受信したデータフレームが正当なデータフレームであると判断され（ステップＳ４２０６）、データフレーム処理部１０７によりそのデータフレームに対応した処理がなされる。
【０１５１】
また、ステップＳ４２０２において、データフレームの前回受信時刻と今回受信時刻の差分が送信周期の範囲内でない場合には、ＥＣＵ４１００ｂは、車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たすか否かを判断する（ステップＳ４２０３）。即ち、ＥＣＵ４１００ｂは、ＥＣＵ４１００ｃからのデータフレームに対応して車状態保持部４１１３に格納された車両の状態が、ＭＡＣ付与イベントドリブンデータフレーム受信条件を満たすか否かを判断する。
【０１５２】
ステップＳ４２０３において、車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たすと判断した場合には、ＥＣＵ４１００ｂは、受信データフレーム周期保持部４１０５に格納されているイベントドリブンデータフレームフォーマットに従ってデータフレームのデータフィールドをＭＡＣフィールドＩとデータ領域とに分けて、データ領域及びメッセージＩＤから算出されるＭＡＣと、ＭＡＣフィールドに含まれるＭＡＣとを比較することで、データフレームの正当性（ＭＡＣが正しいこと）を検証する（ステップＳ４２０５）。算出されるＭＡＣとＭＡＣフィールドに含まれるＭＡＣとが一致すればＭＡＣの検証（つまりＭＡＣの正当性の検証）に成功し、受信したデータフレームが正当なデータフレームであると判断され（ステップＳ４２０６）、データフレーム処理部１０７によりそのデータフレームに対応した処理がなされる。
【０１５３】
ステップＳ４２０５において、算出されるＭＡＣとＭＡＣフィールドに含まれるＭＡＣとが一致しない場合（ＭＡＣの検証に成功しない場合）には、ＥＣＵ４１００ｂは、受信したデータフレームが不正なデータフレームであると判断してデータフレームを破棄する（ステップＳ４２０７）。従って、ＥＣＵ４１００ｂは、不正なＥＣＵにより送信された不正なデータフレームを処理しない。
【０１５４】
また、ステップＳ４２０３において車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たさないと判断した場合には、ＥＣＵ４１００ｂは、受信したデータフレームが正当なデータフレームである判断し（ステップＳ４２０６）、データフレーム処理部１０７によりそのデータフレームに対応した処理を行う。
【０１５５】
なお、ステップＳ４２０２において、データフレームの受信間隔（つまり送信周期）が規定の送信周期の範囲内か否かを判断するに際して、初回等といった前回受信時刻が保存されていない場合においては、受信したデータフレームをイベントドリブンデータフレームと扱い、ＭＡＣの検証に成功したときにそのデータフレームの受信時刻を前回受信時刻として記録してからステップＳ４２０６の処理を行うことができる。この場合、送信側のＥＣＵでは初回等の周期的な送信の起点においては例外的にＭＡＣを付与したイベントドリブンデータフレームを送信する。また、各ＥＣＵが例えばスリープ状態等に入ってデータフレームの周期的な送信を休止する期間がある場合には、その後の周期的な送信の再開時にデータフレームをイベントドリブンデータフレームとして送信することとしても良い。この場合には、受信側のＥＣＵでは前回受信時刻から一定時間以上の間、送信側のＥＣＵがスリープ状態に入って周期的な送信が途切れた場合に、前回受信時刻を無効にして次回を初回と扱い、受信したデータフレームをイベントドリブンデータフレームと扱い、その正当性を判断することができる。
【０１５６】
また、ＥＣＵ４１００ａも図３１に示すものと同様の受信処理を実行し得る。
【０１５７】
［４．５  ＥＣＵ４１００ｃにおける車両の状態を示すデータフレームの送信処理］
以下、ＥＣＵ４１００ｃが車両の状態を取得して車両の状態を示すデータフレームをバス２００に送信する送信処理を説明する。
【０１５８】
図３２は、ＥＣＵ４１００ｃにおける車両の状態を示すデータフレームの送信処理を示すフローチャートである。同図に示す処理は、ＥＣＵ４１００ｃにより繰り返し実行される。
【０１５９】
ＥＣＵ４１００ｃは、接続されているギア４１３０の状態をセンサから取得する（ステップＳ４３０１）。
【０１６０】
ＥＣＵ４１００ｃは、取得したギア４１３０の状態が前回取得した状態から変化したか否かを判断し（ステップＳ４３０２）、ギア４１３０の状態が変化した場合には、予め定められているギア４１３０の状態（例えば、ギアポジションについてパーキング、１速、２速等）と車両の状態（走行中、駐車中等）との対応関係に基づいて、車両の状態を特定してその車両の状態をデータフィールドの内容として含ませたデータフレームを生成し、イベントドリブンデータフレームとしてバス２００へと送信する（ステップＳ４３０３）。
【０１６１】
なお、ＥＣＵ４１００ｃは、イベントドリブンデータフレームにはＭＡＣを付与して送信しても良く、この場合には、ＥＣＵ４１００ａ及びＥＣＵ４１００ｂは、バス２００から受信したイベントドリブンデータフレームのＭＡＣを検証して、検証に成功した場合に限って車両の状態を取得して車状態保持部４１１３に格納することになる。
【０１６２】
［４．６  ＥＣＵ４１００ｂにおけるデータフレームの受信処理の変形例］
上述したデータフレームの受信処理（図３１参照）においては、ステップＳ４２０３において車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たさない場合には、受信したデータフレームを正当であると判断することとしたが、車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たさない場合には、受信したデータフレームを不正なデータフレームであると判断して破棄するように変形しても良い。以下、受信処理の変形例について示す。
【０１６３】
図３３は、ＥＣＵ４１００ｂにおけるデータフレームの受信処理の変形例を示すフローチャートである。
【０１６４】
ＥＣＵ４１００ｂは、バス２００上に現れるデータフレームを受信する（ステップＳ４４０１）。ＥＣＵ４１００ｂは、自機が受信すべきメッセージＩＤを含むデータフレームを受信した場合に、その受信が、保持している周期ルール情報で規定された送信周期範囲内か否かを判断する（ステップＳ４４０２）。ステップＳ４４０２において、データフレームの受信間隔が送信周期の範囲内である場合には、ＥＣＵ４１００ｂは、データフレーム受信履歴保持部１０６が保持するリストに、受信したデータフレームのメッセージＩＤに対応付けて、前回受信時刻として、そのデータフレームの受信時刻を記録する（ステップＳ４４０４）。そして、ステップＳ４４０４での処理に続いて、ＥＣＵ４１００ｂの不正データフレーム判断部４１０４により、受信したデータフレームが正当なデータフレームであると判断され（ステップＳ４４０６）、データフレーム処理部１０７によりそのデータフレームに対応した処理がなされる。
【０１６５】
また、ステップＳ４４０２においてデータフレームの受信が規定された送信周期範囲内でないと判断した場合には、ＥＣＵ４１００ｂは、車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たすか否かを判断する（ステップＳ４４０３）。
【０１６６】
ステップＳ４４０３において、車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たすと判断した場合には、ＥＣＵ４１００ｂは、受信データフレーム周期保持部４１０５に格納されているイベントドリブンデータフレームフォーマットに基づいてデータ領域及びメッセージＩＤから算出されるＭＡＣと、ＭＡＣフィールドに含まれるＭＡＣとを比較することで、データフレームの正当性（ＭＡＣが正しいこと）を検証する（ステップＳ４４０５）。ＭＡＣが正しいことを検証した場合にはＥＣＵ４１００ｂは、受信したデータフレームを正当なデータフレームであると判断し（ステップＳ４４０６）、データフレーム処理部１０７によりそのデータフレームに対応した処理を行う。
【０１６７】
ステップＳ４４０３において車両の状態がＭＡＣ付与イベントドリブンデータフレーム受信条件を満たさないと判断した場合、及び、ステップＳ４４０５においてＭＡＣが正しいことの検証に成功しない場合には、ＥＣＵ４１００ｂは、受信したデータフレームが不正なデータフレームであると判断してデータフレームを破棄する（ステップＳ４４０７）。従って、ＥＣＵ４１００ｂは、不正なＥＣＵにより送信された不正なデータフレームを処理しない。
【０１６８】
［４．７  実施の形態４の効果］
実施の形態４では、周期的に送信されるデータフレームに加えて、非周期的に送信されるイベントドリブンデータフレームが存在する場合でも、イベントドリブンデータフレーム内に特定識別子としてのＭＡＣを含めることによって、正当なイベントドリブンデータフレームであることを検証可能にする車載ネットワークシステム１３を示した。即ち、車載ネットワークシステム１３では、送信周期の条件により正当なデータフレームであるか否かを判別し、送信周期の条件によっては判別ができない場合に限って特定識別子により正当なデータフレームであるか否かを判別（つまり検証）するようにしている。これにより、送信周期の条件を満たさない正当なイベントドリブンデータフレームが不正なものとして誤検知されることが防止される。また、不正なＥＣＵがデータフレームを送信する場合には、送信周期の条件を満たさない可能性が高く、正しくＭＡＣを付与できないため、このデータフレームを受信したＥＣＵによって不正なデータフレームであると判断されるようになる。またイベントドリブンデータフレームについても、車両の状態に応じてＭＡＣを付与及び検証するか否かを切り替えることによって、効率的に不正なデータフレームの検知が可能となる。
【０１６９】
（他の実施の形態等）
以上のように、本開示に係る技術の例示として実施の形態１〜４を説明した。しかしながら、本開示に係る技術は、これに限定されず、適宜、変更、置き換え、付加、省略等を行った実施の形態にも適用可能である。例えば、以下のような変形例も本開示の一実施態様に含まれる。
【０１７０】
（１）上記実施の形態では、イベントドリブンデータフレームを送信するＥＣＵがイベントドリブンデータフレームにイベントドリブン識別フラグ、イベントカウンタ、或いは、所定演算の結果値であるＭＡＣという特定識別子を付与し、イベントドリブンデータフレームを受信するＥＣＵで特定識別子を検証する例を示したが、特定識別子は例示した以外の形式の情報であっても良い。特定識別子の検証は、例えば、データフレームの所定位置における所定データ長のデータ値が、固定値又は所定演算により導出される値と一致するか否かを検査し、一致すれば検証に成功したと扱い、一致しなければ検証に失敗したと扱う処理手順等である。なお、上記実施の形態ではデータフレームを受信するＥＣＵが、データフレームが送信周期に係るルール（条件）に適合しないイベントドリブンデータフレームであると判断した後に特定識別子の検証を行う例を示したが、データフレーム中の特定識別子の検証を、送信周期のルールに適合するか否かの判断より前に、或いは、その判断と同時に、行っても良い。
【０１７１】
（２）上記実施の形態では、メッセージＩＤとデータ値とカウンタ値とに基づく演算によりＭＡＣを生成（計算）しているが、データフレームの一部の内容を反映して（つまり一部の内容に基づいて）ＭＡＣを生成すれば良く、データ値のみからＭＡＣを生成することとしても良い。またカウンタ値のみからＭＡＣを生成するとしても良い。データフレームを受信するＥＣＵにおけるＭＡＣの検証方式は、データフレームを送信するＥＣＵがデータフレームにＭＡＣを付与する方式に対応したものであれば良い。また、ＭＡＣを付与するデータフレームにおいてはデータフィールド内にデータ値及びＭＡＣの他に、一部又は全てのカウンタ値を含めても良い。また、上記実施の形態では、ＭＡＣ算出のアルゴリズムをＨＭＡＣとしているが、これＣＢＣ−ＭＡＣ（Cipher Block Chaining Message Authentication Code）、ＣＭＡＣ（Cipher-based MAC）であっても良い。また、ＭＡＣ計算に用いられるパディングについては、ゼロパディング、ＩＳＯ１０１２６、ＰＫＣＳ＃１、ＰＫＣＳ＃５、ＰＫＣＳ＃７、その他、ブロックのデータサイズが計算に必要となるパディングの方式であれば何でも良い。
【０１７２】
（３）上記実施の形態では、車両の状態として走行中及び駐車中という２つの状態について説明したが、停車中、高速走行中、低速走行中、バック中、エンジン停止等の各種状態を区別し、各種状態のうち、イベントドリブンデータフレームにＭＡＣを付与及び検証すべき条件としての車両の状態を定めても良い。例えば、不正なＥＣＵにより不正なデータフレームがバス上に送信された場合に不正であることを検知する必要性が比較的高いタイミングに対応するように、ＭＡＣを付与及び検証すべき条件としての車両の状態を定めること等が有用となり得る。また、車両の状態は、必ずしもギア４１３０の状態に基づいて判断する必要はなく、車両内のいずれかのＥＣＵがいずれかの機器から取得したセンサ値等を含むデータフレームを送信し、他のＥＣＵがそのデータフレームを受信することによって車両の状態を判断することとしても良い。例えば、走行スピードに関する情報等を示すデータフレームをＥＣＵ間で送受信することで、そのデータフレームを受信した各ＥＣＵがそのデータフレームに基づいて車両の状態として高速走行中であること等を判断できるようにしても良い。このため、例えば車両の状態示すデータフレームを送信するＥＣＵ４１００ｃが必ずしもギア４１３０に接続されている必要はない。受信したデータフレームに基づいて各ＥＣＵが同様に車両の状態を判断すれば、あるＥＣＵが、ＭＡＣ付与が必要な車両の状態である場合にＭＡＣを付与してデータフレームを送信すると、受信側のＥＣＵはその車両の状態に基づいてＭＡＣの検証が必要であることを認識して検証を行い得る。
【０１７３】
（４）上記実施の形態では、イベントドリブンデータフレームを識別するための特定識別子としてイベントドリブン識別フラグ、イベントカウンタ、ＭＡＣを用いる例について、それぞれ説明したが、イベントドリブン識別フラグ、イベントカウンタ及びＭＡＣの２つ以上を組み合わせて用いることとしても良い。例えば、データフレームを受信したＥＣＵが、イベントドリブン識別フラグによってイベントドリブンデータフレームであることを判断してから、ＭＡＣによってデータフレームの正当性を検証することとしても良い。なお、イベントドリブンデータフレームでないデータフレームについては特定識別子を付与しても構わないが、付与する必要はない。
【０１７４】
（５）上記実施の形態では、各ＥＣＵはデータフレームを送信することとしたが、車載ネットワークシステムは、データフレームを受信するのみでデータフレームを送信しないＥＣＵを含んでいても良い。また逆に、車載ネットワークシステムは、データフレームを送信するのみで、データフレームを受信しないＥＣＵを含んでいても良い。また、各ＥＣＵは必ずしも周期的なデータフレームの送信をしなくても良く、車載ネットワークシステムは、イベントドリブンデータフレームのみを送信するＥＣＵを含んでいても良い。
【０１７５】
（６）上記実施の形態では、ＥＣＵがパワーウィンドウスイッチ或いはパワーウィンドウに接続されている構成を例示したが、ＥＣＵは、パワーウィンドウスイッチ及びパワーウィンドウに限らず、その他の機器に接続されても良く、その機器の制御、その機器からの状態の取得等を行っても良い。
【０１７６】
（７）上記実施の形態では、ＥＣＵは不正なデータフレームを検知した場合に、データフレームを破棄することとしたが、必ずしも破棄する必要はなく、不正なデータフレームを検知した場合に例えば不正を検知したことを知らせるデータフレームを送信しても良く、また例えばその送信するデータフレームには不正なデータフレームに関する情報を含めても良い。また、不正なデータフレームを検知した場合に、例えば、ログとして記録すること、或いは、車両の動作モードをより安全性を高める状態等に変更すること等の処理を行っても良い。
【０１７７】
（８）上記実施の形態では、イベントドリブンデータフレームの送信毎、及び、受信毎に各ＥＣＵの該当の送信カウンタ或いは受信カウンタが１増加（インクリメント）されることとしたが、これらのカウンタの値に対する演算は、１増加には限定されない。これらのカウンタの値に対する演算は、データフレームの送信側と受信側で同様の計算ができ、送信カウンタと受信カウンタとが同期するような演算であれば良い。例えば、前回の演算結果を入力値として予め定められたアルゴリズムに基づいて特定された出力値を演算結果とする演算等である。即ち、ＥＣＵは、イベントドリブンデータフレームに前回送信の際に付与したカウンタ等の特定識別子（つまり前回の演算結果）に基づいて、所定の演算を行った結果として得られる値を、次に送信するイベントドリブンデータフレームに特定識別子として含ませることとしても良い。
【０１７８】
（９）上記実施の形態で示したデータフレーム生成ルール及び周期ルール情報は、一例であり、例示した値と異なる値にしても良い。また、データフレーム生成ルール或いは周期ルール情報は、各ＥＣＵの出荷時に設定されても良いし、車載ネットワークシステムが搭載される車体の出荷時に設定されても良い。また、データフレーム生成ルール或いは周期ルール情報は、外部との通信に基づいて設定されても、各種記録媒体等を用いて設定されても、ツール類等によって設定されても良い。
【０１７９】
（１０）上記実施の形態では、各ＥＣＵが不正なデータフレームを検知する機能を有する例を示したが、その機能を１台以上の特定のＥＣＵのみが有することとしても良い。例えば車載ネットワークシステムが複数のバスそれぞれに接続されたＥＣＵ群で構成されることとした場合において各バスを繋ぐゲートウェイとしてのＥＣＵにのみ不正なデータフレームを検知する機能を含ませても良い。また、例えば車載ネットワークシステムが、自動車のインパネ（インストルメントパネル）等に設けられて運転者に視認されるための情報を表示する液晶ディスプレイ（ＬＣＤ：liquid crystal display）等の表示装置、運転者の操作を受け付ける入力手段等を備える一種のＥＣＵであるヘッドユニットを含む場合において、ヘッドユニットにのみ不正なデータフレームを検知する機能を含ませても良い。また、車載ネットワークシステムが、上述の不正なデータフレームを検知する機能を有し、バスを監視して不正なデータフレームを検知した場合にその旨を示すデータフレームの送信等を行う１台以上の特定のＥＣＵを含むこととしても良い。
【０１８０】
（１１）上記実施の形態では、ＭＡＣ鍵をメッセージＩＤ毎に１つ保持している例を示したが、ＥＣＵ毎に１つ保持することとしても良い。また、全てのＥＣＵが同じＭＡＣ鍵を保持している必要はない。また、同一のバスに接続された各ＥＣＵは、共通のＭＡＣ鍵を保持していても良い。
【０１８１】
（１２）上記実施の形態では、送信カウンタ或いは受信カウンタを送信或いは受信するデータフレームのメッセージＩＤ毎に１つ保持しているが、複数のメッセージＩＤに対して１つ保持することとしても良い。また、同一のバス上を流れる全てのデータフレームに対して、同じカウンタを使用しても良い。
【０１８２】
（１３）上記の実施の形態における、不正データフレーム判断部はＣＡＮコントローラと呼ばれるハードウェア、または、ＣＡＮコントローラと接続して動作するマイコン上で動作するファームウェアに実装しても良い。また、ＭＡＣ鍵保持部、カウンタ保持部、受信データフレーム周期保持部、データフレーム受信履歴保持部は、ＣＡＮコントローラと呼ばれるハードウェアのレジスタ、または、ＣＡＮコントローラと接続して動作するマイコン上で動作するファームウェアに格納されていても良い。
【０１８３】
（１４）上記実施の形態では、ＣＡＮプロトコルにおけるデータフレームを標準ＩＤフォーマットで記述しているが、拡張ＩＤフォーマットであっても良い。拡張ＩＤフォーマットの場合には、標準ＩＤフォーマットにおけるＩＤ位置のベースＩＤと、拡張ＩＤとを合わせて２９ビットでＩＤ（メッセージＩＤ）を表すので、この２９ビットのＩＤを上述の実施の形態におけるＩＤ（メッセージＩＤ）と扱えば良い。
【０１８４】
（１５）上記実施の形態で示したＣＡＮプロトコルは、ＴＴＣＡＮ（Time-Triggered CAN)、ＣＡＮＦＤ（CAN with Flexible Data Rate）等の派生的なプロトコルをも包含する広義の意味を有するものであっても良い。
【０１８５】
（１６）上記実施の形態における各ＥＣＵは、例えば、プロセッサ、メモリ等のデジタル回路、アナログ回路、通信回路等を含む装置であることとしたが、ハードディスク装置、ディスプレイ、キーボード、マウス等の他のハードウェア構成要素を含んでいても良い。また、メモリに記憶された制御プログラムがプロセッサにより実行されてソフトウェア的に機能を実現する代わりに、専用のハードウェア（デジタル回路等）によりその機能を実現することとしても良い。
【０１８６】
（１７）上記実施の形態における各装置（ＥＣＵ等）を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Large Scale Integration：大規模集積回路）から構成されているとしても良い。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ等を含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記録されている。前記マイクロプロセッサが、前記コンピュータプログラムに従って動作することにより、システムＬＳＩは、その機能を達成する。また、上記各装置を構成する構成要素の各部は、個別に１チップ化されていても良いし、一部又はすべてを含むように１チップ化されても良い。また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、ＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現しても良い。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Field Programmable Gate Array）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュ
ラブル・プロセッサを利用しても良い。さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行っても良い。バイオ技術の適用等が可能性としてあり得る。
【０１８７】
（１８）上記各装置を構成する構成要素の一部または全部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしても良い。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭ等から構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしても良い。マイクロプロセッサが、コンピュータプログラムに従って動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしても良い。
【０１８８】
（１９）本開示の一態様としては、上記に示す不正検知方法であるとしても良い。また、この方法をコンピュータにより実現するコンピュータプログラムであるとしても良いし、前記コンピュータプログラムからなるデジタル信号であるとしても良い。また、本開示の一態様としては、前記コンピュータプログラムまたは前記デジタル信号をコンピュータで読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Blu-ray（登録商標）Disc）、半導体メモリ等に記録したものとしても良い。また、これらの記録媒体に記録されている前記デジタル信号であるとしても良い。また、本開示の一態様としては、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしても良い。また、本開示の一態様としては、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記録しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしても良い。また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしても良い。
【０１８９】
（２０）上記実施の形態及び上記変形例で示した各構成要素及び機能を任意に組み合わせることで実現される形態も本開示の範囲に含まれる。
【産業上の利用可能性】
【０１９０】
本開示は、車載ネットワークシステムにおいて不正なＥＣＵによりバス上に不正なメッセージの送信が行われたことを効率的かつ適切に検知するために利用可能である。
【符号の説明】
【０１９１】
１０，１１，１２，１３  車載ネットワークシステム
１００ａ，１００ｂ，２１００ａ，２１００ｂ，３１００ａ，３１００ｂ，４１００ａ，４１００ｂ，４１００ｃ  電子制御ユニット（ＥＣＵ）
１０１  データフレーム送受信部
１０２，２１０２，３１０２，４１０２  データフレーム生成部
１０３，２１０３，３１０３，４１０３  データフレーム生成ルール保持部
１０４，２１０４，３１０４，４１０４  不正データフレーム判断部
１０５，３１０５，４１０５  受信データフレーム周期保持部
１０６，２１０６  データフレーム受信履歴保持部
１０７  データフレーム処理部
１０８  タイマ
１０９  センサ値取得部
１１０  パワーウィンドウスイッチ
１２０  パワーウィンドウ
２００  バス
３１１０  ＭＡＣ生成部
３１１１  ＭＡＣ鍵保持部
３１１２  カウンタ保持部
４１１３  車状態保持部
４１３０  ギア
【図１】
2020096368.tif 000003
【図２】
2020096368.tif 000004
【図３】
2020096368.tif 000005
【図４】
2020096368.tif 000006
【図５】
2020096368.tif 000007
【図６】
2020096368.tif 000008
【図７】
2020096368.tif 000009
【図８】
2020096368.tif 000010
【図９】
2020096368.tif 000011
【図１０】
2020096368.tif 000012
【図１１】
2020096368.tif 000013
【図１２】
2020096368.tif 000014
【図１３】
2020096368.tif 000015
【図１４】
2020096368.tif 000016
【図１５】
2020096368.tif 000017
【図１６】
2020096368.tif 000018
【図１７】
2020096368.tif 000019
【図１８】
2020096368.tif 000020
【図１９】
2020096368.tif 000021
【図２０】
2020096368.tif 000022
【図２１】
2020096368.tif 000023
【図２２】
2020096368.tif 000024
【図２３】
2020096368.tif 000025
【図２４】
2020096368.tif 000026
【図２５】
2020096368.tif 000027
【図２６】
2020096368.tif 000028
【図２７】
2020096368.tif 000029
【図２８】
2020096368.tif 000030
【図２９】
2020096368.tif 000031
【図３０】
2020096368.tif 000032
【図３１】
2020096368.tif 000033
【図３２】
2020096368.tif 000034
【図３３】
2020096368.tif 000035