以下、本発明をその実施の形態を示す図面に基づいて詳述する。
(実施の形態1)
図1は、実施の形態1における通信システム1の要部構成を示すブロック図である。通信システム1は、車両100に好適に搭載され、中継装置11、ECU12a,12a,12b,12b、車載機器13a,13b,13c及び通信線La,Lbを備える。中継装置11は第1中継機21及び第2中継機22を有する。
中継装置11、第1中継機21及び第2中継機22夫々は、車載装置、第1車載機及び第2車載機として機能する。
中継装置11の第1中継機21には、2つの通信線La,Lbが各別に接続されている。通信線Laには、2つのECU12a,12aが接続されている。通信線Lbには、2つのECU12b,12bが接続されている。中継装置11では、第1中継機21は第2中継機22に接続されている。第2中継機22には、3つの車載機器13a,13b,13cが各別に接続されている。
通信線La,Lb夫々を介して、CAN(Controller Area Network)プロトコルに従った通信が行われる。通信線La,Lb夫々はツイストペア線である。通信線La,Lb夫々を介して、CANプロトコルに対応し、識別情報を含むECUデータが送信される。識別情報は、自身が含まれているECUデータを識別するための情報である。
ECU12a,12a及び第1中継機21夫々は、通信線Laを介してECUデータを送信する。ECU12a,12a及び第1中継機21中の1つが送信したECUデータは、他の全ての装置によって受信される。例えば、一方のECU12aが送信したECUデータは、他方のECU12a及び第1中継機21によって受信される。
同様に、ECU12b,12b及び第1中継機21夫々は、通信線Lbを介してECUデータを送信する。ECU12b,12b及び第1中継機21中の1つが送信したECUデータは、他の全ての装置によって受信される。例えば、一方のECU12bが送信したECUデータは、他方のECU12b及び第1中継機21によって受信される。
ECU12a,12a夫々は、ECUデータを受信した場合、受信したECUデータに含まれている識別情報に基づいて、このECUデータに係る処理を実行すべきか否かを判定する。ECU12a,12aは、受信したECUデータに係る処理を実行すべきであると判定した場合、受信したECUデータに係る処理を実行する。ECU12a,12a夫々は、受信したECUデータに係る処理を実行すべきではないと判定した場合、受信したECUデータの放置又は削除等を行う。
同様に、ECU12b,12b夫々は、ECUデータを受信した場合、受信したECUデータに含まれている識別情報に基づいて、このECUデータに係る処理を実行すべきか否かを判定する。ECU12b,12b夫々は、受信したECUデータに係る処理を実行すべきであると判定した場合、受信したECUデータに係る処理を実行する。ECU12b,12b夫々は、受信したECUデータに係る処理を実行すべきではないと判定した場合、受信したECUデータの放置又は削除等を行う。
ECU12a,12a,12b,12b夫々には、図示しない電気機器が接続されている。ECU12a,12a,12b,12b夫々は、例えば、受信したECUデータに係る処理として、受信したECUデータが示す内容に基づいて、自装置に接続されている電気機器の動作を制御する処理を実行する。
ECU12a,12a,12b,12b夫々は、例えば、自装置にセンサが接続されている場合、センサが検出した検出値を示すECUデータを送信する。また、ECU12a,12a,12b,12b夫々は、例えば、自装置に使用者から指示を受け付ける受付部が接続されている場合、受付部が受け付けた指示の内容を示すECUデータを送信する。例えば、一方のECU12aに、車両のパワーウィンドウを開閉するウィンドウモータが接続されている場合において、他方のECU12aは、パワーウィンドウの開放を指示するECUデータを送信する。一方のECU12aは、このECUデータを受信した場合、ウィンドウモータにパワーウィンドウを開放させる。
第1中継機21は、ECU12a,12a中の1つと、ECU12b,12b中の1つとの間の通信を中継する。具体的には、第1中継機21は、通信線Laを介して受信したECUデータを、通信線Lbを介して送信し、通信線Lbを介して受信したECUデータを、通信線Laを介して送信する。ECU12a,12a,12b,12b夫々は第1通信装置として機能する。ECU12a,12a中の1つと、ECU12b,12b中の1つとの間の通信ではCANプロトコルが用いられる。
車載機器13a,13b,13c夫々は、第2中継機22と一対一で通信する。車載機器13a,13b,13c夫々と第2中継機22との間では、例えば、イーサネット(登録商標)の規格に準じた通信が行われる。車載機器13a,13b,13c夫々は、送信先を示す送信先情報を含む機器データを第2中継機22に送信する。第2中継機22は、車載機器13a,13b,13c中の2つの間で行われる通信を中継する。車載機器13a,13b,13c夫々は第2通信装置として機能する。車載機器13a,13b,13c中の2つの間の通信では、例えば、イーサネット(登録商標)に対応するプロトコルの1つであるTCP(Transmission Control Protocol)/IP(Internet Protocol)が用いられる。
車載機器13a,13b夫々は、カメラ及びディスプレイであると仮定する。この場合、車載機器13aは、カメラで撮影した画像データを含む機器データを第2中継機22に送信する。この機器データには、送信先として車載機器13bを示す送信先情報が含まれている。第2中継機22は、画像データを含む機器データを車載機器13bに送信する。車載機器13bは、第2中継機22から受信した機器データに含まれている画像データに基づく画像を表示する。
第1中継機21及び第2中継機22は、ECU12a,12a,12b,12b中の1つと、車載機器13a,13b,13c中の1つとの間の通信を中継する。
ECUデータは、前述したように、CANプロトコルに対応するデータであり、第1プロトコルに対応するデータに相当する。機器データは、車載機器13a,13b,13c中の2つの間の通信で用いられるプロトコルに対応するデータであり、第2プロトコルに対応するデータに相当する。
第1中継機21は、通信線La,Lbの一方を介して受信したECUデータを機器データに変換する。第2中継機22は、第1中継機21が変換した機器データを車載機器13a,13b,13c中の1つに送信する。第2中継機22は、車載機器13a,13b,13c中の1つから機器データを受信する。第1中継機21は、第2中継機22が受信した機器データをECUデータに変換し、変換したECUデータを通信線La,Lb中の少なくとも一方を介して送信する。
図2は第1中継機21の要部構成を示すブロック図である。第1中継機21は、ROM(Read Only Memory)31、CPU32、通信部33a,33b、HSM(Hardware Security Module)34、RAM(Random Access Memory)35及び電源回路36を有する。これらは、バス37に接続されている。通信部33a,33b夫々は、バス37の他に、通信線La,Lbに接続されている。RAM35は、バス37の他に、第2中継機22に接続されている。
ROM31には、第1制御プログラムP1が記憶されている。CPU32は、第1制御プログラムP1に従って第1中継処理を実行する。第1中継処理は、ECU12a,12a中の1つとECU12b,12b中の1つとの間の通信と、ECU12a,12a,12b,12b中の1つと車載機器13a,13b,13c中の1つとの間の通信とを中継するための処理である。第1制御プログラムP1は第2の制御プログラムに相当し、CPU32は処理部として機能する。更に、CPU32は、第1処理部として機能し、第1処理部を構成するハードウェアである。
通信部33aは、ECU12a,12a中の1つから、通信線Laを介してECUデータを受信する。通信部33aは、CPU32の指示に従って、ECUデータを、通信線Laを介して送信する。通信部33aが送信したECUデータは、ECU12a,12aによって受信される。
通信部33bは、ECU12b,12b中の1つから、通信線Lbを介してECUデータを受信する。通信部33bは、CPU32の指示に従って、ECUデータを、通信線Lbを介して送信する。通信部33bが送信したECUデータは、ECU12b,12bによって受信される。
第2中継機22には第2制御プログラムP2(図3参照)が記憶されている。HSM34は、第1制御プログラムP1が適正であることを検証すると共に、第2制御プログラムP2が適正であることを検証する。HSM34は、第1制御プログラムP1及び第2制御プログラムP2を検証する検証器として機能する。
CPU32、HSM34及び第2中継機22夫々は、RAM35に種々のデータを書き込み、RAM35からデータを読み出す。従って、例えば、第2中継機22がRAM35に書き込んだデータを、CPU32がRAM35から読み出すことができる。
電源回路36は、図示しない電力線によって、車両100の図示しないバッテリに接続されている。電源回路36は、更に、図示しない電力線によって、ROM31、CPU32、通信部33a,33b、HSM34及びRAM35に接続されている。電源回路36は、バッテリが出力した電圧を所定の第1電圧に変圧する。電源回路36は、第1電圧をROM31、CPU32、通信部33a,33b、HSM34及びRAM35に出力し、これらに電力を供給する。
例えば、車両100の図示しないイグニッションスイッチがオンに切替わった場合、電源回路36は、ROM31、CPU32、通信部33a,33b、HSM34及びRAM35に電力を供給し、これらを作動させる。電源回路36は、HSM34の指示に従って、ROM31、CPU32、通信部33a,33b、HSM34及びRAM35への電力供給を停止する。これにより、これらは動作を停止し、RAM35に記憶されているデータは消去される。
HSM34は、ROM41、CPU42及びインタフェース43を有する。これらはバス44に接続されている。インタフェース43は、バス44の他にバス37に接続されている。
ROM41には検証プログラムPhが記憶されている。CPU42は、第1中継機21内で検証プログラムPhを実行する。これにより、第1制御プログラムP1及び第2制御プログラムP2が適正であることを検証するための検証処理が実行される。検証プログラムPhは、CPU42に検証処理を実行させるためのコンピュータプログラムである。ROM41には、更に、第1鍵データK1、第1基準データR1、第2鍵データK2及び第2基準データR2が記憶されている。これらは、所定データであり、検証処理で用いられる。ROM41は記憶部及び第2の記憶部として機能する。
CPU42は、第1制御プログラムP1及び第2制御プログラムP2を検証するハードウェアであり、CPU32とは異なっている。
なお、検証プログラムPhは、コンピュータ(CPU42)が読み取り可能に、記憶媒体E1に記憶されていてもよい。この場合、図示しない読み出し装置によって記憶媒体E1から読み出された検証プログラムPhがHSM34の図示しない記憶部に記憶される。記憶媒体E1は、光ディスク、フレキシブルディスク、磁気ディスク、磁気光ディスク又は半導体メモリ等である。光ディスクは、CD(Compact Disc)−ROM(Read Only Memory)、DVD(Digital Versatile Disc)−ROM、又は、BD(Blu-ray(登録商標) Disc)等である。磁気ディスクは、例えばハードディスクである。また、図示しない通信網に接続されている図示しない外部装置から検証プログラムPhをダウンロードし、検証プログラムPhを前述した記憶部に記憶してもよい。
CPU42は、インタフェース43を介して、第1中継機21のROM31及びRAM35にアクセスする。具体的には、CPU42は、ROM31から第1制御プログラムP1を読み出す。また、CPU42は、RAM35に種々のデータを書き込むと共にRAM35からデータを読み出す。更に、CPU42は、電源回路36に電力供給の停止を指示する。以上のように、インタフェース43は、CPU42がROM31、RAM35及び電源回路36へのアクセスを許可する。一方で、インタフェース43は、CPU32がROM41へアクセスすることを防止する。従って、CPU32は、ROM41に記憶されている内容を読み出すことはできない。
電源回路36からHSM34への電力供給が開始された場合、CPU42は検証処理を実行する。CPU42が検証処理を実行している間、第1中継機21のCPU32は動作を停止している。例えば、CPU32は、CPU32の図示しない端子の電圧がハイレベル電圧である場合に作動し、CPU32の端子の電圧がローレベル電圧である場合に動作を停止する。この場合、CPU42が検証処理を実行している間、HSM34によってCPU32の端子の電圧がローレベル電圧に維持される。そして、CPU42が検証処理を終了した場合、HSM34によってCPU32の端子の電圧がハイレベル電圧に切替えられる。
図3は第2中継機22の要部構成を示すブロック図である。第2中継機22は、ROM51、CPU52、通信部53a,53b,53c及び電源回路54を有する。これらは、バス55に接続されている。バス55は、更に、第1中継機21のRAM35に接続されている。通信部53a,53b,53c夫々は、バス55の他に、車載機器13a,13b,13cに接続されている。
ROM51には、起動プログラムPb及び第2制御プログラムP2が記憶されている。CPU52は起動プログラムPbに従って起動処理を実行する。起動処理は、CPU52への電力供給が開始されて、CPU52が作動した後、CPU52によって最初に実行される処理である。
また、CPU52は第2制御プログラムP2に従って第2中継処理を実行する。第2中継処理は、車載機器13a,13b,13c中の2つの間の通信と、ECU12a,12a,12b,12b中の1つと車載機器13a,13b,13c中の1つとの間の通信とを中継するための処理である。CPU52は第2処理部として機能する。
通信部53a,53b,53c夫々は車載機器13a,13b,13cから機器データを受信する。また、通信部53a,53b,53c夫々は、CPU52の指示に従って、機器データを車載機器13a,13b,13cに送信する。
電源回路54は、図示しない電力線によって、車両100のバッテリに接続されている。電源回路54は、更に、図示しない電力線によって、ROM51、CPU52及び通信部53a,53b,53cに接続されている。電源回路54は、バッテリが出力した電圧を所定の第2電圧に変圧する。電源回路54は、所定の第2電圧をROM31、CPU32、通信部33a,33b、HSM34及びRAM35に出力し、これらに電力を供給する。
例えば、車両100の図示しないイグニッションスイッチがオンに切替わった場合、電源回路54は、ROM51、CPU52及び通信部53a,53b,53cに電力を供給し、これらを作動させる。電源回路54は、CPU52の指示に従って、ROM51、CPU52及び通信部53a,53b,53cへの電力供給を停止する。これにより、これらは動作を停止する。
起動処理及び第2中継処理夫々において、CPU52は、第1中継機21のRAM35に種々のデータを書き込み、RAM35からデータを読み出す。
図4は第1中継処理の手順を示すフローチャートである。第1中継機21のCPU32は第1中継処理を周期的に実行する。まず、CPU32は、通信部33a,33b中の1つがECUデータを受信したか否かを判定する(ステップS1)。CPU32は、通信部33a,33b中の1つがECUデータを受信したと判定した場合(S1:YES)、ECUデータを、ECU12a,12a,12b,12b及び車載機器13a,13b,13c中の少なくとも1つに送信すべきか否かを判定する(ステップS2)。
ROM31には、複数の識別情報が記憶されている。ROM31に記憶されている複数の識別情報中の一又は複数の識別情報夫々には、通信部33a,33b中の1つが対応付けられている。ROM31に記憶されている複数の識別情報中の残りの識別情報夫々には、送信先情報が対応付けられている。送信先情報は、前述したように、車載機器13a,13b,13c中の少なくとも1つを示す。
ステップS2では、CPU32は、受信されたECUデータに含まれている識別情報が、ROM31に記憶されている複数の識別情報中の1つである場合、ECUデータを送信すべきと判定する。また、ステップS2では、CPU32は、受信されたECUデータに含まれている識別情報が、ROM31に記憶されて複数の識別情報のいずれとも一致しない場合、ECUデータを送信すべきではないと判定する。
CPU32は、ECUデータを送信すべきと判定した場合(S2:YES)、受信されたECUデータを第1中継機21が送信するか否かを判定する(ステップS3)。ここで、CPU32は、ROM31において、受信されたECUデータに含まれている識別情報に、通信部33a,33b中の1つが対応付けられている場合、受信されたECUデータを第1中継機21が送信すると判定する。また、CPU32は、ROM31において、受信されたECUデータに含まれている識別情報に送信先情報が対応付けられている場合、受信されたECUデータを第1中継機21が送信しないと判定する。
CPU32は、受信されたECUデータを第1中継機21が送信すると判定した場合(S3:YES)、通信部33a,33bの中で、受信されたECUデータに含まれている識別情報に対応する通信部に、受信されたECUデータの送信を指示する(ステップS4)。これにより、通信部33a,33bの中で送信を指示された通信部は、受信されたECUデータを送信する。
例えば、通信部33aがECU12a,12a中の1つからECUデータを受信した場合において、通信部33aが受信したECUデータに含まれている識別情報が通信部33bに対応付けられているとき、CPU32は、通信部33bに指示して、通信部33aが受信したECUデータを送信させる。このECUデータはECU12b,12bによって受信される。
以上のように、第1中継機21は、ECU12a,12a中の1つと、ECU12b,12b中の1つとの間の通信を中継する。
CPU32は、受信されたECUデータを第1中継機21が送信しない、即ち、受信されたECUデータを第2中継機22が送信すると判定した場合(S3:NO)、受信されたECUデータを機器データに変換する(ステップS5)。ステップS5で変換された機器データには、受信されたECUデータに含まれている識別情報に対応する送信先情報が含まれている。送信先情報は、車載機器13a,13b,13c中の少なくとも1つを示している。次に、CPU32は、ステップS5で変換した機器データをRAM35に書き込む(ステップS6)。前述したように、第2中継機22のCPU52は、この機器データをRAM35から読み出すことができる。
CPU32は、通信部33a,33bのいずれもECUデータを受信していないと判定した場合(S1:NO)、ECUデータを送信すべきではないと判定した場合(S2:NO)、又は、ステップS4,S6の一方を実行した後、通信部33a,33b中の1つが、RAM35に記憶されている機器データを送信すべきか否かを判定する(ステップS7)。ここで、CPU32は、送信先情報がECU12a,12a,12b,12b中の少なくとも1つを示す機器データがRAM35に記憶されている場合、通信部33a,33b中の1つが機器データを送信すべきと判定する。CPU32は、送信先情報がECU12a,12a,12b,12b中の少なくとも1つを示す機器データがRAM35に記憶されていない場合、通信部33a,33b中のいずれも機器データを送信すべきではないと判定する。
CPU32は、機器データを送信すべきと判定した場合(S7:YES)、送信すべき機器データをECUデータに変換する(ステップS8)。ステップS8で変換したECUデータには、送信先情報に応じた識別情報が含まれている。例えば、複数の送信先情報夫々に対応付けて識別情報がROM31に記憶されており、送信先情報に応じた識別情報をECUデータに含める。例えば、ECU12a,12a中の1つを示す送信先情報に一の識別情報が対応し、ECU12a,12a中の1つとECU12b,12bの1つとを示す送信先情報に他の識別情報が対応している。CPU32は変換部としても機能する。
次に、CPU32は、通信部33a,33b中の少なくとも1つに、ステップS8で変換したECUデータの送信を指示する(ステップS9)。これにより、通信部33a,33b中の少なくとも1つは、ステップS8でCPU32が変換したECUデータを送信する。例えば、ステップS8で送信先がECU12a,12a中の1つである機器データを変換した場合、CPU32は通信部33aに指示してステップS8で変換したECUデータを送信させる。
CPU32は、通信部33a,33bのいずれも機器データを送信すべきではないと判定した場合(S7:NO)、又は、ステップS9を実行した後、第1中継処理を終了する。
図5は第2中継処理の手順を示すフローチャートである。第2中継機22のCPU52は第2中継処理を周期的に実行する。まず、CPU52は、通信部53a,53b,53c中の1つが機器データを受信したか否かを判定する(ステップS21)。CPU52は、通信部53a,53b,53c中の1つが機器データを受信したと判定した場合(S21:YES)、受信した機器データを車載機器13a,13b,13c中の少なくとも1つに送信すべきか否かを判定する(ステップS22)。
ここで、CPU52は、受信した機器データに含まれている送信先情報が車載機器13a,13b,13c中の少なくとも1つを示している場合、受信した機器データを車載機器13a,13b,13c中の少なくとも1つに送信すべきと判定する。一方で、CPU52は、受信した機器データに含まれている送信先情報が車載機器13a,13b,13cのいずれも示していない場合、受信した機器データを車載機器13a,13b,13cのいずれにも送信すべきではないと判定する。
CPU52は、受信した機器データを車載機器13a,13b,13c中の少なくとも1つに送信すべきと判定した場合(S22:YES)、通信部53a,53b,53c中の少なくとも1つに機器データの送信を指示する(ステップS23)。車載機器13a,13b,13c夫々は、通信部53a,53b,53cが対応する。ステップS23では、受信した機器データに含まれている送信先情報が示す送信先に応じて、送信を指示する通信部が決まる。例えば、送信先情報が車載機器13b,13cを示す場合、CPU52は、通信部53b,53c夫々に、受信した機器データの送信を指示する。CPU53がステップS23を実行した場合、通信部53a,53b,53cの中で送信を指示された通信部は機器データを送信する。
例えば、通信部53aが機器データを受信した場合において、通信部53aが受信した機器データに含まれている送信先情報が車載機器13bを示すとき、CPU52は、通信部53bに指示して、通信部53aが受信した機器データを送信させる。
以上のように、第2中継機22は、車載機器13a,13b,13c中の2つの間の通信を中継する。
CPU52は、受信した機器データを車載機器13a,13b,13cのいずれにも送信すべきではない、即ち、受信した機器データをECU12a,12a,12b,12b中の少なくとも1つに送信すべきであると判定した場合(S22:NO)、受信した機器データを第1中継機21のRAM35に書き込む(ステップS24)。
CPU52は、通信部53a,53b,53cのいずれも機器データを受信していないと判定した場合(S21:NO)、又は、ステップS23,S24を実行した後、車載機器13a,13b,13c中の少なくとも1つに送信すべき機器データがRAM35に記憶されているか否かを判定する(ステップS25)。ここで、CPU52は、送信先情報が車載機器13a,13b,13c中の少なくとも1つを示す機器データがRAM35に記憶されている場合、送信すべき機器データが記憶されていると判定する。CPU52は、送信先情報が車載機器13a,13b,13c中の少なくとも1つを示す機器データがRAM35に記憶されていない場合、送信すべき機器データが記憶されていないと判定する。
CPU52は、送信すべき機器データが記憶されていると判定した場合(S25:YES)、通信部53a,53b,53c中の少なくとも1つに機器データの送信を指示する(ステップS26)。ステップS26では、ステップS23と同様に、送信すべき機器データに含まれている送信先情報が示す送信先に応じて、送信を指示する通信部が決まる。
CPU52は、送信すべき機器データが記憶されていないと判定した場合(S25:NO)、又は、ステップS26を実行した後、第2中継処理を終了する。
以上のように構成された中継装置11では、ECU12a,12a,12b,12b中の1つが送信したECUデータは、機器データに変換され、変換された機器データは、車載機器13a,13b,13c中の少なくとも1つに送信される。また、車載機器13a,13b,13c中の1つが送信した機器データは、ECUデータに変換され、変換されたECUデータは、ECU12a,12a,12b,12b中の少なくとも1つに送信される。
図6は検証処理の手順を示すフローチャートである。第1中継機21が有するHSM34のCPU42は、電源回路54がCPU42への電力供給を開始した場合において、第1中継処理を実行する前に検証処理を実行する。前述したように、CPU42が検証処理を実行している間、CPU32は動作を停止している。検証処理では、まず、CPU42は、第1制御プログラムP1をROM31から読み出す(ステップS31)。次に、CPU42は、第1制御プログラムP1に関連する関連データを演算するための演算データを、例えばハッシュ関数を用いて算出する(ステップS32)。ステップS32では、CPU42は、ステップS31で読み出した第1制御プログラムP1に基づいて演算データを算出する。
次に、CPU42は、ステップS32で算出した演算データと、ROM41に記憶されている第1鍵データK1とを用いて、第1制御プログラムP1に関連する関連データを演算する(ステップS33)。第1鍵データK1は第2の鍵データに相当し、CPU42は第2の演算部として機能する。
次に、CPU42は、ステップS33で演算した関連データが、ROM41に予め記憶されている第1基準データR1と一致するか否かを判定する(ステップS34)。CPU42は第2の判定部としても機能する。
CPU42は、ステップS34を実行することによって、第1制御プログラムP1が適正であることを検証する。第1制御プログラムP1に関連する関連データが第1基準データR1と一致していることは、第1制御プログラムP1が適正であることを示す。第1制御プログラムP1に関連する関連データが第1基準データR1と一致していないことは、第1制御プログラムP1が適正ではないこと、即ち、第1制御プログラムP1が改ざんされている可能性が高いことを示す。
CPU42は、関連データが第1基準データR1と一致しないと判定した場合(S34:NO)、第2中継機22の電源回路54が行う電力供給の停止を指示する停止データをRAM35に書き込む(ステップS35)。これにより、第2中継機22のCPU52に第1制御プログラムP1が適正ではないことを通知することができる。その後、CPU42は、電源回路36に電力供給の停止を指示する(ステップS36)。これにより、電源回路36は、ROM31、CPU32、通信部33a,33b、HSM34及びRAM35への電力供給を停止し、第1中継機21は動作を停止する。CPU42は、ステップS36を実行した後、検証処理を終了する。
なお、前述したように、電源回路36がRAM35への電力供給を停止した場合、RAM35に記憶されているデータは消去される。第2中継機22のCPU52がRAM35に記憶されている停止データを読み出す時間を確保するため、CPU42は、ステップS35を実行してから、CPU52が停止データを読み出すために十分な所定時間が経過した後、ステップS36を実行する。
CPU42は、関連データが第1基準データR1と一致すると判定した場合(S34:YES)、第2中継機22の第2制御プログラムP2の演算データがRAM35に記憶されているか否かを判定する(ステップS37)。第2制御プログラムP2の演算データは、第2制御プログラムP2に関連する関連データを演算するためのデータである。CPU42は、演算データが記憶されていないと判定した場合(S37:NO)、ステップS37を再び実行し、演算データがRAM35に書き込まれるまで待機する。第2中継機22のCPU52は、起動処理において、第2制御プログラムP2の演算データを算出し、算出した演算データをRAM35に書き込む。
CPU42は、演算データが記憶されていると判定した場合(S37:YES)、RAM35から第2制御プログラムP2の演算データを読み出し(ステップS38)、読み出した演算データと、ROM41に記憶されている第2鍵データK2とを用いて、第2制御プログラムP2に関連する関連データを演算する(ステップS39)。CPU42は演算部及び関連データ演算部としても機能する。
次に、CPU42は、ステップS39で演算した関連データが、ROM41に予め記憶されている第2基準データR2と一致するか否かを判定する(ステップS40)。CPU42は判定部としても機能する。
CPU42は、ステップS40を実行することによって、第2制御プログラムP2が適正であることも検証する。CPU42は、関連データが第2基準データR2と一致していると判定した場合(S40:YES)、第2制御プログラムP2が適正であることを示す正常データをRAM35に書き込む(ステップS41)。これにより、第2中継機22のCPU52に第2制御プログラムP2が適正であることを通知することができる。
CPU42は、関連データが第2基準データR2と一致していないと判定した場合(S40:NO)、第2制御プログラムP2が適正ではない、即ち、第2制御プログラムP2が改ざんされている可能性が高いことを示す異常データをRAM35に書き込む(ステップS42)。これにより、第2中継機22のCPU52に第2制御プログラムP2が適正ではないことを通知することができる。
CPU42は、ステップS41,S42の一方を実行した後、検証処理を終了する。CPU42は、検証処理を終了した後、電源回路36が電力供給を一旦停止して、電力供給を再開するまで、動作を停止する。CPU42が検証処理を終了した後、CPU32は、適正な第1制御プログラムP1を実行する。なお、前述したように、インタフェース43は、CPU32からROM41へのアクセスを防止している。このため、検証プログラムPh、第1鍵データK1、第1基準データR1、第2鍵データK2及び第2基準データR2がHSM34の外側に持ち出されることはない。
図7は起動処理の手順を示すフローチャートである。第2中継機22のCPU52は、電源回路54がCPU52への電力供給を開始した場合において、第2中継処理を実行する前に、起動プログラムPbに従って起動処理を実行する。起動処理では、まず、CPU52は、第2制御プログラムP2をROM51から読み出す(ステップS51)。次に、CPU52は、例えばハッシュ関数を用いて、第2制御プログラムP2に関連する関連データを演算するための演算データを算出する(ステップS52)。CPU52は算出部として機能する。ステップS52では、CPU52は、ステップS51で読み出した第2制御プログラムP2に基づいて演算データを算出する。
次に、CPU52は、ステップS52で算出した演算データを第1中継機21のRAM35に書き込む(ステップS53)。前述したように、第1中継機21が有するHSM34のCPU42は、RAM35に記憶されている演算データを読み出し、読み出した演算データを用いて第2制御プログラムP2に関連する関連データを演算し、第2制御プログラムP2が適正であるか否かを検証する。CPU42は、検証処理において、RAM35に停止データ、異常データ又は正常データを書き込む。
RAM35から関連データを読み出すことは、関連データを取得することに相当する。従って、CPU42は取得部としても機能する。
なお、第1中継機21の電源回路36と、第2中継機22の電源回路54とは略同時に電力供給を開始し、CPU52は、第1中継機21の電源回路36が電力供給を開始した後、ステップS53を実行する。このため、CPU52は、演算データをRAM35に確実に書き込むことができる。
CPU52は、ステップS53を実行した後、停止データが第1中継機21のRAM35に記憶されているか否かを判定する(ステップS54)。CPU52は、停止データが記憶されていないと判定した場合(S54:NO)、異常データがRAM35に記憶されているか否かを判定する(ステップS55)。CPU52は、停止データが記憶されていると判定した場合(S54:YES)、又は、異常データが記憶されていると判定した場合(S55:YES)、電源回路54に電力供給の停止を指示する(ステップS56)。これにより、電源回路54は電力供給を停止し、ROM51、CPU52及び通信部53a,53b,53cは動作を停止する。CPU52は、ステップS56を実行した後、起動処理を終了する。
以上のように、第1中継機21が有するHSM34のCPU42は、RAM35に停止データ又は異常データを書き込むことによって、CPU42の動作、即ち、第2中継機22の動作を停止させる。CPU42は、動作制御部としても機能する。
前述したように、CPU42は、第1制御プログラムP1に関連する関連データが第1基準データR1と一致していないと判定した場合、第1制御プログラムP1が改ざんされている可能性が高いとして、停止データをRAM35に書き込む。
また、CPU42は、第2制御プログラムP2に関連する関連データが第2基準データR2と一致していないと判定した場合、第2制御プログラムP2が改ざんされている可能性が高いとして、異常データをRAM35に書き込む。これにより、第2中継機22の動作が停止する。
CPU52がステップS55で異常データが記憶されていると判定してステップS56を実行した場合、第1中継機21の電源回路36は電力供給を停止せず、第1中継機21のCPU32は第1中継処理を実行する。このため、第2中継機22の動作は停止するが、ECU12a,12a中の1つと、ECU12b,12b中の1つとの間の通信の中継は、第1中継機21によって行われる。
例えば、ECU12a,12a,12b,12b夫々が車両100の運転に最低限必要な機能を有するヘッドライト又はワイパーモータ等の電気機器を制御し、車載機器13a,13b,13c夫々は、車両100の運転に必ずしも必要でないカメラ又はディスプレイ等であると仮定する。この場合、第1制御プログラムP1が適正であれば、第2制御プログラムP2が適正でなかったとしても、運転者は車両100を運転することができる。
CPU52は、異常データが記憶されていないと判定した場合(S55:NO)、正常データが第1中継機21のRAM35に記憶されているか否かを判定する(ステップS57)。CPU52は、正常データが記憶されていないと判定した場合(S57:NO)、ステップS54を実行し、RAM35に停止データ、異常データ又は正常データが記憶されるまで待機する。
なお、CPU52がステップS54を実行する前に、第1中継機21が有するHSM34のCPU42が検証処理のステップS36を実行した場合、RAM35にデータが記憶されていないため、CPU52は、ステップS54,S55,S57の判定を無限に繰り返す。このため、起動処理において、CPU52は、ステップS54,S55,S57の判定を繰り返している時間が第2の所定時間を超えた場合、第1制御プログラムP1が適正ではないとして、ステップS56を実行してもよい。
CPU52は、正常データが記憶されていると判定した場合(S57:YES)、起動処理を終了する。その後、CPU52は、第2中継処理を実行する。
以上のように構成された中継装置11では、第1中継機21が有するHSM34のCPU32が、第2制御プログラムP2が適正であることを検証する。このため、第2中継機22に、検証機能を有するHSM34と同様の構成部を設ける必要がない。結果、中継装置11は小型であり、中継装置11の製造費用は安価である。
また、第2中継機22のCPU52は、第2制御プログラムP2の演算データを算出し、算出した演算データを第1中継機21のRAM35に書き込む。第2制御プログラムP2の演算データのデータ量は、第2制御プログラムP2のデータ量よりも小さい。このため、第2制御プログラムP2が適正であることを検証するために、第2中継機22から第1中継機21へ転送されるデータのデータ量は小さい。結果、検証を行うために必要な時間が短い。
(実施の形態2)
図8は、実施の形態2における通信システム1の要部構成を示すブロック図である。
以下では、実施の形態2について、実施の形態1と異なる点を説明する。後述する構成を除く他の構成については、実施の形態1と共通しているため、実施の形態1と共通する構成部には実施の形態1と同一の参照符号を付してその説明を省略する。
実施の形態2における通信システム1では、実施の形態1における通信システム1と比較して、中継装置11の構成が異なる。実施の形態2における中継装置11は、第1中継機21及び第2中継機22に加えて、メモリ23を有する。メモリ23は第2中継機22に接続されている。メモリ23は不揮発性メモリである。メモリ23には、第2制御プログラムP2が記憶されている。第2制御プログラムP2は、第2中継機22によってメモリ23から読み出される。
図9は第2中継機22の要部構成を示すブロック図である。実施の形態2における第2中継機22は、実施の形態1における第2中継機22が有する構成部に加えて、インタフェース61及びRAM62を有する。インタフェース61及びRAM62もバス55に接続されている。インタフェース61は、更に、メモリ23に接続される。
CPU52は、インタフェース61を介して、第2制御プログラムP2をメモリ23から読み出す。また、CPU52は、RAM62に種々のデータを書き込み、RAM62からデータを読み出す。
なお、実施の形態2おけるROM51には、第2制御プログラムP2が記憶されていない。
電源回路54は、ROM51、CPU52及び通信部53a,53b,53cに加えて、インタフェース61及びRAM62に電力を供給する。インタフェース61及びRAM62夫々は、電源回路54から電力が供給されている間、作動する。電源回路54が電力供給を停止した場合、RAM62に記憶されているデータは消去される。
図10は起動処理の手順を示すフローチャートである。実施の形態2においても、第2中継機22のCPU52は、電源回路54がCPU52への電力供給を開始した場合において、第2中継処理を実行する前に、起動プログラムPbに従って起動処理を実行する。実施の形態2における起動処理のステップS65〜S68は、実施の形態1における起動処理のステップS54〜S57と同様である。このため、ステップS65〜S68の詳細な説明を省略する。
実施の形態2における起動処理では、まず、CPU52は、インタフェース61を介して、メモリ23から、第2制御プログラムP2を読み出し(ステップS61)、読み出した第2制御プログラムP2をRAM62に書き込む(ステップS62)。次に、CPU52は、例えばハッシュ関数を用いて、第2制御プログラムP2に関連する関連データを演算するための演算データを算出する(ステップS63)。
次に、CPU52は、ステップS64で算出した演算データを第1中継機21のRAM35に書き込み(ステップS64)、ステップS65を実行する。
実施の形態1と同様に、CPU52は、ステップS68で正常データが第1中継機21のRAM35に記憶されていると判定して起動処理を終了した場合、第2中継機22のRAM62に記憶されている第2制御プログラムP2に従って、第2中継処理を実行する。
以上のように構成された実施の形態2における中継装置11は、実施の形態1における中継装置11が奏する効果と同様の効果を奏する。
(実施の形態3)
図11及び図12は、実施の形態3における検証処理の手順を示すフローチャートである。
以下では、実施の形態3について、実施の形態1と異なる点を説明する。後述する構成を除く他の構成については、実施の形態1と共通しているため、実施の形態1と共通する構成部には実施の形態1と同一の参照符号を付してその説明を省略する。
実施の形態3における通信システム1では、実施の形態1における通信システム1と比較して、第1中継機21が有するHSM34のCPU42が実行する検証処理の内容と、第2中継機22のCPU52が実行する起動処理の内容とが異なる。
HSM34のCPU42は、実施の形態1と同様に、電源回路54がCPU42への電力供給を開始した場合において、第1中継処理を実行する前に検証処理を実行する。CPU42が検証処理を実行している間、CPU32は動作を停止している。実施の形態3における検証処理のステップS75,S76,S87,S88夫々は、実施の形態1における検証処理のステップS35,S36,S41,S42と同様である。このため、ステップS75,S76,S87,S88の詳細な説明を省略する。
実施の形態3における検証処理では、まず、CPU42は、第1制御プログラムP1をROM31から読み出し(ステップS71)、読み出した第1制御プログラムP1に基づいて、第1制御プログラムP1に関連する第1関連データを演算するための第1演算データを算出する(ステップS72)。ステップS72では、CPU42は、例えば、ハッシュ関数を用いて第1演算データを算出する。
次に、CPU42は、ステップS72で算出した第1演算データと、ROM41に記憶されている第1鍵データK1とに基づいて、第1制御プログラムP1に関連する第1関連データを演算し(ステップS73)、演算した第1関連データが第1基準データR1と一致するか否かを判定する(ステップS74)。CPU42は、ステップS74を実行することによって、第1制御プログラムP1が適正であることを検証する。第1関連データが第1基準データR1と一致していることは、第1制御プログラムP1が適正であることを示す。第1関連データが第1基準データR1と一致していないことは、第1制御プログラムP1が適正ではないこと、即ち、第1制御プログラムP1が改ざんされている可能性が高いことを示す。
CPU42は、第1関連データが第1基準データR1と一致しないと判定した場合(S74:NO)、ステップS75,S76を順次実行する。これにより、電源回路36は、ROM31、CPU32、通信部33a,33b、HSM34及びRAM35への電力供給を停止し、第1中継機21は動作を停止する。CPU42は、ステップS76を実行した後、検証処理を終了する。
CPU42は、第1関連データが第1基準データR1と一致すると判定した場合(S74:YES)、乱数データを生成する(ステップS77)。乱数データは、例えば、「1」又は「0」で表される数値の羅列であり、乱数を示す。ステップS77では、CPU42は、初期値を決定し、決定した初期値に基づいて乱数データを生成する。CPU42は、例えば、ステップS77が実行された時刻に基づいて初期値を決定する。この場合においては、ステップS77が実行される時刻が異なったとき、ステップS77で生成される乱数データの内容は変更される。時刻には、年月日も含まれている。
前述したように、電源回路54がCPU42への電力供給を開始する都度、検証処理は実行される。繰り返し実行される検証処理において、ステップS77が実行される時刻は相互に異なる。このため、これらの時刻に基づいて決定される初期値も相互に異なる。結果、ステップS77が実行された時刻に基づいて初期値が決定される場合、ステップS77で生成される乱数データの内容は、過去のステップS77で生成された乱数データの内容のいずれとも異なる。CPU42は乱数生成部としても機能する。
次に、CPU42は、ステップS77で生成した乱数データをRAM35に書き込む(ステップS78)。実施の形態3における起動処理では、第2中継機22のCPU52は、ステップS78で書き込まれた乱数データと、第2制御プログラムP2とに基づいて、第2制御プログラムP2に関連する第2関連データを演算するための第2演算データを算出し、算出した第2演算データをRAM35に書き込む。
HSM34のCPU42は、ステップS78を実行した後、第2演算データがRAM35に記憶されているか否かを判定する(ステップS79)。CPU42は、第2演算データが記憶されていないと判定した場合(S79:NO)、ステップS79を再び実行し、第2中継機22のCPU52が第2演算データをRAM35に書き込むまで待機する。
CPU42は、第2演算データが記憶されていると判定した場合(S79:YES)、RAM35から第2演算データを読み出し(ステップS80)、読み出した第2演算データと、ROM41に記憶されている第2鍵データK2とに基づいて、第2関連データを演算する(ステップS81)。
次に、CPU42は、ROM41から第2基準データR2を読み出し(ステップS82)、読み出した第2基準データR2と、ステップS77で生成した乱数データとを合成することによって、第1合成データを生成する(ステップS83)。ステップS83では、CPU42は、例えば、第2基準データR2の最後尾に乱数データを加えることによって第1合成データを生成する。次に、CPU42は、ステップS83で生成した第1合成データに基づいて、第1中間データを算出する(ステップS84)。ステップS84では、CPU42は、例えば、ハッシュ関数を用いて第1中間データを算出する。
次に、CPU42は、ステップS84で算出した第1中間データと、ROM41に記憶されている第2鍵データK2とに基づいて、第3基準データを演算する(ステップS85)。
以上のように、CPU42は、乱数データ、第2基準データR2及び第2鍵データK2に基づいて第3基準データを演算する。CPU42は基準データ演算部として機能する。
次に、CPU42は、ステップS81で演算した第2関連データが、ステップS85で演算した第3基準データと一致するか否かを判定する(ステップS86)。CPU42は、ステップS86を実行することによって、第2制御プログラムP2が適正であることも検証する。CPU42は、第2関連データが第3基準データと一致すると判定した場合(S86:YES)、第2制御プログラムP2は適正であるとして、ステップS87を実行する。CPU42は、第2関連データが第3基準データと一致しないと判定した場合(S86:NO)、第2制御プログラムP2は適正ではない、即ち、第2制御プログラムP2が改ざんされている可能性が高いとして、ステップS88を実行する。CPU42は、ステップS87,S88の一方を実行した後、検証処理を終了する。HSM34のCPU42は、検証処理を終了した後、電源回路36が電力供給を一旦停止して、電力供給を再開するまで、動作を停止する。CPU42が検証処理を終了した後、CPU32は、適正な第1制御プログラムP1を実行する。
図13は起動処理の手順を示すフローチャートである。第2中継機22のCPU52は、実施の形態1と同様に、電源回路54がCPU52への電力供給を開始した場合において、第2中継処理を実行する前に、起動プログラムPbに従って起動処理を実行する。起動処理では、まず、CPU52は、停止データがRAM35に記憶されているか否かを判定する(ステップS91)。CPU52は、停止データが記憶されていないと判定した場合(S91:NO)、乱数データがRAM35に記憶されているか否かを判定する(ステップS92)。
CPU52は、乱数データが記憶されていないと判定した場合(S92:NO)、ステップS91を実行し、HSM34のCPU42が停止データ又は乱数データをRAM35に書き込むまで待機する。
なお、CPU52がステップS91を実行する前に、HSM34のCPU42が検証処理のステップS76を実行した場合、RAM35にデータが記憶されていないため、CPU52は、ステップS91,S92の判定を無限に繰り返す。このため、起動処理において、CPU52は、ステップS91,S92の判定を繰り返している時間が第3の所定時間を超えた場合、第1制御プログラムP1が適正ではないとして、ステップS99を実行してもよい。
CPU52は、乱数データが記憶されていると判定した場合(S92:YES)、第2制御プログラムP2をROM51から読み出し(ステップS93)、読み出した第2制御プログラムP2に基づいて第2中間データを算出する(ステップS94)。ステップS94では、CPU52は、例えば、ハッシュ関数を用いて第2中間データを算出する。
次に、CPU52は、ステップS94で算出した第2中間データと、RAM35に記憶されている乱数データとを合成することによって、第2合成データを生成する(ステップS95)。ステップS95では、CPU52は、例えば、第2中間データの最後尾に乱数データを加えることによって第2合成データを生成する。次に、CPU52は、ステップS95で生成した第2合成データに基づいて、第2関連データを演算するための第2演算データを算出する(ステップS96)。ステップS96では、CPU52は、例えば、ハッシュ関数を用いて第2演算データを算出する。
以上のように、CPU52は第2制御プログラムP2、乱数データ及び第2鍵データK2に基づいて第2演算データを算出する。
次に、CPU52は、ステップS96で算出した第2演算データをRAM35に書き込む(ステップS97)。前述したように、HSM34のCPU42は、RAM35に記憶されている第2演算データを読み出し、読み出した第2演算データに基づいて第2関連データを演算し、第2制御プログラムP2が適正であるか否かを検証する。CPU42は、検証結果に基づいて、正常データ又は異常データをRAM35に書き込む。
CPU52は、ステップS97を実行した後、異常データがRAM35に記憶されているか否かを判定する(ステップS98)。CPU52は、停止データが記憶されていると判定した場合(S91:YES)、又は、異常データが記憶されていると判定した場合(S98:YES)、電源回路54に電力供給の停止を指示する(ステップS99)。これにより、電源回路54は電力供給を停止し、ROM51、CPU52及び通信部53a,53b,53cは動作を停止する。CPU52は、ステップS99を実行した後、起動処理を終了する。
以上のように、HSM34のCPU42は、RAM35に停止データ又は異常データを書き込むことによって、CPU42の動作、即ち、第2中継機22の動作を停止させる。
前述したように、CPU42は、第1制御プログラムP1に関連する第1関連データが第1基準データR1と一致していないと判定した場合、第1制御プログラムP1が改ざんされている可能性が高いとして、停止データをRAM35に書き込む。
また、CPU42は、第2制御プログラムP2に関連する第2関連データが第3基準データと一致していないと判定した場合、第2制御プログラムP2が改ざんされている可能性が高いとして、異常データをRAM35に書き込む。これにより、第2中継機22の動作が停止する。
CPU52がステップS98で異常データが記憶されていると判定してステップS99を実行した場合、第1中継機21の電源回路36は電力供給を停止せず、第1中継機21のCPU32は第1中継処理を実行する。このため、第2中継機22の動作は停止するが、ECU12a,12a中の1つと、ECU12b,12b中の1つとの間の通信の中継は、第1中継機21によって行われる。
CPU52は、異常データが記憶されていないと判定した場合(S98:NO)、正常データがRAM35に記憶されているか否かを判定する(ステップS100)。CPU52は、正常データが記憶されていないと判定した場合(S100:NO)、ステップS98を実行し、HSM34のCPU42が正常データ又は異常データをRAM35に書き込むまで待機する。CPU52は、正常データが記憶されていると判定した場合(S100:YES)、起動処理を終了する。その後、CPU52は、第2中継処理を実行する。
図14は、第2制御プログラムP2の検証の説明図である。前述したように、第2中継機22のCPU52は、第2制御プログラムP2に基づいて第2中間データを算出する。次に、CPU52は、算出した第2中間データと、HSM34のCPU42が生成した乱数データとを合成することによって、第2合成データを生成する。CPU52は、生成した第2合成データに基づいて、第2演算データを算出し、算出した第2演算データを第1中継機21のRAM35に書き込む。
HSM34のCPU42は、RAM35に記憶されている第2演算データと、第2鍵データK2とに基づいて第2関連データを演算する。
また、CPU42は、第2基準データR2と乱数データとを合成することによって、第1合成データを生成する。CPU42は、生成した第1合成データに基づいて、第1中間データを算出する。CPU42は、算出した第1中間データと、第2鍵データK2とに基づいて、第3基準データを演算する。CPU42は、第2関連データが第3基準データに一致するか否かを判定することによって、第2制御プログラムP2を検証する。
第2中間データと乱数データとを合成することによって、第2合成データを生成する方法は、第2基準データと乱数データとを合成することによって、第1合成データを生成する方法と同じである。第2合成データに基づいて第2演算データを算出する方法は、第1合成データに基づいて第1中間データを算出する方法と同じである。第2演算データと、第2鍵データK2とに基づいて第2関連データを演算する方法は、第1中間データと、第2鍵データK2とに基づいて第3基準データを演算する方法と同じである。
第2制御プログラムP2が適正である場合、第2基準データR2は第2中間データと一致する。この場合、第2合成データ、第2演算データ及び第2関連データ夫々は、第1合成データ、第1中間データ及び第3基準データに一致し、正常データがRAM35に書き込まれる。
前述したように、検証処理が実行される都度、乱数データの内容は変更される。このため、今回の検証処理において、前回の検証処理で算出された第2演算データをRAM35に書き込んだ場合、第2関連データは第3基準データと一致しないので、第2制御プログラムP2が適正ではないと判定される。
第2制御プログラムP2を改ざんする方法として、以下の方法が考えられる。過去の検証処理において算出された演算データを記憶した上で、第2制御プログラムP2を改ざんし、その後の検証処理では、記憶されている演算データをRAM35に書き込む。実施の形態3における中継装置において、この方法が用いられた場合であっても、第2制御プログラムP2の改ざんが検出されるので、第2制御プログラムP2の検証結果の信頼性が高い。
また、HSM34のCPU42は、第2鍵データK2、乱数データ及び第2基準データR2に基づいて第3基準データを演算すると共に、第2中継機22のCPU52は、第2演算データと第2鍵データK2とに基づいて第2関連データを演算するので、第2制御プログラムP2の検証結果の信頼性はより高い。
以上のように構成された中継装置11では、第1中継機21が有するHSM34のCPU32が、第2制御プログラムP2を検証する。このため、第2中継機22が、第2制御プログラムP2の検証機能を有する必要がないので、中継装置11は小型であり、中継装置11の製造費用は安価である。
また、第2中継機22のCPU52は、第2制御プログラムP2の第2演算データを算出し、算出した第2演算データを第1中継機21のRAM35に書き込む。第2演算データのデータ量は、第2制御プログラムP2のデータ量よりも小さい。このため、第2制御プログラムP2が適正であることを検証するために、第2中継機22から第1中継機21へ転送されるデータのデータ量は小さい。結果、検証を行うために必要な時間が短い。
また、実施の形態3における中継装置11は、実施の形態1における中継装置11が奏する効果を同様に奏する。
なお、実施の形態2において、第2中継機22のCPU52は、実施の形態3における起動処理を実行してもよい。この場合、起動処理では、CPU52は、ステップS93の代わりに、実施の形態2におけるステップS61,S62を実行する。ステップS94では、ステップS61で読み出した第2制御プログラムP2に基づいて第2中間データを算出する。
(実施の形態4)
実施の形態3における中継装置11では、HSM34のCPU42は第1鍵データK1に基づいて第1関連データを演算し、第2鍵データK2に基づいて第2関連データ及び第3基準データを演算している。しかしながら、CPU42は、第1鍵データK1及び第2鍵データK2に基づく演算を行わなくてもよい。
以下では、実施の形態4について、実施の形態3と異なる点を説明する。後述する構成を除く他の構成については、実施の形態3と共通しているため、実施の形態3と共通する構成部には実施の形態3と同一の参照符号を付してその説明を省略する。
実施の形態4における通信システム1では、実施の形態3における通信システム1と比較して、第1中継機21が有するHSM34のCPU42が実行する検証処理の内容と、第2中継機22のCPU52が実行する起動処理の内容とが異なる。
図15及び図16は、実施の形態4における検証処理の手順を示すフローチャートである。HSM34のCPU42は、実施の形態3と同様に、電源回路54がCPU42への電力供給を開始した場合において、第1中継処理を実行する前に検証処理を実行する。CPU42が検証処理を実行している間、CPU32は動作を停止している。実施の形態4における検証処理のステップS111,S113〜S117,S119,S120,S124,S125夫々は、実施の形態3における検証処理のステップS71,S74〜S78,S82,S83,S87,S88と同様である。このため、ステップS111,S113〜S117,S119,S120,S124,S125の詳細な説明を省略する。
検証処理において、HSM34のCPU42は、ステップS111を実行した後、ステップS111で読み出した第1制御プログラムP1に基づいて、第1制御プログラムP1に関連する第1関連データを演算する(ステップS112)。ステップS112では、CPU42は、例えば、ハッシュ関数を用いて第1関連データを演算する。CPU42は、ステップS112を実行した後、ステップS113を実行する。
ステップS117では、CPU42は、実施の形態3と同様に、乱数データをRAM35に書き込む。実施の形態4における起動処理では、第2中継機22のCPU52は、ステップS117で書き込まれた乱数データと、第2制御プログラムP2とに基づいて、第2制御プログラムP2に関連する第2関連データを演算し、演算した第2関連データをRAM35に書き込む。
CPU42は、ステップS117を実行した後、第2関連データがRAM35に記憶されているか否かを判定する(ステップS118)。CPU42は、第2関連データが記憶されていないと判定した場合(S118:NO)、ステップS118を再び実行し、第2中継機22のCPU52が第2関連データをRAM35に書き込むまで待機する。
CPU42は、第2関連データが記憶されていると判定した場合(S118:YES)、ステップS119,S120を実行する。次に、CPU42は、ステップS120で生成した第1合成データに基づいて、第3基準データを演算する(ステップS121)。ステップS121では、CPU42は、例えば、ハッシュ関数を用いて第3基準データを演算する。
以上のように、CPU42は、乱数データ及び第2基準データR2に基づいて第3基準データを演算する。
次に、CPU42は、RAM35から第2関連データを読み出す(ステップS122)。これにより、CPU42は、第2中継機22のCPU52が演算した第2関連データを取得する。次に、CPU42は、ステップS122で読み出した第2関連データが、ステップS121で演算した第3基準データと一致するか否かを判定する(ステップS123)。CPU42は、ステップS123を実行することによって、第2制御プログラムP2が適正であることも検証する。
CPU42は、第2関連データが第3基準データと一致すると判定した場合(S123:YES)、第2制御プログラムP2は適正であるとして、ステップS124を実行する。CPU42は、第2関連データが第3基準データと一致しないと判定した場合(S123:NO)、第2制御プログラムP2は適正ではない、即ち、第2制御プログラムP2が改ざんされている可能性が高いとして、ステップS125を実行する。CPU42は、ステップS124,S125の一方を実行した後、検証処理を終了する。HSM34のCPU42は、検証処理を終了した後、電源回路36が電力供給を一旦停止して、電力供給を再開するまで、動作を停止する。CPU42が検証処理を終了した後、CPU32は、適正な第1制御プログラムP1を実行する。
図17は起動処理の手順を示すフローチャートである。第2中継機22のCPU52は、実施の形態3と同様に、電源回路54がCPU52への電力供給を開始した場合において、第2中継処理を実行する前に、起動プログラムPbに従って起動処理を実行する。実施の形態4における起動処理のステップS131〜S135,S138〜S140夫々は、ステップS91〜S95,S98〜S100と同様である。このため、ステップS131〜S135,S138〜S140の詳細な説明を省略する。
起動処理では、第2中継機22のCPU52は、ステップS135を実行した後、ステップS135で生成した第2合成データに基づいて、第2関連データを演算する(ステップS136)。ステップS136では、CPU52は、例えば、ハッシュ関数を用いて第2関連データを演算する。
以上のように、CPU52は第2制御プログラムP2及び乱数データに基づいて第2演算データを算出する。実施の形態4においては、HSM34のCPU42ではなく、第2中継機22のCPU52が関連データ演算部として機能する。
次に、CPU52は、ステップS136で演算した第2関連データをRAM35に書き込み(ステップS137)、ステップS138を実行する。
図18は、第2制御プログラムP2の検証の説明図である。実施の形態3と同様に、第2中継機22のCPU52は、第2制御プログラムP2に基づいて第2中間データを算出する。次に、CPU52は、算出した第2中間データと、HSM34のCPU42が生成した乱数データとを合成することによって、第2合成データを生成する。CPU52は、生成した第2合成データに基づいて、第2関連データを演算し、演算した第2関連データを第1中継機21のRAM35に書き込む。
HSM34のCPU42は、実施の形態3と同様に、第2基準データR2と、乱数データとを合成することによって、第1合成データを生成する。CPU42は、生成した第1合成データに基づいて、第3基準データを演算する。CPU42は、第2中継機22のCPU52が演算した第2関連データが、第3基準データに一致するか否かを判定することによって、第2制御プログラムP2を検証する。
第2中間データと乱数データとを合成することによって、第2合成データを生成する方法は、第2基準データと乱数データとを合成することによって、第1合成データを生成する方法と同じである。第2合成データに基づいて第2関連データを演算する方法は、第1合成データに基づいて第3基準データを演算する方法と同じである。
第2制御プログラムP2が適正である場合、第2基準データR2は第2中間データと一致する。この場合、第2合成データ及び第2関連データ夫々は、第1合成データ及び第3基準データに一致し、正常データがRAM35に書き込まれる。
前述したように、検証処理が実行される都度、乱数データの内容は変更される。このため、検証処理が実行される都度、RAM35から読み出す第2関連データは変更される。今回の起動処理において、前回の起動処理で演算された第2関連データをRAM35に書き込んだ場合、第2関連データは第3基準データと一致しないので、第2制御プログラムP2が適正ではないと判定される。結果、実施の形態3と同様に、第2制御プログラムP2の検証結果の信頼性が高い。
実施の形態4における検証処理及び起動処理では、第1鍵データK1及び第2鍵データK2が用いられることはない。このため、HSM34のROM41に第1鍵データK1及び第2鍵データK2が記憶されている必要はない。
また、第2中継機22のCPU52は、第2制御プログラムP2に関連する第2関連データを演算し、演算した第2関連データを第1中継機21のRAM35に書き込む。第2関連データのデータ量は、第2制御プログラムP2のデータ量よりも小さい。このため、第2制御プログラムP2が適正であることを検証するために、第2中継機22から第1中継機21へ転送されるデータのデータ量は小さい。結果、検証を行うために必要な時間が短い。
実施の形態4における中継装置11は、実施の形態3における中継装置11が奏する効果の中で、演算データの算出することによって得られる効果と、第2鍵データK2に基づいて第3基準データを演算することによって得られる効果を除く他の効果を同様に奏する。
なお、実施の形態2において、第2中継機22のCPU52は、実施の形態4における起動処理を実行してもよい。この場合、起動処理では、CPU52は、ステップS133の代わりに、実施の形態2におけるステップS61,S62を実行し、HSM34のROM41に第1鍵データK1及び第2鍵データK2が記憶されている必要はない。ステップS134では、ステップS61で読み出した第2制御プログラムP2に基づいて第2中間データを算出する。
また、実施の形態3において、第2中間データ及び乱数データを合成することによって生成される第2合成データに基づいて算出される第2演算データが、第2制御プログラムP2及び乱数データを合成することによって生成されるデータに基づいて算出されるデータと同一である場合、第2中間データの算出を省略してもよい。この場合、第2中継機22のCPU52は、起動処理において、第2制御プログラムP2と乱数データとに基づいて第2合成データを生成する。
同様に、実施の形態4において、第2中間データ及び乱数データを合成することによって生成される第2合成データに基づいて演算される第2関連データが、第2制御プログラムP2及び乱数データを合成することによって生成されるデータに基づいて算出されるデータと同一である場合、第2中間データの算出を省略してもよい。この場合、第2中継機22のCPU52は、起動処理において、第2制御プログラムP2と乱数データとに基づいて第2合成データを生成する。
また、実施の形態1〜4において、第2中継機22の動作を停止させる構成は、第2中継機22の電源回路54に電力供給を停止させる構成に限定されず、例えば、バッテリと電源回路54とを接続する電力線の中途に設けられたスイッチをオフにする構成であってもよい。この場合、スイッチがオフされた場合、電源回路54は動作を停止する。これにより、電源回路54は電力供給を停止する。
同様に、第1中継機21の動作を停止させる構成は、第1中継機21の電源回路36に電力供給を停止させる構成に限定されず、例えば、バッテリと電源回路36とを接続する電力線の中途に設けられたスイッチをオフにする構成であってもよい。この場合、スイッチがオフされた場合、電源回路36は動作を停止する。これにより、電源回路36は電力供給を停止する。
更に、第1中継機21が有するHSM34のCPU42によって、第2制御プログラムP2が適正ではないと判定された場合、第2中継機22の動作だけではなく、第1中継機21の動作を停止させてもよい。
また、第1中継機21が中継する通信で用いられる通信プロトコルはCANプロトコルに限定されない。更に、第1中継機21が中継する通信で用いられる通信プロトコルは、第2中継機22が中継する通信で用いられる通信プロトコルと同一であってもよい。
また、実施の形態1,2,3において、第2制御プログラムP2の演算データ又は第2演算データは、第2中継機22のCPU52ではなく、第1中継機21が有するHSM34のCPU42によって算出されてもよい。この場合、第2中継機22のCPU52は、起動処理で第2制御プログラムP2を第1中継機21のRAM35に書き込む。
また、実施の形態1〜4において、第1中継機21に接続される通信線の数は、2に限定されず、3以上であってもよい。更に、各通信線に接続されるECUの数は2に限定されず、1又は3以上であってもよい。また、各通信線に接続されるECUの数は、他の通信線に接続されているECUの数と異なっていてもよい。複数のECUが車載機器13a,13b,13cと同様に第1中継機21に直接に接続されていてもよい。
また、第2中継機22に接続される車載機器の数は、3に限定されず、2又は4以上であってもよい。更に、第2中継機22に複数の通信線が接続され、各通信線に一又は複数の車載機器が接続されてもよい。この場合、第2中継機22は、一の通信線に接続されている1つの車載機器と、他の通信線に接続されている1つの車載機器との通信を中継する。
また、ECUデータから機器データへの変換、及び、機器データからECUデータへの変換は、第2中継機22のCPU52が行ってもよい。
開示された実施の形態1〜4はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上述した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。