通信システムにおけるメッセージ認証方法および通信システム
【課題】CANプロトコルを変更せずにMACによるメッセージ認証を行う。
【解決手段】各ECUにおいてCANIDごとにメッセージが送信された回数をカウントする。メインメッセージを送信した送信ノードは、メインメッセージのデータフィールドおよびCANIDと、CANIDに対応するカウンタ値とからMACを生成して、MACメッセージとして送信する。メインメッセージを受信した受信ノードは、メインメッセージに含まれるデータフィールドおよびCANIDと、CANIDに対応するカウンタ値とからMACを生成して、MACメッセージに含まれるMACと一致するか判断する。これにより、メインメッセージが正当なものであるか否か検証できる。
【解決手段】各ECUにおいてCANIDごとにメッセージが送信された回数をカウントする。メインメッセージを送信した送信ノードは、メインメッセージのデータフィールドおよびCANIDと、CANIDに対応するカウンタ値とからMACを生成して、MACメッセージとして送信する。メインメッセージを受信した受信ノードは、メインメッセージに含まれるデータフィールドおよびCANIDと、CANIDに対応するカウンタ値とからMACを生成して、MACメッセージに含まれるMACと一致するか判断する。これにより、メインメッセージが正当なものであるか否か検証できる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、通信システムにおけるメッセージ認証技術に関する。
【背景技術】
【0002】
車載ネットワークとしてCAN(Controller Area Network)が採用されている。この
CANにはOBD2ポートと呼ばれる診断用のポートが設けられており、ネットワーク上を流れるメッセージを受信したり、ネットワーク上にメッセージを送信したりすることができる。
【0003】
OBD2ポートはメッセージのフィルタリング処理などを行わない直づけのインタフェースであるため、OBD2ポートに不正機器が接続された場合は、リプレイ攻撃が行われる危険性がある。ここで述べるリプレイ攻撃とは、ネットワーク上を流れるメッセージを盗聴してその内容を記憶しておき、記憶したメッセージを再送することで不正な動作を引き起こす攻撃とする。なお、不正機器はメッセージの内容が分からなくても、メッセージ送信後の車両の挙動が分かれば、そのメッセージの意図も把握できる。
【0004】
このようなリプレイ攻撃を防ぐ技術として、CANメッセージにメッセージ認証コード(MAC)を埋め込む技術が提案されている(非特許文献1)。この提案では、図11に示すように、N番目からN+3番目の4つのCANメッセージに含まれるデータフィールド(64×4=256ビット)から64ビットのMACを生成し、16ビットずつに4分割して、N+4番目からN+7番目の4つのCANメッセージのCRCフィールド(16ビット)に埋め込んで送信している。
【0005】
受信側では、N+4番目からN+7番目のCANメッセージのCRCフィールドからMACを取得し、N番目からN+3番目のデータフィールドから生成されるMACと一致するか否かによってN番目からN+3番目のCANメッセージが正当であるか判断する。CRCフィールドから得られるMACと、データフィールドから算出されるMACが異なる場合は、N番目からN+3番目のCANメッセージのいずれかが不正であることが判断できる。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】D. K. Nilsson, U. E. Larson, E. Jonsson, "Efficient In-Vehicle Delayed Data Authentication Based on Compound Message Authentication Codes", IEEE 68th VTC 2008-Fall, 2008, 1-5.
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、非特許文献1に示す方法では、以下のような問題がある。第1に、N番目のメッセージの正当性を検証するためにN+7番目までのメッセージを受信する必要があるので、メッセージの検証に時間を要するという問題がある。
【0008】
第2の問題点は、非特許文献1に示す方法は標準化されているCANのプロトコルを変更している点である。CRCフィールドは本来、データフィールド等のデータ内容の誤り検出のためのものである。CANコントローラの処理をハードウェアによって実現している現状を考慮すると、プロトコルの変更は現実的ではない。したがって、この第2の問題点はより深刻なものである。
【0009】
本発明は、CANプロトコルに適用可能な方式でメッセージの認証を可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明に係るメッセージ認証方法では、メインメッセージと、メインメッセージのメッセージ認証コード(Message Authentication Code: MAC)を含むMACメッセージを
送信する。受信側では、メインメッセージから算出されるMACとMACメッセージに含まれるMACが一致すればメインメッセージが正当なものであり、不一致であれば不正なものであると判断できる。本発明においては、以下のようにしてMACを生成する点に特徴がある。
【0011】
通信システム内の各ノードは、メインメッセージがネットワーク上を伝送する度にインクリメントするカウンタ値を記憶する。メインメッセージを送信するノードは、その送信に際してカウンタ値をインクリメントする。送信ノード以外は、ネットワーク上をメインメッセージが伝送したことを検知するとカウンタ値をインクリメントする。なお、カウンタ値の初期値は0である必要はなく任意であって良いが、各ノードで共通とする必要がある。また、インクリメントは、必ずしもカウンタ値を1ずつ増分させるものでなくても良い。各ノードが共通のルールに従ってカウンタ値を変化させる方式、すなわち全てのノードでカウンタ値が共通となる方式であれば、メインメッセージ送信の度に任意の方式に従ってカウンタ値を変化させる方式であっても構わない。
【0012】
メインメッセージの送信ノードは、このカウンタ値を利用してMACメッセージに含めるMACを生成する。より具体的には、メインメッセージとカウンタ値に所定のアルゴリズムを適用してMACを生成する。この所定のアルゴリズムは、例えば共通鍵暗号による暗号アルゴリズムであったり、暗号鍵の事前共有を必要とする鍵付きハッシュ関数などであったりすることができる。なお、MACを生成する際にメインメッセージの全データビットを利用する必要はなく、その一部のみとカウンタ値からMACを生成しても良い。
【0013】
メインメッセージの受信ノードも同様に、受信したメインメッセージとカウンタ値に所定の暗号アルゴリズムを適用してMACを生成する。
【0014】
このような本発明によると、CANプロトコルに適用可能な方式で、MACによってメインメッセージの正当性を検証することができる。たとえば、不正機器が以前に受信したメインメッセージと対応するMACメッセージを送信した場合であっても、再送時にはカウンタ値が変化しているため正しいMACも変化している。したがって、不正機器がリプレイ攻撃を行っても、受信ノードにおいてメインメッセージが不正であることを検知できる。
【0015】
また、本発明では、メインメッセージは平文の状態でネットワーク上を伝送するため不正機器がメインメッセージを知ることができるが、カウンタ値はネットワーク上を伝送せず不正機器には未知である。したがって、メインメッセージおよびMACメッセージを盗聴しても、そこからMACを生成するための暗号アルゴリズムや暗号鍵を推測できないという利点もある。
【0016】
本発明において、メインメッセージは、メッセージIDとデータフィールドを含むものであることができる。この場合、メインメッセージのカウンタ値は、メッセージIDごとに個別にカウントすることが好ましい。そして、MACの生成は、メインメッセージに含まれるメッセージIDおよびデータフィールドと、このメッセージIDに対応するカウンタ値とに基づいて生成することが好ましい。なお、このような場合であってもデータフィ
ールドとカウンタ値のみからMACを生成しても構わない。
【0017】
また、本発明において、MACは、メッセージID、データフィールドおよびメッセージIDに対応するカウンタに共通鍵暗号アルゴリズムを作用させて生成されるビット列から、所定のビットを抽出して生成することが好ましい。この方式は、共通鍵暗号アルゴリズムから得られるビット列が、MACメッセージに格納可能なビット数を超える場合に有効である。なお、ビットの抽出方法は、各ノードで共通していれば任意の方法であって良い。例えば、共通鍵暗号アルゴリズムから得られるビット列から、前半部分のビット列を抽出したり、後半部分のビット列を抽出したり、奇数番目のビット列を抽出したり、偶数番目のビット列を抽出したりすることができる。
【0018】
また、本発明において、カウンタ値の初期化はマスタノードからの通知によって行うことが好ましい。すなわち、ネットワーク上の1つのノードがマスタノードとなって、各メッセージIDに対応するカウンタ値の初期値を、通信システム起動時にブロードキャストによって通知することが好ましい。
【0019】
このようにすれば、各ノードが不揮発性のメモリを有していなくても、全てのノードでカウンタ値を同一とすることができる。
【0020】
カウンタ値の初期化は、より具体的には、以下のようにして行うことが好ましい。すなわち、マスタノードは、メッセージIDごとに乱数値を生成して、ブロードキャスト送信する。各ノードは、ブロードキャスト送信された乱数値を取得して、この乱数値に対して共通鍵暗号アルゴリズムを作用させる。そして、得られた値をカウンタ値の初期値として採用する。
【0021】
このようにすれば、カウンタ値の初期値が、ネットワーク上を直接流れることがないため、不正機器はどのような値でカウンタ値が初期化されたか知ることができない。初期値がわかれば、任意の時点におけるカウンタ値を知ることが可能となり、メインメッセージとMACメッセージから暗号鍵を解読することも可能となり得るが、カウンタの初期値を秘匿化することでこのような危険性も回避できる。
【0022】
なお、本発明は、上記処理の少なくとも一部を含むメッセージ認証方法として捉えることができる。また、本発明は、この方法を実行するコンピュータプログラムとして捉えることもできる。また、本発明は、上記処理の少なくとも一部を実行する通信システムおよび、通信システムを構成する通信装置として捉えることができる。上記手段および処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【発明の効果】
【0023】
本発明によれば、CANプロトコルに適用可能な方式でメッセージの認証が可能となる。
【図面の簡単な説明】
【0024】
【図1】CANプロトコルにおけるデータフレームのフォーマットを示す図。
【図2】本実施形態におけるメッセージ検証処理の概要を説明する図。
【図3】本実施形態におけるMAC算出方法の概要を説明する図。
【図4】本実施形態におけるECUの機能構成を示す図。
【図5】メッセージを送信するECUにおける各機能部の連携を示す図。
【図6】メインメッセージを送信するECUにおける処理の流れを示すフローチャート。
【図7】メッセージを受信するECUにおける各機能部の連携を示す図。
【図8】メインメッセージを受信するECUにおける処理の流れを示すフローチャート。
【図9】カウンタ初期化メッセージを受信するECUにおける各機能部の連携を示す図。
【図10】(a)カウンタ初期化メッセージを送信するマスタノードにおける処理の流れを示すフローチャートと、(b)カウンタ初期化メッセージを受信する一般ノードにおける処理の流れを示すフローチャート。
【図11】非特許文献1におけるメッセージ検証方法を説明する図。
【発明を実施するための形態】
【0025】
本実施形態の説明の前にCAN(Controller Area Network)プロトコルの概要につい
て説明する。CANは相互接続された機器間のデータ伝送に用いられる通信プロトコルであり、例えば自動車内の各種ECU(Electronic Control Unit)間の通信などに用いら
れる。
【0026】
図1は、CANに用いられるデータフレームのフォーマットを示した図である。データフレームは、CAN ID(101)、データフィールド(102)、CRCフィールド(103)などを含む。図示した以外のフィールドについての説明は割愛する。CANではCAN IDを用いてメッセージのアドレッシングが行われる。すなわち、CAN IDによって、このメッセージがどのようなデータであるのかを示し、受信側はCAN IDを参照して自ノードが処理する必要のあるデータか否かを判断する。データフィールドは(最大で)64ビットのフィールドであり、この中にデータの内容が格納される。CRCフィールドは、データフィールドなどから計算されるCRCコードが格納され、通信に伴うビット落ちを検出可能とする。
【0027】
以上のように、CANにおいては、メッセージに送信元や宛先を示すIDは付与されず、CAN IDによってデータの内容や受信ノードが指示される。
【0028】
本実施形態では、CANネットワークに本発明を適用して、メッセージの正当性検証を行う。以下、図面を参照しながら本実施形態について説明する。
【0029】
(概要)
図2は、本発明の概要を示す図である。ネットワークに接続されたECU間でデータを通信する場合には次のようにして行う。すなわち、通信すべきデータを含むメッセージ(以下、メインメッセージ)を送信した後に、メインメッセージのデータフィールドに対するMAC(メッセージ認証コード)を含むメッセージ(以下、MACメッセージ)を送信する。MACによるメッセージ認証自体は既知な仕組みであり、本実施形態においても、受信したメインメッセージのデータフィールドから得られるMACと受信したMACメッセージに含まれるMACが一致するか否かによって、受信側においてメインメッセージの正当性を検証する。
【0030】
本実施形態においては、図3(A)に示すように、それぞれのECUにおいて各CAN
IDのメッセージが送信された回数をカウントして記憶する。そして、図3(B)に示すように、メインメッセージのデータフィールドと、CAN IDと、このCAN IDに対応するカウンタ値とを使ってMACを求める点に特徴がある。MACの算出は、ハッシュ関数を使う方式(HMAC)や、ブロック暗号アルゴリズムを使う方式(CMACなど)の任意の既知の手法によって行えば良い。本実施形態では、共通鍵ブロック暗号の一つであるAES暗号アルゴリズムによってMACを求める。AESでは出力が少なくとも128ビットになるが、MACが格納されるデータフィールドは64ビットなので、128ビットの出力から所定の64ビットを抽出してMACとして利用する。なお共通鍵暗号
アルゴリズムの中には64ビットを出力可能なものも存在し、そのような共通鍵暗号アルゴリズムを採用する際には上記の抽出作業は不要である。
【0031】
本実施形態においては、各ECUがそれぞれCAN IDごとにメッセージ送信回数をカウントしているため、各CAN IDのカウンタ値は全ECUにおいて共通となる。したがって、受信側ECUにおいても、メインメッセージに含まれるデータフィールドとCAN ID、および自ノードが記憶しているカウンタ値からMACを求めることができる。そして、このようにして求めたMACとMACメッセージに含まれるMACが一致するか否かによって、メインメッセージの正当性を検証可能である。
【0032】
本実施形態の効果を簡単に説明すると、第1にCANプロトコルを変更していないので、既存システムとの互換性があることを挙げられる。例えば、高速処理および低価格化を目的としてハードウェア化されているCANコントローラを利用することができる。第2に、メッセージ送信の度にカウンタ値が更新されるので、不正機器が以前に受信したメッセージをそのまま送信しても、受信側において不正なメッセージであることが検証可能である。第3に、カウンタ値がネットワーク上を流れないため、メインメッセージとMACメッセージを受信して暗号鍵を解読する試みも事実上不可能である。第4に、メインメッセージ送信直後に対応するMACメッセージを送信できるので、即座にメインメッセージの正当性検証が可能である。
【0033】
(構成)
以下では、より詳細に本実施形態について説明する。図4は、本実施形態におけるECUが有する機能部を示す図である。ECUは、CPU、RAM、ROM、センサやアクチュエータとのインタフェースなどから構成されており、ROMに格納されたプログラムをCPUが実行することで、図4に示す各機能部が実現される。図4に示した機能部は、メッセージ送信およびメッセージ受信に必要な機能全てが示されており、処理内容に応じて適切な機能部が選択的に実行される。
【0034】
なお、本実施形態において、全てのメッセージについてMACによるメッセージ認証を行う必要はない。すなわち、重要なメッセージについてのみメッセージ認証を行っても良い。そして、メッセージ認証が必要ないメッセージのみを送受信するECUについては、図4に示したようなメッセージ認証のための各機能部は不要である。
【0035】
図4に示した各機能部の詳細については、メッセージ送受信処理とともに説明を行うが、いくつかの機能部については、ここで説明を加える。
【0036】
暗号鍵記憶部5には、CANネットワーク内で共通な暗号鍵(共通鍵)が記憶される。この暗号鍵は、外部に漏洩しないことが必要である。本実施形態では、AES暗号アルゴリズムを採用し鍵長は128ビットとする。もちろん、鍵長はより長くても良いし、AES以外の暗号アルゴリズムを採用しても構わない。
【0037】
カウンタ記憶部3には、CAN IDごとにネットワーク上をメッセージが伝送された回数を表すカウンタ値が格納される。CANはバス型アーキテクチャであるため、ネットワーク上を伝送されるメッセージを全てのECUが参照可能であり、各ECUにおいてカウンタの更新が可能である。なお、それぞれのECUは、自身が送受信する可能性があるCAN IDについてのみカウンタを更新・記憶すれば十分である。
【0038】
なお、本実施形態においてカウンタは53ビットとする。これは、暗号アルゴリズムへの入力が128ビット必要なので、データフィールド(64ビット)とCAN ID(11ビット)と合わせて128ビットとするためである。ただし、暗号アルゴリズムへの入
力はパディングを行えば良いので、カウンタのビット数はこれより少なくても問題ない。例えば、CANの仕様にしたがって20年間継続的に最大限の速度でメッセージを送信したとしても、240個程度のメッセージしか送信できないので、カウンタ値は40ビット程度としても良い。もちろんカウンタ値の繰り返しを許容しても良く、その場合はより少ないビット数であっても構わない。
【0039】
(メッセージ送信時処理)
まず、メインメッセージを送信するECUが行う処理を、図5および図6を参照しつつ説明する。図5は、送信ECUにおける各機能部の連携を示す図である。図6は、メインメッセージ送信時の処理の流れを示すフローチャートである。
【0040】
メインメッセージ生成部9は、CAN IDおよびデータフィールドを含むメインメッセージを生成してCANに送信する。図6のフローチャートには、メインメッセージを送信した後の処理の流れが示されている。メインメッセージを送信すると、CAN ID抽出部6がメインメッセージ生成部9から送信したメインメッセージのCAN IDを抽出する(S101)。CAN ID抽出部6は、メインメッセージのCAN IDに対応するカウンタ値をカウンタ記憶部3から読み取り(S102)、カウンタを1つ増加させてカウンタ記憶部3を更新する(S103)。抽出されたCAN IDおよび更新後のカウンタ値は、MAC生成部4に送られる。
【0041】
また、データフィールド抽出部7は、メインメッセージ生成部9が送信したメインメッセージのデータフィールドを抽出する(S104)。抽出されたデータフィールドは、MAC生成部4に送られる。
【0042】
MAC生成部4は、暗号鍵記憶部5から暗号鍵(共通鍵)を取り出し(S105)、この暗号鍵を用いて、CAN ID、最新のカウンタ値、送信済みのデータフィールドからMACを生成する(S106)。なお、上述したように本実施形態ではAESを採用しているため暗号アルゴリズムの出力は128ビットであるが、CANのデータフレームが送れるデータフィールドは64ビットである。したがって、システム内で共通するルールに従って出力の128ビットから64ビットを抽出する。例えば、前半64ビットや後半64ビットを採用しても良いし、奇数ビットや偶数ビットを採用しても良い。さらには、CAN IDが奇数か偶数かによって、前半64ビットを採用するか後半64ビットを採用するか、あるいは奇数ビットを採用するか偶数ビットを採用するかなどを決めても構わない。
【0043】
MAC生成部4が生成したMACはMACメッセージ生成部1へ送られ(S107)、MACメッセージ生成部1がMACをCANメッセージ(MACメッセージ)に加工してCANに送信する。すなわち、計算された64ビットのMACがMACメッセージのデータフィールドに格納される。また、MACメッセージのCAN IDは、メインメッセージのCAN IDに対応するIDが用いられる。メインメッセージとMACメッセージのCAN IDの対応によって、受信側ECUでは、MACメッセージを受信した場合に対応するCAN IDを有するメインメッセージに対するMACであることが把握できる。
【0044】
(メッセージ受信時処理)
次に、メインメッセージを受信してその検証を行うECUの処理を、図7および図8を参照しつつ説明する。図7は、受信ECUにおける各機能部の連携を示す図である。図8は、メインメッセージ受信時の処理の流れを示すフローチャートである。
【0045】
ECUがメインメッセージを受信すると、CAN ID抽出部6がCANメッセージ解析部8を経由して、受信したメインメッセージのCAN IDを抽出する(S201)。
なお、CAN IDごとにメッセージの内容が規定されているため、CAN IDを参照することでそのメッセージがMACによる認証を必要とするものか否かも判断できる。受信したメインメッセージがMACによる認証を必要としないものであれば、以下の処理は行う必要がない。また、受信したメッセージが自ノードで処理する必要がないものである場合も、以下の処理を行う必要がない。
【0046】
受信したメインメッセージは自ノードが処理する必要があるものであり、かつMACによるメッセージ認証が行われるものであると、抽出したCAN IDから判断される場合には以下の処理が行われる。CAN ID抽出部6は、抽出したCAN IDに対応するカウンタ値をカウンタ記憶部3から読み取り(S202)、カウンタを1つ増加させてカウンタ記憶部3を更新する(S203)。抽出されたCAN IDおよび更新後のカウンタ値は、MAC生成部4に送られる。
【0047】
また、データフィールド抽出部7は、CANメッセージ解析部8を経由して、受信したメインメッセージのデータフィールドを抽出する(S204)。抽出されたデータフィールドは、MAC生成部4に送られる。
【0048】
MAC生成部4は、暗号鍵記憶部5から暗号鍵(共通鍵)を取り出し(S205)、この暗号鍵を用いて、受信したメッセージのデータフィールド、CAN IDおよびCAN
IDに対応する最新のカウンタ値からMACを生成する(S206)。MACの生成方法は、メッセージ送信の際の方法と同じであるため詳細な説明は省略する。MAC生成部4が生成したMACは、MAC比較部2へと送られる(S207)。
【0049】
受信側ECUは、メインメッセージに対応するMACメッセージをCANメッセージ解析部8が受信するのを待つ(S208〜S209)。上述のように、メインメッセージとそのMACメッセージとはCAN IDが対応付けられているので、CANメッセージ解析部8は、メインメッセージのCAN IDに対応するCAN IDを有するメッセージが到着するのを待つ。
【0050】
メインメッセージに対応するMACメッセージが到着すると(S209−YES)、データフィールド抽出部7が、CANメッセージ解析部8を経由して、MACメッセージからMACを抽出する(S211)。上述したように、MACはMACメッセージのデータフィールド(64ビット)に格納されている。データフィールド抽出部7が抽出したMACは、MAC比較部2へと送られる(S212)。
【0051】
MAC比較部2は、MAC生成部4が生成したMACと、受信したMACメッセージから抽出されたMACとを比較する(S213)。これら2つのMACが同じであれば(S214−YES)、メインメッセージが正当なものであることが分かるので、受信ECUはメインメッセージを処理する(S216)。一方、これら2つのMACが異なるものであれば(S214−NO)、メインメッセージが不正なものであることが分かるので、受信ECUはメインメッセージを処理しない(S215)。なお、不正なメインメッセージを受信した後の処理は種々考えられるが、どのような対応を行っても構わない。
【0052】
(カウンタ初期化処理)
次に、CAN IDごとのカウンタ値の初期化について説明する。カウンタ値はシステム内の全ECUで共通することが必要である。システム起動中はネットワークを伝送されるメッセージをカウントすることで全ECUにてカウンタを同一とすることができるが、システム起動時においてもカウンタ値を一致させる必要がある。このために、全ECUに読み書き可能な不揮発性メモリを設け、電源オフ時のカウンタ値を記憶し、システム再開時にこの不揮発性メモリからカウンタ値を読み込んで使用することが考えられる。しかし
ながら、本実施形態では、全ECUに不揮発性メモリを設けずにシステム開始時のカウンタ値を、以下のようにして一致させる。
【0053】
本実施形態においては、カウンタの初期化処理のために、ネットワーク内の任意のECUをカウンタ初期化用のECU(以下、マスタノードともいう)として利用する。マスタノードは、システム開始時に全てのCAN ID(メッセージ認証が必要なメッセージに対応するCAN IDという意味。以下同じ。)についてカウンタ値の初期値を全ECUに通知する処理を行う。
【0054】
図9は、マスタノードからカウンタ値の初期化メッセージを受信した際の、一般ノードの各機能部の連携を示した図である。図10(a)は、カウンタ値の初期化メッセージを送信するマスタノードの処理の流れを示すフローチャートである。図10(b)は、初期化メッセージを受信した一般ノードの処理の流れを示すフローチャートである。
【0055】
まず、マスタノードが行う処理について図10(a)を参照して説明する。マスタノードは、システムが起動すると、CAN IDを選択して(S301)、そのCAN IDのカウンタ初期値を決定するための乱数を発生させる(S302)。そして、カウンタを初期化するCAN IDと関連づけて、カウンタ初期化メッセージとしてこの乱数を送信する(S303)。マスタノードでは、全てのCAN IDについて、このようなカウンタ初期化メッセージを送信する。
【0056】
次に、一般ノードが行う処理を図9および図10(b)を参照して説明する。一般ノードは、カウンタ初期化メッセージを受信した場合に(S311)、そのメッセージが自ノードで送受信する(すなわち、カウンタ値を記憶する必要がある)CAN IDに対するカウンタ初期化メッセージであれば以下の処理を行う。
【0057】
データフィールド抽出部7が、カウンタ初期化メッセージのデータフィールドから、マスタノードが生成した乱数値を取得する(S312)。そして、この乱数値はMAC生成部4に送られる。そして、MAC生成部4に含まれる暗号アルゴリズムを使用して、受信した乱数値を暗号鍵記憶部5内の暗号鍵(共通鍵)を用いて暗号化する(S313)。そして、得られた数値をこのCAN ID用のカウンタの初期値として、カウンタ記憶部3に記憶する(S314)。なお、暗号化処理の出力のビット数(128ビット)とカウンタのビット数(53ビット)は一致していないので、例えば前半53ビットを採用したり後半53ビットを採用したりするなど、システム内で共通のルールに従ってカウンタの初期値を決定する。
【0058】
このようにすることで、カウンタを記憶するための不揮発性メモリを設ける必要なく、またカウンタ値自体を平文でネットワーク上を伝送させることなく、システム起動時に全ECUにおいてカウンタ値を共通なものとすることができる。
【0059】
(本実施形態の作用・効果)
本実施形態によれば、メッセージ認証コード(MAC)を用いてメインメッセージの検証を行うことで、メインメッセージが正規なものであるか、不正機器から送信された不正なものであるかを判断することができる。メッセージ送信の度に、MAC算出に用いられるカウンタ値が変化するので、以前に受信したメッセージを再送するリプレイ攻撃を行った場合には、受信側ECUでMACの相違により不正攻撃を検知することができる。
【0060】
また、本実施形態によるMACによるメッセージ検証処理は、標準化されているCANのプロトコルにしたがった設計となっているため、既存システムへの影響を小さくすることができる。たとえば、CANメッセージを処理するCANコントローラは、高速処理お
よび低価格化を目的としてハードウェア化されているが、本実施形態ではこのような既存のCANコントローラを用いて実装できる。
【0061】
また、本実施形態においては、MACを算出するためにメインメッセージのデータフィールドとCAN IDとカウンタ値を利用している。ここで、データフィールドおよびCAN IDは平文でネットワーク上を流れるが、カウンタ値自体はネットワーク上を流れない。暗号化前のテキストと暗号化後のテキストが全て分かれば、多くのメッセージを受信することで暗号鍵を解読することが可能となるが、本実施形態では不正機器はカウンタ値を得られないため暗号鍵の解読も不可能となる。
【0062】
また、メインメッセージを送信した後、即座に対応するMACメッセージを送信できる設計となっているため、受信ECU側ではメインメッセージの正当性を即座に判断することができる。
【0063】
(変形例)
本発明は、以上の実施形態に限定されることなく、種々の変形が可能であることは明らかであろう。例えば、採用する暗号アルゴリズムや鍵長などは任意のものであって良いし、カウンタ値のビット長なども安全性に対する要求とコストに対する要求を勘案して任意の長さにすることができる。また、上記ではCANに対して本発明を適用した実施例を説明したが、CAN以外であってもCANと類似するプロトコルにしたがった通信システムであれば本発明を適用できる。
【0064】
また、上記の実施形態においてはメインメッセージに含まれるCAN IDとデータフィールドと、CAN IDに対応するカウンタ値からMACを生成しているが、メインメッセージのデータフィールドとカウンタ値のみからMACを生成するようにしても良い。このようにしても、メインメッセージがリプレイ攻撃などによって送信されたものであるか、正当なものであるかの判断は可能である。
【0065】
また、上記の説明においては、メインメッセージ受信時および送信時にカウンタ値をインクリメントし、インクリメント後のカウンタ値を使ってMACを算出しているが、インクリメント前のカウンタ値を用いてMACを算出しても構わない。また、カウンタ値のインクリメントは1ずつの増分であるとして説明したが、全ECUで共通のルールが採用されれば必ずしも1ずつ増分する必要はなく、それ以外の値ずつ増分させても構わない。
【0066】
また、上記の実施形態においてはMACによってメインメッセージが正当であることを検証してからメインメッセージの処理を行っているが、処理のリアルタイム性が要求されるメッセージについては、まずメインメッセージの処理を行ってからその正当性を検証しても構わない。この場合、メッセージが不正なものであると判定された場合には、それ以降は該当するCAN IDを有するメッセージを無視したりすればよい。
【符号の説明】
【0067】
1 MACメッセージ生成部
2 MAC比較部
3 カウンタ記憶部
4 MAC生成部
5 暗号鍵記憶部
6 CAN ID抽出部
7 データフィールド抽出部
8 CANメッセージ解析部
9 CANメッセージ生成部
【技術分野】
【0001】
本発明は、通信システムにおけるメッセージ認証技術に関する。
【背景技術】
【0002】
車載ネットワークとしてCAN(Controller Area Network)が採用されている。この
CANにはOBD2ポートと呼ばれる診断用のポートが設けられており、ネットワーク上を流れるメッセージを受信したり、ネットワーク上にメッセージを送信したりすることができる。
【0003】
OBD2ポートはメッセージのフィルタリング処理などを行わない直づけのインタフェースであるため、OBD2ポートに不正機器が接続された場合は、リプレイ攻撃が行われる危険性がある。ここで述べるリプレイ攻撃とは、ネットワーク上を流れるメッセージを盗聴してその内容を記憶しておき、記憶したメッセージを再送することで不正な動作を引き起こす攻撃とする。なお、不正機器はメッセージの内容が分からなくても、メッセージ送信後の車両の挙動が分かれば、そのメッセージの意図も把握できる。
【0004】
このようなリプレイ攻撃を防ぐ技術として、CANメッセージにメッセージ認証コード(MAC)を埋め込む技術が提案されている(非特許文献1)。この提案では、図11に示すように、N番目からN+3番目の4つのCANメッセージに含まれるデータフィールド(64×4=256ビット)から64ビットのMACを生成し、16ビットずつに4分割して、N+4番目からN+7番目の4つのCANメッセージのCRCフィールド(16ビット)に埋め込んで送信している。
【0005】
受信側では、N+4番目からN+7番目のCANメッセージのCRCフィールドからMACを取得し、N番目からN+3番目のデータフィールドから生成されるMACと一致するか否かによってN番目からN+3番目のCANメッセージが正当であるか判断する。CRCフィールドから得られるMACと、データフィールドから算出されるMACが異なる場合は、N番目からN+3番目のCANメッセージのいずれかが不正であることが判断できる。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】D. K. Nilsson, U. E. Larson, E. Jonsson, "Efficient In-Vehicle Delayed Data Authentication Based on Compound Message Authentication Codes", IEEE 68th VTC 2008-Fall, 2008, 1-5.
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、非特許文献1に示す方法では、以下のような問題がある。第1に、N番目のメッセージの正当性を検証するためにN+7番目までのメッセージを受信する必要があるので、メッセージの検証に時間を要するという問題がある。
【0008】
第2の問題点は、非特許文献1に示す方法は標準化されているCANのプロトコルを変更している点である。CRCフィールドは本来、データフィールド等のデータ内容の誤り検出のためのものである。CANコントローラの処理をハードウェアによって実現している現状を考慮すると、プロトコルの変更は現実的ではない。したがって、この第2の問題点はより深刻なものである。
【0009】
本発明は、CANプロトコルに適用可能な方式でメッセージの認証を可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明に係るメッセージ認証方法では、メインメッセージと、メインメッセージのメッセージ認証コード(Message Authentication Code: MAC)を含むMACメッセージを
送信する。受信側では、メインメッセージから算出されるMACとMACメッセージに含まれるMACが一致すればメインメッセージが正当なものであり、不一致であれば不正なものであると判断できる。本発明においては、以下のようにしてMACを生成する点に特徴がある。
【0011】
通信システム内の各ノードは、メインメッセージがネットワーク上を伝送する度にインクリメントするカウンタ値を記憶する。メインメッセージを送信するノードは、その送信に際してカウンタ値をインクリメントする。送信ノード以外は、ネットワーク上をメインメッセージが伝送したことを検知するとカウンタ値をインクリメントする。なお、カウンタ値の初期値は0である必要はなく任意であって良いが、各ノードで共通とする必要がある。また、インクリメントは、必ずしもカウンタ値を1ずつ増分させるものでなくても良い。各ノードが共通のルールに従ってカウンタ値を変化させる方式、すなわち全てのノードでカウンタ値が共通となる方式であれば、メインメッセージ送信の度に任意の方式に従ってカウンタ値を変化させる方式であっても構わない。
【0012】
メインメッセージの送信ノードは、このカウンタ値を利用してMACメッセージに含めるMACを生成する。より具体的には、メインメッセージとカウンタ値に所定のアルゴリズムを適用してMACを生成する。この所定のアルゴリズムは、例えば共通鍵暗号による暗号アルゴリズムであったり、暗号鍵の事前共有を必要とする鍵付きハッシュ関数などであったりすることができる。なお、MACを生成する際にメインメッセージの全データビットを利用する必要はなく、その一部のみとカウンタ値からMACを生成しても良い。
【0013】
メインメッセージの受信ノードも同様に、受信したメインメッセージとカウンタ値に所定の暗号アルゴリズムを適用してMACを生成する。
【0014】
このような本発明によると、CANプロトコルに適用可能な方式で、MACによってメインメッセージの正当性を検証することができる。たとえば、不正機器が以前に受信したメインメッセージと対応するMACメッセージを送信した場合であっても、再送時にはカウンタ値が変化しているため正しいMACも変化している。したがって、不正機器がリプレイ攻撃を行っても、受信ノードにおいてメインメッセージが不正であることを検知できる。
【0015】
また、本発明では、メインメッセージは平文の状態でネットワーク上を伝送するため不正機器がメインメッセージを知ることができるが、カウンタ値はネットワーク上を伝送せず不正機器には未知である。したがって、メインメッセージおよびMACメッセージを盗聴しても、そこからMACを生成するための暗号アルゴリズムや暗号鍵を推測できないという利点もある。
【0016】
本発明において、メインメッセージは、メッセージIDとデータフィールドを含むものであることができる。この場合、メインメッセージのカウンタ値は、メッセージIDごとに個別にカウントすることが好ましい。そして、MACの生成は、メインメッセージに含まれるメッセージIDおよびデータフィールドと、このメッセージIDに対応するカウンタ値とに基づいて生成することが好ましい。なお、このような場合であってもデータフィ
ールドとカウンタ値のみからMACを生成しても構わない。
【0017】
また、本発明において、MACは、メッセージID、データフィールドおよびメッセージIDに対応するカウンタに共通鍵暗号アルゴリズムを作用させて生成されるビット列から、所定のビットを抽出して生成することが好ましい。この方式は、共通鍵暗号アルゴリズムから得られるビット列が、MACメッセージに格納可能なビット数を超える場合に有効である。なお、ビットの抽出方法は、各ノードで共通していれば任意の方法であって良い。例えば、共通鍵暗号アルゴリズムから得られるビット列から、前半部分のビット列を抽出したり、後半部分のビット列を抽出したり、奇数番目のビット列を抽出したり、偶数番目のビット列を抽出したりすることができる。
【0018】
また、本発明において、カウンタ値の初期化はマスタノードからの通知によって行うことが好ましい。すなわち、ネットワーク上の1つのノードがマスタノードとなって、各メッセージIDに対応するカウンタ値の初期値を、通信システム起動時にブロードキャストによって通知することが好ましい。
【0019】
このようにすれば、各ノードが不揮発性のメモリを有していなくても、全てのノードでカウンタ値を同一とすることができる。
【0020】
カウンタ値の初期化は、より具体的には、以下のようにして行うことが好ましい。すなわち、マスタノードは、メッセージIDごとに乱数値を生成して、ブロードキャスト送信する。各ノードは、ブロードキャスト送信された乱数値を取得して、この乱数値に対して共通鍵暗号アルゴリズムを作用させる。そして、得られた値をカウンタ値の初期値として採用する。
【0021】
このようにすれば、カウンタ値の初期値が、ネットワーク上を直接流れることがないため、不正機器はどのような値でカウンタ値が初期化されたか知ることができない。初期値がわかれば、任意の時点におけるカウンタ値を知ることが可能となり、メインメッセージとMACメッセージから暗号鍵を解読することも可能となり得るが、カウンタの初期値を秘匿化することでこのような危険性も回避できる。
【0022】
なお、本発明は、上記処理の少なくとも一部を含むメッセージ認証方法として捉えることができる。また、本発明は、この方法を実行するコンピュータプログラムとして捉えることもできる。また、本発明は、上記処理の少なくとも一部を実行する通信システムおよび、通信システムを構成する通信装置として捉えることができる。上記手段および処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【発明の効果】
【0023】
本発明によれば、CANプロトコルに適用可能な方式でメッセージの認証が可能となる。
【図面の簡単な説明】
【0024】
【図1】CANプロトコルにおけるデータフレームのフォーマットを示す図。
【図2】本実施形態におけるメッセージ検証処理の概要を説明する図。
【図3】本実施形態におけるMAC算出方法の概要を説明する図。
【図4】本実施形態におけるECUの機能構成を示す図。
【図5】メッセージを送信するECUにおける各機能部の連携を示す図。
【図6】メインメッセージを送信するECUにおける処理の流れを示すフローチャート。
【図7】メッセージを受信するECUにおける各機能部の連携を示す図。
【図8】メインメッセージを受信するECUにおける処理の流れを示すフローチャート。
【図9】カウンタ初期化メッセージを受信するECUにおける各機能部の連携を示す図。
【図10】(a)カウンタ初期化メッセージを送信するマスタノードにおける処理の流れを示すフローチャートと、(b)カウンタ初期化メッセージを受信する一般ノードにおける処理の流れを示すフローチャート。
【図11】非特許文献1におけるメッセージ検証方法を説明する図。
【発明を実施するための形態】
【0025】
本実施形態の説明の前にCAN(Controller Area Network)プロトコルの概要につい
て説明する。CANは相互接続された機器間のデータ伝送に用いられる通信プロトコルであり、例えば自動車内の各種ECU(Electronic Control Unit)間の通信などに用いら
れる。
【0026】
図1は、CANに用いられるデータフレームのフォーマットを示した図である。データフレームは、CAN ID(101)、データフィールド(102)、CRCフィールド(103)などを含む。図示した以外のフィールドについての説明は割愛する。CANではCAN IDを用いてメッセージのアドレッシングが行われる。すなわち、CAN IDによって、このメッセージがどのようなデータであるのかを示し、受信側はCAN IDを参照して自ノードが処理する必要のあるデータか否かを判断する。データフィールドは(最大で)64ビットのフィールドであり、この中にデータの内容が格納される。CRCフィールドは、データフィールドなどから計算されるCRCコードが格納され、通信に伴うビット落ちを検出可能とする。
【0027】
以上のように、CANにおいては、メッセージに送信元や宛先を示すIDは付与されず、CAN IDによってデータの内容や受信ノードが指示される。
【0028】
本実施形態では、CANネットワークに本発明を適用して、メッセージの正当性検証を行う。以下、図面を参照しながら本実施形態について説明する。
【0029】
(概要)
図2は、本発明の概要を示す図である。ネットワークに接続されたECU間でデータを通信する場合には次のようにして行う。すなわち、通信すべきデータを含むメッセージ(以下、メインメッセージ)を送信した後に、メインメッセージのデータフィールドに対するMAC(メッセージ認証コード)を含むメッセージ(以下、MACメッセージ)を送信する。MACによるメッセージ認証自体は既知な仕組みであり、本実施形態においても、受信したメインメッセージのデータフィールドから得られるMACと受信したMACメッセージに含まれるMACが一致するか否かによって、受信側においてメインメッセージの正当性を検証する。
【0030】
本実施形態においては、図3(A)に示すように、それぞれのECUにおいて各CAN
IDのメッセージが送信された回数をカウントして記憶する。そして、図3(B)に示すように、メインメッセージのデータフィールドと、CAN IDと、このCAN IDに対応するカウンタ値とを使ってMACを求める点に特徴がある。MACの算出は、ハッシュ関数を使う方式(HMAC)や、ブロック暗号アルゴリズムを使う方式(CMACなど)の任意の既知の手法によって行えば良い。本実施形態では、共通鍵ブロック暗号の一つであるAES暗号アルゴリズムによってMACを求める。AESでは出力が少なくとも128ビットになるが、MACが格納されるデータフィールドは64ビットなので、128ビットの出力から所定の64ビットを抽出してMACとして利用する。なお共通鍵暗号
アルゴリズムの中には64ビットを出力可能なものも存在し、そのような共通鍵暗号アルゴリズムを採用する際には上記の抽出作業は不要である。
【0031】
本実施形態においては、各ECUがそれぞれCAN IDごとにメッセージ送信回数をカウントしているため、各CAN IDのカウンタ値は全ECUにおいて共通となる。したがって、受信側ECUにおいても、メインメッセージに含まれるデータフィールドとCAN ID、および自ノードが記憶しているカウンタ値からMACを求めることができる。そして、このようにして求めたMACとMACメッセージに含まれるMACが一致するか否かによって、メインメッセージの正当性を検証可能である。
【0032】
本実施形態の効果を簡単に説明すると、第1にCANプロトコルを変更していないので、既存システムとの互換性があることを挙げられる。例えば、高速処理および低価格化を目的としてハードウェア化されているCANコントローラを利用することができる。第2に、メッセージ送信の度にカウンタ値が更新されるので、不正機器が以前に受信したメッセージをそのまま送信しても、受信側において不正なメッセージであることが検証可能である。第3に、カウンタ値がネットワーク上を流れないため、メインメッセージとMACメッセージを受信して暗号鍵を解読する試みも事実上不可能である。第4に、メインメッセージ送信直後に対応するMACメッセージを送信できるので、即座にメインメッセージの正当性検証が可能である。
【0033】
(構成)
以下では、より詳細に本実施形態について説明する。図4は、本実施形態におけるECUが有する機能部を示す図である。ECUは、CPU、RAM、ROM、センサやアクチュエータとのインタフェースなどから構成されており、ROMに格納されたプログラムをCPUが実行することで、図4に示す各機能部が実現される。図4に示した機能部は、メッセージ送信およびメッセージ受信に必要な機能全てが示されており、処理内容に応じて適切な機能部が選択的に実行される。
【0034】
なお、本実施形態において、全てのメッセージについてMACによるメッセージ認証を行う必要はない。すなわち、重要なメッセージについてのみメッセージ認証を行っても良い。そして、メッセージ認証が必要ないメッセージのみを送受信するECUについては、図4に示したようなメッセージ認証のための各機能部は不要である。
【0035】
図4に示した各機能部の詳細については、メッセージ送受信処理とともに説明を行うが、いくつかの機能部については、ここで説明を加える。
【0036】
暗号鍵記憶部5には、CANネットワーク内で共通な暗号鍵(共通鍵)が記憶される。この暗号鍵は、外部に漏洩しないことが必要である。本実施形態では、AES暗号アルゴリズムを採用し鍵長は128ビットとする。もちろん、鍵長はより長くても良いし、AES以外の暗号アルゴリズムを採用しても構わない。
【0037】
カウンタ記憶部3には、CAN IDごとにネットワーク上をメッセージが伝送された回数を表すカウンタ値が格納される。CANはバス型アーキテクチャであるため、ネットワーク上を伝送されるメッセージを全てのECUが参照可能であり、各ECUにおいてカウンタの更新が可能である。なお、それぞれのECUは、自身が送受信する可能性があるCAN IDについてのみカウンタを更新・記憶すれば十分である。
【0038】
なお、本実施形態においてカウンタは53ビットとする。これは、暗号アルゴリズムへの入力が128ビット必要なので、データフィールド(64ビット)とCAN ID(11ビット)と合わせて128ビットとするためである。ただし、暗号アルゴリズムへの入
力はパディングを行えば良いので、カウンタのビット数はこれより少なくても問題ない。例えば、CANの仕様にしたがって20年間継続的に最大限の速度でメッセージを送信したとしても、240個程度のメッセージしか送信できないので、カウンタ値は40ビット程度としても良い。もちろんカウンタ値の繰り返しを許容しても良く、その場合はより少ないビット数であっても構わない。
【0039】
(メッセージ送信時処理)
まず、メインメッセージを送信するECUが行う処理を、図5および図6を参照しつつ説明する。図5は、送信ECUにおける各機能部の連携を示す図である。図6は、メインメッセージ送信時の処理の流れを示すフローチャートである。
【0040】
メインメッセージ生成部9は、CAN IDおよびデータフィールドを含むメインメッセージを生成してCANに送信する。図6のフローチャートには、メインメッセージを送信した後の処理の流れが示されている。メインメッセージを送信すると、CAN ID抽出部6がメインメッセージ生成部9から送信したメインメッセージのCAN IDを抽出する(S101)。CAN ID抽出部6は、メインメッセージのCAN IDに対応するカウンタ値をカウンタ記憶部3から読み取り(S102)、カウンタを1つ増加させてカウンタ記憶部3を更新する(S103)。抽出されたCAN IDおよび更新後のカウンタ値は、MAC生成部4に送られる。
【0041】
また、データフィールド抽出部7は、メインメッセージ生成部9が送信したメインメッセージのデータフィールドを抽出する(S104)。抽出されたデータフィールドは、MAC生成部4に送られる。
【0042】
MAC生成部4は、暗号鍵記憶部5から暗号鍵(共通鍵)を取り出し(S105)、この暗号鍵を用いて、CAN ID、最新のカウンタ値、送信済みのデータフィールドからMACを生成する(S106)。なお、上述したように本実施形態ではAESを採用しているため暗号アルゴリズムの出力は128ビットであるが、CANのデータフレームが送れるデータフィールドは64ビットである。したがって、システム内で共通するルールに従って出力の128ビットから64ビットを抽出する。例えば、前半64ビットや後半64ビットを採用しても良いし、奇数ビットや偶数ビットを採用しても良い。さらには、CAN IDが奇数か偶数かによって、前半64ビットを採用するか後半64ビットを採用するか、あるいは奇数ビットを採用するか偶数ビットを採用するかなどを決めても構わない。
【0043】
MAC生成部4が生成したMACはMACメッセージ生成部1へ送られ(S107)、MACメッセージ生成部1がMACをCANメッセージ(MACメッセージ)に加工してCANに送信する。すなわち、計算された64ビットのMACがMACメッセージのデータフィールドに格納される。また、MACメッセージのCAN IDは、メインメッセージのCAN IDに対応するIDが用いられる。メインメッセージとMACメッセージのCAN IDの対応によって、受信側ECUでは、MACメッセージを受信した場合に対応するCAN IDを有するメインメッセージに対するMACであることが把握できる。
【0044】
(メッセージ受信時処理)
次に、メインメッセージを受信してその検証を行うECUの処理を、図7および図8を参照しつつ説明する。図7は、受信ECUにおける各機能部の連携を示す図である。図8は、メインメッセージ受信時の処理の流れを示すフローチャートである。
【0045】
ECUがメインメッセージを受信すると、CAN ID抽出部6がCANメッセージ解析部8を経由して、受信したメインメッセージのCAN IDを抽出する(S201)。
なお、CAN IDごとにメッセージの内容が規定されているため、CAN IDを参照することでそのメッセージがMACによる認証を必要とするものか否かも判断できる。受信したメインメッセージがMACによる認証を必要としないものであれば、以下の処理は行う必要がない。また、受信したメッセージが自ノードで処理する必要がないものである場合も、以下の処理を行う必要がない。
【0046】
受信したメインメッセージは自ノードが処理する必要があるものであり、かつMACによるメッセージ認証が行われるものであると、抽出したCAN IDから判断される場合には以下の処理が行われる。CAN ID抽出部6は、抽出したCAN IDに対応するカウンタ値をカウンタ記憶部3から読み取り(S202)、カウンタを1つ増加させてカウンタ記憶部3を更新する(S203)。抽出されたCAN IDおよび更新後のカウンタ値は、MAC生成部4に送られる。
【0047】
また、データフィールド抽出部7は、CANメッセージ解析部8を経由して、受信したメインメッセージのデータフィールドを抽出する(S204)。抽出されたデータフィールドは、MAC生成部4に送られる。
【0048】
MAC生成部4は、暗号鍵記憶部5から暗号鍵(共通鍵)を取り出し(S205)、この暗号鍵を用いて、受信したメッセージのデータフィールド、CAN IDおよびCAN
IDに対応する最新のカウンタ値からMACを生成する(S206)。MACの生成方法は、メッセージ送信の際の方法と同じであるため詳細な説明は省略する。MAC生成部4が生成したMACは、MAC比較部2へと送られる(S207)。
【0049】
受信側ECUは、メインメッセージに対応するMACメッセージをCANメッセージ解析部8が受信するのを待つ(S208〜S209)。上述のように、メインメッセージとそのMACメッセージとはCAN IDが対応付けられているので、CANメッセージ解析部8は、メインメッセージのCAN IDに対応するCAN IDを有するメッセージが到着するのを待つ。
【0050】
メインメッセージに対応するMACメッセージが到着すると(S209−YES)、データフィールド抽出部7が、CANメッセージ解析部8を経由して、MACメッセージからMACを抽出する(S211)。上述したように、MACはMACメッセージのデータフィールド(64ビット)に格納されている。データフィールド抽出部7が抽出したMACは、MAC比較部2へと送られる(S212)。
【0051】
MAC比較部2は、MAC生成部4が生成したMACと、受信したMACメッセージから抽出されたMACとを比較する(S213)。これら2つのMACが同じであれば(S214−YES)、メインメッセージが正当なものであることが分かるので、受信ECUはメインメッセージを処理する(S216)。一方、これら2つのMACが異なるものであれば(S214−NO)、メインメッセージが不正なものであることが分かるので、受信ECUはメインメッセージを処理しない(S215)。なお、不正なメインメッセージを受信した後の処理は種々考えられるが、どのような対応を行っても構わない。
【0052】
(カウンタ初期化処理)
次に、CAN IDごとのカウンタ値の初期化について説明する。カウンタ値はシステム内の全ECUで共通することが必要である。システム起動中はネットワークを伝送されるメッセージをカウントすることで全ECUにてカウンタを同一とすることができるが、システム起動時においてもカウンタ値を一致させる必要がある。このために、全ECUに読み書き可能な不揮発性メモリを設け、電源オフ時のカウンタ値を記憶し、システム再開時にこの不揮発性メモリからカウンタ値を読み込んで使用することが考えられる。しかし
ながら、本実施形態では、全ECUに不揮発性メモリを設けずにシステム開始時のカウンタ値を、以下のようにして一致させる。
【0053】
本実施形態においては、カウンタの初期化処理のために、ネットワーク内の任意のECUをカウンタ初期化用のECU(以下、マスタノードともいう)として利用する。マスタノードは、システム開始時に全てのCAN ID(メッセージ認証が必要なメッセージに対応するCAN IDという意味。以下同じ。)についてカウンタ値の初期値を全ECUに通知する処理を行う。
【0054】
図9は、マスタノードからカウンタ値の初期化メッセージを受信した際の、一般ノードの各機能部の連携を示した図である。図10(a)は、カウンタ値の初期化メッセージを送信するマスタノードの処理の流れを示すフローチャートである。図10(b)は、初期化メッセージを受信した一般ノードの処理の流れを示すフローチャートである。
【0055】
まず、マスタノードが行う処理について図10(a)を参照して説明する。マスタノードは、システムが起動すると、CAN IDを選択して(S301)、そのCAN IDのカウンタ初期値を決定するための乱数を発生させる(S302)。そして、カウンタを初期化するCAN IDと関連づけて、カウンタ初期化メッセージとしてこの乱数を送信する(S303)。マスタノードでは、全てのCAN IDについて、このようなカウンタ初期化メッセージを送信する。
【0056】
次に、一般ノードが行う処理を図9および図10(b)を参照して説明する。一般ノードは、カウンタ初期化メッセージを受信した場合に(S311)、そのメッセージが自ノードで送受信する(すなわち、カウンタ値を記憶する必要がある)CAN IDに対するカウンタ初期化メッセージであれば以下の処理を行う。
【0057】
データフィールド抽出部7が、カウンタ初期化メッセージのデータフィールドから、マスタノードが生成した乱数値を取得する(S312)。そして、この乱数値はMAC生成部4に送られる。そして、MAC生成部4に含まれる暗号アルゴリズムを使用して、受信した乱数値を暗号鍵記憶部5内の暗号鍵(共通鍵)を用いて暗号化する(S313)。そして、得られた数値をこのCAN ID用のカウンタの初期値として、カウンタ記憶部3に記憶する(S314)。なお、暗号化処理の出力のビット数(128ビット)とカウンタのビット数(53ビット)は一致していないので、例えば前半53ビットを採用したり後半53ビットを採用したりするなど、システム内で共通のルールに従ってカウンタの初期値を決定する。
【0058】
このようにすることで、カウンタを記憶するための不揮発性メモリを設ける必要なく、またカウンタ値自体を平文でネットワーク上を伝送させることなく、システム起動時に全ECUにおいてカウンタ値を共通なものとすることができる。
【0059】
(本実施形態の作用・効果)
本実施形態によれば、メッセージ認証コード(MAC)を用いてメインメッセージの検証を行うことで、メインメッセージが正規なものであるか、不正機器から送信された不正なものであるかを判断することができる。メッセージ送信の度に、MAC算出に用いられるカウンタ値が変化するので、以前に受信したメッセージを再送するリプレイ攻撃を行った場合には、受信側ECUでMACの相違により不正攻撃を検知することができる。
【0060】
また、本実施形態によるMACによるメッセージ検証処理は、標準化されているCANのプロトコルにしたがった設計となっているため、既存システムへの影響を小さくすることができる。たとえば、CANメッセージを処理するCANコントローラは、高速処理お
よび低価格化を目的としてハードウェア化されているが、本実施形態ではこのような既存のCANコントローラを用いて実装できる。
【0061】
また、本実施形態においては、MACを算出するためにメインメッセージのデータフィールドとCAN IDとカウンタ値を利用している。ここで、データフィールドおよびCAN IDは平文でネットワーク上を流れるが、カウンタ値自体はネットワーク上を流れない。暗号化前のテキストと暗号化後のテキストが全て分かれば、多くのメッセージを受信することで暗号鍵を解読することが可能となるが、本実施形態では不正機器はカウンタ値を得られないため暗号鍵の解読も不可能となる。
【0062】
また、メインメッセージを送信した後、即座に対応するMACメッセージを送信できる設計となっているため、受信ECU側ではメインメッセージの正当性を即座に判断することができる。
【0063】
(変形例)
本発明は、以上の実施形態に限定されることなく、種々の変形が可能であることは明らかであろう。例えば、採用する暗号アルゴリズムや鍵長などは任意のものであって良いし、カウンタ値のビット長なども安全性に対する要求とコストに対する要求を勘案して任意の長さにすることができる。また、上記ではCANに対して本発明を適用した実施例を説明したが、CAN以外であってもCANと類似するプロトコルにしたがった通信システムであれば本発明を適用できる。
【0064】
また、上記の実施形態においてはメインメッセージに含まれるCAN IDとデータフィールドと、CAN IDに対応するカウンタ値からMACを生成しているが、メインメッセージのデータフィールドとカウンタ値のみからMACを生成するようにしても良い。このようにしても、メインメッセージがリプレイ攻撃などによって送信されたものであるか、正当なものであるかの判断は可能である。
【0065】
また、上記の説明においては、メインメッセージ受信時および送信時にカウンタ値をインクリメントし、インクリメント後のカウンタ値を使ってMACを算出しているが、インクリメント前のカウンタ値を用いてMACを算出しても構わない。また、カウンタ値のインクリメントは1ずつの増分であるとして説明したが、全ECUで共通のルールが採用されれば必ずしも1ずつ増分する必要はなく、それ以外の値ずつ増分させても構わない。
【0066】
また、上記の実施形態においてはMACによってメインメッセージが正当であることを検証してからメインメッセージの処理を行っているが、処理のリアルタイム性が要求されるメッセージについては、まずメインメッセージの処理を行ってからその正当性を検証しても構わない。この場合、メッセージが不正なものであると判定された場合には、それ以降は該当するCAN IDを有するメッセージを無視したりすればよい。
【符号の説明】
【0067】
1 MACメッセージ生成部
2 MAC比較部
3 カウンタ記憶部
4 MAC生成部
5 暗号鍵記憶部
6 CAN ID抽出部
7 データフィールド抽出部
8 CANメッセージ解析部
9 CANメッセージ生成部
【特許請求の範囲】
【請求項1】
複数のノードがネットワーク接続された通信システムにおけるメッセージ認証方法であって、
各ノードが、他のノードによってメインメッセージが送信される度に、各ノードに記憶されているカウンタ値をインクリメントするステップと、
送信ノードが、メインメッセージを送信するステップと、
送信ノードが、前記メインメッセージの送信に際し、カウンタ値をインクリメントするステップと、
送信ノードが、前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するステップと、
受信ノードが、前記メインメッセージおよび前記MACメッセージを受信するステップと、
受信ノードが、前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードと、前記MACメッセージに含まれるメッセージ認証コードとが一致するか否かによって、前記メインメッセージの正当性を検証するステップと、
を含む、メッセージ認証方法。
【請求項2】
前記メッセージ認証コードは、共通鍵を用いた暗号アルゴリズムによって生成される、
請求項1に記載のメッセージ認証方法。
【請求項3】
複数のノードがネットワーク接続された通信システムにおけるメッセージ認証方法であって、
各ノードが、所定のメッセージIDを有するメッセージが他のノードによって送信される度に、各ノードに記憶されている当該メッセージIDに対応するカウンタ値をインクリメントするステップと、
送信ノードが、メッセージIDとデータフィールドを含むメインメッセージを送信するステップと、
送信ノードが、前記メインメッセージの送信に際し、前記メッセージIDに対応するカウンタ値をインクリメントするステップと、
送信ノードが、前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するステップと、
受信ノードが、前記メインメッセージおよび前記MACメッセージを受信するステップと、
受信ノードが、前記メインメッセージに含まれる前記メッセージIDおよび前記データフィールドと、前記メッセージIDに対応するカウンタ値とに基づいて生成されるメッセージ認証コードが、前記MACメッセージに含まれるメッセージ認証コードと一致するか否かによって、前記メインメッセージの正当性を検証するステップと、
を含む、メッセージ認証方法。
【請求項4】
前記メッセージ認証コードは、共通鍵を用いた暗号アルゴリズムによって生成される、
請求項3に記載のメッセージ認証方法。
【請求項5】
前記メッセージ認証コードは、前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に対して、前記共通鍵を用いた前記暗号アルゴリズムを作用させて生成されるビット列から、所定のビットを抽出して生成される、
請求項4に記載のメッセージ認証方法。
【請求項6】
マスタノードが、通信システム起動時に、各メッセージIDに対応するカウンタ値の初
期値をブロードキャストによって通知する、
請求項3〜5のいずれかに記載のメッセージ認証方法。
【請求項7】
前記マスタノードは、メッセージIDごとに乱数値を生成してブロードキャスト送信し、
各ノードは、受信された乱数値に対して、共通鍵を用いた暗号アルゴリズムを作用させて生成される数値を、各メッセージIDに対応するカウンタ値の初期値として利用する、
請求項6に記載のメッセージ認証方法。
【請求項8】
少なくとも送信ノードと受信ノードがネットワーク接続された通信システムであって、
送信ノードは、
カウンタ値を記憶するカウンタ値記憶手段と、
他のノードが送信したメインメッセージを受信する度、および自ノードがメインメッセージを送信する度に、カウンタ値をインクリメントするカウンタ値インクリメント手段と、
メインメッセージを送信するメインメッセージ送信手段と、
前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するMACメッセージ送信手段と、
を有し、
受信ノードは、
カウンタ値を記憶するカウンタ値記憶手段と、
メインメッセージを受信する度に、カウンタ値をインクリメントするカウンタ値インクリメント手段と、
送信ノードから送信されるメインメッセージおよびMACメッセージを受信する受信手段と、
前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードが、前記MACメッセージに含まれるメッセージ認証コードと一致するか否かによって、前記メインメッセージの正当性を検証するメッセージ検証手段と、
を有する、
通信システム。
【請求項9】
前記送信ノードのMACメッセージ送信手段と前記受信ノードのメッセージ検証手段は、共通鍵を用いた暗号アルゴリズムによってメッセージ認証コードを生成する、
請求項8に記載の通信システム。
【請求項10】
少なくとも送信ノードと受信ノードがネットワーク接続された通信システムであって、
送信ノードは、
メッセージIDに対応するカウンタ値を記憶するカウンタ値記憶手段と、
所定のメッセージIDを有するメインメッセージが他のノードによって送信される度、および自ノードが所定のメッセージIDを有するメインメッセージを送信する度に、当該メッセージIDに対応するカウンタ値をインクリメントするカウンタ値インクリメント手段と、
メッセージIDとデータフィールドとを含むメインメッセージを送信するメインメッセージ送信手段と、
前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するMACメッセージ送信手段と、
を有し、
受信ノードは、
メッセージIDに対応するカウンタ値を記憶するカウンタ値記憶手段と、
所定のメッセージIDを有するメインメッセージが他のノードによって送信される度に、当該メッセージIDに対応するカウンタ値をインクリメントするカウンタ値インクリメント手段と、
送信ノードから送信されるメインメッセージおよびMACメッセージを受信する受信手段と、
前記メインメッセージに含まれる前記メッセージIDおよび前記データフィールドと、前記メッセージIDとに対応するカウンタ値に基づいて生成されるメッセージ認証コードが、前記MACメッセージに含まれるメッセージ認証コードと一致するか否かによって、前記メインメッセージの正当性を検証するメッセージ検証手段と、
を有する、
通信システム。
【請求項11】
前記送信ノードのMACメッセージ送信手段と前記受信ノードのメッセージ検証手段は、共通鍵を用いた暗号アルゴリズムによってメッセージ認証コードを生成する、
請求項10に記載の通信システム。
【請求項12】
前記送信ノードのMACメッセージ送信手段と前記受信ノードのメッセージ検証手段は、前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に対して、前記共通鍵を用いた前記暗号アルゴリズムによって生成されるビット列から、所定のビットを抽出してメッセージ認証コードを生成する、
請求項11に記載の通信システム。
【請求項13】
通信システム起動時に、各メッセージIDに対応するカウンタ値の初期値をブロードキャストによって通知するマスタノードをさらに含む、
請求項10〜12のいずれかに記載の通信システム。
【請求項14】
前記マスタノードは、メッセージIDごとに乱数値を生成してブロードキャスト送信し、
前記送信ノードおよび受信ノードは、受信された乱数値に対して、共通鍵を用いた暗号アルゴリズムによって生成される数値を、各メッセージIDに対応するカウンタ値の初期値として利用する、
請求項13に記載の通信システム。
【請求項1】
複数のノードがネットワーク接続された通信システムにおけるメッセージ認証方法であって、
各ノードが、他のノードによってメインメッセージが送信される度に、各ノードに記憶されているカウンタ値をインクリメントするステップと、
送信ノードが、メインメッセージを送信するステップと、
送信ノードが、前記メインメッセージの送信に際し、カウンタ値をインクリメントするステップと、
送信ノードが、前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するステップと、
受信ノードが、前記メインメッセージおよび前記MACメッセージを受信するステップと、
受信ノードが、前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードと、前記MACメッセージに含まれるメッセージ認証コードとが一致するか否かによって、前記メインメッセージの正当性を検証するステップと、
を含む、メッセージ認証方法。
【請求項2】
前記メッセージ認証コードは、共通鍵を用いた暗号アルゴリズムによって生成される、
請求項1に記載のメッセージ認証方法。
【請求項3】
複数のノードがネットワーク接続された通信システムにおけるメッセージ認証方法であって、
各ノードが、所定のメッセージIDを有するメッセージが他のノードによって送信される度に、各ノードに記憶されている当該メッセージIDに対応するカウンタ値をインクリメントするステップと、
送信ノードが、メッセージIDとデータフィールドを含むメインメッセージを送信するステップと、
送信ノードが、前記メインメッセージの送信に際し、前記メッセージIDに対応するカウンタ値をインクリメントするステップと、
送信ノードが、前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するステップと、
受信ノードが、前記メインメッセージおよび前記MACメッセージを受信するステップと、
受信ノードが、前記メインメッセージに含まれる前記メッセージIDおよび前記データフィールドと、前記メッセージIDに対応するカウンタ値とに基づいて生成されるメッセージ認証コードが、前記MACメッセージに含まれるメッセージ認証コードと一致するか否かによって、前記メインメッセージの正当性を検証するステップと、
を含む、メッセージ認証方法。
【請求項4】
前記メッセージ認証コードは、共通鍵を用いた暗号アルゴリズムによって生成される、
請求項3に記載のメッセージ認証方法。
【請求項5】
前記メッセージ認証コードは、前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に対して、前記共通鍵を用いた前記暗号アルゴリズムを作用させて生成されるビット列から、所定のビットを抽出して生成される、
請求項4に記載のメッセージ認証方法。
【請求項6】
マスタノードが、通信システム起動時に、各メッセージIDに対応するカウンタ値の初
期値をブロードキャストによって通知する、
請求項3〜5のいずれかに記載のメッセージ認証方法。
【請求項7】
前記マスタノードは、メッセージIDごとに乱数値を生成してブロードキャスト送信し、
各ノードは、受信された乱数値に対して、共通鍵を用いた暗号アルゴリズムを作用させて生成される数値を、各メッセージIDに対応するカウンタ値の初期値として利用する、
請求項6に記載のメッセージ認証方法。
【請求項8】
少なくとも送信ノードと受信ノードがネットワーク接続された通信システムであって、
送信ノードは、
カウンタ値を記憶するカウンタ値記憶手段と、
他のノードが送信したメインメッセージを受信する度、および自ノードがメインメッセージを送信する度に、カウンタ値をインクリメントするカウンタ値インクリメント手段と、
メインメッセージを送信するメインメッセージ送信手段と、
前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するMACメッセージ送信手段と、
を有し、
受信ノードは、
カウンタ値を記憶するカウンタ値記憶手段と、
メインメッセージを受信する度に、カウンタ値をインクリメントするカウンタ値インクリメント手段と、
送信ノードから送信されるメインメッセージおよびMACメッセージを受信する受信手段と、
前記メインメッセージおよび前記カウンタ値に基づいて生成されるメッセージ認証コードが、前記MACメッセージに含まれるメッセージ認証コードと一致するか否かによって、前記メインメッセージの正当性を検証するメッセージ検証手段と、
を有する、
通信システム。
【請求項9】
前記送信ノードのMACメッセージ送信手段と前記受信ノードのメッセージ検証手段は、共通鍵を用いた暗号アルゴリズムによってメッセージ認証コードを生成する、
請求項8に記載の通信システム。
【請求項10】
少なくとも送信ノードと受信ノードがネットワーク接続された通信システムであって、
送信ノードは、
メッセージIDに対応するカウンタ値を記憶するカウンタ値記憶手段と、
所定のメッセージIDを有するメインメッセージが他のノードによって送信される度、および自ノードが所定のメッセージIDを有するメインメッセージを送信する度に、当該メッセージIDに対応するカウンタ値をインクリメントするカウンタ値インクリメント手段と、
メッセージIDとデータフィールドとを含むメインメッセージを送信するメインメッセージ送信手段と、
前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に基づいて生成されるメッセージ認証コードを含むMACメッセージを送信するMACメッセージ送信手段と、
を有し、
受信ノードは、
メッセージIDに対応するカウンタ値を記憶するカウンタ値記憶手段と、
所定のメッセージIDを有するメインメッセージが他のノードによって送信される度に、当該メッセージIDに対応するカウンタ値をインクリメントするカウンタ値インクリメント手段と、
送信ノードから送信されるメインメッセージおよびMACメッセージを受信する受信手段と、
前記メインメッセージに含まれる前記メッセージIDおよび前記データフィールドと、前記メッセージIDとに対応するカウンタ値に基づいて生成されるメッセージ認証コードが、前記MACメッセージに含まれるメッセージ認証コードと一致するか否かによって、前記メインメッセージの正当性を検証するメッセージ検証手段と、
を有する、
通信システム。
【請求項11】
前記送信ノードのMACメッセージ送信手段と前記受信ノードのメッセージ検証手段は、共通鍵を用いた暗号アルゴリズムによってメッセージ認証コードを生成する、
請求項10に記載の通信システム。
【請求項12】
前記送信ノードのMACメッセージ送信手段と前記受信ノードのメッセージ検証手段は、前記メッセージID、前記データフィールド、および前記メッセージIDに対応するカウンタ値に対して、前記共通鍵を用いた前記暗号アルゴリズムによって生成されるビット列から、所定のビットを抽出してメッセージ認証コードを生成する、
請求項11に記載の通信システム。
【請求項13】
通信システム起動時に、各メッセージIDに対応するカウンタ値の初期値をブロードキャストによって通知するマスタノードをさらに含む、
請求項10〜12のいずれかに記載の通信システム。
【請求項14】
前記マスタノードは、メッセージIDごとに乱数値を生成してブロードキャスト送信し、
前記送信ノードおよび受信ノードは、受信された乱数値に対して、共通鍵を用いた暗号アルゴリズムによって生成される数値を、各メッセージIDに対応するカウンタ値の初期値として利用する、
請求項13に記載の通信システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2013−98719(P2013−98719A)
【公開日】平成25年5月20日(2013.5.20)
【国際特許分類】
【出願番号】特願2011−239161(P2011−239161)
【出願日】平成23年10月31日(2011.10.31)
【出願人】(502087460)株式会社トヨタIT開発センター (232)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【出願人】(504182255)国立大学法人横浜国立大学 (429)
【Fターム(参考)】
【公開日】平成25年5月20日(2013.5.20)
【国際特許分類】
【出願日】平成23年10月31日(2011.10.31)
【出願人】(502087460)株式会社トヨタIT開発センター (232)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【出願人】(504182255)国立大学法人横浜国立大学 (429)
【Fターム(参考)】
[ Back to top ]