(57)【要約】【課題】プログラムの実行フローを検査する方法および装置を提供する。【解決手段】プログラムを構成するインストラクションの値と前記インストラクションの実行順序とを反映する実行フローを検査するステップと、前記測定された実行フローを検証するステップとを含む。【選択図】図２
2007220106.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを構成するインストラクションの値と前記インストラクションの実行順序とを反映する実行フローを検査するステップと、
前記測定された実行フローを検証するステップとを含む、プログラムの実行フローを検査する方法。
【請求項２】
前記測定するステップは、
前記実行フローの測定を指示する測定開始インストラクションが入力されれば、前記実行フローの測定を開始するステップと、
前記実行フローの測定終了を指示する測定終了インストラクションが入力されれば、前記実行フローの測定を終了するステップとを含む、請求項１に記載のプログラムの実行フローを検査する方法。
【請求項３】
前記測定するステップは、
前記実行フローの測定作業の一時停止を指示する測定一時停止インストラクションが入力されれば、前記実行フローの測定作業を停止するステップを含む、請求項１に記載のプログラムの実行フローを検査する方法。
【請求項４】
前記測定するステップは、
前記停止された実行フロー測定作業の再開を指示する測定再開インストラクションが入力されれば、前記実行フローの測定作業を再開するステップをさらに含む、請求項３に記載のプログラムの実行フローを検査する方法。
【請求項５】
前記測定するステップは、
前記実行順序にしたがって入力されるインストラクションに対するチェックサムを計算するステップを含む、請求項１に記載のプログラムの実行フローを検査する方法。
【請求項６】
前記チェックサムを計算するステップは、
所定のチェックサムキー、それまで計算されたチェックサムの結果値、および前記入力されたインストラクションの値を入力値としてチェックサムを計算するステップを含む、請求項５に記載のプログラムの実行フローを検査する方法。
【請求項７】
前記チェックサムを計算するステップは、
それまで計算されたチェックサムの結果値がない場合、所定のチェックサムキー、所定の初期化ベクトル、および前記入力されたインストラクションの値を入力値としてチェックサムを計算するステップを含む、請求項５に記載のプログラムの実行フローを検査する方法。
【請求項８】
前記プログラムに含まれる所定の情報を復号化するステップをさらに含み、
前記測定するステップは前記復号化された情報を用いて、前記実行フローを検査するステップを含む、請求項１に記載のプログラムの実行フローを検査する方法。
【請求項９】
前記検証するステップは、
前記実行フローを測定した結果値と所定の参照測定値とが同一の場合、前記実行フローが正常に行われたことを示す情報を提供するステップと、
前記結果値と前記参照測定値とが異なる場合、前記実行フローが非正常に行われたことを示す情報を提供するステップを含む、請求項１に記載のプログラムの実行フローを検査する方法。
【請求項１０】
前記参照測定値を前記プログラムから獲得するステップをさらに含む、請求項９に記載のプログラムの実行フローを検査する方法。
【請求項１１】
前記プログラムに含まれる所定の情報を復号化するステップをさらに含み、
前記検証するステップは前記復号化された情報を用いて、前記実行フローを検証するステップを含む、請求項１に記載のプログラムの実行フローを検査する方法。
【請求項１２】
プログラムを構成するインストラクションの値と前記インストラクションの実行順序とを反映する実行フローを検査する実行フロー測定モジュールと、
前記測定された実行フローを検証する実行フロー検証モジュールとを含む、プログラムの実行フローを検査する装置。
【請求項１３】
前記実行フロー測定モジュールは、
前記実行フローの測定を指示する測定開始インストラクションが入力されれば、前記実行フローの測定を開始し、前記実行フローの測定終了を指示する測定終了インストラクションが入力されれば、前記実行フローの測定を終了する、請求項１２に記載のプログラムの実行フローを検査する装置。
【請求項１４】
前記実行フロー測定モジュールは、
前記実行フローの測定作業の一時停止を指示する測定一時停止インストラクションが入力されれば、前記実行フローの測定作業を停止する、請求項１２に記載のプログラムの実行フローを検査する装置。
【請求項１５】
前記実行フロー測定モジュールは、
前記停止された実行フロー測定作業の再開を指示する測定再開インストラクションが入力されれば、前記実行フローの測定作業を再開する、請求項１４に記載のプログラムの実行フローを検査する装置。
【請求項１６】
前記実行フロー測定モジュールは、
前記実行順序にしたがって入力されるインストラクションに対するチェックサムを計算するチェックサム計算モジュールと、
前記チェックサム計算モジュールが出力するチェックサムの結果値を格納して、前記チェックサムの結果値を前記チェックサム計算モジュールに提供する連鎖レジスタとを含む、請求項１２に記載のプログラムの実行フローを検査する装置。
【請求項１７】
前記チェックサム計算モジュールは、
所定のチェックサムキー、前記連鎖レジスタが提供する前記チェックサムの結果値、および前記入力されたインストラクションの値を入力値としてチェックサムを計算する、請求項１６に記載のプログラムの実行フローを検査する装置。
【請求項１８】
前記チェックサム計算モジュールは、
前記連鎖レジスタに格納されたチェックサムの結果値がない場合、所定のチェックサムキー、所定の初期化ベクトル、および前記入力されたインストラクションの値を入力値としてチェックサムを計算する、請求項１６に記載のプログラムの実行フローを検査する装置。
【請求項１９】
前記プログラムに含まれる所定の情報を復号化する保安処理モジュールをさらに含み、
前記実行フロー測定モジュールは前記復号化された情報を用いて、前記実行フローを検査する、請求項１２に記載のプログラムの実行フローを検査する装置。
【請求項２０】
前記実行フロー検証モジュールは、
前記実行フロー測定モジュールが実行フローを測定した結果値と所定の参照測定値とが同一の場合、前記実行フローが正常に行われたことを示す情報を提供し、前記結果値と前記参照測定値とが異なる場合、前記実行フローが非正常に行われたことを示す情報を提供する、請求項１２に記載のプログラムの実行フローを検査する装置。
【請求項２１】
前記プログラムに含まれる所定の情報を復号化する保安処理モジュールをさらに含み、
前記実行フロー検証情報は前記復号化された情報を用いて、前記実行フローを検証する、請求項１２に記載のプログラムの実行フローを検査する装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行フローに関し、より詳しくは、プログラムの実行フローを検査する方法および装置に関するものである。
【背景技術】
【０００２】
プログラムの偽変造の有無を確認するために、プログラムに対する完全性測定および検証技術が利用されている。特許文献１はプロセッサープログラム動作のシミュレーションを行うソフトウェアを備えて、命令ごとに機能ブロックの使用状況を掴むソフトウェア開発支援装置を記載する。しかし、完全性測定という方法自体が特定時点におけるプログラムイメージを扱う技術であるため、プログラムに対する静的の検証にだけ適用されてきた。すなわち、従来の完全性測定技術は時間の流れを考慮しないため、特定時点におけるプログラムイメージの変造の有無を判別することはできるが、完全性測定時点の前にプログラムイメージが変造されて再び復元されたものであるかに関する情報は得ることができないという問題点がある。
【０００３】
このような問題点を克服するための方案として、周期的に完全性測定を行う方法が提案された。しかし、完全性測定の対象プログラムイメージが大きければ大きいほど、また周期的な測定を頻繁にすればするほど完全性測定に必要とする時間と費用が多く必要となり、これによってプログラムおよびシステムの性能を低下させる結果を招くようになる。
【特許文献１】日本公開特許第２００３−３１６６０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明は、プログラムが設計された方式のとおり実行されるか否かを検査することにその目的がある。
本発明は、システムの負荷を低くしながら、実行フローの検査を効率的に行うことに他の目的がある。
本発明の目的は、以上で言及した目的に制限されず、言及していないまた他の目的は下記記載によって当業者が明確に理解できるものである。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、本発明の一態様に係るプログラムの実行フローを検査する方法は、プログラムを構成するインストラクションの値と前記インストラクションの実行順序とを反映する実行フローを検査するステップと、前記測定された実行フローを検証するステップとを含む。
【０００６】
上記目的を達成するために、本発明の他の態様に係るプログラムの実行フローを検査する装置は、プログラムを構成するインストラクションの値と前記インストラクションの実行順序とを反映する実行フローを検査する実行フロー測定モジュールと、前記測定された実行フローを検証する実行フロー検証モジュールとを含む。
【発明の効果】
【０００７】
本発明のプログラムの実行フローを検査する方法および装置によれば、次のような効果が１つあるいはそれ以上ある。
第１に、プログラムが設計された方式のとおり実行されるか否かを検査できる長所がある。
第２に、システムの負荷を低くしながら、実行フローの検査を効率的に行う長所もある。
【発明を実施するための最良の形態】
【０００８】
その他、実施形態の具体的な事項は、詳細な説明および図面に含まれている。
【０００９】
本発明の利点および特徴、そしてそれらを達成する方法は、添付する図面と共に詳細に後述する実施形態を参照すれば明確になる。しかし、本発明は以下にて開示する実施形態に限定されず、互いに異なる多様な形態によって実施され、単に本実施形態は本発明の開示が完全なものとなるようにし、本発明が属する技術分野で通常の知識を有する者に発明の範疇を完全に知らせるために提供されるものであって、本発明は請求項の範疇によってのみ定義されるものである。明細書の全体に亘り、同一参照符号は同一構成要素を示す。
【００１０】
以下、添付した図面を参照して、本発明の好ましい実施形態を詳細に説明することにする。
【００１１】
図１は、本発明の一実施形態に係るコンピュータシステムとプログラムを示す図面である。
【００１２】
コンピュータシステム１００は、所定の目的を達成するためにプログラム２００を実行させられる演算装置であって、携帯電話、ＰＤＡ、セットトップボックス、ノートブック、デスクトップなどをその例として挙げることができる。コンピュータシステム１００は実行フロー検査装置５００を含むが、実行フロー検査装置５００はプログラム２００が正常に実行されているか否かを検査する。このために、実行フロー検査装置５００は、プログラム２００の実行フローを検査する。ここで実行フローとは、プログラム２００を構成するインストラクションの実行、分岐、ジャンプ、リターンなどで決定される、前記インストラクションの実行経路の軌跡を意味する。したがって、実行フローは、プログラム２００を構成するインストラクションの値と前記インストラクションの実行順序とを反映する情報であると表現することができる。
【００１３】
実行フロー検査作業は、実行フロー測定作業と実行フロー検証作業で形成される。実行フロー測定作業はプログラム２００を駆動させることによって実行されるインストラクションを入力値とする所定のチェックサム計算によって行われることができ、実行フロー検証作業は実行フロー測定作業の結果で生成されたチェックサムの結果値を所定の参照測定値と比較することによって行われる。実行フロー検査作業に対する具体的な内容は図５〜図１２の説明によって理解できる。
【００１４】
実行フロー検査装置５００によって実行フローを検査するためには、プログラム２００が実行フロー検査装置５００の動作に必要な所定の情報を含まなければならない必要がある。すなわち、自身が作成したプログラムが実行フロー検査を受けるようになることを所望するプログラム開発者は実行フロー検査作業に必要な情報と構造を有するようにプログラムを作成できる。
【００１５】
実行フロー検査を行わなければならない部分はプログラム２００の全体または一部であることもあり得、プログラム開発者はプログラム２００において実行フロー検査が必要な部分を実行フロー検査ターゲットとして設定することができる。１つのプログラム２００内には１つ以上の実行フロー検査ターゲットが設定される。
【００１６】
本発明の理解を助けるために、図２〜図４Ｇを参照しながら本発明の一実施形態に係るプログラムの構造について説明することにする。しかし、本発明は、以下で説明されるプログラムの構造に限定されない。
【００１７】
図２は、本発明の一実施形態に係るプログラムの構造を概略的に示す図面である。
【００１８】
図示するプログラム２００は、所定のメタ情報を含むプログラムヘッダ２１０と、所定の目的を達成するためにコンピュータシステム１００上で実行されるプログラムコード２２０とを含む。
【００１９】
プログラムヘッダ２１０は、実行フロー基盤情報２３０と一般情報２４０とを含む。ここで、一般情報２４０は、プログラム２００自体に関するメタ情報であって、従来の技術でプログラムヘッダに挿入される多様な情報を含む。これに反して、実行フロー基盤情報２３０は、本発明の一実施形態に係る実行フロー検査のために必要な情報であって、実行フロー情報ヘッダ２５０と暗号化された実行フロー参照情報２６０とを含む。
【００２０】
実行フロー情報ヘッダ２５０は、暗号化された実行フロー参照情報２６０を復号化するのに必要なメタ情報を含む。例えば、実行フロー情報ヘッダ２５０は、暗号化された実行フロー参照情報２６０に適用された暗号化アルゴリズムの種類を示す情報を含むことができる。暗号化された実行フロー参照情報２６０を復号化すれば、図３に示すような実行フロー参照情報３００を得ることができる。
【００２１】
図３に示す実行フロー参照情報３００は、プログラム識別子３１０、バージョン情報３２０、チェックサム付加情報３３０、検証参照情報数３４０、および１つ以上の検証参照情報３５０−１〜３５０−ｎを含む参照情報セット３５０を含む。
【００２２】
プログラム識別子３１０は、プログラム２００に割り当てられた唯一の情報であって、プログラム識別子３１０によって互いに異なるプログラムを識別することができる。
【００２３】
バージョン情報３２０は、実行フロー参照情報３００の構造、形式、使用方法などを決定する情報であって、実行フロー参照情報３００がどのようなフォーマットで作成されたものであるかを確認するのに用いられる。実行フロー検査装置５００は、プログラム２００のバージョン情報３２０と自身が処理できるバージョン情報とを比較することによって、実行フロー検査作業の実行有無を決定することができる。例えば、実行フロー検査装置５００は、両バージョン情報が一致する場合に実行フロー検査作業を行い、両バージョン情報が不一致すれば、実行フロー検査作業を行わないことができる。
【００２４】
チェックサム付加情報３３０は、プログラム２００の駆動時に実行されるインストラクションに対するチェックサム計算に必要な情報を含む。チェックサム付加情報３３０は、実行フロー検査装置５００が用いるチェックサムアルゴリズムにしたがって、適切な情報を含むことができる。例えば、チェックサム付加情報３３０は、図３に示すように初期化ベクトル３３２およびチェックサムキー３３４を含むことができる。しかし、本発明は、これらに限定されるものではない。
【００２５】
検証参照情報数３４０は、実行フロー参照情報３００に含まれる検証参照情報３５０−１〜３５０−ｎの数を示す。
【００２６】
参照情報セット３５０は、１つ以上の検証参照情報３５０−１〜３５０−ｎを含むが、検証参照情報３５０−１〜３５０−ｎの大きさは同一であることが好ましい。各検証参照情報３５０−１〜３５０−ｎは、図３に示すように参照測定値３５２と測定終了インストラクション位置情報３５４とを含む。参照測定値３５２は、実行フロー検査装置５００の実行フロー検証作業時に実行フロー測定結果と比較対象になる情報である。測定終了インストラクション位置情報３５４は、参照測定値３５２が適用される実行フロー検査ターゲットに含まれる測定終了インストラクションの位置を示す。測定終了インストラクションについては、図４Ｂを参照しながら後述することにする。
【００２７】
測定終了インストラクション位置情報３５４は、プログラム２００で測定終了インストラクションの位置を示すための相対的なアドレス値であって、プログラムの開始アドレスから測定終了インストラクションまでの距離で計算される。測定終了インストラクション位置情報３５４は、実行フロー検査に関連したインストラクションの位置が変更されたり削除されたりするなど、プログラムコード２２０に悪意の変更が加えられた場合にこれを検出するのに用いられる。
【００２８】
各検証参照情報３５０−１〜３５０−ｎは、プログラム２００内に存在する実行フロー検査ターゲットと対応する。したがって、実行フロー検査ターゲットの数と検証参照情報３５０−１〜３５０−ｎの数は同一である。検証参照情報３５０−１〜３５０−ｎの各々がどのような実行フロー検査ターゲットと対応するかは、後述する測定開始インストラクションに含まれるターゲット識別子４１４ａによって確認可能である。例えば、ターゲット識別子４１４ａは、複数の検証参照情報３５０−１〜３５０−ｎの配列順序に関連した情報の形式であると表現される。この場合、ターゲット識別子４１４ａを確認すれば、特定実行フロー検査ターゲットに対応する検証参照情報が複数の検証参照情報３５０−１〜３５０−ｎのうちで何番目に位置しているかを知ることができる。
【００２９】
再び図２を参照すれば、プログラムコード２２０は、複数のインストラクションで構成される。複数のインストラクションは実行フロー検査基盤インストラクションとプログラム基盤インストラクションに分類される。
【００３０】
プログラム基盤インストラクションは、プログラム自体のためのものであって、プログラム基盤インストラクションの実行によって、コンピュータシステム１００は、所定の目的を達成するための作業を行えるようになる。実行フロー検査基盤インストラクションは、プログラムの実行フロー検査作業のためのものであって、実行フロー検査装置５００は実行フロー検査基盤インストラクションによってプログラム２００の実行フロー検査作業を制御することができる。
【００３１】
本発明の一実施形態に係る実行フロー検査基盤インストラクションは、測定開始インストラクション、測定終了インストラクション、測定一時停止インストラクション、測定再開インストラクション、実行フロー不能化インストラクション、実行フロー可能化インストラクション、および状態情報要請インストラクションに区分することができる。
【００３２】
プログラム２００で実行フロー検査ターゲットは、測定開始インストラクションから始まって、測定終了インストラクションまでで構成することができる。すなわち、測定開始インストラクションと測定終了インストラクションのセットが１つの実行フロー検査ターゲットを設定するのに用いられる。
【００３３】
測定開始インストラクションは、実行フロー測定作業を開始させるために用いられる。測定開始インストラクションは、図４Ａに示すように実行フロー測定作業の開始を指示する測定開始命令コード（ｏｐｃｏｄｅ）４１２と所定のパラメータ４１４とを含むことができる。パラメータ４１４の中には実行フロー検査ターゲットを識別するためのターゲット識別子４１４ａが含まれる。ターゲット識別子４１４ａは、複数の検証参照情報３５０−１〜３５０−ｎの中で対応する検証参照情報の配列順序を示す形式を有することができる。したがって、プログラム内に複数の実行フロー検査ターゲットが存在する場合、各実行フロー検査ターゲットの測定開始インストラクションに含まれるターゲット識別子４１４ａによって各実行フロー検査ターゲットに対応する検証参照情報が複数の検証参照情報３５０−１〜３５０−ｎの中で何番目に位置するのか確認できる。この他にもターゲット識別子４１４ａは実行フロー測定作業のエラー有無を確認するために用いられる。
【００３４】
測定終了インストラクションは、実行フロー測定作業を終了させるために用いられる。測定終了インストラクションは、図４Ｂに示すように実行フロー測定作業の終了を指示する測定終了命令コード４２２と所定のパラメータ４２４とを含むことができる。パラメータ４２４の中には、実行フロー検査ターゲットを識別するためのターゲット識別子４２４ａと実行フロー測定が終了した後に行われなければならない作業を指示する測定後作業情報４２４ｂが含まれる。実行フロー測定が終了した後に行われる作業の好ましい実施形態として実行フロー検証作業を挙げることができる。この他にも実行フロー測定が終了した後に行わなければならない作業の種類によって、これを指示する多様な測定後作業情報が存在することができる。
【００３５】
測定一時停止インストラクションは、実行フロー測定作業を一時的に停止させるために用いられる。測定一時停止インストラクションは、図４Ｃに示すように実行フロー測定作業の一時停止を指示する測定一時停止命令コード４３２と所定のパラメータ４３４とを含むことができる。パラメータ４３４の中には実行フロー検査ターゲットを識別するためのターゲット識別子４３４ａが含まれる。
【００３６】
測定再開インストラクションは、一時的に停止された実行フロー測定作業を再開させるために用いられる。測定再開インストラクションは、図４Ｄに示すように実行フロー測定作業の再開を指示する測定再開命令コード４４２と所定のパラメータ４４４とを含むことができる。パラメータ４４４の中には実行フロー検査ターゲットを識別するためのターゲット識別子４４４ａが含まれる。
【００３７】
実行フロー可能化インストラクションは、実行フロー検査作業を行う機能を活性化させるために用いられる。すなわち、実行フロー可能化インストラクションがフェッチされる場合、実行フロー検査装置５００は該当プログラムに対する実行フロー検査作業の実行を準備できる。実行フロー可能化インストラクションは、図４Ｅに示すように実行フロー検査機能の活性化を指示する実行フロー可能化命令コード４５２と所定のパラメータ４５４とを含むことができる。
【００３８】
実行フロー不能化インストラクションは、実行フロー検査作業を行う機能を非活性化させるために用いられる。すなわち、実行フロー不能化インストラクションがフェッチされる場合、実行フロー検査装置５００は該当プログラムに対する実行フロー検査機能を非活性化させられる。実行フロー不能化インストラクションは、図４Ｆに示すように実行フロー検査機能の非活性化を指示する実行フロー不能化命令コード４６２と所定のパラメータ４６４とを含むことができる。
【００３９】
状態情報要請インストラクションは、実行フロー検査と関連した状態情報を獲得するために用いられる。例えば、実行フロー検証結果や実行フロー測定エラー状態を参照する必要がある場合、状態情報要請インストラクションが用いられる。状態情報要請インストラクションは、状態情報の要請を指示する状態情報要請命令コード４７２と所定のパラメータ４７４とを含む。ここで、パラメータ４７４は状態情報を提供しなければならないソースレジスタに関する情報４７４ａと提供されていた状態情報を格納する目的地レジスタに関する情報４７４ｂとを含むことができる。
【００４０】
以上図１〜図４Ｇを参照して、実行フロー検査装置５００によって実行フロー検査を受けられるプログラム２００の構造について説明した。前述したプログラムの構造は、本発明の一実施形態であって、本発明の具現のために用いられるプログラムの構造は、これに限定されない。したがって、実行フロー検査対象になるプログラムの構造は、実行フローの測定および検証に必要な情報を含む多様な形態で具現され得る。ここで実行フロー測定および検証に必要な情報の種類は、前述したプログラムに対する説明および以下で説明する実行フロー検査装置５００に対する説明によって理解できる。
【００４１】
以下、本発明の一実施形態に係る実行フロー検査装置およびその動作過程について説明するようにする。
【００４２】
図５は、本発明の一実施形態に係る実行フロー検査装置を示すブロック図である。図示する実行フロー検査装置５００は、フェッチモージュール５１０、デコーディングモジュール５２０、検査モジュール５３０、実行フロー参照情報格納モジュール５４０、レジスタモジュール５５０、演算モジュール５６０、保安処理モジュール５７０、および制御モジュール５８０を含む。図示する実行フロー検査装置５００は、コンピュータシステム１００の主処理装置（例えばＣＰＵ）として機能することができる。図５では、保安処理モジュール５７０が実行フロー検査装置５００に含まれると示したが、実施形態にしたがって、保安処理モジュール５７０は実行フロー検査装置５００と別途のオブジェクトに分離して存在することもできる。
【００４３】
保安処理モジュール５７０は、プログラム２００がコンピュータシステム１００のメインメモリ（例えば、ＲＡＭ）上にロードされれば、メインメモリからプログラム２００の実行フロー基盤情報２３０を読み取り、暗号化された実行フロー参照情報２６０を復号化する。プログラム２００に含まれる暗号化された実行フロー参照情報２６０は、一般メモリ上ではその内容を知ることができないが、保安処理モジュール５７０ではその内容が分かるように復号化される。
【００４４】
復号化作業によって獲得された実行フロー参照情報３００は、プログラム２００の実行フローを検査するにあたって重要な情報であるため、実行フロー検査装置５００以外の他の装置やモジュールに露出しないようにすることが好ましい。このために、保安処理モジュール５７０は外部モジュールや任意の装置からのアクセスを物理的または論理的に遮断することができる。
【００４５】
また、実行フロー参照情報３００の保安を維持するために、暗号化された実行フロー参照情報２６０が保安処理モジュール５７０以外の他の装置やモジュール上で復号化されないようにすることができる。例えば、保安処理モジュール５７０は、公開キーアルゴリズム（例えば、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ方式、ＲＳＡ方式、ＥｌＧａｍａｌ方式、および楕円曲線（Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ）方式など）で用いられる個人キーを含んでいて、プログラム開発者は保安処理モジュール５７０が保有する個人キーに対応する公開キーを用いて、実行フロー参照情報３００を暗号化しておくことができる。この場合、実行フロー参照情報３００を暗号化するのに用いられた公開キーに対応する個人キーを保有しない装置やモジュールは、暗号化された実行フロー参照情報２６０を復号化することができず、保安処理モジュール５７０は暗号化された実行フロー参照情報２６０を復号化することができる。
【００４６】
実行フロー参照情報格納モジュール５４０は、保安処理モジュール５７０によって復号化された実行フロー参照情報３００を格納する。実行フロー参照情報３００は、実行フロー可能化インストラクションが入力される場合に保安処理モジュール５７０から得ることができる。実行フロー不能化インストラクションが入力されれば、実行フロー参照情報格納モジュール５４０は格納中であった実行フロー参照情報３００を削除することができる。実行フロー参照情報３００に対する説明は、図３を参照して説明した通りである。
【００４７】
フェッチモージュール５１０は、コンピュータシステム１００のメインメモリ上にロードされたプログラム２００のインストラクションを順次フェッチする。ここで、インストラクションのフェッチ順序は、プログラム開発者が各インストラクションに挿入した実行、分岐、ジャンプ、リターンなどのコードによって決定される。
【００４８】
デコーディングモジュール５２０は、フェッチモージュール５１０がフェッチしたインストラクションをデコーディングする。
【００４９】
検査モジュール５３０は、デコーディングモジュール５２０によってデコーディングされたインストラクションの実行フローを検査する。このために、検査モジュール５３０は、図６に示すように実行フローを測定する実行フロー測定モジュール６１０と実行フローを検証する実行フロー検証モジュール６２０とを含む。
【００５０】
実行フロー測定モジュール６１０が行う実行フロー測定作業は、デコーディングモジュール５２０によってデコーディングされたインストラクションを入力値とするチェックサム計算によって行われ得る。実行フローの測定対象になるインストラクションは、プログラムが駆動される間、そして実行フロー測定動作が行われる間にデコーディングモジュール５２０から持続的に供給される。実行フロー測定作業は、デコーディングモジュール５２０が測定開始インストラクションをデコーディングしながら始まり、デコーディングモジュール５２０が測定終了インストラクションをデコーディングする場合に終了する。また、実行フロー測定作業は、デコーディングモジュール５２０が測定一時停止インストラクションをデコーディングする場合に一時的に停止される。この時、デコーディングモジュール５２０が測定再開インストラクションをデコーディングすれば、実行フロー測定作業が再開される。
【００５１】
図７に実行フロー測定モジュール６１０に対する一実施形態を示す。図示する実行フロー測定モジュール６１０は、チェックサム計算モジュール７１０と連鎖レジスタ７２０とを含む。
【００５２】
チェックサム計算モジュール７１０は、デコーディングモジュール５２０から提供されていた現在のインストラクション値、チェックサムキー、およびそれまで計算されたチェックサムの結果値を入力値としてチェックサム計算を行う。チェックサム計算のためにチェックサム計算モジュール７１０は、ＭＤ５（Ｍｅｓｓａｇｅ  Ｄｉｇｅｓｔ  ５）やＳＨＡ−１（Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ−１）のような所定のハッシュ関数を使用することができる。または、チェックサム計算モジュール７１０は、ＮＡＮＤ、ＡＮＤなどの論理演算を用いることもできる。参考に、図４Ａ〜図４Ｇを参照して説明した実行フロー検査基盤インストラクションは、チェックサム計算対象から除外されることが好ましい。すなわち、チェックサム計算対象はプログラム基盤インストラクションである。
【００５３】
チェックサム計算のために用いられる入力値のうちで、チェックサムキーはチェックサム計算の保安性を高めるために用いられる入力値であって、任意の値を有することができる。チェックサムキーは、プログラム開発者によってプログラム２００に挿入されていることができる。図３の実施形態では、チェックサムキーが実行フロー参照情報３００に含まれると説明し、チェックサム計算モジュール７１０は、チェックサムキーを実行フロー参照情報格納モジュール５４０から得ることができる。これによって、正当なチェックサムキーを知ることができない場合、正しいチェックサムの結果値を得ることができなくなる。
【００５４】
連鎖レジスタ７２０は、チェックサムの結果値を格納してこれを再びチェックサム計算モジュール７１０に提供する。
【００５５】
このような構造からなる実行フロー測定モジュール６１０のチェックサム計算過程を図８に示す。チェックサム計算作業が最初に行われる場合（時間ｔ１）には、それまで計算されたチェックサムの結果値がないため、これと同一のビット数を有する初期化ベクトル８１０が用いられる。したがって、最初のチェックサム計算時のチェックサム計算モジュール７１０は、インストラクション値、初期化ベクトル、およびチェックサムキーを入力値として用いるようになる。初期化ベクトルもチェックサムキーと同様にプログラム製作者によってプログラムに挿入されていることができる。図３の実施形態では、実行フロー参照情報３００に初期化ベクトル３３２が含まれると説明した。チェックサム計算モジュール７１０は、実行フロー参照情報格納モジュール５４０から初期化ベクトルを得ることができる。
【００５６】
最初のチェックサム計算が行われた後には、時間の流れに従って測定対象になるインストラクション値、それまで計算されたチェックサムの結果値、およびチェックサムキーを入力値としてチェックサム計算作業が行われる。それまで計算されたチェックサムの結果値は、連鎖レジスタ７２０に格納されてチェックサム計算モジュール７１０に提供されることができる。
【００５７】
参考に、実際プログラムの駆動時のインストラクションは、メインメモリに格納されている順に実行されるが、分岐、ジャンプ、復帰などによって、格納順序に関わらず実行されたりもする。したがって、図８に示すインストラクションストリームは、メインメモリに格納されている順序でなく、フェッチモージュール５１０によってフェッチされた順序で並べたインストラクションを意味する。
【００５８】
このような方式によって最終的に出力されるチェックサムの結果値は、インストラクション自体の値だけでなく、インストラクションの実行順序まで反映した情報となる。
【００５９】
再び図６を参照すれば、実行フロー検証モジュール６２０は実行フロー測定モジュール６１０から出力されるチェックサムの結果値を所定の参照測定値と比較して、プログラムの実行フローが正常であるか否かを検証する。２つの値が同一であれば、インストラクションの実行フローは正常であり、プログラムが設計された通り動作したと判断することができる。しかし、２つの値が異なれば、インストラクションの実行フローは非正常であり、プログラムが設計された通り動作しないと判断できる。参照測定値は、プログラムに挿入され得るが、例えば、プログラム製作者は、プログラム製作時実行フロー検査装置５００が行う実行フロー測定作業と同一の作業によって得られたチェックサムの結果値を参照測定値としてプログラム上に挿入させることができる。図３の実施形態では実行フロー参照情報３００に参照測定値３５２が含まれると説明し、実行フロー検証モジュール６２０は実行フロー参照情報格納モジュール５４０から参照測定値を得ることができる。
【００６０】
再び図５を参照すれば、レジスタモジュール５５０は複数のレジスタを含む。レジスタモジュール５５０に含まれるレジスタは、図９に示すように実行フロー検査基盤レジスタ９１０と一般レジスタ９２０に区分することができる。
【００６１】
実行フロー検査基盤レジスタ９１０は、動作状態レジスタ９１１、実行フロー検査ターゲットレジスタ９１２、測定終了インストラクション位置レジスタ９１３、検査エラーレジスタ９１４、および検証結果レジスタ９１５を含む。
【００６２】
動作状態レジスタ９１１は、実行フロー検査作業に対する動作状態を格納する。本発明の一実施形態に係る動作状態は、非活性化状態、測定オフ状態、測定オン状態、および測定一時停止状態に区分することができる。
【００６３】
非活性化状態は、プログラムの実行フロー検査作業のための機能が非活性になっていることを示す。そして、測定オン状態と測定オフ状態とは、各々実行フロー測定作業が実行中である場合と終了した場合とを示す。また、測定一時停止状態は、実行フロー測定作業が一時的に停止された状態を示す。
【００６４】
動作状態レジスタ９１１は、これらのうちのいずれか１つを格納し、動作状態レジスタ９１１が格納する動作状態にしたがって、実行フロー検査装置５００の動作状態が決定される。実行フロー検査装置５００の動作状態の遷移については図１０を参照しながら後述する。
【００６５】
実行フロー検査ターゲットレジスタ９１２は、プログラム２００上に存在する実行フロー検査ターゲットのうちで現在実行フロー検査が進行中の実行フロー検査ターゲットを識別するためのターゲット識別子を格納する。ターゲット識別子は、測定開始インストラクションが入力される場合、測定開始インストラクションのパラメータで獲得することができる。検査モジュール５３０は、実行フロー検査ターゲットレジスタ９１２に格納されたターゲット識別子によって現在実行フロー検査作業が進行中の実行フロー検査ターゲットを識別することができる。
【００６６】
測定終了インストラクション位置レジスタ９１３は、実行フロー測定が行われている実行フロー検査ターゲットに含まれる測定終了インストラクションの位置情報を格納する。測定終了インストラクションの位置情報は、実行フロー参照情報格納モジュール５４０に格納された実行フロー参照情報から得ることができる。例えば、測定開始インストラクションが入力される場合、測定開始インストラクションに含まれるターゲット識別子によって対応する検証参照情報が検索され、検索された検証参照情報に含まれる測定終了インストラクション位置情報が測定終了インストラクション位置レジスタ９１３に格納される。
【００６７】
プログラム２００を行うためにインストラクションをフェッチするごとに制御モジュール５８０は、フェッチしたインストラクションの相対的なアドレス情報をチェックし、これを測定終了インストラクション位置レジスタ９１３に格納されている測定終了インストラクション位置情報と比較する。ここで、相対的なアドレス情報は、プログラムコード２２０領域が始まる部分からインストラクションの位置までの相対的な距離値を意味する。
【００６８】
測定終了インストラクション位置レジスタ９１３に格納されている測定終了インストラクション位置情報とマッチングされる相対的なアドレスのインストラクションが測定終了インストラクションであれば、制御モジュール５８０は現在まで進行された実行フロー測定作業を終了させて実行フロー検証作業を進行させる。しかし、測定終了インストラクション位置レジスタ９１３に格納されている測定終了インストラクション位置情報とマッチングされる相対的なアドレスのインストラクションが測定終了インストラクションでなければ、制御モジュール５８０は実行フロー測定作業に問題が発生したものと判断できる。これによって、制御モジュール５８０は、プログラム２００上で測定終了インストラクションの位置が変更され、実行フロー検査作業が誤動作する状況を予防できるようになる。
【００６９】
検査エラーレジスタ９１４は、実行フロー測定作業に問題が発生した場合、これを示すための情報を格納する。
【００７０】
検証結果レジスタ９１５は、実行フロー検証結果を格納する。検証結果は特別な情報がないことを意味するアンセット（ｕｎｓｅｔ）、実行フローが正常であると判断されたことを示す適合（ｖａｌｉｄ）、および実行フローが非正常であると判断されたことを示す非適合（ｉｎｖａｌｉｄ）のうちのいずれか１つであることができる。
【００７１】
再び図５を参照すれば、演算モジュール５６０は、デコーディングモジュール５２０がデコーディングしたインストラクションを実行させる。演算モジュール５６０の一実施形態として、ＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）を挙げることができる。
【００７２】
制御モジュール５８０は、実行フロー検査装置５００を構成する各モジュール５１０〜５７０の動作過程を制御する。特に、制御モジュール５８０は実行フロー検査作業を管理するが、このために、制御モジュール５８０は前述した実行フロー検証基盤レジスタ９１１〜９１５に格納される情報を用いることができる。
【００７３】
図１０は、本発明の一実施形態に係るプログラム検査装置５００の動作状態間の遷移を示す図面である。実行フロー検査装置５００は、図示するような４つの動作状態１０１０〜１０４０のうちのいずれか１つの動作状態で設定することができ、実行フロー検査装置５００の現在動作状態と新しくフェッチされた実行フロー検査基盤インストラクションの種類によって動作状態が変更される。
【００７４】
実行フロー検査装置５００の最初動作状態は非活性化状態１０１０で、動作状態レジスタ９１１は非活性化状態１０１０に設定されている。すなわち、実行フロー検査装置５００の実行フロー検査機能は非活性化状態である。動作状態レジスタ９１１が非活性化状態１０１０に設定された状況で実行フロー可能化インストラクションが入力されれば、動作状態レジスタ９１１は測定オフ状態１０２０に設定される（１）。この時、実行フロー検査装置５００の実行フロー検査機能が活性化して、保安処理モジュール５７０で復号化された実行フロー参照情報３００が実行フロー参照情報格納モジュール５４０に格納される。また、実行フロー検査ターゲットレジスタ９１２、検証結果レジスタ９１５、および検査エラーレジスタ９１４は特別な情報がないという意味のアンセットに設定される。動作状態レジスタ９１１が非活性化状態１０１０以外の動作状態に設定されている状況で実行フロー可能化インストラクションが入力される場合、制御モジュール５８０はこれを無視することができる。
【００７５】
動作状態レジスタ９１１が測定オフ状態１０２０に設定された状況で実行フロー不能化インストラクションが入力されれば、動作状態レジスタ９１１は非活性化状態１０１０に設定される（２）。この時、実行フロー検査装置５００の実行フロー検査機能が非活性化され、実行フロー参照情報格納モジュール５４０に格納された実行フロー参照情報は削除される。また、検査ターゲットレジスタ９１２、検査エラーレジスタ９１４、および検証結果レジスタ９１５は特別な情報がないという意味のアンセットに設定される。動作状態レジスタ９１１が測定オフ状態１０２０以外の動作状態に設定されている状況で実行フロー不能化インストラクションが入力される場合、制御モジュール５８０はこれを無視できる。
【００７６】
一方、動作状態レジスタ９１１が測定オフ状態１０２０に設定された状況で測定開始インストラクションが入力されれば動作状態レジスタ９１１は測定オン状態１０３０に設定される（３）。この時、実行フロー検査ターゲットレジスタ９１２は、測定開始インストラクションに含まれるターゲット識別子を格納し、測定終了インストラクション位置レジスタ９１３は実行フロー検査ターゲットに含まれる測定終了インストラクションの位置情報を格納する。測定終了インストラクションの位置情報は、実行フロー参照情報格納モジュール５４０に格納された実行フロー参照情報３００によって知ることができる。また、検査エラーレジスタ９１４と検証結果レジスタ９１５とはアンセットに設定される。
【００７７】
測定オン状態１０３０で実行フロー検査装置５００は、測定開始インストラクション以後から入力される一般インストラクションに対する実行フロー測定作業を行うようになる。動作状態レジスタ９１１が測定オフ状態１０２０以外の動作状態に設定された状況で測定開始インストラクションが入力される場合、制御モジュール５８０はこれを無視できる。
【００７８】
動作状態レジスタ９１１が測定オン状態１０３０に設定された状況で測定一時停止インストラクションが入力されれば、動作状態レジスタ９１１は測定一時停止状態１０４０に設定される（４）。この時、実行フロー検査装置５００は、実行フロー測定作業を一時的に停止する。動作状態レジスタ９１１が測定オン状態１０３０以外の動作状態に設定された状況で測定一時停止インストラクションが入力されれば、制御モジュール５８０はこれを無視できる。
【００７９】
動作状態レジスタ９１１が測定一時停止状態１０４０に設定された状況で測定再開インストラクションが入力されれば、動作状態レジスタ９１１は測定オン状態１０３０に設定される（５）。この時、実行フロー検査装置５００は測定再開インストラクション以後に入力されるインストラクションに対して実行フロー測定作業を再開する。動作状態レジスタ９１１が測定一時停止状態１０４０以外の動作状態に設定された状況で測定再開インストラクションが入力されれば、制御モジュール５８０はこれを無視できる。
【００８０】
動作状態レジスタ９１１が測定オン状態１０３０または測定一時停止状態１０４０に設定された状況で、測定終了インストラクションが入力されれば動作状態レジスタ９１１は、測定オフ状態１０２０に設定される（６、７）。この時、実行フロー検査装置５００は、実行フロー検査作業を終了する。その後、実行フロー検査装置５００は、測定終了インストラクションに含まれる測定後の作業を行うようになる。本発明の一実施形態にしたがって、測定後作業が実行フロー検証作業の場合、検査モジュール５３０は、今まで計算された実行フロー測定結果値を参照測定値と比較する。２つの値が一致すれば、プログラムが設計された通り行われたことを意味し、２つの値が一致しなければ、プログラムが設計された通り行われなかったことを意味する。したがって、２つの値が一致すれば、検証結果レジスタ９１５は適合（ｖａｌｉｄ）に設定され、２つの値が一致しなければ、検証結果レジスタ９１５は非適合（ｉｎｖａｌｉｄ）に設定される。実行フロー検証作業が行われた後には、実行フロー検査ターゲットレジスタ９１２はアンセットに設定される。動作状態レジスタ９１１が測定オン状態１０３０または測定一時停止状態１０４０以外の動作状態に設定された状況で測定終了インストラクションが入力される場合、制御モジュール５８０はこれを無視できる。
【００８１】
一方、動作状態レジスタ９１１が測定オン状態１０３０に設定された状況で測定終了インストラクションや測定一時停止インストラクションが入力されれば、制御モジュール５８０は測定終了インストラクションまたは測定一時停止インストラクションに含まれるターゲット識別子と実行フロー検査ターゲットレジスタ９１２に格納されたターゲット識別子を比較する。両方が一致すれば、今まで行われた実行フロー測定動作に問題がなかったことになるが、両方が不一致すれば、実行フロー測定動作に問題が発生したと判断できる。このような場合、検査エラーレジスタ９１４は、実行フロー測定にエラーが発生したという情報を格納して、検証結果、レジスタ９１５と実行フロー検査ターゲットレジスタ９１２はアンセットに設定される。また、動作状態レジスタ９１１は、測定オフ状態１０２０に設定されて（８）実行フロー測定作業は中断される。
【００８２】
このような作業は、動作状態レジスタ９１１が測定一時停止状態１０４０に設定された状態で測定終了インストラクションや測定再開インストラクションが入力される場合にも同一に行われる（９）。図１０に、点線で示した動作状態遷移がこのようにエラーが発生した場合を示す。
【００８３】
図１１は、本発明の一実施形態に係る実行フロー検査機能を活性化する過程を示すフローチャートである。
【００８４】
先ずプログラム２００がコンピュータシステムのメインメモリにロードされれば、保安処理モジュール５７０はプログラム２００で暗号化された実行フロー参照情報２６０を読み取り、これを復号化する（Ｓ１１１０）。メインメモリにロードされたプログラムが本発明の適用を考慮せずに製作された一般プログラムであれば、保安処理モジュール５７０は暗号化された実行フロー参照情報２６０を得ることができず、プログラムは実行フロー検査作業なしで実行される。
【００８５】
一方、フェッチモージュール５１０はメインメモリにロードされたプログラム２００のインストラクションをフェッチし（Ｓ１１２０）、デコーディングモジュール５２０はフェッチしたインストラクションをデコーディングする（Ｓ１１３０）。
【００８６】
この時、制御モジュール５８０は、プログラム２００の実行フローに対する検査作業を行うべきか否かを判断する（Ｓ１１４０）。例えば、実行フロー可能化インストラクションが入力される場合、制御モジュール５８０は実行フロー検査作業を行わなければならないと判断できる。
【００８７】
実行フロー検査作業を行わなければならない場合、制御モジュール５８０は実行フロー検査機能を活性化させる（Ｓ１１５０）。この時、実行フロー参照情報格納モジュール５４０は、保安処理モジュール５７０が復号化した実行フロー参照情報３００を格納できる。
【００８８】
図１２は、本発明の一実施形態に係る実行フロー測定過程を示すフローチャートである。
【００８９】
デコーディングモジュール５２０を介してインストラクションがデコーディングされるごとに制御モジュール５８０は実行フロー測定作業を行うべきか否かを判断する（Ｓ１２１０）。例えば、測定開始インストラクションが入力される場合、制御モジュール５８０は実行フロー測定を始めなければならないと判断できる。
【００９０】
実行フロー測定作業を行わなければならない場合、検査モジュール５３０は入力されるインストラクションに対する実行フローを測定する（Ｓ１２２０）。より具体的に検査モジュール５３０は、インストラクションを入力値としてチェックサム計算を実行し、これに対する説明は図８を参照する通りである。
【００９１】
図１３は、本発明の一実施形態に係る実行フロー検証過程を示す図面である。
【００９２】
実行フロー測定作業が行われる間、デコーディングモジュール５２０を介してインストラクションがデコーディングされるごとに制御モジュール５８０は実行フロー検証作業を行うべきか否かを判断する（Ｓ１３１０）。例えば、測定終了インストラクションが入力される場合、制御モジュール５８０は実行フロー検証作業を始めなければならないと判断できる。
【００９３】
実行フローを検証しなければならない場合、検査モジュール５３０は入力されるインストラクションに対する実行フロー測定作業を終了する（Ｓ１３２０）。その後、検査モジュール５３０は今まで計算された実行フロー測定結果値と所定の参照計算値が一致するか否かによって実行フロー検証作業を行い（Ｓ１３３０）、実行フロー検証結果を提供することができる（Ｓ１３４０）。
【００９４】
ステップＳ１３３０で２つの値が一致すれば、プログラムが設計された通りに行われたと判断できるため、検証結果、レジスタ９１５は実行フローが正常という情報を格納できる。
【００９５】
しかし、ステップＳ１３３０において２つの値が不一致であれば、プログラムが設計された通りに行われないと判断できるため、検証結果、レジスタ９１５は実行フローが非正常という情報を格納できる。この時、制御モジュール５８０はプログラム２００の実行を強制的に終了させることもできる。
【００９６】
一方、デコーディングモジュール５２０を介してインストラクションがデコーディングされるごとに制御モジュール５８０は実行フロー測定作業を一時停止するべきか否かを判断できる。例えば、測定一時停止インストラクションが入力される場合、制御モジュール５８０は実行フロー測定作業を一時停止しなければならないと判断できる。
【００９７】
実行フロー測定作業を一時停止しなければならない場合、検査モジュール５３０は入力されるインストラクションに対する実行フロー測定を一時的に中断する。
【００９８】
実行フロー測定作業が一時的に停止された状態で、デコーディングモジュール５２０によってインストラクションがデコーディングされるごとに制御モジュール５８０は実行フロー測定作業を再開するべきか否かを判断できる。例えば、測定再開インストラクションが入力される場合、制御モジュール５８０は一時的に停止された実行フロー測定作業を再開させなければならないと判断できる。
【００９９】
実行フロー測定作業を再開しなければならない場合、検査モジュール５３０は入力されるインストラクションに対して実行フロー測定作業を再開する。
【０１００】
また、状態情報要請インストラクションが入力される場合、制御モジュール５８０は、検証結果レジスタ９１５や検査エラーレジスタ９１４に格納された情報を特定場所に提供することができる。状態情報が提供される場所は状態情報要請インストラクションによって知ることができる。
【０１０１】
実行フロー検査結果は、状態情報を特定場所に提供することによって、ユーザに伝えられることもできる。
【０１０２】
図１４は、本発明の一実施形態に係る実行フロー検査過程を説明するための図面である。
【０１０３】
図示するインストラクションストリームは、プログラム２００を構成するインストラクションを示す。インストラクションの実行方向は矢印で示すように左側から右側に進行される。
【０１０４】
実行フロー可能化インストラクション１４１０が入力されれば、実行フロー検査装置５００は実行フロー検査作業を準備するようになる。この時、保安処理モジュール５７０で復号化された実行フロー参照情報３００が実行フロー参照情報格納モジュール５４０に格納され、実行フロー検査基盤レジスタ９１０が予め定義された値に設定される。
【０１０５】
その後、測定開始インストラクション１４２０が入力されれば、測定開始インストラクション１１２０以後から入力されるインストラクションを入力値とするチェックサム計算作業が行われる。チェックサム計算作業は、測定終了インストラクション１４３０が入力されるまで行われる。図１４で明暗処理された部分がチェックサム計算作業に用いられたインストラクションを示し、これが１つの実行フロー検査ターゲットになる。測定終了インストラクション１４３０が入力されれば、実行フロー測定作業が終了して実行フロー検証作業が行われる。
【０１０６】
その後、実行フロー不能化インストラクション１４４０が入力されれば、実行フロー検査装置５００は実行フロー検査機能を非活性化させる。この時、実行フロー参照情報格納部５４０に格納された情報は削除されることもできる。
【０１０７】
図１５は、本発明の他の実施形態に係る実行フロー検査過程を説明するための図面である。
【０１０８】
測定開始インストラクション１５１０が入力され、実行フロー測定作業を行っている間、測定一時停止インストラクション１５２０が入力されれば、実行フロー測定装置５００は実行フロー測定作業を一時的に停止する。この時、連鎖レジスタ７２０に格納されたチェックサムの結果値は、測定再開インストラクション１５３０が入力されるまで格納される。
【０１０９】
図示する例ではジャンプとリターンによって、インストラクションの配列順序と異なるようにインストラクションが処理されていることを示している。
【０１１０】
測定再開インストラクション１５３０が入力されれば、実行フロー検査装置５００は実行フロー測定作業を再開する。実行フロー測定作業は測定終了インストラクション１５４０が入力されるまで続き、図示する実施形態で明暗処理されたインストラクションが実行フロー測定に用いられたインストラクションである。
【０１１１】
測定終了インストラクション１５４０が入力されれば、実行フロー測定作業が終了して実行フロー検証作業が行われる。その後、状態情報要請インストラクション１５５０が入力されれば、状態情報検査作業に関連した情報のうち状態情報要請インストラクション１５５０が指示する情報を特定レジスタに格納させられる。
【０１１２】
以上、添付した図面を参照して本発明の実施形態を説明したが、本発明が属する技術分野で通常の知識を有する者であれば、本発明がその技術的思想や必須の特徴を変更せず、他の具体的な形態によって実施することができるということを理解できる。したがって、以上で記述した実施形態はすべての面で例示的なものであり、限定的なものではないことを理解しなければならない。
【図面の簡単な説明】
【０１１３】
【図１】本発明の一実施形態に係るコンピュータシステムとプログラムを示す図である。
【図２】本発明の一実施形態に係るプログラムの構造を概略的に示す図である。
【図３】本発明の一実施形態に係る実行フロー参照情報を示す図である。
【図４Ａ】本発明の一実施形態に係るインストラクションを示す図である。
【図４Ｂ】本発明の一実施形態に係るインストラクションを示す図である。
【図４Ｃ】本発明の一実施形態に係るインストラクションを示す図である。
【図４Ｄ】本発明の一実施形態に係るインストラクションを示す図である。
【図４Ｅ】本発明の一実施形態に係るインストラクションを示す図である。
【図４Ｆ】本発明の一実施形態に係るインストラクションを示す図である。
【図４Ｇ】本発明の一実施形態に係るインストラクションを示す図である。
【図５】本発明の一実施形態に係る実行フロー検査装置を示すブロック図である。
【図６】本発明の一実施形態に係る検査モジュールを示すブロック図である。
【図７】本発明の一実施形態に係るプログラム測定モジュールを示すブロック図である。
【図８】本発明の一実施形態に係るチェックサム計算過程を示す図である。
【図９】本発明の一実施形態に係るレジスタモジュールを示す図である。
【図１０】本発明の一実施形態に係る動作状態間の遷移を示す図である。
【図１１】本発明の一実施形態に係る実行フロー検査過程を示すフローチャートである。
【図１２】本発明の一実施形態に係る実行フロー検査過程を示すフローチャートである。
【図１３】本発明の一実施形態に係る実行フロー検査過程を示すフローチャートである。
【図１４】本発明の一実施形態に係る実行フロー検査過程を説明するための図である。
【図１５】本発明の他の実施形態に係る実行フロー検査過程を説明するための図である。
【符号の説明】
【０１１４】
２００      プログラム
２１０      プログラムヘッダ
２２０      プログラムコード
２３０      実行フロー基盤情報
２４０      一般情報
２５０      実行フロー情報ヘッダ
２６０      暗号化された実行フロー参照情報
【図１】
2007220106.tif 000003
【図２】
2007220106.tif 000004
【図３】
2007220106.tif 000005
【図４Ａ】
2007220106.tif 000006
【図４Ｂ】
2007220106.tif 000007
【図４Ｃ】
2007220106.tif 000008
【図４Ｄ】
2007220106.tif 000009
【図４Ｅ】
2007220106.tif 000010
【図４Ｆ】
2007220106.tif 000011
【図４Ｇ】
2007220106.tif 000012
【図５】
2007220106.tif 000013
【図６】
2007220106.tif 000014
【図７】
2007220106.tif 000015
【図８】
2007220106.tif 000016
【図９】
2007220106.tif 000017
【図１０】
2007220106.tif 000018
【図１１】
2007220106.tif 000019
【図１２】
2007220106.tif 000020
【図１３】
2007220106.tif 000021
【図１４】
2007220106.tif 000022
【図１５】
2007220106.tif 000023