(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0027】
以下、各実施形態について図面を用いて説明する。なお、以下の各実施形態は、CANに限らず、例えばLIN(Local Interconnect Network)等の任意の車載LAN(Local Area Network)に適用可能となっている。また、各実施形態は、MACに限らず、例えばHMAC(Hash-based Message Authentication Code)等の任意の認証子が使用可能となっている。また、各実施形態におけるビット数及びバイト数は一例であり、他の値に変更してもよい。
【0028】
<第1の実施形態>
図1は第1の実施形態に係る通信システムの構成を示す模式図であり、
図2は通信システムに用いられるセッション更新メッセージを説明するための模式図である。
【0029】
この通信システムは、車両に搭載された鍵配布センタ装置10及び複数の通信装置20A〜20Xを備えている。なお、「鍵配布センタ装置」及び「通信装置」は、それぞれ「第1ECU」及び「第2ECU」等のように他の名称に読み替えてもよい。
【0030】
ここで、鍵配布センタ装置10は、メモリ11及び鍵配布部12を備えている。
【0031】
メモリ11は、鍵配布部12から任意のデータを読出/書込可能な記憶部であり、例えば、MAC鍵K(第1秘密情報)を保持する。
【0032】
鍵配布部12は、例えば、以下の機能(f12-1)〜(f12-4)をもっている。
【0033】
(f12-1) 第1カウンタ値“cnt_M”を保持する機能。なお、メモリ11及び鍵配布部12は、第1カウンタ値及び第1秘密情報を保持する手段を構成している。「第1カウンタ値」は、「第1カウンタの値」や「第1カウンタのカウンタ値」等と読み替えてもよい。
【0034】
(f12-2) 第1カウンタ値“cnt_M”を更新する機能。
【0035】
(f12-3) 更新された第1カウンタ値“cnt_M”及びMAC鍵K(第1秘密情報)に基づいてMAC(第1認証子)を生成する。
【0036】
(f12-4) 更新された第1カウンタ値“cnt_M”の下位の一部ビット列とMAC(第1認証子)の一部ビット列とを含む1フレームのセッション更新メッセージを生成する機能。
図2に示す例では、32ビットの第1カウンタ値“cnt_M”からなるセッションIDと、128ビットのMACとに関し、セッションIDの下位1バイトとMACの上位7バイトとからなる8バイトのセッション更新メッセージが生成されている。このセッション更新メッセージは、CANの不正送信対策として行うセッション鍵DKの更新のために生成される。セッション鍵DKは、通信メッセージへのMAC付与に用いられる一時的な鍵である。
【0037】
(f12-5) セッション更新メッセージを各通信装置20A〜20Xに送信する機能。
【0038】
続いて、各通信装置20A〜20Xについて説明する。各通信装置20A〜20Xは、車両の運転に関する電子制御機能が異なるものの、各実施形態における鍵生成機能及びCAN通信機能に関しては互いに同一構成となっている。このため、以下では、通信装置20Xを代表例に挙げて説明する。なお、以下の説明は、符号内の「X」を「A」,「B」,…に置き換えることにより、他の通信装置20A,20B,…の説明として読み替えることが可能である。
【0039】
通信装置20Xは、メモリ21X、通信部22X及び制御部23Xを備えている。
【0040】
メモリ21Xは、各部22X,23Xから任意のデータを読出/書込可能な記憶部であり、例えば、MAC鍵K(第2秘密情報)及びセッション鍵生成情報(第3秘密情報)を保持する。ここで、各メモリ11,21A〜21X内のMAC鍵Kは、セッションID共有用の鍵であって、互いに同一の鍵である。また、各メモリ21A〜21X内のセッション鍵生成情報は、互いに同一の情報である。セッション鍵生成情報は、必須ではなく、省略してもよい。セッション鍵生成情報を省略する場合、例えば、セッションID及びMAC鍵Kに基づいて、セッション鍵DKを生成すればよい。
【0041】
通信部22Xは、車載LANにおける通信インターフェースであり、例えば、鍵配布センタ装置10が1フレームのセッション更新メッセージを送信したとき、鍵配布センタ装置10からセッション更新メッセージを受信する機能をもっている。セッション更新メッセージは、鍵配布センタ装置10が生成したMAC(第1認証子)の一部ビット列と、鍵配布センタ装置10が更新した第1カウンタ値“cnt_M”の下位の一部ビット列とを含んでいる。このMAC(第1認証子)は、鍵配布センタ装置10が更新した第1カウンタ値“cnt_M”及び鍵配布センタ装置10が保持するMAC鍵K(第1秘密情報)に基づいて生成されている。
【0042】
制御部23Xは、例えば、以下の機能(f23X-1)〜(f23X-4)をもっている。
【0043】
(f23X-1) 第1カウンタ値“cnt_M”に同期して更新される第2カウンタ値“cnt_X”を保持する機能。第2カウンタ値“cnt_X”は、最新のセッションIDを示している。なお、「第2カウンタ値」は、「第2カウンタの値」や「第2カウンタのカウンタ値」等と読み替えてもよい。また、メモリ21X及び制御部23Xは、第1カウンタ値に同期して更新される第2カウンタ値及び第1秘密情報と同一の第2秘密情報を保持する手段を構成している。
【0044】
(f23X-2) 通信部22Xに受信されたセッション更新メッセージを第2カウンタ値“cnt_X”及びMAC鍵K(第2秘密情報)に基づいて検証する第1検証機能。
【0045】
(f23X-3) 検証した結果が正当のとき、セッション更新メッセージに基づいて、更新された第1カウンタ値“cnt_M”と同一値に第2カウンタ値“cnt_X”を更新する第1更新機能。
【0046】
(f23X-4) 更新した第2カウンタ値“cnt_X”に基づいてセッション鍵DKを生成する機能。なお、生成されたセッション鍵DKは、例えばメモリ21Xに保持される。
【0047】
次に、以上のように構成された通信システムの動作を
図3乃至
図5のフローチャートを用いて説明する。
【0048】
始めに、鍵配布センタ装置10は、第1カウンタ値“cnt_M”及びMAC鍵Kを保持しているとする。また、各通信装置20A〜20Xは、鍵配布センタ装置10内の第1カウンタ値“cnt_M”に同期して更新される第2カウンタ値“cnt_A”〜“cnt_X”、及び通信システム内で共通のMAC鍵Kを保持しているとする。以下、各通信装置20A〜20Xは互いに並列に動作するが、ここでは通信装置20Xの動作を代表例に挙げて述べる。
【0049】
いま、鍵配布センタ装置10の鍵配布部12は、
図3に示すように、4バイトの第1カウンタ値“cnt_M”を1加算して更新する(ST1)。第1カウンタ値“cnt_M”は、例えば、定期的及び/又は不定期に更新可能となっている。例えば、第1カウンタ値“cnt_M”は、毎秒更新してもよく、車両のイグニッションキーのオン時に更新してもよい。
【0050】
鍵配布部12は、更新された第1カウンタ値“cnt_M”をセッションIDとし(ST2)、セッションID及び及びMAC鍵Kに基づいてMACを生成する(ST3)。
【0051】
また、鍵配布部12は、セッションIDの下位1バイトと、MACの上位7バイトとを連結してセッション更新メッセージを作成する(ST4)。
【0052】
しかる後、鍵配布部12は、この作成したセッション更新メッセージを各通信装置20A〜20Xに送信する(ST5)。なお、鍵配布部12は、通信装置20A〜20X毎にセッション更新メッセージを繰り返し送信してもよく、全ての通信装置20A〜20Xにセッション更新メッセージを同報通信してもよい。
【0053】
ステップST5の後、各通信装置20A〜20Xでは、ステップST10〜ST70の処理が並列に実行される。以下では、通信装置20Xを代表例に挙げて説明する。
【0054】
通信装置20Xの通信部22Xは、鍵配布センタ装置10からセッション更新メッセージを受信する(ST10)。
【0055】
通信装置20Xの制御部23Xは、受信されたセッション更新メッセージを第2カウンタ値“cnt_X”及びMAC鍵Kに基づいて検証する(ST20〜ST40)。
【0056】
始めに、制御部23Xは、セッション更新メッセージに基づいて、セッションIDを算出する(ST20)。ステップST20は、例えば、ステップST21〜ST23に示すように実行される(
図4参照)。
【0057】
制御部23Xは、セッション更新メッセージからセッションIDの下位1バイト“ID3”を取得し、このセッションIDの下位1バイト“ID3”を“sID”とする。
【0058】
制御部23Xは、このセッションIDの下位1バイト“sID”と、第2カウンタ値“cnt_X”の下位1バイト“cnt_X3”とに基づいて、sID≧cnt_X3が成り立つか否かを判定する(ST21)。
【0059】
ステップST21の判定結果がsID≧cnt_X3の成立を示す場合(ST21;Yes)、制御部23Xは、4バイトの第2カウンタ値“cnt_X”の下位1バイトを0とした値と、 セッションIDの下位1バイト“sID”とを加算する。これにより、制御部23Xは、4バイトのセッションIDを算出する(ST22)。
【0060】
また、ステップST21の判定結果が否の場合(ST21;No)、制御部23Xは、4バイトの第2カウンタ値“cnt_X”の下位1バイトを0とした値と、定数“0x100”と、セッションIDの下位1バイト“sID”とを加算する。これにより、制御部23Xは、4バイトのセッションIDを算出する(ST23)。なお、
図4においては、算出されたセッションIDは、cnt_X2+1が桁上がりしていない場合を例示している。この例示は
図5においても同様である。また、桁上がりする場合には、桁上がりの結果が上位ビット列に順次、伝わってセッションIDが算出される。いずれにしても、算出したセッションIDは、メモリ21Xに一時的に保持される。
【0061】
次に、制御部23Xは、ステップST20で算出したセッションIDを第2カウンタ値“cnt_X”に基づいて検証する(ST30)。ステップST30は、例えば、ステップST31〜ST32に示すように実行される(
図5参照)。
【0062】
制御部23Xは、メモリ21X内のセッションID及び保持する第2カウンタ値“cnt_X”を読み出し(ST31)、セッションIDが第2カウンタ値“cnt_X”以下か否かを判定する(ST32)。
【0063】
ステップST32の判定結果が第2カウンタ値以下を示す場合(ST32;Yes)、制御部23Xは、ステップST50に進んでセッションIDを破棄し、処理を終了する。
【0064】
また、ステップST32の判定結果が否の場合(ST32;No)、制御部23Xは、ステップST40に進み、セッション更新メッセージ内のMACを検証する(ST40)。ステップST40は、例えば、ステップST41〜ST44に示すように実行される。
【0065】
制御部23Xは、セッションID及びMAC鍵Kに基づいて、16バイトのMACを生成し(ST41)、このMACから上位7バイトの値を取得する(ST42)。
【0066】
制御部23Xは、セッション更新メッセージからMACの上位7バイトの値を取得する(ST43)。
【0067】
しかる後、制御部23Xは、ステップST42及びST43で取得したMACの上位7バイトの値が互いに一致するか否かを判定し(ST44)、否の場合(ST44;No)にはステップST50に進んでセッションIDを破棄し、処理を終了する。
【0068】
また、ステップST44の判定結果が一致を示す場合(ST44;Yes)、制御部23Xは、ステップST20〜ST40にかけてセッション更新メッセージを検証した結果を正当とし、ステップST60に進む。
【0069】
制御部23Xは、当該検証した結果が正当のとき、セッション更新メッセージに基づいて、更新された第1カウンタ値“cnt_M”と同一値に第2カウンタ値“cnt_X”を更新する。具体的には、制御部23Xは、第2カウンタ値“cnt_X”をセッションIDに置換する(ST60)。
【0070】
しかる後、制御部23Xは、更新した第2カウンタ値“cnt_X”に基づいてセッション鍵DKを生成する(ST70)。なお、生成されたセッション鍵DKは、例えばメモリ21Xに保持される。
【0071】
これにより、セッション鍵DKの更新が完了する。なお、ステップST10〜ST70の処理は、他の各通信装置20A〜でも同様に実行される。これにより、各通信装置20A〜20Xは、更新されたセッション鍵DKを共有する。
【0072】
以下、通信装置20Xは、更新したセッション鍵DK及びメッセージ本文から生成したMACを当該メッセージ本文に付与して通信メッセージを作成し、この通信メッセージを他の通信装置20A,…に通信する。このような通信メッセージの作成及び通信は、他の各通信装置20A〜でも同様に実行される。
【0073】
上述したように本実施形態によれば、鍵配布センタ装置10が、更新された第1カウンタ値の下位の一部ビット列と第1認証子の一部ビット列とを含む1フレームのセッション更新メッセージを各通信装置20A〜20Xに送信する。
【0074】
各通信装置20A〜20Xは、セッション更新メッセージを検証し、セッション更新メッセージに基づいて、更新された第1カウンタ値と同一値に第2カウンタ値“cnt_X”を更新し、更新した第2カウンタ値“cnt_X”に基づいてセッション鍵を生成する。
【0075】
従って、本実施形態によれば、セッション更新メッセージが1フレームで済むため、車両に搭載された複数の通信装置間の通信量を抑制することができる。また、セッション更新メッセージがMACを含むため、不正送信を阻止することができる。
【0076】
ここで、不正送信の阻止について補足する。セッション更新メッセージの再送攻撃は、単調増加のカウンタ値をセッション更新メッセージが含むことにより、排除される。
【0077】
また、セッション更新メッセージ内の7バイトのMACを検証することにより、セッション更新メッセージの偽造又は変造といった不正な作成が困難となっている。
【0078】
<第2の実施形態>
次に、第2の実施形態について
図1等を参照しながら説明する。
【0079】
第2の実施形態は、第1の実施形態の変形例であり、各通信装置20A〜20Xのいずれかが交換された場合や節電のためのスリープ状態から復帰した場合などのように、セッション更新メッセージからセッションIDを算出できない場合の形態に関する。
【0080】
すなわち、第2の実施形態は、各通信装置20A〜20XがセッションIDを算出できず、第2カウント値をセッションIDに更新できず、通信メッセージの送信(MACの付与)や受信(MACの検証)を実行できない場合に関する。
【0081】
この場合、通信装置20Xは、前述した機能に加え、以下の機能をもっている。なお、他の通信装置20A〜も同様である。
【0082】
通信部22Xは、制御部23Xが第2カウンタ値を更新できない場合、セッションID共有メッセージの送信要求を鍵配布センタ装置10に送信する機能をもっている。
【0083】
通信部22Xは、この送信要求に応じて、1フレームのセッションID共有メッセージを鍵配布センタ装置10から受信する機能をもっている。なお、通信部22Xは、セッションID共有メッセージが周期的に配信される場合にも、当該セッションID共有メッセージを受信する機能をもっている。この場合、セッションID共有メッセージの更新周期は、例えば、セッション更新メッセージの更新周期よりも長い周期が用いられる。
【0084】
ここで、セッションID共有メッセージは、
図6に示すように、鍵配布センタ装置10が更新した第1カウンタ値(セッションID)の全てのビット列と、MAC(第1認証子)のうちのセッション更新メッセージと重複しない一部のビット列とを含んでいる。
【0085】
但し、セッションID共有メッセージは、更新した第1カウンタ値のうちの少なくともセッション更新メッセージと重複しない部分の全てのビット列と、MACのうちのセッション更新メッセージと重複しない一部のビット列とを含んでいればよい(
図7参照)。理由は、セッション更新メッセージ内のセッションIDのビット列“ID3”と、セッションID共有メッセージ内のセッションIDのビット列“ID0|ID1|ID2”とからセッションID“ID0|ID1|ID2|ID3”を取得できればよいためである。なお、記号“|”は、ビット列の連結を表す。また、「セッションID共有メッセージ」は、例えば「セッション共有メッセージ」又は「カウンタ値共有メッセージ」のように、適宜、他の名称に読み替えてもよい。
【0086】
制御部23Xは、以下の機能(f23X-5)〜(f23X-7)を更に備えている。
【0087】
(f23X-5) 通信部22Xに受信されたセッションID共有メッセージを第2カウンタ値“cnt_X”及びMAC鍵K(第2秘密情報)に基づいて検証する第2検証機能。
【0088】
(f23X-6) 第2検証機能により検証した結果が正当のとき、セッションID共有メッセージに基づいて、更新された第1カウンタ値“cnt_M”と同一値に第2カウンタ値“cnt_X”を更新する第2更新機能。
【0089】
(f23X-7) 第2更新機能により更新した第2カウンタ値“cnt_X”に基づいてセッション鍵DKを生成する機能。
【0090】
次に、以上のように構成された通信システムの動作を
図8及び
図9のフローチャートを用いて説明する。
【0091】
いま、ある通信装置20Xは、前述したステップST50等により、第2カウンタ値を更新できない状況にあるとする。
【0092】
このとき、通信装置20Xの通信部22Xは、制御部23Xから制御され、セッションID共有メッセージの送信要求を鍵配布センタ装置10に送信する。
【0093】
鍵配布センタ装置10の鍵配布部10は、この送信要求を受信すると、
図8に示すように、現在の第1カウンタ値“cnt_M”をセッションIDとし(ST101)、セッションID及び及びMAC鍵Kに基づいてMACを生成する(ST102)。
【0094】
また、鍵配布部12は、
図6に示したように、4バイトのセッションIDと、MACの中位4バイトとを連結して8バイトのセッションID共有メッセージを作成する(ST103)。
【0095】
しかる後、鍵配布部12は、この作成したセッションID共有メッセージを各通信装置20A〜20Xに送信する(ST104)。なお、鍵配布部12は、送信要求を送信した通信装置20XのみにセッションID共有メッセージを送信してもよい。
【0096】
ステップST104の後、各通信装置20A〜20Xでは、ステップST110〜ST170の処理が並列に実行される。以下では、通信装置20Xを代表例に挙げて説明する。
【0097】
通信装置20Xの通信部22Xは、鍵配布センタ装置10からセッションID共有メッセージを受信する(ST110)。
【0098】
通信装置20Xの制御部23Xは、受信されたセッションID共有メッセージを第2カウンタ値“cnt_X”及びMAC鍵Kに基づいて検証する(ST120〜ST140)。
【0099】
始めに、制御部23Xは、セッションID共有メッセージからセッションIDと、MACの上位11バイトとを取得する(ST120)。ステップST120は、例えば、ステップST121〜ST123に示すように実行される(
図9参照)。
【0100】
制御部23Xは、セッションID共有メッセージから4バイトのセッションIDと、MACの中位4バイトとを取得する(ST121)。
【0101】
また、制御部23Xは、別途、取得した最新のセッション更新メッセージからセッションIDの下位1バイト“ID3”と、MACの上位7バイトとを取得する(ST122)。制御部23Xは、このセッションIDの下位1バイト“ID3”を“sID”とする。
【0102】
しかる後、制御部23Xは、ステップST121〜ST122で取得したMACの中位4バイトと上位7バイトとを連結し、MACの上位11バイトを取得する(ST123)。
【0103】
次に、制御部23Xは、ステップST120で取得したセッションIDを検証する(ST130)。ステップST130は、例えば、ステップST131〜ST132に示すように実行される。
【0104】
制御部23Xは、ステップST121で取得したセッションIDの下位1バイトと、ステップST122で取得したセッションIDの下位1バイト“sID”とが一致するか否かを判定する(ST131)。
【0105】
ステップST131の判定結果が否の場合(ST131;No)、制御部23Xは、ステップST150に進んでセッションIDを破棄し、処理を終了する。
【0106】
ステップST131の判定結果が一致を示す場合(ST131;Yes)、制御部23Xは、メモリ21Xに保持する第2カウンタ値“cnt_X”を読み出し、セッションIDが第2カウンタ値“cnt_X”以下か否かを判定する(ST132)。
【0107】
ステップST132の判定結果が一致を示す場合(ST132;Yes)、制御部23Xは、ステップST150に進んでセッションIDを破棄し、処理を終了する。
【0108】
また、ステップST132の判定結果が否の場合(ST132;No)、制御部23Xは、ステップST140に進み、セッション更新メッセージとセッションID共有メッセージとに含まれるMACを検証する(ST140)。ステップST140は、例えば、ステップST141〜ST142に示すように実行される。
【0109】
制御部23Xは、セッションID及びMAC鍵Kに基づいて、16バイトのMACを生成し、このMACから上位11バイトの値を取得する(ST141)。
【0110】
制御部23Xは、ステップST123及びST141で取得したMACの上位11バイトの値が互いに一致するか否かを判定し(ST142)、否の場合(ST142;No)にはステップST150に進んでセッションIDを破棄し、処理を終了する。
【0111】
また、ステップST142の判定結果が一致を示す場合(ST142;Yes)、制御部23Xは、ステップST120〜ST140にかけてセッションID共有メッセージを検証した結果を正当とし、ステップST160に進む。
【0112】
制御部23Xは、当該検証した結果が正当のとき、セッションID共有メッセージに基づいて、更新された第1カウンタ値“cnt_M”と同一値に第2カウンタ値“cnt_X”を更新する。具体的には、制御部23Xは、第2カウンタ値“cnt_X”をセッションIDに置換する(ST160)。
【0113】
しかる後、制御部23Xは、更新した第2カウンタ値“cnt_X”に基づいてセッション鍵DKを生成する(ST170)。なお、生成されたセッション鍵DKは、例えばメモリ21Xに保持される。
【0114】
これにより、セッション鍵DKの更新が完了する。なお、ステップST110〜ST170の処理は、他の各通信装置20A〜でも同様に実行される。これにより、各通信装置20A〜20Xは、更新されたセッション鍵DKを共有する。
【0115】
以下、通信装置20Xは、更新したセッション鍵DK及びメッセージ本文から生成したMACを当該メッセージ本文に付与して通信メッセージを作成し、この通信メッセージを他の通信装置20A,…に通信する。このような通信メッセージの作成及び通信は、他の各通信装置20A〜でも同様に実行される。
【0116】
上述したように本実施形態によれば、通信装置20Xは、第2カウンタ値を更新できない場合、セッションID共有メッセージの送信要求を鍵配布センタ装置10に送信し、1フレームのセッションID共有メッセージを鍵配布センタ装置10から受信する。
【0117】
通信装置20Xは、受信したセッションID共有メッセージを検証し、検証した結果が正当のとき、セッションID共有メッセージに基づいて、更新された第1カウンタ値“cnt_M”と同一値に第2カウンタ値“cnt_X”を更新する。
【0118】
しかる後、通信装置20Xは、更新した第2カウンタ値“cnt_X”に基づいてセッション鍵DKを生成する。
【0119】
従って、本実施形態によれば、第1の実施形態の効果に加え、いずれかの通信装置20Xが交換された場合や節電のためのスリープ状態から復帰した場合などにも、通信装置20A〜20XがセッションIDを取得してセッション鍵DKを生成することができる。
【0120】
また、セッション更新メッセージと同様に、セッションID共有メッセージが1フレームで済むため、車両の通信装置間の通信量を抑制でき、セッションID共有メッセージがMACを含むため、不正送信を阻止できる。
【0121】
<第3の実施形態>
次に、第3の実施形態について
図1等を参照しながら説明する。
【0122】
第3の実施形態は、第1又は第2の実施形態の具体例であり、各通信装置20A〜20Xの制御部23A〜23Xにおいてセッション鍵DKを生成する形態に関する。
【0123】
ここで、セッション鍵DKは、更新された第2カウンタ値“cnt_X”と、複数の通信装置20A〜20Xが予め共有する(a)第3秘密情報又は(b)MAC鍵K(第2秘密情報)とに基づいて生成される。
【0124】
(a)セッション鍵DKが第2カウンタ値“cnt_X”と第3秘密情報とに基づいて生成される場合、セッション鍵DKの生成には、例えば、PBKDF2(パスワードベースの鍵導出関数2)が用いられる(
図10参照)。「PBKDF2」は、「Password-Based Key Derivation Function 2」の略語である。
【0125】
PBKDF2は、疑似乱数関数PRF、パスワード、ソルト、繰り返し回数c及び鍵長dkLenに基づいて、鍵を導出する鍵導出関数である。PBKDF2の詳細については、例えば“http://en.wikipedia.org/wiki/PBKDF2”に記載されている。なお、「鍵導出関数」は「鍵生成関数」と読み替えてもよい。
【0126】
ここでは、PBKDF2のソルトとしてセッションIDを用い、他のパラメータをセッション鍵生成情報(第3秘密情報)として事前に共有すればよい。
【0127】
すなわち、各通信装置20A〜20Xのメモリ21A〜21Xは、疑似乱数関数PRF、パスワード、繰り返し回数c及び鍵長dkLenを含むセッション鍵生成情報を予め保持している。
【0128】
(b)セッション鍵DKが第2カウンタ値“cnt_X”とMAC鍵K(第2秘密情報)とに基づいて生成される場合、セッション鍵DKの生成には、例えば、鍵付きハッシュ関数が用いられる。なお、「鍵付きハッシュ関数」は「鍵生成関数」と読み替えてもよい。
【0129】
次に、以上のように構成された通信システムの動作を
図10の模式図を用いて説明する。
【0130】
いま、第1又は第2の実施形態と同様に、ステップST1〜ST5,ST10〜ST70又はステップST101〜ST104,ST110〜ST170が実行されたとする。
【0131】
このとき、ステップST70又はステップST170においては、例えば、
図10に示すように、セッション鍵DKが生成される。
【0132】
すなわち、制御部23Xは、例えば、ステップST60又はST160で更新された第2カウンタ値“cnt_X”と、複数の通信装置20A〜20Xが予め共有するセッション鍵生成情報に基づいてセッション鍵を生成する。
【0133】
あるいは、制御部23Xは、ステップST60又はST160で更新された第2カウンタ値“cnt_X”と、複数の通信装置20A〜20Xが予め共有するMAC鍵Kに基づいてセッション鍵を生成してもよい。
【0134】
いずれにしても、ステップST70又はST170において、制御部23Xは、更新された第2カウンタ値“cnt_X”と、複数の通信装置20A〜20Xが予め共有するセッション鍵生成情報又はMAC鍵Kに基づいてセッション鍵DKを生成する。このセッション鍵DKは、前述同様に、他の通信装置20A〜でも同様に生成され、各通信装置20A〜20X間で共有される。
【0135】
しかる後、前述同様に、更新後のセッション鍵DKを用いた通信メッセージの作成及び通信が各通信装置20A〜20Xで実行される。
【0136】
上述したように本実施形態によれば、セッション鍵DKが、更新された第2カウンタ値“cnt_X”と、複数の通信装置20A〜20Xが予め共有するセッション鍵生成情報(第3秘密情報)又はMAC鍵K(第2秘密情報)とに基づいて生成される。
【0137】
従って、第1又は第2の実施形態と同様に、セッション更新メッセージ又はセッションID共有メッセージにより同期したセッションIDに基づき、各通信装置20A〜20Xが予め共有する秘密情報及び鍵生成関数を用い、セッション鍵DKを生成できる。すなわち、セッションIDの更新に同期して、セッション鍵DKを生成及び共有できる。
【0138】
<第4の実施形態>
次に、第4の実施形態について
図1等を参照しながら説明する。
【0139】
第4の実施形態は、第1〜第3の各実施形態の具体例であり、各通信装置20A〜20Xの制御部23A〜23Xにおいてセッション鍵DKを識別する形態に関する。
【0140】
すなわち、第4の実施形態は、セッション鍵DKの更新と適用が非同期に行われることから、
図11に示すように、通信メッセージにセッションIDの下位1ビットを含めることにより、通信メッセージに適用するセッション鍵DKを識別する形態である。なお、「通信メッセージ」は、例えば「CANメッセージ」と読み替えてもよい。
【0141】
これに伴い、通信装置20Xは、前述した機能に加え、以下の機能をもっている。なお、他の通信装置20A〜も同様である。
【0142】
通信装置20Xのメモリ21Xは、
図12に示すように、更新履歴情報を記憶する。
【0143】
更新履歴情報は、更新した第2カウンタ値“cnt_X”(セッションID)の下位1ビットと、この第2カウンタ値“cnt_X”に基づいて生成したセッション鍵DKとが関連付けて記述されている。なお、更新履歴情報は、さらに、第2カウンタ値“cnt_X”の更新時刻と、更新した第2カウンタ値“cnt_X”(セッションID)の下位1バイトとが関連付けて記述されていてもよい。
【0144】
通信部22Xは、通信メッセージを他の通信装置20A〜から受信する機能をもっている。この通信メッセージは、MAC(第2認証子)及びメッセージ本文からなる。当該メッセージ本文は、他の通信装置20A〜が保持する第2カウンタ値“cnt_A”〜の下位1ビットを付与したデータからなる。当該MAC(第2認証子)は、メッセージ本文及びセッション鍵DKに基づいて、他の通信装置20A〜により生成されている。
【0145】
制御部23Xは、以下の機能(f23X-8)〜(f23X-9)を更に備えている。
【0146】
(f23X-8) 通信メッセージに含まれる第2カウンタ値“cnt_A”の下位1ビットに基づいて、メモリ21X内のセッション鍵DKを識別する機能。
【0147】
(f23X-9) 当該識別したセッション鍵DKに基づいて、通信メッセージを検証する第3検証機能。
【0148】
また、制御部23Xは、前述したステップST60又はST160により更新した第2カウンタ値“cnt_X”の下位1ビットと、この第2カウンタ値“cnt_X”に基づいて生成したセッション鍵DKとを関連付けてメモリ21Xに書き込む機能をもっている。
【0149】
次に、以上のように構成された通信システムの動作を
図13のフローチャート及び
図14の模式図を用いて説明する。以下の説明は、各通信装置20A〜20Xのうち、2つの通信装置20A,20X間の通信動作を例に挙げて述べる。
【0150】
始めに、各通信装置20A〜20Xは、前述したステップST70又はST170等により、セッション鍵DKをメモリ21A〜21Xに共有しているとする。また、各通信装置20A〜20Xのメモリ21A〜21Xは、
図12に示した如き、更新履歴情報を記憶しているとする。
【0151】
いま、ある通信装置20Aから他の通信装置20Xに通信メッセージを送信するとする。このとき、通信装置20Aの制御部23Aは、
図13に示すように、通信内容を示すユーザデータを作成し(ST201)、第2カウンタ値“cnt_A”(セッションID)の下位1ビットを取得する(ST202)。
【0152】
制御部23Aは、
図14に示すように、これらユーザデータと、セッションIDの下位1ビットとを連結してメッセージ本文を作成する(ST203)。
【0153】
また、制御部23Aは、作成したメッセージ本文と、メモリ21A内のセッション鍵DKとに基づいてMACを生成する(ST204)。
【0154】
さらに、制御部23Aは、ステップST203で作成したメッセージ本文と、ステップST204で生成したMACとを含む通信メッセージを作成する(ST205)。
【0155】
しかる後、通信装置20Aは、、この作成した通信メッセージを通信部21Aにより他の通信装置20Xに送信する(ST206)。
【0156】
通信装置20Xの通信部22Xは、通信装置20Aから通信メッセージを受信する(ST207)。
【0157】
通信装置20Xの制御部23Xは、受信した通信メッセージからセッションIDの下位1ビットを取得する(ST208)。
【0158】
制御部23Xは、取得した下位1ビットの値に基づき、メモリ21X内の更新履歴情報に含まれる直近2つのレコードから、セッション鍵DKを認識する(ST209)。
【0159】
例えば、制御部23Xは、
図12中、直近2つのレコードが更新時刻t3,t2の2行である場合、取得した下位1ビットが“0”であればセッション鍵“DK2”を認識し、取得した下位1ビットが“1”であればセッション鍵“DK3”を認識する。
【0160】
次に、制御部23Xは、認識したセッション鍵DKに基づいて、通信メッセージ内のMACを検証する(ST210)。これは、通信メッセージ内のメッセージ本文と、認識したセッション鍵DKとに基づいてMACを生成し、当該生成したMACと、通信メッセージ内のMACとが一致するか否かを判定すればよい。
【0161】
判定の結果、否(不正)の場合、制御部23Xは、ステップST211に進んで通信メッセージを破棄し、処理を終了する。
【0162】
また、判定の結果、一致する場合、制御部23Xは、通信メッセージ内のユーザデータをメモリ21Xに保存する(ST212)。
【0163】
しかる後、制御部23Xは、当該保存したユーザデータに基づいて、処理を実行する。
【0164】
以下同様に、各通信装置20A〜20Xの間では、ステップST201〜ST213の処理が実行される。
【0165】
上述したように本実施形態によれば、通信装置20Xは、更新した第2カウンタ値の下位1ビットと、この第2カウンタ値に基づいて生成したセッション鍵とを関連付けて記憶する。
【0166】
通信装置20Xは、他の通信装置20Aが保持する第2カウンタ値の下位1ビットを付与したデータからなるメッセージ本文及びセッション鍵DKに基づいて生成されたMAC及び当該メッセージ本文からなる通信メッセージを他の通信装置20Aから受信する。
【0167】
通信装置20Xは、通信メッセージに含まれる第2カウンタ値の下位1ビットに基づいて、メモリ21X内のセッション鍵を識別する。
【0168】
通信装置20Xは、識別したセッション鍵に基づいて、通信メッセージを検証する。
【0169】
これにより、本実施形態によれば、第1〜第3の各実施形態の効果に加え、セッション鍵DKの更新と適用が非同期に行われる際に、更新前後のセッション鍵を識別することができる。
【0170】
また、通信メッセージは、更新されたセッション鍵DKに基づき、メッセージ本文にMACを付与することにより、通信メッセージの再送攻撃に対する耐性を確保することができる。
【0171】
以上説明した少なくとも一つの実施形態によれば、セッション更新メッセージが1フレームで済むため、車両に搭載された複数の通信装置間の通信量を抑制することができる。また、セッション更新メッセージがMACを含むため、不正送信を阻止することができる。
【0172】
なお、上記の各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、光磁気ディスク(MO)、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【0173】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【0174】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のMW(ミドルウェア)等が上記実施形態を実現するための各処理の一部を実行しても良い。
【0175】
さらに、各実施形態における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0176】
また、記憶媒体は1つに限らず、複数の媒体から上記の各実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【0177】
なお、各実施形態におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記の各実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【0178】
また、各実施形態におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【0179】
なお、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。