(57)【要約】  本発明は、大きなコンピュータ・プログラムを高速かつ容易に認証するための方法を開示する。まず、システムは、デジタル署名を用いて、コンピュータ・プログラムをインクリメンタルにシールする処理を行う。具体的には、コンピュータ・プログラムはページの集合に分解され、各ページについてハッシュ値が計算される。ハッシュ値の集合はハッシュ値アレイを形成するように整列され、そのハッシュ値アレイはデジタル署名を用いてシールされる。そして、コンピュータ・プログラムは、そのハッシュ値アレイとデジタル署名とともに配布される。コンピュータ・プログラムを認証するために、受取人は、まず、デジタル署名と公開鍵を用いてハッシュ値アレイが適正であるかを検証する。ハッシュ値アレイが適正であると検証された場合、受取人は、ロードするページのハッシュを計算し、シールされたハッシュ値アレイ中の対応するハッシュ値と比較することによって、コンピュータ・プログラムの各ページが適正であるかを検証することができる。ハッシュ値が適合しない場合は、実行を停止してもよい。【特許請求の範囲】
【請求項１】
コンピュータ・プログラムをシールする方法であって、
前記コンピュータ・プログラムを複数のブロックに分割する工程と、
前記ブロックのそれぞれについてハッシュ値を計算する工程と、
前記ブロックの前記ハッシュ値に基づいてハッシュアレイを生成する工程と、
前記ハッシュアレイにデジタル的に署名し、デジタル署名を生成する工程と、
前記コンピュータ・プログラムを前記ハッシュアレイ及び前記デジタル署名とともにグループ化する工程と、
を備えることを特徴とする方法。
【請求項２】
前記ハッシュ値を計算する工程においては、ＳＨＡハッシュ値が計算される
ことを特徴とする請求項１に記載の方法。
【請求項３】
前記コンピュータ・プログラム、前記ハッシュアレイ、及び、前記デジタル署名を配布する工程
を更に備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記ハッシュアレイにデジタル的に署名し、デジタル署名を生成する前記工程は、
前記ハッシュアレイについてアレイハッシュ値を計算する工程と、
前記アレイハッシュ値にデジタル的に署名する工程と、
を備えることを特徴とする請求項２に記載の方法。
【請求項５】
前記アレイハッシュ値にデジタル的に署名する前記工程では、秘密鍵及び公開鍵暗号化鍵関数を用いて前記デジタル署名が生成される
ことを特徴とする請求項４に記載の方法。
【請求項６】
前記コンピュータ・プログラムを前記ハッシュアレイ及び前記デジタル署名とともにグループ化する前記工程では、
前記コンピュータ・プログラム、前記ハッシュアレイ、前記デジタル署名が一緒に格納される
ことを特徴とする請求項１に記載の方法。
【請求項７】
前記コンピュータ・プログラムにはオペレーティング・システムが含まれる
ことを特徴とする請求項１に記載の方法。
【請求項８】
コンピュータ・プログラムを認証する方法であって、
前記コンピュータ・プログラムに付与されたハッシュ値のアレイが適正であるか否かを、該コンピュータ・プログラムに付与された該ハッシュ値のアレイのデジタル署名を用いて検証する工程と、
前記コンピュータ・プログラムのブロックをロードする工程と、
前記コンピュータ・プログラムの前記ブロックについてハッシュ値を計算する工程と、  前記コンピュータ・プログラムの前記ブロックについて計算された前記ハッシュ値と、前記コンピュータ・プログラムの前記ブロックに対応する、前記ハッシュ値のアレイに含まれるハッシュ値と、を比較する工程と、
前記コンピュータ・プログラムの前記ブロックについて計算された前記ハッシュ値と、前記対応するハッシュ値とが適合しない場合、エラーを生成する工程と、
を備えることを特徴とする方法。
【請求項９】
前記ハッシュ値のアレイが適正であるか否かを検証する前記工程では、
前記プログラムに付与されたハッシュ値のアレイについてアレイハッシュ値が計算され、
前記アレイハッシュ値と、前記ハッシュ値のアレイの前記デジタル署名とが、公開鍵を用いて比較される
ことを特徴とする請求項８に記載の方法。
【請求項１０】
前記コンピュータ・プログラムに付与されたハッシュ値のアレイが適正であるか否かを、該ハッシュ値のアレイのデジタル署名を用いて検証する前記工程では、
前記デジタル署名が、公開鍵及び公開鍵暗号化鍵関数を用いて検証される
ことを特徴とする請求項８に記載の方法。
【請求項１１】
前記ロードする工程、前記計算する工程、前記比較する工程、及び、実行に必要な前記コンピュータ・プログラムの追加的なブロックとして生成する工程を繰り返す工程
を更に備えることを特徴とする請求項８に記載の方法。
【請求項１２】
前記ハッシュ値を計算する前記工程では、ＳＨＡハッシュ値が計算される
ことを特徴とする請求項８に記載の方法。
【請求項１３】
前記コンピュータ・プログラムの前記ブロックについて計算された前記ハッシュ値と、前記対応するハッシュ値とが適合しない場合、エラーを生成する前記工程では、
ブロックの欠陥が示される
ことを特徴とする請求項８に記載の方法。
【請求項１４】
前記コンピュータ・プログラムの前記ブロックについて計算された前記ハッシュ値と、前記対応するハッシュ値とが適合しない場合、エラーを生成する前記工程では、
ブロックの読み込みエラーが示される
ことを特徴とする請求項８に記載の方法。
【請求項１５】
前記コンピュータ・プログラムの前記ブロックについて計算された前記ハッシュ値と、前記対応するハッシュ値とが適合しない場合、エラーを生成する前記工程では、
検証エラーが示される
ことを特徴とする請求項８に記載の方法。
【請求項１６】
前記コンピュータ・プログラムにはオペレーティング・システムが含まれる
ことを特徴とする請求項８に記載の方法。
【請求項１７】
前記ハッシュ値のアレイをスワップアウトする工程と、
前記ハッシュ値のアレイをスワップインした後に、該ハッシュ値のアレイについて再び適正であるか否かを検証する工程と、
を更に備えることを特徴とする請求項８に記載の方法。
【請求項１８】
コンピュータの命令の集合を含むコンピュータ可読媒体であって、
コンピュータ・プログラムに付与されたハッシュ値のアレイが適正であるか否かを、該コンピュータ・プログラムに付与された該ハッシュ値のアレイのデジタル署名を用いて検証する工程と、
前記コンピュータ・プログラムのブロックをロードする工程と、
前記コンピュータ・プログラムの前記ブロックについてハッシュ値を計算する工程と、  前記コンピュータ・プログラムの前記ブロックについて計算された前記ハッシュ値と、前記コンピュータ・プログラムの前記ブロックに対応する、前記ハッシュ値のアレイに含まれるハッシュ値と、を比較する工程と、
前記コンピュータ・プログラムの前記ブロックについて計算された前記ハッシュ値と、前記対応するハッシュ値とが適合しない場合、エラーを生成する工程と、
により、前記コンピュータ・プログラムを認証するためのコンピュータの命令を含むコンピュータ可読媒体。
【請求項１９】
前記ハッシュ値のアレイが適正であるか否かを検証する前記工程では、
前記プログラムに付与されたハッシュ値のアレイについてアレイハッシュ値が計算され、
前記アレイハッシュ値と、前記ハッシュ値のアレイの前記デジタル署名とが、公開鍵を用いて比較される
ことを特徴とする請求項１８に記載のコンピュータ可読媒体。
【請求項２０】
前記コンピュータ・プログラムに付与されたハッシュ値のアレイが適正であるか否かを、該ハッシュ値のアレイのデジタル署名を用いて検証する前記工程では、
前記デジタル署名が、公開鍵及び公開鍵暗号化鍵関数を用いて検証される
ことを特徴とする請求項１８に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータ・セキュリティの分野に関する。特に、本発明は、権限のない者がコンピュータのプログラムコードを改竄していないことを検証するためのシステムを開示する。
【背景技術】
【０００２】
コンピュータ・セキュリティは、コンピュータ・ソフトウェアの製造者が直面している最も切迫した問題の一つである。インターネットの人気の高まりに伴い、ほとんど全てのパーソナルコンピュータ・システムが、一地点或いは他の地点において、インターネットを利用可能である。この優れた接続性により、多くのメリットがパーソナルコンピュータのユーザにもたらされた。しかし、それは、新たな多くの問題をコンピュータ・ユーザにもたらした。最も大きな問題の一つは、インターネットにおいて転送される、ウィルス、ワーム、トロイの木馬、及び、他の悪意のあるプログラムの増加である。
【０００３】
"クラッカー"としても知られることがある悪意のあるコンピュータ・プログラマは、しばしば、情報を盗んだり不正な変更を行うために、コンピュータ・システムへの侵入を試みる。クラッカーは、コンピュータ・システムに侵入する試みにおいて、多くの異なった種類の攻撃を使用する。コンピュータのクラッカーが採用する一般的な方法には、トロイの木馬（見た目は良性のコンピュータ・プログラムであるが、隠れた意図を有する。）、コンピュータ・ウィルス（ホストプログラム内で自己複製するソフトウェア）、コンピュータ・ワーム（コンピュータ・ネットワークを介して自己複製するソフトウェア）、ソーシャルエンジニアリング（認証コードを有する人をだましてその認証コードを流出させること）が含まれる。
【０００４】
これらの悪意のあるコンピュータ・プログラマは、しばしば、不正な機能を実行させるためにプログラムコードを追加して、現存する正規のプログラムの改変を行う。そのような認可されたプログラムコードを正規のプログラム内に置くことによって、悪意のあるコンピュータ・プログラマは不正なプログラムコードを隠す。このため、不正なコードが、パーソナルコンピュータ・システム内に、その持ち主が長時間気づくことなく存在することがある。不正なプログラムコードは、価値のあるデータを破壊したり、コンピュータ資源（ＣＰＵサイクル、ネットワーク帯域、記憶領域等）を浪費したり、或いは、機密情報を盗んだりすることがある。
【０００５】
そのような不正な粗悪化から正規のプログラムを守るため、あるソフトウエア製造者はプログラムコードのチェックサムを生成する。ただし、チェックサムは、プログラムコードを入力値として用いて、異なるコンピュータ・プログラムはそれぞれ異なるチェックサム値を有する傾向があるように計算される値である。次に、ソフトウエア製造者は、秘密鍵である暗号化鍵を用いてそのチェックサムにデジタル的に"署名"する。コンピュータ・プログラムコードを実行する前に、ユーザはそのプログラムコードを認証すべきである。特に、ユーザはプログラムコードのチェックサムを計算するためのパーソナルコンピュータ・システムを有しており、計算されたチェックサム値は、ソフトウエア製造者の公開鍵を用いて復号した後、ソフトウエア製造者によって計算されたチェックサムと比較される。この２つのチェックサムが一致する場合は、コンピュータプログラムは真正であると推測される。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
このようなチェックサムに基づく既存の保護システムは比較的よく機能すると知られている。しかしながら、このようなチェックサムに基づく既存の保護システムは、大きなコンピュータ・プログラムを認証するために長時間を要することがある。このため、大きなコンピュータ・プログラムを認証するための、より高速なシステムを提供することが望まれている。
【課題を解決するための手段】
【０００７】
本発明は、大きなコンピュータ・プログラムを高速かつ容易に認証するための方法を開示する。まず、システムは、デジタル署名を用いて、コンピュータ・プログラムをインクリメンタルにシールする（seal）処理を行う。具体的には、コンピュータ・プログラムはブロックの集合に分解され、各ブロックについてハッシュ値が計算される。ハッシュ値の集合はハッシュ値アレイ（array）を形成するように整列され、そのハッシュ値アレイはデジタル署名を用いてシールされる。そして、コンピュータ・プログラムは、そのハッシュ値アレイとデジタル署名とともに配布される。コンピュータ・プログラムを認証するために、受取人は、まず、デジタル署名と公開鍵を用いてハッシュ値アレイが適正であるかを検証する。ハッシュ値アレイが適正であると検証された場合、受取人は、ロードするブロックのハッシュを計算し、シールされたハッシュ値アレイ中の対応するハッシュ値と比較することによって、コンピュータ・プログラムの各ブロックが適正であるかを検証することができる。ハッシュ値が適合しない場合は、実行を停止してもよい。
【０００８】
上述したものに加えて、他の目的が、添付された実施形態及び図面において説明され、示される発明の実施において達せられる。
【発明を実施するための最良の形態】
【０００９】
本発明は、同一の参照番号が同一の構造要素を指定する、添付図面と併せて以下の詳細な説明によって容易に理解することができよう。
【００１０】
（表記及び用語）
本発明に係る以下の詳細な説明においては、本発明の十分な理解を可能にするために多数の具体的な詳細が説明される。しかし、この技術分野の当業者にとっては、これらの具体的な詳細がなくても本発明を実施することが可能であることが明らかであろう。また、他の場合においては、本発明の側面が不必要に分かりにくくなることを防ぐため、よく知られた方法、手順、構成要素、回路については詳細に説明していない。
【００１１】
本発明に係る以下の詳細な説明は、ネットワークに接続されたデータ処理装置を説明する、手順、工程、論理ブロック、処理、及び、他の記号的な表記で、主に提供される。これらの処理の説明及び表記は、この技術分野の専門家又は当業者が彼らの仕事の本質をその技術分野の他の当業者へ最も効果的に伝えるために用いられる。以下に詳細に説明する、装置を用いた方法は、所望の結果へ導かれる自己矛盾のない一連の処理又は工程である。このような工程又は処理は物理量の物理的な操作を要する。必須ではないが、通常、このような量は、コンピュータ・システム又は電気的なコンピュータ装置において、格納、転送、結合、比較、表示、及び、他の操作が可能な電気信号という形態をとることがある。ビット、値、要素、記号、操作、メッセージ、用語、数、或いは同種のものとして、これらの信号を参照することは、主に共用する際において便利であることがある。このような同等の用語の全ては、適切な物理量と対応づけられるものであり、これらの量に適用される単に便利なラベルであるということを理解すべきである。以下の記述と明らかな形で異なるということを明示しない限り、"処理","計算","検証","表示"等の用語を用いた記述は、計算装置のレジスタ及びメモリ内の物理量として表されたデータを、その計算装置又は他の電子機器内の物理量として同様に表された他のデータへ、操作及び変換する計算装置の動作及び処理を指しているということが、本発明について理解される。
【００１２】
（デジタル署名を用いたコンピュータ・プログラムの安全管理）
コンピュータ・プログラムを不正な改変から守るため、ソフトウエア製造者は、コンピュータ・プログラムのために、特別な"シール"を生成することがある。シールは、そのプログラムが実行される前に検証されるべきである。シール、又は、コンピュータ・プログラムコードが改変された場合、検証は失敗し、プログラムの実行が拒絶されるであろう。
【００１３】
そのようなシールを生成する一般的な方法は、よく知られている"公開鍵"暗号技術を用いるものである。公開鍵暗号技術を用いるシステムについて、図１及び図２を参照して説明する。
【００１４】
コンピュータ・プログラムのデジタル的なシール
複数の図にわたって同一の番号が同一の部分に対応する図面を参照する。図１は、コンピュータ・プログラム１００に、デジタルシール、又は、デジタル署名を生成する処理を示す概念図である。まず、ハッシュ関数１１０を用いてコンピュータ・プログラム１００の全体についてハッシュが計算され、プログラム・ハッシュ値１２０が計算される。プログラム・ハッシュ値１２０は、コンピュータ・プログラム１００に基づき計算される、チェックサム等の小さな値である。次に、プログラム・ハッシュ値１２０は、デジタル署名関数１３０を用いて、信頼できる機関の秘密鍵１４０に基づきデジタル的に署名され、プログラム・ハッシュへのデジタル署名１５０が生成される。プログラム・ハッシュへのデジタル署名１５０は、プログラムに付与して配布されるデジタルシール（又はデジタル署名）である。
【００１５】
デジタル的にシールされたコンピュータ・プログラムの真正であることの検証
図２は、図１のプログラム・ハッシュへのデジタル署名１５０がプログラムが真正であるかを検証するためにどのように用いられるかを示すフロー図である。図２を参照すると、まず、ステップ２１０において、コンピュータ・プログラム１００を用いるコンピュータ・システムは、全てのコンピュータ・プログラム１００をロードする。次に、ステップ２２０において、コンピュータ・システムは、全てのコンピュータ・プログラム１００について（図１においてハッシュ関数１１０が行うように）プログラム・ハッシュ値を計算する。
【００１６】
次に、ステップ２３０、２４０において、コンピュータ・システムは、コンピュータプログラム１００に付与されたプログラム・ハッシュへのデジタル署名１５０と、ステップ２２０において計算されたプログラム・ハッシュ値とを、信頼できる機関のデジタル署名を生成した既知の公開鍵２３５を用いて比較する。具体的には、プログラム・ハッシュへのデジタル署名１５０が、デジタル署名関数により公開鍵２３５を用いて処理され、その結果と、ステップ２２０において計算されたプログラム・ハッシュ値とが比較されるように構成することができる。
【００１７】
ステップ２２０において計算されたハッシュ値と、公開鍵２３５を用いて処理されたプログラム・ハッシュへのデジタル署名１５０とが適合した場合、コンピュータ・システムはステップ２５０へ進み、プログラムの実行を開始する。しかし、ステップ２２０において計算されたハッシュ値と、公開鍵２３５を用いて処理されたプログラム・ハッシュへのデジタル署名１５０とが適合しなかった場合、コンピュータ・システムはステップ２６０へ進み、コンピュータ・プログラム１００の実行を拒絶する。
【００１８】
図１及び図２の認証システムは小さなプログラムでは満足に動作するが、大きなコンピュータ・プログラムには適さない。図１及び図２の認証システムに関する重要な問題の一つは、図２のフロー図におけるステップ２１０及びステップ２２０に見つけることができる。ステップ２１０及びステップ２２０では、全てのコンピュータ・プログラム１００がメモリにロードされ、その全てのコンピュータ・プログラム１００についてハッシュ値の計算が必要となる。大きなプログラムでは、この処理に非常に長時間を要する可能性がある。このため、ユーザはこの時間のかかるロード処理及び計算処理の全体の終了を待たなければならない。今日のせっかちなコンピュータ・ユーザは、そのような長いロード時間には耐えられないだろう。
【００１９】
保護の必要がある大きなコンピュータ・プログラムの顕著な例の一つは、コンピュータ・システムのオペレーティング・システムである。オペレーティング・システムは、例えば、ディスクドライブ、ネットワーク接続、ディスプレイ、バックアップシステム等の、コンピュータの全ての入出力装置を操作する権限を有する。このため、コンピュータのオペレーティング・システムを高速かつ効率的に保護することが可能な、コンピュータプログラムの認証システムを有することが非常に望まれるであろう。
【００２０】
（インクリメンタルなコード署名）
本発明は、既存のシステムにおいて長いロード時間を必要とすることなく、安全性を目的としたコンピュータ・プログラムのデジタル署名の改善された方法をもたらすものである。本発明は、コンピュータ・プログラムを、それぞれ別個に検証される小さいユニットに分解して動作する。
【００２１】
インクリメンタルなコード署名を用いたコンピュータ・プログラムのデジタル的なシール
図３及び図４は、本発明に係るシステムが、より高速かつ効率的に使用可能なプログラムのデジタルシールをどのように生成するかを示す図である。図３は、デジタルシールがどのように生成されるかを示す概念図である。図４は、デジタルシールを生成するための方法を示す詳細なフロー図である。
【００２２】
図３及び図４を参照すると、本発明では、まず、ステップ４１０において、コンピュータ・プログラム３００を複数の"ページ"（３８０〜３８９）に分解する。ほとんどのコンピュータ・システムは、仮想メモリシステムを実装するためにページメモリの機構を既に用いている。このため、本発明は、特定のプロセッサとオペレーティング・システムとの少なくともいずれかにより提供される、既存のメモリページング・システムを用いることができる。メモリページのサイズは、一般的には、４キロバイト（"k":kilobytes）又は８kである。
【００２３】
次に、ステップ４２０及びステップ４３０において、システムは、コンピュータ・プログラム３００の各メモリページについて、ハッシュ関数３１０を用いて、ハッシュ値を計算する。ハッシュ関数３１０は、例えば、よく知られているＳＨＡやＭＤ５が有している関数等の、あらゆるハッシュ関数を利用することができる。図３に示されるように、ハッシュ関数３１０は、コンピュータ・プログラム３００の各メモリページ（３８０〜３８９）について、対応するハッシュ値（３９０〜３９９）を生成する。出力されるハッシュ値のサイズは、ある実施形態においては、２０バイトである。しかし、あらゆる異なったサイズのハッシュ値を用いてもよい。
【００２４】
ステップ４４０において、本発明に係るシステムでは、計算されたハッシュ値（３９０〜３９９）をハッシュアレイ３７３として知られるハッシュ値の配列に配置する。次に、ステップ４５０において、システムは、ハッシュ関数３７０を用いてハッシュアレイ３７３の全体についてアレイ・ハッシュ値３６０を計算する。ある実施形態においては、ハッシュ関数３７０はハッシュ関数３１０と同一である。しかし、異なるハッシュ関数を用いてもよい。
【００２５】
次に、ステップ４６０において、プログラムをシールする信頼できる機関は、署名関数３３０を用いて秘密鍵３４０によりアレイ・ハッシュ値３６０にデジタル的に署名し、ハッシュアレイへのデジタル署名３５０を生成する。最後に、ステップ４７０において、ハッシュアレイ３７３とハッシュアレイへのデジタル署名３５０はコンピュータ・プログラム３００とともに格納される。ハッシュアレイ３７３とハッシュアレイへのデジタル署名３５０は、コンピュータ・プログラム３００とともに配布され、コンピュータ・プログラム３００の全ての受取人は、それが真正か否かを検証することができる。
【００２６】
デジタル的にシールされたコンピュータ・プログラムの真正であることの検証
ハッシュアレイ３７３と、ハッシュアレイへのデジタル署名３５０がコンピュータ・プログラムについて生成されると、そのコンピュータ・プログラムはユーザへ配布され、そのユーザは高速かつ効率的にそのコンピュータ・プログラムが真正であるか否かを検証することができる。図５は、インクリメンタルなコード署名を用いてデジタル的にシールされたコンピュータ・プログラムの受取人が、そのデジタル的にシールされたコンピュータ・プログラムをどのように検証し、実行するかを示すフロー図である。
【００２７】
図５を参照すると、ステップ５１０において、受取人のパーソナルコンピュータ・システムは、まず、コンピュータ・プログラムに付与されたハッシュアレイをロードする。次に、ステップ５１５において、コンピュータ・システムはハッシュアレイ全体についてハッシュ値を計算する。ハッシュ値のアレイはあまり大きくないため、この特別なハッシュの計算は非常に高速に完了するだろう。
【００２８】
次に、ステップ５２０及びステップ５２５において、コンピュータ・システムは、コンピュータ・プログラムをシールした信頼できる機関の既知の公開鍵を用いて、計算されたハッシュ値と、コンピュータ・プログラムに付与されたハッシュアレイへのデジタル署名とを比較する。
【００２９】
デジタル署名が、ハッシュアレイから計算されたハッシュ値に適合しなかった場合、コンピュータ・システムはステップ５８０へ進み、コンピュータ・プログラムの実行を拒絶する。実行が拒絶されるのは、デジタル署名とハッシュアレイとの少なくともいずれかが権限のないエンティティによって改変されているためである。
【００３０】
ステップ５２５の説明に戻る。デジタル署名が、ハッシュアレイから計算されたハッシュ値に適合した場合は、コンピュータ・システムはステップ５３０へ進み、コンピュータ・プログラムのページをロードする。次に、ステップ５４０において、コンピュータ・システムは、ロードされたコンピュータ・プログラムについてハッシュ値を計算する。この計算は、コンピュータのオペレーティング・システムのメモリページング機構の範囲内で行われるであろう。ステップ５５０、５５５において、ロードされたコンピュータ・プログラムのページについて計算されたハッシュ値と、その特定のメモリページに対応する、ハッシュアレイ内のハッシュ値とが比較される。
【００３１】
ロードされたコンピュータ・プログラムのページについて計算されたハッシュ値が、ハッシュアレイの対応するハッシュ値に一致しなかった場合、コンピュータ・システムは、ステップ５８０へ進み、実行の継続を拒絶する。この実行の継続の拒絶は、コンピュータ・システムの仮想メモリシステムにおけるページフォールト（欠陥）として実装することができよう。失敗を通知する他にとりうる方法としては、そのページを読み込めないことや検証エラーがあったことを示したり、或いは、単に実行を中止する等の方法があるだろう。
【００３２】
ステップ５５５の説明に戻る。ロードされたコンピュータ・プログラムのページについて計算されたハッシュ値が、ハッシュアレイの対応するハッシュ値に一致した場合、コンピュータ・システムは、ステップ５６０へ進み、ロードされたプログラムのページについて実行を開始する。最終的には、プログラムは、そのロードされたページ（及び過去にロードされたページ）内のコードの実行を完了し、全ての実行を完了するか、或いは、ステップ５７０で説明するように、コンピュータ・プログラムの他のページを必要とするだろう。プログラムが完全に実行された場合、コンピュータはステップ５９０へ進み、実行を終了する。
【００３３】
ステップ５７０において、コンピュータ・プログラムの他のページが必要とされた場合、コンピュータ・システムはステップ５３０へ戻り、コンピュータ・プログラムの必要とされたページをロードする。新たにロードされたページはステップ５４０、５５０、及び、５５５において適正か否かが検証される。
【００３４】
なお、ロードされた各メモリページのそれぞれについて適正であるか否かを更に検証するために、適正であることが過去に確認されたハッシュアレイは、コンピュータ・システムにより用いられる。このため、コンピュータは、認証されたハッシュアレイがプログラムの実行中に改変されないことを保証しなければならない。例えば、オペレーティング・システムが、保護されたメモリから認証されたハッシュアレイをスワップ（swap）する場合、それが適正であることを保証するために、ロードバック（スワップイン、ロールイン）するときにハッシュアレイについて再び適正であるか否かを検証すべきである。
【００３５】
本明細書及び添付図面は、ある程度精密かつ十分詳細に本発明を開示した。この技術分野の当業者には、本実施形態の開示はあくまでも例示的なものであり、特許請求の範囲に記載された本発明の精神及び範囲から離れることなく、構成要素や工程の配置や組合せを様々に変更することができるということが理解されるだろう。従って、本発明の範囲は、上記の実施形態の記述ではなく、添付の特許請求の範囲によって確定される。
【図面の簡単な説明】
【００３６】
【図１】デジタル署名によりコンピュータ・プログラムをどのようにシールすることができるかを示す概念図である。
【図２】コンピュータ・プログラムを実行する前に、デジタル署名を用いてシールされたコンピュータ・プログラムをコンピュータ・システムがどのように検証するかを示すフロー図である。
【図３】インクリメンタルなコード署名を用いて、デジタル署名によりコンピュータ・プログラムをどのようにシールすることができるかを示す概念図である。
【図４】インクリメンタルなコード署名を用いて、デジタル署名及びハッシュアレイによりコンピュータ・プログラムをどのようにシールすることができるかを示すフロー図である。
【図５】インクリメンタルなコード署名によりデジタル的にシールされたコンピュータ・プログラムを、コンピュータ・システムがどのように検証し、実行するかを示すフロー図である。
【図１】
2007506187.tif 000002
【図２】
2007506187.tif 000003
【図３】
2007506187.tif 000004
【図４】
2007506187.tif 000005
【図５】
2007506187.tif 000006
【国際調査報告】
2007506187.tif 000007
2007506187.tif 000008