(57)【要約】【課題】所定の装置における不正プログラムの有無を当該装置の外部から判定することの精度を向上させる。【解決手段】ＩＶＩ装置１４は、周辺機器１６のメモリの全領域に格納されたデータに基づく判定データを記憶する。ＩＶＩ装置１４は、所定の検査タイミングにおいて、周辺機器１６のメモリの全領域に格納されたデータを取得して、そのデータに基づいて検査データを導出する。ＩＶＩ装置１４は、検査タイミングにおいて導出した検査データと、予め記憶した判定データとが不一致の場合に、周辺機器１６が異常と判定する。【選択図】図１
2018073245.tif 000002
【特許請求の範囲】
【請求項１】
被検査装置のメモリの全領域に格納されたデータに基づく判定データを記憶する記憶部と、
所定の検査タイミングにおいて、前記被検査装置のメモリの全領域に格納されたデータを取得する取得部と、
前記取得部により取得されたデータに基づいて検査データを導出する導出部と、
前記導出部により導出された検査データと、前記記憶部に予め記憶された判定データとが不一致の場合に、前記被検査装置が異常と判定する判定部と、
を備えることを特徴とする検査装置。
【請求項２】
前記データは、前記被検査装置の動作を定めたプログラムのデータと、前記プログラムのデータが未格納の空き領域に全てが０または１で構成されたデータあるいは所定のパターンの繰り返しで構成されたデータとは異なるデータとが設定されたものであることを特徴とする請求項１に記載の検査装置。
【請求項３】
前記異なるデータは、乱数列であることを特徴とする請求項２に記載の検査装置。
【請求項４】
前記異なるデータは、圧縮済のデータであることを特徴とする請求項２に記載の検査装置。
【請求項５】
前記判定部は、前記取得部が前記被検査装置にデータの提供を要求してから、当該データが提供されるまでの時間が、要求したデータのサイズに応じた閾値を超過した場合、前記被検査装置が異常と判定することを特徴とする請求項１から４のいずれかに記載の検査装置。
【請求項６】
前記取得部は、前記被検査装置のメモリの一部領域に格納されたデータを取得することを複数回繰り返すことにより、当該メモリの全領域に格納されたデータを取得し、
前記取得部は、複数回のデータ取得のそれぞれで指定する読み出しアドレスをランダムに決定する請求項１から５のいずれかに記載の検査装置。
【請求項７】
前記取得部は、前記被検査装置のメモリの一部領域に格納されたデータを取得することを複数回繰り返すことにより、当該メモリの全領域に格納されたデータを取得し、
前記取得部は、複数回のデータ取得のそれぞれで指定する読み出しサイズをランダムに決定する請求項１から６のいずれかに記載の検査装置。
【請求項８】
検査装置と被検査装置とを備え、
前記被検査装置のメモリに格納されたデータは、前記被検査装置の動作を定めたプログラムのデータと、前記プログラムのデータが未格納の空き領域に全てが０または１で構成されたデータあるいは所定のパターンの繰り返しで構成されたデータとは異なるデータとが設定されたものであり、
前記被検査装置は、
前記メモリの全領域に格納されたデータに基づいて検査データを導出する導出部と、
前記導出部により導出された検査データを前記検査装置へ送信する送信部と、を含み、
前記検査装置は、
前記データに基づく判定データを記憶する記憶部と、
前記被検査装置から送信された検査データと、前記記憶部に予め記憶された判定データとが不一致の場合に、前記被検査装置が異常と判定する判定部と、を含むことを特徴とする検査システム。
【請求項９】
前記検査装置と前記被検査装置は、チャレンジ・レスポンス型の通信を実行し、
前記検査装置は、チャレンジを決定して、前記被検査装置へ送信する送信部をさらに含み、
前記被検査装置の送信部は、前記検査データと前記チャレンジに基づいてレスポンスデータを生成し、生成したレスポンスデータを検査装置へ送信し、
前記検査装置の判定部は、前記レスポンスデータと前記チャレンジに基づいて、前記被検査装置で導出された検査データを取得することを特徴とする請求項８に記載の検査システム。
【請求項１０】
メモリに格納されたデータの正常性が検査される被検査装置のメモリに格納されるデータを生成する生成部と、
前記生成部により生成されたデータを外部装置へ出力する出力部と、
を備え、
前記データは、前記被検査装置の動作を定めたプログラムのデータと、前記プログラムのデータが未設定の空き領域に全てが０または１で構成されたデータあるいは所定のパターンの繰り返しで構成されたデータとは異なるデータとが設定されたものであることを特徴とする情報処理装置。
【請求項１１】
予め記憶された判定データを用いて被検査装置の正常性を検査する検査装置が、
所定の検査タイミングにおいて、前記被検査装置のメモリの全領域に格納されたデータを取得し、
前記取得されたデータに基づいて検査データを導出し、
前記導出された検査データと、前記予め記憶された判定データとが不一致の場合に、前記被検査装置が異常と判定することを特徴とする検査方法。
【請求項１２】
予め記憶された判定データを用いて被検査装置の正常性を検査する検査装置に、
所定の検査タイミングにおいて、前記被検査装置のメモリの全領域に格納されたデータを取得し、
前記取得されたデータに基づいて検査データを導出し、
前記導出された検査データと、前記予め記憶された判定データとが不一致の場合に、前記被検査装置が異常と判定する、
ことを実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理技術に関し、特に、検査装置、検査システム、情報処理装置、検査方法およびコンピュータプログラムに関する。
【背景技術】
【０００２】
車両で実行されたプログラム更新の正当性を検証するプログラム更新システムが提案されている（例えば特許文献１参照）。このプログラム更新システムでは、ゲートウェイが、サーバから提供された更新データをＥＣＵ（Electronic Control Unit）へ送信する。ＥＣＵは、更新データに含まれる更新制御プログラムのダイジェスト値を算出し、そのダイジェスト値をゲートウェイへ送信する。ゲートウェイはダイジェスト値をサーバへ送信する。そして、このダイジェスト値に基づいて、サーバは、ＥＣＵの更新が正常に終了したか否かを判定する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−１０３１６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載の技術では、ＥＣＵに不正プログラムが存在する場合、ＥＣＵが正しく更新されなくても、その不正プログラムが、更新データに含まれる更新制御プログラムのダイジェスト値を算出し、そのダイジェスト値をゲートウェイへ送信することで、ＥＣＵの更新が正常に終了したとサーバが判定してしまう。すなわち、ＥＣＵが不正プログラムで動作していること（なりすまし）を、サーバなどＥＣＵの外部から正しく判定できないことがあった。
【０００５】
本願発明は上記課題に鑑みたもので、所定の装置における不正プログラムの有無を当該装置の外部から判定する精度（言い換えれば正確さ）を向上させることを主な目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のある態様の検査装置は、被検査装置のメモリの全領域に格納されたデータに基づく判定データを記憶する記憶部と、所定の検査タイミングにおいて、被検査装置のメモリの全領域に格納されたデータを取得する取得部と、取得部により取得されたデータに基づいて検査データを導出する導出部と、導出部により導出された検査データと、記憶部に予め記憶された判定データとが不一致の場合に、被検査装置が異常と判定する判定部と、を備える。
【０００７】
本発明の別の態様は、検査システムである。この検査システムは、検査装置と被検査装置とを備える。被検査装置のメモリに格納されたデータは、被検査装置の動作を定めたプログラムのデータと、プログラムのデータが未格納の空き領域に全てが０または１で構成されたデータあるいは所定のパターンの繰り返しで構成されたデータとは異なるデータとが設定されたものであり、被検査装置は、メモリの全領域に格納されたデータに基づいて検査データを導出する導出部と、導出部により導出された検査データを検査装置へ送信する送信部と、を含む。検査装置は、データに基づく判定データを記憶する記憶部と、被検査装置から送信された検査データと、記憶部に予め記憶された判定データとが不一致の場合に、被検査装置が異常と判定する判定部と、を含む。
【０００８】
本発明のさらに別の態様は、情報処理装置である。この装置は、メモリに格納されたデータの正常性が検査される被検査装置のメモリに格納されるデータを生成する生成部と、生成部により生成されたデータを外部装置へ出力する出力部と、を備える。データは、被検査装置の動作を定めたプログラムのデータと、プログラムのデータが未設定の空き領域に全てが０または１で構成されたデータあるいは所定のパターンの繰り返しで構成されたデータとは異なるデータとが設定されたものである。
【０００９】
本発明のさらに別の態様は、検査方法である。この方法は、予め記憶された判定データを用いて被検査装置の正常性を検査する検査装置が、所定の検査タイミングにおいて、被検査装置のメモリの全領域に格納されたデータを取得し、取得されたデータに基づいて検査データを導出し、導出された検査データと、予め記憶された判定データとが不一致の場合に、被検査装置が異常と判定する。
【００１０】
なお、以上の構成要素の任意の組合せ、本発明の表現を、コンピュータプログラム、コンピュータプログラムを記録した記録媒体、本装置を搭載した車両などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１１】
本発明によれば、所定の装置における不正プログラムの有無を当該装置の外部から判定する精度（言い換えれば正確さ）を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】第１実施例の検査システムの構成を示す図である。
【図２】図１の周辺機器のハードウェア構成を示す図である。
【図３】図１の周辺機器の機能構成を示すブロック図である。
【図４】図１のＩＶＩ装置のハードウェア構成を示す図である。
【図５】図１のＩＶＩ装置の機能構成を示すブロック図である。
【図６】ＩＶＩ装置の動作を示すフローチャートである。
【図７】図７（ａ）−（ｃ）は被検査装置のＲＯＭに格納されるデータを模式的に示す図である。
【図８】第２実施例の更新データ生成装置の機能構成を示すブロック図である。
【図９】更新データ生成装置の動作を示すフローチャートである。
【図１０】図１０（ａ）−（ｃ）は被検査装置のＲＯＭに格納されるデータの構成を模式的に示す図である。
【図１１】図１１（ａ）−（ｄ）は被検査装置のＲＯＭに格納されたデータの読み出し方法を模式的に示す図である。
【図１２】応答待ち時間制限を施したＩＶＩ装置の動作を示すフローチャートである。
【図１３】図１３（ａ）（ｂ）は第２変形例において周辺機器のＲＯＭに格納される更新データの構成を模式的に示す図である。
【図１４】チャレンジ・レスポンス型のデータ送受の構成を模式的に示す図である。
【発明を実施するための形態】
【００１３】
（第１実施例）
第１実施例の構成を詳細に説明する前に、第１実施例の概要を述べる。
車両には多くの電子機器が搭載され、それらの電子機器を制御する多くのＥＣＵが搭載されている。ＥＣＵの中には、セキュリティ能力が脆弱で、不正に改ざんされたプログラムを検出・動作させないためのセキュアブート機能または改ざん検出機能がないものもある。言い換えれば、自己正当性を保障できないＥＣＵが存在する。今後、車両における情報セキュリティの向上が一層求められる中、自己正当性を保障できないＥＣＵ（検査対象となるＥＣＵであり、以下「被検査装置」とも呼ぶ。）の正当性を、当該ＥＣＵの外部の装置（以下「検査装置」とも呼ぶ。）により確認する必要がある。なお、検査装置は、自己正当性が保障できる装置である。
【００１４】
既述したように、被検査装置自身が所定の規則にしたがって生成したダイジェスト値に基づいて被検査装置の正当性を判定する方式では、正当性が保障されたプログラムでダイジェスト値の正当性を確認しない限り、その判定結果が必ずしも正しいとは言えない。例えば、被検査装置に侵入した不正プログラムが、被検査装置が正常であることを示すダイジェスト値を生成またはあらかじめ記録して返信すれば、検査装置は被検査装置を正常と判定してしまうからである。そこで、第１実施例の検査装置は、被検査装置のメモリの全領域に格納されたデータ（言い換えればメモリに格納された全データ）を取得し、そのデータに基づいて被検査装置の正常性を判定する。
【００１５】
具体的には、第１実施例の検査装置は、被検査装置のメモリの全領域に本来格納されているべきデータに基づいて予め生成された期待値としての判定データを予め記憶しておく。検査装置は、検査タイミングにおいて、被検査装置のメモリの全領域に格納されたデータを取得し、取得データに基づいて新たな検査データを導出する。検査装置は、新たな検査データが予め記憶した期待値としての判定データと不一致であれば、被検査装置を異常と判定する。
【００１６】
実施例での判定データおよび検査データは、ハッシュ関数により生成されるハッシュ値とするが、これに限定されない。例えば、判定データおよび検査データは、ＭＡＣ（Message Authentication Code）関数により生成される暗号ＭＡＣ値でもよく、また、所定の生成多項式により生成されるＣＲＣ値でもよい。
【００１７】
図１は、第１実施例の検査システム１０の構成を示す。検査システム１０は、車両１２に搭載されたＩＶＩ（In-Vehicle Infotainment）装置１４と周辺機器１６を備える。ＩＶＩ装置１４と周辺機器１６は、車載ネットワーク１８を介して接続される。車載ネットワーク１８は、ＣＡＮ（Controller Area Network）、ＣＡＮ  ＦＤ（CAN with Flexible Data rate）、またはイーサネット（登録商標）であってもよい。
【００１８】
周辺機器１６は、自己正当性を保障できない上記の被検査装置である。周辺機器１６は、例えばメーター、ヘッドアップディスプレイ等であってもよい。ＩＶＩ装置１４は、周辺機器１６を検査する上記の検査装置であり、自己正当性を保障できる検査装置である。ＩＶＩ装置１４は、次世代車載情報通信装置とも言え、カーナビゲーションシステムとカーオーディオを含む比較的高度な情報処理を実行可能な装置である。ＩＶＩ装置１４は、少なくともハッシュ関数（ＳＨＡ−１等）またはＭＡＣ値（ＡＥＳ−ＣＭＡＣ等）の演算能力を有する。その一方、周辺機器１６の演算能力はＩＶＩ装置１４より低く、ハッシュ関数を演算する暗号ハードウェアを持たず、ソフトウェア演算では時間がかかり、通信応答性に支障をきたす。
【００１９】
検査システム１０は、ＰＣ等の情報処理装置である更新データ生成装置２０をさらに備える。更新データ生成装置２０は、周辺機器１６のメモリ（後述のＲＯＭ）に格納される、周辺機器１６の動作を定めたプログラムを含む更新データを生成する。更新データのサイズは、周辺機器１６のメモリのサイズ（実施例ではＲＯＭの記憶領域のサイズ）に設定される。
【００２０】
また、更新データ生成装置２０は、所定のハッシュ関数にしたがって更新データのハッシュ値（ハッシュ演算方式により決まるサイズの結果）を生成する。このハッシュ値は、判定データとも言え、ＩＶＩ装置１４のメモリに格納される。更新データおよび更新データサイズも同様に、ＩＶＩ装置１４のメモリに格納される。不図示のサーバを介してＩＶＩ装置１４へ提供されてもよい。また、更新データは、ＵＳＢメモリ等の所定の記録メディアを介してＩＶＩ装置１４へ導入されてもよい。更新データ、更新データのハッシュ値、および更新データサイズも、これらの手段によりＩＶＩ装置１４へ導入されてもよい。なお、更新データ、更新データのハッシュ値、および更新データサイズのうち少なくとも更新データは、ＩＶＩ装置１４を経由して、周辺機器１６へ書き込まれる。
【００２１】
図２は、図１の周辺機器１６のハードウェア構成を示す。周辺機器１６は、ＥＣＵ３０を備える。ＥＣＵ３０は、ＣＰＵ３２、ＲＡＭ３４、ＲＯＭ３６、通信ＩＦ３８を含む。ＲＯＭ３６は、図１の更新データが格納され、また、格納データの正常性がＩＶＩ装置１４により確認される。ＲＯＭ３６は、書き換え可能なＲＯＭであり、例えばＥＥＰＲＯＭまたはフラッシュメモリであってもよい。典型的には、ＲＯＭ３６のサイズは、数Ｍバイト〜１０Ｍバイト程度である。通信ＩＦ３８は、車載ネットワーク１８を介してＩＶＩ装置１４と接続される
【００２２】
図３は、図１の周辺機器１６の機能構成を示すブロック図である。周辺機器１６は、受信部４０、処理部４２、送信部４４を備える。本明細書のブロック図において示される各ブロックは、ハードウェア的には、コンピュータのＣＰＵ・メモリをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
【００２３】
例えば、図３の各ブロックに対応するモジュールを含むコンピュータプログラムが周辺機器１６のＲＯＭ３６に格納されてもよい。周辺機器１６のＣＰＵ３２は、コンピュータプログラムのバイナリデータをＲＯＭ３６からＲＡＭ３４に適宜読み出して実行することにより、各ブロックの機能を発揮してもよい。
【００２４】
受信部４０は、車載ネットワーク１８を介して、外部装置（例えばＩＶＩ装置１４）から送信されたコマンドデータを受信する。処理部４２は、受信部４０により受信されたコマンドデータに応じたデータ処理を実行する。送信部４４は、処理部４２によるデータ処理結果に関する応答データを、コマンドデータ送信元の外部装置へ送信する。
【００２５】
処理部４２は、ＲＯＭ更新部４６とＲＯＭ読出部４８を含む。ＲＯＭ更新部４６は、ＲＯＭ更新コマンドにしたがって、ＲＯＭ更新コマンドとともに受信された更新データをＲＯＭ３６へ書き込む。なお、ＲＯＭ更新部４６は、ＩＶＩ装置１４からＲＯＭ更新コマンドが入力された場合に、車載ネットワーク１８を介してＩＶＩ装置１４から更新データを読み出し、ＲＯＭ３６へ上書き保存してもよい。
【００２６】
ＲＯＭ読出部４８は、ＲＯＭ読み出しコマンドにしたがって、当該コマンドで指定されたＲＯＭのアドレスから、当該コマンドで指定されたサイズのデータを読み出す。送信部４４は、ＲＯＭ読出部４８により読み出されたＲＯＭのデータを、ＲＯＭ読み出しコマンドの送信元の装置（実施例ではＩＶＩ装置１４）へ送信する。
【００２７】
図４は、図１のＩＶＩ装置１４のハードウェア構成を示す。ＩＶＩ装置１４は、ＥＣＵ５０を備える。ＥＣＵ５０は、ＣＰＵ５２、ＲＡＭ５４、ＲＯＭ５６、通信ＩＦ５８を含む。ＲＡＭ５４のサイズは、周辺機器１６のＲＯＭ３６の全データが展開可能なように、周辺機器１６のＲＯＭ３６のサイズ以上（例えば５１２ＭＢ等）である。通信ＩＦ５８は、車載ネットワーク１８を介して周辺機器１６と接続される。
【００２８】
図５は、図１のＩＶＩ装置１４の機能構成を示すブロック図である。ＩＶＩ装置１４は、サイズ記憶部６０、ハッシュ値記憶部６２、ＲＯＭデータ記憶部６４、ＲＯＭデータ取得部７０、ハッシュ値導出部７２、状態判定部７４、判定結果出力部７６、自己正当性検証部７７、コマンド送信部７８、応答受信部７９を備える。
【００２９】
図５の各ブロックに対応するモジュールを含むコンピュータプログラムが、記録メディアに格納され、その記録メディアを介してＩＶＩ装置１４のＲＯＭ５６にインストールされてもよい。ＩＶＩ装置１４のＣＰＵ５２は、ＲＯＭ５６に格納されたコンピュータプログラムをＲＡＭ５４へ適宜読み出して実行することにより、各ブロックの機能を発揮してもよい。自己正当性検証部７７は、ＩＶＩ装置１４のプログラムの正当性を保障するための所定の処理を実行する。
【００３０】
サイズ記憶部６０は、周辺機器１６における検査対象のメモリであるＲＯＭ３６のサイズを示すデータを記憶する記憶領域である。ハッシュ値記憶部６２は、周辺機器１６のＲＯＭ３６に格納されるデータ（上記の更新データ）のハッシュ値を記憶する記憶領域である。既述したように、更新データは、周辺機器１６のＲＯＭ３６のサイズを有する。したがって、ハッシュ値記憶部６２は、周辺機器１６のＲＯＭ３６の全領域に格納されるデータのハッシュ値であり、周辺機器１６のＲＯＭ３６に不正プログラムや改ざん等がない場合のハッシュ値の期待値を記憶する。
【００３１】
ＲＯＭデータ記憶部６４は、周辺機器１６から取得されたＲＯＭ３６の格納データであるＲＯＭデータを記憶する記憶領域である。ＲＯＭデータは、周辺機器１６のＲＯＭ３６のサイズを有するデータであり、検査時点でＲＯＭ３６に実際に格納されているデータである。サイズ記憶部６０およびハッシュ値記憶部６２はＲＯＭ５６により実現され、ＲＯＭデータ記憶部６４はＲＡＭ５４により実現されてもよい。また、ＲＯＭデータ記憶部６４は、ＲＯＭデータ取得部７０に含まれる構成としてもよい。
【００３２】
サイズ記憶部６０は、所定のサーバまたは更新データ生成装置２０等の外部装置から、周辺機器１６のＲＯＭ３６のサイズを示すデータを取得して記憶する。
【００３３】
ハッシュ値記憶部６２は、所定のサーバまたは更新データ生成装置２０等の外部装置から、ＲＯＭ３６の更新データのハッシュ値（判定データとも言える）を取得して記憶する。ＩＶＩ装置１４に接続されたＵＳＢメモリ等の記録メディアからハッシュ値を読み出して記憶してもよい。
【００３４】
ＲＯＭデータ取得部７０は、所定の検査タイミングに達した場合に、被検査装置のメモリの全領域に格納されたデータを取得する。検査タイミングは、周辺機器１６のＲＯＭ３６に格納されるデータの更新直前または更新直後（いわゆるリプログラミングの直前または直後）でもよい。また、車両１２においてイグニッションがオフからオンに切り替えられたとき（典型的にはエンジンまたはモーターの起動時）でもよい。さらに、検査タイミングは、外部機器が周辺機器１６（ＥＣＵ３０）にアクセスするときでもよい。さらに、検査タイミングは、所定の日付または時刻になったときでもよく、１日１回、週に１回等の定期的でもよい。この場合、ＩＶＩ装置１４は通信や放送等で送信された正当性の保障された日時情報と同期した正しい時刻を持つ必要がある。自己正当性検証部７７は、日時の正当性を保障するための所定の処理を実行してもよい。さらに、検査タイミングは、所定の装置やユーザにより周辺機器１６の異常が検出された場合でもよい。
【００３５】
更新データ、ハッシュ値、および更新データサイズは、更新データ生成装置２０で署名を付与して、ＩＶＩ装置１４に導入する際に署名検証を実行し、通信間での改ざん検出を実施してもよい。
【００３６】
コマンド送信部７８は、各種のデータ処理を指示するコマンドを周辺機器１６へ送信する。応答受信部７９は、コマンドに対する周辺機器１６の応答として、コマンドに応じたデータ処理の結果を周辺機器１６から受信する。ＲＯＭデータ取得部７０は、コマンド送信部７８を介して、ＲＯＭ読み出しコマンドを周辺機器１６へ送信する。また、ＲＯＭデータ取得部７０は、応答受信部７９を介して、ＲＯＭ読み出しコマンドに対する周辺機器１６の応答であり、周辺機器１６のＲＯＭ３６に格納されたデータを取得する。
【００３７】
実施例のＲＯＭデータ取得部７０は、周辺機器１６のＲＯＭ３６の全領域に格納されたデータをＲＯＭデータとして取得する。ＲＯＭデータ取得部７０は、取得したＲＯＭデータをＲＯＭデータ記憶部６４へ格納する。なお、ＲＯＭデータ取得部７０は、ＲＯＭ３６のメモリダンプを周辺機器１６に要求し、ＲＯＭ３６のメモリダンプデータを周辺機器１６から取得してもよい。この場合、ＲＯＭデータ取得部７０は、メモリダンプデータに基づいてＲＯＭデータ（ＲＯＭ３６のイメージ）をローカルのＲＡＭ５４に展開してもよい。また、ＲＯＭデータ取得部７０は、周辺機器１６のＲＯＭ３６の一部領域に格納されたデータを取得することを複数回繰り返すことにより、ＲＯＭ３６の全領域に格納されたデータを取得してもよい。
【００３８】
ハッシュ値導出部７２は、ＲＯＭデータ取得部７０によるＲＯＭデータの取得が完了した場合に、ＲＯＭデータ記憶部６４に記憶されたＲＯＭデータのハッシュ値（検査データとも言える）を導出する。例えば、ハッシュ値導出部７２は、ＳＨＡ−１等の所定のハッシュ関数にＲＯＭデータを入力することにより、当該ハッシュ関数から出力されたハッシュ値を導出してもよい。なお、ハッシュ値導出部７２がＲＯＭデータに対して使用するハッシュ関数は、更新データ生成装置２０が更新データに対して使用するハッシュ関数と同じである。
【００３９】
状態判定部７４は、ハッシュ値導出部７２により導出されたハッシュ値と、予めハッシュ値記憶部６２に記憶されたハッシュ値とを照合する。状態判定部７４は、両者が一致すれば周辺機器１６（もしくはＲＯＭ３６の格納データ）が正常と判定し、両者が不一致であれば周辺機器１６（もしくはＲＯＭ３６の格納データ）が異常と判定する。
【００４０】
判定結果出力部７６は、状態判定部７４による判定結果に基づく所定の後処理を実行する。実施例では、判定結果出力部７６は、判定結果を示すデータを所定の外部装置へ出力する。例えば、判定結果出力部７６は、周辺機器１６が正常であることまたは異常であることを示すデータを所定のサーバへ送信してもよい。また、判定結果出力部７６は、状態判定部７４による判定結果を示すデータを所定の記憶部へ保存してもよい。また、判定結果出力部７６は、判定結果が周辺機器１６の異常を示す場合にのみ、アラートの出力等、所定の後処理を実行してもよい。
【００４１】
以上の構成による第１実施例のＩＶＩ装置１４の動作を説明する。
図６は、ＩＶＩ装置１４の動作を示すフローチャートである。不図示だが、サイズ記憶部６０には、周辺機器１６のＲＯＭ３６のサイズを示すデータが予め格納される。また、ハッシュ値記憶部６２には、周辺機器１６のＲＯＭ３６に格納された更新データのハッシュ値（すなわち周辺機器１６が正常な場合のハッシュ値の期待値）が予め格納される。所定の検査タイミングに至るまで待機し（Ｓ１０のＮ）、所定の検査タイミングに至った場合（Ｓ１０のＹ）、ＲＯＭデータ取得部７０は、ＲＡＭ５４に、周辺機器１６のＲＯＭ３６のサイズ分の領域をＲＯＭデータ記憶部６４として確保する（Ｓ１２）。
【００４２】
ＲＯＭデータ取得部７０は、周辺機器１６のＲＯＭ３６におけるデータの読み出しアドレスと、読み出しサイズを決定する（Ｓ１４、Ｓ１６）。ＲＯＭデータ取得部７０は、Ｓ１４で決定したアドレスから、Ｓ１６で決定したサイズのデータを読み出すように指示するＲＯＭ読み出しコマンドを周辺機器１６へ送信する（Ｓ１８）。ＲＯＭデータ取得部７０は、ＲＯＭ読み出しコマンドへの応答として、周辺機器１６からＲＯＭ３６に格納されたデータを取得し、ＲＯＭデータ記憶部６４へ格納する（Ｓ２０）。ＲＯＭ３６に格納されたデータの一部が未取得であれば（Ｓ２２のＮ）、Ｓ１４に戻り、未取得のデータを取得する。
【００４３】
ＲＯＭ３６の全領域に格納されたデータの取得が完了した場合（Ｓ２２のＹ）、ハッシュ値導出部７２は、ＲＯＭデータ記憶部６４に格納されたＲＯＭデータを所定のハッシュ関数へ入力し、ＲＯＭデータのハッシュ値を取得する（Ｓ２４）。状態判定部７４は、Ｓ２４で取得されたハッシュ値と、ハッシュ値記憶部６２に予め格納されたハッシュ値とを比較する。状態判定部７４は、両者が一致すれば（Ｓ２６のＹ）、周辺機器１６を正常と判定し（Ｓ２８）、両者が不一致であれば（Ｓ２６のＮ）、周辺機器１６を異常と判定する（Ｓ３０）。判定結果出力部７６は、判定結果に基づく後処理を実行する（Ｓ３２）。
【００４４】
第１実施例のＩＶＩ装置１４によると、周辺機器１６のＲＯＭ３６の全領域のデータに基づいて周辺機器１６の正常性を判定する。周辺機器１６のＲＯＭ３６内に不正なプログラムが存在すれば、取得した全領域のデータに基づくハッシュ値がその期待値と不一致になるため、ＩＶＩ装置１４は周辺機器１６が異常と判定できる。また、ＲＯＭ３６内の不正プログラムが、正常なＲＯＭデータを生成し、返信するための作業領域の余地を無くし、当該不正プログラムによるなりすましを防止しやすくなる。
【００４５】
（第２実施例）
第２実施例では、周辺機器１６における不正プログラムの有無をＩＶＩ装置１４が判定する精度（言い換えれば正確さ、または完全性）を一層向上させる技術を示す。
【００４６】
図７（ａ）−（ｃ）は、被検査装置のＲＯＭに格納されるデータを模式的に示す。図７（ａ）は、ＲＯＭに格納される従来のデータ構成を示している。ＲＯＭの記憶領域は、被検査装置の動作を定めたプログラムが格納された領域であるプログラム領域８０と、プログラムが未格納の領域（言い換えれば未使用の領域）である空き領域８２に分かれる。空き領域８２には、通常、空き領域を示す所定値が設定される。例えば、空き領域８２に、オール０のビット列が設定されることがあり、また、オール１のビット列が設定されることもある。
【００４７】
図７（ｂ）は、被検査装置のＲＯＭに攻撃プログラム（言い換えれば不正プログラム）が存在する例を示している。攻撃者は、空き領域８２がオール０のビット列であることを知っていることとする。攻撃者は、攻撃プログラム１のアドレスのデータを空き領域８２へ退避しつつ、攻撃プログラム１をプログラム領域８０に格納し、さらに攻撃プログラム２を空き領域８２に格納する。攻撃プログラム１の格納領域（プログラム領域８０）のメモリダンプが要求された場合、攻撃プログラム１は退避データを返す。また、空き領域８２のメモリダンプが要求された場合、攻撃プログラム１は、空き領域８２に相当するオール０ビット列のデータを、空き領域８２のデータになりすまして返す。その結果、検査装置は、被検査装置のＲＯＭ内に攻撃プログラムが存在することを検出することが困難になってしまう。
【００４８】
図７（ｃ）は、第２実施例においてＲＯＭに格納されるデータ構成を示している。第２実施例では、被検査装置のＲＯＭに当初格納するオリジナルデータ（すなわち更新データ）の構成が１つの特徴になる。具体的には、オリジナルデータにおけるプログラム領域８０以外の空き領域８２に、空き領域に対して通常設定されるデータとは異なるデータを設定する。言い換えれば、空き領域８２に、空き領域を示す規則的なデータとは異なるデータを設定する。すなわち、空き領域８２に、全てが０または１で構成されたデータあるいは所定のパターンの繰り返しで構成されたデータとは異なるデータを設定する。第２実施例では、空き領域８２に、並びに規則性がないデータであり、および／または、アルゴリズム化が困難なデータである乱数列を設定する。
【００４９】
第２実施例における検査システム１０、ＩＶＩ装置１４、周辺機器１６の構成は、第１実施例と同様である。以下、第１実施例と異なる構成として、更新データ生成装置２０の構成を詳細に説明する。
【００５０】
図８は、第２実施例の更新データ生成装置２０の機能構成を示すブロック図である。更新データ生成装置２０は、サイズ記憶部１０６、プログラム記憶部１０８、乱数生成部１１４、ＲＯＭバイナリ生成部１１６、更新データ生成部１１８、ハッシュ値導出部１２０を備える。
【００５１】
図８の各ブロックに対応するモジュールを含むコンピュータプログラムが、記録メディアに格納され、その記録メディアを介して更新データ生成装置２０のストレージにインストールされてもよい。更新データ生成装置２０のＣＰＵは、ストレージに格納されたコンピュータプログラムをメインメモリへ適宜読み出して実行することにより、各ブロックの機能を発揮してもよい。図８のサイズ記憶部１０６およびプログラム記憶部１０８は、更新データ生成装置２０のストレージやメモリがデータを記憶することで実現されてもよい。
【００５２】
サイズ記憶部１０６は、ＩＶＩ装置１４のサイズ記憶部６０に対応し、周辺機器１６における検査対象のメモリであるＲＯＭ３６のサイズを示すデータを記憶する。プログラム記憶部１０８は、周辺機器１６の動作を定めたプログラムであり、周辺機器１６に実行させるべき１つ以上のプログラムのデータを記憶する。実施例では、周辺機器１６で実行可能なコンパイル済のバイナリコードを記憶するが、変形例としてソースコードを記憶し、後述のＲＯＭバイナリ生成部１１６等が適宜周辺機器１６で実行可能なバイナリコードへコンパイルしてもよい。
【００５３】
なお、サイズ記憶部１０６に記憶されるサイズのデータと、プログラム記憶部１０８に記憶されるプログラムのデータは、周辺機器１６のプログラム作成者等が、ハードウェア仕様から、それらのデータを更新データ生成装置２０へ登録してもよい。
【００５４】
乱数生成部１１４は乱数を生成する。ここでいう乱数は、数学的な意味での真正乱数でなくてもよい。例えば、乱数シード値を適切に設定し、乱数の再現性がないようにした、ハードウェア乱数生成器を利用したハードウェア乱数や、乱数生成アルゴリズムを利用したソフトウェア乱数などの疑似乱数でもよい。
【００５５】
ＲＯＭバイナリ生成部１１６は、プログラム記憶部１０８に記憶された１つ以上のプログラムをまとめたデータであるＲＯＭバイナリを生成する。ＲＯＭバイナリは、１つ以上のプログラムの実行順序を定めたデータを含んでもよく、周辺機器１６のＲＯＭ３６における所定形式の管理データを含んでもよい。
【００５６】
更新データ生成部１１８は、周辺機器１６のＲＯＭ３６のサイズを有するデータであり、ＲＯＭ３６に格納されるデータである更新データを生成する。図７（ｃ）で示したように、更新データ生成部１１８は、ＲＯＭバイナリ生成部１１６により生成されたＲＯＭバイナリを更新データの一部に設定する。また、更新データ生成部１１８は、更新データにおけるＲＯＭバイナリが未設定の空き領域８２に、乱数生成部１１４により生成された乱数列を設定する。
【００５７】
ハッシュ値導出部１２０は、更新データ生成部１１８により生成された更新データのハッシュ値を取得する。例えば、ハッシュ値導出部１２０は、ＳＨＡ−１等の所定のハッシュ関数に更新データを入力することにより、当該ハッシュ関数から出力されたハッシュ値を導出することで取得してもよい。
【００５８】
更新データ生成部１１８は、生成した更新データと更新データサイズ情報とを所定の外部装置へ出力する。例えば、更新データ生成部１１８は、更新データを含むＲＯＭ更新コマンドを周辺機器１６へ送信し、周辺機器１６のＲＯＭ３６に更新データを記憶させてもよい。また、更新データ生成部１１８は、更新データと更新データサイズ情報をＩＶＩ装置１４へ送信し、ＩＶＩ装置１４から周辺機器１６のＲＯＭ３６に更新データを登録させてもよい。また、更新データ生成部１１８は、更新データを周辺機器１６へ提供する一方、更新データサイズ情報をＩＶＩ装置１４へ提供する所定のサーバに対して更新データおよび更新データサイズ情報を登録してもよい。また、更新データ生成部１１８は、ユーザの指示に応じて、ＵＳＢメモリ等の所定の記録メディアへ更新データおよび更新データサイズ情報を出力してもよい。
【００５９】
ハッシュ値導出部１２０は、導出したハッシュ値を所定の外部装置へ出力する。例えば、ハッシュ値導出部１２０は、ハッシュ値をＩＶＩ装置１４へ送信し、そのＲＯＭ５６に記憶させてもよい。また、ハッシュ値導出部１２０は、ハッシュ値をＩＶＩ装置１４へ提供する所定のサーバに対してハッシュ値を登録してもよい。また、ハッシュ値導出部１２０は、ユーザの指示に応じて、ＵＳＢメモリ等の所定の記録メディアへハッシュ値を出力してもよい。既述したように、更新データのハッシュ値は、ＩＶＩ装置１４のハッシュ値記憶部６２に格納されて、周辺機器１６の正常性判定時に参照される。
【００６０】
以上の構成による更新データ生成装置２０の動作を説明する。
図９は、更新データ生成装置２０の動作を示すフローチャートである。不図示だが、サイズ記憶部１０６には、周辺機器１６のＲＯＭ３６のサイズを示すデータが予め格納される。また、プログラム記憶部１０８には、周辺機器１６の動作を定めたプログラムであり、更新データに含めるべきプログラムが予め格納される。ユーザから更新データの生成指示が入力された場合等、更新データを生成すべきタイミングにおいて、更新データ生成部１１８は、周辺機器１６のＲＯＭ３６のサイズ分の記憶領域（ここでは「更新データ領域」と呼ぶ。）をメモリ（ＲＡＭ等）に確保する（Ｓ４２）。
【００６１】
乱数生成部１１４は、乱数を生成し、更新データ生成部１１８は、更新データ領域の全領域に、乱数生成部１１４により生成された乱数列を設定する（Ｓ４４）。ＲＯＭバイナリ生成部１１６は、プログラム記憶部１０８に保持されたプログラムを含むＲＯＭバイナリを生成する（Ｓ４６）。更新データ生成部１１８は、乱数列が設定された更新データ領域の少なくとも一部領域にＲＯＭバイナリを上書き保存することにより更新データを生成する（Ｓ４８）。これにより、図７（ｃ）に示す構成の更新データが生成される。更新データ生成部１１８は、更新データを所定の外部装置へ送信する（Ｓ５０）。更新データ生成装置２０で生成された更新データは、最終的には周辺機器１６のＲＯＭ３６に格納される。
【００６２】
ハッシュ値導出部１２０は、更新データのハッシュ値を取得する（Ｓ５２）。ハッシュ値導出部１２０は、更新データのハッシュ値を所定の外部装置へ送信する（Ｓ５４）。更新データ生成装置２０で生成されたハッシュ値は、最終的にはＩＶＩ装置１４のハッシュ値記憶部６２に格納される。
【００６３】
第２実施例では、検査対象となる周辺機器１６のＲＯＭ３６において、その空き領域に乱数列が設定される。これにより、ＲＯＭ３６内に存在する不正プログラムが、空き領域のメモリダンプが要求された場合に、単純に０のビット列を返すことで正常になりすますことができなくなる。また、乱数列はアルゴリズム化が困難であるため、乱数列より小さいサイズの不正プログラムを作成することを困難にできる。さらにまた、乱数列はエントロピーが高く、一般的にデータ圧縮比（言い換えれば圧縮効率）が低い。そのため、ＲＯＭ３６の空き領域を圧縮して空いた領域に、プログラム領域８０の元データ、または、不正プログラムを配置することを困難にすることができる。
【００６４】
第２実施例では、周辺機器１６のＲＯＭ３６の空き領域に乱数列を設定したが、空き領域に設定するデータは乱数列に制限されない。既述したように、空き領域に設定するデータは、全てが０または１で構成されたデータあるいは所定のパターンの繰り返しで構成されたデータとは異なるデータであればよい。また、空き領域に設定するデータは、アルゴリズム化が困難で、および／または、エントロピーが高いデータがより好ましい。このようなデータの例として、圧縮済みデータを、周辺機器１６のＲＯＭ３６の空き領域に設定してもよい。言い換えれば、更新データ生成装置２０は、更新データにおけるプログラムデータを含まない空き領域に、乱数列に代えて圧縮済みデータのビット列を設定してもよい。なお、圧縮済データは、例えば、所定の画像に関するＪＰＥＧデータでもよく、更新データのプログラム領域８０に設定されるデータ（プログラムデータ）を圧縮したデータでもよい。この変形例においても第２実施例と同様の効果を奏する。
【００６５】
（第３実施例）
第３実施例では、周辺機器１６における不正プログラムの有無をＩＶＩ装置１４が判定する精度（言い換えれば正確さ、または完全性）をより一層向上させる技術を示す。
【００６６】
図１０（ａ）−（ｃ）は、被検査装置のＲＯＭに格納されるデータの構成を模式的に示す。被検査装置のＲＯＭに格納されたＲＯＭバイナリは、一般的に最大６０％のサイズまで圧縮することができる。図１０（ａ）は圧縮前の状態を示している。図１０（ｂ）は圧縮後の状態を示し、ＲＯＭバイナリ（プログラム領域８０のデータ）を圧縮して空いた領域を斜線による網掛けで示している。図１０（ｃ）で示すように、攻撃者は、ＲＯＭバイナリを圧縮して空いた領域に攻撃プログラム１を仕掛ける可能性がある。攻撃プログラム１は、プログラム領域８０に対するメモリダンプ要求を受信した場合、ＲＯＭバイナリの圧縮データを伸張し、伸張後のＲＯＭバイナリを返す。その結果、検査装置は、被検査装置のＲＯＭ内に攻撃プログラム１が存在することを検出することが困難になってしまう。
【００６７】
そこで、第３実施例の検査装置は、被検査装置からの応答を待つ時間を設けるあるいは短くして制限する。すなわち、上述したように圧縮データを伸張することにより生じる応答の遅延を許容しない。さらに、第３実施例の検査装置は、被検査装置のＲＯＭに格納されたデータの読み出しアドレスと読み出しサイズの少なくとも一方をランダムに決定する。
【００６８】
図１１（ａ）−（ｄ）は、被検査装置のＲＯＭ（実施例では周辺機器１６のＲＯＭ３６）に格納されたデータの読み出し方法を模式的に示す。図中の１ｓｔ〜５ｔｈは、データ読み出しの順番を示している。
【００６９】
図１１（ａ）は、第１の読み出し方法であるシーケンシャル固定長読み出しを模式的に示している。シーケンシャル固定長読み出しでは、ＲＯＭ３６の先頭アドレスから、固定サイズのデータを順次読み出していく。例えば、第１実施例および第２実施例では、シーケンシャル固定長読み出しが適用されてもよい。
【００７０】
図１１（ｂ）は、第２の読み出し方法であるランダムサイズ読み出しを模式的に示している。ランダムサイズ読み出しでは、ＲＯＭ３６の先頭アドレスから、ランダムに決定したサイズのデータを順次読み出していく。例えば、読み出しの都度、動的に乱数を生成し、生成した乱数に基づいて読み出しサイズを決定してもよい。
【００７１】
図１１（ｃ）は、第３の読み出し方法であるランダムアドレス固定長読み出しを模式的に示している。ランダムアドレス固定長読み出しでは、ランダムに決定したＲＯＭ３６のアドレスから、固定サイズのデータを読み出していく。
【００７２】
図１１（ｄ）は、第４の読み出し方法であるランダムアドレス・ランダムサイズ読み出しを模式的に示している。ランダムアドレス・ランダムサイズ読み出しでは、ランダムに決定したＲＯＭ３６のアドレスから、ランダムに決定したサイズのデータを読み出していく。第３実施例では、ランダムアドレス・ランダムサイズ読み出しを適用するが、変形例として、ランダムサイズ読み出し、または、ランダムアドレス固定長読み出しを適用してもよい。
【００７３】
なお、ランダムアドレス固定長読み出しと、ランダムアドレス・ランダムサイズ読み出しでは、読み出し領域の重複を許容してもよく、重複を排除してもよい。読み出し領域の重複を許容する場合、ランダムアドレス固定長読み出しでは、図１１（ｃ）で示すように、２回目の読み出しの領域と５回目の読み出しの領域が重複してもよい。また、ランダムアドレス・ランダムサイズ読み出しでは、図１１（ｄ）で示すように、３回目の読み出しの領域（斜線による網掛け領域）の一部と、５回目の読み出しの領域（縦線による網掛け領域）の一部が重複してもよい。
【００７４】
第３実施例のＩＶＩ装置１４の機能ブロックは、第１実施例（図５）と同じである。以下、第３実施例のＩＶＩ装置１４の構成について、第１実施例または第２実施例で説明済みの内容は適宜省略し、上記実施例と異なる点を主に説明する。
【００７５】
ＲＯＭデータ取得部７０は、周辺機器１６のＲＯＭ３６の一部領域に格納されたデータを取得する処理を複数回繰り返すことにより、ＲＯＭ３６の全領域に格納されたデータであるＲＯＭデータを取得する。ＲＯＭデータ取得部７０は、複数回のデータ取得のそれぞれで指定する読み出しアドレスをランダムに決定し、かつ、複数回のデータ取得のそれぞれで指定する読み出しアドレスもランダムに決定する。例えば、ＲＯＭデータ取得部７０は、更新データ生成装置２０の乱数生成部１１４に対応する乱数生成部を含み、乱数生成部により生成された乱数値に基づいて、読み出しアドレスと読み出しサイズの両方を、規則性がない値に決定してもよい。
【００７６】
状態判定部７４は、ＲＯＭデータ取得部７０がＲＯＭ読み出しコマンドを周辺機器１６へ送信してから、周辺機器１６のＲＯＭ３６に格納されたデータが提供されるまでの時間である応答時間を監視する。ＲＯＭ読み出しコマンドに対する応答時間が、当該ＲＯＭ読み出しコマンドに設定された読み出しサイズに応じた閾値（以下「待ち時間閾値」とも呼ぶ。）を超過した場合、状態判定部７４は、周辺機器１６が異常と判定する。
【００７７】
実施例の状態判定部７４は、読み出しサイズと、ＩＶＩ装置１４〜周辺機器１６間の通信速度に基づいて待ち時間閾値を決定する。例えば、読み出しサイズが１００Ｋバイトで、車載ネットワーク１８の通信速度が５００Ｋｂｐｓ（ＣＡＮ）の場合、読み出しサイズ／通信速度の１．６秒を待ち時間閾値として決定してもよい。
【００７８】
以上の構成による第３実施例のＩＶＩ装置１４の動作を説明する。
図１２は、図６に対応し、ＩＶＩ装置１４の動作を示すフローチャートである。同図のＳ６０、Ｓ６２は、図６のＳ１０、Ｓ１２と同じであるため説明を省略する。ＲＯＭデータ取得部７０は、第１の乱数値に基づいて読み出しアドレスをランダムに決定し（Ｓ６４）、別途取得した第２の乱数値に基づいて読み出しサイズをランダムに決定し（Ｓ６６）、読み出しサイズと通信速度に応じて待ち時間閾値を決定する（Ｓ６８）。ＲＯＭデータ取得部７０は、読み出しアドレスと読み出しサイズを指定したＲＯＭ読み出しコマンドを周辺機器１６へ送信する（Ｓ７０）。
【００７９】
ＲＯＭ読み出しコマンドを送信後、周辺機器１６からＲＯＭデータを受信するまでの応答時間が待ち時間閾値を超過した場合（Ｓ７２のＹ）、状態判定部７４は、周辺機器が異常と判定する（Ｓ８４）。複数回のデータ取得の途中で応答時間が待ち時間閾値を超過した場合、以降のデータ取得をスキップしてもよい。周辺機器１６の応答時間が待ち時間閾値以下であれば（Ｓ７２のＮ）、Ｓ７４へ進む。Ｓ７４〜Ｓ８６の処理は、図６のＳ２０〜Ｓ３２の処理と同じであるため説明を省略する。
【００８０】
第３実施例のＩＶＩ装置１４によると、図１０（ａ）（ｂ）（ｃ）に関連して説明したように、圧縮したＲＯＭバイナリをメモリダンプ時に伸張して返すような攻撃プログラムが周辺機器１６のＲＯＭ３６に存在する場合も、周辺機器１６の異常を検出しやすくなる。具体的には、圧縮データの伸張にはある程度の時間を要するところ、読み出しサイズに応じた待ち時間閾値を設けることで、周辺機器１６の異常（例えばＲＯＭ３６に攻撃プログラムが存在する可能性が高いこと）を待ち時間閾値の超過により検出することができる。
【００８１】
また、第３実施例のＩＶＩ装置１４は、周辺機器１６のＲＯＭ３６の格納データを、ランダムな位置からランダムなサイズ分読み出す。ＲＯＭ３６内の攻撃プログラムが正規のＲＯＭバイナリを圧縮した場合、ランダムな位置からランダムなサイズのデータを読み出すためのメモリ確保が難しいため、ＲＯＭバイナリを伸張して正規のデータを返信することを困難にできる。また、圧縮データを伸張しつつ、ランダムなアドレスからランダムなサイズのデータを読み出す処理は一般的に時間を要するため、待ち時間閾値の超過により周辺機器１６の異常を検出しやすくなる。
【００８２】
以上、本発明を第１〜第３実施例をもとに説明した。これらの実施例は例示であり、それらの各構成要素あるいは各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００８３】
第１変形例を説明する。上記第３実施例では、周辺機器１６のＲＯＭデータを読み出す方式として、ランダムアドレス・ランダムサイズ読み出しを適用した。変形例として、図１１（ｂ）に記載のランダムサイズ読み出しを適用してもよく、図１１（ｃ）に記載のランダムアドレス固定長読み出しを適用してもよい。いずれの方式を適用した場合も、周辺機器１６のＲＯＭ３６に存在する攻撃プログラムが、ＲＯＭバイナリの圧縮データを伸張しつつ、ランダムな指定アドレスまたはランダムな指定サイズに応じた正しいデータを返信することを困難にできる。また、制限時間内に正しいデータを返信することを一層困難にできる。
【００８４】
第２変形例を説明する。図１３（ａ）（ｂ）は、第２変形例において周辺機器１６のＲＯＭ３６に格納される更新データの構成を模式的に示す。図１３（ａ）は、複数の更新データがＲＯＭ３６に格納される例を示している。更新データ生成装置２０は、ＲＯＭバイナリと乱数列との組み合わせ（すなわち更新データ）単位にデータサイズとハッシュ値を導出し、ＩＶＩ装置１４は、更新データ単位に導出されたデータサイズとハッシュ値を記憶してもよい。ＩＶＩ装置１４は、複数の更新データのそれぞれについて、更新データのサイズ分のデータを周辺機器１６から取得し、取得データのハッシュ値と更新データのハッシュ値を比較してもよい。
【００８５】
図１３（ｂ）は、１つの更新データに複数のＲＯＭバイナリが含まれる例を示している。更新データ生成装置２０は、複数のＲＯＭバイナリを含む更新データのデータサイズとハッシュ値を導出し、ＩＶＩ装置１４は、上記更新データのデータサイズとハッシュ値を記憶してもよい。ＩＶＩ装置１４は、上記更新データのサイズ分のデータを周辺機器１６から取得し、取得データのハッシュ値と更新データのハッシュ値を比較してもよい。
【００８６】
第３変形例を説明する。ＩＶＩ装置１４と周辺機器１６は、チャレンジ・レスポンス型でデータを送受してもよい。図１４は、チャレンジ・レスポンス型のデータ送受の構成を模式的に示す。ＩＶＩ装置１４と周辺機器１６は、共通鍵である鍵Ｋを記憶する。また、ＩＶＩ装置１４は、周辺機器１６のＲＯＭデータの期待値であるハッシュ値Ｈを記憶する。また、周辺機器１６のＲＯＭ３６の全領域には、第２実施例と同様に、ＲＯＭバイナリと乱数列とを含む更新データが当初格納される。
【００８７】
本変形例のＩＶＩ装置１４は、チャレンジ送信部と状態判定部を備える。チャレンジ送信部は実施例のＲＯＭデータ取得部７０に対応し、状態判定部は実施例の状態判定部７４に対応する。また、本変形例の周辺機器１６は、ハッシュ値導出部とレスポンス送信部を備える。ハッシュ値導出部は、実施例のハッシュ値導出部７２に対応する。
【００８８】
ＩＶＩ装置１４のチャレンジ送信部は、検査タイミングにおいて所定の乱数発生器を用いて乱数値を動的に決定し、その乱数値に基づくチャレンジＣを周辺機器１６へ送信する。チャレンジＣは乱数値そのものでもよい。周辺機器１６のハッシュ値導出部は、ＲＯＭデータ（すなわちＲＯＭ３６の全領域に格納されたＲＯＭバイナリと乱数列）を所定のハッシュ関数に入力し、ＲＯＭデータのハッシュ値を取得する。周辺機器１６のレスポンス送信部は、所定の規則にてチャレンジとハッシュ値とを連結したデータを鍵Ｋに基づいて暗号化し、所定サイズの暗号化データをレスポンスデータとしてＩＶＩ装置１４へ送信する。
【００８９】
ＩＶＩ装置１４の状態判定部は、鍵Ｋに基づいてレスポンスデータを復号し、復号結果として、チャレンジとハッシュ値とが連結したデータを取得する。チャレンジのデータサイズは既知であるため、状態判定部は、チャレンジとハッシュ値との連結規則にしたがって、復号結果のデータからチャレンジとハッシュ値を抽出する。例えば、復号結果の先頭から所定バイト分をチャレンジとして抽出し、残りの部分をハッシュ値として抽出してもよい。
【００９０】
状態判定部は、（１）チャレンジの送信からレスポンスデータを受信するまでの応答時間が、レスポンスデータのサイズに基づく待ち時間閾値以内であり、かつ、（２）レスポンスデータから抽出したチャレンジが、周辺機器１６へ送信したチャレンジと一致し、かつ、（３）レスポンスデータから抽出したハッシュ値が、予め記憶した期待値としてのハッシュ値と一致する場合に周辺機器１６が正常と判定する。その一方、状態判定部は、上記（１）〜（３）の少なくとも１つが満たされない場合、周辺機器１６が異常と判定する。
【００９１】
第３変形例の態様によると、周辺機器１６のＲＯＭ３６に存在する攻撃プログラムが、ＲＯＭ３６の格納データが正常であるように偽装することを困難にできるとともに、周辺機器１６からＩＶＩ装置１４へ提供されるデータ量を低減することができる。また、周辺機器１６で生成されたハッシュ値が直接通信網を流れないためセキュリティを一層高めることができる。また、チャレンジは検査の都度決定されるため、攻撃プログラムが予めレスポンスデータを用意しておくことができず、攻撃プログラムがＲＯＭ３６の格納データが正常であるように偽装することを一層困難にできる。
【００９２】
上記第３変形例では、チャレンジ・レスポンス型でデータを送受したが、周辺機器１６はＩＶＩ装置１４へＲＯＭデータ（第２実施例のＲＯＭバイナリ＋乱数列）のハッシュ値を送信する構成であってもよい。この構成においても、周辺機器１６のＲＯＭ３６に存在する攻撃プログラムが、ＲＯＭ３６の格納データが正常であるように偽装することを困難にできる。また、上記第３実施例では言及していないが、周辺機器１６のＲＯＭ３６には、図１３（ａ）で示したように、複数の更新データが格納されてよい。ＩＶＩ装置１４のチャレンジ送信部は、ＲＯＭ３６に格納された複数の更新データのアドレスをランダムな順序で指定して複数の更新データを順次取得してもよい。ＩＶＩ装置１４の状態判定部は、更新データごとにハッシュ値の比較を実行してもよい。
【００９３】
第４変形例を説明する。ＩＶＩ装置１４のＲＯＭデータ取得部７０は、車両１２のイグニッションがオフからオンへ切り替えられるごとに、周辺機器１６のＲＯＭ３６の一部領域に格納されたデータを取得してもよい。言い換えれば、イグニッションがオンにされる毎に、周辺機器１６のＲＯＭデータの一部を取得していき、所定回数イグニッションがオンにされた場合に、ＲＯＭ３６の全領域のデータ取得を完了してもよい。例えば、図１１（ａ）−（ｄ）のいずれのデータ読み出し方式を適用する場合でも、１回目のイグニッションのオン時に１ｓｔ領域のデータを取得し、２回目のイグニッションのオン時に２ｎｄ領域のデータを取得してもよい。
【００９４】
この態様によると、イグニッションがオンにされたことを契機とする各回の検査処理の時間を短縮でき、検査処理の実行により他の処理の実行が妨げられ、または遅延することを抑制できる。なお、周辺機器１６のＲＯＭ３６内に存在しうる不正プログラムが、提供が要求されるデータを予測できないように、読み出しアドレスと読み出しサイズの少なくとも一方をランダムに決定すること（第３実施例の構成）が好ましい。
【００９５】
第５変形例を説明する。ＩＶＩ装置１４は、車両に搭載された複数の被検査装置（周辺機器１６、ＥＣＵ３０）のＲＯＭの格納データを検査してもよい。ＩＶＩ装置１４は、１回の検査タイミングにおいて、複数の被検査装置に対する検査処理を並行実行もしくは順次実行してもよく、複数回の検査タイミングにおいて、複数の被検査装置に対する検査処理を分散して実行してもよい。また、ＩＶＩ装置１４は、各被検査装置に対する検査結果を外部のサーバ（不図示）へ送信してもよい。
【００９６】
第６変形例を説明する。上記実施例では検査装置をＩＶＩ装置１４としたが、検査装置はＩＶＩ装置１４には限られない。例えば、検査装置は、周辺機器１６のメモリのデータを書き換えるソフトウェアがインストールされたＰＣ、スマートフォン、タブレット端末等であってもよい。この場合、検査装置と周辺機器１６は、ＵＳＢ接続されてもよい。また、検査装置は、車両１２外部のサーバであってもよく、この場合、サーバと周辺機器１６は、車両１２外部のネットワークおよび車載ネットワーク１８を介して接続されてもよい。
【００９７】
上記実施例および変形例に記載の技術の適用範囲は、車両１２に関連する装置に制限されない。検査装置と被検査装置のいずれについても様々な種類の電子機器（例えばサーバ、ＰＣ、スマートフォン、タブレット端末等）にて実現できる。すなわち、上記実施例および変形例に記載の技術によると、様々な種類の電子機器における不正プログラムの有無を当該電子機器の外部から判定する精度（言い換えれば正確さ）を向上させることができる。
【００９８】
第７変形例を説明する。ＩＶＩ装置１４と周辺機器１６は車載ネットワーク１８を介して接続しているが、間にゲートウェイ装置を介した多段の、車載ネットワーク１８構成であってもよい。
【００９９】
ＩＶＩ装置１４では周辺機器１６が複数ある場合に、サイズ記憶部６０、ハッシュ値記憶部６２をテーブル化して記憶し、ＲＯＭデータ記憶部６４を十分な大きさを確保し、周辺機器１６それぞれで共用する構成であってもかまわない。
【０１００】
ＩＶＩ装置１４では周辺機器１６のサイズ情報をサイズ記憶部６０に、ハッシュ値をハッシュ値記憶部６２に記憶するが、初めて周辺機器に書き込む時に、ライトワンス（１回のみ書き込み可能）な記憶領域に、初めて書き込んだフラグ（値）を記録し、このフラグが存在する間は、ＩＶＩ装置１４で周辺機器１６の更新データが正常でない限り、更新しない方式を行ってもかまわない。
【０１０１】
ＩＶＩ装置１４で周辺機器１６の更新結果、Ｓ２８およびＳ３０、Ｓ８２およびＳ８４の結果を、不記載のサーバに送信し、サーバにて更新状況を集中監視する方式を行ってもかまわない。
【０１０２】
ＩＶＩ装置１４で周辺機器１６の更新結果、Ｓ３０または、Ｓ８４の異常となった場合に、不記載のログ記録部への保存、不記載のサーバへの通知後の、サーバ（別経路）からの再更新を行ってもかまわない。
【０１０３】
工場での製造時に、最初、ＩＶＩ装置１４は、特に他社の周辺機器１６を対象とした場合、サイズ記憶部６０の値は、機器のハードウェア仕様から入手できるが、ハッシュ値記憶部６２の値（ハッシュ値）は持っていない。その後組立工程にて、電源、対象機器と車載ネットワーク１８で接続する。この工程で、ＩＶＩ装置１４が、周辺機器１６に対して、Ｓ１２の周辺機器１６の全ＲＯＭサイズ分のメモリを確保、Ｓ４４の乱数を生成し、Ｓ１４〜Ｓ２２でサイズ記憶部６０を読み出し、Ｓ４８の乱数を含む更新データを生成する。これに対して、Ｓ５０のハッシュ値を生成し、ハッシュ値をハッシュ値記憶部６２に記録する。そして、乱数を含む更新データを周辺機器１６に対して書き込みを行う。また、ＩＶＩ装置１４では、不記載のライトワンス（１回のみ書き込み可能）な記憶領域に、乱数を含む更新データを周辺機器１６に対して書き込んだことを記録する。このような方法で、組立工場でＩＶＩ装置１４が周辺機器１６に対して、乱数を含む更新データを生成して書き込む方式を行ってもかまわない。
【０１０４】
上記の段落０１０４では、ＩＶＩ装置１４が周辺機器１６に対して、乱数を含む更新データを生成して書き込んだが、ＯＢＤ（On-board diagnostics）経由で周辺機器１６のＲＯＭを読み出し、ＯＢＤと接続したＰＣで、Ｓ４８の乱数を含む更新データを生成してもよい。そしてＯＢＤ経由で、ＩＶＩ装置１４へ、周辺機器１６のサイズ情報をサイズ記憶部６０に、ハッシュ値をハッシュ値記憶部６２に記憶し、周辺機器１６に乱数を含む更新データを更新する方式を行ってもかまわない。
【０１０５】
なお、実施例および変形例に記載の技術は、以下の項目によって特定されてもよい。
［項目１］
被検査装置のメモリの全領域に格納されたデータに基づく判定データを記憶する記憶部と、所定の検査タイミングにおいて、被検査装置のメモリの全領域に格納されたデータを取得する取得部と、取得部により取得されたデータに基づいて検査データを導出する導出部と、導出部により導出された検査データと、記憶部に予め記憶された判定データとが不一致の場合に、被検査装置が異常と判定する判定部と、を備える検査装置。
この態様によると、被検査装置における不正プログラムの有無を検査装置が判定する精度（言い換えれば正確さ）を向上させることができる。
［項目２］
データは、被検査装置の動作を定めたプログラムのデータと、プログラムのデータが未格納の空き領域に全てが０または１で構成されたデータあるいは所定のパターンの繰り返しで構成されたデータとは異なるデータとが設定されたものであってもよい。
この態様によると、被検査装置のメモリに存在する不正プログラムが、当該メモリの格納データが正常であるように偽装することを困難にできる。
［項目３］
異なるデータは、乱数列であってもよい。
この態様によると、被検査装置のメモリに存在する不正プログラムが、当該メモリの格納データが正常であるように偽装することを一層困難にできる。
［項目４］
異なるデータは、圧縮済のデータであってもよい。
この態様によると、被検査装置のメモリに存在する不正プログラムが、当該メモリの格納データが正常であるように偽装することを一層困難にできる。
［項目５］
判定部は、取得部が被検査装置にデータの提供を要求してから、当該データが提供されるまでの時間が、要求したデータのサイズに応じた閾値を超過した場合、被検査装置が異常と判定してもよい。
この態様によると、被検査装置のメモリに存在する不正プログラムが、当該メモリの格納データが正常であるように偽装する場合でも、被検査装置の異常を検出しやすくなる。
［項目６］
取得部は、被検査装置のメモリの一部領域に格納されたデータを取得することを複数回繰り返すことにより、当該メモリの全領域に格納されたデータを取得し、取得部は、複数回のデータ取得のそれぞれで指定する読み出しアドレスをランダムに決定してもよい。
この態様によると、被検査装置のメモリに存在する不正プログラムが、当該メモリの格納データが正常であるように偽装することを困難にし、被検査装置の異常を検出しやすくなる。
［項目７］
取得部は、被検査装置のメモリの一部領域に格納されたデータを取得することを複数回繰り返すことにより、当該メモリの全領域に格納されたデータを取得し、取得部は、複数回のデータ取得のそれぞれで指定する読み出しサイズをランダムに決定してもよい。
この態様によると、被検査装置のメモリに存在する不正プログラムが、当該メモリの格納データが正常であるように偽装することを困難にし、被検査装置の異常を検出しやすくなる。
［項目８］
検査装置と被検査装置とを備える検査システムである。被検査装置のメモリに格納されたデータは、被検査装置の動作を定めたプログラムのデータと、プログラムのデータが未格納の空き領域に全てが０または１で構成されたデータあるいは所定のパターンの繰り返しで構成されたデータとは異なるデータとが設定されたものであり、被検査装置は、メモリの全領域に格納されたデータに基づいて検査データを導出する導出部と、導出部により導出された検査データを検査装置へ送信する送信部と、を含む。検査装置は、データに基づく判定データを記憶する記憶部と、被検査装置から送信された検査データと、記憶部に予め記憶された判定データとが不一致の場合に、被検査装置が異常と判定する判定部と、を含む。
この態様によると、被検査装置のメモリに存在する不正プログラムが、当該メモリの格納データが正常であるように偽装することを困難にできるとともに、被検査装置から検査装置へ送信されるデータ量を低減することができる。
［項目９］
検査装置と被検査装置は、チャレンジ・レスポンス型の通信を実行し、検査装置は、チャレンジを決定して、被検査装置へ送信する送信部をさらに含んでもよい。被検査装置の送信部は、検査データとチャレンジに基づいてレスポンスデータを生成し、生成したレスポンスデータを検査装置へ送信し、検査装置の判定部は、レスポンスデータとチャレンジに基づいて、被検査装置で導出された検査データを取得してもよい。
この態様によると、被検査装置で送出された検査データが直接通信網を流れないためセキュリティを一層高めることができる。また、チャレンジは検査の都度決定されるため、不正プログラムが予めレスポンスデータを用意しておくことができず、被検査装置のメモリの格納データが正常であるように偽装することを一層困難にできる。
［項目１０］
メモリに格納されたデータの正常性が検査される被検査装置のメモリに格納されるデータを生成する生成部と、生成部により生成されたデータを外部装置へ出力する出力部と、を備える情報処理装置。上記データは、被検査装置の動作を定めたプログラムのデータと、プログラムのデータが未設定の空き領域に全てが０または１で構成されたデータあるいは所定のパターンの繰り返しで構成されたデータとは異なるデータとが設定されたものである。
この態様によると、被検査装置のメモリに格納されるメモリデータであり、不正プログラムの検出に好適なメモリデータを提供できる。
［項目１１］
予め記憶された判定データを用いて被検査装置の正常性を検査する検査装置が、所定の検査タイミングにおいて、被検査装置のメモリの全領域に格納されたデータを取得し、取得されたデータに基づいて検査データを導出し、導出された検査データと、予め記憶された判定データとが不一致の場合に、被検査装置が異常と判定する検査方法。
この態様によると、被検査装置における不正プログラムの有無を検査装置が判定する精度（言い換えれば正確さ）を向上させることができる。
［項目１２］
予め記憶された判定データを用いて被検査装置の正常性を検査する検査装置に、所定の検査タイミングにおいて、被検査装置のメモリの全領域に格納されたデータを取得し、取得されたデータに基づいて検査データを導出し、導出された検査データと、予め記憶された判定データとが不一致の場合に、被検査装置が異常と判定することを実行させるためのコンピュータプログラム。
この態様によると、被検査装置における不正プログラムの有無を検査装置が判定する精度（言い換えれば正確さ）を向上させることができる。
【０１０６】
また、上述した実施例および変形例の任意の組み合わせもまた本発明の実施の形態として有用である。組み合わせによって生じる新たな実施の形態は、組み合わされる実施例および変形例それぞれの効果をあわせもつ。また、請求項に記載の各構成要件が果たすべき機能は、実施例および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。
【符号の説明】
【０１０７】
１０  検査システム、  １４  ＩＶＩ装置、  １６  周辺機器、  ２０  更新データ生成装置、  ６２  ハッシュ値記憶部、  ７０  ＲＯＭデータ取得部、  ７２  ハッシュ値導出部、  ７４  状態判定部、  １１８  更新データ生成部、  １２０  ハッシュ値導出部。
【図１】
2018073245.tif 000003
【図２】
2018073245.tif 000004
【図３】
2018073245.tif 000005
【図４】
2018073245.tif 000006
【図５】
2018073245.tif 000007
【図６】
2018073245.tif 000008
【図７】
2018073245.tif 000009
【図８】
2018073245.tif 000010
【図９】
2018073245.tif 000011
【図１０】
2018073245.tif 000012
【図１１】
2018073245.tif 000013
【図１２】
2018073245.tif 000014
【図１３】
2018073245.tif 000015
【図１４】
2018073245.tif 000016