(57)【要約】  メモリにロードされたプログラムの改竄検出処理を安全性を落とすことなく、かつ高速に行うことを目的とする。  改竄検出対象であるプログラムに対し、プログラムのロード前に分割サイズ決定手段１２が乱数情報に基づき決定したブロック分割サイズで、分割手段１３が前記プログラムをブロックデータに分割し、第１変換手段１４がブロックデータを論理演算によりブロック分割サイズ以下の認証一時データに変換し、第２変換手段１５が、前記認証一時データを第２変換処理することで認証データを算出し、認証データとブロック分割サイズと共にを記憶する。プログラムのロード以後に、ロードされたプログラムに対し、記憶されているブロック分割サイズを用い、ブロック分割、第１変換、第２変換を行い比較データを算出する。認証データと比較データとを比較することでプログラムの改竄を検出する。
2008056700.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの改竄検出を行う改竄検出システムであって、
実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工手段と、
前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成手段と、
生成された前記認証情報を保持する保持手段と、
前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工手段と、
前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成手段と、
前記保持手段の保持する認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出手段と
を備えることを特徴とする改竄検出システム。
【請求項２】
前記第１加工手段は、ランダムに定まるパラメータに依存する加工処理を行い、
前記第２加工手段は、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行う
ことを特徴とする請求項１に記載の改竄検出システム。
【請求項３】
前記第１生成手段による認証情報の生成は、前記プログラムが実行される以前に行われ、
前記第２生成手段による比較情報の生成及び前記検出手段による改竄検出は、前記プログラムの実行中に行われる
ことを特徴とする請求項２に記載の改竄検出システム。
【請求項４】
前記パラメータは、データのサイズを示し、
前記第１加工手段及び前記第２加工手段は、前記プログラムを前記パラメータにより示されるサイズに加工処理する
ことを特徴とする請求項３記載の改竄検出システム。
【請求項５】
前記第１加工手段及び第２加工手段は、前記加工処理として、前記プログラムを前記サイズの複数のブロックデータに区切り、前記ブロックデータ同士で同一桁の論理演算を行うことにより前記サイズの前記認証用加工データ及び比較用加工データを生成する
ことを特徴とする請求項４に記載の改竄検出システム。
【請求項６】
前記第１加工手段及び第２加工手段は、前記論理演算として排他的論理和演算を行う
ことを特徴とする請求項５に記載の改竄検出システム。
【請求項７】
前記第１生成手段は、キャッシュメモリを含み、前記キャッシュメモリを介して認証用加工データが記憶されているメモリとの間で入出力を行い、
前記第１加工手段は、前記パラメータとして、前記第１生成手段に含まれるキャッシュメモリにおけるデータ読み書き単位のサイズ以下のサイズを特定する情報を用いて前記加工処理を行う
ことを特徴とする請求項３に記載の改竄検出システム。
【請求項８】
前記第１生成手段は、前記認証情報として前記認証用加工データのハッシュ値を算出し、
前記第２生成手段は、前記比較情報として前記比較用加工データのハッシュ値を算出する
ことを特徴とする請求項３に記載の改竄検出システム。
【請求項９】
前記第１生成手段及び第２生成手段は、前記ハッシュ値の算出にＳＨＡ１演算を用いる
ことを特徴とする請求項８記載の改竄検出システム。
【請求項１０】
前記第１加工手段及び第２加工手段は、前記プログラムが、ロード時に再配置されるリロケーションコードを含むか否かを判定し、リロケーションコードを含む場合に、前記プログラムから前記リロケーションコードを除去し、前記リロケーションコードが除かれたプログラムを加工処理する
ことを特徴とする請求項３に記載の改竄検出システム。
【請求項１１】
前記第１加工手段及び第２加工手段は、前記プログラムが、ロード時に再配置されるリロケーションコードを含むか否かを判定し、リロケーションコードを含む場合に、含まれるリロケーションコードを所定のリロケーションされないコードに置換し、前記リロケーションコードが置換がされたプログラムを加工処理する
ことを特徴とする請求項３に記載の改竄検出システム。
【請求項１２】
前記第１加工手段は、前記パラメータとして乱数を生成し、
前記第２加工手段は、前記乱数を保持しており、
前記第１加工手段及び前記第２加工手段は、前記加工処理において、前記プログラムに前記乱数を付した上で前記加工処理する
ことを特徴とする請求項３に記載の改竄検出システム。
【請求項１３】
前記第１生成手段は、乱数を生成し、前記認証情報として、前記乱数を鍵とするハッシュ関数を用いて前記認証用加工データのハッシュ値を算出し、
前記第２生成手段は、前記乱数を保持しており、前記比較情報として、前記乱数を鍵とする前記ハッシュ関数を用いて前記比較用加工データのハッシュ値を算出する
ことを特徴とする請求項３に記載の改竄検出システム。
【請求項１４】
前記パラメータは、データのサイズを示し、前記第１加工手段は、更に、複数のパラメータそれぞれに依存する加工処理を行って、サイズの異なる複数の認証用加工データを生成し、
前記第１生成手段は、前記複数の認証用加工データそれぞれに、前記要約処理を行って複数の認証情報を生成し、
前記改竄検出システムは、更に、
前記複数の認証情報のうち少なくとも１つを選出し、
前記第２加工手段に、前記加工処理によって、前記プログラムを前記選出した認証情報のサイズに縮めさせ、
前記検出手段に、前記選出された認証情報と、前記第２生成手段により生成された前記比較情報とを用いて前記実行対象のプログラムの改竄検出を行わせる制御手段
を備えることを特徴とする請求項３に記載の改竄検出システム。
【請求項１５】
前記制御手段は、実行中のプロセスへの資源割り当てに係るプロセス状況算出値を算出し、前記プロセス状況算出値に基づき少なくとも１の認証情報を選出する
ことを特徴とする請求項１４に記載の改竄検出システム。
【請求項１６】
前記制御手段は、プロセス状況算出値と認証情報との対応表を記憶しており、算出したプロセス状況算出値に対応する認証情報を前記対応表から選出する
ことを特徴とする請求項１５に記載の改竄検出システム。
【請求項１７】
前記第１加工手段及び第２加工手段は、前記加工処理として、前記プログラムの一部分をランダムに特定し抽出して前記認証用加工データ及び前記比較用加工データを生成する
ことを特徴とする請求項３に記載の改竄検出システム。
【請求項１８】
前記第１加工手段は、抽出開始位置と抽出終了位置を示す情報をランダムに生成し、
前記第１加工手段及び前記第２加工手段は、前記プログラムについて、前記抽出開始位置から前記抽出終了位置までを抽出する
ことを特徴とする請求項１７に記載の改竄検出システム。
【請求項１９】
前記第１加工手段は、データの抽出開始位置と抽出サイズを示す情報をランダムに生成し、
前記第１加工手段及び前記第２加工手段は、前記プログラムについて、前記抽出開始位置から前記抽出サイズ分のデータを抽出する
ことを特徴とする請求項１７に記載の改竄検出システム。
【請求項２０】
前記加工処理と前記要約処理とは、相異なる一方向性関数を用いる処理である
ことを特徴とする請求項３に記載の改竄検出システム。
【請求項２１】
プログラムの改竄検出を行う改竄検出方法であって、
実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工ステップと、
前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成ステップと、
生成された前記認証情報を保持する保持ステップと、
前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工ステップと、
前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成ステップと、
前記保持している認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出ステップと
を含むことを特徴とする改竄検出方法。
【請求項２２】
プログラムの改竄検出を行う改竄検出システムに用いられる改竄検出プログラムであって、
実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工ステップと、
前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成ステップと、
生成された前記認証情報を保持する保持ステップと、
前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工ステップと、
前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成ステップと、
前記保持している認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出ステップと
をコンピュータに実行させることを特徴とする改竄検出プログラム。
【請求項２３】
コンピュータ読み取り可能な記録媒体であって、
実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工ステップと、
前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成ステップと、
生成された前記認証情報を保持する保持ステップと、
前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工ステップと、
前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成ステップと、
前記保持している認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出ステップと
をコンピュータに実行させる改竄検出プログラムを記録していることを特徴とする記録媒体。
【請求項２４】
プログラムの改竄検出を行う集積回路であって、
実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工手段と、
前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成手段と、
生成された前記認証情報を保持する保持手段と、
前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工手段と、
前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成手段と、
前記保持手段の保持する認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出手段と
を備えることを特徴とする集積回路。
【請求項２５】
前記集積回路は、Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅであることを特徴とする請求項２４に記載の集積回路。
【請求項２６】
プログラムの改竄検出に用いる認証情報を生成する認証情報生成装置であって、
実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する加工手段と、
前記認証用加工データに前記加工処理よりも計算量の多い要約処理を行い、認証情報を生成する生成手段と、
生成された前記認証情報を前記改竄検出装置に提供する提供手段と
を備えることを特徴とする認証情報生成装置。
【請求項２７】
プログラムの改竄検出を行う改竄検出装置であって、
実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をし、さらに、前記加工処理よりも計算量の多い要約処理を行うことで生成された認証情報を保持する保持手段と、
前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する加工手段と、
前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する生成手段と、
前記保持手段の保持する認証情報と前記生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出手段と
を備えることを特徴とする改竄検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの不正な改竄を検出する技術に関する。
【背景技術】
【０００２】
近年、プログラムの改竄検出に関する様々な技術が開発されている。典型的な技術としては、特許文献１に開示されたものがある。
特許文献１では、改竄検出対象となるプログラムに対して一方向性関数であるハッシュ関数を用いて作成した認証データと、改竄チェック対象となるプログラムに対してハッシュ関数を用いて作成した比較データとを比較して改竄検出を行っている。しかし、プログラム全体についてハッシュ値を生成するには多大な時間を要するため、他のプログラムの実行と並行して改竄検出処理を行うような場合には、他のプログラムの実行に支障が生じ得る。【０００３】
特許文献２では、ハッシュ値を利用せず、プログラムが実行時に特定の条件を満たすか否かにより正当性を検証している。具体的には、前記特定の条件として、プログラムのリターンアドレスが所定のアドレス空間内か否か、実行モードが正しいか否か、所定の時間内で処理が終わるか否かについて調べ、前記特定の条件を満たさない場合に、プログラムが改竄されていると判定する。これによると、ハッシュ値を生成する必要はなく、改竄検出処理に要する時間は短縮される。
【特許文献１】米国特許第６０２６２９３号
【特許文献２】米国特許第６１７８５０９号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献２の方法は、特許文献１の方法に比べ、改竄検出処理時間は短くなるものの、前記特定の条件についてチェックするに過ぎず、部分的な検証にしかならないため、検証された部分以外に改竄箇所が存在し得るという問題がある。
上述の問題に鑑み、本発明は、プログラムの改竄検出を、従来と比べて検出精度を落とすことなく高速に行うことのできる改竄検出システム、改竄検出方法、改竄検出プログラム、記録媒体及び集積回路を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記の課題を解決するために、本発明は、プログラムの改竄検出を行う改竄検出システムであって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工手段と、前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成手段と、生成された前記認証情報を保持する保持手段と、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工手段と、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成手段と、前記保持手段の保持する認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出手段とを備える。【０００６】
ここで、前記改竄検出システムは、加工処理を行う発明特定事項として、第１加工手段と第２加工手段とを備えることとしているが、実体的に異なる２つの手段として実現する必要はない。第１加工手段と第２加工手段が、実体的に１つの手段として実現される場合も本発明に含まれる。
要約処理についても同様に、要約処理を行う発明特定事項として第１生成手段と第２生成手段とを備えることとしているが、実体的に異なる２つの手段として実現する必要はない。第１生成手段と第２生成手段が、実体的に１つの手段として実現される場合も本発明に含まれる。
【発明の効果】
【０００７】
本発明の改竄検出システムは、上述の構成を備えることにより、加工処理によりプログラムのサイズを削減した上で計算量の多い要約処理を行って認証情報及び比較情報を生成するので、計算量の多い要約処理をプログラム全体に対して行う場合に比べて認証情報及び比較情報の生成を高速に行うことができる。
また、前記第１加工手段は、ランダムに定まるパラメータに依存する加工処理を行い、前記第２加工手段は、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行うこととしてもよい。【０００８】
この構成によれば、加工処理ごとに、生成される前記認証用加工データ及び前記比較用加工データにランダムな要素が加わるため、前記認証用加工データ及び前記比較用加工データに基づき生成される認証情報及び比較情報についても、ランダムな要素が加わることになる。よって、改竄検出時にチェックを不正に通過しうるような前記認証情報及び前記比較情報と同一の情報を不正に生成するのを困難にし、不正なプログラムが実行されるのを防ぐことができる。【０００９】
また、前記第１生成手段による認証情報の生成は、前記プログラムが実行される以前に行われ、前記第２生成手段による比較情報の生成及び前記検出手段による改竄検出は、前記プログラムの実行中に行われることとしてもよい。
この構成によれば、実行中のプログラムが改竄された場合に、その改竄を検出することができる。【００１０】
また、前記パラメータは、データのサイズを示し、前記第１加工手段及び前記第２加工手段は、前記プログラムを前記パラメータにより示されるサイズに加工処理することとしてもよい。
この構成によれば、加工処理ごとに、ランダムなサイズの前記認証用加工データ及び前記比較用加工データを生成するため、前記認証用加工データ及び前記比較用加工データに基づき生成される認証情報及び比較情報についても、ランダムな要素が加わることになる。よって、改竄検出時にチェックを不正に通過しうるような前記認証情報及び前記比較情報と同一の情報を不正に生成するのを困難にし、不正なプログラムが実行されるのを防ぐことができる。【００１１】
また、前記第１加工手段及び第２加工手段は、前記加工処理として、前記プログラムを前記サイズの複数のブロックデータに区切り、前記ブロックデータ同士で同一桁の論理演算を行うことにより前記サイズの前記認証用加工データ及び比較用加工データを生成することとしてもよい。
また、前記第１加工手段及び第２加工手段は、前記論理演算として排他的論理和演算を行うこととしてもよい。【００１２】
この構成によれば、高速に処理が可能な論理演算によってプログラムを短くするので、短時間で加工処理を完了することができる。
なお、排他的論理和などの論理演算は、一般的なプロセッサにおいて１クロックの間に処理可能な基本的な処理である。
また、前記第１生成手段は、キャッシュメモリを含み、前記キャッシュメモリを介して認証用加工データが記憶されているメモリとの間で入出力を行い、前記第１加工手段は、前記パラメータとして、前記第１生成手段に含まれるキャッシュメモリにおけるデータ読み書き単位のサイズ以下のサイズを特定する情報を用いて前記加工処理を行うこととしてもよい。【００１３】
この構成によれば、認証処理の対象となるデータの大きさをキャッシュメモリにおけるデータの取り扱い単位以下に抑えることができる。これにより、認証処理の対象となるデータを、キャッシュメモリ上のデータの入れ替えを行わずに一度で行うことができるので、改竄検出処理の更なる高速化を図ることができる。
また、前記第１生成手段は、前記認証情報として前記認証用加工データのハッシュ値を算出し、前記第２生成手段は、前記比較情報として前記比較用加工データのハッシュ値を算出することとしてもよい。【００１４】
また、前記第１生成手段及び第２生成手段は、前記ハッシュ値の算出にＳＨＡ１演算を用いることとしてもよい。
この構成によれば、ハッシュを用いることにより、認証情報及び比較情報と同一の情報を不正に生成されるのを防ぐことができるため、より安全な認証情報及び比較情報を用いて改竄検出を行うことができる。【００１５】
また、前記第１加工手段及び第２加工手段は、前記プログラムが、ロード時に再配置されるリロケーションコードを含むか否かを判定し、リロケーションコードを含む場合に、前記プログラムから前記リロケーションコードを除去し、前記リロケーションコードが除かれたプログラムを加工処理することとしてもよい。
また、前記第１加工手段及び第２加工手段は、前記プログラムが、ロード時に再配置されるリロケーションコードを含むか否かを判定し、リロケーションコードを含む場合に、含まれるリロケーションコードを所定のリロケーションされないコードに置換し、前記リロケーションコードが置換がされたプログラムを加工処理することとしてもよい。【００１６】
この構成によれば、前記プログラムにリロケーションコードが含まれている場合であっても、リロケーション毎に認証情報及び比較情報の内容が変化してしまう状況を回避して、前記プログラムから一定の認証情報及び比較情報を生成し、前記認証情報及び前記比較情報を用いて改竄検出を行うことができる。
また、前記第１加工手段は、前記パラメータとして乱数を生成し、前記第２加工手段は、前記乱数を保持しており、前記第１加工手段及び前記第２加工手段は、前記加工処理において、前記プログラムに前記乱数を付した上で前記加工処理することとしてもよい。【００１７】
この構成によれば、ロード毎に異なる認証情報及び比較情報を生成し、解析を困難化できる。
また、前記第１生成手段は、乱数を生成し、前記認証情報として、前記乱数を鍵とするハッシュ関数を用いて前記認証用加工データのハッシュ値を算出し、前記第２生成手段は、前記乱数を保持しており、前記比較情報として、前記乱数を鍵とする前記ハッシュ関数を用いて前記比較用加工データのハッシュ値を算出することとしてもよい。【００１８】
この構成によれば、乱数が認証情報及び比較情報に反映させて、認証情報及び比較情報の解析を困難化できる。
また、前記パラメータは、データのサイズを示し、前記第１加工手段は、更に、複数のパラメータそれぞれに依存する加工処理を行って、サイズの異なる複数の認証用加工データを生成し、前記第１生成手段は、前記複数の認証用加工データそれぞれに、前記要約処理を行って複数の認証情報を生成し、前記改竄検出システムは、更に、前記複数の認証情報のうち少なくとも１つを選出し、前記第２加工手段に、前記加工処理によって、前記プログラムを前記選出した認証情報のサイズに縮めさせ、前記検出手段に、前記選出された認証情報と、前記第２生成手段により生成された前記比較情報とを用いて前記実行対象のプログラムの改竄検出を行わせる制御手段を備えることとしてもよい。【００１９】
また、前記制御手段は、実行中のプロセスへの資源割り当てに係るプロセス状況算出値を算出し、前記プロセス状況算出値に基づき少なくとも１の認証情報を選出することとしてもよい。
また、前記制御手段は、プロセス状況算出値と認証情報との対応表を記憶しており、算出したプロセス状況算出値に対応する認証情報を前記対応表から選出することとしてもよい。【００２０】
この構成によれば、改竄検出システムの処理状況に応じて、改竄検出にかかる処理の負荷を変更することが可能となる。本発明に係る改竄検出の処理では、加工処理よりも要約処理の方が負荷が大きいため、要約処理にかけるデータのサイズが大きくなるほどに改竄検出システムに与える負荷が大きくなる。一方、加工処理でプログラムのサイズを短くしすぎると元のプログラムから抜ける情報が増えてしまうため、改竄検出の精度が下がってしまう。【００２１】
そこで、本発明では、プロセスの状況を見て加工処理を行うサイズを選択することで、改竄検出システム内の処理状況（例えば、他のプログラムの動作状況など）を踏まえた上で、適切な精度及び速度で改竄検出を行うよう制御できるようにしている。
また、前記第１加工手段及び第２加工手段は、前記加工処理として、前記プログラムの一部分をランダムに特定し抽出して前記認証用加工データ及び前記比較用加工データを生成することとしてもよい。【００２２】
また、前記第１加工手段は、抽出開始位置と抽出終了位置を示す情報をランダムに生成し、前記第１加工手段及び前記第２加工手段は、前記プログラムについて、前記抽出開始位置から前記抽出終了位置までを抽出することとしてもよい。
また、前記第１加工手段は、データの抽出開始位置と抽出サイズを示す情報をランダムに生成し、前記第１加工手段及び前記第２加工手段は、前記プログラムについて、前記抽出開始位置から前記抽出サイズ分のデータを抽出することとしてもよい。【００２３】
この構成によれば、認証情報の生成毎に、認証情報の生成に用いられるプログラムの一部分が変更されるので、改竄検出時のチェックを不正に通過しうるような認証情報及び比較情報の生成を困難化し、不正なプログラムが実行されるのを防ぐことができる。
また、前記加工処理と前記要約処理とは、相異なる一方向性関数を用いる処理であってもよい。【００２４】
この構成によれば、異なる一方向性関数を用いた処理により安全な認証用加工データ、比較用加工データ、認証情報及び比較情報を生成することができる。
本発明は、プログラムの改竄検出を行う改竄検出方法であって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工ステップと、前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成ステップと、生成された前記認証情報を保持する保持ステップと、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工ステップと、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成ステップと、前記保持している認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出ステップとを含む。【００２５】
本発明は、プログラムの改竄検出を行う改竄検出システムに用いられる改竄検出プログラムであって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工ステップと、前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成ステップと、生成された前記認証情報を保持する保持ステップと、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工ステップと、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成ステップと、前記保持している認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出ステップとをコンピュータに実行させる。【００２６】
本発明は、コンピュータ読み取り可能な記録媒体であって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工ステップと、前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成ステップと、生成された前記認証情報を保持する保持ステップと、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工ステップと、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成ステップと、前記保持している認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出ステップとをコンピュータに実行させる改竄検出プログラムを記録している。【００２７】
本発明は、プログラムの改竄検出を行う集積回路であって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工手段と、前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成手段と、生成された前記認証情報を保持する保持手段と、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工手段と、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成手段と、前記保持手段の保持する認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出手段とを備える。【００２８】
この構成によれば、加工処理によりプログラムのサイズを削減した上で計算量の多い要約処理を行って認証情報及び比較情報を生成するので、計算量の多い要約処理をプログラム全体に対して行う場合に比べて認証情報及び比較情報の生成を高速に行うことができる。
また、前記集積回路は、Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅであることとしてもよい。【００２９】
この構成によれば、改竄検出処理について安全な実行環境を構築することができる。
本発明は、プログラムの改竄検出に用いる認証情報を生成する認証情報生成装置であって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する加工手段と、前記認証用加工データに前記加工処理よりも計算量の多い要約処理を行い、認証情報を生成する生成手段と、生成された前記認証情報を前記改竄検出装置に提供する提供手段とを備える。【００３０】
この構成によれば、加工処理によりプログラムのサイズを削減した上で計算量の多い要約処理を行って認証情報を生成するので、計算量の多い要約処理をプログラム全体に対して行う場合に比べて認証情報の生成を高速に行うことができる。
本発明は、プログラムの改竄検出を行う改竄検出装置であって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をし、さらに、前記加工処理よりも計算量の多い要約処理を行うことで生成された認証情報を保持する保持手段と、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する加工手段と、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する生成手段と、前記保持手段の保持する認証情報と前記生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出手段とを備える。【００３１】
この構成によれば、加工処理によりプログラムのサイズを削減した上で計算量の多い要約処理を行って比較情報を生成するので、計算量の多い要約処理をプログラム全体に対して行う場合に比べて比較情報の生成を高速に行うことができ、改竄検出に要する処理時間を短縮することができる。
【図面の簡単な説明】
【００３２】
【図１】本発明の実施の形態１における改竄検出装置の全体構成を示すブロック図である。
【図２】本発明の実施の形態１における認証データリストの一例を示す図である。
【図３】本発明の実施の形態１における改竄検出装置によるプログラム実行動作を示すフローチャートである。
【図４】本発明の実施の形態１における認証データ生成処理を示す図である。
【図５】本発明の実施の形態１における認証データ生成処理におけるデータの変遷について説明するための図である。
【図６】本発明の実施の形態１における比較データ生成処理を示す図である。
【図７】本発明の実施の形態２における認証データ生成処理を示す図である。
【図８】本発明の実施の形態２における認証データリストの一例を示す図である。
【図９】本発明の実施の形態２における改竄検出要求手段を示す図である。
【図１０】本発明の実施の形態２におけるプロセス管理テーブル格納部に格納されるプロセス管理テーブルの一例を示す図である。
【図１１】本発明の実施の形態２におけるスケジューリング手段におけるプロセス状況算出値を生成処理を示す図である。
【図１２】本発明の実施の形態２におけるプロセス状況算出値を用いて認証データを選択する処理を示すフローである。
【図１３】本発明の変形例におけるリロケーション対象コードを含むプログラムについて説明するための図である。
【図１４】（ａ）は、改竄検出対象であるプログラムのうち、リロケーション対象コードを除いて生成したデータを示す。（ｂ）は、改竄検出対象であるプログラムのうち、リロケーション対象コードを規定コードなどに置き換えて生成したデータを示す。
【図１５】本発明の変形例における、プログラムから認証データを生成するまでの概要を説明するための図である。
【図１６】本発明の変形例における、ＨＭＡＣ−ＳＨＡ１を用いた認証データ生成処理におけるデータの変遷について説明するための図である。
【符号の説明】
【００３３】
１      改竄検出装置
２      ＲＡＭ
３      フラッシュメモリ
４      ロード手段
５      実行手段
６      改竄検出要求手段
７      改竄検出手段
１１      入出力手段
１２      分割サイズ決定手段
１３      分割手段
１４      第１変換手段
１５      第２変換手段
１６      格納手段
１７      判定手段
２３      認証データリスト
【発明を実施するための最良の形態】
【００３４】
本発明の一実施形態である改竄検出装置は、改竄検出処理速度とトレードオフの関係にあるセキュリティレベルを出来る限り維持しつつ実行するプログラムの改竄検出処理を従来より高速に行うものである。
改竄検出装置はＲＯＭにプログラムを格納しており、このプログラムをＲＡＭへとロードしてから実行する。ここで、前記改竄検出装置は、まずＲＯＭに格納されたプログラムについて、ＲＡＭへのロード前に後述する処理によって改竄検出情報として認証データを生成する。次に、前記改竄検出装置は、ＲＡＭへのロード以後プログラムの実行中などに、ＲＡＭに記憶されたプログラムについて後述する処理によって改竄検出情報としての比較データを生成する。そして、改竄検出装置は、前記認証データと前記比較データとを比較し、認証データと比較データとが一致しなかった場合にプログラムが改竄されていると判定する。【００３５】
ここで、前記認証データと前記比較データとの生成は以下のように行う。
まず、前記改竄検出装置は、改竄検出対象のプログラムをブロック分割し、分割結果に対して比較的低負荷の処理である短縮処理の一例として第１のハッシュ関数を施す。第１のハッシュ関数を施した結果、元のプログラムは、サイズの小さな変換一時データに変換されている。【００３６】
そして、前記改竄検出装置は、前記変換一時データに対し、改竄検出情報を生成する処理として負荷の高い第２のハッシュ関数を施す。この第２のハッシュ関数により、改竄検出情報が得られる。
第１のハッシュ関数は、一例として、データについて排他的論理和演算を行う処理である。第２のハッシュ関数は一例としてＳＨＡ１処理関数である。【００３７】
時間を要するＳＨＡ１処理は、プログラムより小さな変換一時データに対し行うのみなので、プログラム全体にＳＨＡ１処理を行う場合に比べて全体の処理時間は大幅に短縮することになる。
ここで、プログラムのロード前に得られた改竄検出情報が前記認証データであり、プログラムのロード以後に得られた改竄検出情報が前記比較データである。【００３８】
なお、本実施の形態では、第１のハッシュ関数は第２のハッシュ関数よりもセキュリティレベルが低いので、セキュリティレベルを維持するために乱数によるランダムな要素を加えている。
以下に、本発明の実施の形態の詳細について説明する。
１．実施の形態１
本発明の実施の形態１について、以下に説明する。【００３９】
１．１．構成
本発明の一実施形態に係る改竄検出装置１は、プログラムをフラッシュメモリなどの不揮発性メモリからＲＡＭなどの揮発メモリにロードして実行する装置であり、ロードされて実行中のプログラムについて改竄を検出する。【００４０】
改竄検出装置１は、具体的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ディスプレイユニット、キーパッドなどから構成されるコンピュータシステムである。前記ＲＯＭにはコンピュータプログラムが記憶されており、ＲＡＭ上に読み出されたコンピュータプログラムに従って前記ＣＰＵが動作することにより、改竄検出装置１はその機能を達成する。【００４１】
図１は、改竄検出装置１の全体構成を示すブロック図である。
改竄検出装置１は、図１に示すように、ＲＡＭ２、フラッシュメモリ３、ロード手段４、実行手段５、改竄検出要求手段６及び改竄検出手段７を含んで構成される。以下、各構成要素について説明する。
ＲＡＭ２は、ランダムアクセスメモリである。ＲＡＭ２には、ロード手段４によりプログラムがロードされ、実行手段５によりプログラム実行時のデータが書き込まれ、また読み出される。【００４２】
フラッシュメモリ３は、具体的にはＦｌａｓｈ  ＲＯＭである。フラッシュメモリ３は、実行されるべきプログラムと、認証データリストとを記憶する。
フラッシュメモリ３は、本実施の形態では、図１に示すように、実行されるべきプログラムとしてプログラム２１、２２・・・を記憶している。認証データリストは、改竄検出に用いる認証データを含むデータである。認証データリストの詳細は後述する。【００４３】
ＲＡＭ２に記録されているプログラム２４は、例えば、プログラム２１がフラッシュメモリ３からＲＡＭ２にロードされたものである。
ロード手段４は、適宜のタイミングで、フラッシュメモリ３に記憶されているプログラムをＲＡＭ２にロードする。
前記タイミングとしては、例えば電源投入時、他のプログラムからロードを指示された時、所定時間間隔毎などが考えられる。【００４４】
ロード手段４は、前記タイミングと、そのタイミングにおいて実行すべきプログラムのプログラム識別子とを対応づけて予め記憶しているものとする。
また、前記タイミングとしては、更に、前記キーパッドを用いてユーザ操作によりプログラムの実行を要望される時も考えられる。この場合、実行すべきプログラムに係るプログラム識別子は、ユーザ操作により指定されるものとする。【００４５】
そして、前記タイミングを検出した場合に、ロード手段４は、フラッシュメモリ３に記憶されているプログラムのうちプログラム識別子により識別されるもののＲＡＭ２へのロードを開始する。ロードを開始すると、ロード手段４は、ロードを開始したプログラムに係るプログラム識別子を含むロード開始通知を改竄検出要求手段６に対して送信する。
ここで、ロード手段４は、ロードを開始したプログラムに関する情報を認証データリストとしてフラッシュメモリ３に追記する。フラッシュメモリ３に認証データリストが記録されていない場合には、認証データリストを新たに生成してフラッシュメモリ３に記録する。【００４６】
図２は、認証データリストの一例を示す図である。
認証データリスト２３は、プログラム識別子４１、プログラムアドレス４２、プログラムサイズ４３、ブロック分割サイズ４４、認証データ４５から構成される。
プログラム識別子４１は、プログラムを識別するためのＩＤ情報である。フラッシュメモリ３に記録されているプログラムには、プログラムを識別するためのプログラム識別子が予め付されている。【００４７】
プログラムアドレス４２は、ロード手段４がＲＡＭ２上でプログラムをロードする領域の先頭アドレスである。
プログラムサイズ４３は、プログラム識別子４１で識別されるプログラムのサイズを示す。
ロード手段４は、ロード開始時に、フラッシュメモリ３からプログラムと共にプログラム識別子を読み出してプログラム識別子４１とし、プログラムをロードするアドレスをプログラムアドレス４２とし、ロードするプログラムのサイズをプログラムサイズ４３として、認証データリストに追記する。【００４８】
ここで、認証データリスト２３に上述の追記がなされた直後には、図２においてプログラム識別子の値が０００３である行において空欄４６、４７として示すように、ブロック分割サイズ、認証データの欄が空欄となっている。
ブロック分割サイズ、認証データの内容は、ロード手段４以外によって後ほど書き込まれる。ブロック分割サイズ４４、認証データ４５については後述する。【００４９】
ロード手段４は、プログラムのロードが終了すると、実行手段５に対し、実行すべきプログラムのプログラム識別子を含む実行指示を送信する。
また、ロード手段４は、ロードしたプログラムが実行手段５により実行されることが無くなった場合、ロードしたプログラムがメモリ２中から消去される場合等の適宜のタイミングで、そのプログラムについての、プログラム識別子、プログラムアドレス、プログラムサイズ、ブロック分割サイズ及び認証データの組を削除する。【００５０】
実行手段５は、具体的にはＣＰＵである。
実行手段５は、ロード手段４から実行指示を受け取り、ＲＡＭ２上にロードされているプログラムのうち、前記実行指示に含まれるプログラム識別子により識別されるプログラムを実行する。
実行手段５は、適宜のタイミングで、改竄検出要求手段６に対して、実行中のプログラムに係るプログラム識別子を含むトリガ通知を送信する。前記トリガ通知は、改竄検出要求手段６において、改竄検出開始のトリガとなり得るものである。【００５１】
ここで、実行手段５が前記トリガ通知を送信する前記適宜のタイミングとしては、予め定められている特定のプログラムの実行を開始するときや、プログラムのうち予め定めた特定のモジュール、サブルーチンの実行を開始するときなどが考えられる。
実行手段５は、改竄検出要求手段６からプログラムの実行停止指示を受け取った場合、前記実行停止指示に含まれるプログラム識別子により識別されるプログラムの実行を停止する。【００５２】
改竄検出要求手段６は、フラッシュメモリ３上のプログラムについての改竄検出に関する制御を行う。
改竄検出要求手段６は、ロード手段４からロード開始通知を受信し、ロード開始通知に含まれていたプログラム識別子を含む認証データ生成要求を改竄検出手段７に対して送信する。【００５３】
ここで、認証データは、改竄検出に用いられるデータである。認証データの詳細については後述する。
また、改竄検出要求手段６は、実行手段５によるプログラムの実行中に、改竄検出処理を開始するためのトリガの検出を試みる。
そして前記トリガを検出した場合には、改竄検出要求手段６は、前記プログラムのプログラム識別子を含む改竄検出要求を改竄検出手段７に対し送信する。そして、改竄検出手段７から前記改竄検出要求に対する応答としてプログラム識別子、改竄検出結果を含む改竄検出応答を受け取る。【００５４】
ここで、改竄検出結果は、改竄の有無を示す。
改竄検出要求手段６は、改竄検出結果が改竄有りを示す場合、改竄検出応答に含まれていたプログラム識別子を含むプログラムの実行停止指示を実行手段５に対し送信する。一方、改竄検出結果が改竄無しを示す場合、改竄検出要求手段６は、実行手段５に対して特に指示は行わない。【００５５】
なお、上述の改竄検出開始のトリガは、改竄検出を開始すべき適切なタイミングで発生するものとする。例えば、改竄検出要求手段６自身が、定期的にトリガを発生させ、そのトリガを検出してもよい。また、実行手段５がプログラムのうち所定のモジュールの実行を開始する際に改竄検出要求手段６に対して通知を行い、改竄検出要求手段６が当該通知をトリガとして検出してもよい。【００５６】
改竄検出手段７は、図１に示すように、入出力手段１１、分割サイズ決定手段１２、分割手段１３、第１変換手段１４、第２変換手段１５、格納手段１６及び判定手段１７を含んで構成される。以下、各構成について説明する。
入出力手段１１は、改竄検出要求手段６から認証データ生成要求を受けた場合、分割サイズ決定手段に対し、認証データ生成要求に含まれるプログラム識別子を送信する。【００５７】
入出力手段１１は、改竄検出要求手段６から改竄検出要求を受けた場合、その改竄検出要求を判定手段１７に送信する。
入出力手段１１は、判定手段１７から改竄検出応答を受けた場合、改竄検出要求手段６に対してその改竄検出応答を送信する。
分割サイズ決定手段１２は、プログラムを複数のブロックに分割するための１ブロックあたりのサイズであるブロック分割サイズＢＳを決定する。以下、プログラムを複数のブロックに分割する処理をブロック分割という。【００５８】
分割サイズ決定手段１２は、入出力手段１１から認証データ生成要求とを受け付けると、乱数を生成し、生成した乱数に応じてブロック分割サイズを決定する。
ここで、上述したブロック分割サイズは、生成した乱数をそのまま使用するものとする。プログラムがメモリにロードされる毎に乱数が再計算されるので、ブロック分割サイズも乱数の再計算に応じて変更されることになる。【００５９】
上述のようにブロック分割サイズが決定すると、分割サイズ決定手段１２は、プログラム識別子と、ブロック分割サイズと、生成するデータの種別を示す生成データ種別とを含む分割指示を分割手段１３に対して送信する。
ここで、生成データ種別は、認証データ、比較データのいずれかの生成を示す情報である。生成データ種別の内容に従い、後述の分割手段１３、第２変換手段１５等において実行する処理が選択される。【００６０】
また、認証データは、ロード前のプログラムから第１変換手段１４、第２変換手段１５により生成される改竄検出用のデータである。比較データは、ロード以後のプログラムから第１変換手段１４、第２変換手段１５により生成される改竄検出用のデータである。
分割手段１３に対しては、後述するが、判定手段１７も分割指示を送信する。この場合、判定手段１７は、プログラム識別子と、ブロック分割サイズと、比較データの生成を示す生成データ種別とを含む分割指示を分割手段１３に対して送信する。【００６１】
分割手段１３は、分割指示を受け付けると、分割指示に含まれるプログラム識別子に係るプログラムをフラッシュメモリ３から読み出す。次に、分割手段１３は、プログラム識別子に対応するプログラムサイズを認証データリスト２３から読み出す。
そして、読み出したプログラムサイズに応じたパディング処理を行う。
ここで、パディング処理は、プログラムサイズがブロック分割サイズの倍数になるよう、プログラムの最後尾に意味のない値（例えば０）のデータを付加することで行う。【００６２】
そして、分割手段１３は、パディングされたプログラムを、ブロック分割サイズの大きさのブロックデータへと分割する。
ここで、ブロック分割により、ブロック分割サイズの大きさであるＮ個のブロックデータ（Ｂ［１］〜Ｂ［Ｎ］）が生成されたものとする。
分割が終了すると、分割手段１３は、第１変換手段１４に対し、分割指示に含まれていたプログラム識別子、生成データ種別を含む第１変換指示を第１変換手段１４に送信する。そして、分割手段１３は、前記生成データ種別が認証データの生成を示す場合に、ブロック分割サイズを、分割指示に含まれるプログラム識別子に対応づけて、認証データリスト２３に追記する。【００６３】
前述の図２の例であれば、プログラム識別子の値が０００３であり、決定したブロック分割サイズが４０９６バイトであった場合には、空欄４６に値４０９６を書き込むことになる。
第１変換手段１４は、第１変換指示を受け取ると、分割手段１３によりブロック分割された結果である各ブロックデータを、データサイズを減らすことのできる所定のアルゴリズムによる変換処理によって変換する。【００６４】
この変換処理は、簡単な論理演算等の高速に実行できる処理が望ましい。
本実施の形態では、第１変換手段１４が行う変換処理はＸＯＲ（ｅＸｃｌｕｓｉｖｅ  ＯＲ）処理であるものとする。即ち、第１変換手段１４は、Ｂ［１］〜Ｂ［Ｎ］のＸＯＲを演算する。
そして、第１変換指示に含まれるプログラム識別子、生成データ種別及び前記演算の結果である認証一時データを含む第２変換指示を、第２変換手段１５に出力する。【００６５】
第２変換手段１５は、第２変換指示を受け取ると、前記第２変換指示に含まれる認証一時データに対し、所定のアルゴリズムを用いてデータ変換を行う。
第２変換手段１５によるデータ変換処理は、比較的時間をかけて改竄検出値を算出する処理である。
本実施の形態では、第２変換手段１５が行うデータ変換処理は一方向性関数であるＳＨＡ１処理であるものとする。【００６６】
第２変換手段１５は、前記認証一時データに対してＳＨＡ１処理を行う。
第２変換手段１５は、第２変換指示に含まれる生成データ種別が認証データの生成を示す場合には、ＳＨＡ１処理の結果を認証データとしてプログラム識別子と共に格納手段１６に送信する。一方、生成データ種別が比較データの生成を示す場合には、ＳＨＡ１処理の結果を比較データとしてプログラム識別子と共に判定手段１７に送信する。【００６７】
格納手段１６は、第２変換手段１５から、プログラム識別子と認証データとを受け取ると、前記プログラム識別子に対応づけて認証データを認証データリスト２３に書き込む。
前述の図２の例であれば、生成した認証データが認証データＡ３であり、プログラム識別子の値が０００３であった場合には、空欄４７に認証データＡ３を書き込むことになる。【００６８】
判定手段１７は、改竄検出要求手段６から入出力手段１１を介して改竄検出要求を受信する。そして、認証データリスト２３中で、前記改竄検出要求に含まれるプログラム識別子と同値のプログラム識別子を検索する。そのプログラム識別子を発見できた場合、認証データリスト２３から、プログラム識別子に対応付けられているブロック分割サイズを読み出す。そして、判定手段１７は、プログラム識別子とブロック分割サイズと比較データの生成を示す生成データ種別とを含む分割指示を分割手段１３へと送信する。【００６９】
また、判定手段１７は、前記分割指示の送信後に、第２変換手段１５からプログラム識別子と比較データとを受け取る。
この場合、判定手段１７は、プログラム識別子に対応する認証データを認証データリストから読み出して、受け取った比較データと比較する。
判定手段１７は、入出力手段１１を介して改竄検出要求手段６に対して、認証データと比較データとが一致する場合には改竄無しを示す改竄検出結果と、第２変換手段１５から取得したプログラム識別子とを含む改竄検出応答を送信する。認証データと比較データとが一致しない場合には、改竄有りを示す改竄検出結果と、第２変換手段１５から取得したプログラム識別子とを含む改竄検出応答を改竄検出要求手段６に対して送信する。【００７０】
１．２．動作
上述のように構成された改竄検出装置１による改竄検出処理について説明する。
図３は、改竄検出装置１によるプログラム実行動作を示すフローチャートである。
まず、ロード手段４は、適宜のタイミングで、実行手段５に実行させるべきプログラムをフラッシュメモリ３から読み出してＲＡＭ２へのロードを開始する（ステップＳ１）。ロードを開始すると、ロード手段４は、ロードを開始したプログラムに係るプログラム識別子を含むロード開始通知を改竄検出要求手段６に対して送信する。改竄検出要求手段６は、前記ロード開始通知を受け取ると、ロード開始通知に含まれていたプログラム識別子を含む認証データ生成要求を改竄検出手段７に対して送信する。【００７１】
改竄検出手段７は、前記認証データ生成要求を受信すると、プログラム改竄検出用の認証データ及び認証データリストの生成を行う（ステップＳ２）。ステップＳ２の詳細については、図４を用いて後ほど説明する。
前記プログラムのＲＡＭ２へのロードが完了すると、ロード手段４は、ロードしたプログラムを示すプログラム識別子を含んだ実行指示を実行手段５に対して送信する。【００７２】
実行手段５は、前記実行指示に含まれるプログラム識別子によって識別されるプログラムの実行を開始する（ステップＳ３）。
ここで、図３のフローチャートにおいては、ステップＳ２及びＳ３を順次実行するように記載しているが、ステップＳ２、Ｓ３は並行して実行してももちろんよい。
そして、改竄検出要求手段６は、改竄検出トリガの発生を監視する（ステップＳ４）。【００７３】
改竄検出トリガが発生せず（ステップＳ４：ＮＯ）、実行中のプログラムが実行終了した場合（ステップＳ８：ＹＥＳ）、処理を終了する。
改竄検出トリガが発生した場合（ステップＳ４：ＹＥＳ）、改竄検出要求手段６は、ステップＳ２にてロードされたプログラムのプログラム識別子を含む改竄検出要求を改竄検出手段７に対し送信する。【００７４】
改竄検出手段７は、前記改竄検出要求を受け取ると、改竄検出要求に含まれるプログラム識別子により識別されるプログラムについて前述の比較データを生成する（ステップＳ５）。ステップＳ５については、後述する。
そして、改竄検出手段７における判定手段１７は、認証データリストから認証データを読み出し、前記認証データと前記比較データとを比較する（ステップＳ６）。【００７５】
改竄検出手段７は、認証データと比較データとが一致する場合には（ステップＳ６：ＹＥＳ）、改竄無しを示す改竄検出結果と、プログラム識別子とを含む改竄検出応答を、入出力手段１１を介して改竄検出要求手段６に対して送信する。改竄検出要求手段６は、改竄無しを示す改竄検出結果を受け取った場合、特に処理を行わない。この結果、ステップＳ４以降の処理が継続される。【００７６】
一方、改竄検出手段７は、認証データと比較データとが一致しない場合には（ステップＳ６：ＮＯ）、改竄有りを示す改竄検出結果と、プログラム識別子を含む改竄検出応答を入出力手段１１を介して改竄検出要求手段６に対して送信する。
改竄検出要求手段６は、改竄有りを示す改竄検出結果が改竄検出応答に含まれていた場合、改竄検出応答に含まれているプログラム識別子を含む実行停止指示を実行手段５に送信する。【００７７】
実行手段５は、前記実行停止指示を受け取ると、前記実行停止指示に含まれるプログラム識別子により識別されるプログラムの実行を停止する（ステップＳ７）。
次に、ステップＳ２の詳細について、図４を用いて説明する。
図４は、ステップＳ２の詳細である、認証データ生成処理を示す図である。
改竄検出手段７における入出力手段１１は、プログラム識別子を含む認証データ生成要求を改竄検出要求手段６から受け取る。【００７８】
入出力手段１１は、前記認証データ生成要求を分割サイズ決定手段１２に送信する。
分割サイズ決定手段１２は、認証データ生成要求を受け付けると乱数を生成し、乱数に基づきブロック分割サイズＢＳを決定する（ステップＳ２１）。
そして、分割サイズ決定手段１２は、プログラム識別子と、ブロック分割サイズと、認証データの生成を示す生成データ種別とを含む分割指示を分割手段１３に対して送信する。【００７９】
分割手段１３は、分割指示を受け付けると、分割指示に含まれるプログラム識別子に係るプログラムをフラッシュメモリ３から読み出す。次に、分割手段１３は、プログラム識別子に対応するプログラムサイズＰＳを認証データリスト２３から読み出す。
そして、分割手段１３は、読み出したプログラムサイズＰＳに応じたパディング処理を行う（ステップＳ２２）。【００８０】
次に、分割手段１３は、パディング後のプログラムをブロック分割サイズの大きさのブロックデータ（Ｂ［１］〜Ｂ［Ｎ］）へと分割する（ステップＳ２３）。
分割が終了すると、分割手段１３は、第１変換手段１４に対し、分割指示に含まれていたプログラム識別子、生成データ種別を含む第１変換指示を第１変換手段１４に送信する。【００８１】
そして、分割手段１３は、ブロック分割サイズを、分割指示に含まれるプログラム識別子に対応づけて、認証データリスト２３に追記する（ステップＳ２４）。
第１変換手段１４は、変数ｉを１で初期化し、大きさがＢＳのバッファ領域Ｂｕｆを確保し、Ｂｕｆを値０で初期化する（ステップＳ２５）。
ｉがＮ以下である場合（ステップＳ２６：ＹＥＳ）、ＢｕｆとＢ［ｉ］との排他的論理和（ＸＯＲ）を計算し、その計算結果をＢｕｆに格納する（ステップＳ２７）。図中ではＢｕｆ  ＝  Ｂｕｆ  ＸＯＲ  Ｂ［ｉ］のように記載している。【００８２】
そして、ｉを１インクリメントし（ステップＳ２８）、ステップＳ２６に戻る。
また、ｉがＮを超える場合（ステップＳ２６：ＮＯ）、第１変換手段１４は、第２変換手段１５に対して、プログラム識別子を出力すると共に、認証一時データとしてＢｕｆの内容を出力する（ステップＳ２９）。
次に、第２変換手段１５は、認証一時データに対して所定の演算であるＳＨＡ１処理を施し、その結果である２０バイトのハッシュ値である認証データを生成する（ステップＳ３０)。【００８３】
第２変換手段１５は、ＳＨＡ１処理の結果を認証データとしてプログラム識別子と共に格納手段１６に送信する。
ステップＳ２の認証データ生成処理において取り扱われるデータの変遷は重要なので、ここで図５を用いて補足説明する。
図５は、認証データ生成処理におけるデータの変遷について説明するための図である。【００８４】
プログラム２１は、改竄チェック対象となるプログラムである。プログラム２１のプログラムサイズは６２ＫＢであり、分割サイズ決定手段１２により決定されたブロック分割サイズは４ＫＢとする。
プログラム２１には、パディング処理がなされる。
ここで、パディングに用いられるデータは、例えば値が全て０などの無意味なデータとする。【００８５】
パディングされたプログラムのサイズはブロック分割サイズ４ＫＢの倍数となる。
本例の場合、プログラム２１の最後部に、２ＫＢのパディング用のデータが付加される。
よって、パディング後のプログラム２１の総サイズは、６４ＫＢとなる（図５の２１）。【００８６】
続いて、パディング後の６４ＫＢのプログラム２１に対して、４ＫＢごとにブロック分割を行う。
ブロック分割の結果が図５に示すプログラム６１となる。
ここでは、Ｂ［１］、Ｂ［２］、・・・、Ｂ［１６］の１６個のブロックに分割される。【００８７】
次に、各ブロックに対して、第１変換手段１４であるＸＯＲ演算６２を、図４のステップＳ２５〜２７、２９、３０にしたがって処理する。
ＸＯＲ演算６２によって生成された４ＫＢのデータが、認証一時データ６３となる。
ここで、ＸＯＲ演算を（＋）と表すと、認証一時データ６３は、Ｂ［１］（＋）Ｂ［２］（＋）・・・（＋）Ｂ［１６］を演算した結果となる。【００８８】
次に、認証一時データ６３に対し、第２変換手段１５によるＳＨＡ１処理６４が施され、２０バイトのハッシュ値である認証データ６５が生成される。
次に、図３のステップＳ５の詳細について、図６を用いて説明する。
図６は、ステップＳ５の詳細である、比較データ生成処理を示す図である。
改竄検出手段７における入出力手段１１は、改竄検出要求手段６から改竄検出要求を受け取り、その改竄検出要求を判定手段１７に送信する。【００８９】
判定手段１７は、改竄検出要求手段６から入出力手段１１を介して改竄検出要求を受信する。そして、認証データリスト２３中で、前記改竄検出要求に含まれるプログラム識別子と同値のプログラム識別子を検索する。そのプログラム識別子を発見できた場合、前記プログラム識別子に対応付けられているブロック分割サイズを認証データリスト２３から読み出す。そして、プログラム識別子とブロック分割サイズと比較データの生成を示す生成データ種別とを含む分割指示を分割手段１３へと送信する（ステップＳ４１）。【００９０】
分割手段１３は、分割指示を受け付けると、プログラム識別子に対応するプログラムサイズを認証データリスト２３から読み出す。そして、分割手段１３は、ＲＡＭ２上にロードされているプログラムのうち前記プログラム識別子で識別されるプログラムについて、前記プログラムサイズに応じたパディング処理を行う（ステップＳ４２）。このパディング処理の内容は、ステップＳ２２で説明したものと同様である。【００９１】
次に、分割手段１３は、パディングされたプログラムをブロック分割サイズの大きさのブロックデータ（Ｂ［１］〜Ｂ［Ｎ］）へと分割する（ステップＳ４３）。この分割処理の内容は、ステップＳ２３で説明したものと同様である。
分割が終了すると、分割手段１３は、第１変換手段１４に対し、分割指示に含まれていたプログラム識別子と生成データ種別とを含む第１変換指示を第１変換手段１４に送信する。【００９２】
第１変換手段１４は、ステップＳ２５〜Ｓ２８にて説明したのと同様に、ステップＳ４３で生成したブロックのＸＯＲを計算し、その結果をＢｕｆに格納する（ステップＳ４４〜Ｓ４７）。
そして、第１変換手段１４は、Ｂｕｆの内容を比較一時データとして第２変換手段１５に対して出力する。【００９３】
第２変換手段１５は、比較一時データに対して所定の演算であるＳＨＡ１処理を施し、その結果である２０バイトのハッシュ値である比較データを生成し（ステップＳ４９)、比較データ生成処理を終了する。
以上の処理により、ＲＡＭ上のプログラムが改竄された場合に改竄を検知して、ＲＡＭ上の不正なプログラムの実行を防止することができる。【００９４】
１．３．効果についての補足説明
以下、本実施の形態１の構成によって得られる効果を更に詳細に述べる。
従来の改竄検出方法では、改竄チェック対象のプログラムに対する認証データであるハッシュ値を生成するために、チェック対象となるプログラムのサイズ分のデータに対してＳＨＡ１などの一方向性関数を用いてハッシュ値を生成処理をする必要がある。【００９５】
そのため、改竄チェック対象プログラムのサイズが大きくなると、ハッシュ値生成処理に多大な時間を要する。
一方、本実施の形態の改竄検出装置１では、まず、改竄チェック対象のプログラムにＸＯＲ処理等の非常に負荷の軽い処理である第１変換手段１４による変換をかけて、プログラムの特徴を残しつつデータ量を高速に削減する。次いで、データ量が既に削減されたデータに対して、ＳＨＡ１処理等の負荷の高い処理である第２変換手段１５による変換をおこなう。よって、全体として改竄検出処理にかかる時間を低減させることができる。【００９６】
なお、上記構成において、第１変換手段１４による変換で用いるブロック分割サイズを固定サイズにしてしまうと、第１変換手段１４による第１のデータ変換処理が特定されやすくなる。第１のデータ変換処理が特定されると、本来の正当なプログラムを、第１のデータ変換処理の結果が同等になるようにしつつ、不正な動作をするよう改竄することが可能となってしまう。【００９７】
この問題に対し、本実施の形態では、ブロック分割サイズをランダムに設定することによって予測しにくいものとにしている。
これにより、第１のデータ変換処理の結果が同等になるようにしつつ不正な動作をするよう改竄するには、ブロック分割サイズを予め知ることが必要なので、たとえ第１変換手段が特定されたとしても不正な改竄行為は成されにくくなる。【００９８】
また、本実施の形態では、ブロック分割サイズは、Ｆｌａｓｈ上のプログラムのロードの度に毎回ランダムに決定される。従って、一つのプログラムに着目して不正解析を行ったとしても、ロードの度にブロック分割サイズが変化するため、ブロック分割サイズが予測しにくいものとなり、不正な改竄行為をより効果的に防止することができる。
なお、第１変換手段１４のＸＯＲ処理は、第２変換手段１５のＳＨＡ１よりも安全性のレベルが低い処理であるが、分割サイズ決定手段１２がブロック分割サイズを乱数により決定していることで、安全性のレベルを落とすことなく改竄検出処理が可能となっている。【００９９】
また、認証データは、認証データ生成処理にて動的に生成するので、従来技術とは異なり、予めメモリに実行ログを残しておく必要はない。さらに、予め認証データを保持しておく必要もないため、省メモリの効果がある。さらには、メモリに残しておいたデータが奪われて不正解析の手掛かりとされることも防止できる。
２．実施の形態２
実施の形態１では、１つの改竄チェック対象のプログラムに対して、１つの認証データを生成していた。これに対し本実施の形態では、１つの改竄チェック対象のプログラムについて複数の認証データを生成する。これら複数の認証データの生成には、それぞれ異なる複数のブロック分割サイズを用いる。そして、複数の認証データのうちの１つを、改竄検出装置で実行されているプロセスの状況（以下、プロセス状況という）に応じて選出し、選出した認証データと比較データとを比較して改竄有無をチェックする。【０１００】
装置の構成要素としては、本実施の形態における改竄検出手段７は、実施の形態１の図１で説明したものと相違はない。しかし、各構成要素の動作については、実施の形態１によるものと若干相違する。
具体的には、本実施の形態における分割サイズ決定手段１２は、複数のブロック分割サイズを決定している。そして、分割手段１３と第１変換手段１４と第２変換手段１５とが各ブロック分割サイズに応じた複数の認証データを生成する。そして、生成された複数の認証データは、格納手段１６により認証データリストに登録する。また、判定手段１７は、認証データリストに記録されている複数のサイズの認証データからプロセス状況に応じて１つを選択し、選択した認証データのサイズを分割手段１３に通知する。また、改竄検出要求手段６の動作は、実施の形態１とは多少異なっている。【０１０１】
以下、実施の形態１と異なる点を中心に、認証データの生成と、比較データの生成及び改竄検出について説明する。
２．１．認証データの生成
以下、図７を用いて、実施の形態２における認証データ生成フローについて説明する。
図７で示す処理は、図４で示した処理のうちプログラムに対してブロック分割、第１及び第２のデータ変換処理を行う部分については、ほぼ共通する。【０１０２】
よって、以下では、図４で既に説明した部分と異なる箇所を中心に説明する。
まず、改竄検出要求手段６が、プログラム識別子を含む認証データ生成要求を、入出力手段１１を介して分割サイズ決定手段１２に対し送信する。
ここまでの処理は、実施の形態１と変わらない。
分割サイズ決定手段１２は、前記認証データ生成要求を受信するとＭ個の乱数を生成する。【０１０３】
ここで、Ｍは予め定めた自然数とする。本実施の形態では、Ｍ＝４の例で説明する。ただし、このＭは、ランダムに生成して、装置内に記憶しておくこととしても構わない。
そして、Ｍ個の乱数それぞれに対応するブロック分割サイズ（ＢＳ＿１〜ＢＳ＿Ｍ）を生成する（ステップＳ６１）。
各乱数からブロック分割サイズを決定する手順は、実施の形態１における手順と同様である。【０１０４】
そして、分割サイズ決定手段１２は、プログラム識別子と、ブロック分割サイズ（ＢＳ＿１〜ＢＳ＿Ｍ）と、認証データの生成を示す生成データ種別とを含む分割指示を分割手段１３に対して送信する。
分割手段１３は、分割指示を受け付けると、前記分割指示に含まれるプログラム識別子に係るプログラムをフラッシュメモリ３から読み出す。次に、分割手段１３は、プログラム識別子に対応するプログラムサイズＰＳを認証データリスト２３から読み出す。【０１０５】
分割手段１３は、内部変数ｊを１で初期化する（ステップＳ６２）。そして、ＢＳを、ＢＳ＿ｊとする（ステップＳ６３）。
以後、ステップＳ６４〜Ｓ７２に関しては、前述のステップＳ２２〜Ｓ３０と同様である。
ただし、実施の形態１におけるＮは、実施の形態２ではＮ＿ｊに置き換わっている。【０１０６】
また、ブロックの分割数は、実施の形態１ではＮであり、実施の形態２ではＮ＿ｊである。
また、実施の形態１の認証データは、実施の形態２では認証データ＿ｊに置き換わっている。
また、ステップＳ６６において、分割手段１３が生成する認証データリストは、実施の形態１において生成されるものと相違する。【０１０７】
図８は、ステップＳ６６において、分割手段１３が生成する認証データリスト８１を説明するための図である。
図８を参照すると、認証データリスト８１には、値が０００１である１つのプログラム識別子に対し、４つの異なるブロック分割サイズと、４つの異なる認証データが登録されている。【０１０８】
図８のブロック分割サイズ８５を参照すると、１ｋＢ、４ｋＢ、６ｋＢ、２０ｋＢの４つのサイズが登録されているが、これらが、上述のＢＳ＿１〜ＢＳ＿Ｍの一例である。
すなわち、ＢＳ＿１＝１、ＢＳ＿２＝４、ＢＳ＿３＝６、ＢＳ＿４＝２０である。ただし、Ｍの値が４の場合である。
ステップ６６においては、分割手段１３は、ＢＳ＿ｊについて、ブロック分割を行う毎に、ＢＳ＿ｊをブロック分割サイズ８５の欄に追記することになる。【０１０９】
また、そのＢＳ＿ｊに対応する認証データ８６の欄には、ステップＳ７２において、格納手段１６が、第２変換手段１５により生成される認証データ＿ｊを記録することとなる。
次に、ステップＳ７３において、分割手段１３は、ｊをインクリメントする（ステップＳ７３）。【０１１０】
そして、ｊがＭを超える場合（ステップＳ７４：ＹＥＳ）、処理を終了する。
ｊがＭを超えない場合（ステップＳ７４：ＮＯ）、ステップＳ６３以降の処理を行う。
以上で、図８の説明を終える。
２．２．比較データの生成及び改竄検出
２．２．１．改竄検出要求手段６への追加機能
実施の形態２では、改竄検出処理時に、上述した認証データリスト８１に登録されたＭ個（本実施の形態では４個）の認証データから１つを選択し、その認証データと比較するための比較データを算出する。そして、比較データと認証データを比較することによりプログラムの改竄を検出する。【０１１１】
改竄検出処理において、前述の比較に用いる認証データは、現在動作しているプロセスの状況に基づき算出されるプロセス状況算出値に基づいて選択される。プロセス状況算出値の詳細は、後述する。
ここで、改竄検出要求手段６は、プロセス状況算出値を生成するために、実施の形態１におけるものに対して必要な機能の追加がなされている。【０１１２】
本実施の形態における改竄検出要求手段６は、プロセス状況を監視する機能を持つ。
図９は、実施の形態２において、実施の形態１から追加された構成を中心とした改竄検出要求手段６を示す概略図である。
改竄検出要求手段６は、実施の形態１で説明した機能を備えており、更に、内部構成として、切り替え実行可能なプロセス群全体を監視するスケジューリング手段１０１と、各プロセスの優先度やＣＰＵ使用率などのプロセス情報を記憶しているプロセス管理テーブル格納部１０２とを有している。【０１１３】
プロセス管理テーブル格納部１０２は、プロセス管理テーブルを格納している。
図１０は、プロセス管理テーブル格納部１０２に格納されるプロセス管理テーブル１２１の一例を示している。
プロセス管理テーブル１２１は、プロセス識別子１２２、優先度１２３、ＣＰＵ使用率１２４から構成されている。【０１１４】
プロセス識別子１２２は、実行中のプロセスを識別するためのプロセスＩＤである。
優先度１２３は、プロセス識別子１２２で識別されるプロセスに付与されている優先度の値である。
ＣＰＵ使用率１２４は、プロセス識別子１２２で識別されるプロセスが、どの程度ＣＰＵを使用しているかを表す数値である。【０１１５】
図１０に示す例では、プロセス管理テーブル１２１には５つのプロセスが登録されている。
プロセス管理テーブル１２１は、プロセス識別子「０００１」で識別されるプロセスの優先度が「１０」であり、ＣＰＵ使用率が「４０％」であることを示す。同様に、プロセス識別子「０００２」「０００３」「０００４」「０００５」で識別される各プロセスの優先度は「４」「８」「１」「３」であり、ＣＰＵ使用率は「１０％」「３０％」「１％」「５％」であることを示す。【０１１６】
なお、プロセス管理テーブルは、プロセスを実行している実行手段５により生成され、逐次更新されるものとする。
２．２．２．プロセス状況算出値の生成
続いて、スケジューリング手段１０１が、プロセス管理テーブルに登録されている情報を用いてプロセス状況算出値を生成する処理について図１１を用いて説明する。【０１１７】
まず、スケジューリング手段１０１は、プロセス管理テーブル格納部１０２からプロセス管理テーブル１２１を読み出す（ステップＳ１０１）。
次に、プロセス管理テーブル１２１に登録されている情報を用いて所定のアルゴリズムによりプロセス状況算出値を算出する（ステップＳ１０２）。
ここでは、所定のアルゴリズムとして、プロセス管理テーブルに登録されているプロセスの数を算出し、算出したプロセス数をプロセス状況算出値とする。【０１１８】
一例として、プロセス管理テーブル１２１が図１０の状態であるとすると、プロセス管理テーブル１２１に登録されているプロセスの数は、プロセス識別子「０００１」から「０００５」までの５である。
この場合、スケジューリング手段１０１は、上述のアルゴリズムに従って、プロセス状況算出値を「５」とする。【０１１９】
次に、ステップＳ１０２にて算出したプロセス状況算出値を改竄検出手段７の入出力手段１１に送信する（ステップＳ１０３）。
プロセス状況算出値を受信した入出力手段１１は、判定手段１７にプロセス状況算出値を送信する。
２．２．３．認証データの選択と改竄検出
前述のように、入出力手段１１が、前記プロセス状況算出値を送信した後の処理については、図１２を用いて説明する。【０１２０】
図１２は、プロセス状況算出値を用いて認証データを選択する処理を示すフローである。
まず、判定手段１７は比較データの生成が開始されるより前に、前記プロセス状況算出値を受信する（ステップＳ１２１）。
ここで、判定手段１７は、最大閾値と最小閾値の組から成る閾値情報を予め保持しているものとする。前記閾値情報は、認証データを選出するのに用いられる情報であり、プロセス状況算出値と比較される。【０１２１】
次に、判定手段１７は閾値情報を読み出し（ステップＳ１２２）、プロセス状況算出値が最大閾値以上であるか否かを判定する（ステップＳ１２３）。
プロセス状況算出値が最大閾値以上の場合（ステップＳ１２３：ＹＥＳ）、認証データリスト１２１内でブロック分割サイズが最小サイズである認証データを選択する（ステップＳ１２４）。【０１２２】
例えば、認証データリスト８１が図８に示す内容の場合、最小のブロック分割サイズ１ＫＢに対応する認証データ＿１が選択される。
一方、プロセス状況算出値が最大閾値未満の場合（ステップＳ１２３：ＮＯ）、更に、プロセス状況算出値が最小閾値以下であるかを判定する（ステップＳ１２５）。
プロセス状況算出値が最小閾値以下である場合（ステップＳ１２５：ＹＥＳ）、認証データリスト８１内のブロック分割サイズが最大サイズの認証データを選択する（ステップＳ１２６）。【０１２３】
認証データリスト８１が図８に示す内容の場合、最大のブロック分割サイズは２０ＫＢなので認証データ＿４が選択される。
最小閾値＜プロセス状況算出値＜最大閾値の場合（ステップＳ１２５：ＮＯ）、認証データリスト８１内の全ての認証データからランダムに選択する（ステップＳ１２７）。
以上のフローにより複数ある認証データから１つの認証データを選択することができる。【０１２４】
認証データが選択されると、判定手段１７は、選択した認証データに対応する認証データリスト８１から、プログラムアドレス８３、プログラムサイズ８４、ブロック分割サイズ８５を判定手段１７が読み込む。
そして、これらの情報を用いて、比較データを算出し、比較データと認証データを比較し、改竄検出処理を行う。【０１２５】
比較データを算出する処理から、比較データと認証データ比較するまでの処理については、説明済みの実施の形態１と同様であるとする。
以上より、本実施の形態２では、プロセス状況算出値を利用することで、改竄検出処理にかける負荷を調整することができる。そのため、他のプロセスへの影響を最小限に抑えて改竄検出処理が可能になる。【０１２６】
３．その他変形例
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる
（１）上述の実施の形態において、ＲＡＭ２は、ランダムアクセスメモリとしているが、これに限らず、読み出し及び書き込み可能なメモリであればよい。また、フラッシュメモリ３は、ＦｌａｓｈＲＯＭとしていたが、これに限定されず、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）やＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの他の不揮発性のメモリでもよい。【０１２７】
（２）上述の実施の形態において、プログラム識別子は、プログラムを識別するためのＩＤ情報としているが、これに限らずプロセスＩＤやファイル名などプログラムを識別できる情報であればよい。
（３）上述の実施の形態において、ブロック分割サイズは、生成した乱数をそのまま使用するものとしていたが、これに限らず、ブロック分割サイズがある程度ランダムに生成される方法であればよい。【０１２８】
例えば、予め、乱数とブロック分割サイズの対応表を記憶しておき、生成した乱数を対応表を用いてブロック分割サイズに変換することとしてもよい。
また、例えば、ブロック分割サイズの候補値を予め所定個数（例えば、５つ）決めておき、候補値の１つを順番に用いることとしてもよい。
（４）上述の実施の形態において、ブロック分割する前にパディング処理を行っているが、ブロック分割した最終ブロックに対してパディング処理を行っても良い。この場合、Ｂ［１６］は２ＫＢのブロックとなる。【０１２９】
また、パディング処理を省略することとしてもよい。この場合、Ｂ［１６］がＢｕｆ中のデータよりもビット数が少なくなってしまう。
これに対応するため、例えば、Ｂｕｆ中のデータの一部分に対してのみＢ［１６］のデータとのＸＯＲ演算を行った結果を認証一時データ６３とするとしてもよい。また、Ｂ［１５］までＸＯＲ演算を行った結果を認証一時データ６３とするとしてもよい。【０１３０】
（５）上述の実施の形態において、プログラム全体の改竄チェックを行っていたが、これに限らず、プログラム内を部分的に改竄検出するようにしてもよい。
この場合、プログラムに係る改竄検出したい部分の先頭アドレスをプログラムアドレス４２とし、改竄検出したい部分のプログラムサイズをプログラムサイズ４３として、認証データリスト２３に登録すればよい。【０１３１】
このような構成とすれば、１つのプログラムに対して部分的に改竄検出ができるので、改竄検出に要する時間を短縮することができる。特に、認証一時データの生成ですら相当の時間がかかるほどの大きなプログラムに対して改竄検出する場合には有効である。
また、１つのプログラムに対して改竄検出を行いたい部分が複数ある場合などには、１つのプログラム識別子に対応づけて、プログラムアドレス４２、プログラムサイズ４３、ブロック分割サイズ４４及び認証データ４５の組を複数登録してもよい。【０１３２】
これにより、１つのプログラムについて複数の部分的なプログラム領域それぞれに対する改竄を検出することができる。
さらに、フラッシュメモリ３上で１つだったプログラムを同一内容の複数のプログラムとしてＲＡＭ２上にロードし並行処理を行う場合などには、１つのプログラム識別子に対応づけて、プログラムアドレス４２、プログラムサイズ４３、ブロック分割サイズ４４及び認証データ４５の組を複数登録してもよい。【０１３３】
この場合、プログラムサイズ４３しては、部分的なプログラムのサイズではなくプログラム全体のサイズが登録される。
（６）上述の実施の形態において、改竄検出開始のトリガが発生した場合に、複数のプログラムから改竄チェック対象となるプログラムを選択する方法について特には説明しなかったが、以下のようなものが考えられる。【０１３４】
まず、判定手段１７が、フラッシュメモリ３に格納されているプログラムのうちからランダムに選択した１つのプログラムを改竄チェック対象のプログラムとする方法が考えられる。
また、改竄検出要求手段６が、装置外部から改竄チェックを要求するプログラムの選択を受け付け、その選択されたプログラムのプログラム識別子を認証データ生成要求に含めて改竄検出手段７に対して送信することとしてもよい。【０１３５】
また、何らかのタイミングで改竄チェック用の割り込みを発生させ、その時点で実行中のプログラムを改竄チェック対象となるプログラムとして選択するとしてもよい。
この場合、プログラム実行手段５０がＲＡＭ上のプログラムを実行している間に、改竄検出要求手段６が、実行手段５に対して割り込みを発生させて、そのときのプログラムカウンタ値を取得し、そのプログラムカウンタ値を入出力手段１１へ送信し、入出力手段１１が受信したプログラムカウンタ値を判定手段１７に送信する。その後、判定手段１７が、受信したプログラムカウンタ値と認証データリスト２３内のプログラムアドレスとプログラムサイズから、プログラムカウンタ値が示すアドレスに対応するプログラム情報を読み込んでもよい。【０１３６】
また、改竄検出要求手段６が、入出力手段１１に比較データ生成要求を通知し、プログラムの改竄検出を行うタイミングについては、定期的に通知してもよいし、ＲＡＭ２上の改竄チェック対象のプログラム内に、改竄検出要求手段６への認証データ生成要求を送信する処理、改竄検出要求を送信する処理を埋め込んでおくなど、所定のイベントが発生するタイミングで行うようにしてもよい。【０１３７】
（７）分割サイズ決定手段１２に対してブロック分割サイズの閾値を設定しておき、分割サイズ決定手段１２が生成するブロック分割サイズが閾値以下になるように生成してもよい。このようにすることで、第１変換手段１４にて生成されるデータサイズが前記閾値以下のサイズでランダムに選ばれることとなるため、改竄チェック対象プログラムのサイズにかかわらず、第２変換手段１５の処理時間を一定以下の処理時間に抑えることができる。【０１３８】
（８）上述の実施形態では、第１変換手段１４によるデータ変換処理をＸＯＲとし、第２変換手段１５によるデータ変換処理をＳＨＡ１としているが、これに限定されるわけではなく、論理演算を組み合わせたアルゴリズムや一方向性関数などを利用してもよい。
論理演算を組み合わせたアルゴリズムには、例えば、論理積演算と排他的論理和演算を交互に行うアルゴリズム等が考えられる。【０１３９】
このアルゴリズムを第１変換手段１４で行う場合を例に、具体的に説明すると、まずブロックデータＢ［１］とＢ［２］との論理積演算を行う。次に、Ｂ［１］とＢ［２］との論理積演算結果と、Ｂ［３］との排他的論理和演算を行う。次に排他的論理和演算の結果と、Ｂ［４］との論理積演算を行う。以下、同様に、排他的論理和演算と、論理積演算とを交互に繰り返す。【０１４０】
なお、この場合、論理積演算と、排他的論理和演算の実行回数の比を、上記のように１：１とせず、２：１など、他の比率を用いることとしてもよい。
例えば、２：１とする場合であれば、Ｂ［１］とＢ［２］との論理積演算を行い、その論理積演算の結果とＢ［３］との論理積演算を行う。論理積演算が２回終了したので、今度は、Ｂ［３］に係る前記論理積演算の結果と、Ｂ［４］との排他的論理和演算を行う。排他的論理和演算が１回終了したので、次に、その排他的論理和演算の結果と、Ｂ［５］との論理積演算を行う。以降は、排他的論理和演算１回に対し、論理積演算２回を実行していくことになる。【０１４１】
比率をランダムに定めるよう実装することで、このアルゴリズムも処理が軽くかつランダム性のあるアルゴリズムとなる。
また、第１変換手段１４と第２変換手段１５との両方で一方向性関数を使う場合には、それぞれで異なる一方向性関数を用いることが望ましい。例えば、データ量の削減を目的とする第１変換手段１４では軽量な一方向性関数を、認証データの算出を目的とする第２変換手段１５では安全性の高い一方向性関数を用いるとよい。【０１４２】
また、改竄チェック対象のプログラムの全データに対して、第１のデータ変換処理を行うことにより、改竄チェック対象が部分的でなく、網羅的にチェックできる。すなわち、改竄チェック対象プログラムのどこか１ビットが改竄されても、その改竄を効率的に検出することができる。
（９）上述の実施の形態において、１つの改竄チェック対象のプログラムに対して１つの認証データを生成しているが、複数の改竄チェック対象のプログラムに対して１つの認証データを生成することとしてもよい。【０１４３】
具体的には、複数の改竄チェック対象のプログラムに対して、１つの認証データを生成する場合、複数の改竄チェック対象のプログラムを連結させたデータを１つの改竄チェック対象のデータとして扱い、前記連結されたデータに対して、分割手段１３による分割処理と第１のデータ変換処理手段７５のＸＯＲ処理をしてもよい。この場合、連結させたプログラムの順序によって異なる第１の認証データを生成するような変換を第１変換手段１４による変換とすることによって、どのような順序で連結されているのかを知らない不正解析者に対して困難にすることができる。【０１４４】
なお、上記のように連結させたプログラムの順序によって、第１変換手段１４によって生成される認証一時データが変わるようであれば、比較データを生成する際にも同じ順序で連結したプログラムについて変換を施す必要があるので、前記プログラムの順序情報も認証データと関連づけて登録する。
また、複数の改竄チェック対象のプログラムに対してプログラムの連結をせず１つの認証データを生成する方法として、分割手段１３によるブロック分割、第１変換手段１４による認証一時データの生成の処理を改竄チェック対象のプログラムの数だけループさせることが考えられる。【０１４５】
この場合、生成された認証データと改竄チェック対象のプログラムの対応関係を格納手段１６がフラッシュメモリ３に登録する。
このようにすることで、登録する認証データの数を削減することができるので、省メモリの効果がある。
（１０）上述の実施の形態１では、分割手段１３は、プログラムを分割サイズ決定手段１２により決定されたブロック分割サイズのブロックに分割していた。そして、第１変換手段１４が、ブロック分割されたプログラムを入力として、処理を行い、結果としてブロック分割サイズのデータを出力していたが、これに限られるものではない。【０１４６】
分割サイズ決定手段１２と分割手段１３と第１変換手段１４とによる処理は、入力されたプログラムが、ロード時にランダムに定まるサイズに削減された上で第２変換手段１５に与えられるような他の処理に置き換えても構わない。この場合であっても、実施の形態１について述べた効果は変わらず得られる。
（１１）上述の実施の形態２において、ブロック分割サイズの数Ｍは予め定められており、分割サイズ決定手段１２が記憶しているとしているが、これには限られない。【０１４７】
例えば、改竄検出要求手段６が、ユーザ操作により指示されたＭを、分割サイズ決定手段１２に通知するものとしてもよい。
また、Ｍの値は、フラッシュメモリ３が格納できる認証データの数などに応じて決めていてもよい。
（１２）実施の形態２において、プロセス状況算出値を利用して認証データを選択する代わりに、ランダムに認証データを選択するものとしてもよい。このようにすれば、認証データのブロック分割サイズのパターンの範囲内で、ランダムなサイズの比較データが生成されるので比較データに対する解析を困難にすることが出来る。【０１４８】
（１３）上述の実施の形態においては、フラッシュメモリ３に格納される認証データリストを平文のまま格納していたが、より安全に格納するためにセキュアフラッシュメモリなどの耐タンパ性を有するメモリに格納することとしてもよい。
また、認証データリストをフラッシュメモリ３に格納していたが、これに限らない。
例えば、小容量のセキュアなメモリを格納手段１６に具備させ、当該セキュアなメモリに認証データリストを格納することとしてもよい。【０１４９】
（１４）改竄検出手段７に暗復号手段と暗号鍵を持たせて、認証データリストを前記暗号鍵を用いて暗号化した状態で格納することとしてもよい。
この構成においては、認証データリストのデータを参照、追記する場合には、暗号化された認証データリストを改竄検出手段７内の暗号鍵と暗復号手段を用いて復号する。参照、追記が終了した後、再度、保存する場合は、暗号鍵と暗復号手段を用いて認証データリストを暗号化した上で保存する。【０１５０】
このようにすれば、認証データリストを安全に格納しておくことが可能になり、ブロック分割サイズを不正解析者から確実に守ることができる。
（１５）上述の実施の形態では、フラッシュメモリ３上の改竄チェック対象であるプログラムをＲＡＭ２にロードする時に改竄検出手段７にて認証データリストを動的に生成していたが、これに限らず、認証データリストを予め格納手段１６又はフラッシュメモリ３に記憶させておいてもよい。【０１５１】
このようにすることで、フラッシュメモリ３上の改竄チェック対象であるプログラムから、認証データをロード時に生成する必要がなくなる。そして、予め格納手段１６又はフラッシュメモリ３に記憶させておいた認証データリストを用いてＲＡＭ上のプログラムの改竄を検出するので、プログラムのロード時にかかる負荷を軽減できる。なお、この場合には、認証データリストが改竄される恐れがあるため、格納手段１６又はフラッシュメモリ３を耐タンパ化技術などによって保護することが望ましい。【０１５２】
また、さらに、予め格納手段１６又はフラッシュメモリ３に記憶させておいた認証データリストを用いて、フラッシュメモリ３上の改竄チェック対象であるプログラムをＲＡＭへロードする時に、前記プログラムについて改竄検出してもよい。このようにすることで、ＲＡＭ２上のプログラムだけでなく、フラッシュメモリ３上のプログラムについても改竄検出が可能となる。【０１５３】
（１６）フラッシュメモリ３上のプログラムについて、ロード前のデータ形式と、ＲＡＭ２へロードされた後のデータ形式が異なる場合、ＲＡＭ２へロードされた後のデータ形式にした後のプログラムについての認証データを、認証データリストに記憶させておいてもよい。このようにすることで、Ｆｌａｓｈ上ではプログラムが圧縮されて保存されており、ＲＡＭへのロード時に圧縮されたプログラムが伸張されて、伸張されたプログラムが実行される場合などにおいても、ＲＡＭ上のプログラムの改竄検出が可能となる。【０１５４】
（１７）改竄検出装置１に、外部端末との間でデータの送受信を行う送受信手段を付加し、外部端末から送受信手段を用いて新しい認証データリストを取得し、古い認証データリストを更新するようにしてもよい。このようにすれば、認証データリストの更新が可能となって安全性を維持することができる。
（１８）改竄検出装置１に、記憶媒体のデータを読み込む記憶媒体読み取り手段を付加してもよい。前記記憶媒体には新しい認証データリストを記憶させておく。そして、改竄検出装置１は、前記記憶媒体から新しい認証データリストを読み取り、前記新しい認証データリストで古い認証データリストを更新する。このようにすれば、認証データリストの更新が可能となって安全性を維持することができる。【０１５５】
（１９）上述の実施の形態では、プログラムに対する改竄が検出された時には、実行手段５による前記プログラムの実行を停止させる例について説明してきた。しかし、これに限らず、他の実行妨害を行ってもよい。例えば、警告画面を表示したり、プログラムを実行できる時間に制限を設けたり、データ保存等の一部の機能を無効にするなどしてもよい。【０１５６】
また、プログラムに対する改竄が検出された場合に、ロード手段４がフラッシュメモリ３から前記プログラムを改めて読み出して、再びロードするような構成としてもよい。
このようにすることで、ＲＡＭ２上のプログラムが改竄されたことを検出した場合に、再びロードされた改竄のされていないプログラムを実行することができるので、より安全にプログラムを実行することが可能となる。【０１５７】
さらに、改竄が検出されたときには、改竄を検出したことを示す情報を不揮発性メモリにログ情報として残すようにしてもよい。このようにすることで、端末を提供するメーカー等が不正な端末を回収した際に、どのプログラムに対して改竄が行われたかを把握することが可能になる。
また、さらに、端末がネットワークと接続する機能を備えていれば、改竄を検知したというログ情報をネットワーク経由でサーバーに送信するようにしてもよい。このようにすることで、サーバー側で、そのログ情報を基に、どのプログラムに対して不正な改竄が行われたかを把握することができる。【０１５８】
さらなる効果としては、ログ情報に基づき、適切な処置を施した更新プログラムを配布することも可能となる。
（２０）上述してきた改竄検出装置１又は改竄検出手段７は、セキュアな実行環境であるとしてもよい。セキュアな実装環境の例としては、Ｔｒｕｓｔｅｄ  Ｃｏｍｐｕｔｉｎｇ  Ｇｒｏｕｐ（ＴＣＧ）で規定しているＴｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅ（ＴＰＭ）やＭｏｂｉｌｅ  Ｔｒｕｓｔｅｄ  Ｍｏｄｕｌｅ（ＭＴＭ）が考えられる。このようにすることで改竄検出装置１又は改竄検出手段７の全構成要素がセキュアな環境で実行することができるため、より安全な実行環境を構築することができる。【０１５９】
（２１）上述の実施の形態では、第１変換手段１４は、処理結果としてブロック分割サイズのデータを出力していたが、必ずこのサイズのデータを出力しなくてはならないわけではない。上述の実施の形態は、ブロック分割サイズと変換結果の取るべきデータサイズを同一とした例であり、これらのサイズをそれぞれ独立して決定してもよい。
以下、実装する場合の例を簡単に説明する。【０１６０】
分割サイズ決定手段１２が、ブロック分割サイズと変換結果の取るべきデータサイズとの両方をランダムに決定し、第１変換手段１４に変換結果の取るべきデータサイズを通知する。
第１変換手段１４は、通知されたデータサイズ以下になるようプログラムのデータサイズを削減する。また、認証データリストには変換結果の取るべきデータサイズをさらに記録する。【０１６１】
比較データの生成時には、認証データリストに記録されている変換結果の取るべきデータサイズにまで第１変換手段１４がデータ量を削減した上で処理を続ける。
（２２）上述の実施の形態では、プログラムをランダムに定まるブロック分割サイズに分割し、その結果にＸＯＲ演算等をかけてることで、データの削減に関してランダム性を持たせ、データ削減処理に対する攻撃を困難にしていた。しかし、データの削減に関しランダム性を持たせる方法はこれに限らない。【０１６２】
例えば、データ量を削減するアルゴリズム自体を複数種類用意しておき、どのアルゴリズムを用いてデータを削減するかをランダムに決定してもよい。
具体的なアルゴリズムの候補としては、ブロックごとのＡＮＤを取るなどＸＯＲ以外の論理演算を用いる変換や、プログラム全体のチェックサムを取るなど比較的軽量な関数による変換などが考えられる。【０１６３】
具体的な実装としては、認証データの生成時に、使用したデータ量の変換処理を識別できる情報を認証データリストに記録しておく。比較データの生成時には、認証データリストを参照し、認証データの生成に用いたものと同じアルゴリズムを把握する。そして、その同じアルゴリズムでプログラムのデータ量を削減した上で、第２変換手段１５が処理を行えばよい。【０１６４】
なお、アルゴリズム自体がランダムに決定される場合は、ブロック分割サイズや変換結果の取るべきデータサイズが固定の値であっても攻撃は困難となるが、これらのサイズをランダムに決定することでさらに安全性を高めてもよいことは言うまでもない。
（２３）認証データの算出と比較データの算出とで、同一の分割手段１３と第１変換手段１４と第２変換手段１５とを用いているが、認証データの算出用の各手段と比較データの算出用の各手段とを別々に設けてもよい。【０１６５】
（２４）実施の形態２で、プロセス管理テーブル１２１には、プロセス識別子１２２を含めることとしているが、これに限らず、その他のプログラム識別子などプロセスを識別できる情報であればよい。
（２５）実施の形態２において、プロセス状況算出値を算出するアルゴリズムとして、プロセス数をそのまま用いる方法について説明したが、これには限らない。【０１６６】
別のアルゴリズムとしては、プロセス管理テーブル格納部１０２に登録されているプロセスの総ＣＰＵ使用率を算出し、総ＣＰＵ使用率をプロセス状況算出値とする方法が考えられる。
この方法を用いた場合、一例としてプロセス管理テーブル１２１が図１０の状態であったならば、プロセス識別子「０００１」〜「０００５」までのプロセスのＣＰＵ使用率は、それぞれ「４０％」「１０％」「３０％」「１％」「５％」であるので、その合計である総ＣＰＵ使用率が８６％となる。よってプロセス状況算出値は「８６」となる。【０１６７】
また、別のアルゴリズムとしては、各プロセス優先度とＣＰＵ使用率を掛けあせたものの合計値を、プロセス状況算出値としてもよい。
この場合、一例としてプロセス管理テーブル１２１が図１０の状態であったならば、合計値は、
１０×４０（プロセス識別子「０００１」の優先度  ×  ＣＰＵ使用率）
＋  ４×１０（プロセス識別子「０００２」の優先度  ×  ＣＰＵ使用率）
＋  ８×３０（プロセス識別子「０００３」の優先度  ×  ＣＰＵ使用率）
＋  １×  １（プロセス識別子「０００４」の優先度  ×  ＣＰＵ使用率）
＋  ３×  ５（プロセス識別子「０００５」の優先度  ×  ＣＰＵ使用率）
＝  ６９６
となるので、プロセス状況算出値は６９６となる。【０１６８】
なお、上述したアルゴリズムは一例であるので、これ以外の方法であってもよい。
（２６）実施の形態２のステップＳ１２７においては、認証データを選択する場合に、認証データリスト８１内の全ての認証データからランダムに選択することとしていたが、これに限らない。
例えば、認証データリスト８１内の全ての情報のうち最大、最小ブロック分割サイズを除いたものから、ランダムに選択することとしてもよい。【０１６９】
例えば、認証データリスト８１が図８に示されるような場合であれば、認証データ＿２及び認証データ＿３からランダムに選択することとなる。
（２７）上述の実施の形態は、プログラムがリロケーションされないことが前提であった。リロケーションとは、オブジェクトファイル内のシンボリックな参照を具体的なメモリアドレスに置き換えることを意味する。一般にオブジェクトファイルはその中のコードが０番地から始まるものとしてコードが生成されており、実際に実行する前にそのコードが置かれたアドレスに応じてコードの調整がなされる。【０１７０】
ここで、リロケーションについて図１３を用いて具体的に説明する。フラッシュメモリ３には、図１３に示すようなロード対象となるプログラムが記憶されているものとする。
プログラムは、非リロケーション対象コード（ＮＣ１〜ＮＣ３）と、リロケーション対象コード（ＲＣ１〜ＲＣ２）と、リロケーションテーブルとを含んでいる。
非リロケーション対象コードは、リロケーションされないコードであり、ＲＡＭにロードされてもコードが置き換わることはない。【０１７１】
リロケーション対象コードは、リロケーションされるコードであり、上述のように、ロードされる場合にコード中のシンボリックな参照が具体的なメモリアドレスに置き換えられる。よって、ＲＡＭにロードされた後のプログラムは、前述の置き換えがなされた部分においてフラッシュメモリ３に記録されていたときとは異なる。
リロケーションテーブルは、リロケーションを行うための情報を含む。ＲＡＭにロードされてもコードが置き換わることはない。【０１７２】
ＲＡＭへとロードされたプログラムはは、非リロケーション対象コード（ＮＣ１〜ＮＣ３）と、リロケーション済コード（ＲＣ１’〜ＲＣ２’）と、リロケーションテーブルとを含むこととなる。
すなわち、ロード前とロード後のプログラムを比較すると、リロケーション対象コードの部分と、リロケーション済コードの部分が必ず相違することになる。【０１７３】
よって、リロケーションされるプログラムについて上述の実施の形態と同じように、ロード前のプログラムから認証データを生成し、ロード後のプログラムから比較データを生成すると、認証データと比較データとは必ず異なり、改竄が行われていると判定されてしまう。
そこで、本変形例では、改竄検出対象のプログラムを図１４（ａ）又は図１４（ｂ）に示すデータとなるよう処理し、その処理後のデータから認証データ及び比較データを生成することとしている。【０１７４】
図１４（ａ）は、改竄検出対象であるプログラムのうち、リロケーション対象コードを除いて生成したデータを示す。
図１４（ｂ）は、改竄検出対象であるプログラムのうち、リロケーション対象コードを規定コード（ＳＣ）、例えば、無意味なコード０ｘＦＦＦＦ・・・などに置き換えて生成したデータを示す。【０１７５】
これにより、リロケーションが生じるプログラムについて、前述のように、改竄が行われたと常に判定されてしまうという不都合を回避できる。
（２８）上述の実施の形態においては、分割サイズ決定手段１２が乱数を生成し、乱数を用いてブロック分割サイズを決定していた。ブロック分割サイズがプログラムのロード毎に変更されるので、プログラムから生成される認証データがランダム性を有して、認証データの推測の困難性を増していた。しかし、これに限られるものではなく、以下のような変形例も考えられる。【０１７６】
本変形例は、改竄検出対象のプログラムの全体から認証データを生成するのに代えて、プログラムの一部分から認証データを生成する。
その一部分を決定するために、一例として乱数を用いる場合について説明する。
図１５は、本変形例における、プログラムから認証データを生成するまでの概要を説明するための図である。【０１７７】
図１５中のプログラム２１が、改竄検出対象のプログラムであるとする。
改竄検出手段７は、例えば、乱数を２つ生成し、一方の乱数をプログラムの先頭アドレスからのオフセット（１４１）、他方の乱数をデータサイズ（１４２）とする。
そして、プログラムの先頭アドレスにオフセット（１４１）を加えたアドレス（１４３）からデータサイズ（１４２）分のデータ（１４４）を用いて認証データを生成する。【０１７８】
前記オフセット（１４１）及び前記データサイズ（１４２）は、認証データリストに登録しておくものとする。
そして、データ（１４４）に対し、ＳＨＡ１処理を行い、その結果として認証データ（１４５）を得る。
改竄検出を行うために比較データを生成する場合には、認証データリストから、オフセット（１４１）及びデータサイズ（１４２）を読み出して、ＲＡＭに記録されているプログラムの先頭アドレスにオフセット（１４１）を加えた部分からデータサイズ（１４２）分のデータを用いて、認証データを生成したのと同様に比較データを生成する。【０１７９】
以上により、プログラムのうち認証データ及び比較データを生成するために用いる部分がプログラムのロード毎に変更されるので、認証データがランダム性を有して、認証データの推測の困難性を増すことができる。また、プログラムの一部分を認証データの生成に用いているため、プログラム全体から認証データを生成する場合に比べ、認証データの生成速度を向上することができる。【０１８０】
（２９）上述の実施の形態においては、ブロック分割サイズをランダムな情報としていた。しかし、これに限られるものではなく、以下のような変形例も考えられる。
本変形例では、ＨＭＡＣ−ＳＨＡ１（ｋｅｙｅｄ−Ｈａｓｈｉｎｇ  ｆｏｒ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ  −  Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ  １）の鍵及びパディングデータをランダムな情報としている。【０１８１】
図１６は、ＨＭＡＣ−ＳＨＡ１を用いる本変形例の処理について説明するための図である。
改竄検出手段７は、２つの乱数ＲＰ及びＲＫを生成する。
２つの乱数ＲＰ、ＲＫは、認証データリストに記憶しておく。
そして、上述の実施の形態では、改竄検出対象であるプログラム２１に対し、値が０のデータなど一定の値でパディング処理を行っていたが、本変形例では、図１６に示すように乱数ＲＰ（１６１）でパディング処理を行う。【０１８２】
そして、上述の実施の形態と同様に、パディング後のプログラムについて、ブロック分割、ＸＯＲの算出を行い結果として認証一時データ６３を得る。
そして、認証一時データ６３について、乱数ＲＫを鍵とするＨＭＡＣ−ＳＨＡ１処理（１６５）を行い、結果として認証データ６５を得る。
比較データを生成する場合には、ＲＡＭ上のプログラムに対し、図１６に示したのと同様の処理を行って比較データを生成する。【０１８３】
なお、本変形例は、乱数ＲＰ、ＲＫの２つを生成し、２つのランダム情報を用いた処理としていたが、これに限らず、３以上又は１つのランダム情報を用いることとしてもよく、この場合でもランダム情報を用いて認証データの推測を困難にする効果があることは言うまでもない。
すなわち、乱数ＲＫを生成せずに固定の鍵を用いてもよいし、乱数ＲＰを生成せずに固定値でパディングすることとしてもよい。【０１８４】
（３０）上述の実施の形態においては、乱数を用いて決定していたブロック分割サイズについて、特に制約は設けていなかったが、決定するブロック分割サイズに制約を設けてもよい。
例えば、ブロック分割サイズをＣＰＵが具備する２次キャッシュなどのキャッシュメモリにおけるデータの取り扱い単位（例えば、ページングのサイズ）以下にする。【０１８５】
これにより、認証データ又は比較データを、キャッシュメモリ上のデータの入れ替えを行うことなく生成することができる。これにより、キャッシュの使用効率が向上し、改竄検出処理の更なる高速化を実現できる。
（３１）上述の実施の形態において、プログラムのロード前に１のプログラムから複数の異なるサイズの認証データを生成し、プログラムのロード以後に１の認証データを選出し、選出した認証データを用いて改竄検出を行う例について説明したが、これに限らず、複数の認証データを用いて改竄検出を行ってもよい。【０１８６】
例えば、２つ以上の認証データを選出し、選出した２つ以上の認証データを用いて改竄検出することとしてもよい。
この場合、選出した認証データの数と同数の、各認証データに対応する比較データを生成し、対応する認証データと比較データとを比較することになる。
また、２つ以上の認証データ、比較データについて、連結、加算等行ったものを用いて、改竄検出してもよい。【０１８７】
（３２）上述の実施形態では、プログラムがＲＯＭに格納されており、ＲＡＭにロードされた後に、実行されることとしていたが、これには限定されない。例えば、プログラムは、ハードディスクや不揮発性メモリに格納されていてもよい。また、実行時には、プログラムはＲＡＭ以外のメモリにロードされることとしてもよい。
（３３）上記の装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、上記装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。【０１８８】
（３４）上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。【０１８９】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されていても良いし、一部又は全てを含むように１チップ化されてもよい。
また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、ＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。【０１９０】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
（３５）上記の装置を構成する構成要素の一部または全部は、装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。【０１９１】
（３６）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。【０１９２】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。【０１９３】
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（３７）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０１９４】
本発明に係る改竄検出装置は、高速かつ安全にプログラムやデータの改竄検出が可能なことから、認証を行ったり、個人情報を取り扱うような秘匿性の高いプログラム等を実行させるコンピュータ、携帯端末等として利用するのに好適である。
【図１】
2008056700.tif 000003
【図２】
2008056700.tif 000004
【図３】
2008056700.tif 000005
【図４】
2008056700.tif 000006
【図５】
2008056700.tif 000007
【図６】
2008056700.tif 000008
【図７】
2008056700.tif 000009
【図８】
2008056700.tif 000010
【図９】
2008056700.tif 000011
【図１０】
2008056700.tif 000012
【図１１】
2008056700.tif 000013
【図１２】
2008056700.tif 000014
【図１３】
2008056700.tif 000015
【図１４】
2008056700.tif 000016
【図１５】
2008056700.tif 000017
【図１６】
2008056700.tif 000018
【手続補正書】
【提出日】平成20年3月25日(2008.3.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムの改竄検出を行う改竄検出システムであって、
実行対象の第１のプログラムを前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する第１加工手段と、
前記第１のプログラムが実行されるより前に、前記認証用加工データに対し前記加工処理より計算量の多い要約処理を行って、認証情報を生成する第１生成手段と、
生成された前記認証情報を保持する保持手段と、
前記第１のプログラムに対し、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する第２加工手段と、
第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する第２生成手段と、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出手段と
を備えることを特徴とする改竄検出システム。
【請求項２】
前記第１のプログラムと前記第２のプログラムとは同一のプログラムであり、
前記第１加工処理は、前記第１のプログラムが所定メモリ領域にロードされた後に、前記所定メモリ領域内のプログラムに対して行う
ことを特徴とする請求項１記載の改竄検出システム。
【請求項３】
前記パラメータは、データのサイズを示し、
前記第１加工手段及び前記第２加工手段は、加工対象のプログラムを前記パラメータにより示されるサイズに加工処理する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項４】
前記第１加工手段及び第２加工手段は、前記加工処理として、加工対象のプログラムを前記サイズの複数のブロックデータに区切り、前記ブロックデータ同士で同一桁の論理演算を行うことにより前記サイズの前記認証用加工データ及び比較用加工データを生成する
ことを特徴とする請求項３記載の改竄検出システム。
【請求項５】
前記第１加工手段及び第２加工手段は、前記論理演算として排他的論理和演算を行う
ことを特徴とする請求項４記載の改竄検出システム。
【請求項６】
前記第１生成手段は、キャッシュメモリを含み、前記キャッシュメモリを介して認証用加工データが記憶されているメモリとの間で入出力を行い、
前記第１加工手段は、前記パラメータとして、前記第１生成手段に含まれるキャッシュメモリにおけるデータ読み書き単位のサイズ以下のサイズを特定する情報を用いて前記加工処理を行う
ことを特徴とする請求項１記載の改竄検出システム。
【請求項７】
前記第１生成手段は、前記認証情報として前記認証用加工データのハッシュ値を算出し、
前記第２生成手段は、前記比較情報として前記比較用加工データのハッシュ値を算出する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項８】
前記第１生成手段及び第２生成手段は、ハッシュ値の算出にＳＨＡ１演算を用いる
ことを特徴とする請求項７記載の改竄検出システム。
【請求項９】
前記第１加工手段及び第２加工手段は、加工対象のプログラムが、ロード時に再配置されるリロケーションコードを含むか否かを判定し、リロケーションコードを含む場合に、前記加工対象のプログラムから前記リロケーションコードを除去し、前記リロケーションコードが除去されたプログラムを加工処理する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項１０】
前記第１加工手段及び第２加工手段は、加工対象のプログラムが、ロード時に再配置されるリロケーションコードを含むか否かを判定し、リロケーションコードを含む場合に、含まれるリロケーションコードを所定のリロケーションされないコードに置換し、前記リロケーションコードが置換がされたプログラムを加工処理する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項１１】
前記第１加工手段は、前記パラメータとして乱数を生成し、
前記第２加工手段は、前記乱数を保持しており、
前記第１加工手段及び前記第２加工手段は、前記加工処理において、前記加工対象のプログラムに前記乱数を付した上で前記加工処理する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項１２】
前記第１生成手段は、乱数を生成し、前記認証情報として、前記乱数を鍵とするハッシュ関数を用いて前記認証用加工データのハッシュ値を算出し、
前記第２生成手段は、前記乱数を保持しており、前記比較情報として、前記乱数を鍵とする前記ハッシュ関数を用いて前記比較用加工データのハッシュ値を算出する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項１３】
前記パラメータは、データのサイズを示し、前記第１加工手段は、更に、複数のパラメータそれぞれに依存する加工処理を行って、サイズの異なる複数の認証用加工データを生成し、
前記第１生成手段は、前記複数の認証用加工データそれぞれに、前記要約処理を行って複数の認証情報を生成し、
前記改竄検出システムは、更に、
前記複数の認証情報のうち少なくとも１つを選出し、
前記第２加工手段に、前記加工処理によって、加工対象のプログラムを前記選出した認証情報のサイズに縮めさせ、
前記検出手段に、前記選出された認証情報と、前記第２生成手段により生成された前記比較情報とを用いて前記第１のプログラムの改竄検出を行わせる制御手段
を備えることを特徴とする請求項１記載の改竄検出システム。
【請求項１４】
前記制御手段は、実行中のプロセスへの資源割り当てに係るプロセス状況算出値を算出し、前記プロセス状況算出値に基づき少なくとも１の認証情報を選出する
ことを特徴とする請求項１３記載の改竄検出システム。
【請求項１５】
前記制御手段は、プロセス状況算出値と認証情報との対応表を記憶しており、算出したプロセス状況算出値に対応する認証情報を前記対応表から選出する
ことを特徴とする請求項１４記載の改竄検出システム。
【請求項１６】
前記第１加工手段及び第２加工手段は、前記加工処理として、加工対象のプログラムの一部分をランダムに特定し抽出して前記認証用加工データ及び前記比較用加工データを生成する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項１７】
前記第１加工手段は、抽出開始位置と抽出終了位置を示す情報をランダムに生成し、
前記第１加工手段及び前記第２加工手段は、加工対象のプログラムについて、前記抽出開始位置から前記抽出終了位置までを抽出する
ことを特徴とする請求項１６記載の改竄検出システム。
【請求項１８】
前記第１加工手段は、データの抽出開始位置と抽出サイズを示す情報をランダムに生成し、
前記第１加工手段及び前記第２加工手段は、加工対象のプログラムについて、前記抽出開始位置から前記抽出サイズ分のデータを抽出する
ことを特徴とする請求項１６記載の改竄検出システム。
【請求項１９】
前記加工処理と前記要約処理とは、相異なる一方向性関数を用いる処理である
ことを特徴とする請求項１記載の改竄検出システム。
【請求項２０】
プログラムの改竄検出を行う改竄検出方法であって、
実行対象の第１のプログラムを前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する第１加工ステップと、
前記第１のプログラムが実行されるより前に、前記認証用加工データに対し前記加工処理より計算量の多い要約処理を行って、認証情報を生成する第１生成ステップと、
生成された前記認証情報を保持する保持ステップと、
前記第１のプログラムに対し、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する第２加工ステップと、
第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する第２生成ステップと、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出ステップと
を含むことを特徴とする改竄検出方法。
【請求項２１】
プログラムの改竄検出を行う改竄検出システムに用いられる改竄検出プログラムであって、
実行対象の第１のプログラムを前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する第１加工ステップと、
前記第１のプログラムが実行されるより前に、前記認証用加工データに対し前記加工処理より計算量の多い要約処理を行って、認証情報を生成する第１生成ステップと、
生成された前記認証情報を保持する保持ステップと、
前記第１のプログラムに対し、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する第２加工ステップと、
第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する第２生成ステップと、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出ステップと
をコンピュータに実行させることを特徴とする改竄検出プログラム。
【請求項２２】
コンピュータ読み取り可能な記録媒体であって、
実行対象の第１のプログラムを前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する第１加工ステップと、
前記第１のプログラムが実行されるより前に、前記認証用加工データに対し前記加工処理より計算量の多い要約処理を行って、認証情報を生成する第１生成ステップと、
生成された前記認証情報を保持する保持ステップと、
前記第１のプログラムに対し、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する第２加工ステップと、
第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する第２生成ステップと、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出ステップと
をコンピュータに実行させる改竄検出プログラムを記録していることを特徴とする記録媒体。
【請求項２３】
プログラムの改竄検出を行う集積回路であって、
実行対象の第１のプログラムを前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する第１加工手段と、
前記第１のプログラムが実行されるより前に、前記認証用加工データに対し前記加工処理より計算量の多い要約処理を行って、認証情報を生成する第１生成手段と、
生成された前記認証情報を保持する保持手段と、
前記第１のプログラムに対し、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する第２加工手段と、
第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する第２生成手段と、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出手段と
を備えることを特徴とする集積回路。
【請求項２４】
前記集積回路は、Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅであることを特徴とする請求項２３記載の集積回路。
【請求項２５】
プログラムの改竄検出に用いる認証情報を生成する認証情報生成装置であって、
実行対象のプログラムを前記プログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する加工手段と、
前記プログラムが実行されるより前に、前記認証用加工データに、前記加工処理よりも計算量の多い要約処理を行って、認証情報を生成する生成手段と、
生成された前記認証情報を改竄検出装置に提供する提供手段と
を備えることを特徴とする認証情報生成装置。
【請求項２６】
プログラムの改竄検出を行う改竄検出装置であって、
第１のプログラムを、前記第１のプログラムが実行されるより前に、前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をし、さらに、前記加工処理より計算量の多い要約処理を行うことで生成された認証情報を保持する保持手段と、
前記第１のプログラムに対し、前記ランダムに定められたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する加工手段と、
前記第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する生成手段と、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出手段と
を備えることを特徴とする改竄検出装置。
【請求項２７】
（削除）
【手続補正書】
【提出日】平成20年12月18日(2008.12.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムの改竄検出を行う改竄検出システムであって、
実行対象の第１のプログラムを前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する第１加工手段と、
前記第１のプログラムが実行されるより前に、前記認証用加工データに対し前記加工処理より計算量の多い要約処理を行って、認証情報を生成する第１生成手段と、
生成された前記認証情報を保持する保持手段と、
前記第１のプログラムに対し、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する第２加工手段と、
第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する第２生成手段と、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出手段と
を備えることを特徴とする改竄検出システム。
【請求項２】
前記第１のプログラムと前記第２のプログラムとは同一のプログラムであり、
前記第１加工処理は、前記第１のプログラムが所定メモリ領域にロードされた後に、前記所定メモリ領域内のプログラムに対して行う
ことを特徴とする請求項１記載の改竄検出システム。
【請求項３】
前記パラメータは、データのサイズを示し、
前記第１加工手段及び前記第２加工手段は、加工対象のプログラムを前記パラメータにより示されるサイズに加工処理する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項４】
前記第１加工手段及び第２加工手段は、前記加工処理として、加工対象のプログラムを前記サイズの複数のブロックデータに区切り、前記ブロックデータ同士で同一桁の論理演算を行うことにより前記サイズの前記認証用加工データ及び比較用加工データを生成する
ことを特徴とする請求項３記載の改竄検出システム。
【請求項５】
前記第１加工手段及び第２加工手段は、前記論理演算として排他的論理和演算を行う
ことを特徴とする請求項４記載の改竄検出システム。
【請求項６】
前記第１生成手段は、キャッシュメモリを含み、前記キャッシュメモリを介して認証用加工データが記憶されているメモリとの間で入出力を行い、
前記第１加工手段は、前記パラメータとして、前記第１生成手段に含まれるキャッシュメモリにおけるデータ読み書き単位のサイズ以下のサイズを特定する情報を用いて前記加工処理を行う
ことを特徴とする請求項１記載の改竄検出システム。
【請求項７】
前記第１生成手段は、前記認証情報として前記認証用加工データのハッシュ値を算出し、
前記第２生成手段は、前記比較情報として前記比較用加工データのハッシュ値を算出する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項８】
前記第１生成手段及び第２生成手段は、ハッシュ値の算出にＳＨＡ１演算を用いる
ことを特徴とする請求項７記載の改竄検出システム。
【請求項９】
前記第１加工手段及び第２加工手段は、加工対象のプログラムが、ロード時に再配置されるリロケーションコードを含むか否かを判定し、リロケーションコードを含む場合に、前記加工対象のプログラムから前記リロケーションコードを除去し、前記リロケーションコードが除去されたプログラムを加工処理する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項１０】
前記第１加工手段及び第２加工手段は、加工対象のプログラムが、ロード時に再配置されるリロケーションコードを含むか否かを判定し、リロケーションコードを含む場合に、含まれるリロケーションコードを所定のリロケーションされないコードに置換し、前記リロケーションコードが置換がされたプログラムを加工処理する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項１１】
前記第１加工手段は、前記パラメータとして乱数を生成し、
前記第２加工手段は、前記乱数を保持しており、
前記第１加工手段及び前記第２加工手段は、前記加工処理において、前記加工対象のプログラムに前記乱数を付した上で前記加工処理する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項１２】
前記第１生成手段は、乱数を生成し、前記認証情報として、前記乱数を鍵とするハッシュ関数を用いて前記認証用加工データのハッシュ値を算出し、
前記第２生成手段は、前記乱数を保持しており、前記比較情報として、前記乱数を鍵とする前記ハッシュ関数を用いて前記比較用加工データのハッシュ値を算出する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項１３】
前記パラメータは、データのサイズを示し、前記第１加工手段は、更に、複数のパラメータそれぞれに依存する加工処理を行って、サイズの異なる複数の認証用加工データを生成し、
前記第１生成手段は、前記複数の認証用加工データそれぞれに、前記要約処理を行って複数の認証情報を生成し、
前記改竄検出システムは、更に、
前記複数の認証情報のうち少なくとも１つを選出し、
前記第２加工手段に、前記加工処理によって、加工対象のプログラムを前記選出した認証情報のサイズに縮めさせ、
前記検出手段に、前記選出された認証情報と、前記第２生成手段により生成された前記比較情報とを用いて前記第１のプログラムの改竄検出を行わせる制御手段
を備えることを特徴とする請求項１記載の改竄検出システム。
【請求項１４】
前記制御手段は、実行中のプロセスへの資源割り当てに係るプロセス状況算出値を算出し、前記プロセス状況算出値に基づき少なくとも１の認証情報を選出する
ことを特徴とする請求項１３記載の改竄検出システム。
【請求項１５】
前記制御手段は、プロセス状況算出値と認証情報との対応表を記憶しており、算出したプロセス状況算出値に対応する認証情報を前記対応表から選出する
ことを特徴とする請求項１４記載の改竄検出システム。
【請求項１６】
前記第１加工手段及び第２加工手段は、前記加工処理として、加工対象のプログラムの一部分をランダムに特定し抽出して前記認証用加工データ及び前記比較用加工データを生成する
ことを特徴とする請求項１記載の改竄検出システム。
【請求項１７】
前記第１加工手段は、抽出開始位置と抽出終了位置を示す情報をランダムに生成し、
前記第１加工手段及び前記第２加工手段は、加工対象のプログラムについて、前記抽出開始位置から前記抽出終了位置までを抽出する
ことを特徴とする請求項１６記載の改竄検出システム。
【請求項１８】
前記第１加工手段は、データの抽出開始位置と抽出サイズを示す情報をランダムに生成し、
前記第１加工手段及び前記第２加工手段は、加工対象のプログラムについて、前記抽出開始位置から前記抽出サイズ分のデータを抽出する
ことを特徴とする請求項１６記載の改竄検出システム。
【請求項１９】
前記加工処理と前記要約処理とは、相異なる一方向性関数を用いる処理である
ことを特徴とする請求項１記載の改竄検出システム。
【請求項２０】
プログラムの改竄検出を行う改竄検出方法であって、
実行対象の第１のプログラムを前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する第１加工ステップと、
前記第１のプログラムが実行されるより前に、前記認証用加工データに対し前記加工処理より計算量の多い要約処理を行って、認証情報を生成する第１生成ステップと、
生成された前記認証情報を保持する保持ステップと、
前記第１のプログラムに対し、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する第２加工ステップと、
第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する第２生成ステップと、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出ステップと
を含むことを特徴とする改竄検出方法。
【請求項２１】
プログラムの改竄検出を行う改竄検出システムに用いられる改竄検出プログラムであって、
実行対象の第１のプログラムを前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する第１加工ステップと、
前記第１のプログラムが実行されるより前に、前記認証用加工データに対し前記加工処理より計算量の多い要約処理を行って、認証情報を生成する第１生成ステップと、
生成された前記認証情報を保持する保持ステップと、
前記第１のプログラムに対し、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する第２加工ステップと、
第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する第２生成ステップと、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出ステップと
をコンピュータに実行させることを特徴とする改竄検出プログラム。
【請求項２２】
コンピュータ読み取り可能な記録媒体であって、
実行対象の第１のプログラムを前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する第１加工ステップと、
前記第１のプログラムが実行されるより前に、前記認証用加工データに対し前記加工処理より計算量の多い要約処理を行って、認証情報を生成する第１生成ステップと、
生成された前記認証情報を保持する保持ステップと、
前記第１のプログラムに対し、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する第２加工ステップと、
第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する第２生成ステップと、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出ステップと
をコンピュータに実行させる改竄検出プログラムを記録していることを特徴とする記録媒体。
【請求項２３】
プログラムの改竄検出を行う集積回路であって、
実行対象の第１のプログラムを前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する第１加工手段と、
前記第１のプログラムが実行されるより前に、前記認証用加工データに対し前記加工処理より計算量の多い要約処理を行って、認証情報を生成する第１生成手段と、
生成された前記認証情報を保持する保持手段と、
前記第１のプログラムに対し、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する第２加工手段と、
第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する第２生成手段と、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出手段と
を備えることを特徴とする集積回路。
【請求項２４】
前記集積回路は、Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅであることを特徴とする請求項２３記載の集積回路。
【請求項２５】
プログラムの改竄検出に用いる認証情報を生成する認証情報生成装置であって、
実行対象のプログラムを前記プログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をして認証用加工データを生成する加工手段と、
前記プログラムが実行されるより前に、前記認証用加工データに、前記加工処理よりも計算量の多い要約処理を行って、認証情報を生成する生成手段と、
生成された前記認証情報を改竄検出装置に提供する提供手段と
を備えることを特徴とする認証情報生成装置。
【請求項２６】
プログラムの改竄検出を行う改竄検出装置であって、
第１のプログラムを、前記第１のプログラムが実行されるより前に、前記第１のプログラムよりも短くなるよう、ランダムに定まるパラメータに依存する加工処理をし、さらに、前記加工処理より計算量の多い要約処理を行うことで生成された認証情報を保持する保持手段と、
前記第１のプログラムに対し、前記ランダムに定められたパラメータと同じパラメータを用いて前記加工処理を行って、比較用加工データを生成する加工手段と、
前記第２のプログラムの実行中に、前記比較用加工データに対し前記要約処理を行って、比較情報を生成する生成手段と、
前記第２のプログラムの実行中に、前記認証情報と前記比較情報とを用いて、前記第１のプログラムの改竄検出を行う検出手段と
を備えることを特徴とする改竄検出装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの不正な改竄を検出する技術に関する。
【背景技術】
【０００２】
近年、プログラムの改竄検出に関する様々な技術が開発されている。典型的な技術としては、特許文献１に開示されたものがある。
特許文献１では、改竄検出対象となるプログラムに対して一方向性関数であるハッシュ関数を用いて作成した認証データと、改竄チェック対象となるプログラムに対してハッシュ関数を用いて作成した比較データとを比較して改竄検出を行っている。しかし、プログラム全体についてハッシュ値を生成するには多大な時間を要するため、他のプログラムの実行と並行して改竄検出処理を行うような場合には、他のプログラムの実行に支障が生じ得る。
【０００３】
特許文献２では、ハッシュ値を利用せず、プログラムが実行時に特定の条件を満たすか否かにより正当性を検証している。具体的には、前記特定の条件として、プログラムのリターンアドレスが所定のアドレス空間内か否か、実行モードが正しいか否か、所定の時間内で処理が終わるか否かについて調べ、前記特定の条件を満たさない場合に、プログラムが改竄されていると判定する。これによると、ハッシュ値を生成する必要はなく、改竄検出処理に要する時間は短縮される。
【特許文献１】米国特許第６０２６２９３号
【特許文献２】米国特許第６１７８５０９号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献２の方法は、特許文献１の方法に比べ、改竄検出処理時間は短くなるものの、前記特定の条件についてチェックするに過ぎず、部分的な検証にしかならないため、検証された部分以外に改竄箇所が存在し得るという問題がある。
上述の問題に鑑み、本発明は、プログラムの改竄検出を、従来と比べて検出精度を落とすことなく高速に行うことのできる改竄検出システム、改竄検出方法、改竄検出プログラム、記録媒体及び集積回路を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記の課題を解決するために、本発明は、プログラムの改竄検出を行う改竄検出システムであって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工手段と、前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成手段と、生成された前記認証情報を保持する保持手段と、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工手段と、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成手段と、前記保持手段の保持する認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出手段とを備える。
【０００６】
ここで、前記改竄検出システムは、加工処理を行う発明特定事項として、第１加工手段と第２加工手段とを備えることとしているが、実体的に異なる２つの手段として実現する必要はない。第１加工手段と第２加工手段が、実体的に１つの手段として実現される場合も本発明に含まれる。
要約処理についても同様に、要約処理を行う発明特定事項として第１生成手段と第２生成手段とを備えることとしているが、実体的に異なる２つの手段として実現する必要はない。第１生成手段と第２生成手段が、実体的に１つの手段として実現される場合も本発明に含まれる。
【発明の効果】
【０００７】
本発明の改竄検出システムは、上述の構成を備えることにより、加工処理によりプログラムのサイズを削減した上で計算量の多い要約処理を行って認証情報及び比較情報を生成するので、計算量の多い要約処理をプログラム全体に対して行う場合に比べて認証情報及び比較情報の生成を高速に行うことができる。
また、前記第１加工手段は、ランダムに定まるパラメータに依存する加工処理を行い、前記第２加工手段は、前記第１加工手段による加工処理に用いられたパラメータと同じパラメータを用いて前記加工処理を行うこととしてもよい。
【０００８】
この構成によれば、加工処理ごとに、生成される前記認証用加工データ及び前記比較用加工データにランダムな要素が加わるため、前記認証用加工データ及び前記比較用加工データに基づき生成される認証情報及び比較情報についても、ランダムな要素が加わることになる。よって、改竄検出時にチェックを不正に通過しうるような前記認証情報及び前記比較情報と同一の情報を不正に生成するのを困難にし、不正なプログラムが実行されるのを防ぐことができる。
【０００９】
また、前記第１生成手段による認証情報の生成は、前記プログラムが実行される以前に行われ、前記第２生成手段による比較情報の生成及び前記検出手段による改竄検出は、前記プログラムの実行中に行われることとしてもよい。
この構成によれば、実行中のプログラムが改竄された場合に、その改竄を検出することができる。
【００１０】
また、前記パラメータは、データのサイズを示し、前記第１加工手段及び前記第２加工手段は、前記プログラムを前記パラメータにより示されるサイズに加工処理することとしてもよい。
この構成によれば、加工処理ごとに、ランダムなサイズの前記認証用加工データ及び前記比較用加工データを生成するため、前記認証用加工データ及び前記比較用加工データに基づき生成される認証情報及び比較情報についても、ランダムな要素が加わることになる。よって、改竄検出時にチェックを不正に通過しうるような前記認証情報及び前記比較情報と同一の情報を不正に生成するのを困難にし、不正なプログラムが実行されるのを防ぐことができる。
【００１１】
また、前記第１加工手段及び第２加工手段は、前記加工処理として、前記プログラムを前記サイズの複数のブロックデータに区切り、前記ブロックデータ同士で同一桁の論理演算を行うことにより前記サイズの前記認証用加工データ及び比較用加工データを生成することとしてもよい。
また、前記第１加工手段及び第２加工手段は、前記論理演算として排他的論理和演算を行うこととしてもよい。
【００１２】
この構成によれば、高速に処理が可能な論理演算によってプログラムを短くするので、短時間で加工処理を完了することができる。
なお、排他的論理和などの論理演算は、一般的なプロセッサにおいて１クロックの間に処理可能な基本的な処理である。
また、前記第１生成手段は、キャッシュメモリを含み、前記キャッシュメモリを介して認証用加工データが記憶されているメモリとの間で入出力を行い、前記第１加工手段は、前記パラメータとして、前記第１生成手段に含まれるキャッシュメモリにおけるデータ読み書き単位のサイズ以下のサイズを特定する情報を用いて前記加工処理を行うこととしてもよい。
【００１３】
この構成によれば、認証処理の対象となるデータの大きさをキャッシュメモリにおけるデータの取り扱い単位以下に抑えることができる。これにより、認証処理の対象となるデータを、キャッシュメモリ上のデータの入れ替えを行わずに一度で行うことができるので、改竄検出処理の更なる高速化を図ることができる。
また、前記第１生成手段は、前記認証情報として前記認証用加工データのハッシュ値を算出し、前記第２生成手段は、前記比較情報として前記比較用加工データのハッシュ値を算出することとしてもよい。
【００１４】
また、前記第１生成手段及び第２生成手段は、前記ハッシュ値の算出にＳＨＡ１演算を用いることとしてもよい。
この構成によれば、ハッシュを用いることにより、認証情報及び比較情報と同一の情報を不正に生成されるのを防ぐことができるため、より安全な認証情報及び比較情報を用いて改竄検出を行うことができる。
【００１５】
また、前記第１加工手段及び第２加工手段は、前記プログラムが、ロード時に再配置されるリロケーションコードを含むか否かを判定し、リロケーションコードを含む場合に、前記プログラムから前記リロケーションコードを除去し、前記リロケーションコードが除かれたプログラムを加工処理することとしてもよい。
また、前記第１加工手段及び第２加工手段は、前記プログラムが、ロード時に再配置されるリロケーションコードを含むか否かを判定し、リロケーションコードを含む場合に、含まれるリロケーションコードを所定のリロケーションされないコードに置換し、前記リロケーションコードが置換がされたプログラムを加工処理することとしてもよい。
【００１６】
この構成によれば、前記プログラムにリロケーションコードが含まれている場合であっても、リロケーション毎に認証情報及び比較情報の内容が変化してしまう状況を回避して、前記プログラムから一定の認証情報及び比較情報を生成し、前記認証情報及び前記比較情報を用いて改竄検出を行うことができる。
また、前記第１加工手段は、前記パラメータとして乱数を生成し、前記第２加工手段は、前記乱数を保持しており、前記第１加工手段及び前記第２加工手段は、前記加工処理において、前記プログラムに前記乱数を付した上で前記加工処理することとしてもよい。
【００１７】
この構成によれば、ロード毎に異なる認証情報及び比較情報を生成し、解析を困難化できる。
また、前記第１生成手段は、乱数を生成し、前記認証情報として、前記乱数を鍵とするハッシュ関数を用いて前記認証用加工データのハッシュ値を算出し、前記第２生成手段は、前記乱数を保持しており、前記比較情報として、前記乱数を鍵とする前記ハッシュ関数を用いて前記比較用加工データのハッシュ値を算出することとしてもよい。
【００１８】
この構成によれば、乱数が認証情報及び比較情報に反映させて、認証情報及び比較情報の解析を困難化できる。
また、前記パラメータは、データのサイズを示し、前記第１加工手段は、更に、複数のパラメータそれぞれに依存する加工処理を行って、サイズの異なる複数の認証用加工データを生成し、前記第１生成手段は、前記複数の認証用加工データそれぞれに、前記要約処理を行って複数の認証情報を生成し、前記改竄検出システムは、更に、前記複数の認証情報のうち少なくとも１つを選出し、前記第２加工手段に、前記加工処理によって、前記プログラムを前記選出した認証情報のサイズに縮めさせ、前記検出手段に、前記選出された認証情報と、前記第２生成手段により生成された前記比較情報とを用いて前記実行対象のプログラムの改竄検出を行わせる制御手段を備えることとしてもよい。
【００１９】
また、前記制御手段は、実行中のプロセスへの資源割り当てに係るプロセス状況算出値を算出し、前記プロセス状況算出値に基づき少なくとも１の認証情報を選出することとしてもよい。
また、前記制御手段は、プロセス状況算出値と認証情報との対応表を記憶しており、算出したプロセス状況算出値に対応する認証情報を前記対応表から選出することとしてもよい。
【００２０】
この構成によれば、改竄検出システムの処理状況に応じて、改竄検出にかかる処理の負荷を変更することが可能となる。本発明に係る改竄検出の処理では、加工処理よりも要約処理の方が負荷が大きいため、要約処理にかけるデータのサイズが大きくなるほどに改竄検出システムに与える負荷が大きくなる。一方、加工処理でプログラムのサイズを短くしすぎると元のプログラムから抜ける情報が増えてしまうため、改竄検出の精度が下がってしまう。
【００２１】
そこで、本発明では、プロセスの状況を見て加工処理を行うサイズを選択することで、改竄検出システム内の処理状況（例えば、他のプログラムの動作状況など）を踏まえた上で、適切な精度及び速度で改竄検出を行うよう制御できるようにしている。
また、前記第１加工手段及び第２加工手段は、前記加工処理として、前記プログラムの一部分をランダムに特定し抽出して前記認証用加工データ及び前記比較用加工データを生成することとしてもよい。
【００２２】
また、前記第１加工手段は、抽出開始位置と抽出終了位置を示す情報をランダムに生成し、前記第１加工手段及び前記第２加工手段は、前記プログラムについて、前記抽出開始位置から前記抽出終了位置までを抽出することとしてもよい。
また、前記第１加工手段は、データの抽出開始位置と抽出サイズを示す情報をランダムに生成し、前記第１加工手段及び前記第２加工手段は、前記プログラムについて、前記抽出開始位置から前記抽出サイズ分のデータを抽出することとしてもよい。
【００２３】
この構成によれば、認証情報の生成毎に、認証情報の生成に用いられるプログラムの一部分が変更されるので、改竄検出時のチェックを不正に通過しうるような認証情報及び比較情報の生成を困難化し、不正なプログラムが実行されるのを防ぐことができる。
また、前記加工処理と前記要約処理とは、相異なる一方向性関数を用いる処理であってもよい。
【００２４】
この構成によれば、異なる一方向性関数を用いた処理により安全な認証用加工データ、比較用加工データ、認証情報及び比較情報を生成することができる。
本発明は、プログラムの改竄検出を行う改竄検出方法であって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工ステップと、前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成ステップと、生成された前記認証情報を保持する保持ステップと、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工ステップと、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成ステップと、前記保持している認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出ステップとを含む。
【００２５】
本発明は、プログラムの改竄検出を行う改竄検出システムに用いられる改竄検出プログラムであって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工ステップと、前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成ステップと、生成された前記認証情報を保持する保持ステップと、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工ステップと、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成ステップと、前記保持している認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出ステップとをコンピュータに実行させる。
【００２６】
本発明は、コンピュータ読み取り可能な記録媒体であって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工ステップと、前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成ステップと、生成された前記認証情報を保持する保持ステップと、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工ステップと、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成ステップと、前記保持している認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出ステップとをコンピュータに実行させる改竄検出プログラムを記録している。
【００２７】
本発明は、プログラムの改竄検出を行う集積回路であって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する第１加工手段と、前記認証用加工データに、前記加工処理より計算量の多い要約処理を行い、認証情報を生成する第１生成手段と、生成された前記認証情報を保持する保持手段と、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する第２加工手段と、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する第２生成手段と、前記保持手段の保持する認証情報と前記第２生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出手段とを備える。
【００２８】
この構成によれば、加工処理によりプログラムのサイズを削減した上で計算量の多い要約処理を行って認証情報及び比較情報を生成するので、計算量の多い要約処理をプログラム全体に対して行う場合に比べて認証情報及び比較情報の生成を高速に行うことができる。
また、前記集積回路は、Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅであることとしてもよい。
【００２９】
この構成によれば、改竄検出処理について安全な実行環境を構築することができる。
本発明は、プログラムの改竄検出に用いる認証情報を生成する認証情報生成装置であって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をして認証用加工データを生成する加工手段と、前記認証用加工データに前記加工処理よりも計算量の多い要約処理を行い、認証情報を生成する生成手段と、生成された前記認証情報を前記改竄検出装置に提供する提供手段とを備える。
【００３０】
この構成によれば、加工処理によりプログラムのサイズを削減した上で計算量の多い要約処理を行って認証情報を生成するので、計算量の多い要約処理をプログラム全体に対して行う場合に比べて認証情報の生成を高速に行うことができる。
本発明は、プログラムの改竄検出を行う改竄検出装置であって、実行対象のプログラムを前記プログラムよりも短くなるよう加工処理をし、さらに、前記加工処理よりも計算量の多い要約処理を行うことで生成された認証情報を保持する保持手段と、前記実行対象のプログラムに対して、前記加工処理を行って比較用加工データを生成する加工手段と、前記比較用加工データに対して、前記要約処理を行って、比較情報を生成する生成手段と、前記保持手段の保持する認証情報と前記生成手段が生成した比較情報とを用いて、前記実行プログラムの改竄検出を行う検出手段とを備える。
【００３１】
この構成によれば、加工処理によりプログラムのサイズを削減した上で計算量の多い要約処理を行って比較情報を生成するので、計算量の多い要約処理をプログラム全体に対して行う場合に比べて比較情報の生成を高速に行うことができ、改竄検出に要する処理時間を短縮することができる。
【発明を実施するための最良の形態】
【００３２】
本発明の一実施形態である改竄検出装置は、改竄検出処理速度とトレードオフの関係にあるセキュリティレベルを出来る限り維持しつつ実行するプログラムの改竄検出処理を従来より高速に行うものである。
改竄検出装置はＲＯＭにプログラムを格納しており、このプログラムをＲＡＭへとロードしてから実行する。ここで、前記改竄検出装置は、まずＲＯＭに格納されたプログラムについて、ＲＡＭへのロード前に後述する処理によって改竄検出情報として認証データを生成する。次に、前記改竄検出装置は、ＲＡＭへのロード以後プログラムの実行中などに、ＲＡＭに記憶されたプログラムについて後述する処理によって改竄検出情報としての比較データを生成する。そして、改竄検出装置は、前記認証データと前記比較データとを比較し、認証データと比較データとが一致しなかった場合にプログラムが改竄されていると判定する。
【００３３】
ここで、前記認証データと前記比較データとの生成は以下のように行う。
まず、前記改竄検出装置は、改竄検出対象のプログラムをブロック分割し、分割結果に対して比較的低負荷の処理である短縮処理の一例として第１のハッシュ関数を施す。第１のハッシュ関数を施した結果、元のプログラムは、サイズの小さな変換一時データに変換されている。
【００３４】
そして、前記改竄検出装置は、前記変換一時データに対し、改竄検出情報を生成する処理として負荷の高い第２のハッシュ関数を施す。この第２のハッシュ関数により、改竄検出情報が得られる。
第１のハッシュ関数は、一例として、データについて排他的論理和演算を行う処理である。第２のハッシュ関数は一例としてＳＨＡ１処理関数である。
【００３５】
時間を要するＳＨＡ１処理は、プログラムより小さな変換一時データに対し行うのみなので、プログラム全体にＳＨＡ１処理を行う場合に比べて全体の処理時間は大幅に短縮することになる。
ここで、プログラムのロード前に得られた改竄検出情報が前記認証データであり、プログラムのロード以後に得られた改竄検出情報が前記比較データである。
【００３６】
なお、本実施の形態では、第１のハッシュ関数は第２のハッシュ関数よりもセキュリティレベルが低いので、セキュリティレベルを維持するために乱数によるランダムな要素を加えている。
以下に、本発明の実施の形態の詳細について説明する。
１．実施の形態１
本発明の実施の形態１について、以下に説明する。
【００３７】
１．１．構成
本発明の一実施形態に係る改竄検出装置１は、プログラムをフラッシュメモリなどの不揮発性メモリからＲＡＭなどの揮発メモリにロードして実行する装置であり、ロードされて実行中のプログラムについて改竄を検出する。
【００３８】
改竄検出装置１は、具体的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ディスプレイユニット、キーパッドなどから構成されるコンピュータシステムである。前記ＲＯＭにはコンピュータプログラムが記憶されており、ＲＡＭ上に読み出されたコンピュータプログラムに従って前記ＣＰＵが動作することにより、改竄検出装置１はその機能を達成する。
【００３９】
図１は、改竄検出装置１の全体構成を示すブロック図である。
改竄検出装置１は、図１に示すように、ＲＡＭ２、フラッシュメモリ３、ロード手段４、実行手段５、改竄検出要求手段６及び改竄検出手段７を含んで構成される。以下、各構成要素について説明する。
ＲＡＭ２は、ランダムアクセスメモリである。ＲＡＭ２には、ロード手段４によりプログラムがロードされ、実行手段５によりプログラム実行時のデータが書き込まれ、また読み出される。
【００４０】
フラッシュメモリ３は、具体的にはＦｌａｓｈ  ＲＯＭである。フラッシュメモリ３は、実行されるべきプログラムと、認証データリストとを記憶する。
フラッシュメモリ３は、本実施の形態では、図１に示すように、実行されるべきプログラムとしてプログラム２１、２２・・・を記憶している。認証データリストは、改竄検出に用いる認証データを含むデータである。認証データリストの詳細は後述する。
【００４１】
ＲＡＭ２に記録されているプログラム２４は、例えば、プログラム２１がフラッシュメモリ３からＲＡＭ２にロードされたものである。
ロード手段４は、適宜のタイミングで、フラッシュメモリ３に記憶されているプログラムをＲＡＭ２にロードする。
前記タイミングとしては、例えば電源投入時、他のプログラムからロードを指示された時、所定時間間隔毎などが考えられる。
【００４２】
ロード手段４は、前記タイミングと、そのタイミングにおいて実行すべきプログラムのプログラム識別子とを対応づけて予め記憶しているものとする。
また、前記タイミングとしては、更に、前記キーパッドを用いてユーザ操作によりプログラムの実行を要望される時も考えられる。この場合、実行すべきプログラムに係るプログラム識別子は、ユーザ操作により指定されるものとする。
【００４３】
そして、前記タイミングを検出した場合に、ロード手段４は、フラッシュメモリ３に記憶されているプログラムのうちプログラム識別子により識別されるもののＲＡＭ２へのロードを開始する。ロードを開始すると、ロード手段４は、ロードを開始したプログラムに係るプログラム識別子を含むロード開始通知を改竄検出要求手段６に対して送信する。
ここで、ロード手段４は、ロードを開始したプログラムに関する情報を認証データリストとしてフラッシュメモリ３に追記する。フラッシュメモリ３に認証データリストが記録されていない場合には、認証データリストを新たに生成してフラッシュメモリ３に記録する。
【００４４】
図２は、認証データリストの一例を示す図である。
認証データリスト２３は、プログラム識別子４１、プログラムアドレス４２、プログラムサイズ４３、ブロック分割サイズ４４、認証データ４５から構成される。
プログラム識別子４１は、プログラムを識別するためのＩＤ情報である。フラッシュメモリ３に記録されているプログラムには、プログラムを識別するためのプログラム識別子が予め付されている。
【００４５】
プログラムアドレス４２は、ロード手段４がＲＡＭ２上でプログラムをロードする領域の先頭アドレスである。
プログラムサイズ４３は、プログラム識別子４１で識別されるプログラムのサイズを示す。
ロード手段４は、ロード開始時に、フラッシュメモリ３からプログラムと共にプログラム識別子を読み出してプログラム識別子４１とし、プログラムをロードするアドレスをプログラムアドレス４２とし、ロードするプログラムのサイズをプログラムサイズ４３として、認証データリストに追記する。
【００４６】
ここで、認証データリスト２３に上述の追記がなされた直後には、図２においてプログラム識別子の値が０００３である行において空欄４６、４７として示すように、ブロック分割サイズ、認証データの欄が空欄となっている。
ブロック分割サイズ、認証データの内容は、ロード手段４以外によって後ほど書き込まれる。ブロック分割サイズ４４、認証データ４５については後述する。
【００４７】
ロード手段４は、プログラムのロードが終了すると、実行手段５に対し、実行すべきプログラムのプログラム識別子を含む実行指示を送信する。
また、ロード手段４は、ロードしたプログラムが実行手段５により実行されることが無くなった場合、ロードしたプログラムがメモリ２中から消去される場合等の適宜のタイミングで、そのプログラムについての、プログラム識別子、プログラムアドレス、プログラムサイズ、ブロック分割サイズ及び認証データの組を削除する。
【００４８】
実行手段５は、具体的にはＣＰＵである。
実行手段５は、ロード手段４から実行指示を受け取り、ＲＡＭ２上にロードされているプログラムのうち、前記実行指示に含まれるプログラム識別子により識別されるプログラムを実行する。
実行手段５は、適宜のタイミングで、改竄検出要求手段６に対して、実行中のプログラムに係るプログラム識別子を含むトリガ通知を送信する。前記トリガ通知は、改竄検出要求手段６において、改竄検出開始のトリガとなり得るものである。
【００４９】
ここで、実行手段５が前記トリガ通知を送信する前記適宜のタイミングとしては、予め定められている特定のプログラムの実行を開始するときや、プログラムのうち予め定めた特定のモジュール、サブルーチンの実行を開始するときなどが考えられる。
実行手段５は、改竄検出要求手段６からプログラムの実行停止指示を受け取った場合、前記実行停止指示に含まれるプログラム識別子により識別されるプログラムの実行を停止する。
【００５０】
改竄検出要求手段６は、フラッシュメモリ３上のプログラムについての改竄検出に関する制御を行う。
改竄検出要求手段６は、ロード手段４からロード開始通知を受信し、ロード開始通知に含まれていたプログラム識別子を含む認証データ生成要求を改竄検出手段７に対して送信する。
【００５１】
ここで、認証データは、改竄検出に用いられるデータである。認証データの詳細については後述する。
また、改竄検出要求手段６は、実行手段５によるプログラムの実行中に、改竄検出処理を開始するためのトリガの検出を試みる。
そして前記トリガを検出した場合には、改竄検出要求手段６は、前記プログラムのプログラム識別子を含む改竄検出要求を改竄検出手段７に対し送信する。そして、改竄検出手段７から前記改竄検出要求に対する応答としてプログラム識別子、改竄検出結果を含む改竄検出応答を受け取る。
【００５２】
ここで、改竄検出結果は、改竄の有無を示す。
改竄検出要求手段６は、改竄検出結果が改竄有りを示す場合、改竄検出応答に含まれていたプログラム識別子を含むプログラムの実行停止指示を実行手段５に対し送信する。一方、改竄検出結果が改竄無しを示す場合、改竄検出要求手段６は、実行手段５に対して特に指示は行わない。
【００５３】
なお、上述の改竄検出開始のトリガは、改竄検出を開始すべき適切なタイミングで発生するものとする。例えば、改竄検出要求手段６自身が、定期的にトリガを発生させ、そのトリガを検出してもよい。また、実行手段５がプログラムのうち所定のモジュールの実行を開始する際に改竄検出要求手段６に対して通知を行い、改竄検出要求手段６が当該通知をトリガとして検出してもよい。
【００５４】
改竄検出手段７は、図１に示すように、入出力手段１１、分割サイズ決定手段１２、分割手段１３、第１変換手段１４、第２変換手段１５、格納手段１６及び判定手段１７を含んで構成される。以下、各構成について説明する。
入出力手段１１は、改竄検出要求手段６から認証データ生成要求を受けた場合、分割サイズ決定手段に対し、認証データ生成要求に含まれるプログラム識別子を送信する。
【００５５】
入出力手段１１は、改竄検出要求手段６から改竄検出要求を受けた場合、その改竄検出要求を判定手段１７に送信する。
入出力手段１１は、判定手段１７から改竄検出応答を受けた場合、改竄検出要求手段６に対してその改竄検出応答を送信する。
分割サイズ決定手段１２は、プログラムを複数のブロックに分割するための１ブロックあたりのサイズであるブロック分割サイズＢＳを決定する。以下、プログラムを複数のブロックに分割する処理をブロック分割という。
【００５６】
分割サイズ決定手段１２は、入出力手段１１から認証データ生成要求とを受け付けると、乱数を生成し、生成した乱数に応じてブロック分割サイズを決定する。
ここで、上述したブロック分割サイズは、生成した乱数をそのまま使用するものとする。プログラムがメモリにロードされる毎に乱数が再計算されるので、ブロック分割サイズも乱数の再計算に応じて変更されることになる。
【００５７】
上述のようにブロック分割サイズが決定すると、分割サイズ決定手段１２は、プログラム識別子と、ブロック分割サイズと、生成するデータの種別を示す生成データ種別とを含む分割指示を分割手段１３に対して送信する。
ここで、生成データ種別は、認証データ、比較データのいずれかの生成を示す情報である。生成データ種別の内容に従い、後述の分割手段１３、第２変換手段１５等において実行する処理が選択される。
【００５８】
また、認証データは、ロード前のプログラムから第１変換手段１４、第２変換手段１５により生成される改竄検出用のデータである。比較データは、ロード以後のプログラムから第１変換手段１４、第２変換手段１５により生成される改竄検出用のデータである。
分割手段１３に対しては、後述するが、判定手段１７も分割指示を送信する。この場合、判定手段１７は、プログラム識別子と、ブロック分割サイズと、比較データの生成を示す生成データ種別とを含む分割指示を分割手段１３に対して送信する。
【００５９】
分割手段１３は、分割指示を受け付けると、分割指示に含まれるプログラム識別子に係るプログラムをフラッシュメモリ３から読み出す。次に、分割手段１３は、プログラム識別子に対応するプログラムサイズを認証データリスト２３から読み出す。
そして、読み出したプログラムサイズに応じたパディング処理を行う。
ここで、パディング処理は、プログラムサイズがブロック分割サイズの倍数になるよう、プログラムの最後尾に意味のない値（例えば０）のデータを付加することで行う。
【００６０】
そして、分割手段１３は、パディングされたプログラムを、ブロック分割サイズの大きさのブロックデータへと分割する。
ここで、ブロック分割により、ブロック分割サイズの大きさであるＮ個のブロックデータ（Ｂ［１］〜Ｂ［Ｎ］）が生成されたものとする。
分割が終了すると、分割手段１３は、第１変換手段１４に対し、分割指示に含まれていたプログラム識別子、生成データ種別を含む第１変換指示を第１変換手段１４に送信する。そして、分割手段１３は、前記生成データ種別が認証データの生成を示す場合に、ブロック分割サイズを、分割指示に含まれるプログラム識別子に対応づけて、認証データリスト２３に追記する。
【００６１】
前述の図２の例であれば、プログラム識別子の値が０００３であり、決定したブロック分割サイズが４０９６バイトであった場合には、空欄４６に値４０９６を書き込むことになる。
第１変換手段１４は、第１変換指示を受け取ると、分割手段１３によりブロック分割された結果である各ブロックデータを、データサイズを減らすことのできる所定のアルゴリズムによる変換処理によって変換する。
【００６２】
この変換処理は、簡単な論理演算等の高速に実行できる処理が望ましい。
本実施の形態では、第１変換手段１４が行う変換処理はＸＯＲ（ｅＸｃｌｕｓｉｖｅ  ＯＲ）処理であるものとする。即ち、第１変換手段１４は、Ｂ［１］〜Ｂ［Ｎ］のＸＯＲを演算する。
そして、第１変換指示に含まれるプログラム識別子、生成データ種別及び前記演算の結果である認証一時データを含む第２変換指示を、第２変換手段１５に出力する。
【００６３】
第２変換手段１５は、第２変換指示を受け取ると、前記第２変換指示に含まれる認証一時データに対し、所定のアルゴリズムを用いてデータ変換を行う。
第２変換手段１５によるデータ変換処理は、比較的時間をかけて改竄検出値を算出する処理である。
本実施の形態では、第２変換手段１５が行うデータ変換処理は一方向性関数であるＳＨＡ１処理であるものとする。
【００６４】
第２変換手段１５は、前記認証一時データに対してＳＨＡ１処理を行う。
第２変換手段１５は、第２変換指示に含まれる生成データ種別が認証データの生成を示す場合には、ＳＨＡ１処理の結果を認証データとしてプログラム識別子と共に格納手段１６に送信する。一方、生成データ種別が比較データの生成を示す場合には、ＳＨＡ１処理の結果を比較データとしてプログラム識別子と共に判定手段１７に送信する。
【００６５】
格納手段１６は、第２変換手段１５から、プログラム識別子と認証データとを受け取ると、前記プログラム識別子に対応づけて認証データを認証データリスト２３に書き込む。
前述の図２の例であれば、生成した認証データが認証データＡ３であり、プログラム識別子の値が０００３であった場合には、空欄４７に認証データＡ３を書き込むことになる。
【００６６】
判定手段１７は、改竄検出要求手段６から入出力手段１１を介して改竄検出要求を受信する。そして、認証データリスト２３中で、前記改竄検出要求に含まれるプログラム識別子と同値のプログラム識別子を検索する。そのプログラム識別子を発見できた場合、認証データリスト２３から、プログラム識別子に対応付けられているブロック分割サイズを読み出す。そして、判定手段１７は、プログラム識別子とブロック分割サイズと比較データの生成を示す生成データ種別とを含む分割指示を分割手段１３へと送信する。
【００６７】
また、判定手段１７は、前記分割指示の送信後に、第２変換手段１５からプログラム識別子と比較データとを受け取る。
この場合、判定手段１７は、プログラム識別子に対応する認証データを認証データリストから読み出して、受け取った比較データと比較する。
判定手段１７は、入出力手段１１を介して改竄検出要求手段６に対して、認証データと比較データとが一致する場合には改竄無しを示す改竄検出結果と、第２変換手段１５から取得したプログラム識別子とを含む改竄検出応答を送信する。認証データと比較データとが一致しない場合には、改竄有りを示す改竄検出結果と、第２変換手段１５から取得したプログラム識別子とを含む改竄検出応答を改竄検出要求手段６に対して送信する。
【００６８】
１．２．動作
上述のように構成された改竄検出装置１による改竄検出処理について説明する。
図３は、改竄検出装置１によるプログラム実行動作を示すフローチャートである。
まず、ロード手段４は、適宜のタイミングで、実行手段５に実行させるべきプログラムをフラッシュメモリ３から読み出してＲＡＭ２へのロードを開始する（ステップＳ１）。ロードを開始すると、ロード手段４は、ロードを開始したプログラムに係るプログラム識別子を含むロード開始通知を改竄検出要求手段６に対して送信する。改竄検出要求手段６は、前記ロード開始通知を受け取ると、ロード開始通知に含まれていたプログラム識別子を含む認証データ生成要求を改竄検出手段７に対して送信する。
【００６９】
改竄検出手段７は、前記認証データ生成要求を受信すると、プログラム改竄検出用の認証データ及び認証データリストの生成を行う（ステップＳ２）。ステップＳ２の詳細については、図４を用いて後ほど説明する。
前記プログラムのＲＡＭ２へのロードが完了すると、ロード手段４は、ロードしたプログラムを示すプログラム識別子を含んだ実行指示を実行手段５に対して送信する。
【００７０】
実行手段５は、前記実行指示に含まれるプログラム識別子によって識別されるプログラムの実行を開始する（ステップＳ３）。
ここで、図３のフローチャートにおいては、ステップＳ２及びＳ３を順次実行するように記載しているが、ステップＳ２、Ｓ３は並行して実行してももちろんよい。
そして、改竄検出要求手段６は、改竄検出トリガの発生を監視する（ステップＳ４）。
【００７１】
改竄検出トリガが発生せず（ステップＳ４：ＮＯ）、実行中のプログラムが実行終了した場合（ステップＳ８：ＹＥＳ）、処理を終了する。
改竄検出トリガが発生した場合（ステップＳ４：ＹＥＳ）、改竄検出要求手段６は、ステップＳ２にてロードされたプログラムのプログラム識別子を含む改竄検出要求を改竄検出手段７に対し送信する。
【００７２】
改竄検出手段７は、前記改竄検出要求を受け取ると、改竄検出要求に含まれるプログラム識別子により識別されるプログラムについて前述の比較データを生成する（ステップＳ５）。ステップＳ５については、後述する。
そして、改竄検出手段７における判定手段１７は、認証データリストから認証データを読み出し、前記認証データと前記比較データとを比較する（ステップＳ６）。
【００７３】
改竄検出手段７は、認証データと比較データとが一致する場合には（ステップＳ６：ＹＥＳ）、改竄無しを示す改竄検出結果と、プログラム識別子とを含む改竄検出応答を、入出力手段１１を介して改竄検出要求手段６に対して送信する。改竄検出要求手段６は、改竄無しを示す改竄検出結果を受け取った場合、特に処理を行わない。この結果、ステップＳ４以降の処理が継続される。
【００７４】
一方、改竄検出手段７は、認証データと比較データとが一致しない場合には（ステップＳ６：ＮＯ）、改竄有りを示す改竄検出結果と、プログラム識別子を含む改竄検出応答を入出力手段１１を介して改竄検出要求手段６に対して送信する。
改竄検出要求手段６は、改竄有りを示す改竄検出結果が改竄検出応答に含まれていた場合、改竄検出応答に含まれているプログラム識別子を含む実行停止指示を実行手段５に送信する。
【００７５】
実行手段５は、前記実行停止指示を受け取ると、前記実行停止指示に含まれるプログラム識別子により識別されるプログラムの実行を停止する（ステップＳ７）。
次に、ステップＳ２の詳細について、図４を用いて説明する。
図４は、ステップＳ２の詳細である、認証データ生成処理を示す図である。
改竄検出手段７における入出力手段１１は、プログラム識別子を含む認証データ生成要求を改竄検出要求手段６から受け取る。
【００７６】
入出力手段１１は、前記認証データ生成要求を分割サイズ決定手段１２に送信する。
分割サイズ決定手段１２は、認証データ生成要求を受け付けると乱数を生成し、乱数に基づきブロック分割サイズＢＳを決定する（ステップＳ２１）。
そして、分割サイズ決定手段１２は、プログラム識別子と、ブロック分割サイズと、認証データの生成を示す生成データ種別とを含む分割指示を分割手段１３に対して送信する。
【００７７】
分割手段１３は、分割指示を受け付けると、分割指示に含まれるプログラム識別子に係るプログラムをフラッシュメモリ３から読み出す。次に、分割手段１３は、プログラム識別子に対応するプログラムサイズＰＳを認証データリスト２３から読み出す。
そして、分割手段１３は、読み出したプログラムサイズＰＳに応じたパディング処理を行う（ステップＳ２２）。
【００７８】
次に、分割手段１３は、パディング後のプログラムをブロック分割サイズの大きさのブロックデータ（Ｂ［１］〜Ｂ［Ｎ］）へと分割する（ステップＳ２３）。
分割が終了すると、分割手段１３は、第１変換手段１４に対し、分割指示に含まれていたプログラム識別子、生成データ種別を含む第１変換指示を第１変換手段１４に送信する。
【００７９】
そして、分割手段１３は、ブロック分割サイズを、分割指示に含まれるプログラム識別子に対応づけて、認証データリスト２３に追記する（ステップＳ２４）。
第１変換手段１４は、変数ｉを１で初期化し、大きさがＢＳのバッファ領域Ｂｕｆを確保し、Ｂｕｆを値０で初期化する（ステップＳ２５）。
ｉがＮ以下である場合（ステップＳ２６：ＹＥＳ）、ＢｕｆとＢ［ｉ］との排他的論理和（ＸＯＲ）を計算し、その計算結果をＢｕｆに格納する（ステップＳ２７）。図中ではＢｕｆ  ＝  Ｂｕｆ  ＸＯＲ  Ｂ［ｉ］のように記載している。
【００８０】
そして、ｉを１インクリメントし（ステップＳ２８）、ステップＳ２６に戻る。
また、ｉがＮを超える場合（ステップＳ２６：ＮＯ）、第１変換手段１４は、第２変換手段１５に対して、プログラム識別子を出力すると共に、認証一時データとしてＢｕｆの内容を出力する（ステップＳ２９）。
次に、第２変換手段１５は、認証一時データに対して所定の演算であるＳＨＡ１処理を施し、その結果である２０バイトのハッシュ値である認証データを生成する（ステップＳ３０)。
【００８１】
第２変換手段１５は、ＳＨＡ１処理の結果を認証データとしてプログラム識別子と共に格納手段１６に送信する。
ステップＳ２の認証データ生成処理において取り扱われるデータの変遷は重要なので、ここで図５を用いて補足説明する。
図５は、認証データ生成処理におけるデータの変遷について説明するための図である。
【００８２】
プログラム２１は、改竄チェック対象となるプログラムである。プログラム２１のプログラムサイズは６２ＫＢであり、分割サイズ決定手段１２により決定されたブロック分割サイズは４ＫＢとする。
プログラム２１には、パディング処理がなされる。
ここで、パディングに用いられるデータは、例えば値が全て０などの無意味なデータとする。
【００８３】
パディングされたプログラムのサイズはブロック分割サイズ４ＫＢの倍数となる。
本例の場合、プログラム２１の最後部に、２ＫＢのパディング用のデータが付加される。
よって、パディング後のプログラム２１の総サイズは、６４ＫＢとなる（図５の２１）。
【００８４】
続いて、パディング後の６４ＫＢのプログラム２１に対して、４ＫＢごとにブロック分割を行う。
ブロック分割の結果が図５に示すプログラム６１となる。
ここでは、Ｂ［１］、Ｂ［２］、・・・、Ｂ［１６］の１６個のブロックに分割される。
【００８５】
次に、各ブロックに対して、第１変換手段１４であるＸＯＲ演算６２を、図４のステップＳ２５〜２７、２９、３０にしたがって処理する。
ＸＯＲ演算６２によって生成された４ＫＢのデータが、認証一時データ６３となる。
ここで、ＸＯＲ演算を（＋）と表すと、認証一時データ６３は、Ｂ［１］（＋）Ｂ［２］（＋）・・・（＋）Ｂ［１６］を演算した結果となる。
【００８６】
次に、認証一時データ６３に対し、第２変換手段１５によるＳＨＡ１処理６４が施され、２０バイトのハッシュ値である認証データ６５が生成される。
次に、図３のステップＳ５の詳細について、図６を用いて説明する。
図６は、ステップＳ５の詳細である、比較データ生成処理を示す図である。
改竄検出手段７における入出力手段１１は、改竄検出要求手段６から改竄検出要求を受け取り、その改竄検出要求を判定手段１７に送信する。
【００８７】
判定手段１７は、改竄検出要求手段６から入出力手段１１を介して改竄検出要求を受信する。そして、認証データリスト２３中で、前記改竄検出要求に含まれるプログラム識別子と同値のプログラム識別子を検索する。そのプログラム識別子を発見できた場合、前記プログラム識別子に対応付けられているブロック分割サイズを認証データリスト２３から読み出す。そして、プログラム識別子とブロック分割サイズと比較データの生成を示す生成データ種別とを含む分割指示を分割手段１３へと送信する（ステップＳ４１）。
【００８８】
分割手段１３は、分割指示を受け付けると、プログラム識別子に対応するプログラムサイズを認証データリスト２３から読み出す。そして、分割手段１３は、ＲＡＭ２上にロードされているプログラムのうち前記プログラム識別子で識別されるプログラムについて、前記プログラムサイズに応じたパディング処理を行う（ステップＳ４２）。このパディング処理の内容は、ステップＳ２２で説明したものと同様である。
【００８９】
次に、分割手段１３は、パディングされたプログラムをブロック分割サイズの大きさのブロックデータ（Ｂ［１］〜Ｂ［Ｎ］）へと分割する（ステップＳ４３）。この分割処理の内容は、ステップＳ２３で説明したものと同様である。
分割が終了すると、分割手段１３は、第１変換手段１４に対し、分割指示に含まれていたプログラム識別子と生成データ種別とを含む第１変換指示を第１変換手段１４に送信する。
【００９０】
第１変換手段１４は、ステップＳ２５〜Ｓ２８にて説明したのと同様に、ステップＳ４３で生成したブロックのＸＯＲを計算し、その結果をＢｕｆに格納する（ステップＳ４４〜Ｓ４７）。
そして、第１変換手段１４は、Ｂｕｆの内容を比較一時データとして第２変換手段１５に対して出力する。
【００９１】
第２変換手段１５は、比較一時データに対して所定の演算であるＳＨＡ１処理を施し、その結果である２０バイトのハッシュ値である比較データを生成し（ステップＳ４９)、比較データ生成処理を終了する。
以上の処理により、ＲＡＭ上のプログラムが改竄された場合に改竄を検知して、ＲＡＭ上の不正なプログラムの実行を防止することができる。
【００９２】
１．３．効果についての補足説明
以下、本実施の形態１の構成によって得られる効果を更に詳細に述べる。
従来の改竄検出方法では、改竄チェック対象のプログラムに対する認証データであるハッシュ値を生成するために、チェック対象となるプログラムのサイズ分のデータに対してＳＨＡ１などの一方向性関数を用いてハッシュ値を生成処理をする必要がある。
【００９３】
そのため、改竄チェック対象プログラムのサイズが大きくなると、ハッシュ値生成処理に多大な時間を要する。
一方、本実施の形態の改竄検出装置１では、まず、改竄チェック対象のプログラムにＸＯＲ処理等の非常に負荷の軽い処理である第１変換手段１４による変換をかけて、プログラムの特徴を残しつつデータ量を高速に削減する。次いで、データ量が既に削減されたデータに対して、ＳＨＡ１処理等の負荷の高い処理である第２変換手段１５による変換をおこなう。よって、全体として改竄検出処理にかかる時間を低減させることができる。
【００９４】
なお、上記構成において、第１変換手段１４による変換で用いるブロック分割サイズを固定サイズにしてしまうと、第１変換手段１４による第１のデータ変換処理が特定されやすくなる。第１のデータ変換処理が特定されると、本来の正当なプログラムを、第１のデータ変換処理の結果が同等になるようにしつつ、不正な動作をするよう改竄することが可能となってしまう。
【００９５】
この問題に対し、本実施の形態では、ブロック分割サイズをランダムに設定することによって予測しにくいものとにしている。
これにより、第１のデータ変換処理の結果が同等になるようにしつつ不正な動作をするよう改竄するには、ブロック分割サイズを予め知ることが必要なので、たとえ第１変換手段が特定されたとしても不正な改竄行為は成されにくくなる。
【００９６】
また、本実施の形態では、ブロック分割サイズは、Ｆｌａｓｈ上のプログラムのロードの度に毎回ランダムに決定される。従って、一つのプログラムに着目して不正解析を行ったとしても、ロードの度にブロック分割サイズが変化するため、ブロック分割サイズが予測しにくいものとなり、不正な改竄行為をより効果的に防止することができる。
なお、第１変換手段１４のＸＯＲ処理は、第２変換手段１５のＳＨＡ１よりも安全性のレベルが低い処理であるが、分割サイズ決定手段１２がブロック分割サイズを乱数により決定していることで、安全性のレベルを落とすことなく改竄検出処理が可能となっている。
【００９７】
また、認証データは、認証データ生成処理にて動的に生成するので、従来技術とは異なり、予めメモリに実行ログを残しておく必要はない。さらに、予め認証データを保持しておく必要もないため、省メモリの効果がある。さらには、メモリに残しておいたデータが奪われて不正解析の手掛かりとされることも防止できる。 
２．実施の形態２
実施の形態１では、１つの改竄チェック対象のプログラムに対して、１つの認証データを生成していた。これに対し本実施の形態では、１つの改竄チェック対象のプログラムについて複数の認証データを生成する。これら複数の認証データの生成には、それぞれ異なる複数のブロック分割サイズを用いる。そして、複数の認証データのうちの１つを、改竄検出装置で実行されているプロセスの状況（以下、プロセス状況という）に応じて選出し、選出した認証データと比較データとを比較して改竄有無をチェックする。
【００９８】
装置の構成要素としては、本実施の形態における改竄検出手段７は、実施の形態１の図１で説明したものと相違はない。しかし、各構成要素の動作については、実施の形態１によるものと若干相違する。
具体的には、本実施の形態における分割サイズ決定手段１２は、複数のブロック分割サイズを決定している。そして、分割手段１３と第１変換手段１４と第２変換手段１５とが各ブロック分割サイズに応じた複数の認証データを生成する。そして、生成された複数の認証データは、格納手段１６により認証データリストに登録する。また、判定手段１７は、認証データリストに記録されている複数のサイズの認証データからプロセス状況に応じて１つを選択し、選択した認証データのサイズを分割手段１３に通知する。また、改竄検出要求手段６の動作は、実施の形態１とは多少異なっている。
【００９９】
以下、実施の形態１と異なる点を中心に、認証データの生成と、比較データの生成及び改竄検出について説明する。
２．１．認証データの生成
以下、図７を用いて、実施の形態２における認証データ生成フローについて説明する。
図７で示す処理は、図４で示した処理のうちプログラムに対してブロック分割、第１及び第２のデータ変換処理を行う部分については、ほぼ共通する。
【０１００】
よって、以下では、図４で既に説明した部分と異なる箇所を中心に説明する。
まず、改竄検出要求手段６が、プログラム識別子を含む認証データ生成要求を、入出力手段１１を介して分割サイズ決定手段１２に対し送信する。
ここまでの処理は、実施の形態１と変わらない。
分割サイズ決定手段１２は、前記認証データ生成要求を受信するとＭ個の乱数を生成する。
【０１０１】
ここで、Ｍは予め定めた自然数とする。本実施の形態では、Ｍ＝４の例で説明する。ただし、このＭは、ランダムに生成して、装置内に記憶しておくこととしても構わない。
そして、Ｍ個の乱数それぞれに対応するブロック分割サイズ（ＢＳ＿１〜ＢＳ＿Ｍ）を生成する（ステップＳ６１）。
各乱数からブロック分割サイズを決定する手順は、実施の形態１における手順と同様である。
【０１０２】
そして、分割サイズ決定手段１２は、プログラム識別子と、ブロック分割サイズ（ＢＳ＿１〜ＢＳ＿Ｍ）と、認証データの生成を示す生成データ種別とを含む分割指示を分割手段１３に対して送信する。
分割手段１３は、分割指示を受け付けると、前記分割指示に含まれるプログラム識別子に係るプログラムをフラッシュメモリ３から読み出す。次に、分割手段１３は、プログラム識別子に対応するプログラムサイズＰＳを認証データリスト２３から読み出す。
【０１０３】
分割手段１３は、内部変数ｊを１で初期化する（ステップＳ６２）。そして、ＢＳを、ＢＳ＿ｊとする（ステップＳ６３）。
以後、ステップＳ６４〜Ｓ７２に関しては、前述のステップＳ２２〜Ｓ３０と同様である。
ただし、実施の形態１におけるＮは、実施の形態２ではＮ＿ｊに置き換わっている。
【０１０４】
また、ブロックの分割数は、実施の形態１ではＮであり、実施の形態２ではＮ＿ｊである。
また、実施の形態１の認証データは、実施の形態２では認証データ＿ｊに置き換わっている。
また、ステップＳ６６において、分割手段１３が生成する認証データリストは、実施の形態１において生成されるものと相違する。
【０１０５】
図８は、ステップＳ６６において、分割手段１３が生成する認証データリスト８１を説明するための図である。
図８を参照すると、認証データリスト８１には、値が０００１である１つのプログラム識別子に対し、４つの異なるブロック分割サイズと、４つの異なる認証データが登録されている。
【０１０６】
図８のブロック分割サイズ８５を参照すると、１ｋＢ、４ｋＢ、６ｋＢ、２０ｋＢの４つのサイズが登録されているが、これらが、上述のＢＳ＿１〜ＢＳ＿Ｍの一例である。
すなわち、ＢＳ＿１＝１、ＢＳ＿２＝４、ＢＳ＿３＝６、ＢＳ＿４＝２０である。ただし、Ｍの値が４の場合である。
ステップ６６においては、分割手段１３は、ＢＳ＿ｊについて、ブロック分割を行う毎に、ＢＳ＿ｊをブロック分割サイズ８５の欄に追記することになる。
【０１０７】
また、そのＢＳ＿ｊに対応する認証データ８６の欄には、ステップＳ７２において、格納手段１６が、第２変換手段１５により生成される認証データ＿ｊを記録することとなる。
次に、ステップＳ７３において、分割手段１３は、ｊをインクリメントする（ステップＳ７３）。
【０１０８】
そして、ｊがＭを超える場合（ステップＳ７４：ＹＥＳ）、処理を終了する。
ｊがＭを超えない場合（ステップＳ７４：ＮＯ）、ステップＳ６３以降の処理を行う。
以上で、図８の説明を終える。
２．２．比較データの生成及び改竄検出
２．２．１．改竄検出要求手段６への追加機能
実施の形態２では、改竄検出処理時に、上述した認証データリスト８１に登録されたＭ個（本実施の形態では４個）の認証データから１つを選択し、その認証データと比較するための比較データを算出する。そして、比較データと認証データを比較することによりプログラムの改竄を検出する。
【０１０９】
改竄検出処理において、前述の比較に用いる認証データは、現在動作しているプロセスの状況に基づき算出されるプロセス状況算出値に基づいて選択される。プロセス状況算出値の詳細は、後述する。
ここで、改竄検出要求手段６は、プロセス状況算出値を生成するために、実施の形態１におけるものに対して必要な機能の追加がなされている。
【０１１０】
本実施の形態における改竄検出要求手段６は、プロセス状況を監視する機能を持つ。
図９は、実施の形態２において、実施の形態１から追加された構成を中心とした改竄検出要求手段６を示す概略図である。
改竄検出要求手段６は、実施の形態１で説明した機能を備えており、更に、内部構成として、切り替え実行可能なプロセス群全体を監視するスケジューリング手段１０１と、各プロセスの優先度やＣＰＵ使用率などのプロセス情報を記憶しているプロセス管理テーブル格納部１０２とを有している。
【０１１１】
プロセス管理テーブル格納部１０２は、プロセス管理テーブルを格納している。
図１０は、プロセス管理テーブル格納部１０２に格納されるプロセス管理テーブル１２１の一例を示している。
プロセス管理テーブル１２１は、プロセス識別子１２２、優先度１２３、ＣＰＵ使用率１２４から構成されている。
【０１１２】
プロセス識別子１２２は、実行中のプロセスを識別するためのプロセスＩＤである。
優先度１２３は、プロセス識別子１２２で識別されるプロセスに付与されている優先度の値である。
ＣＰＵ使用率１２４は、プロセス識別子１２２で識別されるプロセスが、どの程度ＣＰＵを使用しているかを表す数値である。
【０１１３】
図１０に示す例では、プロセス管理テーブル１２１には５つのプロセスが登録されている。
プロセス管理テーブル１２１は、プロセス識別子「０００１」で識別されるプロセスの優先度が「１０」であり、ＣＰＵ使用率が「４０％」であることを示す。同様に、プロセス識別子「０００２」「０００３」「０００４」「０００５」で識別される各プロセスの優先度は「４」「８」「１」「３」であり、ＣＰＵ使用率は「１０％」「３０％」「１％」「５％」であることを示す。
【０１１４】
なお、プロセス管理テーブルは、プロセスを実行している実行手段５により生成され、逐次更新されるものとする。
２．２．２．プロセス状況算出値の生成
続いて、スケジューリング手段１０１が、プロセス管理テーブルに登録されている情報を用いてプロセス状況算出値を生成する処理について図１１を用いて説明する。
【０１１５】
まず、スケジューリング手段１０１は、プロセス管理テーブル格納部１０２からプロセス管理テーブル１２１を読み出す（ステップＳ１０１）。
次に、プロセス管理テーブル１２１に登録されている情報を用いて所定のアルゴリズムによりプロセス状況算出値を算出する（ステップＳ１０２）。
ここでは、所定のアルゴリズムとして、プロセス管理テーブルに登録されているプロセスの数を算出し、算出したプロセス数をプロセス状況算出値とする。
【０１１６】
一例として、プロセス管理テーブル１２１が図１０の状態であるとすると、プロセス管理テーブル１２１に登録されているプロセスの数は、プロセス識別子「０００１」から「０００５」までの５である。
この場合、スケジューリング手段１０１は、上述のアルゴリズムに従って、プロセス状況算出値を「５」とする。
【０１１７】
次に、ステップＳ１０２にて算出したプロセス状況算出値を改竄検出手段７の入出力手段１１に送信する（ステップＳ１０３）。
プロセス状況算出値を受信した入出力手段１１は、判定手段１７にプロセス状況算出値を送信する。
２．２．３．認証データの選択と改竄検出
前述のように、入出力手段１１が、前記プロセス状況算出値を送信した後の処理については、図１２を用いて説明する。
【０１１８】
図１２は、プロセス状況算出値を用いて認証データを選択する処理を示すフローである。
まず、判定手段１７は比較データの生成が開始されるより前に、前記プロセス状況算出値を受信する（ステップＳ１２１）。
ここで、判定手段１７は、最大閾値と最小閾値の組から成る閾値情報を予め保持しているものとする。前記閾値情報は、認証データを選出するのに用いられる情報であり、プロセス状況算出値と比較される。
【０１１９】
次に、判定手段１７は閾値情報を読み出し（ステップＳ１２２）、プロセス状況算出値が最大閾値以上であるか否かを判定する（ステップＳ１２３）。
プロセス状況算出値が最大閾値以上の場合（ステップＳ１２３：ＹＥＳ）、認証データリスト１２１内でブロック分割サイズが最小サイズである認証データを選択する（ステップＳ１２４）。
【０１２０】
例えば、認証データリスト８１が図８に示す内容の場合、最小のブロック分割サイズ１ＫＢに対応する認証データ＿１が選択される。
一方、プロセス状況算出値が最大閾値未満の場合（ステップＳ１２３：ＮＯ）、更に、プロセス状況算出値が最小閾値以下であるかを判定する（ステップＳ１２５）。
プロセス状況算出値が最小閾値以下である場合（ステップＳ１２５：ＹＥＳ）、認証データリスト８１内のブロック分割サイズが最大サイズの認証データを選択する（ステップＳ１２６）。
【０１２１】
認証データリスト８１が図８に示す内容の場合、最大のブロック分割サイズは２０ＫＢなので認証データ＿４が選択される。
最小閾値＜プロセス状況算出値＜最大閾値の場合（ステップＳ１２５：ＮＯ）、認証データリスト８１内の全ての認証データからランダムに選択する（ステップＳ１２７）。
以上のフローにより複数ある認証データから１つの認証データを選択することができる。
【０１２２】
認証データが選択されると、判定手段１７は、選択した認証データに対応する認証データリスト８１から、プログラムアドレス８３、プログラムサイズ８４、ブロック分割サイズ８５を判定手段１７が読み込む。
そして、これらの情報を用いて、比較データを算出し、比較データと認証データを比較し、改竄検出処理を行う。
【０１２３】
比較データを算出する処理から、比較データと認証データ比較するまでの処理については、説明済みの実施の形態１と同様であるとする。
以上より、本実施の形態２では、プロセス状況算出値を利用することで、改竄検出処理にかける負荷を調整することができる。そのため、他のプロセスへの影響を最小限に抑えて改竄検出処理が可能になる。
【０１２４】
３．その他変形例
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる
（１）上述の実施の形態において、ＲＡＭ２は、ランダムアクセスメモリとしているが、これに限らず、読み出し及び書き込み可能なメモリであればよい。また、フラッシュメモリ３は、ＦｌａｓｈＲＯＭとしていたが、これに限定されず、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）やＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの他の不揮発性のメモリでもよい。
【０１２５】
（２）上述の実施の形態において、プログラム識別子は、プログラムを識別するためのＩＤ情報としているが、これに限らずプロセスＩＤやファイル名などプログラムを識別できる情報であればよい。
（３）上述の実施の形態において、ブロック分割サイズは、生成した乱数をそのまま使用するものとしていたが、これに限らず、ブロック分割サイズがある程度ランダムに生成される方法であればよい。
【０１２６】
例えば、予め、乱数とブロック分割サイズの対応表を記憶しておき、生成した乱数を対応表を用いてブロック分割サイズに変換することとしてもよい。
また、例えば、ブロック分割サイズの候補値を予め所定個数（例えば、５つ）決めておき、候補値の１つを順番に用いることとしてもよい。
（４）上述の実施の形態において、ブロック分割する前にパディング処理を行っているが、ブロック分割した最終ブロックに対してパディング処理を行っても良い。この場合、Ｂ［１６］は２ＫＢのブロックとなる。
【０１２７】
また、パディング処理を省略することとしてもよい。この場合、Ｂ［１６］がＢｕｆ中のデータよりもビット数が少なくなってしまう。
これに対応するため、例えば、Ｂｕｆ中のデータの一部分に対してのみＢ［１６］のデータとのＸＯＲ演算を行った結果を認証一時データ６３とするとしてもよい。また、Ｂ［１５］までＸＯＲ演算を行った結果を認証一時データ６３とするとしてもよい。
【０１２８】
（５）上述の実施の形態において、プログラム全体の改竄チェックを行っていたが、これに限らず、プログラム内を部分的に改竄検出するようにしてもよい。
この場合、プログラムに係る改竄検出したい部分の先頭アドレスをプログラムアドレス４２とし、改竄検出したい部分のプログラムサイズをプログラムサイズ４３として、認証データリスト２３に登録すればよい。
【０１２９】
このような構成とすれば、１つのプログラムに対して部分的に改竄検出ができるので、改竄検出に要する時間を短縮することができる。特に、認証一時データの生成ですら相当の時間がかかるほどの大きなプログラムに対して改竄検出する場合には有効である。
また、１つのプログラムに対して改竄検出を行いたい部分が複数ある場合などには、１つのプログラム識別子に対応づけて、プログラムアドレス４２、プログラムサイズ４３、ブロック分割サイズ４４及び認証データ４５の組を複数登録してもよい。
【０１３０】
これにより、１つのプログラムについて複数の部分的なプログラム領域それぞれに対する改竄を検出することができる。
さらに、フラッシュメモリ３上で１つだったプログラムを同一内容の複数のプログラムとしてＲＡＭ２上にロードし並行処理を行う場合などには、１つのプログラム識別子に対応づけて、プログラムアドレス４２、プログラムサイズ４３、ブロック分割サイズ４４及び認証データ４５の組を複数登録してもよい。
【０１３１】
この場合、プログラムサイズ４３しては、部分的なプログラムのサイズではなくプログラム全体のサイズが登録される。
（６）上述の実施の形態において、改竄検出開始のトリガが発生した場合に、複数のプログラムから改竄チェック対象となるプログラムを選択する方法について特には説明しなかったが、以下のようなものが考えられる。
【０１３２】
まず、判定手段１７が、フラッシュメモリ３に格納されているプログラムのうちからランダムに選択した１つのプログラムを改竄チェック対象のプログラムとする方法が考えられる。
また、改竄検出要求手段６が、装置外部から改竄チェックを要求するプログラムの選択を受け付け、その選択されたプログラムのプログラム識別子を認証データ生成要求に含めて改竄検出手段７に対して送信することとしてもよい。
【０１３３】
また、何らかのタイミングで改竄チェック用の割り込みを発生させ、その時点で実行中のプログラムを改竄チェック対象となるプログラムとして選択するとしてもよい。
この場合、プログラム実行手段５０がＲＡＭ上のプログラムを実行している間に、改竄検出要求手段６が、実行手段５に対して割り込みを発生させて、そのときのプログラムカウンタ値を取得し、そのプログラムカウンタ値を入出力手段１１へ送信し、入出力手段１１が受信したプログラムカウンタ値を判定手段１７に送信する。その後、判定手段１７が、受信したプログラムカウンタ値と認証データリスト２３内のプログラムアドレスとプログラムサイズから、プログラムカウンタ値が示すアドレスに対応するプログラム情報を読み込んでもよい。
【０１３４】
また、改竄検出要求手段６が、入出力手段１１に比較データ生成要求を通知し、プログラムの改竄検出を行うタイミングについては、定期的に通知してもよいし、ＲＡＭ２上の改竄チェック対象のプログラム内に、改竄検出要求手段６への認証データ生成要求を送信する処理、改竄検出要求を送信する処理を埋め込んでおくなど、所定のイベントが発生するタイミングで行うようにしてもよい。
【０１３５】
（７）分割サイズ決定手段１２に対してブロック分割サイズの閾値を設定しておき、分割サイズ決定手段１２が生成するブロック分割サイズが閾値以下になるように生成してもよい。このようにすることで、第１変換手段１４にて生成されるデータサイズが前記閾値以下のサイズでランダムに選ばれることとなるため、改竄チェック対象プログラムのサイズにかかわらず、第２変換手段１５の処理時間を一定以下の処理時間に抑えることができる。
【０１３６】
（８）上述の実施形態では、第１変換手段１４によるデータ変換処理をＸＯＲとし、第２変換手段１５によるデータ変換処理をＳＨＡ１としているが、これに限定されるわけではなく、論理演算を組み合わせたアルゴリズムや一方向性関数などを利用してもよい。
論理演算を組み合わせたアルゴリズムには、例えば、論理積演算と排他的論理和演算を交互に行うアルゴリズム等が考えられる。
【０１３７】
このアルゴリズムを第１変換手段１４で行う場合を例に、具体的に説明すると、まずブロックデータＢ［１］とＢ［２］との論理積演算を行う。次に、Ｂ［１］とＢ［２］との論理積演算結果と、Ｂ［３］との排他的論理和演算を行う。次に排他的論理和演算の結果と、Ｂ［４］との論理積演算を行う。以下、同様に、排他的論理和演算と、論理積演算とを交互に繰り返す。
【０１３８】
なお、この場合、論理積演算と、排他的論理和演算の実行回数の比を、上記のように１：１とせず、２：１など、他の比率を用いることとしてもよい。
例えば、２：１とする場合であれば、Ｂ［１］とＢ［２］との論理積演算を行い、その論理積演算の結果とＢ［３］との論理積演算を行う。論理積演算が２回終了したので、今度は、Ｂ［３］に係る前記論理積演算の結果と、Ｂ［４］との排他的論理和演算を行う。排他的論理和演算が１回終了したので、次に、その排他的論理和演算の結果と、Ｂ［５］との論理積演算を行う。以降は、排他的論理和演算１回に対し、論理積演算２回を実行していくことになる。
【０１３９】
比率をランダムに定めるよう実装することで、このアルゴリズムも処理が軽くかつランダム性のあるアルゴリズムとなる。
また、第１変換手段１４と第２変換手段１５との両方で一方向性関数を使う場合には、それぞれで異なる一方向性関数を用いることが望ましい。例えば、データ量の削減を目的とする第１変換手段１４では軽量な一方向性関数を、認証データの算出を目的とする第２変換手段１５では安全性の高い一方向性関数を用いるとよい。
【０１４０】
また、改竄チェック対象のプログラムの全データに対して、第１のデータ変換処理を行うことにより、改竄チェック対象が部分的でなく、網羅的にチェックできる。すなわち、改竄チェック対象プログラムのどこか１ビットが改竄されても、その改竄を効率的に検出することができる。
（９）上述の実施の形態において、１つの改竄チェック対象のプログラムに対して１つの認証データを生成しているが、複数の改竄チェック対象のプログラムに対して１つの認証データを生成することとしてもよい。
【０１４１】
具体的には、複数の改竄チェック対象のプログラムに対して、１つの認証データを生成する場合、複数の改竄チェック対象のプログラムを連結させたデータを１つの改竄チェック対象のデータとして扱い、前記連結されたデータに対して、分割手段１３による分割処理と第１のデータ変換処理手段７５のＸＯＲ処理をしてもよい。この場合、連結させたプログラムの順序によって異なる第１の認証データを生成するような変換を第１変換手段１４による変換とすることによって、どのような順序で連結されているのかを知らない不正解析者に対して困難にすることができる。
【０１４２】
なお、上記のように連結させたプログラムの順序によって、第１変換手段１４によって生成される認証一時データが変わるようであれば、比較データを生成する際にも同じ順序で連結したプログラムについて変換を施す必要があるので、前記プログラムの順序情報も認証データと関連づけて登録する。
また、複数の改竄チェック対象のプログラムに対してプログラムの連結をせず１つの認証データを生成する方法として、分割手段１３によるブロック分割、第１変換手段１４による認証一時データの生成の処理を改竄チェック対象のプログラムの数だけループさせることが考えられる。
【０１４３】
この場合、生成された認証データと改竄チェック対象のプログラムの対応関係を格納手段１６がフラッシュメモリ３に登録する。
このようにすることで、登録する認証データの数を削減することができるので、省メモリの効果がある。
（１０）上述の実施の形態１では、分割手段１３は、プログラムを分割サイズ決定手段１２により決定されたブロック分割サイズのブロックに分割していた。そして、第１変換手段１４が、ブロック分割されたプログラムを入力として、処理を行い、結果としてブロック分割サイズのデータを出力していたが、これに限られるものではない。
【０１４４】
分割サイズ決定手段１２と分割手段１３と第１変換手段１４とによる処理は、入力されたプログラムが、ロード時にランダムに定まるサイズに削減された上で第２変換手段１５に与えられるような他の処理に置き換えても構わない。この場合であっても、実施の形態１について述べた効果は変わらず得られる。
（１１）上述の実施の形態２において、ブロック分割サイズの数Ｍは予め定められており、分割サイズ決定手段１２が記憶しているとしているが、これには限られない。
【０１４５】
例えば、改竄検出要求手段６が、ユーザ操作により指示されたＭを、分割サイズ決定手段１２に通知するものとしてもよい。
また、Ｍの値は、フラッシュメモリ３が格納できる認証データの数などに応じて決めていてもよい。
（１２）実施の形態２において、プロセス状況算出値を利用して認証データを選択する代わりに、ランダムに認証データを選択するものとしてもよい。このようにすれば、認証データのブロック分割サイズのパターンの範囲内で、ランダムなサイズの比較データが生成されるので比較データに対する解析を困難にすることが出来る。
【０１４６】
（１３）上述の実施の形態においては、フラッシュメモリ３に格納される認証データリストを平文のまま格納していたが、より安全に格納するためにセキュアフラッシュメモリなどの耐タンパ性を有するメモリに格納することとしてもよい。
また、認証データリストをフラッシュメモリ３に格納していたが、これに限らない。
例えば、小容量のセキュアなメモリを格納手段１６に具備させ、当該セキュアなメモリに認証データリストを格納することとしてもよい。
【０１４７】
（１４）改竄検出手段７に暗復号手段と暗号鍵を持たせて、認証データリストを前記暗号鍵を用いて暗号化した状態で格納することとしてもよい。
この構成においては、認証データリストのデータを参照、追記する場合には、暗号化された認証データリストを改竄検出手段７内の暗号鍵と暗復号手段を用いて復号する。参照、追記が終了した後、再度、保存する場合は、暗号鍵と暗復号手段を用いて認証データリストを暗号化した上で保存する。
【０１４８】
このようにすれば、認証データリストを安全に格納しておくことが可能になり、ブロック分割サイズを不正解析者から確実に守ることができる。
（１５）上述の実施の形態では、フラッシュメモリ３上の改竄チェック対象であるプログラムをＲＡＭ２にロードする時に改竄検出手段７にて認証データリストを動的に生成していたが、これに限らず、認証データリストを予め格納手段１６又はフラッシュメモリ３に記憶させておいてもよい。
【０１４９】
このようにすることで、フラッシュメモリ３上の改竄チェック対象であるプログラムから、認証データをロード時に生成する必要がなくなる。そして、予め格納手段１６又はフラッシュメモリ３に記憶させておいた認証データリストを用いてＲＡＭ上のプログラムの改竄を検出するので、プログラムのロード時にかかる負荷を軽減できる。なお、この場合には、認証データリストが改竄される恐れがあるため、格納手段１６又はフラッシュメモリ３を耐タンパ化技術などによって保護することが望ましい。
【０１５０】
また、さらに、予め格納手段１６又はフラッシュメモリ３に記憶させておいた認証データリストを用いて、フラッシュメモリ３上の改竄チェック対象であるプログラムをＲＡＭへロードする時に、前記プログラムについて改竄検出してもよい。このようにすることで、ＲＡＭ２上のプログラムだけでなく、フラッシュメモリ３上のプログラムについても改竄検出が可能となる。
【０１５１】
（１６）フラッシュメモリ３上のプログラムについて、ロード前のデータ形式と、ＲＡＭ２へロードされた後のデータ形式が異なる場合、ＲＡＭ２へロードされた後のデータ形式にした後のプログラムについての認証データを、認証データリストに記憶させておいてもよい。このようにすることで、Ｆｌａｓｈ上ではプログラムが圧縮されて保存されており、ＲＡＭへのロード時に圧縮されたプログラムが伸張されて、伸張されたプログラムが実行される場合などにおいても、ＲＡＭ上のプログラムの改竄検出が可能となる。
【０１５２】
（１７）改竄検出装置１に、外部端末との間でデータの送受信を行う送受信手段を付加し、外部端末から送受信手段を用いて新しい認証データリストを取得し、古い認証データリストを更新するようにしてもよい。このようにすれば、認証データリストの更新が可能となって安全性を維持することができる。
（１８）改竄検出装置１に、記憶媒体のデータを読み込む記憶媒体読み取り手段を付加してもよい。前記記憶媒体には新しい認証データリストを記憶させておく。そして、改竄検出装置１は、前記記憶媒体から新しい認証データリストを読み取り、前記新しい認証データリストで古い認証データリストを更新する。このようにすれば、認証データリストの更新が可能となって安全性を維持することができる。
【０１５３】
（１９）上述の実施の形態では、プログラムに対する改竄が検出された時には、実行手段５による前記プログラムの実行を停止させる例について説明してきた。しかし、これに限らず、他の実行妨害を行ってもよい。例えば、警告画面を表示したり、プログラムを実行できる時間に制限を設けたり、データ保存等の一部の機能を無効にするなどしてもよい。
【０１５４】
また、プログラムに対する改竄が検出された場合に、ロード手段４がフラッシュメモリ３から前記プログラムを改めて読み出して、再びロードするような構成としてもよい。
このようにすることで、ＲＡＭ２上のプログラムが改竄されたことを検出した場合に、再びロードされた改竄のされていないプログラムを実行することができるので、より安全にプログラムを実行することが可能となる。
【０１５５】
さらに、改竄が検出されたときには、改竄を検出したことを示す情報を不揮発性メモリにログ情報として残すようにしてもよい。このようにすることで、端末を提供するメーカー等が不正な端末を回収した際に、どのプログラムに対して改竄が行われたかを把握することが可能になる。
また、さらに、端末がネットワークと接続する機能を備えていれば、改竄を検知したというログ情報をネットワーク経由でサーバーに送信するようにしてもよい。このようにすることで、サーバー側で、そのログ情報を基に、どのプログラムに対して不正な改竄が行われたかを把握することができる。
【０１５６】
さらなる効果としては、ログ情報に基づき、適切な処置を施した更新プログラムを配布することも可能となる。
（２０）上述してきた改竄検出装置１又は改竄検出手段７は、セキュアな実行環境であるとしてもよい。セキュアな実装環境の例としては、Ｔｒｕｓｔｅｄ  Ｃｏｍｐｕｔｉｎｇ  Ｇｒｏｕｐ（ＴＣＧ）で規定しているＴｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅ（ＴＰＭ）やＭｏｂｉｌｅ  Ｔｒｕｓｔｅｄ  Ｍｏｄｕｌｅ（ＭＴＭ）が考えられる。このようにすることで改竄検出装置１又は改竄検出手段７の全構成要素がセキュアな環境で実行することができるため、より安全な実行環境を構築することができる。
【０１５７】
（２１）上述の実施の形態では、第１変換手段１４は、処理結果としてブロック分割サイズのデータを出力していたが、必ずこのサイズのデータを出力しなくてはならないわけではない。上述の実施の形態は、ブロック分割サイズと変換結果の取るべきデータサイズを同一とした例であり、これらのサイズをそれぞれ独立して決定してもよい。
以下、実装する場合の例を簡単に説明する。
【０１５８】
分割サイズ決定手段１２が、ブロック分割サイズと変換結果の取るべきデータサイズとの両方をランダムに決定し、第１変換手段１４に変換結果の取るべきデータサイズを通知する。
第１変換手段１４は、通知されたデータサイズ以下になるようプログラムのデータサイズを削減する。また、認証データリストには変換結果の取るべきデータサイズをさらに記録する。
【０１５９】
比較データの生成時には、認証データリストに記録されている変換結果の取るべきデータサイズにまで第１変換手段１４がデータ量を削減した上で処理を続ける。
（２２）上述の実施の形態では、プログラムをランダムに定まるブロック分割サイズに分割し、その結果にＸＯＲ演算等をかけてることで、データの削減に関してランダム性を持たせ、データ削減処理に対する攻撃を困難にしていた。しかし、データの削減に関しランダム性を持たせる方法はこれに限らない。
【０１６０】
例えば、データ量を削減するアルゴリズム自体を複数種類用意しておき、どのアルゴリズムを用いてデータを削減するかをランダムに決定してもよい。
具体的なアルゴリズムの候補としては、ブロックごとのＡＮＤを取るなどＸＯＲ以外の論理演算を用いる変換や、プログラム全体のチェックサムを取るなど比較的軽量な関数による変換などが考えられる。
【０１６１】
具体的な実装としては、認証データの生成時に、使用したデータ量の変換処理を識別できる情報を認証データリストに記録しておく。比較データの生成時には、認証データリストを参照し、認証データの生成に用いたものと同じアルゴリズムを把握する。そして、その同じアルゴリズムでプログラムのデータ量を削減した上で、第２変換手段１５が処理を行えばよい。
【０１６２】
なお、アルゴリズム自体がランダムに決定される場合は、ブロック分割サイズや変換結果の取るべきデータサイズが固定の値であっても攻撃は困難となるが、これらのサイズをランダムに決定することでさらに安全性を高めてもよいことは言うまでもない。
（２３）認証データの算出と比較データの算出とで、同一の分割手段１３と第１変換手段１４と第２変換手段１５とを用いているが、認証データの算出用の各手段と比較データの算出用の各手段とを別々に設けてもよい。
【０１６３】
（２４）実施の形態２で、プロセス管理テーブル１２１には、プロセス識別子１２２を含めることとしているが、これに限らず、その他のプログラム識別子などプロセスを識別できる情報であればよい。
（２５）実施の形態２において、プロセス状況算出値を算出するアルゴリズムとして、プロセス数をそのまま用いる方法について説明したが、これには限らない。
【０１６４】
別のアルゴリズムとしては、プロセス管理テーブル格納部１０２に登録されているプロセスの総ＣＰＵ使用率を算出し、総ＣＰＵ使用率をプロセス状況算出値とする方法が考えられる。
この方法を用いた場合、一例としてプロセス管理テーブル１２１が図１０の状態であったならば、プロセス識別子「０００１」〜「０００５」までのプロセスのＣＰＵ使用率は、それぞれ「４０％」「１０％」「３０％」「１％」「５％」であるので、その合計である総ＣＰＵ使用率が８６％となる。よってプロセス状況算出値は「８６」となる。
【０１６５】
また、別のアルゴリズムとしては、各プロセス優先度とＣＰＵ使用率を掛けあせたものの合計値を、プロセス状況算出値としてもよい。
この場合、一例としてプロセス管理テーブル１２１が図１０の状態であったならば、合計値は、
１０×４０（プロセス識別子「０００１」の優先度  ×  ＣＰＵ使用率）
＋  ４×１０（プロセス識別子「０００２」の優先度  ×  ＣＰＵ使用率）
＋  ８×３０（プロセス識別子「０００３」の優先度  ×  ＣＰＵ使用率）
＋  １×  １（プロセス識別子「０００４」の優先度  ×  ＣＰＵ使用率）
＋  ３×  ５（プロセス識別子「０００５」の優先度  ×  ＣＰＵ使用率）
＝  ６９６
となるので、プロセス状況算出値は６９６となる。
【０１６６】
なお、上述したアルゴリズムは一例であるので、これ以外の方法であってもよい。
（２６）実施の形態２のステップＳ１２７においては、認証データを選択する場合に、認証データリスト８１内の全ての認証データからランダムに選択することとしていたが、これに限らない。
例えば、認証データリスト８１内の全ての情報のうち最大、最小ブロック分割サイズを除いたものから、ランダムに選択することとしてもよい。
【０１６７】
例えば、認証データリスト８１が図８に示されるような場合であれば、認証データ＿２及び認証データ＿３からランダムに選択することとなる。
（２７）上述の実施の形態は、プログラムがリロケーションされないことが前提であった。リロケーションとは、オブジェクトファイル内のシンボリックな参照を具体的なメモリアドレスに置き換えることを意味する。一般にオブジェクトファイルはその中のコードが０番地から始まるものとしてコードが生成されており、実際に実行する前にそのコードが置かれたアドレスに応じてコードの調整がなされる。
【０１６８】
ここで、リロケーションについて図１３を用いて具体的に説明する。フラッシュメモリ３には、図１３に示すようなロード対象となるプログラムが記憶されているものとする。
プログラムは、非リロケーション対象コード（ＮＣ１〜ＮＣ３）と、リロケーション対象コード（ＲＣ１〜ＲＣ２）と、リロケーションテーブルとを含んでいる。
非リロケーション対象コードは、リロケーションされないコードであり、ＲＡＭにロードされてもコードが置き換わることはない。
【０１６９】
リロケーション対象コードは、リロケーションされるコードであり、上述のように、ロードされる場合にコード中のシンボリックな参照が具体的なメモリアドレスに置き換えられる。よって、ＲＡＭにロードされた後のプログラムは、前述の置き換えがなされた部分においてフラッシュメモリ３に記録されていたときとは異なる。
リロケーションテーブルは、リロケーションを行うための情報を含む。ＲＡＭにロードされてもコードが置き換わることはない。
【０１７０】
ＲＡＭへとロードされたプログラムはは、非リロケーション対象コード（ＮＣ１〜ＮＣ３）と、リロケーション済コード（ＲＣ１’〜ＲＣ２’）と、リロケーションテーブルとを含むこととなる。
すなわち、ロード前とロード後のプログラムを比較すると、リロケーション対象コードの部分と、リロケーション済コードの部分が必ず相違することになる。
【０１７１】
よって、リロケーションされるプログラムについて上述の実施の形態と同じように、ロード前のプログラムから認証データを生成し、ロード後のプログラムから比較データを生成すると、認証データと比較データとは必ず異なり、改竄が行われていると判定されてしまう。
そこで、本変形例では、改竄検出対象のプログラムを図１４（ａ）又は図１４（ｂ）に示すデータとなるよう処理し、その処理後のデータから認証データ及び比較データを生成することとしている。
【０１７２】
図１４（ａ）は、改竄検出対象であるプログラムのうち、リロケーション対象コードを除いて生成したデータを示す。
図１４（ｂ）は、改竄検出対象であるプログラムのうち、リロケーション対象コードを規定コード（ＳＣ）、例えば、無意味なコード０ｘＦＦＦＦ・・・などに置き換えて生成したデータを示す。
【０１７３】
これにより、リロケーションが生じるプログラムについて、前述のように、改竄が行われたと常に判定されてしまうという不都合を回避できる。
（２８）上述の実施の形態においては、分割サイズ決定手段１２が乱数を生成し、乱数を用いてブロック分割サイズを決定していた。ブロック分割サイズがプログラムのロード毎に変更されるので、プログラムから生成される認証データがランダム性を有して、認証データの推測の困難性を増していた。しかし、これに限られるものではなく、以下のような変形例も考えられる。
【０１７４】
本変形例は、改竄検出対象のプログラムの全体から認証データを生成するのに代えて、プログラムの一部分から認証データを生成する。
その一部分を決定するために、一例として乱数を用いる場合について説明する。
図１５は、本変形例における、プログラムから認証データを生成するまでの概要を説明するための図である。
【０１７５】
図１５中のプログラム２１が、改竄検出対象のプログラムであるとする。
改竄検出手段７は、例えば、乱数を２つ生成し、一方の乱数をプログラムの先頭アドレスからのオフセット（１４１）、他方の乱数をデータサイズ（１４２）とする。
そして、プログラムの先頭アドレスにオフセット（１４１）を加えたアドレス（１４３）からデータサイズ（１４２）分のデータ（１４４）を用いて認証データを生成する。
【０１７６】
前記オフセット（１４１）及び前記データサイズ（１４２）は、認証データリストに登録しておくものとする。
そして、データ（１４４）に対し、ＳＨＡ１処理を行い、その結果として認証データ（１４５）を得る。
改竄検出を行うために比較データを生成する場合には、認証データリストから、オフセット（１４１）及びデータサイズ（１４２）を読み出して、ＲＡＭに記録されているプログラムの先頭アドレスにオフセット（１４１）を加えた部分からデータサイズ（１４２）分のデータを用いて、認証データを生成したのと同様に比較データを生成する。
【０１７７】
以上により、プログラムのうち認証データ及び比較データを生成するために用いる部分がプログラムのロード毎に変更されるので、認証データがランダム性を有して、認証データの推測の困難性を増すことができる。また、プログラムの一部分を認証データの生成に用いているため、プログラム全体から認証データを生成する場合に比べ、認証データの生成速度を向上することができる。
【０１７８】
（２９）上述の実施の形態においては、ブロック分割サイズをランダムな情報としていた。しかし、これに限られるものではなく、以下のような変形例も考えられる。
本変形例では、ＨＭＡＣ−ＳＨＡ１（ｋｅｙｅｄ−Ｈａｓｈｉｎｇ  ｆｏｒ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ  −  Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ  １）の鍵及びパディングデータをランダムな情報としている。
【０１７９】
図１６は、ＨＭＡＣ−ＳＨＡ１を用いる本変形例の処理について説明するための図である。
改竄検出手段７は、２つの乱数ＲＰ及びＲＫを生成する。
２つの乱数ＲＰ、ＲＫは、認証データリストに記憶しておく。
そして、上述の実施の形態では、改竄検出対象であるプログラム２１に対し、値が０のデータなど一定の値でパディング処理を行っていたが、本変形例では、図１６に示すように乱数ＲＰ（１６１）でパディング処理を行う。
【０１８０】
そして、上述の実施の形態と同様に、パディング後のプログラムについて、ブロック分割、ＸＯＲの算出を行い結果として認証一時データ６３を得る。
そして、認証一時データ６３について、乱数ＲＫを鍵とするＨＭＡＣ−ＳＨＡ１処理（１６５）を行い、結果として認証データ６５を得る。
比較データを生成する場合には、ＲＡＭ上のプログラムに対し、図１６に示したのと同様の処理を行って比較データを生成する。
【０１８１】
なお、本変形例は、乱数ＲＰ、ＲＫの２つを生成し、２つのランダム情報を用いた処理としていたが、これに限らず、３以上又は１つのランダム情報を用いることとしてもよく、この場合でもランダム情報を用いて認証データの推測を困難にする効果があることは言うまでもない。
すなわち、乱数ＲＫを生成せずに固定の鍵を用いてもよいし、乱数ＲＰを生成せずに固定値でパディングすることとしてもよい。
【０１８２】
（３０）上述の実施の形態においては、乱数を用いて決定していたブロック分割サイズについて、特に制約は設けていなかったが、決定するブロック分割サイズに制約を設けてもよい。
例えば、ブロック分割サイズをＣＰＵが具備する２次キャッシュなどのキャッシュメモリにおけるデータの取り扱い単位（例えば、ページングのサイズ）以下にする。
【０１８３】
これにより、認証データ又は比較データを、キャッシュメモリ上のデータの入れ替えを行うことなく生成することができる。これにより、キャッシュの使用効率が向上し、改竄検出処理の更なる高速化を実現できる。
（３１）上述の実施の形態において、プログラムのロード前に１のプログラムから複数の異なるサイズの認証データを生成し、プログラムのロード以後に１の認証データを選出し、選出した認証データを用いて改竄検出を行う例について説明したが、これに限らず、複数の認証データを用いて改竄検出を行ってもよい。
【０１８４】
例えば、２つ以上の認証データを選出し、選出した２つ以上の認証データを用いて改竄検出することとしてもよい。
この場合、選出した認証データの数と同数の、各認証データに対応する比較データを生成し、対応する認証データと比較データとを比較することになる。
また、２つ以上の認証データ、比較データについて、連結、加算等行ったものを用いて、改竄検出してもよい。
【０１８５】
（３２）上述の実施形態では、プログラムがＲＯＭに格納されており、ＲＡＭにロードされた後に、実行されることとしていたが、これには限定されない。例えば、プログラムは、ハードディスクや不揮発性メモリに格納されていてもよい。また、実行時には、プログラムはＲＡＭ以外のメモリにロードされることとしてもよい。
（３３）上記の装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、上記装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【０１８６】
（３４）上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【０１８７】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されていても良いし、一部又は全てを含むように１チップ化されてもよい。
また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、ＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
【０１８８】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
（３５）上記の装置を構成する構成要素の一部または全部は、装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
【０１８９】
（３６）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０１９０】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
【０１９１】
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（３７）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。 
【産業上の利用可能性】
【０１９２】
本発明に係る改竄検出装置は、高速かつ安全にプログラムやデータの改竄検出が可能なことから、認証を行ったり、個人情報を取り扱うような秘匿性の高いプログラム等を実行させるコンピュータ、携帯端末等として利用するのに好適である。
【図面の簡単な説明】
【０１９３】
【図１】本発明の実施の形態１における改竄検出装置の全体構成を示すブロック図である。
【図２】本発明の実施の形態１における認証データリストの一例を示す図である。
【図３】本発明の実施の形態１における改竄検出装置によるプログラム実行動作を示すフローチャートである。
【図４】本発明の実施の形態１における認証データ生成処理を示す図である。
【図５】本発明の実施の形態１における認証データ生成処理におけるデータの変遷について説明するための図である。
【図６】本発明の実施の形態１における比較データ生成処理を示す図である。
【図７】本発明の実施の形態２における認証データ生成処理を示す図である。
【図８】本発明の実施の形態２における認証データリストの一例を示す図である。
【図９】本発明の実施の形態２における改竄検出要求手段を示す図である。
【図１０】本発明の実施の形態２におけるプロセス管理テーブル格納部に格納されるプロセス管理テーブルの一例を示す図である。
【図１１】本発明の実施の形態２におけるスケジューリング手段におけるプロセス状況算出値を生成処理を示す図である。
【図１２】本発明の実施の形態２におけるプロセス状況算出値を用いて認証データを選択する処理を示すフローである。
【図１３】本発明の変形例におけるリロケーション対象コードを含むプログラムについて説明するための図である。
【図１４】（ａ）は、改竄検出対象であるプログラムのうち、リロケーション対象コードを除いて生成したデータを示す。（ｂ）は、改竄検出対象であるプログラムのうち、リロケーション対象コードを規定コードなどに置き換えて生成したデータを示す。
【図１５】本発明の変形例における、プログラムから認証データを生成するまでの概要を説明するための図である。
【図１６】本発明の変形例における、ＨＭＡＣ−ＳＨＡ１を用いた認証データ生成処理におけるデータの変遷について説明するための図である。
【符号の説明】
【０１９４】
１      改竄検出装置
２      ＲＡＭ
３      フラッシュメモリ
４      ロード手段
５      実行手段
６      改竄検出要求手段
７      改竄検出手段
１１      入出力手段
１２      分割サイズ決定手段
１３      分割手段
１４      第１変換手段
１５      第２変換手段
１６      格納手段
１７      判定手段
２３      認証データリスト
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2008056700.tif 000019
【図２】
2008056700.tif 000020
【図３】
2008056700.tif 000021
【図４】
2008056700.tif 000022
【図５】
2008056700.tif 000023
【図６】
2008056700.tif 000024
【図７】
2008056700.tif 000025
【図８】
2008056700.tif 000026
【図９】
2008056700.tif 000027
【図１０】
2008056700.tif 000028
【図１１】
2008056700.tif 000029
【図１２】
2008056700.tif 000030
【図１３】
2008056700.tif 000031
【図１４】
2008056700.tif 000032
【図１５】
2008056700.tif 000033
【図１６】
2008056700.tif 000034
【国際調査報告】
2008056700.tif 000035
2008056700.tif 000036
2008056700.tif 000037
2008056700.tif 000038
2008056700.tif 000039
2008056700.tif 000040
2008056700.tif 000041
2008056700.tif 000042
2008056700.tif 000043