(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0009】
以下図面を参照して、実施形態を説明する。
[システムの構成]
図1は、本実施形態に関するシステムの構成を示すブロック図である。
図1に示すように、本実施形態のシステムは、管理サーバ100、組込み機器として制御装置(後述する)を搭載した車両200、及び広域のネットワーク300を有する構成である。
【0010】
ネットワーク300には、無線アクセスポイント310、及び整備工場330に設置されている通信装置320のそれぞれが有線接続されている。整備工場330は、例えば車両200の整備を行う施設であり、通信装置320を経由して車両200の制御装置とネットワーク300との接続が可能になっている。また、車両200の制御装置は、無線アクセスポイント310との無線通信により、ネットワーク300との接続が可能になっている。
【0011】
車両200の制御装置は、公道上などで車両200が走行中している場合には、無線アクセスポイント310及びネットワーク300を経由して、管理サーバ100との間で通信する通信機能を含む。また、車両200の制御装置は、整備工場330において車両200が停止している場合には、通信装置320及びネットワーク300を経由して、管理サーバ100との間で通信する通信機能を含む。
【0012】
管理サーバ100は、例えば車両200の完成車メーカが管理しているサーバとし、各車両200を管理し、本実施形態に関する車両200に搭載されている制御装置のマイコンに対するデバッグ可否を判定する機能(後述する)を有する。
【0013】
図19は、車両200の車内ネットワークを示す図である。
図19に示すように、車内ネットワークには複数の制御装置10が接続されており、それぞれが車両の装備を制御している。例えば、制御装置10は、車両内無線ネットワークを介してタイヤ空気圧センサ210と接続している。さらに、例えば、制御装置10は、車両内有線ネットワークを介して、エンジン211やアクチュエータ212、あるいはエアコンなどの機器を制御している。また、各制御装置10はそれぞれ、ゲートウェイ(GW)213を経由して有線通信装置214及び無線通信装置215に接続されている。これにより、各制御装置10はそれぞれ、必要に応じて車両外の機器と通信を行うことができる。
[制御装置の構成]
図2は、車両200の内部に搭載された組込み機器として、例えばアクチュエータ212を制御する制御装置10の構成を示すブロック図である。
【0014】
図2に示すように、制御装置10は、主要部であるマイコン(マイクロコントローラ又マイクロコンピュータ)11と、デバッグポート12と、有線/無線通信部13とを含む。マイコン11は、入出力インターフェイス15を介してアクチュエータ駆動回路21に接続し、このアクチュエータ駆動回路21を制御することによりアクチュエータ212を駆動制御する。また、マイコン11は、エンジンの回転数やブレーキの操作等を制御する。
【0015】
マイコン11は、デバッグポート12を介して、外部のデバッガ20と接続可能になっている。本実施形態は、後述するように、デバッグポート12を介して、マイコン11のソフトウェアに対する不正なデバッグを制限するデバッグアクセス制限機能に関する。
【0016】
ここで、本実施形態のデバッグアクセス制限機能が無い場合には、デバッガ20は、デバッグポート12を通じて、無条件にマイコン11をデバッグモードに切り替えることが可能である。デバッグモードになったマイコン11は、動作中のソフトウェアを解析することに適した環境をデバッガ20に提供できる。例えば、マイコン11のレジスタ値やメモリなどの各種情報の読み込みが可能になり、ソフトウェアの実行を一時的に停止することが可能となり、またプログラムを書き替えることも可能となる。
【0017】
マイコン11は、有線/無線通信部13及び通信インターフェイス16を介して、無線によりネットワーク300に接続可能である。これにより、マイコン11は、後述するように、ネットワーク300を介して管理サーバ100との間で各種の情報交換を行うことが可能である。
[マイコンの構成]
図3は、マイコン11の内部構成を示すブロック図である。
図3に示すように、マイコン11は、命令実行ユニット30と、動作ソフト判定ユニット31と、デバッグユニット32と、制御レジスタ33と、通信ユニット35とを含む。
【0018】
命令実行ユニット30は、後述する不揮発性メモリ36に格納されている各種のソフトウェアに含まれる命令群を実行するユニットである。命令実行ユニット30は、動作ソフト判定ユニット31及び制御レジスタ33を経由して、内蔵ハードウェアの各種制御を実行する。例えば、命令実行ユニット30は、制御レジスタ33を通じて、リセット信号の出力を管理するレジスタに書き込みを行うことで、マイコン11全体をリセットすることが可能である。
【0019】
また、命令実行ユニット30は、制御レジスタ33を通じて、通信ユニット35、不揮発性メモリ36、揮発性メモリ(RAM)37、暗号化ユニット38、および乱数生成ユニット39の制御を実行する。なお、不揮発性メモリ36と揮発性メモリ37とは内部バスに接続されている、いわゆるオンチップメモリ構成である。
【0020】
動作ソフト判定ユニット31は、実行中のソフトウェアの種類を判別することで、命令実行ユニット30による不揮発性メモリ36と揮発性メモリ37との一部領域に対する読み書きを制限すると共に、デバッグモードレジスタ34Bへの書き込みを禁止する。この時、動作ソフト判定ユニット31は、動作ソフトの種類を、制御レジスタ33内の動作ソフトレジスタ34Aにより判別する。動作ソフト判定ユニット31は、動作ソフトレジスタ34Aの値が0の場合には、制限を実行せず、0以外の場合には制限を実行する。
【0021】
制御レジスタ33は、書き換え制限のある動作ソフトレジスタ34A及びデバッグモードレジスタ34Bを含む。
【0022】
動作ソフトレジスタ34Aは、端末の電源投入あるいはリセット時に必ず0クリアされて、その後一度だけ値を書き込める。値が書き込まれると、もう一度、端末のリセットを行うまでは値を変更することはできない。この性質により、リセット直後に動作するROMモニタ(後述)が動作している期間は、不揮発性メモリ36、揮発性メモリ37、デバッグモードレジスタ34Bに対して制限なく読み書きが可能である。一方、ROMモニタがレジスタ値を0以外に変更すると、不揮発性メモリ36、揮発性メモリ37の一部領域への読み書きが制限され、デバッグモードレジスタ34Bへの書き込みが行えなくなる。動作ソフトレジスタ34Aは、ROMモニタが他のソフトウェアに制御を移す直前に書き込みが行われる。
【0023】
デバッグユニット32は、命令実行ユニット30およびマイコン11の外部のデバッグポート12に接続されている。デバッグユニット32は、デバッグモード(デバッグ機能)が有効であれば、外部のデバッガ20(
図2を参照)の指示に従って、命令実行ユニット30を操作する。デバッグモードの有効又は無効の切り替えは、制御レジスタ33内のデバッグモードレジスタ34Bにより行われる。
【0024】
暗号化ユニット38は、ソフトウェア処理では時間を要するブロック暗号化処理を効率的に実行する専用ユニットである。暗号化方式は、例えば3DES(Data Encryption Standard)やAES(Advanced Encryption Standard)などである。また、乱数生成ユニット39は、ソフトウェアでは実装が困難な乱数の生成を実行する専用ユニットである。
【0025】
通信ユニット35は、マイコン11外部の有線/無線通信部13に接続されており、UART(Universal Asynchronous Receiver-Transmitter)やCAN(Controller Area Network)などの車載用ネットワークで多用されるプロトコルで情報通信を実行する。
[不揮発性メモリの内部構成]
図4は、不揮発性メモリ36の内部構成(メモリマップ)を示す図である。
図4に示すように、不揮発性メモリ36は、ソフトウェアであるROMモニタを格納している記憶領域であるROMモニタ部40、およびシステムソフトウェア(システムソフトと表記する場合がある)を格納している記憶領域であるシステムソフト部42を含む。
【0026】
ROMモニタは、後述するように、本実施形態のデバッグのアクセス制限に関するセキュリティ上の重要な処理のみを実行するソフトウェアである。システムソフトは、マイコン11の利用目的に沿った一般的な処理を実行するソフトウェアである。
【0027】
ROMモニタ部40は、原則として書き換えが想定されていない領域であり、不揮発性メモリ36の書き替え禁止領域に配置される。システムソフト部42は、書き替え可能な領域に配置されており、原則としてはシステムソフトのアップデート時にのみ書き替えられる。
【0028】
さらに、不揮発性メモリ36は、各ソフトウェアが利用する情報を保存するためのROMモニタ専用記憶領域部41および共用記憶領域部43を含む。
【0029】
図5は、ROMモニタ専用記憶領域部41の内部構成を示す図である。ROMモニタ専用記憶領域部41は、ROMモニタのみが読み書きできる領域である。よって、ROMモニタ専用記憶領域部41は、システムソフトは読み書きできない領域である。
【0030】
図5に示すように、ROMモニタ専用記憶領域部41は、デバッグモードフラグが保存されるデバッグモードフラグ部50、乱数が保存される乱数部51、共通鍵が保存される共通鍵部52、およびデバッグ可能回数が保存されるデバッグ可能回数部53を含む。
【0031】
デバッグモードフラグは、デバッグモード(デバッグ機能)の有効又は無効を示すフラグである。乱数部51の乱数は、リプレイアタック対策向けに管理サーバ100との通信時に使われる乱数である。共通鍵部52の共通鍵は、マイコン11と管理サーバ100とが互いに保持している共通の共通鍵である。なお、共通鍵は、個々のマイコン毎に異なる鍵が割り当てられており、出荷前に管理サーバ100との間で対応付けが完了しているものとする。デバッグ可能回数は、マイコン11に対してデバッグを実行できる残り回数である。
【0032】
図6は、共用記憶領域部43の内部構成を示す図である。共用記憶領域部43は、ROMモニタおよびシステムソフトの双方が読み書き可能な領域である。各ソフトウェアは共用記憶領域部43に対して、それぞれが利用する情報を保存すると共に、マイコン11のリセットを跨いで、もう一方のソフトウェアに伝達する際の命令や情報なども保存する。
【0033】
図6に示すように、共用記憶領域部43は、ROMモニタ向け命令部60、システムソフト情報部61、システムソフト機密情報部62、システムソフト向け命令部63、およびデバッグメッセージバッファ部(メッセージバッファ部と表記する場合がある)64の各記憶領域を含む。
【0034】
ROMモニタ向け命令部60は、システムソフトからROMモニタへの命令を書き込む領域である。本実施形態では、具体的な命令としては、システムソフトを通常ブートさせる命令(sys-boot)と、デバッグ許可要求メッセージを作成させる命令(make-req)の2種類が定義されている。なお、これらの命令は、命令実行ユニット30が直接解釈する機械語命令ではなく、ROMモニタおよびシステムソフトに対する命令である。
【0035】
システムソフト情報部61は、システムソフトが収集した任意の情報が保存される領域である。システムソフト機密情報部62は、システムソフトが利用している機密情報が保存される領域である。システムソフト向け命令部63は、ROMモニタからシステムソフトへの命令を書き込む領域である。本実施形態では、具体的な命令としては、システムソフトに通常処理のみを行わせる命令(normal)と、管理サーバ100にデバッグ許可要求メッセージを送信させる命令(send-req)の2種類が定義されている。メッセージバッファ部64は、管理サーバ100との間で送受信される各種メッセージが保存される領域である。
[ROMモニタとデバッグモードレジスタの構成]
ここで、
図3に戻って、本実施形態のROMモニタとデバッグモードレジスタ34Bの構成について説明する。
【0036】
前述したように、不揮発性メモリ36のROMモニタ専用記憶領域部41は、ROMモニタの実行中に、ROMモニタのみが読み書きできる領域である。一方、制御レジスタ33に含まれるデバッグモードレジスタ34Bに対する書き込みも、ROMモニタの実行中に限定される。
【0037】
これらの実行手段としては、動作ソフト判定ユニット31が関与する。動作ソフト判定ユニット31は、命令実行ユニット30が命令を実行する際に、命令実行によるアクセス先(オペランド)がROMモニタであるか、ROMモニタ専用記憶領域部41およびデバッグモードレジスタ34Bであるか、それ以外の領域であるかを監視している。動作ソフト判定ユニット31は、実行中ソフトウェアの種類も判定しているため、ROMモニタの命令の場合にのみ、オペランドの制限なしで命令が実行されることになる。言い換えると、ROMモニタ実行中の時にだけ、ROMモニタ専用記憶領域部41やデバッグモードレジスタ34Bの書き換えが可能となる。なお、本実施形態では、ROMモニタ専用記憶領域部41は不揮発性メモリ36に設定されているが、揮発性メモリ37の一部をROMモニタ専用記憶領域部41としてもよい。
【0038】
ROMモニタは、リセットおよびマスク不能割り込み(NMI: Non-Maskable Interrupt)の2つのエントリポイントのみを有する。ROMモニタは、これら2つのエントリポイント以外のアドレスからの実行はできない。即ち、ROMモニタは、リセット時またはNMI時のみ実行される。
[車両の制御装置と管理サーバとの関係]
図7は、デバッグに関する車両200の制御装置10と管理サーバ100との関係を示す図である。前述したように、本実施形態では、車両200の制御装置10と、管理サーバ100とは、ネットワーク300を経由して接続し、情報交換を行うことが可能である。
【0039】
図7に示すように、車両200の制御装置10に含まれるマイコン11内のソフトウェアをデバッグしたい場合には、外部からデバッガ20がデバッグポート12に接続される。本実施形態では、マイコン11は、デバッガ20からのデバッグアクセスに対して、デバッグモードに入って良いか否かの判断を管理サーバ100に問い合わせる。
【0040】
管理サーバ100は、車両200の制御装置10から受け取った情報に基づいて、デバッグの可否を判断し、その判断結果を送り返す。マイコン11は、管理サーバ100からの判断結果に基づいて、デバッグモードに切り替えを実行する。あるいは、マイコン11は、デバッグモードへの切り替えを拒否して、デバッガ20に対してデバッグアクセスを切り離す処理を実行する。
【0041】
図7に示すように、実装的な観点からは、車両200の制御装置10は、ネットワーク300を経由してデバッグ許可要求メッセージ70を管理サーバ100に送信する。管理サーバ100は、当該デバッグ許可要求メッセージ70に応じて、デバッグ可であればデバッグ許可証71を制御装置10に送り返す。マイコン11は、当該デバッグ許可証71により、デバッグ許可が与えられたと判定する。
【0042】
即ち、本実施形態は、デバッガ20からのデバッグアクセスに対して、マイコン11側ではなく、管理サーバ100においてデバッグの可否を判断するように、管理サーバ100側へのデバッグ許可権限を分離する構成である。これにより、管理サーバ100を運営する、例えば車両200の完成車メーカ側が各車両200のデバッグ状況を把握できるようになる。
【0043】
ただし、本実施形態の仕組みは、当然ながら、車両200のマイコン11が管理サーバ100側の判断を遵守する必要がある。具体例として、例えば、悪意ある攻撃により、マイコン11のシステムソフトが異常な状態に陥っていれば、システムソフトは管理サーバ100側の判断を無視する可能性がある。すると、管理サーバ100側がいくら正しく判断しても、マイコン11側ではそれを無視して悪意あるデバッグを許可してしまう事態が生じる。
【0044】
このような事態を回避するためには、管理サーバ100側の判断を遵守する機構をマイコン11側に用意する必要がある。換言すれば、悪意ある攻撃の影響を受けずに、マイコン11側は正しい情報を管理サーバ100側に伝達すること、管理サーバ100側の判断結果に基づいて必ず実行することの2点を満たす機構を用意する必要がある。
[ROMモニタとシステムソフトの機能]
図8は、ROMモニタとシステムソフトの機能を説明するためのブロック図である。
図8に示すように、マイコン11は、主要な機能を提供するソフトウェアとして、ROMモニタ80およびシステムソフト91を有する。
【0045】
ROMモニタ80およびシステムソフト91はそれぞれ、前述したように、不揮発性メモリ36のROMモニタ部40およびシステムソフト部42に格納されている。不揮発性メモリ36は、各ソフトウェアが関係する記憶領域部として、ROMモニタ専用記憶領域部41および共用記憶領域部43を含む。ROMモニタ専用記憶領域部41は、ROMモニタ80のみが読み書きできる領域である。共用記憶領域部43は、ROMモニタ80およびシステムソフト91の双方が読み書き可能な領域である。
【0046】
ROMモニタ80は、後述するように、ROMモニタ向け命令判定部81、システムソフト起動部82、システムソフト検証部83、システムソフト向け命令変更部84、デバッグ許可証有効性判定部85、デバッグポート設定変更部86、およびデバッグ許可要求メッセージ準備部87の各ソフトウェア機能部を含む。デバッグ許可要求メッセージ準備部87は、乱数生成部88、デバッグ許可要求メッセージ保存部89および署名部90の各ソフトウェア機能部を含む。なお、ROMモニタ80は通信機能部を含まない。
【0047】
システムソフト91は、後述するように、システムソフト向け命令判定部92、ROMモニタ向け命令変更部93、システムソフト情報収集部94、再起動部95、および通信部96の各ソフトウェア機能部を含む。通信部96は、デバッグ許可要求メッセージ送信部97およびデバッグ許可証受信部98の各ソフトウェア機能部を含む。
【0048】
さらに、マイコン11は、ハードウェア主体で実現される機能としては、動作ソフト判定部800およびデバッグポートアクセス制限部810を含む。これらのハードウェア機能部は、総称してHWと表記する場合がある。
【0049】
動作ソフト判定部800は、実行中のソフトウェアがROMモニタ80又はシステムソフト91のいずれであるかを検出して判定する。動作ソフト判定部800は、動作ソフト判定ユニット31を含む構成要素であり、ハードウェア実装である。このため、ソフトウェアが悪意ある状態に陥っていても影響は受けない。これにより、ROMモニタ80以外のソフトウェアが、ROMモニタ専用記憶領域部41およびデバッグモードレジスタ34Bを書き替えるような事態を防止できる。
【0050】
デバッグポートアクセス制限部810は、外部のデバッガ20がデバッグポート12に接続された場合に、そのアクセス(デバッグアクセス)制限を実際に実行する。デバッグポートアクセス制限部810は、デバッグモードが有効であるとき、即ち、制御レジスタ33のデバッグモードレジスタ34に有効フラグがセットされている時にのみ、接続されたデバッガ20との通信(デバッグアクセス)を許可する。デバッグポートアクセス制限部810は、デバッグモードが無効である場合には、デバッガ20との通信を遮断し、デバッグアクセスを拒否する。
【0051】
ここで、管理サーバ100は、前述したように、マイコン11とは別のコンピュータであり、デバッグ許可判定部110であるソフトウェア機能部を含む。デバッグ許可判定部110は、マイコン11から送信されるデバッグ許可要求メッセージの内容を精査し、問題が無ければデバッグ許可証をマイコン11に送り返す。
[本実施形態の動作]
以下、
図9から
図18を参照して、本実施形態の動作を説明する。
図9は、マイコンの基本的処理を説明するフローチャートである。
図10は、ROMモニタの処理を説明するためのフローチャートである。
図11は、デバッグ許可要請メッセージの構成を示す図である。
図12は、システムソフトの処理を説明するためのフローチャートである。
図13は、デバッグ可否の処理を説明するためのフローチャートである。
図14から
図18は、HW、ROMモニタ80、システムソフト91、および管理サーバ100の連携を説明するシーケンス図である。
[マイコンの基本的処理]
図9に示すように、制御装置10からマイコン11に電源が入ると、ROMモニタ80が起動する(S1)。ここで、ROMモニタ80は、本実施形態のデバッグアクセス制限機能を実現するセキュリティ関連処理を実行する。デバッグアクセス制限機能とは、例えばデバッガ20による不正なデバッグアクセスに対する有効なアクセス制限を実行できる機能である。なお、ROMモニタ80は、ソフトウェアバグ(software bug)およびソフトウェア的な脆弱性もないとする。
【0052】
ROMモニタ80は、動作ソフトレジスタ34Aの値を0以外に書き替えた上で、システムソフト91を起動する(S2)。システムソフト91は、前述したように、マイコン11の使用目的に対応する通常処理を実行する(S3)。通常処理とは、例えば、車両200のエンジンやエアコンの制御処理である。システムソフト91は、電源がオフされるまで通常処理を継続する(S4のNO、S5のNO)。
【0053】
ここで、制御レジスタ33を通じてソフトウェア的にリセットがかけられた場合、システムソフト91からROMモニタ80への処理遷移が発生する(S4のYES)。リセットは、例えば、ROMモニタ80の実行中、あるいはシステムソフト91の通常処理が開始される前など、各種のタイミングで発生する。なお、当該処理遷移は、リセット以外に、マイコン11に対する電源の入れ直しがある場合も発生する。
[ROMモニタの処理]
図10に示すように、ROMモニタ80は起動後に、システムソフト91の起動処理以外に、大別して2つのセキュリティ関連処理(デバッグアクセス制限機能)を実行する。第1のセキュリティ関連処理は、デバッグ許可要求メッセージの作成処理(S14)である。第2のセキュリティ関連処理は、デバッグ機能の有効化(S20)である。以下、具体的に各処理を説明する。
【0054】
ROMモニタ80は起動後(S10)に、ROMモニタ向け命令判定部81により、共用記憶領域部43に含まれるROMモニタ向け命令部60において、システムソフト91から命令(make-req)が書き込まれていると判定した場合に、デバッグ許可要求メッセージの作成処理を開始する(S11のYES)。具体的には、ROMモニタ80は、システムソフト91の状態を完全性の観点からチェックする(S12)。完全性のチェックとは、不揮発性メモリ36上のシステムソフト全体が改竄されていないことを確認する処理のことである。確認方法としては、このタイミングでハッシュ値と公開鍵とによる検証を行っても良いし、以前に行われた検証処理に基づいて命令を発効したシステムソフトの完全性は正しいと信じてもよい(例えば、特開2017-156945公報を参照)。ROMモニタ80は、システムソフト91の状態に問題が無ければ(S13のNO)、デバッグ許可要求メッセージを作成し(S14)、そのデバッグ許可要求メッセージを共用記憶領域部43のメッセージバッファ部64に保存する。
【0055】
その後、システムソフト91のROMモニタ向け命令変更部93により、ROMモニタ向け命令部60が命令(sys-boot)に書き替えられると、マイコン11は、制御レジスタ33を通じてソフトウェア的にリセットする。命令(sys-boot)は、システムソフト91を通常ブートさせる命令である。従って、ROMモニタ80は、次回に起動した際に、デバッグ許可要求メッセージの作成処理がスキップし、システムソフト91を起動するための処理を実行する(S11のNO)。
【0056】
図11は、デバッグ許可要求メッセージの構成を示す図である。ROMモニタ80は、デバッグ許可要求メッセージ準備部87により、デバッグ許可要求メッセージをデバッグ許可要求メッセージ保存部89に保存する。
【0057】
図11に示すように、ROMモニタ80は、管理サーバ100へのデバッグ許可要求を意味する命令(req-debug)を書き込む。次に、ROMモニタ80は、乱数生成部88により生成した乱数を書き込む。乱数は、ROMモニタ専用記憶領域部41の乱数部51に保存される。
【0058】
さらに、ROMモニタ80は、共用記憶領域部43のシステムソフト情報部61から、システムソフト91が事前に用意したシステムソフト情報をコピーする。システムソフト情報には、システムソフト名、システムソフト91のバージョンおよび拡張情報が含まれている。拡張情報は、システムソフト名やバージョン以外の複雑な情報を管理サーバ100側に伝えるために用意された情報である。ROMモニタ80は単純な構成を維持するために、機能追加を目的に更新されることは想定されていない。その一方で、システムソフト91や管理サーバ100は、状況に応じて更新がなされる。一般的には、運用の状況に応じて、デバッグの可否判断に対して追加の情報が必要になることが考えられる。その様な情報を、拡張情報としてシステムソフト91が収集することになる。これにより、将来に渡って、システム拡張を行うことが可能となる。
【0059】
最後に、ROMモニタ80は、署名部90により、管理サーバ100と共有している共通鍵(共通の共通鍵)を用いて、デバッグ許可要求メッセージ全体に対する電子署名を実行する。共通鍵は、ROMモニタ専用記憶領域部41の共通鍵部52に保存されている。
【0060】
図10に戻って、ROMモニタ80は、ROMモニタ向け命令部60に命令(make-req)が書き込まれていない場合(S11のNO)、あるいはシステムソフト91の状態が不正な場合には(S13のYES)、デバッグ許可要求メッセージの作成処理を実行しない。
【0061】
システムソフトの状態が不正とは、システムソフト部42が改竄されて、完全性が維持されていない場合である。改竄されたシステムソフト91は、不正な動作をしている可能性が高く、デバッグ許可要求そのものが信頼できない。このため、ROMモニタ80は、デバッグ許可要求を無視することになる。一方、システムソフト91が正常であれば、同ソフトが収集する情報も信頼できることになる。即ち、デバッグ許可要求メッセージに含まれるシステムソフト名、バージョン、拡張情報の各情報にも、悪意を持った偽情報が混入することはないと推定できる。
【0062】
ROMモニタ80は、ROMモニタ向け命令部60に命令(make-req)が書き込まれていない場合(S11のNO)、第2のセキュリティ関連処理であるデバッグ機能の有効化の処理を実行する。ここで、デバッグ機能の有効化とは、マイコン11をデバッグモードにして、デバッグポート12に接続されたデバッガ20からシステムソフト91を操作可能にすることである。
【0063】
具体的には、ROMモニタ80は、共用記憶領域部43に含まれるメッセージバッファ部64に管理サーバ100から受信したデバッグ許可証が保存されているかを確認し、保存されている場合には、当該デバッグ許可証を読み込む(S15)。ROMモニタ80は、デバッグ許可証有効性判定部85により、改竄などが行われているか否かの正当性を検証する(S16)。
【0064】
ROMモニタ80は、正当性の検証が成功した場合には(S16のYES)、ROMモニタ専用記憶領域部41のデバッグモードフラグ部50にデバッグモードフラグをセットする(S17)。ここで、セットされたデバッグモードフラグは、デバッグモード(デバッグ機能)の有効を示す有効フラグ(1)とする。なお、ROMモニタ80は、検証済みのデバッグ許可証をメッセージバッファ部64から削除する。
【0065】
次に、ROMモニタ80は、デバッグモードフラグ部50のデバッグモードフラグを確認する(S18)。ROMモニタ80は、有効フラグがセットされていれば(S19のYES)、デバッグ機能を有効化する(S20)。具体的には、マイコン11は、制御レジスタ33のデバッグモードレジスタ34を操作することで、デバッグモードを有効にする。このとき、ROMモニタ80が動作中であるため、デバッグモードレジスタ34に対する書き替えが可能になっている。この後、ROMモニタ80は、システムソフト91を起動することになる(S21)。
【0066】
なお、ROMモニタ80は、デバッグモードフラグを参照せずに、毎回デバッグ許可証の検証を行う処理も可能である。但し、マイコン11は起動時間の制約が厳しいため、検証時間を確保できない場合もある。このため、一度、デバッグ許可証が検証された後は、書き込み制限のあるデバッグモードフラグに基づいて制御を行うことが望ましい。
【0067】
ここで、デバッグ許可証の検証では、デバッグ許可証が、(1)改竄されていないこと、(2)想定した正しい管理サーバから発行されていること、(3)再利用されていないことの3項目が確認される。項目(3)は、「リプレイアタック」としてよく知られた攻撃への対策である。リプレイアタックは、以前に送受信されたデータをそのまま再利用することで、なんらかの悪影響を与える攻撃である。リプレイアタック対策が無い場合は、以前に発行されたデバッグ許可証を流用されて、マイコン11側で本来は拒否されるべきデバッグ(デバッグアクセス)が許可されてしまう可能性がある。デバッグ可否は、直近のマイコン11の状態を考慮して判断されるべきであり、以前に発行されたデバッグ許可証の流用は回避する必要がある。
[システムソフトの処理]
図12に示すように、システムソフト91は起動後に、通常処理以外ではデバッグ許可要求処理を実行する。デバッグ許可要求メッセージとは、管理サーバ100からデバッグ許可証を取得するためのメッセージである(
図11を参照)。以下、具体的に説明する。
【0068】
システムソフト91は起動後(S30)、システムソフト向け命令判定部92により、共用記憶領域部43のシステムソフト向け命令部63に命令(send-req)が格納されていることを確認すると(S31のYES)、通常処理以外のデバッグ許可要求処理を実行する。
【0069】
具体的には、システムソフト91は、共用記憶領域部43のメッセージバッファ部64に保存されているデバッグ許可要求メッセージを読み込む(S32)。システムソフト91は、通信部96のデバッグ許可要求メッセージ送信部97により、当該デバッグ許可要求メッセージを管理サーバ100に送信する(S33)。
【0070】
後述するように、管理サーバ100は、デバッグ許可判定部110により、デバッグ許可要求メッセージの正当性や内容を確認して、デバッグを許可する場合にはデバッグ許可証をシステムソフト91に返信する。
【0071】
システムソフト91は、管理サーバ100からデバッグ許可証を返信された場合には、通信部96のデバッグ許可証受信部98により受信して(S34のYES)、当該デバッグ許可証を共用記憶領域部43のメッセージバッファ部64に保存する(S35)。
【0072】
システムソフト91は、共用記憶領域部43のシステムソフト向け命令部63に対して、命令(normal)に書き替えてリセットを実行する。これにより、システムソフト91は、リセット後に起動した場合に、システムソフト向け命令部63の命令(normal)に応じて(S31のNO)、前述したような通常処理を実行する(S36)。システムソフト91は、リセットされるまで、当該通常処理を継続する(S37のNO)。
【0073】
以上のように本実施形態は、システムソフト91は、通信部96により、ROMモニタ80が作成したデバッグ許可要求メッセージを、いわば代理して管理サーバ100に送信する構成である。これにより、ROMモニタ80は通信機能を付加することなく、相対的に小さく単純なソフトウェア構造を維持できる。一般的に、通信用のコードは可変長のフィールドを扱うため複雑化する。このため、ソフトウェアの脆弱性の原因になることが多い。本実施形態では、ROMモニタ80は、デバッグ許可要求メッセージを作成する処理と、デバッグ許可書を検証する処理に集約できることにより、脆弱性の排除が可能になっている。
【0074】
一方、システムソフト91は、通信処理を行うため、脆弱性を含む確率が高くなる。しかし、システムソフト91が仮に脆弱であっても、デバッグ制限機能には大きな影響を与えることはない。その理由は、システムソフト91は、ROMモニタ80と管理サーバ100との間で情報交換の仲介をしているだけで、デバッグ(デバッグアクセス)制限に関する重要な判断処理には関与していないためである。前述したように、デバッグモードへの切り替えは、ROMモニタ80が判断している。ROMモニタ80は、管理サーバ100が発行したデバッグ許可証に基づいて判断する。また、不正に改竄されたシステムソフト91により、悪意をもってデバッグ許可要求メッセージの内容を書き替えられても、管理サーバ100又はROMモニタ80により当該改竄を検出できる。
[デバッグ可否の処理]
図13は
図7に関連し、マイコン11のデバッグアクセス制限の処理を示すフローチャートである。
図13に示すように、マイコン11は、外部からデバッガ20がデバッグポート12に接続されると(S40)、デバッガ20からのデバッグアクセスに対して、デバッグモードに入って良いか否かの判断を管理サーバ100に問い合わせる(S41)。即ち、マイコン11は、デバッグ許可要求メッセージを送信して、デバッグ(デバッグアクセス)の可否判断を管理サーバ100に依頼する。
【0075】
マイコン11は、管理サーバ100から送信された判断結果を受信する(S42)。マイコン11は、当該判断結果としてデバッグ許可証を受信すると(S43のYES)、デバッグ機能(デバッグモード)を有効化する(S44)。これにより、マイコン11は、デバッガ20からのデバッグアクセスに応じて、システムソフト91に対するデバッグの実行を許可する(S45)。
【0076】
一方、マイコン11は、当該判断結果としてデバッグ不可を受信すると(S43のNO)、デバッグ機能(デバッグモード)を無効化する(S46)。これにより、マイコン11は、デバッガ20からのデバッグアクセスを切り離し、システムソフト91に対するデバッグの実行を拒否する(S47)。
[システムの連携]
以下、
図14から
図18に示すシーケンス図を参照して、本実施形態の動作を、HW(ハードウェア機能)、ROMモニタ80、システムソフト91、および管理サーバ100の連携の観点から説明する。
【0077】
なお、HWは、前述したように、マイコン11のハードウェア主体で実現される機能を意味し、動作ソフト判定部800およびデバッグポートアクセス制限部810などのソフトウェア機能も含む。さらに、HWは、制御レジスタ33の初期化や、不揮発性メモリ36内のプログラムへの制御遷移、電源制御等の機能も含む。
【0078】
図14から
図18の共通事項として、ROMモニタ80とシステムソフト91との連携により処理では、ROMモニタ専用記憶領域部41や共用記憶領域部43に対する情報又は命令の読み書き動作(readまたはwrite)が実行される。これらの動作については、「read 情報又は命令」、「write 書き込まれる値 to 領域名」の形式で明記している。
【0079】
具体例として、ROMモニタ80が共用記憶領域部43からROMモニタ向け命令を読み込む際には、矢印を共用記憶領域部43まで伸ばして、read「ROMモニタ向け命令」と表記している。同様に、システムソフト91が共用記憶領域部43のROMモニタ向け命令部60に書き込みを行う際は、矢印を共用記憶領域部43まで伸ばし、write make-req to「ROMモニタ向け命令部」と表記している。
[通常処理]
図14は、ROMモニタ80とシステムソフト91との通常処理における連携を説明するためのシーケンス図である。通常処理では、デバッグアクセス制限に関するセキュリティ関連処理は含まれない。
【0080】
図14に示すように、初期状態では、共用記憶領域部43のROMモニタ向け命令部60には、システムソフト91の起動を示す命令(sys-boot)が書き込まれている。また、システムソフト向け命令部63には、通常処理の実行を示す命令(normal)が書き込まれている。共用記憶領域部43のメッセージバッファ部64には、有意な情報は書き込まれていないとする(0クリア又は有意でないことを示す値が書き込まれている状態)。また、ROMモニタ専用記憶領域部41のデバッグモードフラグ部50には、有効フラグがセットされていないOFF状態とする(単にOFFと表記する)。また、有効フラグがセットされている場合は、単にONと表記する。
【0081】
マイコン11に電源が投入されると、HWは、制御レジスタ33を初期化し、デバッグモードレジスタ34のフラグをOFF(無効)に設定する。ここで、デバッグモードレジスタ34のフラグをOFFの場合には、デバッグポートアクセス制限部810は接続されるデバッガ20との通信を拒否し、デバッグアクセスを無効にする。即ち、初期状態では、マイコン11は、デバッガ20によるデバッグを実行できない状態である。
【0082】
次に、HWは、ROMモニタ80を起動(boot)させて制御を移行する。ROMモニタ80は、ROMモニタ向け命令判定部81により、共用記憶領域部43のROMモニタ向け命令部60からROMモニタ向け命令(sys-boot)を読み込む。この命令(sys-boot)は、システムソフト91を起動させる命令である。
【0083】
次に、ROMモニタ80は、デバッグポート設定変更部86により、ROMモニタ専用記憶領域部41のデバッグモードフラグ部50からフラグを読み込み、デバッグモードフラグのON又はOFFを確認する。ここでは、デバッグモードフラグはOFFであるため、デバッグモードレジスタ34を操作しない。
【0084】
ROMモニタ80は、命令(sys-boot)に従って、システムソフト起動部82によりシステムソフト91を起動させて、システムソフト向け命令を共用記憶領域部43のシステムソフト向け命令部63に書き込む。システムソフト91は、システムソフト向け命令判定部92により、共用記憶領域部43のシステムソフト向け命令部63から読み出した命令(normal)を確認する。
【0085】
システムソフト91は、命令(normal)に従って、セキュリティ関連処理を実行せずに、マイコン11の通常処理を実行する。この時、デバッグモードフラグはOFFであるため、マイコン11は、デバッガ20によるデバッグを実行できない状態である。
[デバッグ許可要求処理]
図15は、デバッグ許可要求処理における連携を説明するためのシーケンス図である。本実施形態では、システムソフト91は、所定のインターフェイスを有し、デバッガ20が接続された状態で、当該インターフェイスに対する操作をトリガーとして、デバッグの許可を管理サーバ100に要求する(依頼する)。具体例としては、制御装置10の基板上のスイッチが操作される、UARTから特定の信号が送信される、WebインターフェイスからPOSTされる等のトリガーである。この場合、車両200の修理を行うディーラー技術者や、事故原因を究明したいメーカ技術者などが、当該インターフェイスを操作して、マイコン11をデバッグモードに切り替えることになる。
【0086】
図15に示すように、システムソフト91は、管理サーバ100へのデバッグ許可要求の準備として、ROMモニタ向け命令変更部93により、共用記憶領域部43のROMモニタ向け命令部60を命令(make-req)に書き替える。これにより、システムソフト91は、デバッグ許可要求処理をROMモニタ80に移行する。
【0087】
次に、システムソフト91は、システムソフト情報収集部94により、
図11に示すようなシステムソフト名、バージョン、および拡張情報を収集して、共用記憶領域部43のシステムソフト情報部61に書き込みを実行する。
【0088】
最後に、システムソフト91は、再起動部95によりリセットを実行し、デバッグ許可要求の準備処理を終了する。リセット後は、ROMモニタ80は、命令(make-req)に従ってデバッグ許可要求メッセージの作成処理を開始する(
図16を参照)。
【0089】
ここで、本実施形態では、シングルCPUのマイコン11であり、ROMモニタ80とシステムソフト91とを順番に動作させている。システムソフト91が起動すると、ROMモニタ80に遷移する機能は、リセットにより実現されている。一般的に、マイコンでは、リセットが行われると、揮発性メモリ37やハードウェア設定等がクリアされ、これまでのソフトウェア動作の影響を完全に排除した状態となる。このため、その後に動くソフトウェアは、バグの影響を除けば開発者が想定した通りに動くことが期待できる。
【0090】
本実施形態では、リセット後に動作するソフトウェアは、ROMモニタ80である。このため、ROMモニタ80が、デバッグに関するセキュリティ関連の処理を実行することで、安全性を確保できる。但し、ROMモニタ80は、通信機能を付加することなく、記憶領域の読み書きも可変長になるようなものは排除し、相対的に小さく単純なソフトウェア構造を維持し、脆弱性が排除されていることが望ましい。
【0091】
なお、本実施形態では、リセットが必須の構成であるため、マルチタスクシステムで多用される揮発性メモリ(DRAM、SRAM等)を利用した情報の伝達は不可である。一般的なマルチタスクシステムでは、プロセスやタスク間で情報を伝達する場合には、共有メモリに類する仕組みを使うことが多い。しかし、本実施形態では、システムソフト91からROMモニタ80に処理が移行される場合には、リセットが生じる。このため、揮発性メモリを介して情報をやり取りすることはできない。そこで、ごく単純な命令・情報であっても不揮発性メモリ36に保存する仕組みとなる。このため、起動した直後のROMモニタ80およびシステムソフト91は、不揮発性メモリ36を参照して処理すべき案件を判断する。
[デバッグ許可要求メッセージの作成処理]
図16は、デバッグ許可要求メッセージの作成処理の連携を説明するためのシーケンス図である。
【0092】
前述したシステムソフト91によるリセットにより、HWは、デバッグモードレジスタ34のOFFを維持した状態で、ROMモニタ80を起動する(boot)。ROMモニタ80は、ROMモニタ向け命令判定部81により、共用記憶領域部43のROMモニタ向け命令部60から、ROMモニタ向け命令(make-req)を読み込む。これにより、ROMモニタ80は、命令(make-req)に従って、デバッグ許可要求メーセージの作成処理を開始する。
【0093】
なお、ROMモニタ80は、ROMモニタ専用記憶領域部41のデバッグモードフラグ部50からフラグを読み込み、デバッグモードフラグがOFFであることを確認する。ここのため、デバッグモードへの切り替えは実行されない。ROMモニタ80は、外部の影響を一切受けることなく、以降の処理を進めることになる。
【0094】
次に、ROMモニタ80は、システムソフト検証部83により、システムソフト91の完全性を検証する。まず、ROMモニタ80は、ROMモニタ専用記憶領域部41の共通鍵部52から共通鍵を読み込む。共通鍵(ABCD)は、マイコン11と管理サーバ100とが互いに保持している共通の共通鍵である。
【0095】
次に、ROMモニタ80は、共用記憶領域部43のシステムソフト機密情報部62からハッシュ値を読み込む。ROMモニタ80は、システムソフト91に付随している暗号化済みの想定ハッシュ値を、共通鍵で復号した上で比較する。ROMモニタ80は、各ハッシュ値が等しい場合には、システムソフト91の完全性が検証されたことになり、命令(make-req)を書いたシステムソフト91の状態は正しいと判定する。
【0096】
これにより、ROMモニタ80は、悪意あるデバッグ許可要求ではないと判断して処理を続行する。この場合、システムソフト91の完全性が検証されたため、システムソフト91が共用記憶領域部43のシステムソフト情報部61に書き込んだ内容も同様に正しいと判定する。なお、ROMモニタ80は、各ハッシュ値が不一致の場合には、システムソフト91が不正に改竄あるいは改造された可能性があるため、デバッグ許可要求メッセージの作成処理を中止する。
【0097】
次に、ROMモニタ80は、デバッグ許可要求メッセージ準備部87の各機能部が連携して当該メッセージの作成準備を開始する。まずは、乱数生成部88が乱数を生成する。デバッグ許可要求メッセージ準備部87は、ROMモニタ専用記憶領域部41の乱数部51に保存する(書き込む)。乱数(1234)は、後述するように、デバッグ許可証に対するリプレイ攻撃対策に用いられる。署名部90は、共通鍵を用いてデバッグ許可要求メッセージ全体に対する電子署名を実行する。デバッグ許可要求メッセージ保存部89は、
図11に示すようなデバッグ許可要求メッセージを作成し、共用記憶領域部43のメッセージバッファ部64に保存する。
【0098】
次に、ROMモニタ80は、デバッグ許可要求メッセージの作成処理が完了したことを認識すると、共用記憶領域部43のROMモニタ向け命令部60を命令(sys-boot)に書き替える。これにより、ROMモニタ80が再起動した際には、命令(sys-boot)に従って、システムソフト91を通常通りに起動させる。即ち、再びデバッグ許可要求メッセージを作成する処理を再開することはない。
【0099】
最後に、ROMモニタ80は、システムソフト向け命令変更部84により、共用記憶領域部43のシステムソフト向け命令部63を、命令(send-req)に書き替えて、リセットする。この命令(send-req)は、後述するように、デバッグ許可要求メッセージを、ROMMROMモニタ80の代理としてシステムソフト91に送信させるための命令である。リセット後に起動したシステムソフト91は、この命令(send-req)により、当該メッセージの送信の依頼があったことを認識する(
図17を参照)。
【0100】
ここで、ROMモニタ80は、ROMモニタ専用記憶領域部41の乱数部51に乱数を書き込む。この書き込み処理は、HWの動作ソフト判定部800の機能により実現される。即ち、動作ソフト判定部800は、ROMモニタ80が動作中であるため、不揮発性メモリ36のメモリコントローラあるいは制御レジスタ33に信号を出力して、ROMモニタ専用記憶領域部41に対する書き込みが一時的に実行できる状態にしている。この場合、ROMモニタ80は、不正な値を書き込むことはない。
【0101】
ここで、ROMモニタ80が用意するデバッグ許可要求メッセージ(Msg Debug Req)を式の形式で表現した一例「MsgDebugReq = Body||Sign
m」を示す。但し、「Body = com_debugReq || SN || Ver | Rnd || EInfo,Sign
m = E_K[H[Body]]」である。
【0102】
式の各要素の定義は以下の通りである。即ち、com_debugReqは、デバッグ許可を管理サーバに求めるコマンドである。Kは、管理サーバ100とマイコン11とで共有している共通鍵である。SNはシステムソフトの名前(System soft Name)である。Verは、マイコン11が現在使用しているシステムソフトのバージョン番号である。Rndは乱数である。EInfoは拡張情報である。E_K[A]は、共通鍵KによるデータAの共通鍵ブロック暗号化を意味する。H[X]はデータXに対するハッシュ計算を意味する。||は要素の連結を意味する。例えば、データAとデータBとの連結は、A||Bと表現する。
[管理サーバとの通信処理]
図17は、管理サーバ100との通信処理の連携を説明し、管理サーバ100からデバッグ許可証を取得するまでの処理を示すシーケンス図である。
【0103】
図17に示すように、前述したROMモニタ80によるリセットにより、HWは、デバッグモードレジスタ34のOFFを維持した状態で、ROMモニタ80を起動する(boot)。ROMモニタ80は、ROMモニタ向け命令判定部81により、共用記憶領域部43のROMモニタ向け命令部60から、ROMモニタ向け命令(sys-boot)を読み込む。
【0104】
また、ROMモニタ80は、デバッグポート設定変更部86により、ROMモニタ専用記憶領域部41のデバッグモードフラグ部50からフラグを読み込み、デバッグモードフラグがOFFであることを認識する。これにより、ROMモニタ80は、システムソフト起動部82により、デバッグモードが無効である状態のまま、システムソフト91を起動させる。
【0105】
起動したシステムソフト91は、システムソフト向け命令判定部92により、共用記憶領域部43のシステムソフト向け命令部63からシステムソフト向け命令(send-req)を読み込み、認識する。システムソフト91は、命令(send-req)に従って、通信部96により、共用記憶領域部43のメッセージバッファ部64からデバッグ許可要求メッセージを読み込む。
【0106】
次に、システムソフト91は、デバッグ許可要求メッセージ送信部97により、当該デバッグ許可要求メッセージを管理サーバ100に送信する。この場合、システムソフト91は、接続されている適切な通信経路を使用して、管理サーバ100との通信処理を実行する。具体例としては、通信サーバが物理的に直結されている場合にはUARTでも良いし、いわゆる有線LANに接続されていればEthernet(登録商標)とTCP/IPを利用いても良い。本実施形態では、前述したように、管理サーバ100との通信処理は、システムソフト91側で対応する。一方、ROMモニタ80は、通信処理を実行せずに、デバッグ許可要求メッセージの作成処理、および後述するデバッグ許可証の検証処理を実行する。
【0107】
管理サーバ100は、デバッグ許可判定部110により、デバッグ許可要求メッセージの正当性(署名)や内容を確認して、問題が無いかを判定する。管理サーバ100は、問題が無ければ同様の通信経路でデバッグ許可証を返信し、問題がある場合にはその旨を返信する。
【0108】
ここで、デバッグ許可判定部110は、一例として、以下の手順により判定処理を実行する。まず、デバッグ許可判定部110は、前述の式の形式で示すデバッグ許可要求メッセージ(Msg Debug Req)から本体部分であるBodyを取り出し、ハッシュ値H[Body]を計算する。次に、署名(Sign
m)を共通鍵Kで復号して、想定ハッシュ値であるD_K[Sign
m]を算出する。ここで、D_K[Y]は、共通鍵KによるYの共通鍵ブロック復号を意味する。
【0109】
デバッグ許可判定部110は、両者のハッシュ値を比較して値が等しければ、ROMモニタ80が生成した当該メッセージ(Msg Debug Req)を、マイコン11内及び通信経路上で改竄されていないことを保証することになる。次に、デバッグ許可判定部110は、システムソフト91の名前(SN)の値を調査し、それが想定する名前であり、問題が無ければ処理を進める。
【0110】
デバッグ許可判定部110は、複数種類のシステムソフト(マイコン)を管理しており、システムソフト名(SN)で要求元の機種等を判断する。これは出荷時であっても、デバッグ可能マイコンの種類を増減できることを示している。即ち、出荷時にはデバッグを行えないマイコンであっても、状況に応じて管理サーバ100側の情報を更新すればデバッグ可能にできる余地がある。
【0111】
また、デバッグ許可判定部110は、当該メッセージ(Msg Debug Req)のバージョン(Ver)の値も調査する。これも、管理サーバ100側で想定される値が設定されており、問題がなければ処理を進める。どのバージョンをデバッグ許可対象にするのかは、運用によって様々なものが考えられる。例えば、常に最新ソフトしか利用を認めないという運用方針であれば、古いソフトからデバッグ要求が来ること自体を不正とすることになる。よって、最新のバージョンの値のみが想定値になる。一方、最新版のシステムソフトでは問題がないが、特定バージョンにだけ動作不良が見つかり、調査を行う場合もある。この場合には、特定バージョンの値だけが一時的に想定値として設定されることになる。
【0112】
最後に、デバッグ許可判定部110は、当該メッセージ(Msg Debug Req)の拡張情報(EInfo)を調査する。これは、システムソフト名(SN)とバージョン(Ver)では表現できない情報を含む。これも、管理サーバ100側で想定値を設定することになり、必要に応じて判断材料に用いられる。
【0113】
デバッグ許可判定部110は、システムソフト名(SN)、バージョン(Ver)、拡張情報(EInfo)の3情報に問題がなければ、デバッグ許可証(License Debug)を作成して、マイコン11側に返信する。
【0114】
デバッグ許可証(License Debug)の構成は、式「LicenseDebug = Res || Sign
l」の形式で表現できる。但し、「Res = resp_debug_ok || Rnd, Sign
l = E_K[H[Res]]」である。
【0115】
ここで、乱数(Rnd)は管理サーバ100が新たに生成したものではなく、デバッグ許可要求メッセージ(Msg Debug Req)に含まれていたものをそのままコピーしたものである。また、resp_debug_okは、デバッグを許可したことを示す返答(デバッグ許可証)を意味する。一方、resp_degun_ngは、デバッグを許可しないことを示す返答を意味することになる。即ち、デバッグ許可判定部110は、デバッグ許可要求メッセージ(Msg Debug Req)に問題があり、デバッグ許可証が発行できない場合には、返答(resp_degun_ng)を返信することになる。
【0116】
システムソフト91は、管理サーバ100からデバッグ許可証(License Debug)を返信された場合には、通信部96のデバッグ許可証受信部98により受信して、共用記憶領域部43のメッセージバッファ部64に保存する(書き込む)。システムソフト91は、管理サーバ100との通信処理が完了したことを認識すると、共用記憶領域部43のシステムソフト向け命令部63を命令(normal)に書き替えてリセットを実行する。これにより、システムソフト91は、次回の起動時に通常処理を開始し、管理サーバ100との通信処理を実行しない。
[デバッグ許可証の検証処理]
図18は、デバッグ許可証の検証処理の連携を説明し、デバッグモードの有効化してデバッグを許可するまでの処理を示すシーケンス図である。
【0117】
図18に示すように、前述したシステムソフト91によるリセットにより、HWは、デバッグモードレジスタ34のOFFを維持した状態で、ROMモニタ80を起動する(boot)。ROMモニタ80は、ROMモニタ向け命令判定部81により、共用記憶領域部43のROMモニタ向け命令部60から、ROMモニタ向け命令(sys-boot)を読み込み、認識する。これにより、ROMモニタ80は、デバッグ許可要求メッセージの作成処理ではなく、デバッグ許可証の検証処理を開始し、最終的にはシステムソフト91を起動させる処理を進める。
【0118】
ROMモニタ80は、共用記憶領域部43のメッセージバッファ部64から、デバッグ許可証を読み出す。ROMモニタ80は、デバッグ許可証有効性判定部85により、デバッグ許可証の有効性を検証する処理を開始する。具体的には、以下の手順で有効性を検証する。
【0119】
ROMモニタ80は、ROMモニタ専用記憶領域部41の共通鍵部52から共通鍵(K)を読み出す。次に、ROMモニタ80は、前述の式の形式であるデバッグ許可証(License Debug)から、レスポンス本体(Res)を取り出して、ハッシュ値H[Res]を計算する。次に、署名(Sign
l)を共通鍵(K)で復号して、想定ハッシュ値(D_K[Sign
l])を算出する。この両者を比較して値が等しければ、ROMモニタ80は、デバッグ許可証が改竄されていないこと、および想定する送信者である管理サーバ100が返答したものであることを検証する。
【0120】
但し、この検証により確認できた内容は、「過去に管理サーバ100がデバッグを許可したことがある」という事実までである。この事実だけで、デバッグ許可を与えてしまうと、過去に発行したデバッグ許可証を何度も再利用するというリプレイアタックを許してしまうことになる。即ち、一度でもデバッグが許可されたシステムソフトが永遠にデバッグ可能となる恐れがある。デバッグの可否判断は、直近の状況に応じて、その都度行われるべきであり、対策が必要となる。
【0121】
本実施形態では、ROMモニタ80は、デバッグ許可証有効性判定部85により、リプレイアタック対策として、以下の手順で検証処理を実行する。
【0122】
まず、ROMモニタ80は、ROMモニタ専用記憶領域部41の乱数部51から乱数(1234)を読み込む。ROMモニタ80は、当該乱数と、デバッグ許可証(License Debug)の本体(Res)に含まれる乱数(Rnd)との比較を行う。ROMモニタ80は、両者が一致した場合には、リプレイアタックされていないと判断する。一方、両者が一致しない場合には、リプレイアタックされているとして、デバッグ許可証そのものを不正なものと判断する。
【0123】
以下、判断の根拠を説明する。ROMモニタ専用記憶領域部41の乱数部51に保存されている乱数(1234)は、デバッグ許可要求メッセージを作成する際に、ROMモニタ80が保存しておいた値である。このため、ROMモニタ80が直近で作成した当該メッセージには、必ず同じ乱数の値が使われていることになる。一方、管理サーバ100は、この乱数を取り出して、そのままデバッグ許可証にコピーする(埋め込む)処理を行っている。このため、管理サーバ100から返信されたデバッグ許可証に、その乱数が含まれているならば、時間的に近いタイミングで作成されたものであると推測することができる。
【0124】
ROMモニタ80は、デバッグ許可証の検証処理が完了し、かつ、デバッグ許可を示す命令(resp_debug_ok)が含まれていれば、正当性の検証が成功したものと判断する。ROMモニタ80は、デバッグポート設定変更部86により、ROMモニタ専用記憶領域部41のデバッグモードフラグ部50にデバッグモードフラグをON(有効)にセットする。
【0125】
次に、ROMモニタ80は、検証済みのデバッグ許可証をメッセージバッファ部64から削除する。さらに、ROMモニタ80は、制御レジスタ33のデバッグモードレジスタ34のデバッグモードを有効(ON)にしてデバッグ機能を有効化する。これにより、デバッグポートアクセス制限部810は、接続されたデバッガ20との通信(デバッグアクセス)を許可する。この後、ROMモニタ80は、システムソフト91を起動する。従って、外部のデバッガ20により、マイコン11のシステムソフト91をデバッグできる状態となる。
【0126】
ここで、次回以降、ROMモニタ80は、起動する毎にROMモニタ専用記憶領域部41のデバッグモードフラグ部50をアクセスして、デバッグモードフラグの内容を確認することになる。この場合、デバッグ許可証の判定なしに、デバッグモードが有効(ON)になっている。デバッグモードフラグの有効な状態が永続化するのは問題であるため、前述したように、ROMモニタ専用記憶領域部41にはデバッグ可能回数部53が設けられている。デバッグ可能回数は、デバッグモードフラグを有効にした際に値がセットされる。その後は、マイコン11がデバッグモードで起動する度に値を減らしていく。デバッグ可能回数が「0」になった時点で、ROMモニタ80は、デバッグモードフラグを無効にして、デバッグ許可証の再取得を再開する。
【0127】
デバッグ可能回数として設定する値は、マイコン11の用途に依存して設定する。例えば、ネットワーク環境の悪い場所で運用されるマイコン11を想定するのであれば、デバッグ可能回数を多めにしないと、必要なタイミングでデバッグできない可能性がある。一方、デバッグを厳しく制限したいマイコン11の場合には、デバッグ可能回数の値を「1」に設定して、デバッグ要求がある度に、デバッグ許可証の発行が必要となるようにしてもよい。
【0128】
以上のように本実施形態によれば、低コストのシングルCPUコアを主要素とするマイコンにおいて、外部からの不正なデバッグに対して、有効なデバッグアクセス制限を確実に行うことができるデバッグアクセス制限機能を実現できる。これにより、悪意のある外部からマイコンのソフトウェアを不正に動作・解析し、または改竄されるような事態を未然に防止することができる。
【0129】
さらに、本実施形態は、セキュリティ性の高いROMモニタにより、外部からのデバッグ要求に応じて、マイコンとは異なるコンピュータである管理サーバに対してデバッグの可否判断を依頼する。ROMモニタは、管理サーバからのデバッグ許可証に基づいて、マイコンのデバッグ機能の有効化または無効化の処理を実行する。
【0130】
即ち、管理サーバ側へのデバッグ可否判断の権限を分離する構成を実現することにより、低コストのマイコンの場合でも、外部に対するセキュリティ面を確保すると共に、確実なデバッグアクセス制限機能を実現できる。また、デバッグ可否判断を管理サーバ側が行うため、当該管理サーバの運用側が、マイコンが組み込まれた製品の出荷後でも、マイコンのデバッグ状況を一元管理できる。
【0131】
なお、本実施形態は、車両に搭載されるマイコンに適用する場合について説明したが、これに限ることなく、例えば家庭用電気機器や医療機器などに組み込まれるマイコンにも適用できる。
[変形例]
図20は、本実施形態の変形例に関するブロック図である。本変形例は、
図8に示す本実施形態のマイコン11の機能において、HWに含まれる周辺回路としてA/Dコンバータ制御部820およびROMモニタ80に含まれる機密情報消去部830を付加した構成である。なお、他の構成については、本実施形態と同様であるため、説明を省略する。
【0132】
本変形例のA/Dコンバータ制御部820および機密情報消去部830はいずれも、マイコン11内の機密情報の流出を防止することを目的とした構成要素である。ここで、本変形例では、マイコン11内の機密情報としては、ROMモニタ専用記憶領域部41の共通鍵、および共用記憶領域部43のシステムソフト機密情報部62に格納されているシステムソフト機密情報の2種類の情報とする。
【0133】
共通鍵は、本実施形態の各処理を実行する際のセキュリティ上の観点から、安全性の担保を確保するために重要である。本実施形態では、安全性の高いROMモニタ80だけが共通鍵の読み込み権限を持つと共に、共通鍵がそのままの形式で外部に保存される処理を含まないため、共通鍵が流出する可能性は極めて低い。一方で、共通鍵はマイコン出荷前に書き込まれて、基本的には更新は想定されていないため、流出した際の影響が大きい。
また、システムソフト機密情報は、システムソフト91の通常処理中に保存される情報の中で、流出の影響が大きいものである。例えば、ユーザが利用しているIDやパスワード、動作ログ(音声データ、顔の画像等)が代表例である。これらの中には、デバッグ時であっても、オペレータに見せるべきではない情報が含まれる可能性がある。よって、システムソフト91の設計者は、事前にシステムソフト機密情報を意識した設計を行うことになる。
【0134】
以下、マイコン11内の機密情報の流出を防止するための手順を説明する。
【0135】
まず、機密情報として共通鍵が使用されている場合に、共通鍵が流出する経路としては電力解析時のマイコン11からの出力である。電力解析とは、本来ソフトウェア的には取得が困難な情報を、電気的な特徴を解析することで推測する処理である。具体的には、マイコン11内おいて、共通鍵による署名検証処理が行われている際に、マイコン11の電力消費量やノイズを測定することで、その測定値の出力時に共通鍵の値が漏出する可能性がある。よって、マイコン11が共通鍵を使用して計算処理中には、外部に電力解析に伴う測定をさせない工夫が望ましい。
【0136】
そこで、本変形例では、A/Dコンバータ制御部820は、ROMモニタ80による共通鍵の操作が行われている間(例えば、暗号化ユニット38の動作中)、マイコン11からの出力により電力解析を行うための回路の動作を停止させる。電力解析を行うための代表例となる回路としては、A/Dコンバータが外部インターフェイスとして接続されていることがある。即ち、A/Dコンバータを経由して、例えばマイコン11の演算処理の内容が不正に取得される可能性がある。
【0137】
そこで、本変形例では、A/Dコンバータ制御部820は、外部インターフェイスに対する電源を遮断して、A/Dコンバータの動作を停止させる。但し、A/Dコンバータに限らず、外部インターフェイスとして接続されている他の回路の場合でも、マイコン11が共通鍵を使用して計算処理中には、動作を停止させる制御部が必要である。
【0138】
さらに、マイコン11において、システムソフト91が運用されている場合は、通常処理に伴いシステムソフト機密情報を共用記憶領域部43のシステムソフト機密情報部62に保存することがある。この保存後に、要請に従って、例えば、ROMモニタ80がデバッグモードフラグを有効にする処理を実行する場合には、ROMモニタ80の機密情報消去部830は、システムソフト機密情報部62の内容を直ちに消去する。これにより、デバッグを行うオペレータに対しても、システムソフト機密情報部62からの機密情報が漏出するような事態を防止できる。
【0139】
なお、ROMモニタ80の単純性を維持するために、システムソフト機密情報部62は固定長である。よって、システムソフトが保存するシステムソフト機密情報の容量によっては、システムソフト機密情報部62の容量が不足する可能性がある。この場合には、システムソフト91は独自にシステムソフト機密情報を暗号化し、その際に使う鍵のみをシステムソフト機密情報部62に保存する運用を実行してもよい。これにより、デバッグ時には、その鍵が確実に削除されて、暗号化しておいたシステムソフト機密情報を復元することができなくなる。システムソフトの通常処理向けに用意されている不揮発性メモリ36の容量は、システムソフト機密情報部62と比較して大きいため、当該運用により機密情報の容量には実用上の制限がなくなる。
【0140】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。