(57)【要約】【課題】実行可能ファイルのインテグリティーを検証するためのシステムおよび方法を提供する。【解決手段】一態様では、複数の部分イメージハッシュが生成され、その組み合わせが実行可能ファイル全体のダイジェストを表す。コンピューティングデバイス上での実行可能ファイルのロードに続いて、実行のために実行可能ファイルの一部をメモリにページングする要求がインターセプトされる。要求のインターセプトに応答して、またその部分の実行のためのメモリへのページングに先立って、その部分の検証ハッシュが計算される。その検証ハッシュが、複数の部分イメージハッシュの部分ハッシュと比較され、その部分のコードインテグリティーが決定される。部分ハッシュは、その部分と同じコードセグメントを表す。【選択図】図１
2006202270.tif 000002
【特許請求の範囲】
【請求項１】
実行可能ファイルを表し、前記実行可能ファイルの全バイト数よりも小さい複数の部分イメージハッシュを生成するステップと、
前記実行可能ファイルのコンピューティングデバイス上へのロードの後に起こる、前記実行可能ファイルの一部を実行のためにメモリ内にページングするための要求をインターセプトするステップと、
前記部分を実行のためにメモリ内にページングする前に、前記要求のインターセプトに応答して、
前記部分の検証ハッシュを計算するステップと、
前記部分のコードインテグリティーを決定するために、前記検証ハッシュと前記複数の部分イメージハッシュのうちの前記部分と同じコードセグメントを表す部分ハッシュとを比較するステップと
を有することを特徴とするコンピュータで実行される方法。
【請求項２】
前記複数の部分イメージハッシュは、前記実行可能ファイルの前記コンピューティングデバイス上へのロードの前に計算されることを特徴とする請求項１に記載の方法。
【請求項３】
前記複数の部分イメージハッシュは、システムカタログまたは自己署名暗号化ファイルに格納されることを特徴とする請求項１に記載の方法。
【請求項４】
前記検証ハッシュが前記部分ハッシュと一致することを決定するステップと、
前記決定に応答して、前記部分を実行のためにメモリ内にページングするステップと、
をさらに有することを特徴とする請求項１に記載の方法。
【請求項５】
前記検証ハッシュが前記部分ハッシュと一致しないことを決定するステップと、
前記決定に応答して、前記部分を実行のためにメモリ内にページングするための前記要求を失敗にするステップと、
をさらに有することを特徴とする請求項１に記載の方法。
【請求項６】
前記実行可能ファイルのコンピューティングデバイス上へのロードの後に起こる、前記実行可能ファイル用のコードセグメントを作成するためのオープン要求をインターセプトするステップと、
前記オープン要求のインターセプトに応答して、
前記実行可能ファイルのヘッダの識別ハッシュを計算するステップと、
前記複数の部分バイナリハッシュのうちの前記ヘッダと一致する第１のハッシュを識別するために、前記識別ハッシュとシステムカタログに格納された複数の部分実行可能ファイルハッシュのそれぞれとを比較するステップと、
前記実行可能ファイルの１つまたは複数の部分を実行のためのメモリ内へのページングに応答したその後の部分イメージハッシュコードインテグリティー検証オペレーションのために、前記ハッシュの前記識別に応答して、前記実行可能ファイルの前記複数の部分イメージハッシュを前記システムカタログからメモリへコピーするステップと
をさらに有することを特徴とする請求項１に記載の方法。
【請求項７】
前記実行可能ファイルのコンピューティングデバイス上へのロードの後に起こる、前記実行可能ファイル用のコードセグメントを作成するためのオープン要求をインターセプトするステップと、
前記オープン要求のインターセプトに応答して、および前記実行可能ファイルが自己署名暗号化ファイルであるとの決定に応答して、前記実行可能ファイルの１つまたは複数の部分を実行のためにメモリ内にページングするステップに応答したその後の部分イメージハッシュコードインテグリティー検証オペレーションのために、前記複数の部分イメージハッシュを前記自己署名暗号化ファイルからメモリへコピーするステップと、
をさらに有することを特徴とする請求項１に記載の方法。
【請求項８】
実行可能ファイルのダイジェストを表し、前記実行可能ファイルの全バイト数よりも少ない複数の部分イメージハッシュを生成すること、
前記実行可能ファイルをコンピューティングデバイス上にロードした後に、前記実行可能ファイルの一部を実行のためにメモリ内にページングするための要求をインターセプトすること、
前記部分を実行のためにメモリ内にページングする前に、前記要求のインターセプトに応答して、
前記部分の検証ハッシュを計算すること、および
前記部分のコードインテグリティーを決定するために、前記検証ハッシュと前記複数の部分イメージハッシュのうちの前記部分と同じコードセグメントを表す部分ハッシュとを比較することを
プロセッサに実行させるコンピュータプログラム命令を備えることを特徴とするコンピュータ読み取り可能媒体。
【請求項９】
前記複数の部分イメージハッシュは、前記実行可能ファイルを前記コンピューティングデバイス上にロードする前に計算されることを特徴とする請求項８に記載のコンピュータ読み取り可能媒体。
【請求項１０】
前記複数の部分イメージハッシュは、システムカタログまたは自己署名暗号化ファイルに格納されることを特徴とする請求項８に記載のコンピュータ読み取り可能媒体。
【請求項１１】
前記検証ハッシュが前記部分ハッシュと一致することを決定すること、および
前記決定に応答して、前記部分を実行のためにメモリ内にページングすることを
プロセッサに実行させるコンピュータプログラム命令をさらに備えることを特徴とする請求項８に記載のコンピュータ読み取り可能媒体。
【請求項１２】
前記検証ハッシュが前記部分ハッシュと一致しないことを決定すること、および
前記決定に応答して、前記部分を実行のためにメモリ内にページングするための前記要求を失敗にすることを
プロセッサに実行させるコンピュータプログラム命令をさらに備えることを特徴とする請求項８に記載のコンピュータ読み取り可能媒体。
【請求項１３】
前記実行可能ファイルをコンピューティングデバイス上にロードした後に起こる、前記実行可能ファイル用のコードセグメントを作成するためのオープン要求をインターセプトすること、
前記オープン要求のインターセプトに応答して、
前記実行可能ファイルのヘッダの識別ハッシュを計算すること、
前記複数の部分バイナリハッシュのうちの前記ヘッダと一致する第１のハッシュを識別するために、前記識別ハッシュとシステムカタログに格納された複数の部分実行可能ファイルハッシュのそれぞれとを比較すること、および
前記実行可能ファイルの１つまたは複数の部分を実行のためのメモリ内へのページングに応答したその後の部分イメージハッシュコードインテグリティー検証オペレーションのために、前記ハッシュの位置特定に応答して、前記実行可能ファイルの前記複数の部分イメージハッシュを前記システムカタログからメモリへコピーすることを
プロセッサに実行させるコンピュータプログラム命令をさらに備えることを特徴とする請求項８に記載のコンピュータ読み取り可能媒体。
【請求項１４】
前記実行可能ファイルをコンピューティングデバイス上にロードした後に起こる、前記実行可能ファイル用のコードセグメントを作成するためのオープン要求をインターセプトすること、および
前記オープン要求のインターセプトに応答して、および前記実行可能ファイルが自己署名暗号化ファイルであるとの決定に応答して、前記実行可能ファイルの１つまたは複数の部分を実行のためにメモリ内にページングすることに応答したその後の部分イメージハッシュコードインテグリティー検証オペレーションのために、前記複数の部分イメージハッシュを前記自己署名暗号化ファイルからメモリへコピーすることを
プロセッサに実行させるコンピュータプログラム命令をさらに備えることを特徴とする請求項８に記載のコンピュータ読み取り可能媒体。
【請求項１５】
プロセッサと、前記プロセッサに結合されたメモリとを備えたコンピューティングデバイスであって、前記メモリは、
実行可能ファイルのダイジェストを表し、前記実行可能ファイルの全バイト数よりも小さい複数の部分イメージハッシュを生成すること、
前記実行可能ファイルをコンピューティングデバイス上にロードした後に起こる、前記実行可能ファイルの一部を実行のためにメモリ内にページングするための要求をインターセプトすること、
前記部分を実行のためにメモリ内にページングする前に、前記要求のインターセプトに応答して、
前記部分の検証ハッシュを計算すること、および
前記部分のコードインテグリティーを決定するために、前記検証ハッシュと前記複数の部分イメージハッシュのうちの前記部分と同じコードセグメントを表す部分ハッシュとを比較することを
前記プロセッサに実行させるコンピュータプログラム命令を備えることを特徴とするコンピューティングデバイス。
【請求項１６】
前記複数の部分イメージハッシュは、システムカタログまたは自己署名暗号化ファイルに格納されることを特徴とする請求項１５に記載のコンピューティングデバイス。
【請求項１７】
前記コンピュータプログラム命令は、
前記検証ハッシュが前記部分ハッシュと一致することを決定すること、および
前記決定に応答して、前記部分を実行のためにメモリ内にページングすること、
前記プロセッサに実行させるコンピュータプログラム命令をさらに備えることを特徴とする請求項１５に記載のコンピューティングデバイス。
【請求項１８】
前記コンピュータプログラム命令は、
前記検証ハッシュが前記部分ハッシュと一致しないことを決定すること、および
前記決定に応答して、前記部分を実行のためにメモリ内にページングするための前記要求を失敗にすることを
前記プロセッサに実行させるコンピュータプログラム命令をさらに備えることを特徴とする請求項１５に記載のコンピューティングデバイス。
【請求項１９】
前記コンピュータプログラム命令は、
前記実行可能ファイルをコンピューティングデバイス上にロードした後に起こる、前記実行可能ファイル用のコードセグメントを作成するためのオープン要求をインターセプトすること、
前記オープン要求のインターセプトに応答して、
前記実行可能ファイルのヘッダの識別ハッシュを計算すること、
前記複数の部分バイナリハッシュのうちの前記ヘッダと一致する第１のハッシュを識別するために、前記識別ハッシュとシステムカタログに格納された複数の部分実行可能ファイルハッシュのそれぞれとを比較すること、および
前記実行可能ファイルの１つまたは複数の部分を実行のためのメモリ内へのページングに応答したその後の部分イメージハッシュコードインテグリティー検証オペレーションのために、前記ハッシュの位置特定に応答して、前記実行可能ファイルの前記複数の部分イメージハッシュを前記システムカタログからメモリへコピーすることを
前記プロセッサに実行させるコンピュータプログラム命令をさらに備えることを特徴とする請求項１５に記載のコンピューティングデバイス。
【請求項２０】
前記コンピュータプログラム命令は、
前記実行可能ファイルをコンピューティングデバイス上にロードした後に起こる、前記実行可能ファイル用のコードセグメントを作成するためのオープン要求をインターセプトすること、および
前記オープン要求のインターセプトに応答して、および前記実行可能ファイルが自己署名暗号化ファイルであるとの決定に応答して、前記実行可能ファイルの１つまたは複数の部分を実行のためにメモリ内にページングすることに応答したその後の部分イメージハッシュコードインテグリティー検証オペレーションのために、前記複数の部分イメージハッシュを前記自己署名暗号化ファイルからメモリへコピーすることを
前記プロセッサに実行させるコンピュータプログラム命令をさらに備えることを特徴とする請求項１５に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データの認証または検証に関する。
【背景技術】
【０００２】
ユーザのコンピュータ上で実行される実行可能ファイルは、ウィルスまたはトロイの木馬を含む可能性がある。実行可能ファイルはバイナリイメージとも呼ばれ、たとえば、ポータブル実行可能プログラム（ＰＥ：Portable executable）、マクロ、Ｖｉｓｕａｌ  Ｂａｓｉｃスクリプト（ＶＢＳ）のようなスクリプト、その他などの、任意の実行可能オブジェクトを含む。ウィルスとは、通常はユーザの意思に反して、およびユーザに知られずに、ディスク上のバイナリイメージを変更する、プログラムまたは１つのコードである。ウィルスはそれら自体を複製することも可能である。それ自体のコピーを何度も繰り返し作成できる単純なウィルスは、生成が比較的容易である。たとえこうした単純なウィルスであっても、すべての使用可能なメモリを即時に使用してシステムを停止させてしまうことが可能であるため、危険である。他の危険なタイプのウィルスは、複数のネットワークを横切ってそれら自体を送信し、セキュリティシステムを迂回することができる。ウィルスとは異なり、トロイの木馬はそれら自体を複製することはないが破壊的である可能性があり、しばしば害のないアプリケーションを装う。たとえばトロイの木馬は、無防備なユーザによって単独で起動される可能性がある。悪質なタイプのトロイの木馬は、ユーザのコンピュータからウィルスを取り除くと主張しながらユーザのコンピュータに導入するするプログラムである。したがって、実行可能ファイルをコンピュータ上で実行することはリスクとなる可能性がある。
【０００３】
たとえばウィルスまたはトロイの木馬によって破損された実行可能コードを識別する１つの方法には、コンピューティングデバイスに実行可能コードをインストールまたはダウンロードする際に、信頼できる暗号化ハッシュを使用することが含まれる。暗号化ハッシュまたは単に「ハッシュ」は、実行可能コードを要約された形、すなわちダイジェストにコンパイルする。信頼できるハッシュによって、ハッシュの作成時に良好なコード、すなわち破損していないコードであることを知ることができる。実行可能ファイル（すなわち、バイナリイメージ、実行可能コード、スクリプト、マクロなど）用の信頼できるハッシュを生成するためには、実行可能ファイルをある場所から別の場所へ転送する前に、データなどの関連するリソースを含む実行可能ファイル上でメッセージダイジェストまたはチェックサム計算を実行し第１の結果を得る。転送された実行可能ファイル上で同じ計算が実行され、第２の結果が得られる。第１の結果と第２の結果とを比較して、受け取った実行可能ファイルが最初に送られたものと同じデータであるかどうかが判別される。たとえば、前の計算結果と後の計算結果とが一致した場合、受け取ったデータは正確であると思われる。一致しない場合、受け取った実行可能ファイルは破損している。この方法では、完全なバイナリイメージハッシュを使用することで、破損したバイナリイメージをダウンロードまたはインストールする危険が効果的に低減される。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明の目的は、部分イメージハッシュを使用して実行可能ファイルのインテグリティーを検証するためのシステムおよび方法を提供することである。
【課題を解決するための手段】
【０００５】
一態様では、複数の部分イメージハッシュが生成され、その組み合わせがバイナリイメージ全体のダイジェストを表す。コンピューティングデバイス上でのバイナリイメージのロードに続いて、実行のためにバイナリイメージの一部をメモリにページングする要求がインターセプトされる。要求のインターセプトに応答して、またその部分の実行のためのメモリへのページングに先立って、その部分の検証ハッシュが計算される。その検証ハッシュが、複数の部分イメージハッシュの部分ハッシュと比較され、その部分のコードのインテグリティーが決定される。部分ハッシュは、その部分と同じコードセグメントを表す。
【０００６】
図面では、構成要素の参照番号の左端の数字が、その構成要素が最初に現れた特定の図面を識別する。
【発明を実施するための最良の形態】
【０００７】
実行可能コードの実行に先立ったいずれかの時点で、このコードの一部のみをメモリにマッピングすることは、処理およびメモリリソースを効率的に使用するために一般的に行われている。たとえばページングは、仮想メモリオペレーティングシステムが、いつでも、実行可能ファイル（たとえばＰＥファイル）の数バイトのみをコードとして、ストレージデバイスからメモリへロード／マップするために使用する技法である。たとえば、コンピュータプログラムが主メモリ内にないページを必要とする場合、オペレーティングシステムは必要なページをメモリにコピーする。他の例では、ＶＢスクリプトエンジンなどのスクリプトエンジンは、スクリプトの一部（任意のページの概念またはページサイズの概念とは無関係の部分）をストレージデバイスからメモリへコードとしてマップすることができる。
【０００８】
様々なタイプおよび量の実行可能コードを実行のためにメモリにロードする際に使用される様々な技法に鑑みて、また考察のために、以下の「一部」という句は任意数のバイトを示し、そのバイト数は、実行される特定のコードのメモリへのローディングオペレーションに適している。たとえばページングオペレーションの場合、「一部」または「部分」という句は、ページ境界によって境界が画されたいくつかのバイト（１または複数ページ）を言い表す。他の例では、非ページングオペレーション（たとえば、スクリプトエンジンによって実行される実行可能コードのメモリローディングオペレーション）に関して、「一部」または「部分」という句は、後で実行するためにコード／スクリプトをメモリに移動する際に使用される特定の実施に適したバイト数を言い表す。実行可能コードを実行のためにメモリ内にロードする際にどの技法が使用されるかにかかわらず、こうした一部におけるバイト数は任意であり、一般に、完全な実行可能ファイル内のバイト数よりも少ないバイト数であって、通常は、実施されている特定の実行可能コードのローディングアーキテクチャに応じる。
【０００９】
メモリ内にロードするための実行可能コードの一部のバイトサイズが、通常は全実行可能ファイルサイズよりも小さい１つの理由は、特に実行可能ファイルのわずかな部分（たとえば１または複数ページ）のみの実行が予定されている場合、一般に、全実行可能ファイルをメモリにロードするために必要となるメモリおよび処理リソースがかなり高額なためである。たとえば、実行可能ファイルがデータストレージデバイス上にインストールされた後、イメージ全体（実行可能ファイル）の単一のハッシュが、そのイメージの第１の部分を実行のためにメモリにロードする直前に検証されるものであった場合、メモリおよびプロセッサリソースは効率良く利用されない。これは、全イメージハッシュを計算するには、実行可能ファイル全体をメモリにページングする必要があるためである。
【００１０】
こうしたプロセスは、通常のページングオペレーション環境の下では、その特定の時点でページングされることが殆どないコード、データ、および／またはリソースでのページングを必要とする。また、こうした部分のローディングオペレーションは、リソースおよび性能コストがかなり高額になる。これらの理由で、コードの一部を実行のためにメモリにマッピングして、その部分に関連付けられたコードが破損しているかどうかを判別する場合、全イメージハッシュの使用は実用的でない。したがって、実行可能コードのローディングアーキテクチャは、通常、全実行可能ファイルよりもかなり少ない部分を実行のためにメモリにロードする。これによって、そのメモリおよび処理リソースが効率良く使用されることが保証される。
【００１１】
上記に鑑みて、最後に全実行可能ファイルのハッシュインテグリティーチェックが実行された後にその一部が破損したとすると、実行可能ファイルの一部がメモリにページングされる際、仮に破損したコードが実行されるとしても、それまで既存のシステムは破損したコードを検出しない。この時点までに、破損したコードが、システムの１つまたは複数の部分のインテグリティーを損なっている可能性がある。言い換えれば、全イメージのインテグリティーチェックを実施する任意の既存システムは、チェック後にページが破損した場合に問題を引き起こす可能性がある。これらの理由から、依然として実行可能ファイルを実行するのは非常に危険である。
【００１２】
従来のコードインテグリティーインフラストラクチャとは対照的に、以下で説明する実行可能ファイルのインテグリティーを検証するためのシステムおよび方法は、破損したコードがシステム上にインストールされた後、コードを実行のためにメモリ内に移動する（ページングなど）直前に、部分ハッシュを使用して破損したコードを検出する。このシステムおよび方法は、従来のシステムの全イメージハッシュインフラストラクチャに依拠することなく、これを実現する。このため、このシステムおよび方法は、各実行可能ファイルについて複数のハッシュを生成する。各ハッシュが実行可能ファイルのそれぞれの部分を表すため、各ハッシュは実行可能ファイルの全バイトより少ないバイトのダイジェストである。この実施例では、たとえば各ハッシュは実行可能ファイルのそれぞれのページのダイジェスト、すなわちページごとのハッシュ（ｐｅｒ−ｐａｇｅ  ｈａｓｈ）である。（１ページのバイト数は任意であり、個々の実装されたページングアーキテクチャに応じる。）他の実施例では、各ハッシュはページごとのハッシュではないが、実行可能ファイルの１ページより少ないかまたは多いページのダイジェストを表す。
【００１３】
このシステムおよび方法が実行可能ファイルの一部（たとえばページまたはその他）をストレージデバイスからメモリへロードする場合、システムおよび方法はその部分のみのインテグリティーをチェックする。これにより、実行可能ファイルの追加／不要部分（たとえば実行可能ファイル全体）をロードすることなくこの部分が検証されるため、リソースまたは性能への影響が非常に少なくなる。
【００１４】
部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するためのシステムおよび方法が、たとえばページ内（ｉｎ−ｐａｇｅ）オペレーションの一部として、実行可能ファイルの破損部分がメモリにロードされようとしていることを識別した場合、その破損部分は実行のためにメモリにマッピングされない。一実施例では、ページングオペレーション中に実行可能ファイルの破損部分が識別された場合、対応するページ内オペレーションは失敗し、一部の実施例では例外の投入が生じることになる。この方式では、システムおよび方法はコードを実行する前にコードの破損ページを検出する。これによって、実行可能ファイルを実行する危険性が大幅に減少し、実行可能ファイルに関係するウィルス、トロイの木馬などに対する追加の保護が提供される。
【００１５】
部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するためのシステムおよび方法のこれらおよび他の態様について、以下でより詳細に説明する。
【００１６】
例示的システム  
必須ではないが、部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するためのシステムおよび方法について、パーソナルコンピュータなどのコンピューティングデバイスによって実行されているコンピュータ実行可能命令（プログラムモジュール）との一般的な状況で説明する。一般にプログラムモジュールは、特定のタスクを実行するかまたは特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。このシステムおよび方法は前述の状況で説明されるが、以下で説明する動作およびオペレーションはハードウェアにおいても実施可能である。
【００１７】
図１は、部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するための例示的システム１００を示す図である。この実施例では、システム１００はクライアントコンピューティングデバイス１０２を含む。コンピューティングデバイス１０２は、パーソナルコンピュータ、ラップトップ、サーバ、Ｓｍａｌｌ  Ｆｏｒｍ  Ｆａｃｔｏｒのモバイルコンピューティングデバイス（たとえば携帯電話、携帯情報端末、またはハンドヘルドコンピュータ）などの、任意のタイプのコンピューティングデバイスである。コンピューティングデバイス１０２は、プログラムモジュール１０４およびプログラムデータ１０６を含む。プログラムモジュール１０２は、たとえば、実行可能ファイルのそれぞれの部分について複数の暗号化ハッシュ（すなわち部分イメージハッシュ１０８）を生成するための１つまたは複数のコンピュータプログラムモジュールと、コードページング（または部分ローディング）オペレーション中に複数の暗号化ハッシュのうちのそれぞれで実行可能ファイルを検証するためのプログラムモジュールと、を含む。たとえば、部分ごとの実行可能ファイルハッシングモジュール１１０は、実行可能ファイルのそれぞれの部分について部分イメージハッシュ１０８を生成する。イメージ部分インテグリティー検証モジュール１１２は、この実施例ではファイルシステムプラグイン（たとえばフィルタドライバ）であり、コードページングオペレーション中に生成された暗号化ハッシュを使用して実行可能ファイルを検証する。例示のために、部分イメージハッシュ１０８を生成するための暗号化ハッシング用の実行可能ファイルは、「他のデータ」１１４のそれぞれの部分として示される。
【００１８】
考察および例示のために、部分ごとの実行可能ファイルハッシングモジュール１１０およびイメージ部分インテグリティー検証モジュール１１２は、単一のコンピューティングデバイス１０２上で実施されているものとして示されている。しかしながら、これらのプログラムモジュールは、コンピューティングデバイス１０２のプログラムモジュール１０４およびプログラムデータ１０６のすべてまたはサブセットを備えた異なるコンピューティングデバイス上で実施することが可能である。たとえば一実施例では、第１のコンピューティングデバイスは、第２のコンピューティングデバイス上へのインストールおよび／またはダウンロードのための、実行可能ファイルおよび対応する部分イメージハッシュ１０８を備えたパッケージを生成するために、実行可能ファイルハッシングモジュール１１０を実装する。第２のコンピューティングデバイスは、コードページング（または部分ローディング）オペレーション中に、複数の暗号化ハッシュのうちのそれぞれで実行可能ファイルを検証するために、イメージ部分インテグリティー検証モジュール１１２を実装する。
【００１９】
次に、システム１００のオペレーションを、はじめに、部分ごとの実行可能ファイルハッシングモジュール１１０の例示的オペレーションについて、次に、イメージ部分インテグリティー検証モジュール１１２の例示的オペレーションについて、さらに詳細に説明する。
【００２０】
例示的な部分ごとの実行可能ファイル暗号化ハッシング  
上記で示されたように、部分ごとの実行可能ファイルハッシングモジュール１１０は、実行可能ファイルのそれぞれの部分について部分イメージハッシュ１０８を生成する。部分イメージハッシュ１０８の各部分ハッシュ１０８は、（実行可能ファイル全体のサイズが部分サイズよりも少ないかまたは等しくない限り）実行可能ファイルのすべてよりも少ないバイトのダイジェストであるように実行可能ファイルのそれぞれの部分のハッシュを表す。たとえば一実施例では、各ハッシュ１０８はページごとのハッシュではないが、実行可能ファイルの１ページよりも少ないかまたは１ページよりも多いダイジェスト（すなわち、ページサイズ境界に基づいていないダイジェスト）を表す。この実施例では、および考察のために、各ハッシュ１０８は実行可能ファイルのそれぞれのページのダイジェスト、すなわちページごとのハッシュである。（１ページのバイト数は任意であり、特別に実施されたページングアーキテクチャに応じる。）複数の部分ハッシュ１０８を作成するために部分ごとの実行可能ファイルハッシングモジュール１１０によって実施される特定のハッシングアルゴリズムは任意であり、バイナリコードのハッシュを生成するために使用される任意のアルゴリズムとすることができる。こうしたアルゴリズムの例には、たとえばＳＨＡ−１およびＭＤ５が含まれる。
【００２１】
システム１００は、多くの異なる方法で、実行可能ファイルをその対応する部分イメージハッシュ１０８に関連付けることができる。一実施例では、たとえばシステム１００は、システムカタログ作成または更新アプリケーション（「他のプログラムモジュール」１１８を参照のこと）を利用して、その対応する部分イメージハッシュ１０８を備えた実行可能ファイルをシステムカタログ１２０にパッケージングする。こうしたパッケージングは、システムカタログ１２０作成オペレーションの一部として、またはシステムカタログ１２０更新プロセスの一部として、実行することができる。一実施例では、システムカタログ１２０は、同様に部分イメージハッシュ１０８を有するキャビネットファイル構造に基づくものである。システムカタログの使用は一般的であるが、従来のシステムカタログは、実行可能ファイルのいずれの部分イメージハッシュ１０８も含まない。むしろ、従来のシステムカタログが任意のタイプの実行可能ファイルハッシュを含む場合、実行可能ファイルハッシュは実行可能ファイル全体に対する単一の実行可能ファイルハッシュとなる。一実施例では、システムカタログ１２０は部分イメージハッシュ１０８および全実行可能ファイルハッシュを含み、全実行可能ファイルハッシュは、従来のコードインテグリティーインフラストラクチャとの後方互換性を備える。
【００２２】
他の実施例では、システム１００は暗号化署名アプリケーション（「他のプログラムモジュール」１１８を参照）を利用して、その対応する部分イメージハッシュ１０８を備えた実行可能ファイルを自己署名ファイル１２２にパッケージングする。この実施例では、自己署名ファイルはＰＫＣＳ＃７データフォーマットであり、エンドユーザが関連する署名およびＸ．５０９証明書を最高証明機関まで追跡できるようにするものである。一実施例では、自己署名ファイル１２２は、部分イメージハッシュ１０８および全実行可能ファイルハッシュを含み、全実行可能ファイルハッシュは従来のコードインテグリティーインフラストラクチャとの後方互換性を備える。
【００２３】
例示的な実行可能ファイルインテグリティー検証  
システム１００が部分イメージハッシュ１０８を対応する実行可能ファイルにどのように関連付けるか（たとえば、実行可能ファイルを、システムカタログ１２０または自己署名ファイル１２２内の部分イメージハッシュ１０８に関連付ける）にかかわらず、こうした関連付けによってイメージ部分インテグリティー検証モジュール１１２は、コードローディングオペレーション中に、リソースおよび性能への最小限の影響で実行可能ファイルの検証を実行することができる。これは、実行可能ファイルの個々の部分がその後の実行のためにページング（または部分ローディング）オペレーション中にストレージデバイスからメモリへコピーされる際に、個々の部分に関連付けられた部分イメージハッシュ１０８のそれぞれが個々の部分を検証するために使用されるからである。（例示的なＲＡＭ、ＲＯＭ、およびディスクドライブ、ＣＤ−ＲＯＭ、ＤＶＤなどのストレージデバイスについて、図３に関連して以下で図示および説明する。）以下で説明するように、これは、不要／追加コードおよびリソース（たとえばページまたはスクリプト）をメモリ内に入れる必要なしに実施される。  
【００２４】
ファイルシステム１１６、メモリマネージャ１２４、およびイメージ部分インテグリティー検証モジュール１１２は、オペレーティングシステム（ＯＳ）のページング（または部分ローディング）オペレーション中に、実行のためにメモリ内に入れられる実行可能ファイルの部分を検証するために協働する。（一実施例では、メモリマネージャおよびファイルシステムは、オペレーティングシステムのそれぞれの部分として実施される。）このため、実行コード（「他のプログラムモジュール」１１８を参照）がその後の実行のためにストレージデバイス上に格納された実行可能ファイルの一部をロードしようとした場合、メモリマネージャ１２４は、セクション作成プロセスの一部として実行可能ファイルをオープンするためのオープン要求をファイルシステム１１６に送る。その後、メモリマネージャは、実行可能ファイルの１または複数ページを実行のためにメモリにページングまたはマッピングするために、１つまたは複数のページ内（または部分内（ｉｎ−ｐｏｒｔｉｏｎ））要求をファイルシステム１６に送る。考察のために、ページングオペレーション中、「部分内要求」はページ内要求である。他の実施例では、「部分内要求」は、ページ境界によっては境界が画されていないが、実施中のコードローディングアーキテクチャ（たとえばスクリプトエンジンローディングアーキテクチャなど）によって境界が画されている、何らかの他のバイト数に対する要求である。オープン、ページ内要求、および部分内要求は、「他のデータ」１１４のそれぞれの部分として示されている。
【００２５】
コードの実行に先立って、コードのこれら１つまたは複数の部分のインテグリティーを検証するために、実行可能ファイル部分インテグリティー検証モジュール１１２はこうした要求をインターセプトする。ファイルオープン（たとえば作成要求）の受信に応答して、実行可能ファイル部分インテグリティー検証モジュール１１２は、ターゲットがデータであるかコードであるかを判別するために、オープン要求によって識別されたデータ（ターゲット）のソースを評価する。通常、データはコードとしてマッピングされず、その逆もまた同様である。ターゲットがコードとしてマッピングされることになっている場合、実行可能ファイル部分インテグリティー検証モジュール１１２はターゲットに関連付けられた部分イメージハッシュ１０８の位置を特定し、そのハッシュをそれぞれメモリにマッピングする。一実施例では、これは、部分イメージハッシュがシステムカタログ１２０にパッケージされるか自己署名ファイル１２２にパッケージされるかを判別することによって実施される。これを実施するために、実行可能ファイル部分インテグリティー検証モジュール１１２は、最初に、部分イメージハッシュ１０８を作成するために、部分ごとの実行可能ファイルハッシングモジュール１１０によって使用されたものと同じアルゴリズムを使用して実行可能ファイルのヘッダのハッシュを計算する。計算されたハッシュは、それぞれの部分イメージハッシュ１０８と同じ構成可能バイトサイズである。例示のために、この計算されたハッシュは、「他のデータ」１１４内で「検証のために計算されたハッシュ」のそれぞれとして示される。
【００２６】
実行可能ファイル部分インテグリティー検証モジュール１１２は、この計算されたハッシュと、システムカタログ１２０に格納された部分イメージハッシュ１０８のそれぞれとを比較して、計算されたハッシュのすべてのビットと一致する関連付けられた部分イメージハッシュ１０８を備える実行可能ファイルを検索する。こうした一致ハッシュ１０８が見つかった場合、当該の実行可能ファイルは「カタログ署名済み」であるか、またはシステムカタログ１２０内に表示される。この場合、実行可能ファイル部分インテグリティー検証モジュール１１２は、実行可能ファイルに関連付けられたそれぞれの部分イメージハッシュ１０８をＲＡＭに読み取る。ハッシュのリストが非実行可能データファイルからのデータであり、実行可能バイナリから読み取り／ページインされている情報ではない場合、このコピーオペレーションはインテグリティーチェック済みページング（または他のコード部分ローディング）オペレーションではないことに留意されたい。
【００２７】
当該の（ターゲットの）実行可能ファイルがカタログ署名済みでない場合、実行可能ファイル部分インテグリティー検証モジュール１１２は、当該実行可能ファイルがたとえば埋め込みＰＫＣＳ＃７署名済みコンテンツで自己署名されているかどうかを判別する。自己署名されている場合、検証フィルタ１１２は証明データを読み取り、その証明が最終的に周知の／信頼できる証明ルートセットのうちの１つまで追跡可能であることを検証し、その後（ターゲットの署名内に配置された）ページごとのハッシュ１０８の埋め込みリストをメモリにコピーする。一実施例では、自己署名済みファイルは、従来のコードインテグリティーチェックを実行するために実行可能ファイルの全ハッシュも含む。
【００２８】
実行可能ファイル部分インテグリティー検証モジュール１１２が、メモリマネージャ１２４によってファイルシステム１１６に送られる実行可能ファイル（以前のファイルオープン要求の対象であった実行可能ファイル）の１つまたは複数の部分に関する「部分内」要求をインターセプトすると、実行可能ファイル部分インテグリティー検証モジュール１１２は要求された１つまたは複数の部分の各部分のインテグリティーを検証する。より具体的に言えば、実行可能ファイル部分インテグリティー検証モジュール１１２は、ページ内／部分内要求によって識別された各ページ／部分についてハッシュを計算し、それぞれのハッシュと、その部分の以前に計算された対応する部分イメージハッシュ１０８とを比較する。（部分イメージハッシュ１０８は、前述のようにファイルオープン要求に応答してメモリにコピーされたものである。）
計算されたハッシュと格納されたハッシュが一致する場合、実行可能ファイル部分インテグリティー検証モジュール１１２は、ページ内／部分内オペレーションを完了させることが可能であり、その結果、要求された部分が実行のためにメモリにマッピングされる。計算されたハッシュと対応する部分イメージハッシュ１０８が一致しない場合、実行可能ファイル部分インテグリティー検証モジュール１１２はページ内／部分内要求に失敗し、変更／破損／改ざんされたコードはコードとしてメモリ内に入れられないため、その後実行されない。
【００２９】
上記に鑑み、実行可能ファイルの一部（たとえばページ）をストレージデバイスからメモリに入れるためにシステム１００がページングおよび他のメモリコードローディングオペレーションを実施すると、システム１００は入れられるそのコード部分のみのインテグリティーをチェックする。その結果、実行可能ファイルの追加／不要部分（たとえば実行可能ファイル全体）をロードすることなくこの部分のみが検証されるため、リソースまたは性能への影響が非常に少なくなる。
【００３０】
例示的手順  
図２は、部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するための例示的手順２００を示す図である。考察および例示のために、当該手順のオペレーションを図１の構成要素に関して説明する。構成要素の参照番号の左端の数字は、その構成要素が最初に現れた特定の図面を識別する。ブロック２０２で、部分ごとの実行可能ファイルハッシングモジュール１１０（図１）が実行可能ファイル用の部分イメージハッシュ１０８を生成する。ブロック２０４で、部分イメージハッシュ１０８が実行可能ファイルに関連付けられる。一実施例では、これは、実行可能ファイルおよび部分イメージハッシュ１０８をシステムカタログ１２０に封入することによって実施される。他の実施例では、これは、実行可能ファイルおよび部分イメージハッシュ１０８を自己署名ファイル１２２に封入することによって実施される。システムカタログ１２０および／または自己署名ファイル１２２を、異なるコンピューティングデバイス上にインストールまたはダウンロードすることができる。
【００３１】
ブロック２０６で、イメージ部分インテグリティー検証モジュール１１２（図１）が、メモリマネージャ１２４からファイルシステム１１６へのファイルオープン（セクション作成）要求をインターセプトする。ブロック２０８で、およびファイルオープン要求の受信に応答して、イメージ部分インテグリティー検証モジュール１１２が要求のターゲットデータソースを評価し、これがコード（実行可能ファイル）であるかデータ（実行可能ファイルではない）であるかを判別する。ターゲットが実行可能ファイルである場合、イメージ部分インテグリティー検証モジュール１１２はターゲットに関連付けられた各部分イメージハッシュ１０８の位置を特定し、即時アクセス（たとえば、１つまたは複数の部分イメージハッシュ１０８に関連付けられたページ内要求が受け取られた場合のアクセス）のためにそれらをメモリ内にコピーする。ブロック２１０で、メモリマネージャ１２４によってファイルシステム１１６に向けて送られたページ内または部分内要求のインターセプトに応答して、イメージ部分インテグリティー検証モジュール１１２は、インターセプトされた要求がターゲットとするコードのその部分について、ハッシュ（検証用に計算されたハッシュ）を計算する。コードのその部分は、その後その部分が破損していないと検証された場合に実行用にメモリ内に入れるために、ファイルシステムによってデータ格納場所から引き出されたものである。
【００３２】
このために、ブロック２１２で、イメージ部分インテグリティー検証モジュール１１２は計算されたハッシュと対応する１つの部分イメージハッシュ１０８とを比較し、インターセプトされた要求（ブロック２１０）を介して要求されたコードの部分のインテグリティーを検証する。ブロック２１４で、コードのその部分が破損していないと決定された（すなわち、計算されたハッシュが対応する１つの部分イメージハッシュ１０８と一致した）場合、イメージ部分インテグリティー検証モジュール１１２は、ページングオペレーション中にコードのその部分を後で実行するためにメモリにマッピングすることができる。そうではなく、ブロック２１６でコードのその部分が破損していると決定された（すなわち、計算されたハッシュが対応する１つの部分イメージハッシュ１０８と一致しない）場合、イメージ部分インテグリティー検証モジュール１１２はインターセプトされた要求に失敗し、コードのその部分は後で実行するためにメモリにマッピングされない。
【００３３】
例示的オペレーティング環境  
図３は、部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するためのシステムおよび方法が完全または部分的に実施可能な、好適なコンピューティング環境３００の一例を示す図である。例示的コンピューティング環境３００は、図１の例示的システムおよび図２の例示的オペレーション用に好適なコンピューティング環境の一例に過ぎず、本明細書に記載のシステムおよび方法の使用または機能の範囲に関して、どのような制限をも示唆することを意図するものではない。さらにコンピューティング環境３００は、コンピューティング環境３００内に図示された構成要素のいずれか１つまたは組み合わせに関して、いかなる依存関係または要件をも有するものと解釈されるべきでない。
【００３４】
本明細書に記載された方法およびシステムは、多数の他の汎用または特定用途向けのコンピューティングシステム、環境、または構成で動作可能である。使用に好適な可能性のある良く知られたコンピューティングシステム、環境、および／または構成の例には、パーソナルコンピュータ、ラップトップ、Ｓｍａｌｌ  Ｆｏｒｍ  Ｆａｃｔｏｒのモバイルコンピューティングデバイス（たとえば携帯電話、携帯情報端末、またはハンドヘルドコンピュータ）、サーバコンピュータ、マルチプロセッサシステム、マイクロプロセッサベースシステム、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記システムまたはデバイスのいずれかを含む分散コンピューティング環境、およびその他が含まれるが、これらに限定されるものではない。フレームワークのコンパクトまたはサブセットバージョンも、ハンドヘルドコンピュータ、または他のコンピューティングデバイスなどの限定されたリソースのクライアントで実施可能である。本発明は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散コンピューティング環境で実施される。分散コンピューティング環境では、プログラムモジュールをローカルおよびリモートの両方のメモリストレージデバイス内に配置することができる。
【００３５】
図３を参照すると、例示的システム３００は、部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するためのシステムおよび方法が完全または部分的に実施可能な、好適なコンピューティング環境の一例を示す。システム３００は、たとえば図１のクライアントコンピュータ１０２を実施するコンピュータ３１０の形の汎用コンピューティングデバイスを含む。コンピュータ３１０の構成要素は、処理ユニット３２０と、システムメモリ３３０と、システムメモリを含む様々なシステム構成要素を処理ユニット３２０に結合するシステムバス３２１とを含むことができるが、これらに限定されるものではない。システムバス３２１は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含む、いくつかのタイプのバス構造のうちのいずれかとすることができる。こうしたアーキテクチャは、限定的ではなく一例として、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカルバス、およびメザニンバスとも呼ばれるＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バスを含むことができる。
【００３６】
コンピュータ３１０は、通常、様々なコンピュータ読み取り可能媒体を含む。コンピュータ読み取り可能媒体は、コンピュータ３１０がアクセス可能な任意の使用可能媒体とすることが可能であり、揮発性および不揮発性、取り外し可能および取り外し不能の、両方の媒体を含む。限定的ではなく一例として、コンピュータ読み取り可能媒体は、コンピュータ記憶媒体および通信媒体を備えることができる。コンピュータ記憶媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、または他のデータなどの、情報を格納するための任意の方法または技術で実施された、揮発性および不揮発性、取り外し可能および取り外し不能の媒体を含む。コンピュータ記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは、所望の情報を格納するために使用可能でありコンピュータ３１０がアクセス可能な任意の他の媒体が含まれるが、これらに限定されるものではない。
【００３７】
通信媒体は、通常、搬送波または他の移送機構などの変調データ信号内でコンピュータ読み取り可能命令、データ構造、プログラムモジュール、または他のデータを具体化し、さらに任意の情報送達媒体を含む。「変調データ信号」という用語は、信号内で情報を符号化するような方法でその特徴の１つまたは複数が設定または変更された信号を意味する。限定的ではなく一例として、通信媒体は、有線ネットワークまたはダイレクトワイヤード接続などの有線媒体と、音波、ＲＦ、赤外線、および他の無線媒体などの無線媒体とを含む。上記のうちいずれかの組み合わせも、コンピュータ読み取り可能媒体の範囲内にあるものとする。
【００３８】
システムメモリ３３０は、読み取り専用メモリ（ＲＯＭ）３３１およびランダムアクセスメモリ（ＲＡＭ）３３２などの、揮発性および／または不揮発性メモリの形のコンピュータ記憶媒体を含む。起動時などにコンピュータ３１０内の要素間での情報転送を助ける基本ルーチンを含む基本入力／出力システム３３３（ＢＩＯＳ）は、通常、ＲＯＭ３３１内に格納される。ＲＡＭ３３２は、通常、処理ユニット３２０が即時アクセス可能であり、かつ／またはその上で現在動作中の、データおよび／またはプログラムモジュールを含む。限定的でなく一例として、図３はオペレーティングシステム３３４、アプリケーションプログラム３３５、他のプログラムモジュール３３６、およびプログラムデータ３３７を示す。
【００３９】
コンピュータ３１０は、他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶媒体も含むことができる。単なる一例として、図３は、取り外し不能、不揮発性磁気媒体からの読み取りまたはこれへの書き込みを行うハードディスクドライブ３４１と、取り外し可能、不揮発性磁気ディスク３５２からの読み取りまたはこれへの書き込みを行う磁気ディスクドライブ３５１と、ＣＤ  ＲＯＭまたは他の光媒体などの取り外し可能、不揮発性光ディスク３５６からの読み取りまたはこれへの書き込みを行う光ディスクドライブ３５５とを示す。例示的オペレーティング環境で使用可能な他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶媒体には、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭ、などが含まれるが、これらに限定されるものではない。ハードディスクドライブ３４１は、通常、インターフェース３４０などの取り外し不能メモリインターフェースを介してシステムバス３２１に接続され、磁気ディスクドライブ３５１および光ディスクドライブ３５５は、通常、インターフェース３５０などの取り外し可能メモリインターフェースによってシステムバス３２１に接続される。
【００４０】
上記で考察し図３に示したドライブおよびそれらに関連するコンピュータ記憶媒体は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、および他のデータのストレージをコンピュータ３１０に提供する。図３では、たとえばハードディスクドライブ３４１は、オペレーティングシステム３４４、アプリケーションプログラム３４５、他のプログラムモジュール３４６、およびプログラムデータ３４７を格納しているように図示される。これらの構成要素は、オペレーティングシステム３３４、アプリケーションプログラム３３５、他のプログラムモジュール３３６、およびプログラムデータ３３７と同じであるかまたは異なるかの、いずれでも可能であることに留意されたい。アプリケーションプログラム３３５は、たとえば図１のプログラムモジュール１０４を含む。プログラムデータ３３７は、たとえば図１のプログラムデータ１０６を含む。オペレーティングシステム３４４、アプリケーションプログラム３４５、他のプログラムモジュール３４６、およびプログラムデータ３４７には、これらが少なくとも異なるコピーであることを示すために、ここでは異なる番号が与えられている。
【００４１】
ユーザは、キーボード３６２、ならびに一般にマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス３６１などの、入力デバイスを介してコンピュータ３１０にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナ、またはその他を含むことができる。これらおよび他の入力デバイスは、しばしばシステムバス３２１に結合されたユーザ入力インターフェース３６０を介して処理ユニット３２０に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの、他のインターフェースおよびバス構造によって接続することができる。
【００４２】
モニタ３９１または他のタイプのディスプレイデバイスも、ビデオインターフェース３９０などのインターフェースを介してシステムバス３２１に接続される。コンピュータは、モニタに加えて、出力周辺インターフェース３９５を介して接続可能なプリンタ３９６およびオーディオデバイス３９７などの他の周辺出力デバイスを含むこともできる。
【００４３】
コンピュータ３１０は、リモートコンピュータ３８０などの１つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク環境内で動作する。一実施例では、リモートコンピュータ３８０は、図１の実行可能ファイルおよび部分イメージハッシュ１０８を、コードページングオペレーション中のイメージ部分インテグリティー検証モジュール１１２のローカル実施によって、その後の実行可能ファイル部分ごとにインストールまたはダウンロードする、コンピューティングデバイスを示す。リモートコンピュータ３８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の共通ネットワークノードとすることが可能であり、図３にはメモリストレージデバイス３８１のみが示されているが、その特定の実施に応じて、コンピュータ１０２に関して上記で述べた要素（たとえば、プログラムモジュール１０４およびプログラムデータ１０６など）のうちの多くまたはすべてを含むことができる。図３に示された論理接続はローカルエリアネットワーク（ＬＡＮ）３７１およびワイドエリアネットワーク（ＷＡＮ）３７３を含むが、他のネットワークを含むことも可能である。こうしたネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットで一般に見られる。
【００４４】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ３１０はネットワークインターフェースまたはアダプタ３７０を介してＬＡＮ３７１に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータ３１０は、通常、インターネットなどのＷＡＮ３７３を介して通信を確立するためのモデム３７２または他の手段を含む。モデム３７２は内蔵型または外付け型が可能であり、ユーザ入力インターフェース３６０または他の適切な機構を介してシステムバス３２１に接続することができる。ネットワーク環境では、コンピュータ３１０に関して示されたプログラムモジュールまたはその一部を、リモートメモリストレージデバイスに格納することができる。限定的でなく一例として、図３は、リモートアプリケーションプログラム３８５をメモリデバイス３８１上に常駐しているものとして示す。図示されたネットワーク接続は例示的なものであり、コンピュータ間の通信リンクを確立する他の手段も使用可能である。
【００４５】
むすび  
部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するためのシステムおよび方法について、構造的特徴および／または方法論的オペレーションまたはアクションに特有の言葉で説明してきたが、添付の特許請求の範囲に定義された実施は、必ずしも記載された特定の特徴またはアクションに限定されるものでないことを理解されよう。たとえば、イメージ部分インテグリティー検証モジュール１１２はプラグインとしてファイルシステム１１６に組み込まれているものとして示されているが、プログラムモジュール１１２は、プラグインまたは他の方法でファイルシステム以外のプログラムモジュールに組み込むことも可能である。たとえば一実施例では、メモリマネージャ１２４がイメージ部分インテグリティー検証モジュール１１２のオペレーションに（プラグインまたはその他として）直接アクセスする。したがって、特定の特徴およびオペレーションは、主張された主題を実施する例示的な形として開示されたものである。
【図面の簡単な説明】
【００４６】
【図１】部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するための例示的システムを示す図である。
【図２】部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するための例示的手順を示す図である。
【図３】部分ハッシュを使用して実行可能ファイルのインテグリティーを検証するためのシステムおよび方法が完全または部分的に実施可能な、好適なコンピューティング環境の一例を示す図である。
【図１】
2006202270.tif 000003
【図２】
2006202270.tif 000004
【図３】
2006202270.tif 000005