(57)【要約】  本プログラム検証方法は、コンピュータが停止する前にプログラムの各部分から算出した第１の値を、コンピュータの起動時に第１記憶部から読み出し、読み出した第１の値と、第２記憶部に記憶された、正当なプログラムの各部分から算出した第２の値とに基づき、プログラムの正当性を判定する処理を含む。
2016185577.tif 000002
【特許請求の範囲】
【請求項１】
プログラムから算出した値によって前記プログラムの正当性を検証するプログラム検証方法であって、
コンピュータが、
前記コンピュータが停止する前に前記プログラムの各部分から算出した第１の値を、前記コンピュータの起動時に第１記憶部から読み出し、
読み出した前記第１の値と、第２記憶部に記憶された、正当なプログラムの各部分から算出した第２の値とに基づき、前記プログラムの正当性を判定する、
処理を実行するプログラム検証方法。
【請求項２】
前記コンピュータが、
前記コンピュータの起動後に、検証を開始するための条件である開始条件が満たされるか判断し、
前記開始条件が満たされた場合、メモリにロードされた前記プログラムの各部分について、第１の時間内に第３の値を算出し、
前記第２の値と、算出した前記第３の値とに基づき、前記プログラムの正当性を判定する、
処理をさらに実行する請求項１記載のプログラム検証方法。
【請求項３】
前記コンピュータが、
前記プログラムの各部分について前記第３の値を算出する処理を実行中に、前記開始条件がさらに満たされた場合、前記メモリにロードされた前記プログラムの各部分について、前記第１の時間より短い第２の時間内に前記第３の値を算出する、
処理をさらに実行する請求項２記載のプログラム検証方法。
【請求項４】
開始条件は、単位時間あたりに前記コンピュータが受信するデータの量が第１の量を超えたという条件、単位時間あたりに前記コンピュータが送信するデータの量が第２の量を超えたという条件、前記プログラムのうちオペレーティングシステムを含む第１の部分がロードされた領域に書き込みが行われたという条件、前記プログラムのうち前記第１の部分以外の分がロードされた領域に書き込まれたデータの量が第３の量を超えたという条件、及び前回前記開始条件が満たされてから所定時間が経過したという条件の少なくともいずれかを含む
請求項２又は３記載のプログラム検証方法。
【請求項５】
前記コンピュータが、
前記コンピュータの起動後に、前記プログラムとは異なる他のプログラムがさらに前記メモリにロードされた場合、前記メモリにロードされた前記他のプログラムの各部分について、前記第１の時間内に第４の値を算出し、
前記第３の値及び前記第４の値と、前記第２の値とに基づき、前記プログラム及び前記他のプログラムの正当性を判定する、
処理をさらに実行する請求項２記載のプログラム検証方法。
【請求項６】
前記コンピュータが、
前記第１の時間及び前記第２の時間を、少なくとも前記プログラムのサイズ、プロセッサの占有率、単位時間あたりに処理できるデータ量、及び前記プログラムの分割数に基づき決定する、
処理をさらに実行する請求項３記載のプログラム検証方法。
【請求項７】
前記プログラムの各部分から算出される値はハッシュ値であり、
前記第１の値及び前記第２の値はハッシュ値である、
請求項１記載のプログラム検証方法。
【請求項８】
プログラムから算出した値によって前記プログラムの正当性を検証する処理を実行させるための検証プログラムであって、
コンピュータに、
前記コンピュータが停止する前に前記プログラムの各部分から算出した第１の値を、前記コンピュータの起動時に第１記憶部から読み出し、
読み出した前記第１の値と、第２記憶部に記憶された、正当なプログラムの各部分から算出した第２の値とに基づき、前記プログラムの正当性を判定する、
処理を実行させるための検証プログラム。
【請求項９】
プログラムから算出した値によって前記プログラムの正当性を検証する処理を実行させる情報処理装置であって、
前記情報処理装置が停止する前に前記プログラムの各部分から算出した第１の値を格納する第１記憶部と、
正当なプログラムの各部分から算出した第２の値を格納する第２記憶部と、
前記情報処理装置の起動時に前記第１の値を第１記憶部から読み出し、読み出した前記第１の値と、前記第２記憶部に記憶された前記第２の値とに基づき、前記プログラムの正当性を判定する判定部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
プログラムの検証技術に関する。
【背景技術】
【０００２】
インターネット等のネットワークに接続された装置のプログラムは、外部からの不正なアクセスにより書き換えられてしまうことがあり、書き換えが重大なトラブル等を発生させる場合がある。例えば自動車に搭載されたプログラムが不正に書き換えられると、自動車内の機器が動作不良に陥り、人命にかかわる事故につながる。【０００３】
また、プログラムが搭載された装置の使用者が意図的にプログラムを書き換える（例えば、スピード制限を解除するための書き換えを行う）こともあり、そのような書き換えが原因で不具合が発生し、装置を使用できなくなることがある。【０００４】
プログラムが正当であることを検証する技術として、装置の起動時にＯＳ（Operating System）等のプログラムが正当であるか確認するセキュアブートという技術が知られている。但し、セキュアブートを利用すると装置の起動に要する時間が長くなるという問題がある。【０００５】
また、或る文献は以下のような技術を開示する。具体的には、コンピュータが、プログラムを複数のページに分割し、複数のページのそれぞれについてハッシュ値を計算する。そして、コンピュータが、ハッシュ値に基づいてハッシュアレイを生成し、さらにハッシュアレイのデジタル署名を生成する。【０００６】
また、或る文献は以下のような技術を開示する。具体的には、マイクロプロセッサが、監査ハッシュ値を導出するためにメモリの内容にハッシュ計算を実行し、導出されたハッシュ値を、真正なメモリ内容にハッシュ計算を実行して導出した有効ハッシュ値と比較する。【０００７】
また、或る文献は、以下のような技術を開示する。具体的には、認証装置が、ダイジェストテーブルと電子署名とを記憶手段からメモリに読み出す。そして、認証装置が、メモリに読み出された電子署名とダイジェストテーブルに含まれるダイジェスト値とを用いてコンテンツデータの正当性を認証する。【０００８】
しかし、これらの文献に記載の技術を利用したとしても、起動時にプログラムの正当性を検証することと、起動時間を短縮することとを両立することはできない。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特表２００７−５０６１８７号公報
【特許文献２】特表２００１−５００２９３号公報
【特許文献３】特開２０１２−１１４９３４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従って、１つの側面では、本発明の目的は、起動時にプログラムの正当性を検証する場合において、起動に要する時間を短縮するための技術を提供することである。
【課題を解決するための手段】
【００１１】
本発明に係るプログラム検証方法は、コンピュータが停止する前にプログラムの各部分から算出した第１の値を、コンピュータの起動時に第１記憶部から読み出し、読み出した第１の値と、第２記憶部に記憶された、正当なプログラムの各部分から算出した第２の値とに基づき、プログラムの正当性を判定する処理を含む。
【発明の効果】
【００１２】
１つの側面では、起動時にプログラムの正当性を検証する場合において、起動に要する時間を短縮できるようになる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本実施の形態のシステム概要を示す図である。
【図２】図２は、主制御装置のハードウエア構成を示す図である。
【図３】図３は、主制御装置の機能ブロック図である。
【図４】図４は、主制御装置が起動時に実行する処理の処理フローを示す図である。
【図５】図５は、基本機能モジュールについて説明するための図である。
【図６】図６は、本実施の形態におけるハッシュ計算について説明するための図である。
【図７】図７は、本実施の形態におけるハッシュ計算について説明するための図である。
【図８】図８は、ＲＡＭの状態遷移について説明するための図である。
【図９】図９は、ＲＡＭの状態遷移について説明するための図である。
【図１０】図１０は、ＲＡＭの状態遷移について説明するための図である。
【図１１】図１１は、拡張機能モジュールについて説明するための図である。
【図１２】図１２は、第２検証処理の処理フローを示す図である。
【図１３】図１３は、算出処理の処理フローを示す図である。
【図１４】図１４は、主制御装置が起動後に実行する処理の処理フローを示す図である。
【図１５】図１５は、トリガの組合せとＣＰＵ占有率との関係を示す図である。
【図１６】図１６は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１４】
図１に、本実施の形態のシステム概要を示す。例えば自動車に組み込まれた主制御装置１は、インターネット或いはＶＰＮ（Virtual Private Network）等のネットワークを介してサーバ３と無線通信を行うことができる。
【００１５】
主制御装置１には製造時にドライバ、ＯＳ、ミドルウエア、及びアプリケーションプログラム等がインストールされるが、運用の開始後にもサーバ３から追加でプログラムがダウンロードされる場合がある。追加でインストールされるプログラムは、例えば、機能を追加するためのプログラムや修正プログラム等である。主制御装置１に搭載されたプログラムは、ネットワークからの攻撃（例えば、悪意のあるプログラムの送り込み）によって不正に書き換えられる可能性がある。
【００１６】
図２に、主制御装置１のハードウエア構成を示す。主制御装置１は、ＣＰＵ（Central Processing Unit）１００１と、表示装置１００３と、通信制御部１００５、バス１００７と、ＲＡＭ（Random Access Memory）１００９と、記憶装置１０１１とを有する。
【００１７】
記憶装置１０１１は、ＨＤＤ（Hard Disk Drive）或いはＮＡＮＤ（Not AND）型フラッシュメモリ等であり、本実施の形態の処理を実行するためのプログラム、ドライバ、ＯＳ、ミドルウエア、及びアプリケーションプログラム等が格納される。記憶装置１０１１に格納されたプログラムは、ＣＰＵ１００１によって読み出され、ＲＡＭ１００９にロードされて実行される。例えばモニタである表示装置１００３は、警告を表示する画面或いはナビゲーションのための画面等を表示する。通信制御部１００５は、ネットワークを介した通信を行うためのハードウエアである。
【００１８】
図３に、主制御装置１の機能ブロック図を示す。主制御装置１は、第１検証部１０１と、第２検証部１０２と、算出部１０３と、正当値格納部１０４と、設定データ格納部１０５と、第１ハッシュ値格納部１０６と、第２ハッシュ値格納部１０７と、第３ハッシュ値格納部１０８とを含む。
【００１９】
第１検証部１０１は、主制御装置１の起動時に、ＲＡＭ１００９にロードされたプログラムの正当性を判定する処理を実行する。具体的には、第１検証部１０１は算出部１０３を呼び出し、算出部１０３は、正当値格納部１０４に格納されているデータ、設定データ格納部１０５に格納されているデータ、及び第１ハッシュ値格納部１０６に格納されているデータに基づき処理を実行し、処理結果を第２ハッシュ値格納部１０７及び第３ハッシュ値格納部１０８に格納する。第２検証部１０２は、主制御装置１の起動後に、ＲＡＭ１００９にロードされたプログラムの正当性を判定する処理を実行する。具体的には、第２検証部１０２は算出部１０３を呼び出し、算出部１０３は、正当値格納部１０４に格納されているデータ及び設定データ格納部１０５に格納されているデータに基づき処理を実行し、処理結果を第１ハッシュ値格納部１０６、第２ハッシュ値格納部１０７及び第３ハッシュ値格納部１０８に格納する。正当値格納部１０４、設定データ格納部１０５、第１ハッシュ値格納部１０６、第２ハッシュ値格納部１０７、及び第３ハッシュ値格納部１０８は、記憶装置１０１１に設けられる。従って、主制御装置１の電源が切断されたとしてもデータは消去されない。
【００２０】
次に、図４乃至図１５を用いて、主制御装置１が実行する処理について説明する。例えば車両の運転手が、主制御装置１に電源を投入する。主制御装置１に電源が投入された場合、主制御装置１のＣＰＵ１００１は、記憶装置１０１１に格納されている基本機能モジュールをＲＡＭ１００９にロードする（図４：ステップＳ１）。
【００２１】
基本機能モジュールは、装置に初期的に搭載されたプログラム及び基本的な機能を実現するためのプログラムを含む。従って、基本機能モジュールは、例えば図５に示すように、主制御装置１の機器を制御するためのドライバと、ＯＳと、基本的な機能を実現するためのミドルウエア及びアプリケーションプログラムとを含む。
【００２２】
主制御装置１の第１検証部１０１は、算出部１０３を呼び出す。そして、算出部１０３は、第１ハッシュ値格納部１０６に格納されたハッシュ値を読み出し、読み出したハッシュ値から新たにハッシュ値を算出して第２ハッシュ値格納部１０７に格納する。さらに、算出部１０３は、算出したハッシュ値から新たにハッシュ値を算出し（ステップＳ３）、第３ハッシュ値格納部１０８に格納する。
【００２３】
図６を用いて、本実施の形態におけるハッシュ計算について説明する。図６において、破線の矢印はハッシュ計算を示す。本実施の形態においては、メモリにロードされた、ハッシュ計算の対象となるプログラムを予め定めた数（図６においてはｎ（ｎは２以上の自然数））に分割し、分割後の各ブロックからハッシュ値を算出する。ここでは、ハッシュ値はｎ個算出され、第１ハッシュ値格納部１０６に格納される。
【００２４】
そして、第１ハッシュ値格納部１０６に格納されたｎ個のハッシュ値から新たに１つのハッシュ値が算出される。そして、算出されたハッシュ値は第２ハッシュ値格納部１０７に格納される。
【００２５】
さらに、第２ハッシュ値格納部１０７に格納されたハッシュ値から１つのハッシュ値が算出され、第３ハッシュ値格納部１０８に格納される。図６の例では第２ハッシュ値格納部１０７に格納されたハッシュ値は１つであるので、１つのハッシュ値から１つのハッシュ値が算出される。なお、この場合には第２ハッシュ値をそのまま第３ハッシュ値としてもよい。
【００２６】
図７を用いて、主制御装置１の起動後にＲＡＭ１００９に追加でプログラムがロードされた場合におけるハッシュ計算について説明する。図７において、破線の矢印はハッシュ計算を表す。追加でプログラムがロードされた場合においては、元々ロードされていたプログラムがｎ個のブロックに分割され、追加でロードされたプログラムのそれぞれもｎ個のブロックに分割される。元々ロードされていたプログラムからはｎ個のハッシュ値が算出され、追加でロードされたプログラムのそれぞれからもｎ個のハッシュ値が算出され、算出されたハッシュ値は第１ハッシュ値格納部１０６に格納される。
【００２７】
そして、元々ロードされていたプログラムについて、第１ハッシュ値格納部１０６に格納されたｎ個のハッシュ値から新たに１つのハッシュ値が算出され、第２ハッシュ値格納部１０７に格納される。また、追加でロードされたプログラムのそれぞれについて、第１ハッシュ値格納部１０６に格納されたｎ個のハッシュ値から新たに１つのハッシュ値が算出され、第２ハッシュ値格納部１０７に格納される。
【００２８】
さらに、第２ハッシュ値格納部１０７に格納されたハッシュ値から１つのハッシュ値が算出され、第３ハッシュ値格納部１０８に格納される。図７の例では、第２ハッシュ値格納部１０７に格納されているハッシュ値の数は２以上であるので、２以上のハッシュ値から１つのハッシュ値が算出される。
【００２９】
このように、プログラムからハッシュ値を算出する処理と、ハッシュ値からハッシュ値を計算する処理とが有り、起動時間を長くする原因となるのは前者の処理である。そこで、ステップＳ３においては、主制御装置１がシャットダウンする前に算出したハッシュ値を利用することで、最終的に第３ハッシュ値格納部１０８に格納されるべきハッシュ値を算出するまでの時間を短縮できる。
【００３０】
図８乃至図１０に、ＲＡＭ１００９の状態遷移を示す。図８は、起動直後のＲＡＭ１００９の状態を示す図である。ＲＡＭ１００９には、起動時にロードされたプログラム（本実施の形態においては、基本機能モジュール及び拡張機能モジュール）が格納されている。この場合、ハッシュ計算の対象となるのは、太い実線で囲まれた、起動時にロードされたプログラムである。
【００３１】
図９は、起動後に追加でプログラムがロードされた場合におけるＲＡＭ１００９の状態を示す図である。ＲＡＭ１００９には、起動時にロードされたプログラムと、起動後に追加でロードされたプログラムとが格納される。この場合、ハッシュ計算の対象となるのは、太い実線で囲まれた、起動時にロードされたプログラム及び起動後に追加でロードされたプログラムである。
【００３２】
図１０は、一部のプログラムがアンロードされた場合におけるＲＡＭ１００９の状態を示す図である。ＲＡＭ１００９には、起動時にロードされたプログラムと、起動後に追加でロードされたプログラムとが格納される。但し、起動後に追加でロードされたプログラムのうち一部のプログラムはアンロードされたので、図９の状態と比較すると、プログラムが格納された領域は狭い。この場合、ハッシュ計算の対象となるのは、太い実線で囲まれた、起動時にロードされたプログラム、及び、起動後に追加でロードされたプログラムうちアンロードされていないプログラムである。なお、第１ハッシュ値格納部１０６に格納されたハッシュ値及び第２ハッシュ値格納部１０７に格納されたハッシュ値のうちアンロードされたプログラムに対応するハッシュ値は削除される。
【００３３】
図４の説明に戻り、第１検証部１０１は、正当値格納部１０４から、正当なプログラムから算出されたハッシュ値を読み出し、第３ハッシュ値格納部１０８から、ステップＳ３において算出されたハッシュ値を読み出す。そして、第１検証部１０１は、前者のハッシュ値と後者のハッシュ値とが一致するか否かによって、主制御装置１に搭載されたプログラムが正当であるか（すなわち、書き換えられていないか）判定する（ステップＳ５）。但し、ステップＳ５において検証が行われるプログラムは、主制御装置１が停止する前のプログラムであって、ステップＳ５の処理時点において主制御装置１に搭載されたプログラムではない。主制御装置１が停止する前のプログラムは、基本機能モジュール、拡張機能モジュール、及び追加でインストールされたプログラム等を含む。
【００３４】
なお、正当値格納部１０４には、プログラム全体、基本機能モジュール、及び拡張機能モジュール等のそれぞれについて正当値が格納されているとする。また、プログラムをダウンロードして追加でロードするような場合には、ダウンロードの時点において正当値を求め直すものとする。なお、拡張機能モジュールは、基本的な機能以外の機能を実現するためのプログラムを含む。従って、拡張機能モジュールは、例えば図１１に示すように、拡張的な機能を実現するためのドライバ、ミドルウエア、及びアプリケーションプログラムを含む。
【００３５】
図４の説明に戻り、プログラムが正当ではない場合（ステップＳ５：Ｎｏルート）、第１検証部１０１は、プログラムが正当ではないことを示す警告メッセージを表示装置１００３に表示させる（ステップＳ７）。そして処理を終了する。
【００３６】
一方、プログラムが正当である場合（ステップＳ５：Ｙｅｓルート）、第１検証部１０１は、ステップＳ１においてＲＡＭ１００９にロードされた基本機能モジュールの実行をＣＰＵ１００１に許可する（ステップＳ９）。これに応じ、ＣＰＵ１００１は、基本機能モジュールの実行を開始する。
【００３７】
第１検証部１０１は、算出部１０３を呼び出すことにより、ＲＡＭ１００９にロードされた基本機能モジュールについて第１検証処理を実行する（ステップＳ１１）。ステップＳ１１においては、基本機能モジュールがｎ個のブロックに分割され、図６を用いて説明した方法によってハッシュ値が算出される。基本機能モジュールのサイズは後述の拡張機能モジュールと比較してサイズが小さいため、第１検証処理においては、周期的なハッシュ計算を行わない。そして、第１検証部１０１は、基本機能モジュールについて算出されたハッシュ値（ここでは、第３ハッシュ値格納部１０８に格納されたハッシュ値）と正当値格納部１０４に格納されたハッシュ値とを比較することで、基本機能モジュールが正当であるか判定する（ステップＳ１３）。
【００３８】
基本機能モジュールが正当ではない場合（ステップＳ１３：Ｎｏルート）、第１検証部１０１は、基本機能モジュールが正当ではないことを示す警告メッセージを表示装置１００３に表示させる（ステップＳ１５）。そして処理を終了する。
【００３９】
一方、基本機能モジュールが正当である場合（ステップＳ１３：Ｙｅｓルート）、第１検証部１０１は、拡張機能モジュールをＲＡＭ１００９にロードする（ステップＳ１６）。
【００４０】
第１検証部１０１は、算出部１０３を呼び出すことにより、ＲＡＭ１００９にロードされた拡張機能モジュールについて第２検証処理を実行する（ステップＳ１７）。拡張機能モジュールのサイズは基本機能モジュールと比較してサイズが大きいため、第２検証処理においては、周期的なハッシュ計算がおこなわれる。第２検証処理については、図１２及び図１３を用いて説明する。
【００４１】
まず、算出部１０３は、初回の処理である（すなわち、今回の呼び出しにおいて後述の算出処理を未だ実行していない）か判定する（図１２：ステップＳ５１）。初回の処理ではない場合（ステップＳ５１：Ｎｏルート）、算出部１０３は、周期タイマのタイムアウトが発生したか判定する（ステップＳ５３）。周期タイマのタイムアウトが発生していない場合（ステップＳ５３：Ｎｏルート）、ステップＳ５７の処理に移行する。周期タイマとは、ステップＳ５５において算出する周期を管理するためのタイマである。
【００４２】
一方、初回の処理である場合（ステップＳ５１：Ｙｅｓルート）又はタイムアウトが発生した場合（ステップＳ５３：Ｙｅｓルート）、算出部１０３は、算出処理を実行する（ステップＳ５５）。算出処理については、図１３を用いて説明する。
【００４３】
まず、算出部１０３は、周期タイマを設定済みであるか判定する（図１３：ステップＳ６１）。ステップＳ６１においては、周期タイマの周期ＣＩＴ（秒）を設定済みであるか否かが判定される。
【００４４】
周期タイマを設定済みではない場合（ステップＳ６３：Ｎｏルート）、算出部１０３は、周期タイマの周期ＣＩＴを設定する（ステップＳ６５）。このような周期ＣＩＴを利用することで、１つのブロックからハッシュ値を算出する処理を一定の時間内に実行できるようにする。結果として、全ブロックについてのハッシュ計算が完了するのに要する時間がおおよそ一定になる。
【００４５】
本実施の形態においては、主制御装置１の設計時に周期ＣＩＴ及びプログラムの分割数ＢＮを設計者が予め定める。ステップＳ６５においては、周期タイマの初期的な周期としてＣＩＴが設定される。ＣＩＴ、ＢＮ、及び全ブロックからハッシュ値を算出するのに要する時間の最大許容時間ＭＯＣＴ（秒）は、プログラムからハッシュ値を算出する際に利用される。
【００４６】
また、主制御装置１のハードウエアの選定及びソフトウエアの設計を行う際に、初期プログラムのサイズＡＰＳ（バイト）及びプログラムからハッシュ値を算出する処理の処理速度ＣＰＰ（バイト／秒）を設計者が予め定める。
【００４７】
また、設計者等は、機器の設計において、イベントに対する反応の最大遅延時間ＭＲＴ（秒）及び最大ＣＰＵ占有率ＭＯＲ（％）の値を優先的に定める。なお、イベントに対する応答の最大遅延時間とは、特定のイベントが発生した場合に行う制御が完了するまでに要する時間の最大許容時間である。
【００４８】
これらのパラメタは、設定データ格納部１０５に予め格納される。これらのパラメタは、ＭＯＣＴ＞ＡＰＳ／（ＣＰＰ＊ＭＯＲ）、且つ、ＭＲＴ＞（ＡＰＳ／ＢＮ）／ＣＰＰ、且つ、ＭＯＲ＞（（ＡＰＳ／ＢＮ）／ＣＰＰ）／ＣＩＴ、という関係が成立するように定められる。
【００４９】
これらの関係から、ＢＮ＞ＡＰＳ／（ＭＲＴ＊ＣＰＰ）、ＣＩＴ＞ＡＰＳ／（ＭＯＲ＊ＣＰＰ＊ＢＮ）、ＭＯＣＴ＞ＡＰＳ／（ＭＯＲ＊ＣＰＰ）という関係を導出することができる。
【００５０】
図１３の説明に戻り、算出部１０３は、ブロック番号Ｎを初期化する（ステップＳ６７）。ステップＳ６７においては、ブロック番号Ｎに「０」が設定される。そして呼び出し元の処理に戻る。
【００５１】
一方、周期タイマを設定済みである場合（ステップＳ６３：Ｙｅｓルート）、算出部１０３は、周期タイマを起動する（ステップＳ６８）。ステップＳ６８の処理により、時間の計測が開始される。
【００５２】
算出部１０３は、ブロック番号Ｎを１インクリメントする（ステップＳ６９）。そして、算出部１０３は、ＲＡＭ１００９にロードされたプログラム（ここでは、拡張機能モジュール）におけるＮ番目のブロックからハッシュ値を算出し、第１ハッシュ値格納部１０６に格納する（ステップＳ７１）。
【００５３】
算出部１０３は、ブロック番号Ｎ＝ＢＮが成立するか判定する（ステップＳ７３）。ブロック番号Ｎ＝ＢＮが成立しない場合（ステップＳ７３：Ｎｏルート）、呼び出し元の処理に戻る。
【００５４】
一方、ブロック番号Ｎ＝ＢＮが成立する場合（ステップＳ７３：Ｙｅｓルート）、算出部１０３は、第１ハッシュ値格納部１０６に格納されたハッシュ値から新たにハッシュ値を算出し、第２ハッシュ値格納部１０７に格納する（ステップＳ７５）。
【００５５】
算出部１０３は、第２ハッシュ値格納部１０７に格納されたハッシュ値から新たにハッシュ値を算出し、第３ハッシュ値格納部１０８に格納する。そして、算出部１０３は、周期タイマを停止して設定を解除する（ステップＳ７７）。そして呼び出し元の処理に戻る。
【００５６】
図１２の説明に戻り、算出部１０３は、ブロック番号Ｎ＝ＢＮが成立するか判定する（ステップＳ５７）。ブロック番号Ｎ＝ＢＮが成立しない場合（ステップＳ５７：Ｎｏルート）、ステップＳ５１の処理に戻る。一方、ブロック番号Ｎ＝ＢＮが成立する場合（ステップＳ５７：Ｙｅｓルート）、呼び出し元の処理に戻る。
【００５７】
図４の説明に戻り、第１検証部１０１は、拡張機能モジュールについて算出されたハッシュ値（ここでは、第３ハッシュ値格納部１０８に格納されたハッシュ値）と正当値格納部１０４に格納されたハッシュ値とを比較することで、拡張機能モジュールが正当であるか判定する（ステップＳ１９）。
【００５８】
拡張機能モジュールが正当ではない場合（ステップＳ１９：Ｎｏルート）、第１検証部１０１は、拡張機能モジュールが正当ではないことを示す警告メッセージを表示装置１００３に表示させる（ステップＳ１５）。そして処理を終了する。
【００５９】
一方、拡張機能モジュールが正当である場合（ステップＳ１９：Ｙｅｓルート）、第１検証部１０１は、ステップＳ１６においてＲＡＭ１００９にロードされた拡張機能モジュールの実行をＣＰＵ１００１に許可する（ステップＳ２０）。これに応じ、ＣＰＵ１００１は、拡張機能モジュールの実行を開始する。そして処理を終了する。
【００６０】
以上のような処理を実行すれば、プログラムからハッシュ値を算出する処理を起動時にしなくてよいので、起動に要する時間を短縮できるようになる。また、基本機能モジュールと比較すると拡張機能モジュールはサイズが大きいので、単純に検証を行うと時間がかかる。しかし、予めブロック数ＢＮ及び周期ＣＩＴ等を定めておき、それらに従ってハッシュ値の算出を行うので、検証に要する時間が長くなることを抑制できるようになる。本実施の形態によれば、おおよそ一定の時間で拡張機能モジュールの検証を完了できるようになる。
【００６１】
そして、プログラムが正当ではない（例えば、製造時のプログラムと同じではない）と判定した場合には警告メッセージを表示するので、ユーザは警告メッセージに応じた対応を行えるようになる。
【００６２】
次に、図１４及び図１５を用いて、主制御装置１が起動後に実行する処理について説明する。本処理を実行するためのスレッドは定期的に起動される。なお、本処理が複数スレッドによって並行して行われる場合もある。
【００６３】
まず、第２検証部１０２は、検証開始のトリガが発生したか判定する（図１４：ステップＳ２１）。本実施の形態において、検証開始のトリガとは、（１）単位時間当たりに受信するデータの量が閾値（以下、ＲＴとする）を超えること、（２）単位時間当たりに送信するデータの量が閾値（以下、ＳＴとする）を超えること、（３）基本機能モジュールがロードされた領域への書き換えが発生したこと、（４）拡張機能モジュールがロードされた領域において書き換えられたデータの量が閾値を超えたこと、（５）前回にトリガが発生してから一定時間が経過したこと、といったトリガである。但し、ＲＴ＞ＳＴとし、ＲＴ及びＳＴは、設計時に想定する最大の通信データの量より多いとする。
【００６４】
検証開始のトリガが発生していない場合（ステップＳ２３：Ｎｏルート）、処理を終了する。検証開始のトリガが発生した場合（ステップＳ２３：Ｙｅｓルート）、第２検証部１０２は、第２検証処理を実行中であるか判定する（ステップＳ２５）。上述のトリガは任意のタイミングで発生するため、第２検証処理を実行中に新たなトリガが発生し、第２検証処理が重複して実行される場合がある。
【００６５】
第２検証処理を実行中ではない場合（ステップＳ２７：Ｎｏルート）、第２検証部１０２は、ステップＳ２１において発生したと判定されたトリガの情報を記録する（ステップＳ２９）。そして、第２検証部１０２は、算出部１０３を呼び出すことにより、ＲＡＭ１００９にロードされたプログラムについて第２検証処理を実行する（ステップＳ３１）。第２検出処理については図１２及び図１３を用いて説明したので、ここでは説明を省略する。なお、ステップＳ３１において検証の対象となるプログラムは、基本機能モジュール、拡張機能モジュール、及び追加でロードされたプログラムを含む。
【００６６】
なお、ステップＳ３１の第２検証処理が完了した場合、第２検証部１０２は、変更された周期ＣＩＴをデフォルトの値に戻すものとする。
【００６７】
第２検証部１０２は、ＲＡＭ１００９にロードされたプログラムについて算出されたハッシュ値（ここでは、第３ハッシュ値格納部１０８に格納されたハッシュ値）と正当値格納部１０４に格納されたハッシュ値とを比較することで、ＲＡＭ１００９にロードされたプログラムが正当であるか判定する（ステップＳ３８）。
【００６８】
ＲＡＭ１００９にロードされたプログラムが正当ではない場合（ステップＳ３８：Ｎｏルート）、第２検証部１０２は、ＲＡＭ１００９にロードされたプログラムが正当ではないことを示す警告メッセージを表示装置１００３に表示させる（ステップＳ３９）。ＲＡＭ１００９にロードされたプログラムが正当である場合（ステップＳ３８：Ｙｅｓルート）、処理を終了する。
【００６９】
一方、第２検証処理を実行中である場合（ステップＳ２７：Ｙｅｓルート）、第２検証部１０２は、今回発生したトリガの情報を記録し、既に発生したトリガと今回発生したトリガとの組合せを判定する（ステップＳ３３）。発生したトリガの情報は、ステップＳ２９及びステップＳ３３において記録されているので、その情報を用いて組合せが判定される。
【００７０】
図１５に、発生したトリガの組合せとＭＯＲとの関係を示す。括弧付きの数字は、ステップＳ２１についての説明において使用した、トリガを表す番号である。但し、ここではトリガ（１）から（４）についての組合せのみを示す。「＊」は（１）から（４）のうちいずれかのトリガが発生するか或いはいずれのトリガも発生しないことを表す。図１５に示すように、本実施の形態においては、トリガの組合せに含まれるトリガの数が多いほど、ＭＯＲを高い値に設定する。すると、ＣＩＴ＞ＡＰＳ／（ＭＯＲ＊ＣＰＰ＊ＢＮ）に従って、ＣＩＴはより短くなる。これにより、１ブロックからハッシュ値を算出するのに要する時間が短くなる。但し、ＭＯＲが１００（％）にならないように設定が行われる。
【００７１】
図１４の説明に戻り、第２検証部１０２は、周期ＣＩＴを変更するか判断する（ステップＳ３５）。周期ＣＩＴを変更しない場合（ステップＳ３５：Ｎｏルート）、処理を終了する。一方、周期ＣＩＴを変更する場合（ステップＳ３５：Ｙｅｓルート）、第２検証部１０２は、トリガの組合せ及び図１５に示した関係に従いＭＯＲを変更する。さらに、第２検証部１０２は、変更後のＭＯＲに従い周期ＣＩＴを変更する（ステップＳ３７）。そして処理を終了する。なお、一旦周期ＣＩＴが変更されると、ステップＳ３１の第２検証処理が完了するまで周期ＣＩＴの値は元の値には戻らない。
【００７２】
以上のような処理を実行すれば、状況に応じて周期ＣＩＴを変更できるので、検証処理に時間がかかってしまうことをさらに抑制できるようになる。
【００７３】
また、起動後においてはトリガが発生した場合にのみ検証を開始するので、ＣＰＵ１００１に過剰な負荷がかかることがない。
【００７４】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した主制御装置１の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００７５】
また、上で説明したデータ保持構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００７６】
なお、起動時に基本機能モジュール或いは拡張機能モジュールが正当ではないと判定された場合、起動を停止してもよい。
【００７７】
なお、上で述べたサーバ３は、コンピュータ装置であって、図１６に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００７８】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００７９】
本実施の形態に係るプログラム検証方法は、（Ａ）コンピュータが停止する前にプログラムの各部分から算出した第１の値を、コンピュータの起動時に第１記憶部から読み出し、（Ｂ）読み出した第１の値と、第２記憶部に記憶された、正当なプログラムの各部分から算出した第２の値とに基づき、プログラムの正当性を判定する処理を含む。
【００８０】
このようにすれば、プログラムから値を算出する処理をコンピュータの起動時に行わなくてもよいので、起動に要する時間を短縮できるようになる。
【００８１】
また、本プログラム検証方法は、（Ｃ）コンピュータの起動後に、検証を開始するための条件である開始条件が満たされるか判断し、（Ｄ）開始条件が満たされた場合、メモリにロードされたプログラムの各部分について、第１の時間内に第３の値を算出し、（Ｅ）第２の値と、算出した第３の値とに基づき、プログラムの正当性を判定する処理をさらに含んでもよい。このようにすれば、プログラムの各部分から値を算出する処理に要する時間が長くなることを抑制できるようになる。
【００８２】
また、本プログラム検証方法は、（Ｆ）プログラムの各部分について第３の値を算出する処理を実行中に、開始条件がさらに満たされた場合、メモリにロードされたプログラムの各部分について、第１の時間より短い第２の時間内に第３の値を算出する処理をさらに含んでもよい。このようにすれば、開始条件が重畳的に満たされるような場合には検証が完了するまでに要する時間を短くできるようになる。
【００８３】
また、上で述べた開始条件は、単位時間あたりにコンピュータが受信するデータの量が第１の量を超えたという条件、単位時間あたりにコンピュータが送信するデータの量が第２の量を超えたという条件、プログラムのうちオペレーティングシステムを含む第１の部分がロードされた領域に書き込みが行われたという条件、プログラムのうち第１の部分以外の分がロードされた領域に書き込まれたデータの量が第３の量を超えたという条件、及び前回開始条件が満たされてから所定時間が経過したという条件の少なくともいずれかを含んでもよい。このようにすれば、プログラムが書き換えられる可能性がある場合に検証を開始できるようになる。
【００８４】
また、本プログラム検証方法は、（Ｇ）コンピュータの起動後に、プログラムとは異なる他のプログラムがさらにメモリにロードされた場合、メモリにロードされた他のプログラムの各部分について、第１の時間内に第４の値を算出し、（Ｈ）第３の値及び第４の値と、第２の値とに基づき、プログラム及び他のプログラムの正当性を判定する処理をさらに含んでもよい。このようにすれば、他のプログラムが追加でロードされるような場合においても、値を算出するのに要する時間が長くなることを抑制しつつ、他のプログラムの正当性を判定できるようになる。
【００８５】
また、本プログラム検証方法は、（Ｉ）第１の時間及び第２の時間を、少なくともプログラムのサイズ、プロセッサの占有率、単位時間あたりに処理できるデータ量、及びプログラムの分割数に基づき決定する処理をさらに含んでもよい。このようにすれば、第１の時間及び第２の時間を適切に算出できるようになる。
【００８６】
また、プログラムの各部分から算出される値はハッシュ値であり、第１の値及び第２の値はハッシュ値であってもよい。
【００８７】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【図１】
2016185577.tif 000003
【図２】
2016185577.tif 000004
【図３】
2016185577.tif 000005
【図４】
2016185577.tif 000006
【図５】
2016185577.tif 000007
【図６】
2016185577.tif 000008
【図７】
2016185577.tif 000009
【図８】
2016185577.tif 000010
【図９】
2016185577.tif 000011
【図１０】
2016185577.tif 000012
【図１１】
2016185577.tif 000013
【図１２】
2016185577.tif 000014
【図１３】
2016185577.tif 000015
【図１４】
2016185577.tif 000016
【図１５】
2016185577.tif 000017
【図１６】
2016185577.tif 000018
【手続補正書】
【提出日】平成29年11月2日(2017.11.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムから算出した値によって前記プログラムの正当性を検証するプログラム検証方法であって、
コンピュータが、
前記コンピュータが停止する前に第１のプログラムの各部分について算出した第１の値を、前記コンピュータの起動時に第１記憶部から読み出し、
読み出した前記第１の値と、第２記憶部に記憶された、正当な第２のプログラムの各部分について算出した第２の値とに基づき、前記第１のプログラムの正当性を判定する、
処理を実行するプログラム検証方法。
【請求項２】
前記コンピュータが、
前記コンピュータの起動後に、検証を開始するための条件である開始条件が満たされるか判断し、
前記開始条件が満たされた場合、メモリにロードされた第３のプログラムの各部分について、第１の時間内に第３の値を算出し、
前記第２の値と、算出した前記第３の値とに基づき、前記第３のプログラムの正当性を判定する、
処理をさらに実行する請求項１記載のプログラム検証方法。
【請求項３】
前記コンピュータが、
前記第３のプログラムの各部分について前記第３の値を算出する処理を実行中に、前記開始条件がさらに満たされた場合、前記第３のプログラムの各部分について、前記第１の時間より短い第２の時間内に前記第３の値を算出する、
処理をさらに実行する請求項２記載のプログラム検証方法。
【請求項４】
前記開始条件は、単位時間あたりに前記コンピュータが受信するデータの量が第１の量を超えたという条件、単位時間あたりに前記コンピュータが送信するデータの量が第２の量を超えたという条件、前記第３のプログラムのうちオペレーティングシステムを含む第１の部分がロードされた領域に書き込みが行われたという条件、前記第３のプログラムのうち前記第１の部分以外の分がロードされた領域に書き込まれたデータの量が第３の量を超えたという条件、及び前回前記開始条件が満たされてから所定時間が経過したという条件の少なくともいずれかを含む
請求項２又は３記載のプログラム検証方法。
【請求項５】
前記コンピュータが、
前記コンピュータの起動後に、前記第３のプログラムとは異なる第４のプログラムがさらに前記メモリにロードされた場合、前記メモリにロードされた前記第４のプログラムの各部分について、前記第１の時間内に第４の値を算出し、
前記第３の値及び前記第４の値と、前記第２の値とに基づき、前記第３のプログラム及び前記第４のプログラムの正当性を判定する、
処理をさらに実行する請求項２記載のプログラム検証方法。
【請求項６】
前記第１の値及び前記第２の値はハッシュ値である、
請求項１記載のプログラム検証方法。
【請求項７】
プログラムから算出した値によって前記プログラムの正当性を検証する処理を実行させるための検証プログラムであって、
コンピュータに、
前記コンピュータが停止する前に第１のプログラムの各部分について算出した第１の値を、前記コンピュータの起動時に第１記憶部から読み出し、
読み出した前記第１の値と、第２記憶部に記憶された、正当な第２のプログラムの各部分について算出した第２の値とに基づき、前記第１のプログラムの正当性を判定する、
処理を実行させるための検証プログラム。
【請求項８】
プログラムから算出した値によって前記プログラムの正当性を検証する処理を実行する情報処理装置であって、
前記情報処理装置が停止する前に第１のプログラムの各部分について算出した第１の値を格納する第１記憶部と、
正当な第２のプログラムの各部分について算出した第２の値を格納する第２記憶部と、
前記情報処理装置の起動時に前記第１の値を第１記憶部から読み出し、読み出した前記第１の値と、前記第２記憶部に記憶された前記第２の値とに基づき、前記第１のプログラムの正当性を判定する判定部と、
を有する情報処理装置。
【国際調査報告】
2016185577.tif 000019
2016185577.tif 000020
2016185577.tif 000021
2016185577.tif 000022