本発明の実施の形態は、車両内に搭載される複数のECU(Electronic Control Unit)がノードとして接続された車載ネットワークであって、メッセージIDとデータとMACが含まれるメッセージがブロードキャストされるものに関する。以下、このようなネットワークとしてのCANシステムを例示して本発明の実施の形態を説明する。上述のように、CANはバス型ネットワークを採用しており、バスに接続される各ECUからのメッセージは、バスに接続される全てのECUにブロードキャストされる。近年、車両の電装化が進み一台の車両に搭載されるECUの数やECUが扱うデータ量が増えており、CANバスのトラフィック量が増えている。またECUの増加および高度化に伴い、バッテリの消費電力が増えている。
図1は、CANで使用されるデータフレームのフォーマットの一例を示す図である。図1のデータフレームは、SOF、IDフィールド、RTR、IDE、r0、DLC、データフィールド、CRCデリミタ、Ack、Ackデリミタ、及びEOFを含む。各ボックス内の数字はビット数を示す。またボックスの上が開放されている項目は常に「0」をとる項目であり、ボックスの下が開放されている項目は常に「1」をとる項目である。上下が開放されていない項目は「0」と「1」の両方をとりうる項目である。
本実施の形態では主に、IDフィールドF1とデータフィールドF2に注目する。IDフィールドF1に格納されるID(以下適宜、CANIDともいう)は、メッセージの種類および優先度を表す識別情報である。本明細書では、送信可能な状態のデータフレームをメッセージと呼ぶ。CANにおけるメッセージは、車両内の特定の機能に関するメッセージである。当該機能には、特定の監視対象を監視する監視機能および特定の制御対象を制御する制御機能が含まれる。例えば車両内の特定の機能に関するメッセージとして、速度情報を含むメッセージ、ドアの開閉を指示するメッセージ等がある。
CANIDは、送信されるメッセージに含まれる情報に関連づけられており、メッセージを受信したECUでは、そのCANIDに基づいてメッセージに含まれる情報を判断する。データフィールドF2には最大64ビットのデータを格納できる。
図1に示すようにCANのデータフレームには、送信先IDおよび受信先IDが含まれない。従って受信側ECUは、正しい通信相手から来たメッセージであるか否か判断できない。例えば、エンジン回転数を含むメッセージはエンジンECUから送信される。当該メッセージに付与されるCANIDと同じCANIDが付与されたメッセージが、不正ECUから送信されると、受信側ECUは正当なエンジンECUからのメッセージか不正ECUからのメッセージであるか判別できない。
このようにCANプロトコルでは、なりすましが容易である。またメッセージがCANバスに対してブロードキャスト送信されるため、ユニキャスト送信よりも盗聴が容易である。
これらの脅威に対して本実施の形態では、MACを用いることでCANメッセージを認証する。MACは、認証対象のデータと共通鍵とに所定のMACアルゴリズムを適用して生成される。共通鍵は、CANに接続されたECU間で事前に共有される秘密の鍵である。MAC生成アルゴリズムには、ハッシュ関数を使う方式(HMAC)や、ブロック暗号アルゴリズムを使う方式(OMAC/CMAC、CBC−MAC、PMAC)などがある。受信側ECUでは、メッセージに含まれる認証対象のデータと自己が保持する共通鍵に、送信側ECUで使用されたMACアルゴリズムを適用してMACを算出する。この算出したMACと受信したMACが一致していれば認証が成功したと判定し、不一致であれば認証が失敗したと判定する。
従って共通鍵が漏洩しなければ不正なECUや悪意がある発信元などからのメッセージは、認証されないことになる。正当なメッセージとMACを受信した不正なECUなどからの再送攻撃に対しては、認証対象のデータに、カウント値などを含めることにより対処できる。本実施の形態では、送信側ECUで生成されるMACのデータ長を64ビット以下とする。64ビットを超えるMACが算出される場合、その任意の64ビット又はそれ以下のビットを抽出して使用する。
以下本明細書ではデータフィールドに、特定の機能に関する情報(以下適宜、通常データという)を含みMACを含まないメッセージをメインメッセージという。メインメッセージは通常の制御を行うために送信されるメッセージである。通常データは、特定の機能の制御値などが該当する。データフィールドに、通常データを含まずMACを含むメッセージをMACメッセージという。データフィールドに、通常データとMACの両方を含むメッセージをMAC付きメインメッセージという。
上記では、CANIDはメッセージに含まれる情報に関連づけられると説明した。この場合、そのメッセージがメインメッセージであるか、MACメッセージであるか、MAC付きメインメッセージであるかにより、それぞれに別のIDが付されてもよく、同一のIDが付されてもよい。
各ECUにおいてメインメッセージが送信される度に、MACを生成する処理が行われ、MACメッセージがCANに送信されると、ECUの処理負荷および消費電流が増大し、バスの占有率も増加する。MACを生成する処理は暗号化処理を含むため、ECUの処理負荷が増大する。車両内のECUには処理能力が非力なものも存在するため、処理負荷が低く抑えられることが望ましい。また車両において、ECUの消費電流が増大するとバッテリの消費が早くなり、バッテリ上がりが発生しやすくなりバッテリの寿命も短くなる。従ってECUの消費電流は低いことが望ましい。またCANにおいて、バス占有率の増加による通信障害を回避するため、一般的にはバス占有率がある一定値以下になるように設定されている。メインメッセージが送信される度にMACメッセージが送信されると、単純に従来の2倍のメッセージ数になる。
以上に鑑み、以下に説明する実施の形態では、メインメッセージの送信の度にMACを毎回送信するのではなく、MACを送信するタイミングを工夫することで、送信頻度を減らしながらも効率的にセキュリティを確保する方法を提供する。即ち、送信すべき複数の通常データの内、一部の通常データに対するMACの生成・送信を省略することにより、ECUの処理負荷および消費電流の増大を抑え、バス占有率の増加も抑制する。なお、以下の説明において「生成・送信」なる表現は、「生成かつ送信」および「送信のみ」のいずれか一方を意味する。
図2は、本発明の実施の形態に係るCANシステム500の構成の一例を示す図である。当該CANシステム500では、CANバス200に複数のECU100(図2ではECU1(100a)、ECU2(100b)、ECU3(100c)及びECU4(100d))が接続されている。CANでは、CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)と呼ばれるアクセス制御方式が採用されており、CANバス200に対して最初に送信を開始したECU100が送信権を取得する。なお同時に複数のECU100が送信した場合は、通信調停(bus arbitration)が行われる。CANではCANIDの値が小さいほうが優先される。
図3は、本発明の実施の形態に係るECU100の構成例を示す図である。ECU100は、アプリケーション処理部10、メッセージ処理部30及び送受信部50を備える。これらの構成は、ハードウエア的には、任意のプロセッサ、メモリ、及びその他のLSIで実現でき、ソフトウエア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
アプリケーション処理部10は例えば、プロセッサ、メモリ、及びメモリにロードされたアプリケーションプログラムによって実現される。メッセージ処理部30は例えば、プロセッサ、メモリ、メモリにロードされたメッセージ処理プログラム、及びCANコントローラによって実現される。なおCANコントローラに全ての機能を実装する構成も可能である。送受信部50は例えば、トランシーバにより実現可能される。
アプリケーション処理部10は、各ECU100の制御対象または監視対象(例えばエンジン、ステアリング、ブレーキ、又はその他の各種補機)と接続し、それらの対象からステータス情報または指示情報を取得する。アプリケーション処理部10は当該対象から取得した情報をもとに、CANにおいてブロードキャスト送信すべきデータを生成し、メッセージ処理部30に渡す。またアプリケーション処理部10は、CANバス200から(他のECUからCANバス200を通じて)受信されたメインメッセージに含まれるデータをメッセージ処理部30から受け取り、当該データに応じて当該対象を制御する。
メッセージ処理部30は、メッセージ送信時にメッセージを生成するとともに、メッセージ受信時にメッセージを解析する。メッセージ処理部30の具体的な構成は後述する。
送受信部50は、メッセージ処理部30により生成されたメッセージをCANバス200に対してブロードキャスト送信する。上述のようにメッセージには、メインメッセージ、MACメッセージ、及びMAC付きメインメッセージがある。メッセージ処理部30は、アプリケーション処理部10により生成された通常データを少なくとも対象としたMACを生成する。当該MACは、当該通常データを含むメインメッセージに含めて送信されてもよいし、別のメッセージで送信されてもよい。前者の場合はMAC付きメインメッセージが送信され、後者の場合はメインメッセージとMACメッセージが別に送信される。いずれも場合も、当該通常データと当該通常データに対するMACが、CANバス200に対してブロードキャスト送信されることに変わりはない。
送受信部50は、他のECU100で生成され、CANバス200に対してブロードキャスト送信されたメッセージをCANバス200から受信する。送受信部50は、受信したメッセージをメッセージ処理部30に渡す。
図4は、MACを別メッセージで送信する方式にて、メッセージ処理部30の送信に必要な機能を示すブロック図である。図4では受信に関する機能は省略して描いている。図4のメッセージ処理部30は、メインメッセージ生成部31、CANID抽出部32、データフィールド抽出部33、MAC生成タイミング決定部34、MAC生成部35及びMACメッセージ生成部36を有する。
図5は、図4のメッセージ処理部30によるメッセージ送信処理を示すフローチャートである。メインメッセージ生成部31は、送信すべきデータをアプリケーション処理部10から取得し、当該データをCANメッセージのデータフィールドに格納する。また当該データに対応するCANIDをIDフィールドに格納する。当該CANIDはアプリケーション処理部10から取得してもよいし、予め保持していてもよい。メインメッセージ生成部31は、CANメッセージのその他の項目の値を確定してメインメッセージを完成させる。メインメッセージ生成部31は、生成したメインメッセージを送受信部50に渡し、送受信部50は当該メインメッセージをブロードキャスト送信する。
CANID抽出部32は、メインメッセージ生成部31により生成されたメインメッセージのIDフィールドからCANIDを抽出する(図5のS10)。CANID抽出部32は、抽出したCANIDをMAC生成タイミング決定部34及びMAC生成部35に渡す。データフィールド抽出部33は、メインメッセージ生成部31により生成されたメインメッセージのデータフィールドに格納されたデータを抽出する(S11)。データフィールド抽出部33は、抽出したデータをMAC生成タイミング決定部34及びMAC生成部35に渡す。
MAC生成タイミング決定部34は、抽出されたCANID及びデータから、MACを生成すべきタイミングであるか否か判断する(S12)。なお、判断方法の具体例は後述する。MAC生成が必要なタイミングである場合(S13のY)、MAC生成タイミング決定部34はMAC生成部35にMACの生成を指示する。MAC生成部35は、抽出されたCANID及びデータをもとにMACを生成する(S14)。具体的には、少なくともCANID及びデータを含む認証対象に、保持する共通鍵35aを使用して所定のMACアルゴリズムを適用して、当該認証対象に対するMACを生成する。MAC生成部35は、生成したMACをMACメッセージ生成部36に渡す。
MACメッセージ生成部36は、MAC生成部35から取得したMACをCANメッセージのデータフィールドに格納する。また上記データに対するMACを含むメッセージであることを示すCANIDをIDフィールドに格納する。例えば上記データそのものを含むメッセージであることを示すCANIDの値から所定の固定値を減算した値が使用されてもよい。MACメッセージ生成部36は、CANメッセージのその他の項目の値を確定してMACメッセージを完成させる。MACメッセージ生成部36は、生成したMACメッセージを送受信部50に渡し、送受信部50は当該MACメッセージをブロードキャスト送信する(S15)。ステップS13にて、MACの生成が必要なタイミングでない場合(S13のN)、ステップS14及びステップS15におけるMAC生成・送信処理はスキップされる。
図6は、MACを別メッセージで送信する方式にて、メッセージ処理部30の受信に必要な機能を示すブロック図である。図6では送信に関する機能は省略して描いている。図6のメッセージ処理部30は、メッセージ解析部41、CANID抽出部42、データフィールド抽出部43、MAC検証タイミング決定部44、MAC生成部45、MAC比較部46及びデータ受渡部47を有する。
図7は、図6のメッセージ処理部30によるメッセージ受信処理を示すフローチャートである。送受信部50はCANバス200からメインメッセージを受信し、メッセージ解析部41に渡す。CANID抽出部42は、メッセージ解析部41により受信されたメインメッセージのIDフィールドからCANIDを抽出する(図7のS20)。CANID抽出部42は、抽出したCANIDをMAC検証タイミング決定部44及びMAC生成部45に渡す。データフィールド抽出部43は、メッセージ解析部41により受信されたメインメッセージのデータフィールドに格納されたデータを抽出する(S21)。データフィールド抽出部43は、抽出したデータをMAC検証タイミング決定部44、MAC生成部45及びデータ受渡部47に渡す。
MAC検証タイミング決定部44は、抽出されたCANID及びデータから、MACを検証すべきタイミングであるか否か判断する(S22)。なお、判断方法の具体例は後述するが、送信側のMAC生成タイミング決定部34と同じ判断方法が用いられる。MACの検証が必要なタイミングである場合(S23のY)、MAC検証タイミング決定部44はMAC生成部45にMACの生成を指示する。MAC生成部45は、抽出されたCANID及びデータをもとにMACを生成する(S24)。生成方法は送信側のMAC生成部35の生成方法と同じである。受信側のMAC生成部45は、送信側のMAC生成部35が保持する共通鍵35aと同じ共通鍵45aを保持している。MAC生成部45は、生成したMACをMAC比較部46に渡す。
ECU100は当該メインメッセージに対するMACメッセージの到着を待ち(S25のN)、MACメッセージが受信された場合(S25のY)、送受信部50はCANバス200からMACメッセージを受信し、メッセージ解析部41に渡す。データフィールド抽出部43は、メッセージ解析部41により受信されたMACメッセージのデータフィールドに格納されたMACを抽出する(S26)。データフィールド抽出部43は、抽出したMACをMAC比較部46に渡す。
MAC比較部46は、MAC生成部45により生成されたMACとデータフィールド抽出部43により抽出されたMACとを比較する(S27)。両者のMACが一致した場合(S28のY)、MAC比較部46はMACの検証が成功したと判定し、データ受渡部47に検証が成功した旨を通知する。データ受渡部47はデータフィールド抽出部43から取得し、保留していたデータをアプリケーション処理部10に渡す(S29)。アプリケーション処理部10は、取得したデータに応じて制御対象を制御、または監視対象を監視する。
ステップS28にて、両者のMACが一致しない場合(S28のN)、MAC比較部46はMACの検証が失敗したと判定し、データ受渡部47に検証が失敗した旨を通知する。データ受渡部47は、データフィールド抽出部43から取得し、保留していたデータをアプリケーション処理部10に渡さない。ステップS23にて、MAC検証が必要なタイミングでない場合(S23のN)、ステップS24〜ステップS28の処理がスキップされる。データ受渡部47は、データフィールド抽出部43から取得したデータを無条件にアプリケーション処理部10に渡す(S29)。
図5及び図6に示すように、MACを別メッセージで送信する場合、メインメッセージとMACメッセージの間に攻撃者が不正メッセージを挿入する攻撃が考えられる。以下、このような異常ケースを想定したメッセージ受信時の処理を説明する。
図8は、MACを別メッセージで送信する方式にて、異常ケースを想定したメッセージ処理部30の受信に必要な機能を示すブロック図である。図8では送信に関する機能は省略して描いている。図8のメッセージ処理部30は、図6の異常ケースを想定しないメッセージ処理部30の構成要素に、メインメッセージ一時保持部48が追加された構成である。メインメッセージ一時保存部48は、一般的なメモリ素子などによって実現される。
図9は、図8のメッセージ処理部30によるメインメッセージ受信処理を示すフローチャートである。制御の方針としては、メインメッセージを最大n個(3つ程度)まで保持し、MACメッセージと保持しているメインメッセージとでMACを検証する。検証の結果、Rijectされた(検証が失敗した)場合は、保持しているメッセージを破棄する処理を行う。メッセージ解析部41は、送受信部50を介してCANバス200からメインメッセージを受信すると、メインメッセージ一時保持部48にメインメッセージが保持されているか否か判断する(図9のS30)。保持されている場合(S30のY)、メインメッセージ一時保持部48に保持されているメインメッセージの数がn個以上であるか否か判断する(S31)。nはメインメッセージ一時保持部48に保持されるメインメッセージの上限数を規定したパラメータである。例えばn=3に設定される。
メインメッセージの数がn個以上、保持されている場合(S31のY)、メッセージ解析部41は、メインメッセージ一時保持部48に保持されている複数のメインメッセージの内、最も古いメインメッセージを破棄する(S32)。メッセージ解析部41は、受信した新しいメインメッセージをメインメッセージ一時保持部48に格納する(S33)。即ち、メインメッセージ一時保持部48はFIFOで管理される。メインメッセージ一時保持部48に格納されたメインメッセージに対する処理は、メッセージ解析部41から指示があるまで保留される。
ステップS31にて、メインメッセージ一時保持部48に保持されているメインメッセージの数がn個未満である場合(S31のN)、ステップS32をスキップして、メッセージ解析部41は、受信した新しいメインメッセージをメインメッセージ一時保持部48に格納する(S33)。
ステップS30にて、メインメッセージ一時保持部48にメインメッセージが保持されていない場合(S30のN)、MAC検証タイミング決定部44は、そのメインメッセージに対するMACの検証が必要であるか否か判断する(S34)。この判断方法の具体例は後述する。MACの検証が必要である場合(S34のY)、MAC検証タイミング決定部44は、その旨をメッセージ解析部41に通知し、メッセージ解析部41は、受信した新しいメインメッセージをメインメッセージ一時保持部48に格納する(S33)。
ステップS34にて、MACの検証が必要でない場合(S34のN)、データ受渡部47は、データフィールド抽出部43から取得したデータをアプリケーション処理部10に渡す(S35)。アプリケーション処理部10は、取得したデータに応じて制御対象を制御する、または監視対象を監視する。
図10は、図8のメッセージ処理部30によるMACメッセージ受信処理を示すフローチャートである。メッセージ解析部41は、送受信部50を介してCANバス200からMACメッセージを受信すると、メインメッセージ一時保持部48に検証の必要なメインメッセージが保持されているか否か判断する(図10のS40)。保持されている場合(S40のY)、メインメッセージからMACを生成する(S41)。具体的には当該メインメッセージのCANID及びデータからMACを生成する。
MAC比較部46は、上記メインメッセージから生成されたMACと、受信されたMACメッセージから抽出されたMACを比較する(S42)。両者のMACが一致した場合(S42のY)、データ受渡部47は、データフィールド抽出部43から取得したデータをアプリケーション処理部10に渡す(S43)。アプリケーション処理部10は、取得したデータに応じて取得したデータに応じて制御対象を制御する、または監視対象を監視する。
MAC比較部46による検証が成功した場合にて、メインメッセージ一時保持部48にその他のメインメッセージが保持されている場合(S44のY)、保持されているその他のメインメッセージは破棄される(S45)。保持されていない場合(S44のN)、ステップS45の処理はスキップされる。
ステップS42にて、MACが一致しない場合(S42のN)、ステップS40に遷移し、検証の必要なメインメッセージが保持されているか否かの判断が繰り返される。
ステップS40にて、メインメッセージ一時保持部48に検証の必要なメインメッセージが保持されていない場合(S40のN)、メッセージ解析部41は、受信したMACメッセージを破棄する(S46)。
図11(a)−(e)は、正規のメインメッセージと正規のMACメッセージの間に、不正のメッセージを挿入する攻撃の例を示す図である。図11(a)−(e)では、車速センサに接続されたECUから、制御値として車速情報をデータフィールドに含むメインメッセージを送信する例を描いている。また前回送信したメインメッセージに含まれる車速と異なる車速を含むメインメッセージを送信する際に、MACメッセージが生成・送信される制御を前提とする。即ち、前回送信したメインメッセージに含まれる車速と、今回送信するメインメッセージに含まれる車速が同じ場合、MACメッセージは生成・送信されない。また図11(a)−(e)のそれぞれの、先頭のメインメッセージの直前のメッセージは、制御値として車速=30km/hを含むメインメッセージであるとする。またメインメッセージ一時保持部48に保持されるメインメッセージの上限数nは3とする。また図11(a)−(e)において、不正なメッセージは太枠で囲んでいる。
図11(a)は、正常なケースを示す例である。このケースでは不正なメッセージは挿入されていない。前回のメインメッセージに含まれる車速と異なる車速を含む、2番目のメインメッセージと3番目のメインメッセージに、それぞれMACメッセージが付加される。先頭のメインメッセージは、前回のメインメッセージに含まれる車速と同じ車速(=30km/h)を含むメッセージであるため、MACメッセージが付加されない。
図11(b)は、攻撃パターン1を示す例である。先頭のメインメッセージは不正なメインメッセージである。このメインメッセージ(不正)に含まれる車速(=40km/h)は、前回のメインメッセージ(正規)に含まれる車速(=30km/h)と異なる。従って図9のステップS34のMAC検証が必要なメインメッセージに該当する。従って図9のステップS34のMACの検証が必要なメインメッセージに該当するため、このメインメッセージは、メインメッセージ一時保持部48に格納される。2番目及び3番目のメインメッセージ(正規)は、図9のステップS30のメインメッセージ一時保持部48に既にメインメッセージを保持しているという条件を満たすため、メインメッセージ一時保持部48に格納される。
4番目のメインメッセージ(正規)の受信時点で、メインメッセージ一時保持部48に既に3個のメインメッセージが保持されている。従って図9のステップS32により最も古い先頭のメインメッセージ(不正)が破棄される。
図11(c)は、攻撃パターン2を示す例である。先頭のメインメッセージ(正規)は、図9のステップS34の条件を満たすため、メインメッセージ一時保持部48に格納される。2番目及び3番目のメインメッセージ(不正)も、図9のステップS30の条件を満たすため、メインメッセージ一時保持部48に格納される。3番目のメインメッセージ(正規)の次にMACメッセージ(正規)が受信される。メインメッセージ一時保持部48に保持される3個のメインメッセージの内、図10のステップS40の検証が必要なメインメッセージは、先頭のメインメッセージ(正規)と3番目のメインメッセージ(不正)である。2番目のメインメッセージ(不正)に含まれる車速(=40km/h)は、前回のメインメッセージ(正規)に含まれる車速(=30km/h)と異なるため、2番目のメインメッセージ(不正)は検証が必要なメインメッセージに該当しない。
メインメッセージ一時保持部48に検証が必要なメインメッセージが複数保持される場合、新しいメインメッセージから検証される。この例では3番目のメインメッセージ(不正)から検証される。3番目のメインメッセージ(不正)から生成されるMACと、受信したMACメッセージ(正規)に含まれるMACは一致しない。次に先頭のメインメッセージ(正規)が検証される。先頭のメインメッセージ(正規)から生成されるMACと、受信したMACメッセージ(正規)に含まれるMACは一致する。従って先頭のメインメッセージ(正規)がアプリケーション処理部10に渡される。図10のステップS45により、2番目のメインメッセージ(不正)と3番目のメインメッセージ(不正)は破棄される。
なおMACメッセージが受信される前に、メインメッセージのMACを生成することも考えられる。しかしながら不正なメインメッセージが多量に送信された場合、メインメッセージのMACを生成することによるECU100の負荷が増大する。本実施の形態ではMACメッセージが受信された後に、新しいメインメッセージから順番にMACを生成して検証し、検証が成功したメインメッセージが見つかった時点で、残りのメインメッセージを破棄する。これによりECU100の負荷の増大を抑制できる。
図11(d)は、攻撃パターン3を示す例である。先頭のメインメッセージ(正規)は、図9のステップS34の条件を満たすため、メインメッセージ一時保持部48に格納される。2番目のメインメッセージ(不正)も、図9のステップS30の条件を満たすため、メインメッセージ一時保持部48に格納される。その次にMACメッセージ(不正)が受信される。
メインメッセージ一時保持部48に保持される2個のメインメッセージの内、図10のステップS40の検証が必要なメインメッセージは、先頭のメインメッセージ(正規)である。2番目のメインメッセージ(不正)は検証が必要なメインメッセージに該当しない。先頭のメインメッセージ(正規)から生成されるMACと、受信したMACメッセージ(不正)に含まれるMACは一致しない。これによりメインメッセージ一時保持部48に、検証が必要なメインメッセージが存在しなくなるため、図10のステップS46により当該MACメッセージ(不正)が破棄される。このように2番目のメインメッセージ(不正)と当該MACメッセージ(不正)との検証は行われずに、当該MACメッセージ(不正)が破棄される。
次にMACメッセージ(正規)がさらに受信される。先頭のメインメッセージ(正規)から生成されるMACと、今回受信したMACメッセージ(正規)に含まれるMACは一致する。従って先頭のメインメッセージ(正規)がアプリケーション処理部10に渡される。図10のステップS45により、メインメッセージ一時保持部48内の2番目のメインメッセージ(不正)は破棄される。
図11(e)は、攻撃パターン4を示す例である。先頭のメインメッセージ(不正)は、図9のステップS34の条件を満たすため、メインメッセージ一時保持部48に格納される。2番目のメインメッセージ(正規)も、図9のステップS30の条件を満たすため、メインメッセージ一時保持部48に格納される。その次にMACメッセージ(不正)が受信される。
メインメッセージ一時保持部48に保持される2個のメインメッセージの内、図10のステップS40の検証が必要なメインメッセージは、先頭のメインメッセージ(不正)である。2番目のメインメッセージ(正規)は検証が必要なメインメッセージに該当しない。先頭のメインメッセージ(不正)から生成されるMACと、受信したMACメッセージ(不正)に含まれるMACは一致しない。これによりメインメッセージ一時保持部48に、検証が必要なメインメッセージが存在しなくなるため、図10のステップS46により当該MACメッセージ(不正)が破棄される。
正規のメインメッセージと正規のMACメッセージの間に、不正のメッセージを挿入する攻撃に対しては、MACメッセージの優先度をメインメッセージの優先度より高く設定することが有効である。これは、MACメッセージのCANIDが、メインメッセージのCANIDより常に小さくなるように各メッセージのCANIDを設定すれば実現できる。上述のようにCANでは、同時に複数のメッセージが送信された場合、通信調停によりCANIDの値が小さいほうが優先されるためである。MACメッセージの優先度をメインメッセージの優先度より高く設定することにより、正規のメインメッセージと正規のMACメッセージとの間に、多量の不正のメッセージが挿入される確率を下げることができる。
これまで、MACの検証が必要なメインメッセージを受信した場合、そのメインメッセージに対応するMACメッセージが受信されるまで、メインメッセージに含まれるデータをデータ受渡部47に保留する方式を説明した。MACの検証が必要なメインメッセージを受信した場合でも、データ受渡部47が、メインメッセージに含まれるデータを即座にアプリケーション処理部10に渡す方式を採用することもできる。この方式では、MACの検証が必要なメインメッセージを受信してから、所定の設定時間内に当該メインメッセージに対応するMACメッセージを受信できない場合、データ受渡部47はアプリケーション処理部10に、当該メインメッセージに含まれるデータを渡す前の制御状態に戻すよう指示する。この方式は、車両の安全性に比較的影響しない制御に適用されるのが望ましい。
なおデータ受渡部47はアプリケーション処理部10に、当該メインメッセージに含まれるデータを渡す前の制御状態に戻すよう指示する代わりに、フェイルセーフモードに移行するよう指示してもよい。
図12は、MACを同一メッセージで送信する方式にて、メッセージ処理部30の送信に必要な機能を示すブロック図である。図12では受信に関する機能は省略して描いている。図12のメッセージ処理部30の構成は、図4のメッセージ処理部30の構成からMACメッセージ生成部36を省略した構成である。
図13は、図12のメッセージ処理部30によるメッセージ送信処理を示すフローチャートである。図13のステップS10〜ステップS14までの処理は、図5のステップS10〜ステップS14までの処理と同じである。メインメッセージ生成部31は、MAC生成部35から取得したMACを、メインメッセージのデータフィールドに、既に格納されているデータと重複しないように格納する。また上記データ及び当該データに対するMACを含むMAC付きメインメッセージであることを示すCANIDをIDフィールドに格納する。メインメッセージ生成部31は、生成したMAC付きメインメッセージを送受信部50に渡し、送受信部50は当該MAC付きメインメッセージをブロードキャスト送信する(S15a)。
図14は、MACを同一メッセージで送信する方式にて、メッセージ処理部30の受信に必要な機能を示すブロック図である。図14では送信に関する機能は省略して描いている。図14のメッセージ処理部30は、図6のメッセージ処理部30の構成と比較し、データフィールド抽出部43が分離部43aを含む構成である。その他の構成は同じである。
図15は、図14のメッセージ処理部30によるメッセージ受信処理を示すフローチャートである。送受信部50はCANバス200からMAC付きメインメッセージを受信し、メッセージ解析部41に渡す。CANID抽出部42は、メッセージ解析部41により受信されたMAC付きメインメッセージのIDフィールドからCANIDを抽出する(図15のS20a)。データフィールド抽出部43は、メッセージ解析部41により受信されたMAC付きメインメッセージのデータフィールド内のデータ及びMACを抽出する(S21b)。データフィールド抽出部43は、抽出したデータフィールド内のデータとMACとを分離する(S22)。
MAC検証タイミング決定部44は、抽出されたCANID及びデータから、MACを検証すべきタイミングであるか否か判断する(S23)。MACの検証が必要なタイミングである場合(S23のY)、MAC生成部45は、抽出されたCANID及びデータをもとにMACを生成する(S24)。MAC比較部46は、MAC生成部45により生成されたMACと、データフィールド抽出部43により抽出および分離されたMACを比較する(S27a)。両者のMACが一致した場合(S28のY)、MAC比較部46はMACの検証が成功したと判定し、データ受渡部47に検証が成功した旨を通知する。データ受渡部47はデータフィールド抽出部43から取得し、保留していたデータをアプリケーション処理部10に渡す(S29)。アプリケーション処理部10は、取得したデータに応じて制御対象を制御する、または監視対象を監視する。
ステップS28にて、両者のMACが一致しない場合(S28のN)、MAC比較部46はMACの検証が失敗したと判定し、データ受渡部47に検証が失敗した旨を通知する。データ受渡部47は、データフィールド抽出部43から取得し、保留していたデータをアプリケーション処理部10に渡さない。ステップS23にて、MACの検証が必要なタイミングでない場合(S23のN)、ステップS24、ステップS27a及びステップS28の処理がスキップされ、データ受渡部47は、データフィールド抽出部43から取得したデータを無条件にアプリケーション処理部10に渡す(S29)。
以上に説明したMACを同一メッセージで送信する方式は、送信すべき通常データの量が少ない場合に有効である。MACを同一メッセージで送信する方式はMACを別メッセージで送信する方式と比較し、基本的にメッセージ数を減らす効果がある。しかしながら、通常データの量が多い場合、64ビットのデータフィールドに通常データとMACを併存させるのが難しくなる。その場合、両者の少なくとも一方を複数に分割する必要があり、メッセージの数が増える。またMACを別メッセージで送信する方式のほうが通常、メッセージ処理部30の処理を単純化できる。従って必ずしも、MACを同一メッセージで送信する方式が、MACを別のメッセージで送信する方式より有利というわけではない。したがって、通常データの量などが考慮されたうえで、両者が使い分けられて設定されるのが好ましい。
以下、MACメッセージの生成・送信タイミングについて説明する。各ECU100は、通常データを含むメッセージを受信し、その通常データが示す値によって特定の制御を実行している。上述のように受信側ECU100でも送信側ECU100と同様に、MACが付加されるべきタイミングを判断している。受信側ECU100では正規のMACが到着して検証が成功しない限り当該制御を保留している。これにより攻撃者からの不正制御を防御している。
車両内のCANで送信される通常データには様々な種類があるが、送信する値が変化しなくても周期的に送信される通常データも多い。例えば車速センサのECU100からは周期的に車速情報が送信される。
以上の状況に鑑み、送信する値が変化するときのみMACを生成・送信する制御方式が考えられる。この場合、セキュリティを確保しつつECU100及びCANバス200の負荷を下げることができる。以下、送信すべき通常データ固有の特徴もしくは性質、または送信すべき通常データの重要度などに応じてMACの生成・送信タイミングを決定する方法を説明する。
図16は、MACの生成・送信タイミングの複数の具体例をまとめた一覧表を示す図である。まず大分類として、データ変化に起因してタイミングを決定するグループ、送信周期性に起因してタイミングを決定するグループ、及びその他のグループに分類した。
まず、データ変化に起因してタイミングを決定するグループの第1の例として、制御対象または監視対象の状態を表すデータが変化したときMACを生成・送信する方式を説明する。例えば、ドアロックのON/OFFが変化したときにMACを生成・送信する。またギアポジション(P,N,D,R)が変化したときにMACを生成・送信する。このように、制御対象または監視対象の状態は2値で表される場合もあれば、多値で表される場合もある。またエンジン回転数のように、さらに細かな値で表される場合もある。前回のデータと同じ値のデータは重要度が低いデータといえる。仮に当該データが不正なデータであっても、制御に与える影響が小さい。従って負荷軽減を優先して当該データに対するMACの生成・送信を省略する。
図17は、状態を表すデータが変化したときMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能を示すブロック図である。図17のMAC生成タイミング決定部34は、前回データ保持部341及び比較部343を含む。
図18は、図17のMAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。前回データ保持部341には、前回のメインメッセージで送信したデータが保持される。比較部343は、前回データ保持部341に保持されるデータと、データフィールド抽出部33から渡される今回送信すべきデータを比較する(S50)。両者のデータが異なる場合(S51のY)、比較部343はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S52)。前回データ保持部341内の保持データは、今回送信されたデータに更新される(S53)。ステップS51にて、両者のデータが一致する場合(S51のN)、ステップS52及びステップS53の処理はスキップされる。
図19は、状態を表すデータが変化したときMACを生成・送信する方式の具体例を示す図である。図19では2値(ON/OFF)の状態を表すデータを送信する例を示している。2番目のメインメッセージM2に含まれるデータの値(ON)は、先頭のメインメッセージM1に含まれるデータの値(ON)に対して変化していないため、2番目のメインメッセージM2に対するMACは生成されない。3番目のメインメッセージM3に含まれるデータの値(OFF)は、2番目のメインメッセージM2に含まれるデータの値(ON)に対して変化しているため、3番目のメインメッセージM3に対するMACが生成・送信される。同様に4番目のメインメッセージM4に対するMACは生成されず、5番目のメインメッセージM5に対するMACが生成・送信される。
図20は、状態を表すデータが変化したときMACを生成・送信する方式において、送信側ECU100から受信側ECU100に送信されるメッセージの一例を示す図である。送信すべきデータの値が変化しない第1フェーズP1、第2フェーズP2及び第4フェーズP4では、送信側ECU100でメインメッセージのみが生成され、受信側ECU100に送信される。
送信すべきデータの値が変化する第3フェーズP3及び第5フェーズP5では、送信側ECU100でメインメッセージと、当該メインメッセージに対するMACメッセージが生成される。送信側ECU100から当該メインメッセージと当該MACメッセージの両方が受信側ECU100に送信される。
次に、データ変化に起因してタイミングを決定するグループの第2の例として、データによって示される値の変化量が閾値を超えたときMACを生成・送信する方式を説明する。例えば、最後にMACを生成・送信したときのエンジン回転数の値から、100rpmを超えて変化したときにMACを生成・送信する。データによって示される値の変化量が小さいデータは重要度が低いデータといえる。仮に当該データが不正なデータであっても、制御に与える影響が小さい。従って負荷軽減を優先して当該データに対するMACの生成・送信を省略する。
図21は、変化量が閾値を超えたときMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能を示すブロック図である。図21のMAC生成タイミング決定部34は、前回データ保持部341、減算部342及び比較部343を含む。
図22は、図21のMAC生成タイミング決定部34によるMACの生成をタイミング決定する処理を示すフローチャートである。前回データ保持部341には前回、MACメッセージが生成されたメインメッセージで送信されたデータの値が保持される。減算部342は、前回データ保持部341に保持されるデータの値と、データフィールド抽出部33から渡される今回送信すべきデータの値との差分値を算出する(S50a)。この例では当該差分値は絶対値で算出される。比較部343は算出された差分値と閾値を比較し、当該差分値が当該閾値を超える場合(S51aのY)、比較部343はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S52)。前回データ保持部341内の保持データは、今回送信されたデータに更新される(S53)。ステップS51aにて、当該差分値が当該閾値以下の場合(S51aのN)、ステップS52及びステップS53の処理はスキップされる。
図23は、変化量が閾値を超えたときMACを生成・送信する方式の具体例を示す図である。図23ではエンジンの回転数を表すデータを送信する例を示している。この例では、先頭のメインメッセージM1の直前に送信されたメインメッセージ(不図示)に含まれるエンジン回転数が999rpmであり、当該メインメッセージに対するMACメッセージが生成・送信されたことを前提とする。また上記の閾値は100rpmとする。
前回MACメッセージが生成されたメインメッセージで送信されたエンジン回転数(999rpm)と、先頭のメインメッセージM1に含まれるエンジン回転数(1000rpm)との差分の絶対値は100rpm以下である。同様に2番目のメインメッセージM2に含まれるエンジン回転数(1002rpm)との差分の絶対値も100rpm以下である。同様に3番目のメインメッセージM3に含まれるエンジン回転数(1005rpm)との差分の絶対値も100rpm以下である。従って先頭のメインメッセージM1、2番目のメインメッセージM2、及び3番目のメインメッセージに対するMACメッセージは生成・送信されない。
前回MACメッセージが生成されたメインメッセージで送信されたエンジン回転数(999rpm)と、4番目のメインメッセージM4に含まれるエンジン回転数(1100rpm)との差分の絶対値は100rpmを超える。従って4番目のメインメッセージM4に対するMACメッセージが生成・送信される。これにより、前回MACメッセージが生成されたメインメッセージで送信されたエンジン回転数は1100rpmに更新される。
前回MACメッセージが生成された4番目のメインメッセージM4で送信されたエンジン回転数(1100rpm)と、5番目のメインメッセージM5に含まれるエンジン回転数(1103rpm)との差分の絶対値は100rpm以下である。従って5番目のメインメッセージM5に対するMACメッセージは生成・送信されない。
図21〜図23に示した例では、前回送信されたデータの値として、前回MACメッセージが生成されたメインメッセージで送信されたデータの値を使用したが、MACメッセージの生成の有無を問わず、前回送信されたメインメッセージに含まれるデータの値を使用してもよい。
次に、データ変化に起因してタイミングを決定するグループの第3の例として、データによって示される値が閾値を超えたとき、または下回ったときにMACを生成・送信する方式を説明する。例えば、車速が10km/hを超えている場合、常にMACを生成・送信する。または例えば、バッテリの電源電圧が所定の値を下回った場合、常にMACを生成・送信する。閾値を超える、または下回る値を持つデータは重要度が高いデータといえる。従ってセキュリティの確保を優先して当該データに対するMACを生成・送信する。
値が閾値を超えたとき、または下回ったときにMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能は、図21のMAC生成タイミング決定部34の比較部343があれば足りる。この方式では、過去に送信したデータの値は不要であるため、前回データ保持部341及び減算部342は設ける必要がない。
図24は、値が閾値を超えたとき、または下回ったときにMACを生成・送信する方式における、MAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。比較部343は、データフィールド抽出部33から渡される今回送信すべきデータの値と閾値を比較する(S60)。閾値を超えるときにMACを生成・送信する設定の場合(S611のY)、ステップS612に遷移する。閾値を下回るときにMACを生成・送信する設定の場合(S611のN)、ステップS613に遷移する。
ステップS612にて、今回送信すべきデータの値が当該閾値を超える場合(S612のY)、比較部343はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S62)。ステップS612にて、今回送信すべきデータの値が当該閾値以下の場合(S612のN)、ステップS62の処理はスキップされる。
ステップS613にて、今回送信すべきデータの値が当該閾値を下回る場合(S613のY)、比較部343はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S62)。ステップS61にて、今回送信すべきデータの値が当該閾値以上の場合(S613のN)、ステップS62の処理はスキップされる。
次に、データ変化に起因してタイミングを決定するグループの第4の例として、データによって示される値の変化が規定した方向への変化のときMACを生成・送信する方式を説明する。例えば、データの値が減少する場合はMACを生成・送信せず、増加する場合にMACを生成・送信する。この例は、データの値が減少する方向への変化が安全サイドへの変化であり、データの値が増加する方向への変化がリスクサイドへの変化である例である。リスクサイドの方向に値が変化するデータに対してのみMACを生成・送信することにより、セキュリティの確保と負荷軽減のバランスを図ることができる。
値の変化が規定した方向への変化のときMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能は、図17のMAC生成タイミング決定部34の機能と同じである。
図25は、値の変化が規定した方向への変化のときMACを生成・送信する方式における、MAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。前回データ保持部341には、前回のメインメッセージで送信されたデータの値が保持される。比較部343は、前回データ保持部341に保持されるデータの値と、データフィールド抽出部33から渡される今回送信すべきデータの値を比較する(S50)。値の変化が増加方向への変化のときMACを生成・送信する設定の場合(S511のY)、ステップS512に遷移する。値の変化が減少方向への変化のときMACを生成・送信する設定の場合(S511のN)、ステップS513に遷移する。
ステップS512にて、保持されるデータの値が今回送信すべきデータの値を超える場合(S512のY)、比較部343はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S52)。前回データ保持部341内の保持データは、今回送信されたデータに更新される(S53)。ステップS512にて、保持されるデータの値が今回送信すべきデータの値以下の場合(S512のN)、ステップS52及びステップS53の処理はスキップされる。
ステップS513にて、保持されるデータの値が今回送信すべきデータの値以下の場合(S513のY)、比較部343はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S52)。前回データ保持部341内の保持データは、今回送信されたデータに更新される(S53)。ステップS513にて、保持されるデータの値が今回送信すべきデータの値を超える場合(S513のN)、ステップS52及びステップS53の処理はスキップされる。
次に、データ変化に起因してタイミングを決定するグループの第5の例として、データによって示される値がデフォルト値と異なるときMACを生成・送信する方式を説明する。例えば、データの値がデフォルト値以外をとる場合、常にMACを生成・送信する。通常、デフォルト値は最も安全サイドの値に設定されている。従ってデータの値がデフォルト値をとる場合、負荷軽減を優先して当該データに対するMACの生成・送信を省略する。
値がデフォルト値と異なるときMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能は、図21のMAC生成タイミング決定部34の比較部343があれば足りる。この方式では、過去に送信したデータの値は不要であるため、前回データ保持部341及び減算部342は設ける必要がない。なお比較部343には閾値ではなく、デフォルト値が入力される。
図26は、値がデフォルト値と異なるときMACを生成・送信する方式における、MAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。比較部343は、データフィールド抽出部33から渡される今回送信すべきデータの値とデフォルト値を比較する(S60a)。今回送信すべきデータの値と当該デフォルト値が異なる場合(S61aのY)、比較部343はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S62)。ステップS61aにて、今回送信すべきデータの値が当該デフォルト値と同じ場合(S61aのN)、ステップS62の処理はスキップされる。
次に、送信周期性に起因してタイミングを決定するグループの第1の例として、間引き周期でMACを生成・送信する方式を説明する。例えば、メインメッセージの送信周期よりも長い周期でMACを生成・送信する。MACを生成・送信する回数を単純に減らすことができる。
図27は、間引き周期でMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能を示すブロック図である。図27のMAC生成タイミング決定部34は、MAC送信時刻保持部344、時計部345、経過時間算出部346及び比較部347を含む。
図28は、図27のMAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。MAC送信時刻保持部344には、前回のMACメッセージの送信時刻が保持される。経過時間算出部346は、MAC送信時刻保持部344に保持される前回のMACメッセージの送信時刻と、時計部345から供給される現在の時刻をもとに、前回のMACメッセージの送信時刻からの経過時間を算出する(S70)。比較部347は、算出された経過時間と設定周期を比較し(S71)、算出された経過時間が当該設定周期を超える場合(S71のY)、MAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S72)。MAC生成部35は、生成したMACをMACメッセージ生成部36に渡す。MACメッセージ生成部36は、MAC生成部35から取得したMACをCANメッセージのデータフィールドに格納してMACメッセージを生成する。MACメッセージ生成部36は、生成したMACメッセージを送受信部50に渡し、送受信部50は当該MACメッセージをブロードキャスト送信する(S73)。MAC送信時刻保持部344内に保持されるMACの送信時刻は、今回送信されたMACメッセージのMACの送信時刻に更新される(S74)。
ステップS71にて、算出された経過時間が設定周期を超えない場合(S71のN)、ステップS72、ステップS73及びステップS74の処理はスキップされる。上記の設定周期は、メインメッセージの送信周期より長い周期に設定される。例えば、メインメッセージの送信周期の整数倍の値に設定される。
図29は、間引き周期でMACを生成・送信する方式の具体例を示す図である。図29ではメインメッセージの送信周期が20ms、上記の設定周期が200msに設定された例を示している。先頭のメインメッセージM1に対するMACメッセージが送信された時刻から200msが経過した時点のメインメッセージMnに対して、MACメッセージが生成・送信される。先頭のメインメッセージM1に対するMACメッセージが送信された時刻から200msが経過する前に生成されるメインメッセージM2、メインメッセージM3、・・・、メインメッセージM(n−1)に対するMACメッセージの生成・送信は間引かれる。
次に、送信周期に起因してタイミングを決定するグループの第2の例として、メッセージの送信周期の変化に応じてMACを生成・送信する方式を説明する。ECUによっては、メッセージの送信周期が切り替わるものがある。これは、短周期または長周期といった現在の送信周期の情報をECUの内部で管理している。送信周期の情報は、アプリケーション処理部10から現在の送信周期の情報を送信周期情報として取得する。このように、送信周期が変化するというメッセージ(データ)の性質に基づいて、次のように制御する。例えば、周期が変化するメインメッセージの現在の周期に応じて、MACの生成・送信頻度を変化させる。例えば、メインメッセージの現在の周期が短周期の場合、MACの生成・送信を間引く。一方、メインメッセージの現在の周期が長周期の場合、MACの生成・送信を間引かない。メインメッセージの周期が短周期の場合、全てのメインメッセージに対してMACを生成・送信する必要性が低下するため、負荷軽減を優先してMACの生成・送信を間引く。
図30は、周期変化に応じてMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能を示すブロック図である。図30のMAC生成タイミング決定部34は、図27のMAC生成タイミング決定部34の構成に、メインメッセージ送信周期判定部348が追加された構成である。
図31は、図30のMAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。MAC送信時刻保持部344には、前回のMACメッセージの送信時刻が保持される。メインメッセージ送信周期判定部348は、アプリケーション処理部10から渡されるメインメッセージの送信周期情報をもとに、メインメッセージの現在の送信周期が短周期であるか長周期であるか判定する(S699)。メインメッセージの送信周期が2種類である場合、短いほうが短周期、長いほうが長周期とされる。
ステップS699にて、メインメッセージの現在の送信周期が短周期である場合(S699のY)、その後の処理は、図28のステップS70〜ステップS74までの処理と同じ処理となる。即ち、間引き周期でMACメッセージが生成・送信される制御となる。
ステップS699にて、メインメッセージの現在の送信周期が長周期である場合(S699のN)、その後の処理は、図28のステップS72〜ステップS74までの処理と同じ処理となる。即ち、全てのメインメッセージに対してMACメッセージが生成・送信される制御となる。
次に、送信周期性に起因してタイミングを決定するグループの第3の例として、イベント発生に応じてMACを生成・送信する方式を説明する。このように、イベントが発生した際に送信されるというメッセージ(データ)の性質に基づいて、次のように制御する。例えば、イベント発生に応じてメインメッセージが送信される場合、常にMACを生成・送信する。具体的には、ドライバーがヘッドライトをONした場合などが該当する。イベント発生により送信されるデータは重要度が高いデータといえる。従ってセキュリティの確保を優先して当該データに対するMACを常に生成・送信する。
イベント発生に応じてMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能は、メインメッセージ生成部31により生成されるメインメッセージに含まれるデータがイベント送信型のデータであるか否かを判定する機能があれば足りる。
図32は、イベント発生に応じてMACを生成・送信する方式における、MAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。MAC生成タイミング決定部34は、CANID抽出部32により抽出されたCANID及び/又はデータフィールド抽出部33から抽出されたデータから、今回送信すべきメインメッセージの種別を判定する(S80)。今回送信すべきメインメッセージの種別がイベント送信型の場合(S81のY)、MAC生成タイミング決定部34はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S82)。ステップS81にて、今回送信すべきメインメッセージの種別がイベント送信型でない場合(S81のN)、ステップS82の処理はスキップされる。
次に、送信周期性に起因してタイミングを決定するグループの第4の例として、要求メッセージに応じてMACを生成・送信する方式を説明する。ここで、要求メッセージとは、あるECUから他のECUに対して何らかの情報を要求するためのメッセージである。要求メッセージを受信したECUはそれに対応するメインメッセージをCANバス200へ送信する。このように、要求メッセージの応答として送信されるというメッセージ(データ)の性質に基づいて、次のように制御する。例えば、要求メッセージに応じてメインメッセージが送信される場合、常にMACを生成・送信する。具体的には、他のECU100から、自己のECU100で監視している計器の数値の取得要求があった場合などが該当する。要求メッセージに応じて送信されるデータは重要度が高いデータといえる。従ってセキュリティの確保を優先して当該データに対するMACを常に生成・送信する。
要求メッセージに応じてMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能は、メインメッセージ生成部31により生成されるメインメッセージに含まれるデータがオンデマンド送信型のデータであるか否かを判定する機能があれば足りる。
図33は、要求メッセージに応じてMACを生成・送信する方式における、MAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。MAC生成タイミング決定部34は、CANID抽出部32により抽出されたCANID及び/又はデータフィールド抽出部33から抽出されたデータから、今回送信すべきメインメッセージの種別を判定する(S80)。今回送信すべきメインメッセージの種別がオンデマンド送信型の場合(S81aのY)、MAC生成タイミング決定部34はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S82)。ステップS81aにて、今回送信すべきメインメッセージの種別がオンデマンド送信型でない場合(S81aのN)、ステップS82の処理はスキップされる。
図16に示したその他のグループの第1の例として、バス占有率に応じてMACを生成・送信する方式を説明する。例えば、バスの占有率を監視し、MACの送信頻度を調整する。具体的には、自己のECU100から送信されるメッセージによるバスの占有率が閾値を超える場合、MACを生成・送信しない。この方式では、バスのトラフィック量を的確に調整できる。
図34は、バス占有率に応じてMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能を示すブロック図である。図34のMAC生成タイミング決定部34は、時計部345、バス占有率算出部349及び比較部350を含む。バス占有率はCANバス200を流れるすべてのメッセージの送信頻度から計算する必要があるため、時計部345から得られる時間の情報とCANバス200におけるメッセージの送信回数から、ある単位時間あたりの占有率を算出する。
図35は、図34のMAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。バス占有率算出部349は送受信部50から、CANバス200よりメッセージ(メインメッセージとMACメッセージを含む)が受信される度に受信情報を取得する。バス占有率算出部349は、取得したメッセージの受信情報からCANバス200におけるメッセージの送信頻度を算出し、当該送信頻度と時計部345から供給される時間情報(時刻情報)、CANバス200の帯域をもとにバス占有率を算出する(S90)。
比較部350は、算出されたバス占有率と閾値を比較し(S91)、バス占有率が閾値を超える場合(S91のY)、比較部350はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S92)。ステップS91にて、バス占有率が閾値以下の場合(S91のN)、ステップS92の処理はスキップされる。
図16に示したその他のグループの第2の例として、ランダムにMACを生成・送信する方式を説明する。例えば、ランダムなタイミングでMACを生成・送信する。なお送信側と受信側でタイミングの共有が必要となる。ランダムなタイミングでMACを生成・送信する場合、攻撃者からの不正な攻撃がされにくくなる効果がある。
図36は、ランダムにMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能を示すブロック図である。図36のMAC生成タイミング決定部34は、カウント部351、乱数発生部352、次回MAC送信カウント値保持部353及び比較部354を含む。カウント部351は、メインメッセージに対するMACの生成・送信時から、リセットされるまでカウントアップしていくカウンタを含む。乱数発生部352は、擬似乱数を発生させ次回MAC送信カウント値保持部353に供給する。次回MAC送信カウント値保持部353は、乱数発生部352から供給される擬似乱数値を、次回のMACの送信までのカウント値として保持する。
図37は、図36のMAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。比較部354は、カウント部351の現在のカウント値と、次回MAC送信カウント値保持部353に保持される次回のMAC送信までのカウント値とを比較する(S100)。カウント部351の現在のカウント値が次回のMAC送信までのカウント値に到達した場合(S101のY)、比較部354はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S102)。
乱数発生部352は、MAC生成部35からMACの生成が完了した旨の通知を受けると、新たに擬似乱数を発生させ、次回MAC送信カウント値保持部353に供給する。これにより次回MAC送信カウント値保持部353に保持される次回のMACの送信までのカウント値が更新される(S103)。またカウント部351は、MAC生成部35からMACの生成が完了した旨の通知を受けると、カウント値をリセットする(S104)。
ステップS101にて、カウント部351の現在のカウント値が次回のMAC送信までのカウント値に到達していない場合(S101のN)、カウント部351はカウント値をインクリメントする(S105)。なおステップS103にて発生させた擬似乱数値は、例えばMACメッセージのデータフィールドに含められて、CANバス200に接続された他のECU100に送信される。なおMACメッセージではなく、独立の制御メッセージに含められて送信されてもよい。
図16に示したその他のグループの第3の例として、車両状態に応じてMACを生成・送信する方式を説明する。例えば高速走行中や、リプログラミング用のツールが接続されている最中は常にMACを生成・送信する。リスクが高い状態で生成されるデータは重要度が高いデータといえる。従ってセキュリティの確保を優先して当該データに対するMACを常に生成・送信する。
車両状態に応じてMACを生成・送信する方式にて、メッセージ処理部30のMAC生成タイミング決定部34に必要な機能は、車両情報を取得する機能があれば足りる。
図38は、車両状態に応じてMACを生成・送信する方式における、MAC生成タイミング決定部34によるMACの生成タイミングを決定する処理を示すフローチャートである。MAC生成タイミング決定部34は、アプリケーション処理部10から渡されるデータ、又はメインメッセージ生成部31により受信されデータフィールド抽出部33により抽出されたデータにより、例えば速度情報などの車両状態を取得する(S110)。
MAC生成タイミング決定部34は、取得した車両状態が、予め設定されたMAC送信が必要な車両状態であるか否か判定する(S111)。例えば、取得した速度が60km/hを超える場合、高速走行中であるとしてMAC送信が必要な車両状態と判定する。取得した車両状態が、当該MAC送信が必要な車両状態である場合(S111のY)、MAC生成タイミング決定部34はMAC生成部35にMACの生成を指示する。MAC生成部35は、CANID抽出部32及びデータフィールド抽出部33により抽出されたCANID及びデータをもとにMACを生成する(S112)。ステップS111にて、取得した車両状態が、当該MAC送信が必要な車両状態でない場合(S111のN)、ステップS112の処理はスキップされる。
以上説明したように本実施の形態によれば、MACを生成・送信するタイミングを制御することにより、バス占有率の増加を抑制し、各ECUの処理負荷および消費電流を低減できる。送信すべきデータの特質(性質、重要度)に応じてMACを生成・送信するタイミングを決定することにより、バス及びECUの負荷増大を抑制しつつ、セキュリティを向上させることができる。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
例えば受信側ECU100において、MACの検証に失敗した回数をカウントすることにより、あまりに多くの不正メッセージが送信されていた場合に、車両が正常に制御できる状態ではないと判断する機能を追加してもよい。
図39は、MACの検証に失敗した不正メッセージの数をカウントする機能を有するメッセージ処理部30の構成を示すブロック図である。図39のメッセージ処理部30は、図6のメッセージ処理部30の構成に、検証失敗回数保持部49a及び異常判定部49bが追加された構成である。
検証失敗回数保持部49aは、MAC比較部46によるMACの検証の累積失敗回数を保持する。具体的にはMAC比較部46によるMACの検証が失敗する度にカウントアップしていく。異常判定部49bは、検証失敗回数保持部49aに保持される失敗回数が設定値(例えば、128回)を超えたとき車両異常と判定する。車両異常と判定すると異常判定部49bは、車両全体をフェイルセーフモードに移行させるためのデータを生成させるための指示信号をアプリケーション処理部10に出力する。さらに運転者に異常を通知するためのデータを生成させるための指示信号をアプリケーション処理部10に出力してもよい。
以上、本発明の実施の形態の説明において、送信すべき複数の通常データの内、一部の通常データに対するMACの生成および送信を省略することとして説明したが、他の形態として、送信すべき複数の通常データのすべてに対してMACの生成を行い、かつ、生成したデータの特質に基づいて一部のMACの送信を省略する形態としてもよい。
本発明の一態様の概要は、次の通りである。本発明のある態様の送信装置は、ブロードキャスト送信すべきデータを生成する第1生成部と、前記第1生成部において生成したデータを少なくとも対象としたメッセージ認証コードを生成する第2生成部と、前記第1生成部において生成したデータと、前記第2生成部において生成したメッセージ認証コードをブロードキャスト送信する送信部と、を備える。前記第2生成部は、前記第1生成部において生成される複数のデータの内、一部のデータに対するメッセージ認証コードの生成を省略する。「第1生成部」は図3のアプリケーション処理部10であってもよい。「第2生成部」は図4のMAC生成部35であってもよい。「送信部」は図3の送受信部50であってもよい。
この態様によると、一部のデータに対するメッセージ認証コードの生成を省略することにより、一定レベルのセキュリティを確保しつつ、CAN及びCANに接続された装置の負荷を軽減できる。
前記第2生成部は、前記第1生成部において生成したデータの特質(性質および重要度の少なくともいずれか一方)に基づき、前記メッセージ認証コードを生成するか否か決定してもよい。これによれば、重要度の高いデータに対するメッセージ認証コードを生成し、重要度の低いデータに対するメッセージ認証コードの生成を省略することができる。あるいは、データの性質に対応して適切にメッセージ認証コードの生成を省略することができる。従ってセキュリティの確保と負荷軽減を効率よく実現できる。
前記第2生成部は、前記第1生成部において生成したデータが変化した場合にメッセージ認証コードを生成し、それ以外の場合にメッセージ認証コードの生成を省略してもよい。データが変化した場合、そのデータは重要度が高いデータといえる。従って重要度の高いデータに対するメッセージ認証コードを生成し、重要度の低いデータに対するメッセージ認証コードの生成を省略することになり、セキュリティの確保と負荷軽減を効率よく実現できる。
前記第2生成部は、前記第1生成部において生成したデータによって示される値の変化量が閾値を超えている場合にメッセージ認証コードを生成し、それ以外の場合にメッセージ認証コードの生成を省略してもよい。データによって示される値の変化が閾値を超えいている場合、そのデータは重要度が高いデータといえる。従って重要度の高いデータに対するメッセージ認証コードを生成し、重要度の低いデータに対するメッセージ認証コードの生成を省略することになり、セキュリティの確保と負荷軽減を効率よく実現できる。なお当該閾値は、設計者により実験、シミュレーション、又は経験則などに基づき導かれた値に設定される。
前記第2生成部は、前記第1生成部において生成したデータによって示される値が閾値を超える場合にメッセージ認証コードを生成し、それ以外の場合にメッセージ認証コードの生成を省略してもよい。データによって示される値が閾値を超えている場合、そのデータは重要度が高いデータといえる。従って重要度の高いデータに対するメッセージ認証コードを生成し、重要度の低いデータに対するメッセージ認証コードの生成を省略することになり、セキュリティの確保と負荷軽減を効率よく実現できる。なお当該閾値は、設計者により実験、シミュレーション、又は経験則などに基づき導かれた値に設定される。
本発明の別の態様は、受信装置である。この装置は、送信装置がブロードキャスト送信した、データ及び前記データを少なくとも対象としたメッセージ認証コードを受信する受信部と、前記受信部において受信したデータ及びメッセージ認証コードを処理する処理部と、を備える。前記受信部において受信される複数のデータの内、一部のデータに対するメッセージ認証コードの生成が、前記送信装置において省略されている。「受信部」は図3の送受信部50であってもよい。「処理部」は図3のアプリケーション処理部10及びメッセージ処理部30であってもよい。
この態様によると、一部のデータに対するメッセージ認証コードの検証を省略することができ、一定レベルのセキュリティを確保しつつ、CAN及びCANに接続された装置の負荷を軽減できる。
本発明のさらに別の態様は、送信方法である。この方法は、ブロードキャスト送信すべきデータを生成する第1ステップと、前記第1ステップにおいて生成したデータを少なくとも対象としたメッセージ認証コードを生成する第2ステップと、前記第1ステップにおいて生成したデータと、前記第2ステップにおいて生成したメッセージ認証コードをブロードキャスト送信する第3ステップと、を備える。前記第2ステップは、前記第1ステップにおいて生成される複数のデータの内、一部のデータに対するメッセージ認証コードの生成を省略する。
この態様によると、一部のデータに対するメッセージ認証コードの生成を省略することにより、一定レベルのセキュリティを確保しつつ、CAN及びCANに接続された装置の負荷を軽減できる。
本発明のさらに別の態様は、受信方法である。この方法は、送信装置がブロードキャスト送信した、データ及び前記データを少なくとも対象としたメッセージ認証コードを受信する第1ステップと、前記第1ステップにおいて受信したデータ及びメッセージ認証コードを処理する第2ステップと、を備える。前記第1ステップにおいて受信される複数のデータの内、一部のデータに対するメッセージ認証コードの生成が、前記送信装置において省略されている。
この態様によると、一部のデータに対するメッセージ認証コードの検証を省略することができ、一定レベルのセキュリティを確保しつつ、CAN及びCANに接続された装置の負荷を軽減できる。