JPWO2016185577A1 - プログラム検証方法、検証プログラム、及び情報処理装置 - Google Patents

プログラム検証方法、検証プログラム、及び情報処理装置 Download PDF

Info

Publication number
JPWO2016185577A1
JPWO2016185577A1 JP2017518679A JP2017518679A JPWO2016185577A1 JP WO2016185577 A1 JPWO2016185577 A1 JP WO2016185577A1 JP 2017518679 A JP2017518679 A JP 2017518679A JP 2017518679 A JP2017518679 A JP 2017518679A JP WO2016185577 A1 JPWO2016185577 A1 JP WO2016185577A1
Authority
JP
Japan
Prior art keywords
program
value
computer
storage unit
time
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017518679A
Other languages
English (en)
Other versions
JP6601491B2 (ja
Inventor
保彦 阿部
保彦 阿部
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2016185577A1 publication Critical patent/JPWO2016185577A1/ja
Application granted granted Critical
Publication of JP6601491B2 publication Critical patent/JP6601491B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/575Secure boot
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/442Shutdown
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Storage Device Security (AREA)

Abstract

本プログラム検証方法は、コンピュータが停止する前にプログラムの各部分から算出した第1の値を、コンピュータの起動時に第1記憶部から読み出し、読み出した第1の値と、第2記憶部に記憶された、正当なプログラムの各部分から算出した第2の値とに基づき、プログラムの正当性を判定する処理を含む。

Description

プログラムの検証技術に関する。
インターネット等のネットワークに接続された装置のプログラムは、外部からの不正なアクセスにより書き換えられてしまうことがあり、書き換えが重大なトラブル等を発生させる場合がある。例えば自動車に搭載されたプログラムが不正に書き換えられると、自動車内の機器が動作不良に陥り、人命にかかわる事故につながる。
また、プログラムが搭載された装置の使用者が意図的にプログラムを書き換える(例えば、スピード制限を解除するための書き換えを行う)こともあり、そのような書き換えが原因で不具合が発生し、装置を使用できなくなることがある。
プログラムが正当であることを検証する技術として、装置の起動時にOS(Operating System)等のプログラムが正当であるか確認するセキュアブートという技術が知られている。但し、セキュアブートを利用すると装置の起動に要する時間が長くなるという問題がある。
また、或る文献は以下のような技術を開示する。具体的には、コンピュータが、プログラムを複数のページに分割し、複数のページのそれぞれについてハッシュ値を計算する。そして、コンピュータが、ハッシュ値に基づいてハッシュアレイを生成し、さらにハッシュアレイのデジタル署名を生成する。
また、或る文献は以下のような技術を開示する。具体的には、マイクロプロセッサが、監査ハッシュ値を導出するためにメモリの内容にハッシュ計算を実行し、導出されたハッシュ値を、真正なメモリ内容にハッシュ計算を実行して導出した有効ハッシュ値と比較する。
また、或る文献は、以下のような技術を開示する。具体的には、認証装置が、ダイジェストテーブルと電子署名とを記憶手段からメモリに読み出す。そして、認証装置が、メモリに読み出された電子署名とダイジェストテーブルに含まれるダイジェスト値とを用いてコンテンツデータの正当性を認証する。
しかし、これらの文献に記載の技術を利用したとしても、起動時にプログラムの正当性を検証することと、起動時間を短縮することとを両立することはできない。
特表2007−506187号公報 特表2001−500293号公報 特開2012−114934号公報
従って、1つの側面では、本発明の目的は、起動時にプログラムの正当性を検証する場合において、起動に要する時間を短縮するための技術を提供することである。
本発明に係るプログラム検証方法は、コンピュータが停止する前にプログラムの各部分から算出した第1の値を、コンピュータの起動時に第1記憶部から読み出し、読み出した第1の値と、第2記憶部に記憶された、正当なプログラムの各部分から算出した第2の値とに基づき、プログラムの正当性を判定する処理を含む。
1つの側面では、起動時にプログラムの正当性を検証する場合において、起動に要する時間を短縮できるようになる。
図1は、本実施の形態のシステム概要を示す図である。 図2は、主制御装置のハードウエア構成を示す図である。 図3は、主制御装置の機能ブロック図である。 図4は、主制御装置が起動時に実行する処理の処理フローを示す図である。 図5は、基本機能モジュールについて説明するための図である。 図6は、本実施の形態におけるハッシュ計算について説明するための図である。 図7は、本実施の形態におけるハッシュ計算について説明するための図である。 図8は、RAMの状態遷移について説明するための図である。 図9は、RAMの状態遷移について説明するための図である。 図10は、RAMの状態遷移について説明するための図である。 図11は、拡張機能モジュールについて説明するための図である。 図12は、第2検証処理の処理フローを示す図である。 図13は、算出処理の処理フローを示す図である。 図14は、主制御装置が起動後に実行する処理の処理フローを示す図である。 図15は、トリガの組合せとCPU占有率との関係を示す図である。 図16は、コンピュータの機能ブロック図である。
図1に、本実施の形態のシステム概要を示す。例えば自動車に組み込まれた主制御装置1は、インターネット或いはVPN(Virtual Private Network)等のネットワークを介してサーバ3と無線通信を行うことができる。
主制御装置1には製造時にドライバ、OS、ミドルウエア、及びアプリケーションプログラム等がインストールされるが、運用の開始後にもサーバ3から追加でプログラムがダウンロードされる場合がある。追加でインストールされるプログラムは、例えば、機能を追加するためのプログラムや修正プログラム等である。主制御装置1に搭載されたプログラムは、ネットワークからの攻撃(例えば、悪意のあるプログラムの送り込み)によって不正に書き換えられる可能性がある。
図2に、主制御装置1のハードウエア構成を示す。主制御装置1は、CPU(Central Processing Unit)1001と、表示装置1003と、通信制御部1005、バス1007と、RAM(Random Access Memory)1009と、記憶装置1011とを有する。
記憶装置1011は、HDD(Hard Disk Drive)或いはNAND(Not AND)型フラッシュメモリ等であり、本実施の形態の処理を実行するためのプログラム、ドライバ、OS、ミドルウエア、及びアプリケーションプログラム等が格納される。記憶装置1011に格納されたプログラムは、CPU1001によって読み出され、RAM1009にロードされて実行される。例えばモニタである表示装置1003は、警告を表示する画面或いはナビゲーションのための画面等を表示する。通信制御部1005は、ネットワークを介した通信を行うためのハードウエアである。
図3に、主制御装置1の機能ブロック図を示す。主制御装置1は、第1検証部101と、第2検証部102と、算出部103と、正当値格納部104と、設定データ格納部105と、第1ハッシュ値格納部106と、第2ハッシュ値格納部107と、第3ハッシュ値格納部108とを含む。
第1検証部101は、主制御装置1の起動時に、RAM1009にロードされたプログラムの正当性を判定する処理を実行する。具体的には、第1検証部101は算出部103を呼び出し、算出部103は、正当値格納部104に格納されているデータ、設定データ格納部105に格納されているデータ、及び第1ハッシュ値格納部106に格納されているデータに基づき処理を実行し、処理結果を第2ハッシュ値格納部107及び第3ハッシュ値格納部108に格納する。第2検証部102は、主制御装置1の起動後に、RAM1009にロードされたプログラムの正当性を判定する処理を実行する。具体的には、第2検証部102は算出部103を呼び出し、算出部103は、正当値格納部104に格納されているデータ及び設定データ格納部105に格納されているデータに基づき処理を実行し、処理結果を第1ハッシュ値格納部106、第2ハッシュ値格納部107及び第3ハッシュ値格納部108に格納する。正当値格納部104、設定データ格納部105、第1ハッシュ値格納部106、第2ハッシュ値格納部107、及び第3ハッシュ値格納部108は、記憶装置1011に設けられる。従って、主制御装置1の電源が切断されたとしてもデータは消去されない。
次に、図4乃至図15を用いて、主制御装置1が実行する処理について説明する。例えば車両の運転手が、主制御装置1に電源を投入する。主制御装置1に電源が投入された場合、主制御装置1のCPU1001は、記憶装置1011に格納されている基本機能モジュールをRAM1009にロードする(図4:ステップS1)。
基本機能モジュールは、装置に初期的に搭載されたプログラム及び基本的な機能を実現するためのプログラムを含む。従って、基本機能モジュールは、例えば図5に示すように、主制御装置1の機器を制御するためのドライバと、OSと、基本的な機能を実現するためのミドルウエア及びアプリケーションプログラムとを含む。
主制御装置1の第1検証部101は、算出部103を呼び出す。そして、算出部103は、第1ハッシュ値格納部106に格納されたハッシュ値を読み出し、読み出したハッシュ値から新たにハッシュ値を算出して第2ハッシュ値格納部107に格納する。さらに、算出部103は、算出したハッシュ値から新たにハッシュ値を算出し(ステップS3)、第3ハッシュ値格納部108に格納する。
図6を用いて、本実施の形態におけるハッシュ計算について説明する。図6において、破線の矢印はハッシュ計算を示す。本実施の形態においては、メモリにロードされた、ハッシュ計算の対象となるプログラムを予め定めた数(図6においてはn(nは2以上の自然数))に分割し、分割後の各ブロックからハッシュ値を算出する。ここでは、ハッシュ値はn個算出され、第1ハッシュ値格納部106に格納される。
そして、第1ハッシュ値格納部106に格納されたn個のハッシュ値から新たに1つのハッシュ値が算出される。そして、算出されたハッシュ値は第2ハッシュ値格納部107に格納される。
さらに、第2ハッシュ値格納部107に格納されたハッシュ値から1つのハッシュ値が算出され、第3ハッシュ値格納部108に格納される。図6の例では第2ハッシュ値格納部107に格納されたハッシュ値は1つであるので、1つのハッシュ値から1つのハッシュ値が算出される。なお、この場合には第2ハッシュ値をそのまま第3ハッシュ値としてもよい。
図7を用いて、主制御装置1の起動後にRAM1009に追加でプログラムがロードされた場合におけるハッシュ計算について説明する。図7において、破線の矢印はハッシュ計算を表す。追加でプログラムがロードされた場合においては、元々ロードされていたプログラムがn個のブロックに分割され、追加でロードされたプログラムのそれぞれもn個のブロックに分割される。元々ロードされていたプログラムからはn個のハッシュ値が算出され、追加でロードされたプログラムのそれぞれからもn個のハッシュ値が算出され、算出されたハッシュ値は第1ハッシュ値格納部106に格納される。
そして、元々ロードされていたプログラムについて、第1ハッシュ値格納部106に格納されたn個のハッシュ値から新たに1つのハッシュ値が算出され、第2ハッシュ値格納部107に格納される。また、追加でロードされたプログラムのそれぞれについて、第1ハッシュ値格納部106に格納されたn個のハッシュ値から新たに1つのハッシュ値が算出され、第2ハッシュ値格納部107に格納される。
さらに、第2ハッシュ値格納部107に格納されたハッシュ値から1つのハッシュ値が算出され、第3ハッシュ値格納部108に格納される。図7の例では、第2ハッシュ値格納部107に格納されているハッシュ値の数は2以上であるので、2以上のハッシュ値から1つのハッシュ値が算出される。
このように、プログラムからハッシュ値を算出する処理と、ハッシュ値からハッシュ値を計算する処理とが有り、起動時間を長くする原因となるのは前者の処理である。そこで、ステップS3においては、主制御装置1がシャットダウンする前に算出したハッシュ値を利用することで、最終的に第3ハッシュ値格納部108に格納されるべきハッシュ値を算出するまでの時間を短縮できる。
図8乃至図10に、RAM1009の状態遷移を示す。図8は、起動直後のRAM1009の状態を示す図である。RAM1009には、起動時にロードされたプログラム(本実施の形態においては、基本機能モジュール及び拡張機能モジュール)が格納されている。この場合、ハッシュ計算の対象となるのは、太い実線で囲まれた、起動時にロードされたプログラムである。
図9は、起動後に追加でプログラムがロードされた場合におけるRAM1009の状態を示す図である。RAM1009には、起動時にロードされたプログラムと、起動後に追加でロードされたプログラムとが格納される。この場合、ハッシュ計算の対象となるのは、太い実線で囲まれた、起動時にロードされたプログラム及び起動後に追加でロードされたプログラムである。
図10は、一部のプログラムがアンロードされた場合におけるRAM1009の状態を示す図である。RAM1009には、起動時にロードされたプログラムと、起動後に追加でロードされたプログラムとが格納される。但し、起動後に追加でロードされたプログラムのうち一部のプログラムはアンロードされたので、図9の状態と比較すると、プログラムが格納された領域は狭い。この場合、ハッシュ計算の対象となるのは、太い実線で囲まれた、起動時にロードされたプログラム、及び、起動後に追加でロードされたプログラムうちアンロードされていないプログラムである。なお、第1ハッシュ値格納部106に格納されたハッシュ値及び第2ハッシュ値格納部107に格納されたハッシュ値のうちアンロードされたプログラムに対応するハッシュ値は削除される。
図4の説明に戻り、第1検証部101は、正当値格納部104から、正当なプログラムから算出されたハッシュ値を読み出し、第3ハッシュ値格納部108から、ステップS3において算出されたハッシュ値を読み出す。そして、第1検証部101は、前者のハッシュ値と後者のハッシュ値とが一致するか否かによって、主制御装置1に搭載されたプログラムが正当であるか(すなわち、書き換えられていないか)判定する(ステップS5)。但し、ステップS5において検証が行われるプログラムは、主制御装置1が停止する前のプログラムであって、ステップS5の処理時点において主制御装置1に搭載されたプログラムではない。主制御装置1が停止する前のプログラムは、基本機能モジュール、拡張機能モジュール、及び追加でインストールされたプログラム等を含む。
なお、正当値格納部104には、プログラム全体、基本機能モジュール、及び拡張機能モジュール等のそれぞれについて正当値が格納されているとする。また、プログラムをダウンロードして追加でロードするような場合には、ダウンロードの時点において正当値を求め直すものとする。なお、拡張機能モジュールは、基本的な機能以外の機能を実現するためのプログラムを含む。従って、拡張機能モジュールは、例えば図11に示すように、拡張的な機能を実現するためのドライバ、ミドルウエア、及びアプリケーションプログラムを含む。
図4の説明に戻り、プログラムが正当ではない場合(ステップS5:Noルート)、第1検証部101は、プログラムが正当ではないことを示す警告メッセージを表示装置1003に表示させる(ステップS7)。そして処理を終了する。
一方、プログラムが正当である場合(ステップS5:Yesルート)、第1検証部101は、ステップS1においてRAM1009にロードされた基本機能モジュールの実行をCPU1001に許可する(ステップS9)。これに応じ、CPU1001は、基本機能モジュールの実行を開始する。
第1検証部101は、算出部103を呼び出すことにより、RAM1009にロードされた基本機能モジュールについて第1検証処理を実行する(ステップS11)。ステップS11においては、基本機能モジュールがn個のブロックに分割され、図6を用いて説明した方法によってハッシュ値が算出される。基本機能モジュールのサイズは後述の拡張機能モジュールと比較してサイズが小さいため、第1検証処理においては、周期的なハッシュ計算を行わない。そして、第1検証部101は、基本機能モジュールについて算出されたハッシュ値(ここでは、第3ハッシュ値格納部108に格納されたハッシュ値)と正当値格納部104に格納されたハッシュ値とを比較することで、基本機能モジュールが正当であるか判定する(ステップS13)。
基本機能モジュールが正当ではない場合(ステップS13:Noルート)、第1検証部101は、基本機能モジュールが正当ではないことを示す警告メッセージを表示装置1003に表示させる(ステップS15)。そして処理を終了する。
一方、基本機能モジュールが正当である場合(ステップS13:Yesルート)、第1検証部101は、拡張機能モジュールをRAM1009にロードする(ステップS16)。
第1検証部101は、算出部103を呼び出すことにより、RAM1009にロードされた拡張機能モジュールについて第2検証処理を実行する(ステップS17)。拡張機能モジュールのサイズは基本機能モジュールと比較してサイズが大きいため、第2検証処理においては、周期的なハッシュ計算がおこなわれる。第2検証処理については、図12及び図13を用いて説明する。
まず、算出部103は、初回の処理である(すなわち、今回の呼び出しにおいて後述の算出処理を未だ実行していない)か判定する(図12:ステップS51)。初回の処理ではない場合(ステップS51:Noルート)、算出部103は、周期タイマのタイムアウトが発生したか判定する(ステップS53)。周期タイマのタイムアウトが発生していない場合(ステップS53:Noルート)、ステップS57の処理に移行する。周期タイマとは、ステップS55において算出する周期を管理するためのタイマである。
一方、初回の処理である場合(ステップS51:Yesルート)又はタイムアウトが発生した場合(ステップS53:Yesルート)、算出部103は、算出処理を実行する(ステップS55)。算出処理については、図13を用いて説明する。
まず、算出部103は、周期タイマを設定済みであるか判定する(図13:ステップS61)。ステップS61においては、周期タイマの周期CIT(秒)を設定済みであるか否かが判定される。
周期タイマを設定済みではない場合(ステップS63:Noルート)、算出部103は、周期タイマの周期CITを設定する(ステップS65)。このような周期CITを利用することで、1つのブロックからハッシュ値を算出する処理を一定の時間内に実行できるようにする。結果として、全ブロックについてのハッシュ計算が完了するのに要する時間がおおよそ一定になる。
本実施の形態においては、主制御装置1の設計時に周期CIT及びプログラムの分割数BNを設計者が予め定める。ステップS65においては、周期タイマの初期的な周期としてCITが設定される。CIT、BN、及び全ブロックからハッシュ値を算出するのに要する時間の最大許容時間MOCT(秒)は、プログラムからハッシュ値を算出する際に利用される。
また、主制御装置1のハードウエアの選定及びソフトウエアの設計を行う際に、初期プログラムのサイズAPS(バイト)及びプログラムからハッシュ値を算出する処理の処理速度CPP(バイト/秒)を設計者が予め定める。
また、設計者等は、機器の設計において、イベントに対する反応の最大遅延時間MRT(秒)及び最大CPU占有率MOR(%)の値を優先的に定める。なお、イベントに対する応答の最大遅延時間とは、特定のイベントが発生した場合に行う制御が完了するまでに要する時間の最大許容時間である。
これらのパラメタは、設定データ格納部105に予め格納される。これらのパラメタは、MOCT>APS/(CPP*MOR)、且つ、MRT>(APS/BN)/CPP、且つ、MOR>((APS/BN)/CPP)/CIT、という関係が成立するように定められる。
これらの関係から、BN>APS/(MRT*CPP)、CIT>APS/(MOR*CPP*BN)、MOCT>APS/(MOR*CPP)という関係を導出することができる。
図13の説明に戻り、算出部103は、ブロック番号Nを初期化する(ステップS67)。ステップS67においては、ブロック番号Nに「0」が設定される。そして呼び出し元の処理に戻る。
一方、周期タイマを設定済みである場合(ステップS63:Yesルート)、算出部103は、周期タイマを起動する(ステップS68)。ステップS68の処理により、時間の計測が開始される。
算出部103は、ブロック番号Nを1インクリメントする(ステップS69)。そして、算出部103は、RAM1009にロードされたプログラム(ここでは、拡張機能モジュール)におけるN番目のブロックからハッシュ値を算出し、第1ハッシュ値格納部106に格納する(ステップS71)。
算出部103は、ブロック番号N=BNが成立するか判定する(ステップS73)。ブロック番号N=BNが成立しない場合(ステップS73:Noルート)、呼び出し元の処理に戻る。
一方、ブロック番号N=BNが成立する場合(ステップS73:Yesルート)、算出部103は、第1ハッシュ値格納部106に格納されたハッシュ値から新たにハッシュ値を算出し、第2ハッシュ値格納部107に格納する(ステップS75)。
算出部103は、第2ハッシュ値格納部107に格納されたハッシュ値から新たにハッシュ値を算出し、第3ハッシュ値格納部108に格納する。そして、算出部103は、周期タイマを停止して設定を解除する(ステップS77)。そして呼び出し元の処理に戻る。
図12の説明に戻り、算出部103は、ブロック番号N=BNが成立するか判定する(ステップS57)。ブロック番号N=BNが成立しない場合(ステップS57:Noルート)、ステップS51の処理に戻る。一方、ブロック番号N=BNが成立する場合(ステップS57:Yesルート)、呼び出し元の処理に戻る。
図4の説明に戻り、第1検証部101は、拡張機能モジュールについて算出されたハッシュ値(ここでは、第3ハッシュ値格納部108に格納されたハッシュ値)と正当値格納部104に格納されたハッシュ値とを比較することで、拡張機能モジュールが正当であるか判定する(ステップS19)。
拡張機能モジュールが正当ではない場合(ステップS19:Noルート)、第1検証部101は、拡張機能モジュールが正当ではないことを示す警告メッセージを表示装置1003に表示させる(ステップS15)。そして処理を終了する。
一方、拡張機能モジュールが正当である場合(ステップS19:Yesルート)、第1検証部101は、ステップS16においてRAM1009にロードされた拡張機能モジュールの実行をCPU1001に許可する(ステップS20)。これに応じ、CPU1001は、拡張機能モジュールの実行を開始する。そして処理を終了する。
以上のような処理を実行すれば、プログラムからハッシュ値を算出する処理を起動時にしなくてよいので、起動に要する時間を短縮できるようになる。また、基本機能モジュールと比較すると拡張機能モジュールはサイズが大きいので、単純に検証を行うと時間がかかる。しかし、予めブロック数BN及び周期CIT等を定めておき、それらに従ってハッシュ値の算出を行うので、検証に要する時間が長くなることを抑制できるようになる。本実施の形態によれば、おおよそ一定の時間で拡張機能モジュールの検証を完了できるようになる。
そして、プログラムが正当ではない(例えば、製造時のプログラムと同じではない)と判定した場合には警告メッセージを表示するので、ユーザは警告メッセージに応じた対応を行えるようになる。
次に、図14及び図15を用いて、主制御装置1が起動後に実行する処理について説明する。本処理を実行するためのスレッドは定期的に起動される。なお、本処理が複数スレッドによって並行して行われる場合もある。
まず、第2検証部102は、検証開始のトリガが発生したか判定する(図14:ステップS21)。本実施の形態において、検証開始のトリガとは、(1)単位時間当たりに受信するデータの量が閾値(以下、RTとする)を超えること、(2)単位時間当たりに送信するデータの量が閾値(以下、STとする)を超えること、(3)基本機能モジュールがロードされた領域への書き換えが発生したこと、(4)拡張機能モジュールがロードされた領域において書き換えられたデータの量が閾値を超えたこと、(5)前回にトリガが発生してから一定時間が経過したこと、といったトリガである。但し、RT>STとし、RT及びSTは、設計時に想定する最大の通信データの量より多いとする。
検証開始のトリガが発生していない場合(ステップS23:Noルート)、処理を終了する。検証開始のトリガが発生した場合(ステップS23:Yesルート)、第2検証部102は、第2検証処理を実行中であるか判定する(ステップS25)。上述のトリガは任意のタイミングで発生するため、第2検証処理を実行中に新たなトリガが発生し、第2検証処理が重複して実行される場合がある。
第2検証処理を実行中ではない場合(ステップS27:Noルート)、第2検証部102は、ステップS21において発生したと判定されたトリガの情報を記録する(ステップS29)。そして、第2検証部102は、算出部103を呼び出すことにより、RAM1009にロードされたプログラムについて第2検証処理を実行する(ステップS31)。第2検出処理については図12及び図13を用いて説明したので、ここでは説明を省略する。なお、ステップS31において検証の対象となるプログラムは、基本機能モジュール、拡張機能モジュール、及び追加でロードされたプログラムを含む。
なお、ステップS31の第2検証処理が完了した場合、第2検証部102は、変更された周期CITをデフォルトの値に戻すものとする。
第2検証部102は、RAM1009にロードされたプログラムについて算出されたハッシュ値(ここでは、第3ハッシュ値格納部108に格納されたハッシュ値)と正当値格納部104に格納されたハッシュ値とを比較することで、RAM1009にロードされたプログラムが正当であるか判定する(ステップS38)。
RAM1009にロードされたプログラムが正当ではない場合(ステップS38:Noルート)、第2検証部102は、RAM1009にロードされたプログラムが正当ではないことを示す警告メッセージを表示装置1003に表示させる(ステップS39)。RAM1009にロードされたプログラムが正当である場合(ステップS38:Yesルート)、処理を終了する。
一方、第2検証処理を実行中である場合(ステップS27:Yesルート)、第2検証部102は、今回発生したトリガの情報を記録し、既に発生したトリガと今回発生したトリガとの組合せを判定する(ステップS33)。発生したトリガの情報は、ステップS29及びステップS33において記録されているので、その情報を用いて組合せが判定される。
図15に、発生したトリガの組合せとMORとの関係を示す。括弧付きの数字は、ステップS21についての説明において使用した、トリガを表す番号である。但し、ここではトリガ(1)から(4)についての組合せのみを示す。「*」は(1)から(4)のうちいずれかのトリガが発生するか或いはいずれのトリガも発生しないことを表す。図15に示すように、本実施の形態においては、トリガの組合せに含まれるトリガの数が多いほど、MORを高い値に設定する。すると、CIT>APS/(MOR*CPP*BN)に従って、CITはより短くなる。これにより、1ブロックからハッシュ値を算出するのに要する時間が短くなる。但し、MORが100(%)にならないように設定が行われる。
図14の説明に戻り、第2検証部102は、周期CITを変更するか判断する(ステップS35)。周期CITを変更しない場合(ステップS35:Noルート)、処理を終了する。一方、周期CITを変更する場合(ステップS35:Yesルート)、第2検証部102は、トリガの組合せ及び図15に示した関係に従いMORを変更する。さらに、第2検証部102は、変更後のMORに従い周期CITを変更する(ステップS37)。そして処理を終了する。なお、一旦周期CITが変更されると、ステップS31の第2検証処理が完了するまで周期CITの値は元の値には戻らない。
以上のような処理を実行すれば、状況に応じて周期CITを変更できるので、検証処理に時間がかかってしまうことをさらに抑制できるようになる。
また、起動後においてはトリガが発生した場合にのみ検証を開始するので、CPU1001に過剰な負荷がかかることがない。
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した主制御装置1の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
また、上で説明したデータ保持構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
なお、起動時に基本機能モジュール或いは拡張機能モジュールが正当ではないと判定された場合、起動を停止してもよい。
なお、上で述べたサーバ3は、コンピュータ装置であって、図16に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本発明の実施の形態をまとめると、以下のようになる。
本実施の形態に係るプログラム検証方法は、(A)コンピュータが停止する前にプログラムの各部分から算出した第1の値を、コンピュータの起動時に第1記憶部から読み出し、(B)読み出した第1の値と、第2記憶部に記憶された、正当なプログラムの各部分から算出した第2の値とに基づき、プログラムの正当性を判定する処理を含む。
このようにすれば、プログラムから値を算出する処理をコンピュータの起動時に行わなくてもよいので、起動に要する時間を短縮できるようになる。
また、本プログラム検証方法は、(C)コンピュータの起動後に、検証を開始するための条件である開始条件が満たされるか判断し、(D)開始条件が満たされた場合、メモリにロードされたプログラムの各部分について、第1の時間内に第3の値を算出し、(E)第2の値と、算出した第3の値とに基づき、プログラムの正当性を判定する処理をさらに含んでもよい。このようにすれば、プログラムの各部分から値を算出する処理に要する時間が長くなることを抑制できるようになる。
また、本プログラム検証方法は、(F)プログラムの各部分について第3の値を算出する処理を実行中に、開始条件がさらに満たされた場合、メモリにロードされたプログラムの各部分について、第1の時間より短い第2の時間内に第3の値を算出する処理をさらに含んでもよい。このようにすれば、開始条件が重畳的に満たされるような場合には検証が完了するまでに要する時間を短くできるようになる。
また、上で述べた開始条件は、単位時間あたりにコンピュータが受信するデータの量が第1の量を超えたという条件、単位時間あたりにコンピュータが送信するデータの量が第2の量を超えたという条件、プログラムのうちオペレーティングシステムを含む第1の部分がロードされた領域に書き込みが行われたという条件、プログラムのうち第1の部分以外の分がロードされた領域に書き込まれたデータの量が第3の量を超えたという条件、及び前回開始条件が満たされてから所定時間が経過したという条件の少なくともいずれかを含んでもよい。このようにすれば、プログラムが書き換えられる可能性がある場合に検証を開始できるようになる。
また、本プログラム検証方法は、(G)コンピュータの起動後に、プログラムとは異なる他のプログラムがさらにメモリにロードされた場合、メモリにロードされた他のプログラムの各部分について、第1の時間内に第4の値を算出し、(H)第3の値及び第4の値と、第2の値とに基づき、プログラム及び他のプログラムの正当性を判定する処理をさらに含んでもよい。このようにすれば、他のプログラムが追加でロードされるような場合においても、値を算出するのに要する時間が長くなることを抑制しつつ、他のプログラムの正当性を判定できるようになる。
また、本プログラム検証方法は、(I)第1の時間及び第2の時間を、少なくともプログラムのサイズ、プロセッサの占有率、単位時間あたりに処理できるデータ量、及びプログラムの分割数に基づき決定する処理をさらに含んでもよい。このようにすれば、第1の時間及び第2の時間を適切に算出できるようになる。
また、プログラムの各部分から算出される値はハッシュ値であり、第1の値及び第2の値はハッシュ値であってもよい。
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。

Claims (9)

  1. プログラムから算出した値によって前記プログラムの正当性を検証するプログラム検証方法であって、
    コンピュータが、
    前記コンピュータが停止する前に前記プログラムの各部分から算出した第1の値を、前記コンピュータの起動時に第1記憶部から読み出し、
    読み出した前記第1の値と、第2記憶部に記憶された、正当なプログラムの各部分から算出した第2の値とに基づき、前記プログラムの正当性を判定する、
    処理を実行するプログラム検証方法。
  2. 前記コンピュータが、
    前記コンピュータの起動後に、検証を開始するための条件である開始条件が満たされるか判断し、
    前記開始条件が満たされた場合、メモリにロードされた前記プログラムの各部分について、第1の時間内に第3の値を算出し、
    前記第2の値と、算出した前記第3の値とに基づき、前記プログラムの正当性を判定する、
    処理をさらに実行する請求項1記載のプログラム検証方法。
  3. 前記コンピュータが、
    前記プログラムの各部分について前記第3の値を算出する処理を実行中に、前記開始条件がさらに満たされた場合、前記メモリにロードされた前記プログラムの各部分について、前記第1の時間より短い第2の時間内に前記第3の値を算出する、
    処理をさらに実行する請求項2記載のプログラム検証方法。
  4. 開始条件は、単位時間あたりに前記コンピュータが受信するデータの量が第1の量を超えたという条件、単位時間あたりに前記コンピュータが送信するデータの量が第2の量を超えたという条件、前記プログラムのうちオペレーティングシステムを含む第1の部分がロードされた領域に書き込みが行われたという条件、前記プログラムのうち前記第1の部分以外の分がロードされた領域に書き込まれたデータの量が第3の量を超えたという条件、及び前回前記開始条件が満たされてから所定時間が経過したという条件の少なくともいずれかを含む
    請求項2又は3記載のプログラム検証方法。
  5. 前記コンピュータが、
    前記コンピュータの起動後に、前記プログラムとは異なる他のプログラムがさらに前記メモリにロードされた場合、前記メモリにロードされた前記他のプログラムの各部分について、前記第1の時間内に第4の値を算出し、
    前記第3の値及び前記第4の値と、前記第2の値とに基づき、前記プログラム及び前記他のプログラムの正当性を判定する、
    処理をさらに実行する請求項2記載のプログラム検証方法。
  6. 前記コンピュータが、
    前記第1の時間及び前記第2の時間を、少なくとも前記プログラムのサイズ、プロセッサの占有率、単位時間あたりに処理できるデータ量、及び前記プログラムの分割数に基づき決定する、
    処理をさらに実行する請求項3記載のプログラム検証方法。
  7. 前記プログラムの各部分から算出される値はハッシュ値であり、
    前記第1の値及び前記第2の値はハッシュ値である、
    請求項1記載のプログラム検証方法。
  8. プログラムから算出した値によって前記プログラムの正当性を検証する処理を実行させるための検証プログラムであって、
    コンピュータに、
    前記コンピュータが停止する前に前記プログラムの各部分から算出した第1の値を、前記コンピュータの起動時に第1記憶部から読み出し、
    読み出した前記第1の値と、第2記憶部に記憶された、正当なプログラムの各部分から算出した第2の値とに基づき、前記プログラムの正当性を判定する、
    処理を実行させるための検証プログラム。
  9. プログラムから算出した値によって前記プログラムの正当性を検証する処理を実行させる情報処理装置であって、
    前記情報処理装置が停止する前に前記プログラムの各部分から算出した第1の値を格納する第1記憶部と、
    正当なプログラムの各部分から算出した第2の値を格納する第2記憶部と、
    前記情報処理装置の起動時に前記第1の値を第1記憶部から読み出し、読み出した前記第1の値と、前記第2記憶部に記憶された前記第2の値とに基づき、前記プログラムの正当性を判定する判定部と、
    を有する情報処理装置。
JP2017518679A 2015-05-20 2015-05-20 プログラム検証方法、検証プログラム、及び情報処理装置 Active JP6601491B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/064428 WO2016185577A1 (ja) 2015-05-20 2015-05-20 プログラム検証方法、検証プログラム、及び情報処理装置

Publications (2)

Publication Number Publication Date
JPWO2016185577A1 true JPWO2016185577A1 (ja) 2018-02-22
JP6601491B2 JP6601491B2 (ja) 2019-11-06

Family

ID=57319690

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017518679A Active JP6601491B2 (ja) 2015-05-20 2015-05-20 プログラム検証方法、検証プログラム、及び情報処理装置

Country Status (4)

Country Link
US (1) US10872141B2 (ja)
EP (1) EP3299986A4 (ja)
JP (1) JP6601491B2 (ja)
WO (1) WO2016185577A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6949416B2 (ja) * 2017-07-13 2021-10-13 株式会社デンソー 電子制御装置、プログラム改ざん検知方法
JP6463435B1 (ja) * 2017-10-04 2019-02-06 三菱電機株式会社 制御装置および制御方法
EP3748528A4 (en) * 2018-02-02 2020-12-09 NEC Corporation INFORMATION PROCESSING DEVICE, INFORMATION PROCESSING METHOD AND RECORDING MEDIUM
JP6659180B2 (ja) * 2018-04-16 2020-03-04 三菱電機株式会社 制御装置および制御方法
JP7179482B2 (ja) * 2018-04-19 2022-11-29 キヤノン株式会社 情報処理装置、制御方法、およびそのプログラム
EP3895939A4 (en) * 2019-01-30 2022-08-24 Hitachi Astemo, Ltd. ELECTRONIC CONTROL DEVICE AND SAFETY VERIFICATION METHOD FOR ELECTRONIC CONTROL DEVICE

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009009372A (ja) * 2007-06-28 2009-01-15 Panasonic Corp 情報端末、クライアントサーバシステムおよびプログラム
JP2012032925A (ja) * 2010-07-29 2012-02-16 Canon Inc プラットフォーム完全性検証システム
JP2015049785A (ja) * 2013-09-03 2015-03-16 株式会社デンソー プログラム処理装置
JP2015055898A (ja) * 2013-09-10 2015-03-23 富士通セミコンダクター株式会社 セキュアブート方法、半導体装置、及び、セキュアブートプログラム

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6026293A (en) 1996-09-05 2000-02-15 Ericsson Inc. System for preventing electronic memory tampering
US6263431B1 (en) * 1998-12-31 2001-07-17 Intle Corporation Operating system bootstrap security mechanism
US7103779B2 (en) 2003-09-18 2006-09-05 Apple Computer, Inc. Method and apparatus for incremental code signing
US7533274B2 (en) * 2003-11-13 2009-05-12 International Business Machines Corporation Reducing the boot time of a TCPA based computing system when the core root of trust measurement is embedded in the boot block code
US7594124B2 (en) * 2004-06-09 2009-09-22 Intel Corporation Cross validation of data using multiple subsystems
US8291226B2 (en) * 2006-02-10 2012-10-16 Qualcomm Incorporated Method and apparatus for securely booting from an external storage device
SE531992C2 (sv) * 2006-02-24 2009-09-22 Oniteo Ab Metod och system för säker programvaruprovisionering
US8122258B2 (en) * 2006-05-22 2012-02-21 Hewlett-Packard Development Company, L.P. System and method for secure operating system boot
US20080126779A1 (en) * 2006-09-19 2008-05-29 Ned Smith Methods and apparatus to perform secure boot
WO2009044533A1 (ja) * 2007-10-05 2009-04-09 Panasonic Corporation セキュアブート端末、セキュアブート方法、セキュアブートプログラム、記録媒体及び集積回路
US20090193211A1 (en) * 2008-01-24 2009-07-30 Broadcom Corporation Software authentication for computer systems
JP5466645B2 (ja) * 2008-08-22 2014-04-09 インターナショナル・ビジネス・マシーンズ・コーポレーション 記憶装置、情報処理装置およびプログラム
US8738932B2 (en) * 2009-01-16 2014-05-27 Teleputers, Llc System and method for processor-based security
US8812854B2 (en) * 2009-10-13 2014-08-19 Google Inc. Firmware verified boot
JP5315422B2 (ja) 2012-01-10 2013-10-16 任天堂株式会社 データ認証方法およびデータ認証システム
US9070251B2 (en) * 2013-03-08 2015-06-30 Igt Multi-tiered static chain of trust
US9740863B2 (en) * 2014-11-25 2017-08-22 Intel Corporation Protecting a secure boot process against side channel attacks
US10153904B2 (en) * 2015-04-29 2018-12-11 Ncr Corporation Validating resources execution

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009009372A (ja) * 2007-06-28 2009-01-15 Panasonic Corp 情報端末、クライアントサーバシステムおよびプログラム
JP2012032925A (ja) * 2010-07-29 2012-02-16 Canon Inc プラットフォーム完全性検証システム
JP2015049785A (ja) * 2013-09-03 2015-03-16 株式会社デンソー プログラム処理装置
JP2015055898A (ja) * 2013-09-10 2015-03-23 富士通セミコンダクター株式会社 セキュアブート方法、半導体装置、及び、セキュアブートプログラム

Also Published As

Publication number Publication date
US20180096132A1 (en) 2018-04-05
JP6601491B2 (ja) 2019-11-06
EP3299986A1 (en) 2018-03-28
US10872141B2 (en) 2020-12-22
EP3299986A4 (en) 2018-05-16
WO2016185577A1 (ja) 2016-11-24

Similar Documents

Publication Publication Date Title
JP6601491B2 (ja) プログラム検証方法、検証プログラム、及び情報処理装置
JP6244759B2 (ja) セキュアブート方法、半導体装置、及び、セキュアブートプログラム
JP5575338B2 (ja) 情報処理装置、情報処理方法、およびコンピュータプログラム
US8806655B1 (en) Providing limited versions of applications
US9205809B2 (en) Vehicle unit and method for operating the vehicle unit
US20170255775A1 (en) Software verification systems with multiple verification paths
US9104841B2 (en) Methods and systems for executing protected content
JP5796447B2 (ja) 情報処理装置、正当性検証方法、正当性検証プログラム
TWI604336B (zh) 使用外部裝置之運行時驗證技術
JP7411902B1 (ja) 情報処理装置、情報処理装置の制御方法及びプログラム
US10915623B2 (en) Information processing apparatus, information processing method, and computer program product
JP2019020872A (ja) 電子制御装置、プログラム改ざん検知方法
CN108920159B (zh) 一种安全升级方法、装置及电子设备
CN108647119A (zh) Linux系统的启动方法、装置及设备
JP2006053787A (ja) プログラム実行装置及びプログラム実行方法
US20060129744A1 (en) Method and apparatus for enabling non-volatile content filtering
US11893113B2 (en) Return-oriented programming protection
CN112882733A (zh) 应用更新方法及装置、电子设备、存储介质
US20070239959A1 (en) Device for testing the Structural Coverage of a Software Program and a Method Implementing the Device
JP6541912B2 (ja) 情報処理装置およびアクセス管理プログラム
WO2012127635A1 (ja) 情報処理装置、修正適用判定プログラムおよび修正適用判定方法
WO2024057571A1 (ja) 情報処理装置、情報処理装置の制御方法及びプログラム
JP7341376B2 (ja) 情報処理装置、情報処理方法、及び、情報処理プログラム
WO2022255005A1 (ja) 監視システム、監視方法、監視装置および機能制限装置
JP6252321B2 (ja) メモリ制御方法及び情報処理装置

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171102

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171102

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190129

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190329

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190806

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190822

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190910

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190923

R150 Certificate of patent or registration of utility model

Ref document number: 6601491

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150