(57)【要約】【課題】ホワイトリストを用いた、プログラムの検証時間の短縮を図る。【解決手段】情報処理装置１０は、推定部３０Ｆと、保存処理部３０Ｈと、取得部３０Ａと、検証部３０Ｅと、を備える。推定部３０Ｆは、特定のプログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。保存処理部３０Ｈは、関連プログラムの計算結果と、関連プログラムを識別する関連識別子と、を対応づけて事前計算結果リスト１５Ａに登録する。取得部３０Ａは、実行対象のプログラムを識別するプログラム識別子を取得する。検証部３０Ｅは、事前計算結果リスト１５Ａにおける、取得したプログラム識別子と、取得したプログラム識別子を示す関連識別子に対応する計算結果と、ホワイトリスト１４Ａと、に基づいて、実行対象のプログラムの実行の可否を検証する。【選択図】図３
2020161189.tif 000002
【特許請求の範囲】
【請求項１】
操作対象の第１のプログラムを識別する第１のプログラム識別子と、前記第１のプログラム識別子に対応する第１の計算結果と、がホワイトリストに登録されているか否かを検証する第１の検証部と、
前記第１のプログラム識別子と前記第１の計算結果とが前記ホワイトリストに登録されている場合、前記第１のプログラムに関連する第２のプログラムを識別する第２のプログラム識別子と、前記第２のプログラム識別子に対応する第２の計算結果と、が前記ホワイトリストに登録されているか否かを検証する第２の検証部と、
前記第２のプログラム識別子と前記第２の計算結果とが前記ホワイトリストに登録されている場合、前記第１のプログラムに対する操作を行う操作部と、
を備える情報処理装置。
【請求項２】
予め計算された前記第２の計算結果と、前記第２のプログラム識別子と、を対応づけて事前計算結果リストに登録する保存処理部をさらに備え、
前記第２の検証部は、前記第２のプログラム識別子に対応する前記第２の計算結果を前記事前計算結果リストから読み出し、読み出した前記第２の計算結果と前記第２のプログラム識別子とが前記ホワイトリストに登録されているか否かを検証する、
請求項１に記載の情報処理装置。
【請求項３】
前記第２の計算結果は、前記第２のプログラムのチェックサム、および、前記ホワイトリストにおける前記第２のプログラム識別子の登録箇所を示す索引、の少なくとも一方である、
請求項１に記載の情報処理装置。
【請求項４】
前記事前計算結果リストに、前記第２の計算結果が未登録である場合、前記第２の計算結果を計算する計算部を備え、
前記第２の検証部は、
前記事前計算結果リストに、前記第２の計算結果が登録されている場合、登録されている前記第２の計算結果と前記第２のプログラム識別子とが前記ホワイトリストに登録されているか否かを検証し、
前記事前計算結果リストに、前記第２の計算結果が未登録である場合、前記計算部によって計算された前記第２の計算結果と前記第２のプログラム識別子とが前記ホワイトリストに登録されているか否かを検証する、
請求項２に記載の情報処理装置。
【請求項５】
前記第２の計算結果は、前記第２のプログラムのチェックサムであり、
前記第２の検証部は、
前記事前計算結果リストにおける、前記第２のプログラム識別子に対応するチェックサムと、前記第２のプログラム識別子と、が対応づけて前記ホワイトリストに登録されているか否かを示す検証結果を導出する、
請求項２または請求項４に記載の情報処理装置。
【請求項６】
前記第２の計算結果は、前記ホワイトリストにおける、前記第２のプログラム識別子の登録箇所を示す索引であり、
前記第２の検証部は、
前記第２のプログラム識別子と、前記事前計算結果リストにおける、前記第２のプログラム識別子に対応する前記索引と、が前記ホワイトリストに登録されているか否かを検証する、
請求項２または請求項４に記載の情報処理装置。
【請求項７】
前記事前計算結果リストに登録されている前記第２のプログラム識別子の数は、前記ホワイトリストに登録されているプログラム識別子の数より少なく、
前記第２の検証部は、
前記第２のプログラム識別子が前記事前計算結果リストに登録されている場合、前記第２のプログラム識別子と、前記第２の計算結果と、が前記事前計算結果リストに登録されているか否かを検証し、
前記第２のプログラム識別子が前記事前計算結果リストに登録されていない場合、前記第２のプログラム識別子と、前記第２の計算結果と、が前記ホワイトリストに登録されているか否かを検証する、
を含む、
請求項２または請求項４に記載の情報処理装置。
【請求項８】
操作対象のプログラムを識別するプログラム識別子として取得された前記第１のプログラムに関連する前記第２のプログラムを推定する推定部をさらに備える、
請求項１〜請求項７の何れか１項に記載の情報処理装置。
【請求項９】
前記第１の検証部によって前回検証されたプログラムである前記第１のプログラムに関連する前記第２のプログラムを推定する推定部をさらに備える、
請求項１〜請求項７の何れか１項に記載の情報処理装置。
【請求項１０】
前記推定部は、
前記第１のプログラム識別子と、前記第２のプログラム識別子と、を対応づけた関連プログラムリストから、前記第１のプログラム識別子によって識別される前記第１のプログラムに関連する前記第２のプログラムを推定する、
請求項８または請求項９に記載の情報処理装置。
【請求項１１】
前記第２の検証部による検証結果に基づいて、前記関連プログラムリストを更新する更新部を備える、請求項１０に記載の情報処理装置。
【請求項１２】
前記ホワイトリストの変更を監視するホワイトリスト監視部を備え、
前記ホワイトリスト監視部は、
前記ホワイトリストが変更されたときに、前記事前計算結果リストにおける、該変更に対応する情報を更新する、請求項２に記載の情報処理装置。
【請求項１３】
前記事前計算結果リストに関する情報の変更を監視する事前計算結果監視部を備え、
前記事前計算結果監視部は、
前記事前計算結果リストに関する情報が変更されたときに、該事前計算結果リストにおける対応箇所を更新する、
請求項２に記載の情報処理装置。
【請求項１４】
操作対象の第１のプログラムを識別する第１のプログラム識別子と、前記第１のプログラム識別子に対応する第１の計算結果と、がホワイトリストに登録されているか否かを検証するステップと、
前記第１のプログラム識別子と前記第１の計算結果とが前記ホワイトリストに登録されている場合、前記第１のプログラムに関連する第２のプログラムを識別する第２のプログラム識別子と、前記第２のプログラム識別子に対応する第２の計算結果と、が前記ホワイトリストに登録されているか否かを検証するステップと、
前記第２のプログラム識別子と前記第２の計算結果とが前記ホワイトリストに登録されている場合、前記第１のプログラムに対する操作を行うステップと、
を含む情報処理方法。
【請求項１５】
操作対象の第１のプログラムを識別する第１のプログラム識別子と、前記第１のプログラム識別子に対応する第１の計算結果と、がホワイトリストに登録されているか否かを検証するステップと、
前記第１のプログラム識別子と前記第１の計算結果とが前記ホワイトリストに登録されている場合、前記第１のプログラムに関連する第２のプログラムを識別する第２のプログラム識別子と、前記第２のプログラム識別子に対応する第２の計算結果と、が前記ホワイトリストに登録されているか否かを検証するステップと、
前記第２のプログラム識別子と前記第２の計算結果とが前記ホワイトリストに登録されている場合、前記第１のプログラムに対する操作を行うステップと、
をコンピュータに実行されるための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施の形態は、情報処理装置、情報処理方法、および情報処理プログラムに関する。
【背景技術】
【０００２】
不正なプログラムの実行を防止する技術が知られている。例えば、実行可能なプログラムの一覧とプログラムのチェックサムとを予めホワイトリストに登録する。そして、実行対象のプログラムを、ホワイトリストを用いて検証する技術が開示されている。
【０００３】
しかし、１つのプロセスの実行の際には、複数のプログラムの実行や複数のプログラムの読み込みが発生する場合がある。このため、実行対象の複数のプログラムのチェックサムの計算や、ホワイトリストからの該当プログラムの検索に、時間を要する場合があった。このため、従来では、ホワイトリストを用いたプログラムの検証に時間を要していた。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第２０１２−００３０７３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、ホワイトリストを用いた、プログラムの検証時間の短縮を図ることができる、情報処理装置、情報処理方法、および情報処理プログラムを提供することである。
【課題を解決するための手段】
【０００６】
実施形態の情報処理装置は、推定部と、保存処理部と、取得部と、検証部と、を備える。推定部は、特定のプログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。保存処理部は、前記関連プログラムの計算結果と、前記関連プログラムを識別する関連識別子と、を対応づけて事前計算結果リストに登録する。取得部は、実行対象の前記プログラムを識別する前記プログラム識別子を取得する。検証部は、取得した前記プログラム識別子と、前記事前計算結果リストにおける、取得した前記プログラム識別子を示す前記関連識別子に対応する前記計算結果と、ホワイトリストと、に基づいて、実行対象の前記プログラムの実行の可否を検証する。
【図面の簡単な説明】
【０００７】
【図１】情報処理システムの一例を示す模式図。
【図２】情報処理システムが実行する処理の流れを示すシーケンス図。
【図３】情報処理装置の機能的構成を示すブロック図。
【図４】情報処理の手順を示すフローチャート。
【図５】情報処理装置の機能的構成を示すブロック図。
【図６】情報処理装置の機能的構成を示すブロック図。
【図７】情報処理の手順の一例を示すフローチャート。
【図８】情報処理装置の機能的構成を示すブロック図。
【図９】情報処理の手順の一例を示すフローチャート。
【図１０】情報処理装置の機能的構成を示すブロック図。
【図１１】情報処理の手順を示すフローチャート。
【図１２】情報処理装置の機能的構成を示すブロック図。
【図１３】割込処理の手順を示すフローチャート。
【図１４】情報処理装置のハードウェア構成図。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、情報処理装置、情報処理方法、および情報処理プログラムを詳細に説明する。
【０００９】
（第１の実施の形態）
図１は、本実施の形態の情報処理システム１の一例を示す模式図である。
【００１０】
情報処理システム１は、情報処理装置１０と、処理装置２０と、を備える。情報処理装置１０と、処理装置２０とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。
【００１１】
処理装置２０は、アプリケーションを実行する装置である。アプリケーションは、例えば、産業用システムにおける特定の業務を実現するためのアプリケーションである。本実施の形態では、処理装置２０は、処理装置２０で実行する対象（実行対象）のプログラムの実行可否の検証を、情報処理装置１０へ依頼する。
【００１２】
情報処理装置１０は、検証を依頼されたプログラムについて、ホワイトリスト１４Ａを用いた検証を行う。
【００１３】
情報処理装置１０は、処理部１２と、ホワイトリスト記憶部１４と、を含む。処理部１２とホワイトリスト記憶部１４は、データや信号を授受可能に接続されている。処理部１２は、プログラムの検証処理などを実行する（詳細後述）。ホワイトリスト記憶部１４は、ホワイトリスト１４Ａを記憶する。
【００１４】
ホワイトリスト１４Ａは、実行を許可する対象のプログラムのプログラム識別子と、プログラムのチェックサムと、を対応付けたリストである。
【００１５】
本実施の形態では、プログラムには、処理装置２０で実行対象のプログラムが含まれる。本実施の形態では、プログラムは、例えば、処理装置２０で実行対象のｅｘｅファイルや、共有ライブラリ（ｄｙｎａｍｉｃ  ｌｉｎｋ  ｌｉｂｒａｒｙ：ＤＬＬ）である。
【００１６】
プログラム識別子は、プログラムを識別するための識別子である。プログラム識別子は、例えば、ｅｘｅ識別子や、ｄｌｌ識別子である。
【００１７】
ｅｘｅ識別子は、ｅｘｅファイルを識別するための情報である。ｅｘｅ識別子の形式は、情報処理装置１０がｅｘｅファイルを識別可能な形式であればよい。例えば、ｅｘｅ識別子の形式は、ホワイトリスト１４Ａに記載されているプログラム識別子（ここではｅｘｅ識別子）と同じ形式である。
【００１８】
ｄｌｌ識別子は、ｄｌｌ（共有ライブラリ）を識別するための情報である。ｄｌｌ識別子の形式は、情報処理装置１０がｄｌｌを識別可能な形式であればよい。例えば、ｄｌｌ識別子の形式は、ホワイトリスト１４Ａに記載されているプログラム識別子（ここではｄｌｌ識別子）と同じ形式である。
【００１９】
具体的には、プログラム識別子（ｅｘｅ識別子、ｄｌｌ識別子）は、プログラムの名前、プログラムのパス、システムで使用されているエントリの識別子、物理ストレージデバイスにおけるアドレスなどで表される。エントリの識別子は、例えば、Ｌｉｎｕｘ（登録商標）のｉノード番号である。
【００２０】
チェックサムは、対応するプログラムを検証するための検証符号である。チェックサムは、対応するプログラムが変更されない限り、常に一定の値となる。プログラムに変更が施された場合には、異なる値を示す、チェックサムを用いることが好ましい。
【００２１】
チェックサムは、例えば、ハッシュ値、誤り検出符号、ファイルサイズ、アクセス時刻、デジタル署名、メッセージ認証符号（Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ：  ＭＡＣ）などである。また、チェックサムは、例えば、対応するプログラムに対して任意の関数を適用することで導出された、数値または文字列であってもよい。
【００２２】
ハッシュ値は、対応するプログラムに対して、暗号学的ハッシュ関数を適用することで得られる。暗号学的ハッシュ関数は、例えば、ＭＤ５、ＳＨＡ−１、ＳＨＡ−２５６、ＳＨＡ−５１２、ＳＨＡ−３などである。誤り検出符号は、例えば、巡回冗長符号などである。
【００２３】
なお、ホワイトリスト１４Ａには、予め、実行を許可する対象のプログラムのプログラム識別子と、プログラムのチェックサムと、が対応付けて登録されている。例えば、ホワイトリスト１４Ａには、処理装置２０で実行される予定の全てのプログラムのプログラム識別子とチェックサムが、情報処理装置１０の起動前に予め登録されている。また、ホワイトリスト１４Ａは、情報処理装置１０の停止中に、外部装置などによって、更新されてもよい。
【００２４】
本実施の形態では、情報処理装置１０は、実行対象のプログラムの検証依頼として、該プログラムのプログラム識別子を、処理装置２０から取得する。そして、情報処理装置１０は、取得したプログラム識別子によって識別されるプログラムの検証処理を実行する（詳細後述）。そして、情報処理装置１０は、検証結果を処理装置２０へ出力する。
【００２５】
処理装置２０は、ユーザ空間１６と、カーネル１８と、を有する。
【００２６】
カーネル１８は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：オペレーティングシステム）の中核を構成するソフトウェアである。カーネル１８は、アプリケーションの実行に適した単位で分割されたプロセスを生成し、プロセスの動作に必要な資源（ＣＰＵ、メモリ領域、外部デバイスとのアクセスなど）を管理する。
【００２７】
ユーザ空間１６は、ＯＳ上で動作するアプリケーションが使用するメモリ領域である。すなわち、ユーザ空間１６は、プロセスがアクセス可能なメモリ領域である。
【００２８】
本実施の形態では、カーネル１８は、ユーザ空間１６で実行対象のプログラムの、実行に必要な処理を行う。本実施の形態では、カーネル１８は、実行対象のプログラムの実行可否の検証を情報処理装置１０へ依頼する。
【００２９】
カーネル１８は、ユーザ空間１６の実行呼出プロセス１６Ｂや動的リンカ１６Ｃからの依頼に応じて、実行対象のプログラムのプログラム識別子を情報処理装置１０へ送信し、該プログラムの検証を情報処理装置１０へ依頼する。
【００３０】
具体的には、実行呼出プロセス１６Ｂは、実行対象のプログラムの実行を新規に開始する。一方、プロセス１６Ａは、自身のみで処理を実行する。実行呼出プロセス１６Ｂは、ｅｘｅ情報１６Ｅを用いて、実行対象のｅｘｅファイルの実行をカーネル１８へ依頼する。
【００３１】
ｅｘｅ情報１６Ｅは、ｅｘｅファイルの実行に必要な情報である。ｅｘｅ情報１６Ｅは、例えば、ｅｘｅファイルを特定するための情報や、ｅｘｅファイルの挙動を変更するための引数のリストや、環境変数の内容、等を含む。ｅｘｅファイルを特定するための情報は、例えば、ｅｘｅファイルのファイルパス等である。
【００３２】
カーネル１８は、実行対象のｅｘｅファイルの検証依頼を、情報処理装置１０へ出力する。カーネル１８は、受付けた検証結果が“実行可”を示す場合、実行対象のｅｘｅファイルに対応する新規プロセス１６Ｄを生成する。
【００３３】
動的リンカ１６Ｃは、ユーザ空間１６内のプロセスの１つである。新規プロセス１６Ｄによるアプリケーションの実行に、共有ライブラリ内の関数の実行を要する場合がある。この場合、動的リンカ１６Ｃは、新規プロセス１６Ｄによる共有ライブラリの読込に必要な処理を実行する。具体的には、動的リンカ１６Ｃは、ｄｌｌ情報１６Ｆを用いて、カーネル１８に共有ライブラリの読込を依頼する。
【００３４】
ｄｌｌ情報１６Ｆとは、新規プロセス１６Ｄが参照可能なＲＡＭ上の領域に、共有ライブラリを読み込むために、必要な情報である。ｄｌｌ情報１６Ｆは、例えば、ユーザ空間１６内でアクセス可能な仮想アドレス、共有ライブラリを特定するための情報、などが含まれる。なお、アクセスする仮想アドレスが事前に決められている場合には、ｄｌｌ情報１６Ｆに仮想アドレスは含まれない。
【００３５】
カーネル１８は、動的リンカ１６Ｃからの依頼を受付けると、共有ライブラリの読込の実行可否の検証依頼を、情報処理装置１０へ依頼する。カーネル１８は、情報処理装置１０から受付けた検証結果が、“実行可”を示す場合、共有ライブラリの読込に必要な処理を実行する。
【００３６】
なお、本実施の形態では、処理装置２０と情報処理装置１０とは、別体として構成された形態を説明する。しかし、処理装置２０と情報処理装置１０とを一体的に構成してもよい。例えば、処理装置２０と情報処理装置１０とを同じハードウェア上で実行させてもよい。また、例えば、情報処理装置１０は、処理装置２０で実行されるプロセス１６Ａの１つとして存在してもよい。また、情報処理装置１０は、カーネル１８の機能の一部として存在してもよい。
【００３７】
次に、情報処理システム１が実行する処理の流れを説明する。図２は、情報処理システム１が実行する処理の流れの一例を示す、シーケンス図である。
【００３８】
まず、実行呼出プロセス１６Ｂが、実行対象のプログラムとして、ｅｘｅファイルの実行処理を起動する（ステップＳ１）。すると、実行呼出プロセス１６Ｂは、該ｅｘｅファイルのｅｘｅ情報１６Ｅを、カーネル１８へ通知する（ステップＳ２）。
【００３９】
カーネル１８は、ｅｘｅ情報１６Ｅを取得すると共に、該ｅｘｅ情報１６Ｅの送信元の実行呼出プロセス１６Ｂの情報を取得する（ステップＳ３）。
【００４０】
実行呼出プロセス１６Ｂの情報は、例えば、実行呼出プロセス１６Ｂの実行を指示したユーザのユーザ情報、実行対象のｅｘｅファイルにアクセス可能なユーザのユーザ情報、実行対象のｅｘｅファイルに関する情報、実行対象のｅｘｅファイルのファイル形式、実行対象のｅｘｅファイルに記載されている動的リンカ１６Ｃのファイルパス名、などである。
【００４１】
カーネル１８は、ステップＳ２で取得したｅｘｅ情報１６Ｅによって特定される、ｅｘｅファイルの実行可否を判断する（ステップＳ４）。例えば、カーネル１８は、該ｅｘｅ情報１６Ｅの送信元の実行呼出プロセス１６Ｂが、該ｅｘｅファイルの実行権限を有するか否かを判断する。この判断は、例えば、実行対象のｅｘｅファイルにアクセス可能なユーザのユーザ情報を用いて行う。
【００４２】
ステップＳ４で実行可と判断した場合、ステップＳ５へ進む。なお、ステップＳ４で実行否と判断した場合、カーネル１８は、実行不可を示す検証結果を実行呼出プロセス１６Ｂへ出力し、本シーケンスを終了する。
【００４３】
ステップＳ５では、カーネル１８は、ステップＳ２で取得したｅｘｅ情報１６Ｅによって特定されるｅｘｅファイルの検証依頼を、情報処理装置１０へ送信する（ステップＳ５）。すなわち、カーネル１８は、実行対象のプログラムであるｅｘｅファイルのｅｘｅ識別子を、情報処理装置１０へ送信する（ステップＳ６）。
【００４４】
ステップＳ６の処理によって、情報処理装置１０は、実行対象のプログラムのプログラム識別子として、ｅｘｅ識別子を取得する。情報処理装置１０は、ステップＳ６で取得したｅｘｅ識別子によって識別されるｅｘｅファイルについて、ホワイトリスト１４Ａを用いた検証処理を実行する（ステップＳ７）。そして、情報処理装置１０は、検証結果をカーネル１８へ出力する（ステップＳ８）。なお、ステップＳ７およびステップＳ８の処理については、詳細を後述する。
【００４５】
カーネル１８は、情報処理装置１０から検証結果を取得する（ステップＳ９）。カーネル１８は、ステップＳ９で取得した検証結果が、実行対象のｅｘｅファイルの実行可を示すか否かを判断する（ステップＳ１０）。
【００４６】
ステップＳ１０で実行可を示すと判断した場合、ステップＳ１１へ進む。なお、ステップＳ１０で実行不可を示す判断した場合、カーネル１８は、実行不可を示す検証結果を実行呼出プロセス１６Ｂへ出力し、本シーケンスを終了する。
【００４７】
ステップＳ１１では、カーネル１８が、新規プロセス１６Ｄを生成する（ステップＳ１１、ステップＳ１２）。新規プロセス１６Ｄは、ステップＳ１で受付けたｅｘｅ情報１６Ｅによって特定されるｅｘｅファイルに対応する、新規のプロセスである。
【００４８】
次に、カーネル１８は、動的リンカ１６Ｃのプロセスを生成する（ステップＳ１３、１４）。動的リンカ１６Ｃは、新規プロセス１６Ｄのアプリケーション実行に要する、共有ライブラリの読込処理を起動し、ｄｌｌ情報１６Ｆをカーネル１８へ通知する（ステップＳ１５、Ｓ１６）。
【００４９】
カーネル１８は、動的リンカ１６Ｃの要求を受けて、動的リンカ１６Ｃの情報やｄｌｌ情報１６Ｆを取得する（ステップＳ１７）。
【００５０】
カーネル１８は、取得したｄｌｌ情報１６Ｆを用いて、共有ライブラリの読込可否を判断する（ステップＳ１８）。例えば、カーネル１８は、ステップＳ２のｅｘｅ情報の送信元の実行呼出プロセス１６Ｂが、該共有ライブラリの読込権限を有するか否かを、上記ユーザ情報を用いて判断する。ステップＳ１８で読込否と判断した場合、本シーケンスを終了する。一方、ステップＳ１８で読込可と判断した場合、ステップＳ１９へ進む。
【００５１】
ステップＳ１９では、カーネル１８が、ステップＳ１７で取得したｄｌｌ情報１６Ｆによって特定される共有ライブラリの検証依頼を、情報処理装置１０へ送信する（ステップＳ２０）。すなわち、カーネル１８は、実行対象のプログラムである共有ライブラリのｄｌｌ識別子を、情報処理装置１０へ送信する（ステップＳ２０）。
【００５２】
ステップＳ２０の処理によって、情報処理装置１０は、実行対象のプログラムのプログラム識別子として、ｄｌｌ識別子を取得する。情報処理装置１０は、取得したｄｌｌ識別子によって識別されるｄｌｌ（共有ライブラリ）について、ホワイトリスト１４Ａを用いた検証処理を実行する（ステップＳ２１）。そして、情報処理装置１０は、検証結果をカーネル１８へ出力する（ステップＳ２２）。なお、ステップＳ２１およびステップＳ２２の処理については、詳細を後述する。
【００５３】
カーネル１８は、情報処理装置１０から検証結果を取得する（ステップＳ２３）。カーネル１８は、ステップＳ２３で取得した検証結果が、実行対象の共有ライブラリの読込の実行可を示すか否かを判断する（ステップＳ２４）。
【００５４】
ステップＳ２４で実行可を示すと判断した場合、ステップＳ２５へ進む。なお、ステップＳ２４で実行不可を示す判断した場合、カーネル１８は、実行不可を示す検証結果を実行呼出プロセス１６Ｂへ出力し、本シーケンスを終了する。
【００５５】
ステップＳ２５では、カーネル１８が、実行可と検証された共有ライブラリの読込処理を実行する（ステップＳ２５）。具体的には、カーネル１８は、共有ライブラリの内容をＲＡＭ上に展開し、動的リンカ１６Ｃへ処理完了を通知する（ステップＳ２６）。
【００５６】
処理完了の通知を受付けると、動的リンカ１６Ｃは、新規プロセス１６Ｄに共有ライブラリの読込完了を通知する（ステップＳ２７、Ｓ２８）。新規プロセス１６Ｄは、所定のアプリケーションの実行を開始する（ステップＳ２９）。そして、本シーケンスを終了する。
【００５７】
なお、新規プロセス１６Ｄの実行時に、情報処理システム１が実行する処理の流れは、上記流れに限定されない。
【００５８】
例えば、図２に示すシーケンスでは、カーネル１８が情報処理装置１０に対して検証依頼（ステップＳ５、ステップＳ１９）を行う前に、ｅｘｅファイルの実行可否の判断や共有ライブラリの読込可否の判断を行っている（ステップＳ４、ステップＳ１８）。
【００５９】
しかし、ｅｘｅファイルの実行可否の判断や共有ライブラリの読込可否の判断（ステップＳ４、ステップＳ１８）は、検証結果に基づいた判断時（ステップＳ１０、ステップＳ２４）に纏めて行ってもよい。
【００６０】
また、図２に示すシーケンスでは、カーネル１８が動的リンカ１６Ｃを呼び出している（ステップＳ１４）。しかし、カーネル１８や新規プロセス１６Ｄが、直接、共有ライブラリの読込処理を実行してもよい。
【００６１】
また、上記では、実行対象として、ｅｘｅファイルの実行や共有ライブラリの読込を対象としている。しかし、プログラムに対する操作は、実行や読込に限定されない。
【００６２】
例えば、プログラムに対する操作は、新規プログラムの作成、プログラムの書換、プログラムパス上の位置の移動、プログラムのコピー、プログラムファイル名の変更、外部デバイスに対する書込・読込、などがある。なお、外部デバイスとは、例えば、ＵＳＢスティック等の外部記憶装置、ＮＩＣ（ネットワークインターフェースデバイス）等である。
【００６３】
そして、処理装置２０のカーネル１８は、これらの操作の実行の際に、操作対象のプログラムの識別子を、実行対象のプログラムのプログラム識別子として、情報処理装置１０へ送信してもよい。これによって、処理装置２０は、これらの操作対象のプログラムの検証を情報処理装置１０へ依頼してもよい。
【００６４】
図２に示すように、新規プロセス１６Ｄの実行時に、ｅｘｅファイルが共有ライブラリを読み込む場合、ｅｘｅファイルの実行可否の検証に加えて、共有ライブラリの読込可否の検証を行う必要がある。また、１つの実行対象のｅｘｅファイルが、複数の共有ライブラリを読み込むことや、複数の他の実行対象のｅｘｅファイルを呼び出す場合がある。このため、１つの新規プロセス１６Ｄの実行時に、複数のプログラム（ｅｘｅファイル、共有ライブラリ）について検証が必要となる場合がある。この場合、情報処理装置１０が、逐次チェックサムを計算して検証を行うと、ホワイトリスト記憶部１４を用いたプログラムの検証に時間を要する場合があった。
【００６５】
そこで、本実施の形態の情報処理装置１０は、特有の情報処理を実行する。
【００６６】
次に、情報処理装置１０の機能的構成を説明する。図３は、情報処理装置１０の機能的構成の一例を示すブロック図である。
【００６７】
情報処理装置１０は、処理部１２と、ホワイトリスト記憶部１４と、事前計算結果記憶部１５と、を備える。処理部１２と、ホワイトリスト記憶部１４および事前計算結果記憶部１５と、は、データや信号を授受可能に接続されている。
【００６８】
処理部１２は、取得部３０Ａと、判断部３０Ｂと、チェックサム計算部３０Ｃと、特定部３０Ｄと、検証部３０Ｅと、推定部３０Ｆと、関連プログラムチェックサム計算部３０Ｇと、保存処理部３０Ｈと、を備える。
【００６９】
上記各部（取得部３０Ａ、判断部３０Ｂ、チェックサム計算部３０Ｃ、特定部３０Ｄ、検証部３０Ｅ、推定部３０Ｆ、関連プログラムチェックサム計算部３０Ｇ、および保存処理部３０Ｈ）は、例えば、１または複数のプロセッサにより実現される。
【００７０】
例えば、上記各部は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち１つを実現してもよいし、各部のうち２以上を実現してもよい。
【００７１】
取得部３０Ａは、実行対象のプログラムを識別するプログラム識別子を取得する。上述したように、実行対象のプログラムは、ｅｘｅファイルや、共有ライブラリ等である。またプログラム識別子は、上述したように、例えば、ｅｘｅ識別子や、ｄｌｌ識別子である。
【００７２】
すなわち、取得部３０Ａは、実行対象のプログラムを識別するプログラム識別子を、検証依頼として、処理装置２０から取得する。取得部３０Ａは、取得したプログラム識別子を、判断部３０Ｂおよび推定部３０Ｆへ出力する。
【００７３】
判断部３０Ｂは、取得部３０Ａで取得したプログラム識別子によって識別されるプログラムについて、チェックサムの計算が必要であるか否かを判断する。判断部３０Ｂは、事前計算結果記憶部１５に記憶されている事前計算結果リスト１５Ａを用いて、判断を行う。
【００７４】
事前計算結果記憶部１５は、事前計算結果リスト１５Ａを記憶する。事前計算結果リスト１５Ａは、関連プログラムを識別する関連識別子と、関連プログラムの計算結果と、を対応づけたリストである。
【００７５】
関連プログラムとは、ホワイトリスト１４Ａにおける、特定のプログラム識別子によって識別されるプログラムに関連する、他のプログラムである。なお、以下では、特定のプログラム識別子によって識別されるプログラムを、単に、特定のプログラムと称して説明する場合がある。
【００７６】
例えば、関連プログラムは、特定のプログラムと同じ記憶領域に記憶されている他のプログラムである。同じ記憶領域は、例えば、同じディレクトリである。また、関連プログラムは、特定のプログラムを実行したときに連動して実行される可能性のある、他のプログラムである。また、関連プログラムは、特定のプログラムを実行するアプリケーションによって実行される、他のプログラムである。
【００７７】
特定のプログラム識別子とは、ホワイトリスト１４Ａに登録されているプログラム識別子の内、何れかのプログラム識別子であればよい。例えば、特定のプログラム識別子は、ホワイトリスト１４Ａにおける、取得部３０Ａが取得したプログラム識別子である。また、例えば、特定のプログラム識別子は、ホワイトリスト１４Ａにおける、取得部３０Ａが前回取得したプログラム識別子である。
【００７８】
なお、前回とは、直前であることを示す。すなわち、特定のプログラム識別子は、ホワイトリスト１４Ａにおける、取得部３０Ａが直前に取得したプログラム識別子であってもよい。
【００７９】
また、例えば、特定のプログラム識別子は、ホワイトリスト１４Ａにおける、後述する検証部３０Ｅによって前回（直前に）検証されたプログラムのプログラム識別子である。また、例えば、特定のプログラム識別子は、ホワイトリスト１４Ａにおける、検証部３０Ｅによって前回（直前に）検証されたプログラムであって、実行可を示す検証結果の導出されたプログラムのプログラム識別子である。
【００８０】
なお、特定のプログラム識別子は、ホワイトリスト１４Ａにおける、前回（直前に）検証または取得したプログラムのプログラム識別子に限定されない。すなわち、特定のプログラム識別子は、ホワイトリスト１４Ａにおける、検証部３０Ｅによって過去に検証された、または、取得部３０Ａが過去に取得した、プログラム識別子の何れかであってもよい。
【００８１】
本実施の形態では、特定のプログラム識別子が、取得部３０Ａが直前に取得したプログラム識別子であり、検証部３０Ｅが直前に検証したプログラムのプログラム識別子である場合を、一例として説明する。
【００８２】
関連プログラムの計算結果とは、関連プログラムに対して何等かの計算処理を施すことで得られる値である。例えば、関連プログラムの計算結果は、関連プログラムのチェックサム、および、ホワイトリスト１４Ａにおける、関連識別子を示すプログラム識別子の登録箇所を示す索引、の少なくとも一方である。
【００８３】
なお、関連識別子を示すプログラム識別子、または、プログラム識別子を示す関連識別子、とは、関連識別子とプログラム識別子が同じ値（識別子）であることを意味する。
【００８４】
本実施の形態では、関連プログラムの計算結果が、関連プログラムのチェックサムである場合を一例として説明する。このため、事前計算結果リスト１５Ａは、関連識別子と、チェックサムと、を対応づけたリストである場合を、説明する。
【００８５】
関連識別子および関連プログラムの計算結果（チェックサム）は、後述する推定部３０Ｆおよび関連プログラムチェックサム計算部３０Ｇによって事前に計算され、事前計算結果記憶部１５に登録されている。また、事前計算結果リスト１５Ａは、後述する推定部３０Ｆ、関連プログラムチェックサム計算部３０Ｇ、保存処理部３０Ｈによって更新される。
【００８６】
判断部３０Ｂは、取得部３０Ａで取得したプログラム識別子を示す関連識別子および該関連識別子に対応するチェックサムが、事前計算結果リスト１５Ａに登録されているか否かを判別する。この判別により、判断部３０Ｂは、チェックサムの計算が必要であるか否かを判断する。
【００８７】
そして、判断部３０Ｂは、チェックサムの計算が必要と判断した場合、取得部３０Ａから受付けたプログラム識別子を、チェックサム計算部３０Ｃへ出力する。チェックサム計算部３０Ｃは、プログラム識別子を判断部３０Ｂから受け付けると、受付けたプログラム識別子によって識別されるプログラムのチェックサムを計算する。
【００８８】
例えば、チェックサム計算部３０Ｃは、受付けたプログラム識別子によって識別されるプログラムの、ファイルパスを取得する。そして、チェックサム計算部３０Ｃは、取得したファイルパスを用いて、該プログラム識別子によって識別されるプログラムを開く命令を実行する。これにより、チェックサム計算部３０Ｃは、該プログラムの内容をバイナリ文字列として取得する。そして、チェックサム計算部３０Ｃは、このバイナリ文字列を暗号学的ハッシュ関数に入力することで、チェックサムを計算する。
【００８９】
また、例えば、該プログラムファイル、または、該プログラムファイルのバイナリ文字列は、情報処理装置１０上ではない外部装置（例えば、処理装置２０）から取得してもよい。その際、受付けたプログラム識別子を外部装置に送信し、外部装置で検索された該プログラム、または、該バイナリ文字列を受信する機能を備えていてもよい。
【００９０】
なお、チェックサムの計算に用いるバイナリ文字列は、該プログラムの内容以外のものを含んでいてもよい。例えば、このバイナリ文字列は、受付けたプログラム識別子によって識別されるプログラムのメタ情報を含んでいてもよい。メタ情報は、例えば、ファイルサイズ、アクセス権、タイムスタンプ、などである。
【００９１】
チェックサム計算部３０Ｃは、判断部３０Ｂから受付けたプログラム識別子と、計算したチェックサムと、を検証部３０Ｅへ出力する。
【００９２】
一方、判断部３０Ｂは、チェックサムの計算が不要と判断した場合、取得部３０Ａから受付けたプログラム識別子を、特定部３０Ｄへ出力する。
【００９３】
特定部３０Ｄは、判断部３０Ｂから受付けたプログラム識別子を示す関連識別子に対応するチェックサムを、事前計算結果リスト１５Ａから読取る。これによって、特定部３０Ｄは、受付けたプログラム識別子に対応するチェックサムを特定する。特定部３０Ｄは、判断部３０Ｂから受付けたプログラム識別子と、特定したチェックサムと、を検証部３０Ｅへ出力する。
【００９４】
検証部３０Ｅは、取得したプログラム識別子と、事前計算結果リスト１５Ａにおける、取得したプログラム識別子を示す関連識別子に対応する計算結果と、ホワイトリスト１４Ａと、に基づいて、実行対象のプログラムの実行の可否を検証する。
【００９５】
上述したように、本実施の形態では、計算結果が、関連プログラムのチェックサムである場合を説明する。このため、検証部３０Ｅは、事前計算結果リスト１５Ａにおける、取得したプログラム識別子を示す関連識別子に対応するチェックサムと、取得したプログラム識別子と、が対応づけてホワイトリスト１４Ａに登録されている場合、実行対象のプログラムの実行可を示す検証結果を導出する。
【００９６】
具体的には、検証部３０Ｅは、チェックサム計算部３０Ｃまたは特定部３０Ｄから、プログラム識別子およびチェックサムを受付ける。
【００９７】
検証部３０Ｅは、受付けたプログラム識別子とチェックサムが、対応づけてホワイトリスト１４Ａに登録されている場合、実行可を示す検証結果を導出する。詳細には、検証部３０Ｅは、特定部３０Ｄまたはチェックサム計算部３０Ｃから受付けたチェックサムと、ホワイトリスト１４Ａにおける、取得部３０Ａで取得したプログラム識別子に対応するチェックサムと、が一致する場合、実行可を示す検証結果を導出する。
【００９８】
一方、検証部３０Ｅは、取得部３０Ａで取得したプログラム識別子がホワイトリスト１４Ａに登録されていない場合、実行不可を示す検証結果を導出する。また、検証部３０Ｅは、特定部３０Ｄまたはチェックサム計算部３０Ｃから受付けたチェックサムと、ホワイトリスト１４Ａにおける、取得部３０Ａで取得したプログラム識別子に対応するチェックサムと、が不一致である場合、実行不可を示す検証結果を導出する。
【００９９】
このように、事前計算結果リスト１５Ａに、取得部３０Ａで取得したプログラム識別子を示す関連識別子が登録されている場合、検証部３０Ｅは、事前計算結果リスト１５Ａから特定されたチェックサムと、ホワイトリスト１４Ａにおける該プログラム識別子に対応するチェックサムと、を比較することで、検証結果を導出する。このため、情報処理装置１０は、チェックサムの計算時間の削減を図ることができる。
【０１００】
一方、推定部３０Ｆは、特定のプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。すなわち、推定部３０Ｆは、ホワイトリスト１４Ａに登録されていることが想定される、特定のプログラム識別子について、関連する関連プログラムを推定する。特定のプログラム識別子、および関連プログラムの定義は、上述したため、ここでは記載を省略する。
【０１０１】
例えば、推定部３０Ｆは、取得部３０Ａが取得したプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。
【０１０２】
なお、本実施の形態では、推定部３０Ｆは、取得部３０Ａで取得されたプログラム識別子に基づいた検証が検証部３０Ｅで実行された後に、推定部３０Ｆが関連識別子の推定処理を行う。
【０１０３】
このため、本実施の形態では、推定部３０Ｆは、検証部３０Ｅによる検証処理が終了した後に、取得部３０Ａから受付けたプログラム識別子を用いて、該プログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。
【０１０４】
これにより、推定部３０Ｆは、ホワイトリスト１４Ａにおける、検証部３０Ｅによって前回（直前に）検証されたプログラムに関連する、関連プログラムを推定する。
【０１０５】
なお、推定部３０Ｆは、検証部３０Ｅによる検証結果が実行可を示す場合にのみ、検証されたプログラムに関連する関連プログラムを推定してもよい。
【０１０６】
推定部３０Ｆによる関連プログラムの推定方法は、限定されない。例えば、推定部３０Ｆは、取得部３０Ａで取得したプログラム識別子から、該プログラム識別子によって識別されるプログラムのファイルパスを取得する。そして、推定部３０Ｆは、該ファイルパスに示される場所（例えば、ディレクトリ）に保持されている他のプログラムを、関連プログラムとして特定する。これによって、推定部３０Ｆは、関連プログラムを推定する。
【０１０７】
また、例えば、推定部３０Ｆは、取得部３０Ａで取得したプログラム識別子から、該プログラム識別子によって識別されるプログラムを取得する。そして、該プログラムの内容を解析し、該プログラムが実行または読込むプログラムを、関連プログラムとして特定する。
【０１０８】
なお、推定部３０Ｆは、１つのプログラム識別子に対して、１または複数の関連プログラムを推定すればよい。このため、推定部３０Ｆが推定する関連プログラムの数は、１つに限定されない。
【０１０９】
推定部３０Ｆは、推定した関連プログラムの関連識別子を、関連プログラムチェックサム計算部３０Ｇへ出力する。
【０１１０】
関連プログラムチェックサム計算部３０Ｇは、受け付けた関連識別子によって識別される関連プログラムのチェックサムを計算する。例えば、関連プログラムチェックサム計算部３０Ｇは、受付けた関連識別子を用いて、関連プログラムのファイルパスを取得する。そして、関連プログラムチェックサム計算部３０Ｇは、取得したファイルパスを用いて、該関連識別子によって識別される関連プログラムを開く命令を実行する。これにより、関連プログラムチェックサム計算部３０Ｇは、該関連プログラムの内容をバイナリ文字列として取得する。そして、関連プログラムチェックサム計算部３０Ｇは、このバイナリ文字列を暗号学的ハッシュ関数に入力することで、チェックサムを計算する。
【０１１１】
なお、チェックサムの計算に用いるバイナリ文字列は、該プログラムの内容以外のものを含んでいてもよい。例えば、このバイナリ文字列は、受付けた関連識別子によって識別される関連プログラムのメタ情報を含んでいてもよい。メタ情報は、例えば、ファイルサイズ、アクセス権、タイムスタンプ、などである。
【０１１２】
関連プログラムチェックサム計算部３０Ｇは、関連識別子と、該関連識別子によって識別される関連プログラムのチェックサムと、を保存処理部３０Ｈへ出力する。
【０１１３】
保存処理部３０Ｈは、関連プログラムの計算結果と、関連プログラムを識別する関連識別子と、を対応付けて事前計算結果リスト１５Ａに登録する。
【０１１４】
本実施の形態では、保存処理部３０Ｈは、関連プログラムチェックサム計算部３０Ｇから受付けた、関連識別子およびチェックサムを対応付けて、事前計算結果リスト１５Ａに登録する。
【０１１５】
このため、事前計算結果リスト１５Ａは、推定部３０Ｆ、関連プログラムチェックサム計算部３０Ｇ、および保存処理部３０Ｈによって更新される。すなわち、事前計算結果リスト１５Ａには、ホワイトリスト１４Ａに登録されているプログラム識別子の内、特定のプログラム識別子によって識別されるプログラムに関連する関連プログラムの関連識別子と、関連プログラムのチェックサムと、が対応づけて登録される。
【０１１６】
このため、取得部３０Ａが新たなプログラム識別子を取得した際には、該プログラム識別子を示す関連識別子およびチェックサムが、既に事前計算結果リスト１５Ａに登録されている可能性が高い。これは、推定部３０Ｆによって、特定のプログラムに関連する関連プログラムが事前に推定され、該関連プログラムの関連識別子と事前に計算されたチェックサムとが対応づけて事前計算結果リスト１５Ａに登録されているためである。
【０１１７】
よって、取得部３０Ａが新たに取得したプログラム識別子を示す関連識別子とチェックサムとが対応づけて事前計算結果リスト１５Ａに既に登録されている場合、処理部１２は、チェックサムの計算時間の短縮を図ることができる。このため、本実施の形態の情報処理装置１０は、検証時間の短縮を図ることができる。
【０１１８】
次に、本実施の形態の情報処理装置１０が実行する、情報処理の手順の一例を説明する。図４は、本実施の形態の情報処理装置１０が実行する、情報処理の手順の一例を示す、フローチャートである。なお、図４に示すフローチャートは、図２に示すステップＳ７とステップＳ８の処理、および、ステップＳ２１とステップＳ２２の処理、の詳細な説明の一例である。
【０１１９】
まず、取得部３０Ａが、実行対象のプログラムを識別するプログラム識別子を取得する（ステップＳ１００）。
【０１２０】
次に、判断部３０Ｂが、ステップＳ１００で取得したプログラム識別子によって識別されるプログラムについて、チェックサムの計算が必要であるか否かを判断する（ステップＳ１０２）。判断部３０Ｂは、事前計算結果記憶部１５に記憶されている事前計算結果リスト１５Ａを用いて、判断を行う。ステップＳ１０２で肯定判断すると（ステップＳ１０２：Ｙｅｓ）、ステップＳ１０４へ進む。
【０１２１】
ステップＳ１０４では、特定部３０Ｄが、ステップＳ１００で取得したプログラム識別子を示す関連識別子に対応するチェックサムを、事前計算結果リスト１５Ａから読取る。これによって、特定部３０Ｄは、受付けたプログラム識別子に対応するチェックサムを特定する（ステップＳ１０４）。そして、ステップＳ１０８へ進む。
【０１２２】
一方、ステップＳ１０２で否定判断すると（ステップＳ１０２：Ｎｏ）、ステップＳ１０６へ進む。ステップＳ１０６では、チェックサム計算部３０Ｃが、ステップＳ１００で取得したプログラム識別子によって識別されるプログラムのチェックサムを計算する（ステップＳ１０６）。そして、ステップＳ１０８へ進む。
【０１２３】
ステップＳ１０８では、検証部３０Ｅが、ステップＳ１０４で特定またはステップＳ１０６で計算されたチェックサムと、ステップＳ１００で取得したプログラム識別子と、ホワイトリスト１４Ａと、を用いて、該プログラム識別子によって識別されるプログラムの実行可否を検証する（ステップＳ１０８）。そして、検証部３０Ｅは、実行可または実行不可を示す検証結果を、処理装置２０へ出力する（ステップＳ１１０）。
【０１２４】
次に、推定部３０Ｆが、ステップＳ１００で取得したプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する（ステップＳ１１２）。
【０１２５】
次に、関連プログラムチェックサム計算部３０Ｇは、ステップＳ１１２で推定された関連プログラムのチェックサムを計算する（ステップＳ１１４）。次に、保存処理部３０Ｈが、ステップＳ１１２で推定された関連プログラムの関連識別子と、該関連プログラムについてステップＳ１１４で計算されたチェックサムと、を対応づけて事前計算結果リスト１５Ａへ登録する（ステップＳ１１６）。そして、本ルーチンを終了する。
【０１２６】
以上説明したように、本実施の形態の情報処理装置１０は、推定部３０Ｆと、保存処理部３０Ｈと、取得部３０Ａと、検証部３０Ｅと、を備える。推定部３０Ｆは、特定のプログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。保存処理部３０Ｈは、関連プログラムの計算結果と、関連プログラムを識別する関連識別子と、を対応づけて事前計算結果リスト１５Ａに登録する。取得部３０Ａは、実行対象のプログラムを識別するプログラム識別子を取得する。検証部３０Ｅは、事前計算結果リスト１５Ａにおける、取得したプログラム識別子と、取得したプログラム識別子を示す関連識別子に対応する計算結果と、ホワイトリスト１４Ａと、に基づいて、実行対象のプログラムの実行の可否を検証する。
【０１２７】
このように、本実施の形態の情報処理装置１０では、事前計算結果リスト１５Ａに、推定された関連プログラムの関連識別子と計算結果とが対応づけて登録される。このため、検証部３０Ｅは、取得したプログラム識別子と、事前計算結果リスト１５Ａにおける、取得したプログラム識別子を示す関連識別子に対応する計算結果と、ホワイトリスト１４Ａと、を用いて検証を行うことで、ホワイトリスト１４Ａを用いた、プログラムの検証時間の短縮を図ることができる。
【０１２８】
従って、本実施の形態の情報処理装置１０は、ホワイトリスト１４Ａを用いた、プログラムの検証時間の短縮を図ることができる。
【０１２９】
（変形例）
なお、上記第１の実施の形態では、推定部３０Ｆが、取得部３０Ａで取得したプログラムによって識別されるプログラムから、関連プログラムを推定する形態を説明した。
【０１３０】
しかし、推定部３０Ｆによる関連プログラムの推定方法は、第１の実施の形態に示す方法に限定されない。例えば、推定部３０Ｆは、予め生成された関連プログラムに関するリスト（関連プログラムリスト）を用いて、関連プログラムを推定してもよい。
【０１３１】
なお、本変形例において、上記実施の形態と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本変形例において、上記実施の形態と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
【０１３２】
図１は、本変形例の情報処理システム１Ａの一例を示す模式図である。
【０１３３】
情報処理システム１Ａは、情報処理装置１０Ａと、処理装置２０と、を備える。情報処理装置１０Ａと、処理装置２０とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置２０は、第１の実施の形態と同様である。情報処理装置１０Ａは、処理部１２Ａと、ホワイトリスト記憶部１４と、を備える。
【０１３４】
次に、情報処理装置１０Ａについて説明する。図５は、本変形例の情報処理装置１０Ａの機能的構成の一例を示すブロック図である。
【０１３５】
情報処理装置１０Ａは、処理部１２Ａと、ホワイトリスト記憶部１４と、事前計算結果記憶部１５と、関連プログラムリスト記憶部２２と、を備える。事前計算結果記憶部１５、ホワイトリスト記憶部１４、および関連プログラムリスト記憶部２２と、処理部１２Ａと、はデータや信号を授受可能に接続されている。ホワイトリスト記憶部１４および事前計算結果記憶部１５は、第１の実施の形態と同様である。
【０１３６】
関連プログラムリスト記憶部２２は、関連プログラムリスト２２Ａを記憶する。関連プログラムリスト２２Ａは、特定のプログラムを識別するプログラム識別子と、特定のプログラムに関連する関連プログラムを識別する関連識別子と、を対応づけたリストである。特定のプログラム、関連プログラム、および関連識別子の定義は、第１の実施の形態と同様である。
【０１３７】
関連プログラムリスト記憶部２２は、関連プログラムリスト２２Ａを予め記憶する。例えば、関連プログラムリスト２２Ａは、ホワイトリスト１４Ａの作成時や更新時に、生成・更新される。
【０１３８】
関連プログラムリスト２２Ａに登録されているプログラム識別子は、ホワイトリスト１４Ａに登録されている複数のプログラム識別子の内の、一部である。
【０１３９】
例えば、処理部１２Ａは、ホワイトリスト１４Ａの生成・更新時に、ホワイトリスト１４Ａに含まれる複数のプログラム識別子の内の一部を抽出する。そして、処理部１２Ａは、抽出したプログラム識別子によって識別されるプログラムに関連する関連プログラムの関連識別子を特定する。例えば、処理部１２Ａは、抽出したプログラム識別子によって識別されるプログラムから呼び出される、他のプログラムの識別子を、関連識別子として特定する。
【０１４０】
そして、処理部１２Ａは、ホワイトリスト１４Ａから抽出したプログラム識別子と、プログラム識別子によって識別されるプログラムに関連する関連プログラムの関連識別子と、を対応づけて関連プログラムリスト２２Ａに登録する。
【０１４１】
次に、処理部１２Ａについて説明する。処理部１２Ａは、取得部３０Ａと、判断部３０Ｂと、チェックサム計算部３０Ｃと、特定部３０Ｄと、検証部３０Ｅと、推定部３１Ｆと、関連プログラムチェックサム計算部３０Ｇと、保存処理部３０Ｈと、を備える。処理部１２Ａは、推定部３０Ｆに代えて推定部３１Ｆを備える点以外は、第１の実施の形態の処理部１２と同様である。
【０１４２】
推定部３１Ｆは、関連プログラムリスト２２Ａから、特定のプログラム識別子によって識別されるプログラムに関連する関連プログラムを推定する。すなわち、推定部３１Ｆは、関連プログラムリスト２２Ａにおける、特定のプログラム識別子に対応する関連識別子を読取ることで、該関連識別子によって識別される関連プログラムを推定する。
【０１４３】
なお、推定部３１Ｆは、関連識別子の読取時に、関連プログラムリスト２２Ａの加工やデータの追加を行ってもよい。
【０１４４】
例えば、推定部３１Ｆは、関連プログラムリスト２２Ａから読取った、特定のプログラム識別子に対応する関連識別子の各々について、各々の関連識別子を示すプログラム識別子に対応する、他の関連識別子を読取る。そして、推定部３１Ｆは、読取った他の関連識別子を、該特定のプログラム識別子に更に対応づけて登録してもよい。これによって、推定部３１Ｆは、関連プログラムリスト２２Ａに更なる関連識別子を追加してもよい。
【０１４５】
また、例えば、推定部３１Ｆは、関連プログラムリスト２２Ａから読取った、特定のプログラム識別子に対応する複数の関連識別子から、一定数の関連識別子を選択し、選択した関連識別子を関連プログラムリスト２２Ａから削除してもよい。
【０１４６】
このように、推定部３１Ｆが関連プログラムリスト２２Ａを用いて関連プログラムを推定することで、本変形例の情報処理装置１０Ａは、上記第１の実施の形態の効果に加えて、更に、処理部１２Ａ全体の処理時間の短縮を図ることができる。
【０１４７】
（第２の実施の形態）
なお、上記第１の実施の形態では、関連プログラムの計算結果が、関連プログラムのチェックサムである場合を一例として説明した。
【０１４８】
しかし、上記第１の実施の形態で説明したように、関連プログラムの計算結果は、関連プログラムのチェックサム、および、ホワイトリスト１４Ａにおける、関連識別子を示すプログラム識別子の登録箇所を示す索引、の少なくとも一方であってよい。
【０１４９】
本実施の形態では、関連プログラムの計算結果が、ホワイトリスト１４Ａにおける、関連識別子を示すプログラム識別子の登録箇所を示す索引である場合を説明する。
【０１５０】
なお、本実施の形態において、上記実施の形態と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本実施の形態において、上記実施の形態と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
【０１５１】
図１は、本実施の形態の情報処理システム１Ｂの一例を示す模式図である。
【０１５２】
情報処理システム１Ｂは、情報処理装置１０Ｂと、処理装置２０と、を備える。情報処理装置１０Ｂと、処理装置２０とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置２０は、第１の実施の形態と同様である。情報処理装置１０Ｂは、処理部１２Ｂと、ホワイトリスト記憶部１４’と、を備える。
【０１５３】
次に、情報処理装置１０Ｂについて説明する。図６は、本実施の形態の情報処理装置１０Ｂの機能的構成の一例を示すブロック図である。
【０１５４】
情報処理装置１０Ｂは、処理部１２Ｂと、ホワイトリスト記憶部１４’と、事前計算結果記憶部１５’と、を備える。事前計算結果記憶部１５’およびホワイトリスト記憶部１４’と、処理部１２Ｂと、はデータや信号を授受可能に接続されている。
【０１５５】
ホワイトリスト記憶部１４’は、ホワイトリスト１４Ａに代えてホワイトリスト１４Ｂを記憶する。
【０１５６】
ホワイトリスト１４Ｂは、索引と、実行を許可する対象のプログラムのプログラム識別子と、プログラムのチェックサムと、を対応づけたリストである。
【０１５７】
索引は、ホワイトリスト１４Ｂにおける、プログラム識別子の登録箇所を示す。このため、索引は、ホワイトリスト１４Ｂの構造に依存する。
【０１５８】
例えば、ホワイトリスト１４Ｂが、ホワイトリスト記憶部１４’におけるファイルシステム上に保存されているファイルであり、プログラム識別子とチェックサムとの対が１行ごとに登録されていると仮定する。この場合、索引は、ホワイトリスト１４Ｂにおける、プログラム識別子の登録されている行番号である。
【０１５９】
また、例えば、ホワイトリスト１４Ｂが、ホワイトリスト記憶部１４’におけるファイルシステム上に保存されているファイルであり、バイナリ形式で、プログラム識別子とチェックサムとの対が記載されていると仮定する。この場合、索引は、プログラム識別子とチェックサムの対の、ファイル上のバイト位置である。
【０１６０】
また、例えば、ホワイトリスト１４Ｂが、ホワイトリスト記憶部１４’におけるデータベースソフトウェア上に保存されていると仮定する。この場合、索引は、プログラム識別子とチェックサムとの対を検索するための、検索キーや検索クエリである。
【０１６１】
また、例えば、ホワイトリスト１４Ｂが、ＲＡＭ上に読込まれていると仮定する。この場合、索引は、プログラム識別子とチェックサムの対の、ＲＡＭ上の位置を示す仮想／物理アドレスである。
【０１６２】
また、索引は、プログラム識別子からハッシュ関数を用いて得られた値であってもよい。
【０１６３】
また、プログラム識別子とチェックサムの対が、特定のデータ構造に従って保存されていると仮定する。この場合、索引は、このデータ構造に従った索引であればよい。例えば、特定のデータ構造が、木構造のノードに特定のプログラム識別子を割り当てた構造であると仮定する。この場合、索引は、ルートノードからのパスである。
【０１６４】
事前計算結果記憶部１５’は、事前計算結果リスト１５Ａに代えて、事前計算結果リスト１５Ｂを記憶する。事前計算結果リスト１５Ｂは、関連識別子と、索引と、を対応付けたリストである。すなわち、事前計算結果リスト１５Ｂは、事前計算結果リスト１５Ａにおけるチェックサムに代えて、索引を登録したリストである。
【０１６５】
すなわち、本実施の形態では、事前計算結果リスト１５Ｂには、特定のプログラムに関連する関連プログラムの関連識別子と、ホワイトリスト１４Ｂにおける、該関連識別子を示すプログラム識別子の登録箇所を示す索引と、を対応づけて登録したリストである。
【０１６６】
次に、処理部１２Ｂについて説明する。処理部１２Ｂは、取得部３０Ａと、判断部３２Ｂと、チェックサム計算部３２Ｃと、特定部３２Ｄと、索引計算部３２Ｊと、検証部３２Ｅと、推定部３０Ｆと、関連プログラム索引計算部３２Ｇと、保存処理部３２Ｈと、を備える。
【０１６７】
上記各部（取得部３０Ａ、判断部３２Ｂ、チェックサム計算部３２Ｃ、特定部３２Ｄ、索引計算部３２Ｊ、検証部３２Ｅ、推定部３０Ｆ、関連プログラム索引計算部３２Ｇ、および保存処理部３２Ｈ）は、例えば、１または複数のプロセッサにより実現される。
【０１６８】
例えば、上記各部は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち１つを実現してもよいし、各部のうち２以上を実現してもよい。
【０１６９】
取得部３０Ａは、第１の実施の形態と同様である。但し、取得部３０Ａは、取得したプログラム識別子を、チェックサム計算部３２Ｃ、判断部３２Ｂ、および推定部３０Ｆへ出力する。
【０１７０】
チェックサム計算部３２Ｃは、取得部３０Ａから受付けたプログラム識別子によって識別される、プログラムのチェックサムを計算する。チェックサム計算部３２Ｃは、チェックサム計算部３０Ｃと同様にして、チェックサムを計算する。チェックサム計算部３２Ｃは、取得部３０Ａから受付けたプログラム識別子と、計算したチェックサムと、を検証部３２Ｅへ出力する。
【０１７１】
判断部３２Ｂは、取得部３０Ａから受付けたプログラム識別子によって識別されるプログラムについて、索引の計算が必要であるか否かを判断する。判断部３２Ｂは、事前計算結果記憶部１５’に記憶されている事前計算結果リスト１５Ｂを用いて、判断を行う。
【０１７２】
判断部３２Ｂは、取得部３０Ａで取得したプログラム識別子を示す関連識別子および該関連識別子に対応する索引が、事前計算結果リスト１５Ｂに登録されているか否かを判別する。この判別により、判断部３２Ｂは、索引の計算が必要であるか否かを判断する。
【０１７３】
そして、判断部３２Ｂは、索引の計算が必要と判断した場合、取得部３０Ａから受付けたプログラム識別子を、索引計算部３２Ｊへ出力する。
【０１７４】
索引計算部３２Ｊは、受付けたプログラム識別子の索引を計算する。例えば、索引計算部３２Ｊは、受付けたプログラム識別子の、ホワイトリスト１４Ｂにおける登録箇所を特定することで、該プログラム識別子の索引を計算する。そして、索引計算部３２Ｊは、プログラム識別子と索引を検証部３２Ｅへ出力する。
【０１７５】
一方、判断部３２Ｂは、索引の計算が不要と判断した場合、取得部３０Ａから受付けたプログラム識別子を、特定部３２Ｄへ出力する。
【０１７６】
特定部３２Ｄは、判断部３２Ｂから受付けたプログラム識別子を示す関連識別子に対応する索引を、事前計算結果リスト１５Ｂから読取る。これによって、特定部３２Ｄは、受付けたプログラム識別子に対応する索引を特定する。特定部３２Ｄは、判断部３２Ｂから受付けたプログラム識別子と、特定した索引と、を検証部３２Ｅへ出力する。
【０１７７】
検証部３２Ｅは、取得したプログラム識別子と、事前計算結果リスト１５Ｂにおける、取得したプログラム識別子を示す関連識別子に対応する索引と、ホワイトリスト１４Ｂと、に基づいて、実行対象のプログラムの実行の可否を検証する。
【０１７８】
詳細には、検証部３２Ｅは、チェックサム計算部３２Ｃから、プログラム識別子とチェックサムを受付ける。また、検証部３２Ｅは、索引計算部３２Ｊまたは特定部３２Ｄから、プログラム識別子と索引を受付ける。
【０１７９】
そして、検証部３２Ｅは、受付けた索引を用いてホワイトリスト１４Ｂを検索することで、ホワイトリスト１４Ｂから、該索引に対応するプログラム識別子およびチェックサムを検索する。受付けた索引を用いることで、検証部３２Ｅは、ホワイトリスト１４Ｂからの、プログラム識別子およびチェックサムの検索時間の短縮を図ることができる。
【０１８０】
さらに、検証部３２Ｅは、ホワイトリスト１４Ｂから検索したチェックサムと、チェックサム計算部３２Ｃから受付けたチェックサムと、が一致するか否かを検証する。そして、一致する場合、検証部３２Ｅは、取得部３０Ａで取得したプログラム識別子によって識別されるプログラムについて、実行可を示す検証結果を導出する。
【０１８１】
一方、検証部３２Ｅは、取得部３０Ａで取得したプログラム識別子がホワイトリスト１４Ｂに登録されていない場合、実行不可を示す検証結果を導出する。また、検証部３２Ｅは、チェックサム計算部３２Ｃから受付けたチェックサムと、ホワイトリスト１４Ｂから検索したチェックサムと、が不一致である場合、実行不可を示す検証結果を導出する。
【０１８２】
このように、事前計算結果リスト１５Ｂに、取得部３０Ａで取得したプログラム識別子を示す関連識別子が登録されている場合、検証部３２Ｅは、事前計算結果リスト１５Ｂから特定された索引を用いてホワイトリスト１４Ｂを検索することで、検証処理を行う。このため、情報処理装置１０Ｂは、ホワイトリスト１４Ｂの検索時間の短縮を図ることができる。
【０１８３】
一方、推定部３０Ｆは、第１の実施の形態と同様に、ホワイトリスト１４Ｂにおける、特定のプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。例えば、第１の実施の形態と同様に、推定部３０Ｆは、取得部３０Ａから受付けたプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。そして、推定部３０Ｆは、推定した関連プログラムの関連識別子を、関連プログラム索引計算部３２Ｇへ出力する。
【０１８４】
関連プログラム索引計算部３２Ｇは、推定部３０Ｆから受付けた関連識別子によって識別される関連プログラムの、索引を計算する。そして、関連プログラム索引計算部３２Ｇは、関連識別子と、該関連識別子に対応する索引と、を保存処理部３２Ｈへ出力する。
【０１８５】
保存処理部３２Ｈは、関連プログラム索引計算部３２Ｇから受付けた関連識別子と索引を対応づけて事前計算結果リスト１５Ｂに登録する。
【０１８６】
次に、本実施の形態の情報処理装置１０Ｂが実行する、情報処理の手順の一例を説明する。図７は、本実施の形態の情報処理装置１０Ｂが実行する、情報処理の手順の一例を示す、フローチャートである。なお、図７に示すフローチャートは、図２に示すステップＳ７とステップＳ８の処理、および、ステップＳ２１とステップＳ２２の処理、の詳細な説明の一例である。
【０１８７】
まず、取得部３０Ａが、実行対象のプログラムを識別するプログラム識別子を取得する（ステップＳ２００）。
【０１８８】
次に、判断部３２Ｂが、ステップＳ２００で取得したプログラム識別子によって識別されるプログラムについて、索引の計算が必要であるか否かを判断する（ステップＳ２０２）。判断部３２Ｂは、事前計算結果リスト１５Ｂを用いて、判断を行う。ステップＳ２０２で肯定判断すると（ステップＳ２０２：Ｙｅｓ）、ステップＳ２０４へ進む。
【０１８９】
ステップＳ２０４では、特定部３２Ｄが、ステップＳ２００で取得したプログラム識別子を示す関連識別子に対応する索引を、事前計算結果リスト１５Ｂから読取る。これによって、特定部３２Ｄは、受付けたプログラム識別子に対応する索引を特定する（ステップＳ２０４）。そして、ステップＳ２０８へ進む。
【０１９０】
一方、ステップＳ２０２で否定判断すると（ステップＳ２０２：Ｎｏ）、ステップＳ２０６へ進む。ステップＳ２０６では、索引計算部３２Ｊが、受付けたプログラム識別子に対応する索引を計算する（ステップＳ２０６）。そして、ステップＳ２０８へ進む。
【０１９１】
ステップＳ２０８では、チェックサム計算部３２Ｃが、ステップＳ２００で取得したプログラム識別子によって識別されるプログラムのチェックサムを計算する（ステップＳ２０８）。そして、ステップＳ２１０へ進む。
【０１９２】
ステップＳ２１０では、検証部３２Ｅが、ステップＳ２０４またはステップＳ２０６で導出された索引と、ステップＳ２０８で計算されたチェックサムと、ステップＳ２００で取得したプログラム識別子と、ホワイトリスト１４Ｂと、を用いて、該プログラム識別子によって識別されるプログラムの実行可否を検証する（ステップＳ２１０）。そして、検証部３２Ｅは、実行可または実行不可を示す検証結果を、処理装置２０へ出力する（ステップＳ２１２）。
【０１９３】
次に、推定部３０Ｆが、ステップＳ２００で取得したプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する（ステップＳ２１４）。
【０１９４】
次に、関連プログラム索引計算部３２Ｇは、ステップＳ２１４で推定された関連プログラムの索引を計算する（ステップＳ２１６）。次に、保存処理部３２Ｈが、ステップＳ２１４で推定された関連プログラムの関連識別子と、該関連プログラムについてステップＳ２１６で計算された索引と、を対応づけて事前計算結果リスト１５Ｂへ登録する（ステップＳ２１８）。そして、本ルーチンを終了する。
【０１９５】
以上説明したように、本実施の形態の情報処理装置１０Ｂは、計算結果として、ホワイトリスト１４Ｂにおけるプログラム識別子の登録箇所を示す索引を用いる。このため、検証部３２Ｅは、検証処理時に、受付けた索引を用いてホワイトリスト１４Ｂを検索することで、検索時間の短縮を図ることができる。
【０１９６】
ここで、従来では、ホワイトリスト１４Ｂに登録されているプログラム識別子の数が多くなるほど、プログラムの検証時に、ホワイトリスト１４Ｂからのプログラム識別子の検索に時間を要していた。このため、検証時間が長くなる場合があった。
【０１９７】
一方、本実施の形態の情報処理装置１０Ｂは、検証部３２Ｅは、検証処理時に、受付けた索引を用いてホワイトリスト１４Ｂを検索する。このため、情報処理装置１０Ｂは、検証処理時における、ホワイトリスト１４Ｂの検索時間を短縮することができる。
【０１９８】
従って、本実施の形態の情報処理装置１０Ｂは、ホワイトリスト１４Ｂを用いた、プログラムの検証時間の短縮を図ることができる。
【０１９９】
なお、情報処理装置１０Ｂの構成は、上記構成に限定されない。例えば、情報処理装置１０Ｂの判断部３２Ｂが、第１の実施の形態で説明した判断部３０Ｂの機能を更に備えた構成としてもよい。この場合、事前計算結果リスト１５Ｂは、関連識別子と、チェックサムと、索引と、を対応付けて登録した構成とすればよい。
【０２００】
そして、この場合、判断部３２Ｂは、取得部３０Ａから取得したプログラム識別子を示す関連識別子に対応するチェックサムおよび索引が事前計算結果リスト１５Ｂに登録されているか否かを判断すればよい。
【０２０１】
そして、登録されていると判断した場合、特定部３２Ｄが、該関連識別子に対応するチェックサムおよび索引を、事前計算結果リスト１５Ｂから特定し、検証部３２Ｅへ出力すればよい。そして、検証部３２Ｅは、受付けた索引を用いてホワイトリスト１４Ｂを検索し、索引によって特定される箇所に登録されたプログラム識別子とチェックサムと、特定部３２Ｄから受付けたチェックサムと、を用いて、検証処理を実行すればよい。
【０２０２】
これにより、本実施の形態の情報処理装置１０Ｂは、上記効果に加えて更に、ホワイトリスト１４Ｂを用いた検証時間の短縮を図ることができる。
【０２０３】
（第３の実施の形態）
上記実施の形態では、検証部３０Ｅ、３２Ｅは、ホワイトリスト１４Ａまたはホワイトリスト１４Ｂを用いて、検証処理を行った。
【０２０４】
本実施の形態では、事前計算結果リスト１５Ａおよびホワイトリスト１４Ａを用いて検証処理を行う形態を説明する。
【０２０５】
なお、本実施の形態において、上記実施の形態と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本実施の形態において、上記実施の形態と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
【０２０６】
図１は、本実施の形態の情報処理システム１Ｃの一例を示す模式図である。
【０２０７】
情報処理システム１Ｃは、情報処理装置１０Ｃと、処理装置２０と、を備える。情報処理装置１０Ｃと、処理装置２０とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置２０は、第１の実施の形態と同様である。情報処理装置１０Ｃは、処理部１２Ｃと、ホワイトリスト記憶部１４と、を備える。
【０２０８】
次に、情報処理装置１０Ｃについて説明する。図８は、本実施の形態の情報処理装置１０Ｃの機能的構成の一例を示すブロック図である。
【０２０９】
情報処理装置１０Ｃは、処理部１２Ｃと、ホワイトリスト記憶部１４と、事前計算結果記憶部１５と、を備える。事前計算結果記憶部１５およびホワイトリスト記憶部１４と、処理部１２Ｃと、はデータや信号を授受可能に接続されている。
【０２１０】
ホワイトリスト記憶部１４および事前計算結果記憶部１５は、第１の実施の形態と同様である。すなわち、ホワイトリスト記憶部１４は、ホワイトリスト１４Ａを記憶する。事前計算結果記憶部１５は、事前計算結果リスト１５Ａを記憶する。
【０２１１】
次に、処理部１２Ｃについて説明する。処理部１２Ｃは、取得部３０Ａと、チェックサム計算部３３Ｃと、検証部３３Ｅと、推定部３０Ｆと、保存処理部３３Ｈと、を備える。
【０２１２】
上記各部（取得部３０Ａ、チェックサム計算部３３Ｃ、検証部３３Ｅ、推定部３０Ｆ、および保存処理部３３Ｈ）は、例えば、１または複数のプロセッサにより実現される。
【０２１３】
例えば、上記各部は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち１つを実現してもよいし、各部のうち２以上を実現してもよい。
【０２１４】
取得部３０Ａは、第１の実施の形態と同様である。但し、取得部３０Ａは、取得したプログラム識別子を、チェックサム計算部３３Ｃと推定部３０Ｆへ出力する。
【０２１５】
推定部３０Ｆは、第１の実施の形態と同様に、ホワイトリスト１４Ａにおける、特定のプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。例えば、第１の実施の形態と同様に、推定部３０Ｆは、取得部３０Ａから受付けたプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する。
【０２１６】
そして、推定部３０Ｆは、推定した関連プログラムの関連識別子を、保存処理部３３Ｈへ出力する。
【０２１７】
保存処理部３３Ｈは、推定部３０Ｆから受付けた関連識別子を示すプログラム識別子に対応するチェックサムを、ホワイトリスト１４Ａから読取る。そして、保存処理部３３Ｈは、推定部３０Ｆから受付けた関連識別子と、ホワイトリスト１４Ａから読取ったチェックサムと、を対応づけて、事前計算結果リスト１５Ａに登録する。
【０２１８】
ここで、本実施の形態では、事前計算結果リスト１５Ａに登録されている関連識別子の数は、ホワイトリスト１４Ａに登録されているプログラム識別子の数より少ない。
【０２１９】
本実施の形態では、この関係を維持するように、保存処理部３３Ｈが、事前計算結果記憶部１５を更新する。
【０２２０】
例えば、保存処理部３３Ｈは、事前計算結果リスト１５Ａに新たな関連識別子を登録するときに、既に事前計算結果リスト１５Ａに登録されている複数の関連識別子および該関連識別子に対応するチェックサムの対の一部を削除する。
【０２２１】
具体的には、保存処理部３３Ｈは、事前計算結果リスト１５Ａに登録されている関連識別子の数が予め設定した上限値を超えた場合、事前計算結果記憶部１５に登録済の複数の関連識別子の内、所定条件を満たす関連識別子および該関連識別子に対応するチェックサムを、事前計算結果記憶部１５から削除する。所定条件を満たす関連識別子は、例えば、事前計算結果記憶部１５に登録された日時が最も古いものから順に所定数の関連識別子や、検証部３３Ｅによって所定期間以上検証に用いられていない、所定数の関連識別子などである。
【０２２２】
このようにして、保存処理部３３Ｈは、事前計算結果リスト１５Ａに新たな関連識別子およびチェックサムを登録すると共に、登録されている関連識別子の数がホワイトリスト１４Ａに登録されているプログラム識別子の数より少なくなるように、調整する。
【０２２３】
次に、チェックサム計算部３３Ｃについて説明する。チェックサム計算部３３Ｃは、取得部３０Ａから受付けたプログラム識別子によって識別される、プログラムのチェックサムを計算する。チェックサム計算部３３Ｃは、チェックサム計算部３０Ｃと同様にして、チェックサムを計算する。チェックサム計算部３３Ｃは、取得部３０Ａから受付けたプログラム識別子と、計算したチェックサムと、を検証部３３Ｅへ出力する。
【０２２４】
検証部３３Ｅは、取得したプログラム識別子によって識別される、実行対象のプログラムの実行の可否を検証する。
【０２２５】
本実施の形態では、検証部３３Ｅは、第１検証部３３Ｋと、第２検証部３３Ｌと、を含む。
【０２２６】
第１検証部３３Ｋは、事前計算結果リスト１５Ａを用いて、実行対象のプログラムの実行の可否を検証する。
【０２２７】
詳細には、第１検証部３３Ｋは、チェックサム計算部３３Ｃから、プログラム識別子およびチェックサムを受付ける。そして、第１検証部３３Ｋは、取得したプログラム識別子を示す関連識別子が事前計算結果リスト１５Ａに登録されているか否かを判別する。
【０２２８】
取得したプログラム識別子を示す関連識別子が、事前計算結果リスト１５Ａに登録されていたと仮定する。
【０２２９】
この場合、第１検証部３３Ｋは、該プログラム識別子と、該プログラム識別子によって識別されるプログラムの計算結果と、事前計算結果リスト１５Ａと、に基づいて、実行対象のプログラムの実行の可否を検証する。詳細には、第１検証部３３Ｋは、チェックサム計算部３３Ｃから受付けたプログラム識別子を示す関連識別子に対応するチェックサムを、事前計算結果リスト１５Ａから特定する。そして、第１検証部３３Ｋは、チェックサム計算部３３Ｃで計算されたチェックサムと、事前計算結果リスト１５Ａから特定したチェックサムと、が一致する場合、実行対象のプログラムが実行可であると検証する。
【０２３０】
また、第１検証部３３Ｋは、チェックサム計算部３３Ｃから受付けたチェックサムと、事前計算結果リスト１５Ａから特定したチェックサムと、が不一致である場合、実行対象のプログラムが実行不可であると検証する。
【０２３１】
そして、第１検証部３３Ｋは、チェックサム計算部３３Ｃから受付けたプログラム識別子と検証結果を、処理装置２０へ出力する。
【０２３２】
一方、取得部３０Ａによって取得されたプログラム識別子を示す関連識別子が、事前計算結果リスト１５Ａに登録されていなかったと仮定する。この場合、第１検証部３３Ｋは、検証処理を行わず、チェックサム計算部３３Ｃから受付けたプログラム識別子およびチェックサムを、第２検証部３３Ｌへ出力する。そして、第２検証部３３Ｌが、検証処理を行う。
【０２３３】
第２検証部３３Ｌは、事前計算結果リスト１５Ａに、取得したプログラム識別子を示す関連識別子が登録されていない場合に、実行対象のプログラムの実行の可否を検証する。
【０２３４】
詳細には、第２検証部３３Ｌは、取得したプログラム識別子と、該プログラム識別子によって識別されるプログラムの計算結果（チェックサム）と、ホワイトリスト１４Ａと、に基づいて、実行対象の前記プログラムの実行の可否を検証する。
【０２３５】
具体的には、第２検証部３３Ｌは、第１検証部３３Ｋから受付けたプログラム識別子に対応するチェックサムを、ホワイトリスト１４Ａから特定する。そして、第２検証部３３Ｌは、チェックサム計算部３３Ｃで計算されたチェックサムと、ホワイトリスト１４Ａから特定したチェックサムと、が一致する場合、実行対象のプログラムが実行可であると検証する。
【０２３６】
また、第２検証部３３Ｌは、第１検証部３３Ｋから受付けたプログラム識別子がホワイトリスト１４Ａに登録されていない場合、実行対象のプログラムが実行不可であると検証する。また、第１検証部３３Ｋは、ホワイトリスト１４Ａにおける該プログラム識別子に対応するチェックサムと、チェックサム計算部３３Ｃから第１検証部３３Ｋを介して受付けたチェックサムと、が不一致である場合、実行対象のプログラムが実行不可であると検証する。
【０２３７】
そして、第２検証部３３Ｌは、チェックサム計算部３３Ｃから第１検証部３３Ｋを介して受付けたプログラム識別子と検証結果を、処理装置２０へ出力する。
【０２３８】
次に、本実施の形態の情報処理装置１０Ｃが実行する、情報処理の手順の一例を説明する。図９は、本実施の形態の情報処理装置１０Ｃが実行する、情報処理の手順の一例を示す、フローチャートである。なお、図９に示すフローチャートは、図２に示すステップＳ７とステップＳ８の処理、および、ステップＳ２１とステップＳ２２の処理、の詳細な説明の一例である。
【０２３９】
まず、取得部３０Ａが、実行対象のプログラムを識別するプログラム識別子を取得する（ステップＳ３００）。
【０２４０】
次に、チェックサム計算部３３Ｃが、ステップＳ３００で取得したプログラム識別子によって識別されるプログラムのチェックサムを計算する（ステップＳ３０２）。
【０２４１】
次に、第１検証部３３Ｋが、ステップＳ３００で取得したプログラム識別子を示す関連識別子が、事前計算結果リスト１５Ａに登録されているか否かを判断する（ステップＳ３０４）。ステップＳ３０４で肯定判断すると（ステップＳ３０４：Ｙｅｓ）、第１検証部３３Ｋが、事前計算結果リスト１５Ａを用いて、ステップＳ３００で取得したプログラム識別子によって識別されるプログラムを検証する（ステップＳ３０６）。そして、ステップＳ３１０へ進む。
【０２４２】
一方、ステップ３０４で否定判断すると（ステップＳ３０４：Ｎｏ）、ステップＳ３０８へ進む。ステップＳ３０８では、第２検証部３３Ｌが、ホワイトリスト１４Ａを用いて、ステップＳ３００で取得したプログラム識別子によって識別されるプログラムを検証する（ステップＳ３０８）。そして、ステップＳ３１０へ進む。
【０２４３】
ステップＳ３１０では、検証部３３Ｅ（第１検証部３３Ｋ、第２検証部３３Ｌ）が、ステップＳ３０６またはステップＳ３０８の検証結果と、ステップＳ３００で取得したプログラム識別子と、を処理装置２０へ出力する（ステップＳ３１０）。
【０２４４】
次に、推定部３０Ｆが、ステップＳ３００で取得したプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する（ステップＳ３１２）。
【０２４５】
次に、保存処理部３３Ｈが、ステップＳ３１２で推定された関連プログラムのチェックサムを、ホワイトリスト１４Ａから取得する（ステップＳ３１４）。すなわち、保存処理部３３Ｈは、ステップＳ３１２で推定された関連プログラムの関連識別子を示すプログラム識別子に対応するチェックサムを、ホワイトリスト１４Ａから読取る。これにより、保存処理部３３Ｈは、チェックサムをホワイトリスト１４Ａから取得する。
【０２４６】
そして、保存処理部３３Ｈは、ステップＳ３１２で推定された関連プログラムの関連識別子と、ステップＳ３１４で取得したチェックサムと、を対応づけて事前計算結果リスト１５Ａへ登録する（ステップＳ３１６）。そして、本ルーチンを終了する。
【０２４７】
以上説明したように、本実施の形態では、事前計算結果リスト１５Ａに登録されている関連識別子の数が、ホワイトリスト１４Ａに登録されているプログラム識別子の数より少ない。そして、第１検証部３３Ｋは、取得したプログラム識別子を示す関連識別子が事前計算結果リスト１５Ａに登録されている場合、該事前計算結果リスト１５Ａを用いて、実行対象のプログラムを検証する。一方、第２検証部３３Ｌは、取得したプログラム識別子を示す関連識別子が事前計算結果リスト１５Ａに登録されていない場合に、ホワイトリスト１４Ａを用いて、実行対象のプログラムを検証する。
【０２４８】
このため、本実施の形態の情報処理装置１０Ｃは、事前計算結果リスト１５Ａよりデータ量の多いホワイトリスト１４Ａの検索時間の短縮を図ることができる。
【０２４９】
すなわち、事前計算結果リスト１５Ａに登録されている関連識別子の数は、ホワイトリスト１４Ａに登録されているプログラム識別子の数より少ない。このため、第１検証部３３Ｋの検証時間は、第２検証部３３Ｌの検証時間に比べて、短い。これは、検索に要する時間が短いためである。そして、本実施の形態の情報処理装置１０Ｃは、事前計算結果リスト１５Ａに登録されている関連識別子を示すプログラム識別子によって識別されるプログラムについては、第１検証部３３Ｋが、より短時間で検証可能な事前計算結果リスト１５Ａを用いて、検証処理を行う。
【０２５０】
従って、本実施の形態の情報処理装置１０Ｃは、ホワイトリスト１４Ａを用いた、プログラムの検証時間の短縮を図ることができる。
【０２５１】
（第４の実施の形態）
上述の変形例では、推定部３１Ｆが、予め生成された関連プログラムリスト２２Ａを用いて、関連プログラムを推定する場合を説明した。本実施の形態では、更に、関連プログラムリスト２２Ａを動的に生成および更新する形態を説明する。
【０２５２】
なお、本実施の形態において、上記実施の形態および変形例と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本実施の形態において、上記実施の形態および変形例と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
【０２５３】
図１は、本実施の形態の情報処理システム１Ｄの一例を示す模式図である。
【０２５４】
情報処理システム１Ｄは、情報処理装置１０Ｄと、処理装置２０と、を備える。情報処理装置１０Ｄと、処理装置２０とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置２０は、第１の実施の形態と同様である。情報処理装置１０Ｄは、処理部１２Ｄと、ホワイトリスト記憶部１４と、を備える。
【０２５５】
次に、情報処理装置１０Ｄについて説明する。図１０は、本実施の形態の情報処理装置１０Ｄの機能的構成の一例を示すブロック図である。
【０２５６】
情報処理装置１０Ｄは、処理部１２Ｄと、ホワイトリスト記憶部１４と、事前計算結果記憶部１５と、関連プログラムリスト記憶部２２と、検証結果記憶部２４と、を備える。事前計算結果記憶部１５、ホワイトリスト記憶部１４、関連プログラムリスト記憶部２２、および検証結果記憶部２４と、処理部１２Ｄと、はデータや信号を授受可能に接続されている。ホワイトリスト記憶部１４および事前計算結果記憶部１５は、第１の実施の形態と同様である。関連プログラムリスト記憶部２２は、変形例と同様である。なお、関連プログラムリスト記憶部２２は、処理部１２Ｄによって更新される（詳細後述）。
【０２５７】
検証結果記憶部２４は、検証結果リスト２４Ａを記憶する。検証結果リスト２４Ａは、検証部３０Ｅによる検証結果を登録したリストである。具体的には、検証結果リスト２４Ａは、検証結果と、検証情報と、を対応づけたリストである。
【０２５８】
検証情報は、検証部３０Ｅによる検証に関する情報である。検証情報は、例えば、検証部３０Ｅによって検証された順序（検証順と称する）を示す情報である。具体的には、検証情報は、検証時刻、検証部３０Ｅの検証回数を示す通し番号、索引、プログラム識別子、チェックサム、情報処理装置１０Ｄを示す情報、等である。なお、索引の定義は、上記実施の形態と同様である。また、情報処理装置１０Ｄを示す情報は、例えば、情報処理装置１０Ｄの起動時刻、情報処理装置１０Ｄのハードウェア使用状況、情報処理装置１０Ｄを使用するユーザ名、などである。
【０２５９】
本実施の形態では、検証情報は、検証時刻と、プログラム識別子と、チェックサムと、を含む場合を、一例として説明する。
【０２６０】
検証結果リスト２４Ａは、処理部１２Ｄによって更新される（詳細後述）。
【０２６１】
処理部１２Ｄは、取得部３０Ａと、判断部３０Ｂと、チェックサム計算部３０Ｃと、特定部３０Ｄと、検証部３０Ｅと、推定部３１Ｆと、関連プログラムチェックサム計算部３０Ｇと、保存処理部３０Ｈと、更新部３４Ｎと、検証結果保存処理部３４Ｍと、を備える。処理部１２Ｄは、更新部３４Ｎおよび検証結果保存処理部３４Ｍを更に備える点以外は、変形例の処理部１２Ａと同様である。
【０２６２】
検証結果保存処理部３４Ｍは、検証部３０Ｅの検証結果を検証結果リスト２４Ａに登録する。
【０２６３】
例えば、検証結果保存処理部３４Ｍは、検証部３０Ｅによってホワイトリスト１４Ａを用いたプログラムの検証処理が実行される毎に、検証部３０Ｅから、検証結果と検証情報を受付ける。
【０２６４】
そして、検証結果保存処理部３４Ｍは、検証結果と、検証情報と、を対応付けて検証結果リスト２４Ａに登録する。例えば、検証結果保存処理部３４Ｍは、検証結果と、プログラム識別子と、検証時刻と、チェックサムと、を対応づけて検証結果リスト２４Ａに登録する。
【０２６５】
なお、検証結果保存処理部３４Ｍは、検証結果が実行可を示す場合にのみ、これらの情報を検証結果リスト２４Ａに登録してもよい。
【０２６６】
なお、検証結果保存処理部３４Ｍは、更に、検証結果リスト２４Ａの加工や追加を行ってもよい。例えば、検証結果保存処理部３４Ｍは、検証時刻に基づいて、検証結果リスト２４Ａに登録されているプログラム識別子に通し番号を生成してもよい。そして、検証結果保存処理部３４Ｍは、生成した通し番号を、検証結果リスト２４Ａにおけるプログラム識別子に対応づけて更に登録してもよい。
【０２６７】
また、検証結果保存処理部３４Ｍは、検証結果リスト２４Ａに記憶されている検証結果の内、一定期間以上経過した検証結果を、検証結果リスト２４Ａから削除してもよい。このとき、検証結果保存処理部３４Ｍは、削除対象の検証結果と、該検証結果に対応する検証情報（プログラム識別子、チェックサム、および検証時刻など）を併せて削除する。
【０２６８】
また、検証結果保存処理部３４Ｍは、検証結果リスト２４Ａに登録されているプログラム識別子ごとに、検証部３０Ｅによって検証された検証回数をカウントしてもよい。そして、検証結果保存処理部３４Ｍは、カウントした検証回数を、プログラム識別子に更に対応づけて検証結果リスト２４Ａに登録してもよい。
【０２６９】
更新部３４Ｎは、検証部３０Ｅによる検証結果に基づいて、関連プログラムリスト２２Ａを更新する。言い換えると、更新部３４Ｎは、検証部３０Ｅによる検証結果に基づいて、関連プログラムリスト２２Ａを生成および更新する。
【０２７０】
詳細には、更新部３４Ｎは、検証結果リスト２４Ａから関連プログラムリスト２２Ａを生成し、関連プログラムリスト記憶部２２に記憶する。また、更新部３４Ｎは、定期的または検証結果リスト２４Ａが更新されるごとに、検証結果リスト２４Ａに基づいて関連プログラムリスト２２Ａを更新する。
【０２７１】
例えば、更新部３４Ｎは、検証結果リスト２４Ａに記憶されているプログラム識別子の各々について、下記処理を実行する。まず、更新部３４Ｎは、検証結果リスト２４Ａに記憶されている、所定のプログラム識別子に対応する検証時刻を特定する。そして、更新部３４Ｎは、特定した検証時刻から所定の時間範囲内の検証時刻に対応する、他のプログラム識別子を特定する。そして、更新部３４Ｎは、特定した他のプログラム識別子を、上記所定のプログラム識別子に対する、関連プログラムの関連識別子として特定する。更新部３４Ｎは、上記所定のプログラム識別子と、特定した関連識別子と、を対応づけて、関連プログラムリスト２２Ａへ登録する。
【０２７２】
また、更新部３４Ｎは、検証結果リスト２４Ａに記憶されているプログラム識別子の各々について、下記処理を実行する。検証結果リスト２４Ａに記憶されている、所定のプログラム識別子に対して、このプログラム識別子を、関連プログラムの関連識別子として特定してもよい。そして、上記所定のプログラム識別子と、特定した関連識別子と、を対応づけて、関連プログラムリスト２２Ａへ登録してもよい。
【０２７３】
また、更新部３４Ｎは、検証結果リスト２４Ａに記憶されているプログラム識別子の各々について、下記処理を実行する。検証結果リスト２４Ａに記憶されている、所定のプログラム識別子に対して、該プログラム識別子に対応する検証回数を特定する。なお、この場合、検証結果リスト２４Ａには、プログラム識別子に対応付けて、更に、検証回数が登録されているものとする。そして、更新部３４Ｎは、特定した検証回数が一定数を超える値である場合に、該プログラム識別子を、関連プログラムの関連識別子として特定してもよい。そして、上記所定のプログラム識別子と、特定した関連識別子と、を対応づけて、関連プログラムリスト２２Ａへ登録してもよい。
【０２７４】
なお、上記の更新部３４Ｎの処理では、検証結果リスト２４Ａに記憶されているプログラム識別子の各々について、関連識別子を特定したが、必要なものに限定してもよい。例えば、更新部３４Ｎが処理を行った時刻を記憶しておき、検証結果リスト２４Ａに記憶されているプログラム識別子のうち、直前の更新部３４Ｎの処理が行われた以降の検証時刻を示すプログラム識別子のみについて、上記処理を実施してもよい。
【０２７５】
次に、本実施の形態の情報処理装置１０Ｄが実行する、情報処理の手順の一例を説明する。図１１は、本実施の形態の情報処理装置１０Ｄが実行する、情報処理の手順の一例を示す、フローチャートである。なお、図１１に示すフローチャートは、図２に示すステップＳ７とステップＳ８の処理、および、ステップＳ２１とステップＳ２２の処理、の詳細な説明の一例である。
【０２７６】
処理部１２Ｄは、第１の実施の形態の処理部１２と同様にして、ステップＳ４００〜ステップＳ４１０の処理を実行する。ステップＳ４００〜ステップＳ４１０の処理は、第１の実施の形態のステップＳ１００〜ステップＳ１１０と同様である（図４参照）。
【０２７７】
次に、検証結果保存処理部３４Ｍが、検証部３０Ｅによる検証結果および検証情報を、検証結果リスト２４Ａに登録する（ステップＳ４１２）。
【０２７８】
次に、更新部３４Ｎが、検証結果記憶部２４に基づいて、関連プログラムリスト２２Ａを更新する（ステップＳ４１４）。
【０２７９】
次に、推定部３１Ｆが、関連プログラムリスト２２Ａを用いて、ステップ４００で取得したプログラム識別子によって識別されるプログラムに関連する、関連プログラムを推定する（ステップＳ４１６）。
【０２８０】
次に、関連プログラムチェックサム計算部３０Ｇおよび保存処理部３０Ｈが、第１の実施の形態と同様にして、ステップＳ４１８〜ステップＳ４２０の処理を行い、本ルーチンを終了する。なお、ステップＳ４１８〜ステップＳ４２０の処理は、第１の実施の形態のステップＳ１１４〜ステップＳ１１６と同様である（図４参照）。
【０２８１】
以上説明したように、本実施の形態では、更新部３４Ｎが、検証部３０Ｅによる検証結果に基づいて、関連プログラムリスト２２Ａを更新する。すなわち、本実施の形態では、更新部３４Ｎが、関連プログラムリスト２２Ａを動的に生成および更新する。
【０２８２】
このため、本実施の形態の情報処理装置１０Ｄは、運用状況の変化に対応した計算結果を、事前計算結果リスト１５Ａに登録することができる。従って、本実施の形態の情報処理装置１０Ｄでは、上記第１の実施の形態の効果に加えて、更に、検証時間の短縮を図ることができる。
【０２８３】
（第５の実施の形態）
本実施の形態では、ホワイトリスト１４Ａや事前計算結果リスト１５Ａの変更を監視し、変更されたときに、ホワイトリスト１４Ａや事前計算結果リスト１５Ａを更新する形態を説明する。
【０２８４】
なお、本実施の形態において、上記実施の形態および変形例と同じ構成および同じ機能には、同じ符号を付与し、詳細な説明を省略する。また、本実施の形態において、上記実施の形態および変形例と同じ定義を示す用語には、同じ言葉を用い、詳細な説明を省略する。
【０２８５】
図１は、本実施の形態の情報処理システム１Ｅの一例を示す模式図である。
【０２８６】
情報処理システム１Ｅは、情報処理装置１０Ｅと、処理装置２０と、を備える。情報処理装置１０Ｅと、処理装置２０とは、有線回線または無線回線を介してデータや信号を授受可能に接続されている。処理装置２０は、第１の実施の形態と同様である。情報処理装置１０Ｅは、処理部１２Ｅと、ホワイトリスト記憶部１４と、を備える。
【０２８７】
次に、情報処理装置１０Ｅについて説明する。図１２は、本実施の形態の情報処理装置１０Ｅの機能的構成の一例を示すブロック図である。
【０２８８】
情報処理装置１０Ｅは、処理部１２Ｅと、ホワイトリスト記憶部１４と、事前計算結果記憶部１５と、を備える。事前計算結果記憶部１５およびホワイトリスト記憶部１４と、処理部１２Ｅと、はデータや信号を授受可能に接続されている。ホワイトリスト記憶部１４および事前計算結果記憶部１５は、第１の実施の形態と同様である。
【０２８９】
処理部１２Ｅは、取得部３０Ａと、判断部３０Ｂと、チェックサム計算部３０Ｃと、特定部３０Ｄと、検証部３０Ｅと、推定部３０Ｆと、関連プログラムチェックサム計算部３０Ｇと、保存処理部３０Ｈと、ホワイトリスト監視部３５Ｐと、事前計算結果監視部３５Ｑと、を備える。処理部１２Ｅは、ホワイトリスト監視部３５Ｐおよび事前計算結果監視部３５Ｑを更に備える点以外は、第１の実施の形態の処理部１２と同様である。
【０２９０】
事前計算結果監視部３５Ｑは、事前計算結果リスト１５Ａに関する情報の変更を監視する。事前計算結果リスト１５Ａに関する情報は、例えば、事前計算結果リスト１５Ａに登録されている関連識別子によって識別される関連プログラムや、該関連プログラムの保存箇所や、関連識別子に対応するチェックサム、などを示す。
【０２９１】
事前計算結果監視部３５Ｑは、事前計算結果リスト１５Ａに関する情報が変更されたときに、該事前計算結果リスト１５Ａにおける対応箇所を更新する。
【０２９２】
例えば、事前計算結果監視部３５Ｑは、事前計算結果リスト１５Ａに登録されている関連識別子ごとに、対応するチェックサムの変更を監視する。そして、事前計算結果監視部３５Ｑは、チェックサムが変更された場合、事前計算結果リスト１５Ａに関する情報が変更されたと判別する。
【０２９３】
また、例えば、事前計算結果監視部３５Ｑは、事前計算結果リスト１５Ａに登録されている関連識別子によって識別される関連プログラムの保持されている箇所を特定する。そして、事前計算結果監視部３５Ｑは、特定した箇所に対して書換え操作が行われたか否かを検出する。
【０２９４】
そして、事前計算結果監視部３５Ｑは、書換え操作が行われたことを検出した場合、事前計算結果リスト１５Ａに関する情報が変更されたと判別する。
【０２９５】
事前計算結果リスト１５Ａに関する情報が変更されたと判別した場合、例えば、事前計算結果監視部３５Ｑは、事前計算結果リスト１５Ａにおける対応箇所を削除する。具体的には、事前計算結果監視部３５Ｑは、書換え操作の行われた箇所に保持されている関連プログラムの関連識別子および対応するチェックサムを、事前計算結果リスト１５Ａから削除する。
【０２９６】
なお、書換え操作の検出には、情報処理装置１０Ｅのカーネルや特定のハードウェアを利用してもよい。例えば、情報処理装置１０Ｅのカーネルに、監視対象となるファイルを通知する。そして、カーネルが、監視対象となるファイルに対する書換え操作の試みを検知した場合に、事前計算結果監視部３５Ｑへ通知するように予め設定すればよい。
【０２９７】
また、例えば、書換え操作による状態変化を検出可能な記憶装置（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭなど）に監視対象を保持し、記憶装置の状態を読み取ることで、書換え操作を検出してもよい。
【０２９８】
ホワイトリスト監視部３５Ｐは、ホワイトリスト１４Ａの変更を監視する。そして、ホワイトリスト監視部３５Ｐは、ホワイトリスト１４Ａが変更されたときに、事前計算結果リスト１５Ａにおける、該変更に対応する情報を更新する。
【０２９９】
例えば、ホワイトリスト１４Ａの変更権限を有するユーザの操作指示によって、ホワイトリスト１４Ａを変更するプロセスが起動したと仮定する。この場合、ホワイトリスト監視部３５Ｐは、ホワイトリスト１４Ａの変更を検出する。また、ホワイトリスト監視部３５Ｐは、ホワイトリスト１４Ａに書換え操作が行われたことを検出した場合、ホワイトリスト１４Ａの変更を検出する。
【０３００】
そして、ホワイトリスト監視部３５Ｐは、事前計算結果リスト１５Ａにおける、ホワイトリスト１４Ａの変更に対応する情報を更新する。
【０３０１】
具体的には、ホワイトリスト１４Ａに記憶されているプログラム識別子に対応するプログラムが変更される場合がある。この場合、該プログラムのチェックサムが再計算され、該プログラム識別子に対応づけてホワイトリスト１４Ａに再登録される。すると、ホワイトリスト監視部３５Ｐは、事前計算結果リスト１５Ａにおける、変更されたプログラムのプログラム識別子を示す関連識別子に対応するチェックサムを、再計算後の値に変更する。
【０３０２】
なお、事前計算結果監視部３５Ｑとホワイトリスト監視部３５Ｐを同時に動作させる場合、互いに干渉しないように実装しなければならない。例えば、ホワイトリスト監視部３５Ｐによる事前計算結果リスト１５Ａの変更については、事前計算結果監視部３５Ｑによる書換え検知機能を停止させる。
【０３０３】
次に、本実施の形態の情報処理装置１０Ｅが実行する、情報処理の手順の一例を説明する。本実施の形態では、情報処理装置１０Ｅは、第１の実施の形態と同様の手順を実行する（図４参照）。そして、情報処理装置１０Ｅは、図４に示す情報処理の実行中に、図１３に示す割込処理を実行する。
【０３０４】
図１３は、情報処理装置１０Ｅが実行する割込処理の手順の一例を示す、フローチャートである。
【０３０５】
まず、ホワイトリスト監視部３５Ｐが、ホワイトリスト１４Ａが変更されたか否かを判断する（ステップＳ５００）。ステップＳ５００で肯定判断すると（ステップＳ５００：Ｙｅｓ）、ステップＳ５０２へ進む。
【０３０６】
ステップＳ５０２では、ホワイトリスト監視部３５Ｐが、事前計算結果リスト１５Ａを更新する（ステップＳ５０２）。そして、ステップＳ５０４へ進む。一方、ステップＳ５００で否定判断した場合も（ステップＳ５００：Ｎｏ）、ステップＳ５０４へ進む。
【０３０７】
ステップＳ５０４では、事前計算結果監視部３５Ｑが、事前計算結果リスト１５Ａに関する情報の変更を検出したか否かを判断する（ステップＳ５０４）。ステップＳ５０４で否定判断すると（ステップＳ５０４：Ｎｏ）、本ルーチンを終了する。ステップＳ５０４で肯定判断すると（ステップＳ５０４：Ｙｅｓ）、ステップＳ５０６へ進む。
【０３０８】
ステップＳ５０６では、事前計算結果監視部３５Ｑが、事前計算結果リスト１５Ａにおける対応箇所を更新する（ステップＳ５０６）。そして、本ルーチンを終了する。
【０３０９】
以上説明したように、本実施の形態では、ホワイトリスト監視部３５Ｐが、ホワイトリスト１４Ａが変更されたときに、事前計算結果リスト１５Ａにおける、該変更に対応する情報を更新する。また、事前計算結果監視部３５Ｑは、事前計算結果リスト１５Ａに関する情報が変更されたときに、事前計算結果リスト１５Ａにおける対応箇所を更新する。
【０３１０】
このため、本実施の形態の情報処理装置１０Ｅは、上記第１の実施の形態の効果に加えて、ホワイトリスト１４Ａや事前計算結果リスト１５Ａの内容の変更によって不具合が生じる事を抑制することができる。
【０３１１】
ここで、ホワイトリスト監視部３５Ｐおよび事前計算結果監視部３５Ｑが設けられていない構成の場合、事前計算結果リスト１５Ａに関連識別子やチェックサムが登録されてから、特定部３０Ｄがチェックサムを特定するまでの間に、チェックサムに関わる情報に変更がなされると、不具合が生じる場合があった。例えば、保存処理部３０Ｈが、関連識別子とチェックサムを対応づけて事前計算結果リスト１５Ａに登録した直後に、プログラム（関連プログラムも含む）に変更が生じる場合がある。この場合、該プログラムおよび該プログラムのチェックサムは、変更前とは異なる値となる。
【０３１２】
この場合、同じプログラム識別子を用いて、チェックサム計算部３０Ｃで計算されたチェックサムと、特定部３０Ｄでと特定されたチェックサムと、に違いが生じる。このため、この場合、検証部３０Ｅによる検証結果に不具合が生じる。
【０３１３】
また、ホワイトリスト１４Ａに変更が生じた場合には、事前計算結果リスト１５Ａに登録されている関連識別子や計算結果（チェックサムや索引）と、ホワイトリスト１４Ａにおける該関連識別子を示すプログラム識別子やチェックサムと、の間にずれが生じる。このため、ホワイトリスト１４Ａを用いたプログラムの検証精度が低下する場合があった。
【０３１４】
一方、本実施の形態では、ホワイトリスト監視部３５Ｐが、ホワイトリスト１４Ａが変更されたときに、事前計算結果リスト１５Ａにおける、該変更に対応する情報を更新する。また、事前計算結果監視部３５Ｑは、事前計算結果リスト１５Ａに関する情報が変更されたときに、事前計算結果リスト１５Ａにおける対応箇所を更新する。
【０３１５】
このため、本実施の形態の情報処理装置１０Ｅは、上記第１の実施の形態の効果に加えて、ホワイトリスト１４Ａや事前計算結果リスト１５Ａの内容の変更によって不具合が生じる事を抑制することができる。
【０３１６】
なお、本実施の形態では、処理部１２Ｅが、ホワイトリスト監視部３５Ｐおよび事前計算結果監視部３５Ｑの双方を備えた構成を説明した。しかし、処理部１２Ｅは、ホワイトリスト監視部３５Ｐおよび事前計算結果監視部３５Ｑの少なくとも一方を更に備えた構成であればよい。このため、処理部１２Ｅは、ホワイトリスト監視部３５Ｐおよび事前計算結果監視部３５Ｑの内、何れか一方のみを備えた構成であってもよい。
【０３１７】
ホワイトリスト監視部３５Ｐおよび事前計算結果監視部３５Ｑは、ホワイトリスト１４Ａおよび事前計算結果リスト１５Ａの内容を相互に参照し、整合性を確認してもよい。
【０３１８】
また、ホワイトリスト監視部３５Ｐおよび事前計算結果監視部３５Ｑ以外の機能が、不具合を抑制する機能を更に備えた構成としてもよい。
【０３１９】
例えば、判断部３０Ｂは、事前計算結果リスト１５Ａに取得したプログラム識別子が登録されている場合であっても、一定の確率で、必ずチェックサムの計算が必要と判断してもよい。
【０３２０】
また、保存処理部３０Ｈは、時刻情報と、関連識別子と、チェックサムと、を対応付けて事前計算結果リスト１５Ａに登録してもよい。そして、保存処理部３０Ｈは、事前計算結果リスト１５Ａにおける、一定期間以上経過した関連識別子を、時刻情報を用いて検索する。そして、保存処理部３０Ｈは、検索した関連識別子と、該関連識別子に対応する時刻情報およびチェックサムを、事前計算結果リスト１５Ａから削除してもよい。
【０３２１】
また、保存処理部３０Ｈは、事前計算結果リスト１５Ａに記憶されている関連識別子を一定期間ごとに参照し、チェックサム計算部３０Ｃを制御することでチェックサムの再計算を行うように制御し、事前計算結果リスト１５Ａに再計算後の値を上書きして登録してもよい。
【０３２２】
次に、上記実施の形態および変形例の情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅの、ハードウェア構成の一例を説明する。図１４は、上記実施の形態および変形例の情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅのハードウェア構成図の一例である。
【０３２３】
上記実施の形態および変形例の情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５１などの制御装置と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）５２やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）５３やＨＤＤ（ハードディスクドライブ）などの記憶装置と、各種機器とのインターフェースである通信Ｉ／Ｆ部５４と、各部を接続するバス６１とを備えており、通常のコンピュータを利用したハードウェア構成となっている。
【０３２４】
上記実施の形態および変形例の情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅでは、ＣＰＵ５１が、ＲＯＭ５２からプログラムをＲＡＭ５３上に読み出して実行することにより、上記各機能がコンピュータ上で実現される。
【０３２５】
なお、上記実施の形態および変形例の情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅで実行される上記各処理を実行するためのプログラムは、ＨＤＤに記憶されていてもよい。また、上記実施の形態および変形例の情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅで実行される上記各処理を実行するためのプログラムは、ＲＯＭ５２に予め組み込まれて提供されていてもよい。
【０３２６】
また、上記実施の形態および変形例の情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅで実行される上記処理を実行するためのプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ、ＣＤ−Ｒ、メモリカード、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、フレキシブルディスク（ＦＤ）等のコンピュータで読み取り可能な記憶媒体に記憶されてコンピュータプログラムプロダクトとして提供されるようにしてもよい。また、上記実施の形態および変形例の情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅで実行される上記処理を実行するためのプログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するようにしてもよい。また、上記実施の形態および変形例の情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅで実行される上記処理を実行するためのプログラムを、インターネットなどのネットワーク経由で提供または配布するようにしてもよい。
【０３２７】
なお、上記には、本発明の実施の形態および変形例を説明したが、上記実施の形態および変形例は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施の形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施の形態および変形例やこれらの変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０３２８】
１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ  情報処理装置
３０Ａ  取得部
３０Ｅ、３２Ｅ、３３Ｅ  検証部
３０Ｆ、３１Ｆ  推定部
３０Ｈ  保存処理部
３３Ｋ  第１検証部
３３Ｌ  第２検証部
３４Ｎ  更新部
３５Ｐ  ホワイトリスト監視部
３５Ｑ  事前計算結果監視部 
【図１】
2020161189.tif 000003
【図２】
2020161189.tif 000004
【図３】
2020161189.tif 000005
【図４】
2020161189.tif 000006
【図５】
2020161189.tif 000007
【図６】
2020161189.tif 000008
【図７】
2020161189.tif 000009
【図８】
2020161189.tif 000010
【図９】
2020161189.tif 000011
【図１０】
2020161189.tif 000012
【図１１】
2020161189.tif 000013
【図１２】
2020161189.tif 000014
【図１３】
2020161189.tif 000015
【図１４】
2020161189.tif 000016