以下、図面を参照し、本発明の実施形態について説明する。
[第1実施形態]
本実施形態では、本発明に係る通信ネットワークシステムの一態様として、車両に搭載される通信ネットワークシステムとしてのCANを例に挙げて説明する。図1は、本発明の第1実施形態に係る通信ネットワークシステム1の構成を示すブロック図である。図1において、通信ネットワークシステム1は、複数のMCU(Micro Computing Unit)_2を有する。MCU_2は、CPU(Central Processing Unit:中央演算処理装置)及びメモリ等から構成されるものであって、コンピュータの一種である。MCU_2は、自己のCPUがコンピュータプログラムを実行することにより、該コンピュータプログラムに該当する機能を実現する。各MCU_2は、車両内の機器を制御する電子制御ユニット(ECU)として利用される。
MCU_2はCANの通信バス3に接続されている。本実施形態では、説明の便宜上、通信ネットワークシステム1は3台のMCU_2を有するものとし、該3台のMCU_2が通信バス3に接続されている。通信バス3は、各MCU_2の間で交換されるメッセージを伝送する。各MCU_2は、通信バス3を介して、相互にメッセージを送受する。CANでは、所定のフレーム形式でメッセージの伝送が行われる。MCU_2は、CANにおけるノード(通信装置)として機能する。本実施形態では、MCU_2は、メッセージを送信する送信ノードの機能と該メッセージを受信する受信ノードの機能とを有する。図1中に示されるように、3台の各MCU_2には、CANにおける識別子(ID)として、ID1、ID2、ID3がそれぞれ付与されている。
図2は、本発明の第1実施形態に係るMCU_2(ノード)の構成を示すブロック図である。図2において、MCU_2は、送信部111と受信部112とフレーム受信処理部113とMAC(メッセージ認証コード)生成部114とカウンタ部115とMAC(メッセージ認証コード)検査部116と秘密情報記憶部117を備える。
送信部111は、所定のフレーム形式のメッセージを通信バス3に送信する。受信部112は、該所定のフレーム形式のメッセージを通信バス3から受信する。図3は、本発明の第1実施形態に係るデータフレームの構成を示す図である。図3のデータフレームにおいて、各フィールド中に示されるカッコ内の数字は、当該フィールドに格納される情報のビット数を示している。図3に示されるデータフレームの構成は、CANにおける標準フォーマットのデータフレームの構成に対して、一部変更している。本実施形態では、データフレーム中のCRCフィールド(CRC部)に格納する情報をメッセージ認証コード(MAC)に変更する。該データフレームにおいてCRC部以外の部分は、CANにおける標準フォーマットから変更なしである。以下、図3に示される本実施形態に係るデータフレームのことをCANフレームと称する。
説明を図2に戻す。
送信部111には、CANフレームに格納する送信データ等のデータが入力される。送信部111は、該入力されたデータをCANフレーム中の該当部分に格納したCANフレームを、通信バス3へ送信する。送信データは、図3中のデータフィールド(Data Field:データ部)に格納される。フレーム受信処理部113は、受信部112により通信バス3から受信されたCANフレームについての受信処理を行う。MAC生成部114は、CANフレーム中のデータ部に格納される送信データ等に基づいてMACを生成する。
カウンタ部115は、送信カウンタ部としての機能と、受信カウンタ部としての機能とを有する。カウンタ部115は、送信カウンタ部の機能として、送信部111によるCANフレームの送信毎に所定のカウント値だけ増加させる送信カウンタ値を保持する。本実施形態では、該カウント値は1とする。したがって、カウンタ部115は、送信部111によるCANフレームの送信毎に1だけ増加させる送信カウンタ値を保持する。この送信カウンタ値は、自己のMCU_2(ノード)がCANフレームを送信する毎に1ずつ増やされる。
カウンタ部115は、受信カウンタ部の機能として、受信部112によるCANフレームの受信毎に送信カウンタ部と同じ所定のカウント値だけ増加させる受信カウンタ値を保持する。本実施形態では、該カウント値は1となる。したがって、カウンタ部115は、受信部112によるCANフレームの受信毎に1だけ増加させる受信カウンタ値を保持する。この受信カウンタ値は、CANフレーム中のID毎に設けられる。該IDは、CANフレームを送信したMCU_2(ノード)に付与されているIDであり、図3中のIDフィールド(ID部)に格納される。
本実施形態では、3台のMCU_2(IDがそれぞれ、ID1、ID2、ID3である)が存在するので、図2に示されるように、カウンタ部115は該3台の各MCU_2(各IDであるID1、ID2、ID3)に対応する3つのカウンタ値(ID1カウンタ値、ID2カウンタ値、ID3カウンタ値)を保持する。カウンタ部115において、自己のMCU_2のIDに対応するカウンタ値が送信カウンタ値であり、他のMCU_2のIDに対応するカウンタ値が受信カウンタ値である。例えば、ID1のMCU_2においては、ID1カウンタ値が送信カウンタ値であり、ID2カウンタ値がID2に対応する受信カウンタ値であり、ID3カウンタ値がID3に対応する受信カウンタ値である。
MAC検査部116は、受信部112により通信バス3から受信されたCANフレームから取得されたMACについての検査を行う。秘密情報記憶部117は、各MCU_2において同じ秘密情報を記憶する。この秘密情報は、MCU_2の製造時などに、安全に、MCU_2に設定される。
次に、本実施形態に係るMCU_2(ノード)の動作を説明する。
[送信ノードの動作]
はじめに図4を参照して、MCU_2の送信ノードとしての動作を説明する。図4は、本発明の第1実施形態に係る送信処理の手順を示す図である。図4の送信処理は、送信部111から送信されるCANフレームを作成する際に開始される。
(ステップS111)MAC生成部114は、カウンタ部115から送信カウンタ値を取得する。MAC生成部114は、該取得した送信カウンタ値のビット列(ビット数がLである)から、所定の抽出ビット数分(L−nビット分)の上位ビットのみを上位抽出ビット(ビット数が「L−n」である)として取得する。
(ステップS112)MAC生成部114は、CANフレーム中のデータ部に格納される送信データと、ステップS111で取得した上位抽出ビットと、秘密情報記憶部117に記憶されている秘密情報とを使用して、MACを生成する。MACとして、例えば、ハッシュ(Hash)値を算出する。ハッシュ値の算出方法として、例えば、SHA-256が挙げられる。なお、ハッシュ値の算出方法については、例えば非特許文献3,4に記載されている。
(ステップS113)MAC生成部114は、ステップS112で生成したMACのビット列(MAC値)から、CANフレーム中のCRC部に格納するビット列(15ビット)を抽出する。この抽出されるビット列は、ステップS111で取得した送信カウンタ値のビット列(ビット数がLである)のうち上位抽出ビット以外の所定の下位ビット(ビット数がnである)の値で特定される。図4に示される例では、該下位ビット(ビット数がnである)の値は「3」である。これにより、MAC値のビット列中において、該値「3」で特定される一部分(15ビット分)を抽出する。
本実施形態においてCANフレーム中のCRC部は15ビットであるので、該CRC部に格納する情報として、MAC値のビット列から該値「3」で特定される15ビット分を抽出している。このため、MAC値のビット列に対して15ビットずつの区間を定め、どの区間の15ビットをCANフレーム中のCRC部に格納するのかを、送信カウンタ値の下位ビット(ビット数がnである)の値で特定している。なお、図4の例では、MAC値の総ビット数に応じたK個の区間(1区間は15ビット)が定められている。
送信部111は、CANフレームに対して、送信データ(ステップS112でMAC生成に使用されたもの)をデータ部に格納し、ステップS113でMAC値のビット列中から抽出された15ビットのビット列をCRC部に格納する。送信部111は、該CANフレームを通信バス3へ送信する。カウンタ部115は、該CANフレームの送信により送信カウンタ値を1だけ増加させて保持する。
以上が送信ノードの動作の説明である。
[受信ノードの動作]
次に図5、図6を参照して、MCU_2の受信ノードとしての動作を説明する。図5、図6は、本発明の第1実施形態に係る受信処理の手順を示す図である。図5の受信処理は、受信部112によりCANフレームを受信した際に開始される。
(ステップS121)MAC検査部116は、受信部112により受信したCANフレーム中のID部に格納されているIDに対応する受信カウンタ値を、カウンタ部115から取得する。MAC検査部116は、該取得した受信カウンタ値のビット列(ビット数がLである)から、所定の抽出ビット数分(L−nビット分)の上位ビットのみを上位抽出ビット(ビット数が「L−n」である)として取得する。この上位抽出ビットの取得方法は、上述したMAC生成部114の処理(ステップS111)と同じである。
(ステップS122)MAC検査部116は、受信部112により受信したCANフレーム中のデータ部から取得した受信データと、ステップS121で取得した上位抽出ビットと、秘密情報記憶部117に記憶されている秘密情報とを使用して、MACを生成する。このMACの値(算出MAC値)は、上述したMAC生成部114と同じ算出方法(例えば、SHA-256によるハッシュ値の算出)で算出される。
(ステップS123)MAC検査部116は、ステップS122で生成したMACのビット列(算出MAC値)から、検査の対象にする検査対象ビット列(15ビット)を抽出する。この検査対象ビット列の抽出方法は、上述したMAC生成部114での、CANフレーム中のCRC部に格納するビット列(15ビット)の抽出方法(ステップS113)と同様である。つまり、該検査対象ビット列は、算出MAC値のビット列のうち、ステップS121で取得した受信カウンタ値のビット列(ビット数がLである)のうち上位抽出ビット以外の所定の下位ビット(ビット数がnである)の値で特定される一部分(15ビット分)である。図5に示される例では、該下位ビット(ビット数がnである)の値は「3」である。これにより、算出MAC値のビット列中において、該値「3」で特定される一部分(15ビット分)を抽出する。
本実施形態では、CANフレーム中のCRC部(15ビット)に格納されている情報と、算出MAC値のビット列から抽出された検査対象ビット列(15ビット)との一致を検査する。このため、上述した送信処理と同様に、算出MAC値のビット列に対して15ビットずつの区間を定め、どの区間の15ビットを検査対象ビット列とするのかを、受信カウンタ値の下位ビット(ビット数がnである)の値で特定している。なお、図5の例では、算出MAC値の総ビット数に応じたK個の区間(1区間は15ビット)が定められている。
MAC検査部116は、受信部112により受信したCANフレーム中のCRC部から取得したMAC値(受信MAC値(15ビット))と、算出MAC値のビット列から抽出された検査対象ビット列(15ビット)とが一致するか否かを判定する。
該判定の結果、受信MAC値と検査対象ビット列とが一致である場合には、MAC検査部116は、フレーム受信処理部113に対して、検査合格を通知する。これにより、フレーム受信処理部113は、受信部112により受信したCANフレームに対して、正常に受信したCANフレームに対する所定の受信処理を行う。また、MAC検査部116は、カウンタ部115に対して、検査合格を通知する。これにより、カウンタ部115は、該当する受信カウンタ値を1だけ増加させて保持する。このカウント対象の受信カウンタ値は、受信部112により受信したCANフレーム中のID部に格納されているIDに対応する受信カウンタ値である。
一方、該判定の結果、受信MAC値と検査対象ビット列とが不一致である場合には、MAC検査部116は、図6に示される再検査処理を行う。以下、図6を参照して該再検査処理を説明する。
(ステップS131)MAC検査部116は、ステップS122で生成した算出MAC値のビット列から、再検査の対象にする再検査対象ビット列(15ビット)を抽出する。この再検査対象ビット列の抽出処理は、上述した検査対象ビット列の抽出処理と同様であるが、ステップS121で取得した受信カウンタ値を増加させた値(増加受信カウンタ値)を使用する。具体的には、まず、ステップS121で取得した受信カウンタ値に1を加える。そして、算出MAC値のビット列のうち、該受信カウンタ値に1を加算した値である増加受信カウンタ値のビット列における下位ビット(ビット数がnである)の値で特定される一部分(15ビット分)を、再検査対象ビット列として抽出する。
MAC検査部116は、該抽出した再検査対象ビット列と受信MAC値との一致を判定する。この判定の結果が不一致である場合には、現在の増加受信カウンタ値に対してさらに1を加算した値を新たな増加受信カウンタ値とする。そして、算出MAC値のビット列のうち、該新たな増加受信カウンタ値のビット列における下位ビット(ビット数がnである)の値で特定される一部分(15ビット分)を、新たな再検査対象ビット列として抽出する。そして、該抽出された新たな再検査対象ビット列と受信MAC値との一致を判定する。この再検査は、判定の結果が一致となるまで繰り返される。但し、算出MAC値のビット列の端の区間(下位ビットの値「K−1」で特定される区間)までで当該再検査は終了とする。この理由は、下位ビットの値が桁上げされて、算出MAC値の生成に使用される上位抽出ビットの値が変わるからである。
したがって、算出MAC値のビット列のうち、下位ビットの値「K−1」で特定される区間まで検査を行っても、受信MAC値と一致とならない場合には、下位ビットの値の桁上げ後の上位抽出ビットを使用して算出MAC値を再計算し、該再計算した新たな算出MAC値を使用して、上述した再検査と同様に、受信MAC値との一致の判定を行う。
(ステップS132)MAC検査部116は、ステップS131の再検査の結果、再検査対象ビット列と受信MAC値とが一致した場合に、カウンタ部115に対して、当該再検査対象ビット列に係る下位ビットの値を通知してカウンタ同期を指示する。カウンタ部115は、該カウンタ同期の指示により、該当する受信カウンタ値の下位ビット(ビット数がnである)の値を、通知された下位ビットの値に変更する。このカウンタ同期対象の受信カウンタ値は、受信部112により受信したCANフレーム中のID部に格納されているIDに対応する受信カウンタ値である。これにより、当該IDに対応する送信ノードの送信カウンタ値と、本受信ノードの当該IDに対応する受信カウンタ値との同期が取られることになる。
図6に示される例では、ステップS121で取得した受信カウンタ値における下位ビット(ビット数がnである)の値は「3」である。この値「3」で特定された検査対象ビット列では受信MAC値と不一致であった。このため、ステップS121で取得した受信カウンタ値に1を加算した増加受信カウンタ値のビット列における下位ビット(ビット数がnである)の値「4」で特定される部分を再検査対象ビット列として、受信MAC値との一致を判定する。図6の例では、該値「4」で特定された再検査対象ビット列でも、受信MAC値と不一致であった。このため、現在の増加受信カウンタ値に1を加算した新たな増加受信カウンタ値のビット列における下位ビット(ビット数がnである)の値「5」で特定される部分を再検査対象ビット列として、受信MAC値との一致を判定する。図6の例では、該値「5」で特定された再検査対象ビット列では、受信MAC値と一致であった。これにより、カウンタ部115において該当する受信カウンタ値の下位ビット(ビット数がnである)の値が「3」から「5」に変更される。
MAC検査部116は、所定回数だけ再検査を繰り返しても、再検査対象ビット列と受信MAC値とが不一致である場合には、フレーム受信処理部113に対して、検査不合格を通知する。これにより、フレーム受信処理部113は、受信部112により受信したCANフレームを破棄する。これは、通信エラー、又はなりすましメッセージを発信する攻撃が発生したと考えられるからである。なお、検査不合格の場合、MAC検査部116は、カウンタ部115に対して、検査合格を通知しない。これにより、カウンタ部115は、受信部112により受信したCANフレーム中のID部に格納されているIDに対応する受信カウンタ値に対して、受信カウンタ値の増加を行わない。
なお、受信ノードは、同一IDのCANフレームにおいて、同じMAC値を有するCANフレームを2回以上連続して受信した場合には、リプレイ攻撃が発生したと判断する。この場合、当該IDのCANフレームについては、受信処理を行わないようにする対処が挙げられる。
以上が受信ノードの動作の説明である。
本実施形態によれば、送信ノードから送信されるCANフレームには、当該CANフレームのデータ部に格納される送信データを使用して生成されたMACがCRC部に格納される。そして、受信ノードでは、受信したCANフレームのデータ部から取得した受信データを使用して生成したMACと、当該CANフレームのCRC部から取得したMACとを使用して、当該CANフレームの検査を行う。これにより、送信ノードから、送信データのCANフレームとは別にMACのCANフレームを送信する必要がないので、MACのCANフレームによりCANの通信帯域が圧迫される問題を解消できる。さらに、送信データとMACを同じCANフレームで受信できるので、検査の即時性を実現できる。
さらに、送信ノードと受信ノードで共通の秘密情報を使用してMACが生成されるので、該秘密情報を有さない送信ノードが生成したMACではCANフレームの検査が不合格となる。これにより、CANフレームの検査に対する信頼性が向上する。
また、生成されたMACのビット列のうち、送信カウンタ値の下位ビットで特定される区間をCANフレームに格納することにより、送信されるCANフレーム毎に格納されているMAC値が異なる。これにより、同じCANフレームを繰り返し送信するリプレイ攻撃を容易に検出できる。また、送信ノードではCANフレーム中のデータ部の送信データを使用してMACを生成するので、受信ノードで送信データの改竄を検出できる。
また、本実施形態では、MACの生成にはカウンタ値の上位抽出ビットを使用し、カウンタ値の上位抽出ビット以外の下位ビットによって、該MACのどの部分をCRC部に格納するのかを決める。このため、MACの再検査において、該下位ビットの桁上げが発生するまでは、MACの再計算を行う必要がなく、同じMACの中から再検査対象ビット列を変えながら再検査を繰り返し行うことができる。これにより、検査時の演算量を低減でき、検査時間の短縮に寄与できる。
また、本実施形態によれば、CANの既存のフレーム形式に対する変更が少ないという効果も得られる。
なお、本実施形態では、生成されたMACのうち一部分のみをCANフレーム中のCRC部に格納することから、MAC同士の衝突が発生する可能性がある。例えば、ハッシュ値の衝突は「1/2」の15乗(=1/32768)で発生する可能性がある。しかしながら、もしハッシュ値の衝突が発生しても、さらに次のハッシュ値の衝突が発生する確率はまた1/32768であるため、連続してハッシュ値の衝突が発生する確率は非常に小さくなる。例えば、同じ送信データを有する複数のCANフレーム(各CANフレームのMACは異なる)を連続して送信すれば、該複数のCANフレームのいずれかではMAC(ハッシュ値)の衝突が発生せず、正常に受信できると考えられるので、ハッシュ値の衝突による通信品質への影響は少ないと考えられる。
また、上述した実施形態では、CANフレーム中のCRC部にMACを格納したが、データ部に格納するようにしてもよい。図11は、本発明の一実施形態に係るデータフレームの他の例を示す構成図である。図11のデータフレームにおいて、各フィールド中に示されるカッコ内の数字は、当該フィールドに格納される情報のビット数を示している。図11に示されるデータフレームの構成は、CANにおける標準フォーマットのデータフレームの構成に対して、一部限定している。図11に示されるデータフレームでは、データフレーム中のデータ部(Data Field:データフィールド)に、MACを格納する。MACは、データ部内の所定の場所に格納される。例えば、データ部の先頭部分又は最後方部分に格納することが挙げられる。但し、最後方部分に格納する方が、データ部の既存の使用方法に対する影響が少ないと考えられる。図11の例では、MACは、データ部内の最後の部分に格納される。図11の例では、MACのデータ長は16ビットである。このため、データ部に格納されるMAC以外のデータのデータ長の最大値は、図11中に記載されるように、48ビットである。図11に示されるデータフレームにおいてデータ部にMACを格納する点以外は、CANにおける標準フォーマットと同じである。なお、データ部のサイズは64ビットであるので、CRC部(15ビット)に比して、生成されたMACのうちデータフレームに格納する部分を多くできる。但し、生成されたMACのうちデータフレームに格納する部分を多くすると、その分だけ、送信データのサイズが小さくなるので、データ部に格納するMACのサイズは、MACの衝突による影響が許容される程度に小さく抑えることが好ましい。なお、データ部にMACを格納する場合には、CRC部にはCRCを格納することにより、CRC機能を活用できる。
[第2実施形態]
第2実施形態は、上述した第1実施形態において、MCU_2が秘密情報を安全に保持するための構成例である。図7は、本発明の第2実施形態に係る通信ネットワークシステム1の構成を示すブロック図である。図7に示される通信ネットワークシステム1は車両に搭載される。図7に示される通信ネットワークシステム1において、CANの通信バス3には、複数のMCU_2−a,2−bが接続されている。第2実施形態においても、上述した第1実施形態と同様に、説明の便宜上、3台のMCU_2−a,2−bが通信バス3に接続されているとする。図7中に示されるように、3台の各MCU_2−a,2−bには、CANにおける識別子(ID)として、MCU_2−aにはID1が付与され、各MCU_2−bにはID2、ID3がそれぞれ付与されている。
MCU_2−aは、通信バス3に接続されるMCU_2−bを認証する処理においてマスタとして動作する。以下、MCU_2−aのことを「マスタMCU_2−a」と称する。また、MCU_2−bのことを「エンドMCU_2−b」と称する。また、MCU_2−a,2−bを特に区別しないときは「MCU_2」と称する。
次に、図7を参照して、マスタMCU_2−aとエンドMCU_2−bの構成を説明する。マスタMCU_2−aとエンドMCU_2−bとは同様の構成であるので、以下、MCU_2として、マスタMCU_2−aとエンドMCU_2−bの構成を説明する。
MCU_2は、CPU_10と、フラッシュメモリ(flash memory)11と、RAM(ランダムアクセスメモリ)_12と、ブートローダ(boot loader)13と、セキュアエレメント(secure element)14を有する。セキュアエレメント14は、セキュアRAM_21と、セキュアROM(Read Only Memory:リードオンリメモリ)_22と、検証部23と、暗号処理部24を有する。
CPU_10は、コンピュータプログラムを実行することにより、車両内の機器を制御するECUとしての機能およびCANにおけるノードとして機能を実現する。フラッシュメモリ11は、CPU_10で実行されるコンピュータプログラムと該コンピュータプログラムについての署名とを記憶する。RAM_12はデータを記憶する。RAM_12は、CPU_10がコンピュータプログラムを実行する際の実行領域となる。
ブートローダ13は、MCU_2の電源投入によりブート処理を行う。ブートローダ13は、該ブート処理の内容を変更できないようにROM化されている。
セキュアエレメント14は、セキュアエレメント14内部で保持されるデータに対してセキュアエレメント14外部からアクセスできない安全な要素として構成される。セキュアRAM_21は、セキュアエレメント14内部で保持されるデータの一時記憶領域である。セキュアRAM_21に対してセキュアエレメント14外部からはアクセスできないように構成される。セキュアROM_22は、セキュアエレメント14内部で使用される鍵を記憶する。セキュアROM_22に対してセキュアエレメント14外部からはアクセスできないように構成される。セキュアROM_22には、MCU_2の製造時などに、予め安全に鍵が書き込まれる。
検証部23は、ブートローダ13によるブート処理におけるプログラム正当性検証処理を、セキュアROM_22に保持される署名検証鍵を使用して行う。検証部23は、該プログラム正当性検証処理において、セキュアRAM_21を一時記憶領域として使用する。
暗号処理部24は、自己のMCU_2と他のMCU_2との間で交換される情報についての暗号処理を、セキュアROM_22に保持される暗号鍵を使用して行う。該暗号処理は、暗号化処理または復号化処理である。暗号処理部24は、該暗号処理において、セキュアRAM_21を一時記憶領域として使用する。
次に、図8を参照して、本実施形態に係るブート処理を説明する。図8は、本実施形態に係るブート処理のシーケンスチャートである。MCU_2の電源投入により図8の処理が開始される。
(ステップS1)ブートローダ13が、フラッシュメモリ11からコンピュータプログラムと署名とを読み込む。次いで、ブートローダ13が、該読み込んだコンピュータプログラムのハッシュ(hash)値を算出する。
(ステップS2)ブートローダ13が、該算出したハッシュ値と、フラッシュメモリ11から読み込んだ署名とをセキュアエレメント14へ送信する。
(ステップS3)セキュアエレメント14において検証部23が、セキュアROM_22に保持される署名検証鍵を使用して、ブートローダ13から受信した署名に含まれる値とブートローダ13から受信したハッシュ値との一致を検証する。この検証処理では、セキュアRAM_21が、検証処理におけるデータの一時記憶領域として使用される。該検証が成功した場合には、セキュアエレメント14はブートローダ13へ検証成功を通知する。
(ステップS4)ブートローダ13は、セキュアエレメント14から検証成功の通知を受信した場合に、ステップS1でフラッシュメモリ11から読み込んだコンピュータプログラムをRAM_12へロードする。これにより、CPU_10はRAM_12にロードされたコンピュータプログラムを実行することができる。
一方、ブートローダ13は、セキュアエレメント14からの検証成功の通知がない場合には(例えば、ステップS2の送信後から所定時間が経過してもセキュアエレメント14から検証成功の通知を受信しなかったり、セキュアエレメント14から検証失敗の通知を受信したりした場合)、ステップS1でフラッシュメモリ11から読み込んだコンピュータプログラムをRAM_12へロードしない。この場合、ブートローダ13がMCU_2の起動を停止する。
上述した本実施形態に係るブート処理によれば、セキュアエレメント14による署名検証によって、CPU_10で実行されるコンピュータプログラムの正当性検証が安全に行われる。これにより、CPU_10の実行領域であるRAM_12には正しいコンピュータプログラムがロードされ、該RAM_12にロードされたコンピュータプログラムをCPU_10が実行することにより、MCU_2が正常に起動する。よって、本実施形態に係る通信ネットワークシステム1では、MCU_2の個々において、MCU_2の起動時に当該MCU_2のコンピュータプログラム(例えば、オペレーティングシステム(Operating System:OS)など)の正当性を検証するセキュアブート(Secure Boot)が実現される。なお、セキュアブートについては、例えば非特許文献5に記載されている。
次に、図9を参照して、本実施形態に係る暗号処理を説明する。図9は、本実施形態に係る暗号処理のシーケンスチャートである。所定の契機により図9の処理が開始される。ここでは、秘密の情報である乱数を、マスタMCU_2−aからエンドMCU_2−bへ安全に通知する場面を例に挙げて説明する。なお、マスタMCU_2−aとエンドMCU_2−bとの間のデータの送受は通信バス3を介して行われる。
(ステップS11)マスタMCU_2−aが、自己のRAM_12に保持される初期乱数をチャレンジとしてエンドMCU_2−bへ送信する。また、マスタMCU_2−aは、該エンドMCU_2−bへチャレンジとして送信した初期乱数を、自己のセキュアエレメント14へ渡す。
(ステップS12)エンドMCU_2−bは、マスタMCU_2−aから受信したチャレンジである初期乱数を、自己のセキュアエレメント14に渡す。エンドMCU_2−bの暗号処理部24は、該渡された初期乱数を、自己のセキュアROM_22に保持される秘密鍵Ksを使用して暗号化する。この暗号化処理では、エンドMCU_2−bのセキュアRAM_21が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、エンドMCU_2−bは、暗号化された初期乱数である暗号化データKs(初期乱数)をレスポンスとしてマスタMCU_2−aへ送信する。
(ステップS13)マスタMCU_2−aは、エンドMCU_2−bから受信したレスポンスである暗号化データKs(初期乱数)を、自己のセキュアエレメント14に渡す。マスタMCU_2−aの暗号処理部24は、該渡された暗号化データKs(初期乱数)を、自己のセキュアROM_22に保持される該当エンドMCU_2−bの公開鍵Kpを使用して復号化する。次いで、マスタMCU_2−aの暗号処理部24は、該復号化により得られた復号化データと、ステップS11でチャレンジとしてエンドMCU_2−bへ送信された初期乱数との一致を検証する。それら復号化処理および検証処理では、マスタMCU_2−aのセキュアRAM_21が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドMCU_2−bの認証が成功したと判断できる。
該検証が成功した場合には、マスタMCU_2−aの暗号処理部24は、秘密の情報である乱数を生成し、生成した乱数を、自己のセキュアROM_22に保持される該当エンドMCU_2−bの公開鍵Kpを使用して暗号化する。それら乱数生成処理および暗号化処理では、マスタMCU_2−aのセキュアRAM_21が、乱数生成処理および暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタMCU_2−aは、暗号化された秘密の情報(乱数)である暗号化データKp(乱数)をエンドMCU_2−bへ送信する。
エンドMCU_2−bは、マスタMCU_2−aから受信した暗号化データKp(乱数)を、自己のセキュアエレメント14に渡す。エンドMCU_2−bの暗号処理部24は、該渡された暗号化データKp(乱数)を、自己のセキュアROM_22に保持される秘密鍵Ksを使用して復号化する。この復号化処理では、エンドMCU_2−bのセキュアRAM_21が、復号化処理におけるデータの一時記憶領域として使用される。該復号化処理によって暗号化データKp(乱数)から、秘密の情報である乱数が取得される。該取得された乱数は、エンドMCU_2−bのセキュアRAM_21で安全に保持される。
上述した本実施形態に係る暗号処理によれば、セキュアエレメント14による暗号処理によって、MCU_2間(上述した例ではマスタMCU_2−aとエンドMCU_2−bの間)で交換される情報の暗号処理(暗号化処理、復号化処理)が安全に行われる。これにより、MCU_2間で交換される情報の安全性が保たれる。
さらに、当該暗号処理に基づいたチャレンジ・レスポンスによって、マスタMCU_2−aがエンドMCU_2−bの確かな認証を行うことができる。そして、マスタMCU_2−aから認証済みのエンドMCU_2−bに対して、当該暗号処理に基づいて秘密の情報を安全に送信することができる。この秘密の情報は、上述した第1実施形態における秘密情報として利用できる。上述した例では、マスタMCU_2−aからエンドMCU_2−bに対して、安全に、秘密の情報である乱数が伝達される。
次に、図10を参照して、本実施形態に係るMAC生成処理およびMAC検査処理を説明する。図10は、本実施形態に係るMAC生成処理およびMAC検査処理を説明するためのシーケンスチャートである。上述した図9に係る暗号処理によって、マスタMCU_2−aから認証済みのエンドMCU_2−bに対して、秘密の情報である乱数が安全に送信されている。マスタMCU_2−a及びエンドMCU_2−bは、該秘密の情報である乱数をセキュアRAM_21に格納する。このセキュアRAM_21は、上述した第1実施形態における秘密情報記憶部117として、該乱数(秘密情報)を安全に保持する。
図10において、送信側MCU_2は送信ノードとして動作する。送信側MCU_2はマスタMCU_2−aであってもよく、又は、エンドMCU_2−bであってもよい。受信側MCU_2は受信ノードとして動作する。受信側MCU_2はマスタMCU_2−aであってもよく、又は、エンドMCU_2−bであってもよい。送信側MCU_2は、RAM_12に送信カウンタ値および送信データを保持している。受信側MCU_2は、RAM_12に受信カウンタ値を保持している。図10の処理は、送信側MCU_2から送信されるCANフレームを作成する際に開始される。
(ステップS21)送信側MCU_2は、RAM_12からセキュアRAM_21へ、送信データおよび送信カウンタ値を渡す。送信側MCU_2のセキュアエレメント14は、セキュアRAM_21に保持される、乱数(秘密情報)と送信データと送信カウンタ値を使用して、MACの生成を行う。このMACの生成方法は、上述した第1実施形態と同様である。但し、該MACの生成は、セキュアRAM_21において安全に行われる。このMACの生成の結果としてMAC値のビット列中から抽出された15ビットのビット列(CRC部用抽出MACビット列)は、セキュアRAM_21からRAM_12へ渡される。
(ステップS22)送信側MCU_2は、CANフレームに対して、ステップS21でRAM_12からセキュアRAM_21へ渡した送信データをデータ部に格納し、ステップS21でセキュアRAM_21からRAM_12へ渡されたCRC部用抽出MACビット列をCRC部に格納する。送信側MCU_2は、該CANフレームを通信バス3へ送信する。このCANフレームは、通信バス3を介して受信側MCU_2で受信される。
(ステップS23)受信側MCU_2は、通信バス3から受信したCANフレームをRAM_12に保持する。受信側MCU_2は、RAM_12に保持されるCANフレーム中のデータ部から取得した受信データとCRC部から取得した受信MAC値とをセキュアRAM_21へ渡す。さらに、受信側MCU_2は、RAM_12に保持されるCANフレーム中のID部に格納されているIDに対応する受信カウンタ値を、RAM_12からセキュアRAM_21へ渡す。
次いで、受信側MCU_2のセキュアエレメント14は、セキュアRAM_21に保持される、乱数(秘密情報)と受信データと受信カウンタ値を使用して、MACの生成を行う。このMACの生成方法は、上述した第1実施形態と同様である。但し、該MACの生成は、セキュアRAM_21において安全に行われる。このMACの生成の結果として算出MAC値のビット列中から15ビットの検査対象ビット列が抽出される。次いで、受信側MCU_2のセキュアエレメント14は、セキュアRAM_21に保持される受信MAC値と検査対象ビット列との一致を判定する。この判定の結果が不一致である場合には、上述した第1実施形態と同様に再検査が行われる。
上述したように本実施形態によれば、セキュアRAM_21に安全に保持される乱数(秘密情報)を使用してMACの生成および検査が行われる。これにより、CANフレームの検査に対する信頼性が向上する。
以上、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
例えば、上述した実施形態では、1台のMCU_2が送信ノードの機能と受信ノードの機能とを有したが、1台のMCU_2が送信ノードの機能のみを有してもよく、又は、1台のMCU_2が受信ノードの機能のみを有してもよい。
また、一つのMCU_2が一つの半導体装置として構成されてもよい。一つのMCU_2が一つの半導体集積回路としてワンチップ化されることにより、安全性がさらに向上する。
また、セキュアエレメントとして、例えば、無線通信に使用されるeSIM(Embedded Subscriber Identity Module)又はSIM(Subscriber Identity Module)を使用してもよい。eSIMおよびSIMは、コンピュータの一種であり、コンピュータプログラムによって所望の機能を実現する。又は、セキュアエレメントとして、例えば、耐タンパー性(Tamper Resistant)のある暗号処理チップを使用してもよい。耐タンパー性のある暗号処理チップとして、例えば、TPM(Trusted Platform Module)と呼ばれる暗号処理チップが知られている。TPMについては、例えば非特許文献6に記載されている。
また、上述した実施形態は、車両として、例えば、自動車、原動機付自転車、鉄道車両等に適用可能である。
また、上述した実施形態では、本発明に係る通信ネットワークシステムの一態様として、車両に搭載される通信ネットワークシステムを例に挙げて説明したが、本発明に係る通信ネットワークシステムは様々な分野に適用可能である。例えば、家電製品を制御するコンピュータとしてMCU_2を適用し、宅内の各家電製品のMCU_2を宅内ネットワークで接続するように構成してもよい。また、スマートメーターとしてMCU_2を適用し、各スマートメーターのMCU_2を通信ネットワークで接続するように構成してもよい。
[データフレームの構成の他の実施例1]
データフレームの構成の他の実施例1を説明する。図12は、CANにおける拡張フォーマットのデータフレームを示す構成図である(例えば、非特許文献7参照)。図12に示されるように、CANにおける拡張フォーマットのデータフレームは、11ビット長のベースID(Base ID)フィールドと、18ビット長の拡張ID(Extend ID)フィールドと、を有する。この拡張フォーマットでは、IDの格納領域として、ベースIDフィールドと拡張IDフィールドとを合わせた最大29ビットが使用可能である。本実施例1では、ベースIDフィールドと拡張IDフィールドとを合わせた29ビット長の領域にMACを格納する。以下に、ベースIDフィールドと拡張IDフィールドとを合わせた29ビット長の領域にMACを格納するMAC格納方法の例1,2,3を説明する。
(MAC格納方法の例1)
MAC格納方法の例1では、図13に示されるように、18ビット長の拡張IDフィールドをMAC格納領域に使用する。ベースIDフィールドはIDを格納する領域に使用される。図13の例では、ベースIDフィールドに、データフレームの送信元のMCU_2のアドレスである送信元アドレスを格納する。
(MAC格納方法の例2)
MAC格納方法の例2は、ベースIDフィールドと拡張IDフィールドとを合わせた29ビット長の領域に、データフレームの送信元のMCU_2のアドレスである送信元アドレスと、データフレームの送信先のMCU_2のアドレスである送信先アドレスと、送信先タイプと、を格納する場合(例えば、非特許文献8参照)において、当該29ビット長の領域にMACを格納する方法である。図14は、本発明の一実施形態に係るMAC格納方法の例2を示す説明図である。
図14に示されるように、8ビット長の送信元アドレスを、変換・圧縮テーブルを使用して7ビット長の送信元アドレスに変換する。同様に、8ビット長の送信先アドレスを、変換・圧縮テーブルを使用して7ビット長の送信先アドレスに変換する。同様に、8ビット長の送信先タイプを、変換・圧縮テーブルを使用して2ビット長の送信先タイプに変換する。元の送信元アドレスは8ビット長であるが、実際に使用される送信元アドレスは7ビットで表現できることが前提である。同様に、元の送信先アドレスは8ビット長であるが、実際に使用される送信先アドレスは7ビットで表現できることが前提である。同様に、元の送信先タイプは8ビット長であるが、実際に使用される送信先タイプは2ビットで表現できることが前提である。各変換・圧縮テーブルは予め設けられる。
8ビット長の送信元アドレスが7ビット長に、8ビット長の送信先アドレスが7ビット長に、8ビット長の送信先タイプが2ビット長に、それぞれ変換されることによって、合計8ビットが未使用になる。この未使用の8ビットと元々の空き領域の5ビットとを合わせた13ビットを、図14に示されるように、MAC格納領域に使用する。
なお、受信側には、各変換・圧縮テーブルに対応する逆変換・拡張テーブルが予め設けられる。受信側は、各逆変換・拡張テーブルを使用して、受信した7ビット長の送信元アドレスを8ビット長に、受信した7ビット長の送信先アドレスを8ビット長に、受信した2ビット長の送信先タイプを8ビット長に、それぞれ逆変換する。
(MAC格納方法の例3)
MAC格納方法の例3は、上述したMAC格納方法の例2と同様に、ベースIDフィールドと拡張IDフィールドとを合わせた29ビット長の領域に、データフレームの送信元のMCU_2のアドレスである送信元アドレスと、データフレームの送信先のMCU_2のアドレスである送信先アドレスと、送信先タイプと、を格納する場合において、当該29ビット長の領域にMACを格納する方法である。図15は、本発明の一実施形態に係るMAC格納方法の例3を示す説明図である。
MAC格納方法の例3では、図14に示されるように、8ビット長の送信元アドレスと8ビット長の送信先アドレスとは、そのまま格納される。8ビット長の送信先タイプは、変換・圧縮テーブルを使用して2ビット長の送信先タイプに変換される。元の送信先タイプは8ビット長であるが、実際に使用される送信先タイプは2ビットで表現できることが前提である。変換・圧縮テーブルは予め設けられる。
8ビット長の送信先タイプが2ビット長に変換されることによって、6ビットが未使用になる。この未使用の6ビットと元々の空き領域の5ビットとを合わせた11ビットを、図15に示されるように、MAC格納領域に使用する。
なお、受信側には、送信先タイプの変換・圧縮テーブルに対応する逆変換・拡張テーブルが予め設けられる。受信側は、逆変換・拡張テーブルを使用して、受信した2ビット長の送信先タイプを8ビット長に逆変換する。
[データフレームの構成の他の実施例2]
データフレームの構成の他の実施例2を説明する。図16は、本発明の一実施形態に係るデータフレームの他の例を示す構成図である。図16のデータフレームにおいて、各フィールド中に示されるカッコ内の数字は、当該フィールドに格納される情報のビット数を示している。図16に示されるデータフレームの構成は、CANにおける拡張フォーマットのデータフレームの構成に対して、一部限定している。図16に示されるデータフレームでは、データフレーム中のデータ部(Data Field:データフィールド)に、MACを格納する。MACは、データ部内の所定の場所に格納される。例えば、データ部の先頭部分又は最後方部分に格納することが挙げられる。但し、最後方部分に格納する方が、データ部の既存の使用方法に対する影響が少ないと考えられる。図16の例では、MACは、データ部内の最後の部分に格納される。図16の例では、MACのデータ長は16ビットである。このため、データ部に格納されるMAC以外のデータのデータ長の最大値は、図16中に記載されるように、48ビットである。図16に示されるデータフレームにおいてデータ部にMACを格納する点以外は、CANにおける拡張フォーマットと同じである。
[データフレームに格納するMACデータの他の例]
図17及び図18は、本発明の一実施形態に係るデータフレームに格納するMACデータの他の例を示す説明図である。データフレームの構成としては、例えば、上述した図3に示されるCANフレームである。はじめに図17を参照して、送信ノードがCANフレームにMACデータを格納する動作を説明する。図17において、上述の図4の各ステップに対応する部分には同一の符号を付け、その説明を省略する。
図17の送信処理は、送信部111から送信されるCANフレームを作成する際に開始される。まずステップS111,S112が実行される。ステップS111,S112は上述の図4と同じである。ステップS111,S112によってMAC値が算出される。次いで、MAC生成部114は、ステップS112で算出したMAC値から、CANフレームに格納する所定ビット数のビット列(MAC抽出値)を抽出する。このMAC抽出値は、ステップS111で取得した送信カウンタ値のビット列(ビット数がLである)のうち上位抽出ビット以外の所定の下位ビット(ビット数がnである)の値で特定される。図17に示される例では、該下位ビット(ビット数がnである)の値は「3」である。これにより、MAC値のビット列中において、該値「3」で特定される一部分(MAC抽出値)を抽出する。
次いで、MAC生成部114は、MAC値から抽出したMAC抽出値と、該MAC抽出値に関するMAC値内の位置情報とから、送信MACデータを生成する。図17の例では、MAC抽出値に関するMAC値内の位置情報は、ステップS111で取得した送信カウンタ値のビット列のうち上位抽出ビット以外の所定の下位ビットの値「3」である。また、図17の例では、送信MACデータは、MAC抽出値の後ろに下位ビットの値「3」が付加される。送信MACデータは、CANフレームに格納される。上述した図3に示されるCANフレームの場合、送信MACデータはCRC部に格納される。
なお、送信MACデータの構成は予め定められる。図3に示されるCANフレームの場合、送信MACデータの格納場所であるCRC部は15ビット長であるので、送信MACデータのデータ長は15ビットである。また、送信MACデータは、MAC抽出値の前に、MAC抽出値に関するMAC値内の位置情報が付加されてもよい。また、MAC抽出値に関するMAC値内の位置情報は、ステップS111で取得した送信カウンタ値のビット列のうち上位抽出ビット以外の所定の下位ビットの全部であってもよく、又は、該下位ビット中の最下位側の一部であってもよい。
次いで、送信部111は、CANフレームに対して、送信データ(ステップS112でMAC値の算出に使用されたもの)をデータ部に格納し、送信MACデータをCRC部に格納する。送信部111は、該CANフレームを通信バス3へ送信する。カウンタ部115は、該CANフレームの送信により送信カウンタ値を1だけ増加させて保持する。
次に図18を参照して、受信ノードがCANフレームを受信したときの動作を説明する。図18において、上述の図5の各ステップに対応する部分には同一の符号を付け、その説明を省略する。
図18の受信処理は、受信部112によりCANフレームを受信した際に開始される。まずステップS121,S122が実行される。ステップS121,S122は上述の図5と同じである。ステップS121,S122によってMAC値が算出される。次いで、MAC検査部116は、受信部112により受信したCANフレーム中のCRC部からMACデータ(受信MACデータ)を取得する。MAC検査部116は、受信MACデータから、MAC抽出値とMAC抽出値に関するMAC値内の位置情報とを取得する。図17の例では、MAC抽出値に関するMAC値内の位置情報は「3」である。
次いで、MAC検査部116は、受信MACデータから取得した位置情報「3」に基づいて、ステップS122で算出されたMAC値のビット列(算出MAC値)から、MAC検査に使用するMAC検査値を取得する。次いで、MAC検査部116は、受信MACデータから取得したMAC抽出値と、算出MAC値から取得したMAC検査値とを比較し、両者が一致するか否かを判定する。この判定の結果、両者が一致しない場合、MAC検査部116は、算出MAC値からMAC検査値を取得する取得場所を変えながら、算出MAC値からMAC検査値を取得してMAC抽出値と一致するか否かを調べる。例えば、算出MAC値からMAC検査値を取得する取得場所を1ビットずつずらしながら、算出MAC値からMAC検査値を取得してMAC抽出値と一致するか否かを調べる。
MAC検査部116は、MAC抽出値とMAC検査値とが一致した場合、該一致したMAC検査値を算出MAC値から取得した取得場所に対応するビット値(下位ビット値)を、カウンタ部115に通知して、カウンタ同期を指示する。カウンタ部115は、該カウンタ同期の指示により、該当する受信カウンタ値の下位ビットの値を、通知された下位ビット値に変更する。図18の例では、MAC抽出値と一致したMAC検査値を算出MAC値から取得した取得場所に対応する下位ビット値は「3」である。したがって、MAC検査部116は、下位ビット値「3」をカウンタ部115に通知してカウンタ同期を指示する。カウンタ部115は、該カウンタ同期の指示により、該当する受信カウンタ値の下位ビットの値を、通知された下位ビット値「3」に変更する。このカウンタ同期対象の受信カウンタ値は、受信部112により受信したCANフレーム中のID部に格納されているIDに対応する受信カウンタ値である。これにより、当該IDに対応する送信ノードの送信カウンタ値と、本受信ノードの当該IDに対応する受信カウンタ値との同期が取られることになる。
上述した図17及び図18に係るデータフレームに格納するMACデータの例によれば、受信ノードにおいて算出MAC値からMAC検査値を取得する取得場所の情報が送信ノードから受信ノードに通知されるので、受信ノードにおけるMAC検査の効率が向上する。これにより、例えば、MCU_2間の通信に要する時間の短縮を図ることができる等の効果が得られる。
[MACの他の例]
MACとして、例えば、Code MAC(CMAC)を算出することが挙げられる。CMACは共通鍵暗号ベースのMACである。
[暗号処理の他の実施例1]
図19は、本発明の一実施形態に係る暗号処理のシーケンスチャートである。図19を参照して、暗号処理の他の実施例1を説明する。暗号処理の他の実施例1は、上述した第2実施形態の変形例である。暗号処理の他の実施例1に係る通信ネットワークシステムは、上述した第2実施形態に係る図7の通信ネットワークシステム1の構成と同じであり、例えば自動車に搭載される。但し、暗号処理の他の実施例1では、マスタMCU_2−a及びエンドMCU_2−bの各セキュアROM_22は、同じ共通鍵Kcomを記憶する。共通鍵は対称鍵とも呼ばれる。
所定の契機により図19の処理が開始される。ここでは、秘密の情報である乱数を、マスタMCU_2−aからエンドMCU_2−bへ安全に通知する場面を例に挙げて説明する。なお、マスタMCU_2−aとエンドMCU_2−bとの間のデータの送受は通信バス3を介して行われる。
(ステップS201)マスタMCU_2−aが、生成して自己のRAM_12に保持される初期乱数をチャレンジとしてエンドMCU_2−bへ送信する。また、マスタMCU_2−aは、該エンドMCU_2−bへチャレンジとして送信した初期乱数を、自己のセキュアエレメント14へ渡す。
(ステップS202)エンドMCU_2−bは、マスタMCU_2−aから受信したチャレンジである初期乱数を、自己のセキュアエレメント14に渡す。エンドMCU_2−bの暗号処理部24は、該渡された初期乱数を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して暗号化する。この暗号化処理では、エンドMCU_2−bのセキュアRAM_21が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、エンドMCU_2−bは、暗号化された初期乱数である暗号化データKcom(初期乱数)をレスポンスとしてマスタMCU_2−aへ送信する。
(ステップS203)マスタMCU_2−aは、エンドMCU_2−bから受信したレスポンスである暗号化データKcom(初期乱数)を、自己のセキュアエレメント14に渡す。マスタMCU_2−aの暗号処理部24は、該渡された暗号化データKcom(初期乱数)を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して復号化する。次いで、マスタMCU_2−aの暗号処理部24は、該復号化により得られた復号化データと、ステップS201でチャレンジとしてエンドMCU_2−bへ送信された初期乱数との一致を検証する。それら復号化処理および検証処理では、マスタMCU_2−aのセキュアRAM_21が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドMCU_2−bの認証が成功したと判断できる。
なお、マスタMCU_2−aは、レスポンスである暗号化データKcom(初期乱数)を復号化する代わりに、ステップS201でチャレンジとしてエンドMCU_2−bへ送信された初期乱数を共通鍵Kcomで暗号化し、この暗号化データKcom(初期乱数)とレスポンスである暗号化データKcom(初期乱数)との一致を検証してもよい。それら暗号化処理および検証処理では、マスタMCU_2−aのセキュアRAM_21が、暗号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドMCU_2−bの認証が成功したと判断できる。
該検証が成功した場合には、マスタMCU_2−aの暗号処理部24は、秘密の情報である乱数を生成し、生成した乱数を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して暗号化する。それら乱数生成処理および暗号化処理では、マスタMCU_2−aのセキュアRAM_21が、乱数生成処理および暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタMCU_2−aは、暗号化された秘密の情報(乱数)である暗号化データKcom(乱数)をエンドMCU_2−bへ送信する。
エンドMCU_2−bは、マスタMCU_2−aから受信した暗号化データKcom(乱数)を、自己のセキュアエレメント14に渡す。エンドMCU_2−bの暗号処理部24は、該渡された暗号化データKcom(乱数)を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して復号化する。この復号化処理では、エンドMCU_2−bのセキュアRAM_21が、復号化処理におけるデータの一時記憶領域として使用される。該復号化処理によって暗号化データKcom(乱数)から、秘密の情報である乱数が取得される。
(ステップS204)エンドMCU_2−bは、自己のセキュアエレメント14が取得した秘密の情報である乱数を自己のRAM12に記憶する。マスタMCU_2−aは、エンドMCU_2−bへ送信した秘密の情報である乱数を自己のRAM12に記憶する。マスタMCU_2−aとエンドMCU_2−bとは、同じ秘密の情報である乱数を保持する。
上述した暗号処理の他の実施例1によれば、セキュアエレメント14による暗号処理によって、MCU_2間(上述した例ではマスタMCU_2−aとエンドMCU_2−bの間)で交換される情報の暗号処理(暗号化処理、復号化処理)が安全に行われる。これにより、MCU_2間で交換される情報の安全性が保たれる。
さらに、当該暗号処理に基づいたチャレンジ・レスポンスによって、マスタMCU_2−aがエンドMCU_2−bの確かな認証を行うことができる。そして、マスタMCU_2−aから認証済みのエンドMCU_2−bに対して、当該暗号処理に基づいて秘密の情報を安全に送信することができる。この秘密の情報は、上述した第1実施形態における秘密情報として利用できる。上述した暗号処理の他の実施例1では、マスタMCU_2−aからエンドMCU_2−bに対して、安全に、秘密の情報である乱数が伝達される。
[暗号処理の他の実施例2]
図20は、本発明の一実施形態に係る暗号処理のシーケンスチャートである。図20を参照して、暗号処理の他の実施例2を説明する。暗号処理の他の実施例2は、上述した第2実施形態の変形例である。暗号処理の他の実施例2に係る通信ネットワークシステムは、上述した第2実施形態に係る図7の通信ネットワークシステム1の構成と同じであり、例えば自動車に搭載される。但し、暗号処理の他の実施例2では、マスタMCU_2−a及びエンドMCU_2−bの各セキュアROM_22は、同じ共通鍵Kcomを記憶する。
所定の契機により図20の処理が開始される。ここでは、秘密の情報である乱数を、マスタMCU_2−aからエンドMCU_2−bへ安全に通知する場面を例に挙げて説明する。なお、マスタMCU_2−aとエンドMCU_2−bとの間のデータの送受は通信バス3を介して行われる。
(ステップS211)マスタMCU_2−aが、生成して自己のRAM_12に保持される初期乱数をチャレンジとしてエンドMCU_2−bへ送信する。また、マスタMCU_2−aは、該エンドMCU_2−bへチャレンジとして送信した初期乱数を、自己のセキュアエレメント14へ渡す。
(ステップS212)エンドMCU_2−bは、マスタMCU_2−aから受信したチャレンジである初期乱数を、自己のセキュアエレメント14に渡す。エンドMCU_2−bの暗号処理部24は、該渡された初期乱数を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して暗号化する。この暗号化処理では、エンドMCU_2−bのセキュアRAM_21が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、エンドMCU_2−bは、暗号化された初期乱数である暗号化データKcom(初期乱数)をレスポンスとしてマスタMCU_2−aへ送信する。
マスタMCU_2−aは、エンドMCU_2−bから受信したレスポンスである暗号化データKcom(初期乱数)を、自己のセキュアエレメント14に渡す。マスタMCU_2−aの暗号処理部24は、該渡された暗号化データKcom(初期乱数)を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して復号化する。次いで、マスタMCU_2−aの暗号処理部24は、該復号化により得られた復号化データと、ステップS211でチャレンジとしてエンドMCU_2−bへ送信された初期乱数との一致を検証する。それら復号化処理および検証処理では、マスタMCU_2−aのセキュアRAM_21が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドMCU_2−bの認証が成功したと判断できる。
なお、マスタMCU_2−aは、レスポンスである暗号化データKcom(初期乱数)を復号化する代わりに、ステップS211でチャレンジとしてエンドMCU_2−bへ送信された初期乱数を共通鍵Kcomで暗号化し、この暗号化データKcom(初期乱数)とレスポンスである暗号化データKcom(初期乱数)との一致を検証してもよい。それら暗号化処理および検証処理では、マスタMCU_2−aのセキュアRAM_21が、暗号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドMCU_2−bの認証が成功したと判断できる。
(ステップS213)エンドMCU_2−bが、生成して自己のRAM_12に保持される初期乱数をチャレンジとしてマスタMCU_2−aへ送信する。また、エンドMCU_2−bは、該マスタMCU_2−aへチャレンジとして送信した初期乱数を、自己のセキュアエレメント14へ渡す。
(ステップS214)マスタMCU_2−aは、エンドMCU_2−bから受信したチャレンジである初期乱数を、自己のセキュアエレメント14に渡す。マスタMCU_2−aの暗号処理部24は、該渡された初期乱数を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して暗号化する。この暗号化処理では、マスタMCU_2−aのセキュアRAM_21が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタMCU_2−aは、暗号化された初期乱数である暗号化データKcom(初期乱数)をレスポンスとしてエンドMCU_2−bへ送信する。
エンドMCU_2−bは、マスタMCU_2−aから受信したレスポンスである暗号化データKcom(初期乱数)を、自己のセキュアエレメント14に渡す。エンドMCU_2−bの暗号処理部24は、該渡された暗号化データKcom(初期乱数)を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して復号化する。次いで、エンドMCU_2−bの暗号処理部24は、該復号化により得られた復号化データと、ステップS213でチャレンジとしてマスタMCU_2−aへ送信された初期乱数との一致を検証する。それら復号化処理および検証処理では、エンドMCU_2−bのセキュアRAM_21が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該マスタMCU_2−aの認証が成功したと判断できる。
なお、エンドMCU_2−bは、レスポンスである暗号化データKcom(初期乱数)を復号化する代わりに、ステップS213でチャレンジとしてマスタMCU_2−aへ送信された初期乱数を共通鍵Kcomで暗号化し、この暗号化データKcom(初期乱数)とレスポンスである暗号化データKcom(初期乱数)との一致を検証してもよい。それら暗号化処理および検証処理では、エンドMCU_2−bのセキュアRAM_21が、暗号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該マスタMCU_2−aの認証が成功したと判断できる。
上述したマスタMCU_2−aとエンドMCU_2−bとの間の相互認証が成功した場合には、ステップS215において、マスタMCU_2−aからエンドMCU_2−bに対して、秘密の情報である乱数が伝達される。
(ステップS215)マスタMCU_2−aの暗号処理部24は、秘密の情報である乱数を生成し、生成した乱数を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して暗号化する。それら乱数生成処理および暗号化処理では、マスタMCU_2−aのセキュアRAM_21が、乱数生成処理および暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタMCU_2−aは、暗号化された秘密の情報(乱数)である暗号化データKcom(乱数)をエンドMCU_2−bへ送信する。
エンドMCU_2−bは、マスタMCU_2−aから受信した暗号化データKcom(乱数)を、自己のセキュアエレメント14に渡す。エンドMCU_2−bの暗号処理部24は、該渡された暗号化データKcom(乱数)を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して復号化する。この復号化処理では、エンドMCU_2−bのセキュアRAM_21が、復号化処理におけるデータの一時記憶領域として使用される。該復号化処理によって暗号化データKcom(乱数)から、秘密の情報である乱数が取得される。
(ステップS216)エンドMCU_2−bは、自己のセキュアエレメント14が取得した秘密の情報である乱数を自己のRAM12に記憶する。マスタMCU_2−aは、エンドMCU_2−bへ送信した秘密の情報である乱数を自己のRAM12に記憶する。マスタMCU_2−aとエンドMCU_2−bとは、同じ秘密の情報である乱数を保持する。
上述した暗号処理の他の実施例2によれば、セキュアエレメント14による暗号処理によって、MCU_2間(上述した例ではマスタMCU_2−aとエンドMCU_2−bの間)で交換される情報の暗号処理(暗号化処理、復号化処理)が安全に行われる。これにより、MCU_2間で交換される情報の安全性が保たれる。
さらに、当該暗号処理に基づいたチャレンジ・レスポンスによって、マスタMCU_2−aとエンドMCU_2−bとが確かな相互認証を行うことができる。そして、相互認証済みのマスタMCU_2−aとエンドMCU_2−bとの間で、マスタMCU_2−aからエンドMCU_2−bに対して、当該暗号処理に基づいて秘密の情報を安全に送信することができる。この秘密の情報は、上述した第1実施形態における秘密情報として利用できる。上述した暗号処理の他の実施例2では、マスタMCU_2−aからエンドMCU_2−bに対して、安全に、秘密の情報である乱数が伝達される。
[暗号処理の他の実施例3]
図21は、本発明の一実施形態に係る暗号処理のシーケンスチャートである。図21を参照して、暗号処理の他の実施例3を説明する。暗号処理の他の実施例3は、上述した第2実施形態の変形例である。暗号処理の他の実施例3に係る通信ネットワークシステムは、上述した第2実施形態に係る図7の通信ネットワークシステム1の構成と同じであり、例えば自動車に搭載される。但し、暗号処理の他の実施例3では、マスタMCU_2−a及びエンドMCU_2−bの各セキュアROM_22は、同じ共通鍵Kcomを記憶する。共通鍵は対称鍵とも呼ばれる。
所定の契機により図21の処理が開始される。ここでは、秘密の情報である乱数を、マスタMCU_2−aからエンドMCU_2−bへ安全に通知する場面を例に挙げて説明する。なお、マスタMCU_2−aとエンドMCU_2−bとの間のデータの送受は通信バス3を介して行われる。
(ステップS221)マスタMCU_2−aの暗号処理部24は、初期乱数を生成する。この乱数生成処理では、マスタMCU_2−aのセキュアRAM_21が、乱数生成処理におけるデータの一時記憶領域として使用される。生成された初期乱数は、マスタMCU_2−aのセキュアRAM_21に保持される。マスタMCU_2−aは、自己のセキュアRAM_21に保持される初期乱数をチャレンジとしてエンドMCU_2−bへ送信する。
(ステップS222)エンドMCU_2−bは、マスタMCU_2−aから受信したチャレンジである初期乱数を、自己のセキュアエレメント14に渡す。エンドMCU_2−bの暗号処理部24は、該渡された初期乱数を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して暗号化する。この暗号化処理では、エンドMCU_2−bのセキュアRAM_21が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、エンドMCU_2−bは、暗号化された初期乱数である暗号化データKcom(初期乱数)をレスポンスとしてマスタMCU_2−aへ送信する。
(ステップS223)マスタMCU_2−aは、エンドMCU_2−bから受信したレスポンスである暗号化データKcom(初期乱数)を、自己のセキュアエレメント14に渡す。マスタMCU_2−aの暗号処理部24は、該渡された暗号化データKcom(初期乱数)を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して復号化する。次いで、マスタMCU_2−aの暗号処理部24は、該復号化により得られた復号化データと、自己のマスタMCU_2−aのセキュアRAM_21に保持される初期乱数との一致を検証する。それら復号化処理および検証処理では、マスタMCU_2−aのセキュアRAM_21が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドMCU_2−bの認証が成功したと判断できる。
なお、マスタMCU_2−aは、レスポンスである暗号化データKcom(初期乱数)を復号化する代わりに、自己のセキュアRAM_21に保持される初期乱数を共通鍵Kcomで暗号化し、この暗号化データKcom(初期乱数)とレスポンスである暗号化データKcom(初期乱数)との一致を検証してもよい。それら暗号化処理および検証処理では、マスタMCU_2−aのセキュアRAM_21が、暗号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドMCU_2−bの認証が成功したと判断できる。
該検証が成功した場合には、マスタMCU_2−aの暗号処理部24は、秘密の情報である乱数を生成し、生成した乱数を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して暗号化する。それら乱数生成処理および暗号化処理では、マスタMCU_2−aのセキュアRAM_21が、乱数生成処理および暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタMCU_2−aは、暗号化された秘密の情報(乱数)である暗号化データKcom(乱数)をエンドMCU_2−bへ送信する。
エンドMCU_2−bは、マスタMCU_2−aから受信した暗号化データKcom(乱数)を、自己のセキュアエレメント14に渡す。エンドMCU_2−bの暗号処理部24は、該渡された暗号化データKcom(乱数)を、自己のセキュアROM_22に保持される共通鍵Kcomを使用して復号化する。この復号化処理では、エンドMCU_2−bのセキュアRAM_21が、復号化処理におけるデータの一時記憶領域として使用される。該復号化処理によって暗号化データKcom(乱数)から、秘密の情報である乱数が取得される。
(ステップS224)エンドMCU_2−bは、自己のセキュアエレメント14が取得した秘密の情報である乱数を自己のRAM12に記憶する。マスタMCU_2−aは、エンドMCU_2−bへ送信した秘密の情報である乱数を自己のRAM12に記憶する。マスタMCU_2−aとエンドMCU_2−bとは、同じ秘密の情報である乱数を保持する。
上述した暗号処理の他の実施例3によれば、セキュアエレメント14による暗号処理によって、MCU_2間(上述した例ではマスタMCU_2−aとエンドMCU_2−bの間)で交換される情報の暗号処理(暗号化処理、復号化処理)が安全に行われる。これにより、MCU_2間で交換される情報の安全性が保たれる。
さらに、当該暗号処理に基づいたチャレンジ・レスポンスによって、マスタMCU_2−aがエンドMCU_2−bの確かな認証を行うことができる。そして、マスタMCU_2−aから認証済みのエンドMCU_2−bに対して、当該暗号処理に基づいて秘密の情報を安全に送信することができる。この秘密の情報は、上述した第1実施形態における秘密情報として利用できる。上述した暗号処理の他の実施例3では、マスタMCU_2−aからエンドMCU_2−bに対して、安全に、秘密の情報である乱数が伝達される。
なお、上述した暗号処理の他の実施例3において、上述した暗号処理の他の実施例2と同様に、マスタMCU_2−aとエンドMCU_2−bとの間で相互認証を行うようにし、相互認証が成功した場合に、マスタMCU_2−aからエンドMCU_2−bに対して、秘密の情報である乱数が伝達されるようにしてもよい。
[MAC生成処理およびMAC検査処理の他の実施例]
図22は、本発明の一実施形態に係るMAC生成処理およびMAC検査処理を説明するためのシーケンスチャートである。図22を参照して、MAC生成処理およびMAC検査処理の他の実施例を説明する。MAC生成処理およびMAC検査処理の他の実施例は、上述した第2実施形態の変形例である。MAC生成処理およびMAC検査処理の他の実施例に係る通信ネットワークシステムは、上述した第2実施形態に係る図7の通信ネットワークシステム1の構成と同じであり、例えば自動車に搭載される。但し、MAC生成処理およびMAC検査処理の他の実施例では、上述した暗号処理の他の実施例1,2,3のいずれかによって、マスタMCU_2−aから認証済みのエンドMCU_2−bに対して、秘密の情報である乱数が安全に送信されている。マスタMCU_2−a及びエンドMCU_2−bは、該秘密の情報である乱数をRAM12に格納する。このRAM12は、上述した第1実施形態における秘密情報記憶部117として、該秘密の情報である乱数を秘密情報として保持する。
図22において、送信側MCU_2は送信ノードとして動作する。送信側MCU_2はマスタMCU_2−aであってもよく、又は、エンドMCU_2−bであってもよい。受信側MCU_2は受信ノードとして動作する。受信側MCU_2はマスタMCU_2−aであってもよく、又は、エンドMCU_2−bであってもよい。送信側MCU_2は、RAM_12に、秘密情報と送信カウンタ値と送信データとを保持している。受信側MCU_2は、RAM_12に、秘密情報と受信カウンタ値とを保持している。図22の処理は、送信側MCU_2から送信されるCANフレームを作成する際に開始される。
(ステップS231)送信側MCU_2のCPU_10は、RAM_12に保持される秘密情報と送信データと送信カウンタ値とを使用して、MACの生成を行う。このMACの生成方法は、上述した第1実施形態等と同様である。
(ステップS232)送信側MCU_2のCPU_10は、ステップS231でMAC生成に使用された送信データと、ステップS231で生成されたMACとが格納されたCANフレームを通信バス3へ送信する。このCANフレームは、通信バス3を介して受信側MCU_2で受信される。
(ステップS233)受信側MCU_2のCPU_10は、通信バス3から受信したCANフレームをRAM_12に保持する。受信側MCU_2のCPU_10は、RAM_12に保持されるCANフレームから受信データと受信MACとを取得する。さらに、受信側MCU_2のCPU_10は、RAM_12に保持されるCANフレーム中のID部に格納されているIDに対応する受信カウンタ値を、RAM12から取得する。さらに、受信側MCU_2のCPU_10は、秘密情報をRAM_12から取得する。
次いで、受信側MCU_2のCPU_10は、取得した秘密情報と受信データと受信カウンタ値とを使用して、MACの生成を行う。このMACの生成方法は、上述した送信側MCU_2と同様である。次いで、受信側MCU_2のCPU_10は、生成したMACと、RAM_12に保持されるCANフレームから取得した受信MACとの一致を判定する。この判定の結果が不一致である場合には、上述した第1実施形態等と同様に再検査が行われる。
上述したMAC生成処理およびMAC検査処理の他の実施例によれば、RAM12に保持される秘密情報を使用して、CPU_10がMAC生成処理およびMAC検査処理を実行する。これにより、MAC生成処理およびMAC検査処理の処理時間を短縮できる可能性がある。上述した図10に示される第2実施形態では、秘密情報をセキュアエレメント14のセキュアRAM_21に保持し、セキュアエレメント14においてMAC生成処理およびMAC検査処理を実行していた。このため、例えば、CANフレームの送信の度に、毎回、CPU_10は、送信データおよび送信カウンタ値をセキュアエレメント14へ渡して、セキュアエレメント14から生成されたMACを受け取る。このCPU_10とセキュアエレメント14との間のデータの交換には一定の時間がかかり、MAC生成処理におけるオーバーヘッドとなる。これはMAC検査処理でも同様である。一方、上述したMAC生成処理およびMAC検査処理の他の実施例によれば、CPU_10のみでMAC生成処理およびMAC検査処理を実行するので、CPU_10とセキュアエレメント14との間のデータの交換は発生せず、該オーバーヘッド分の時間を短縮できる。
また、上述したMCU_2の機能を実現するためのコンピュータプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませ、実行するようにしてもよい。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、フラッシュメモリ等の書き込み可能な不揮発性メモリ、DVD(Digital Versatile Disk)等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータ内部の揮発性メモリ(例えばDRAM(Dynamic Random Access Memory))のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。