(57)【要約】  コンピューティングシステム上で実行するためのコンピュータプログラムの完全性検証を行うためのシステムと方法を提供する。完全性チェックは、実行制御をオペレーティングシステムの次のレベルに渡す前に、あるいは、プログラムの実行を許可する前に、完了される。完全性チェックは、実行前にプログラムが修正されたか、あるいは改ざんされたかを決定するためのローカルに記憶された鍵の使用を含む。仮にチェックがプログラムは変わっていないことを示す場合には、そのプログラムは実行され、ブートプロセスの間、プログラムは実行制御が次のレベルに転送されることを許可する。しかしながら、仮にチェックがプログラムは修正されていたと確認する場合には、コンピューティングシステムはそのプログラムが実行することを許可しない。
2008537224.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを検証する方法であって、
前記プログラムの第一の表現を生成するための前記プログラムの機能を実行すること、
前記第一の表現をローカルに記憶された鍵で暗号化すること、
前記プログラムを実行する前に、第二の表現を生成するためのプログラムの前記機能を実行すること、
復号化された第一の表現を生成するために、暗号化された前記第一の表現を復号化すること、
前記第二の表現と、前記復号化された第一の表現とを比較すること、
を備え、
前記プログラムは、前記プログラムの一部であり得ることを特徴とするプログラムを検証する方法。
【請求項２】
前記ローカルに記憶された鍵は秘密鍵であることを特徴とする請求項１に記載の方法。
【請求項３】
前記復号化するステップは、前記秘密鍵と関連付けられた公開鍵の使用を採用することを特徴とする請求項２に記載の方法。
【請求項４】
前記プログラムは、基本入出力システム（ＢＩＯＳ）であることを特徴とする請求項１に記載の方法。
【請求項５】
前記プログラムは、ローダプログラムであることを特徴とする請求項１に記載の方法。
【請求項６】
前記プログラムは、カーネルであることを特徴とする請求項１に記載の方法。
【請求項７】
前記プログラムは、実行可能ファイルであることを特徴とする請求項１に記載の方法。
【請求項８】
前記機能は、ハッシュ法アルゴリズムであることを特徴とする請求項１に記載の方法。
【請求項９】
前記第二の表現と前記復号化された第一の表現との比較が一致するとの結果に帰結する場合には、前記プログラムを実行することを許可することをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項１０】
プロセッサとメモリを備えたシステムで用いるプログラムコードを記憶しており、前記プログラムコードは前記プロセッサに、
前記プログラムの第一の表現を生成するための前記プログラムの機能を実行するステップと、
前記第一の表現をローカルに記憶された鍵で暗号化するステップと、
前記プログラムを実行する前に、第二の表現を生成するためのプログラムの前記機能を実行するステップと、
復号化された第一の表現を生成するために、暗号化された前記第一の表現を復号化するステップと、
前記第二の表現と、前記復号化された第一の表現とを比較するステップと、
を実行させ、
前記プログラムは、前記プログラムの一部であり得ることを特徴とするコンピュータ読み取り可能媒体。
【請求項１１】
前記復号化するステップは、前記ローカルに記憶された鍵と関連付けられた公開鍵の使用を採用することを特徴とする請求項１０に記載のコンピュータ読み取り可能媒体。
【請求項１２】
前記プログラムは、基本入出力システム（ＢＩＯＳ）であることを特徴とする請求項１０に記載のコンピュータ読み取り可能媒体。
【請求項１３】
前記プログラムは、ローダプログラムであることを特徴とする請求項１０に記載のコンピュータ読み取り可能媒体。
【請求項１４】
前記プログラムは、カーネルであることを特徴とする請求項１０に記載のコンピュータ読み取り可能媒体。
【請求項１５】
前記プログラムコードは、前記プロセッサに、
前記第二の表現と、前記復号化された第一の表現との比較が一致するとの結果に帰結する場合には、前記プログラムを実行することを許可するステップをさらに実行させることを特徴とする請求項１０に記載のコンピュータ読み取り可能媒体。
【請求項１６】
メモリと、
プロセッサと、
前記プログラムの第一の表現を生成するためのプログラムの機能を実行するステップ、
前記第一の表現をローカルに記憶された鍵で暗号化するステップ、
前記プログラムを実行する前に、第二の表現を生成するためのプログラムの前記機能を実行するステップ、
復号化された第一の表現を生成するために、暗号化された前記第一の表現を復号化するステップ、及び、
前記第二の表現と、前記復号化された第一の表現とを比較するステップ、
を実行可能なコンピュータ読み取り可能命令を含む前記メモリの最初の部分に記憶された制御コードと、を備え、
前記プログラムは、前記プログラムの一部であり得ることを特徴とするコンピュータシステム。
【請求項１７】
前記復号化するステップは、前記ローカルに記憶された鍵と関連付けられた公開鍵の使用を採用することを特徴とする請求項１６に記載のコンピュータシステム。
【請求項１８】
前記プログラムは、基本入出力システム（ＢＩＯＳ）であることを特徴とする請求項１６に記載のコンピュータシステム。
【請求項１９】
前記プログラムは、ローダプログラムであることを特徴とする請求項１６に記載のコンピュータシステム。
【請求項２０】
前記プログラムは、カーネルであることを特徴とする請求項１６に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペレーティングシステムおよびコンピューティングシステムの安全性に関する。より詳細には、本発明は、ローカルに記憶された鍵の使用によるコンピューティングシステムの様々な転送ポイントにおける複数の完全性チェックに関する。
【背景技術】
【０００２】
ある機能を実行するためにメモリに記憶されたプログラムコードを実行するプロセッサを含むどのようなコンピュータ機器のどのようなユーザにとっても、安全性は重要な問題である。コンピューティングシステムの脆弱な側面は、限定されるわけではないが、ブートプロセスの転送ポイント（例えば、入出力基本システム（ＢＩＯＳ）がシステムの制御をブートコードに転送するポイント）や、コンピューティングシステムにあらかじめロードされたその次のプログラムの動作を含む。
【０００３】
転送ポイントとは、システムの制御があるモジュールまたはコンピュータ機器の命令セットから別のモジュールまたはコンピュータ機器の命令セットにそのうちに転送されるポイントのことである。ブートプロセス中の転送は、あるモジュール（例えば、ＢＩＯＳ）が自身のタスクを完了した際に発生し、そのポイントにおいて、制御を次のモジュールへと渡し、その結果コンピュータスタートアップの次のフェーズが開始されることができる。別の転送は、実行中のシステムによって許可が与えられたプログラムを選択した際に発生する。
【０００４】
転送ポイントにおいては、コンピュータ機器は、ウィルスや、自身を信頼できるコードとして偽装することによってシステムの制御を得る悪意のコードからのセキュリティー違反に対して特に脆弱である。例えば、オペレーティングシステムの内部セーフガードが制御を得る前に、自身をブートプログラムとして偽装する悪意のプログラムがシステム全体の制御を与えられるであろう。悪意のコードは、自身を他の信頼できるプログラムの中に隠すことによっても偽装され得る。ウィルスはしばしば有害であり、ファイルに被害を与え、さもなければコンピュータ機器を破損することもあり得る。プログラムが、何を目指しているかについて決定することができるシステムと方法が、コンピュータ機器をウィルスや他の悪意のコードからより安全にすることに大いに役に立つであろう。
【０００５】
プログラムの許可されていない修正に対する安全の一つの形式として、電子署名がコンピュータシステムにおいて採用されている。プログラムが変わっているか、改ざんされているか、あるいは、修正されているかを検出するための周知のスキームは、電子署名の使用を含む。プログラムの実行の前に、そのプログラムの固有の表現(representation)が、たとえばＳｅｃｕｒｅ Ｈａｓｈ ａｌｇｏｒｉｔｈｍ（ＳＨＡ  １）またはＭＤ５のようなハッシュ法アルゴリズムを通じて作り出される。そして、固有の表現が秘密鍵で署名されたり暗号化されたりして、それが信頼できる局から作者に提供され、別々の登録および検証プロセスを通じて作者の信頼性を検証することができる。暗号化された表現は、そのプログラムと関連付けられた電子署名の形式としてプログラムと共に記憶される。プログラムが実行されるべきときは、そのプログラムの表現を署名するために使用された秘密鍵に対応する公開鍵でその署名は復号化されたり、検証されたりする。実行されるプログラムの固有の表現は、オリジナルプログラムのために使われたアルゴリズムと同じアルゴリズムを使用して形成される。この表現は承認（confirmation）と考えることができる。この承認が復号化された署名と一致すると、プログラムは改ざんまたは変更がなされておらず、首尾よく検証されたものとして実行されることができる。しかしながら、承認と復号化された署名とが一致しない場合には、そのプログラムは修正されたことを示すため、実行されるべきではない。
【０００６】
もちろん、悪意のコードの作者が同様に署名を含めることもあり得る。そのときは、検証プロセスは、そのコードの目的が何であるかについて実際に検証するだろう。しかしながら、多くの署名プロセスは信頼された鍵発行局に頼り、作者の身元に導くことができる一種の文書追跡を導入しているので、悪意のコードの作者は、そのようなステップを嫌がるだろう。加えて、これは鍵発行局マネーを支払うことも必要とする。そこで、システム上で実行中のすべてのコードが署名されたことを必要とするシステムは、ユーザに彼らのマシン上に現存するコードを誰が作り出したかについての可視性を提供することと同様に、悪意のコードを根絶することに大いに役に立つ。残念なことに、現在利用可能な多くのプログラムは、追加された複雑性や費用のような様々な理由のために署名されていない。その結果、コンピュータ機器のユーザがある種のプログラムを受け取る時に、たとえばそのユーザはコードや、ある検証されていないプログラムが悪意のあり得ることやすべてのコンピュータ機器を危険にさらすことを検証することができないであろう。
【０００７】
さらには、ユーザによって実行することを選択されたプログラムだけではなく、ブートプログラムも悪意に変更され得るものであり、単にオンにしたりコンピュータ機器をスタートすることによって問題を引き起こす。
【０００８】
署名されていないプログラムを読み出し実行することをしないことは、存在している多くのプログラムがそのような分類に分類されるであろうことから実用的なオプションではない。それゆえ、すべてのプログラムに署名されることを要求することは、プログラムの可用性を深刻に減少させ、多くの古いアプリケーションを壊すことになるであろう。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
このように、上記の制限を対処し、コンピュータ機器のモジュールにおいて完全性チェックを実行するモデルを有することは望ましいであろう。
【課題を解決するための手段】
【００１０】
上記の点や他の技術の欠点を考慮して、本発明は、実行制御を転送する前にチェックを実行することによってモジュールの完全性を検証するためのシステム及び方法を提供する。
【００１１】
本発明によって、その次の動作においてそのコードが変わっていないことを保証するためにローカルに記憶された署名鍵を署名されていないプログラムに適用するためのシステムおよび方法も提供される。本発明は、プログラムに適用されるローカルな鍵を提供する。署名は、ロード動作の間プログラムが変わっていないかを後で決定するために使用される。そのためには、システムと方法は、プログラムの機能を実行して、プログラムの第一の表現を生成する。第一の表現は、それからローカルに記憶された鍵で暗号化される。好ましくは、第一の表現は、ハッシュ関数を使用して生成されるとよい。好ましくは、ローカルに記憶された鍵は、秘密鍵／公開鍵の対からの秘密鍵であるとよい。プログラムを実行する前に、その機能はプログラムにおいて実行され、第二の表現を生成する。暗号化された第一の表現もまた、復号化された第一の表現を生成するための復号化される。二つの表現は、プログラムが変更されたかを検証するために比較される。
【００１２】
本発明のさらなる特徴および利点は以下に説明される。
【００１３】
コンピュータ機器の動作中における完全性チェックを実行するためのシステムと方法は、ブートプロセスとロードされた実行可能ファイルの実行とを含み、ローカルに記憶された署名鍵を使用して、本発明にしたがって、添付の図面を参照してさらに説明される。
【発明を実施するための最良の形態】
【００１４】
図１と以下の考察は、実装されうる本発明と関連する安定したコンピューティング環境の簡潔な概要を提供する。本発明は、専用や汎用の多くのコンピューティングシステム環境や構成で動作できる。本発明で使用するのに適する可能性がある周知のコンピューティングシステム、コンピューティング環境、および／またはコンピューティング構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドデバイスまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、以上のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれるが、以上には限定されない。
【００１５】
図１を参照すると、本発明を実装するための典型的なシステムは、コンピュータ１１０の形態で汎用コンピューティングデバイスを含む。コンピュータ１１０のコンポーネントは、処理装置１２０、システムメモリ１３０、ならびにシステムメモリ１３０から処理装置１２０までを含む様々なシステムコンポーネントを結合するシステムバス１２１を含むことができるが、以上には限定されない。システムバス１２１は、様々なバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含め、いくつかの種類のバス構造のいずれかである。例として、限定としてではなく、そのようなアーキテクチャは、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカルバス、（メザニンバスとしても知られる）ＰＣＩ（Peripheral Component Interconnects）バス、およびＰＣＩｅ（PCI Express）を含む。
【００１６】
コンピュータ１１０は、通常、様々なコンピュータ読取り可能メディアを含む。コンピュータ読取り可能メディアは、コンピュータ１１０がアクセスすることができる任意の利用可能なメディアであることができ、揮発性メディアと不揮発性メディア、取り外し可能メディアと取り外し不能メディアがともに含まれる。例として、限定としてではなく、コンピュータ読取り可能メディアは、コンピュータ記憶メディアおよび通信メディアを含むことができる。コンピュータ記憶メディアは、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するために任意の方法または技術で実装された揮発性メディアと不揮発性メディア、取り外し可能メディアと取り外し不能メディアをともに含む。コンピュータ記憶メディアは、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは所望の情報を格納するのに使用することができ、コンピュータ１１０がアクセスすることができる任意の他のメディアを含むが、以上には限定されない。通信メディアは、通常、コンピュータ読取り可能命令、データ構造、プログラムモジュール、または搬送波または他のトランスポート機構のような変調されたデータ信号におけるその他のデータを実体化し、あらゆる情報配信メディアが含まれる。「変調されたデータ信号」という用語は、信号内に情報をエンコードするような形で特性の１または複数が設定または変更されている信号を意味する。例として、限定としてではなく、通信メディアは、有線ネットワークまたは直接有線接続などの有線メディア、ならびに音響メディア、ＲＦメディア、赤外線メディア、およびその他の無線メディアなどの無線メディアを含む。また、前述したメディアのいずれかの組合せも、コンピュータ読取り可能メディアの範囲に含まれるべきものである。
【００１７】
システムメモリ１３０は、ＲＯＭ１３１やＲＡＭ１３２などの揮発性メモリおよび／または不揮発性メモリの形態でコンピュータ記憶メディアを含む。始動中などにコンピュータ１１０内部の要素間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム１３３（ＢＩＯＳ）が、典型的には、ＲＯＭ１３１の中に記憶されている。ＲＡＭ１３２は、典型的には、処理装置１２０が即時にアクセスすることができ、および／または処理装置１２０によって現在、処理されているデータおよび／またはプログラムモジュールを含む。例として、限定としてではなく、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示している。
【００１８】
コンピュータ１１０は、その他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶メディアも含むことができる。単に例として、図１は、取り外し不能不揮発性磁気メディアに対して読み取りまたは書き込みを行うハードディスクドライブ１４１、取り外し可能不揮発性の磁気ディスク１５２に対して読み取りまたは書き込みを行う磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭまたは他の光メディアなどの取り外し可能不揮発性の光ディスク１５６に対して読み取りまたは書き込みを行う光ディスクドライブ１５５を示している。典型的な動作環境において使用することができるその他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶メディアは、磁気テープカセット、フラッシュメモリカード、デジタルバーサタイルディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどを含むが、以上には限定されない。ハードディスクドライブ１４１は、典型的には、インタフェース１４０のような取り外し不能メモリインタフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、典型的には、インタフェース１５０のような取り外し可能メモリインタフェースでシステムバス１２１に接続される。
【００１９】
前述し、図１に示したドライブ、および関連するコンピュータ記憶メディアにより、コンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータのストレージがコンピュータ１１０に提供される。図１で、例えば、ハードディスクドライブ１４１が、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納していることが示されている。以上のコンポーネントは、オペレーティングシステム３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じであることも、異なることも可能であることに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７に、ここでは、少なくともそれらが異なるコピーであることを示すために異なる符号を付けている。
【００２０】
ユーザは、キーボード１６２や、マウス、トラックボール、またはタッチパッドと一般に呼ばれるポインティングデバイス１６１などの入力デバイスを介して、コマンドおよび情報をコンピュータ１１０に入力することができる。その他の入力デバイス（図示せず）は、マイク、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどを含むことができる。以上の入力デバイス、およびその他の入力デバイスは、しばしば、システムバス１２１に結合されたユーザ入力インタフェース１６０を介して処理装置１２０に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインタフェースおよびバス構造で接続してもよい。また、モニタ１９１、または他のタイプのディスプレイデバイスも、ビデオメモリ１８６と交互に通信できるビデオインタフェース１９０などのインタフェースを介してシステムバス１２１に接続される。モニタ１９１に加えて、コンピュータは、出力周辺インタフェース１９５を介して接続することができるスピーカ１９７やプリンタ１９６などの他の周辺出力デバイスも含むことができる。
【００２１】
コンピュータ１１０は、リモートコンピュータ１８０などの１または複数のリモートコンピュータに対する論理接続を使用するネットワーク化されたまたは分散された環境において動作することが可能である。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の一般的なネットワークノードであることができ、典型的には、コンピュータ１１０に関連して前述した要素の多く、またはすべてを含むが、メモリ記憶装置１８１だけを図１に示している。図１に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、その他のネットワーク／バスを含むこともできる。そのようなネットワーキング環境は、家庭、オフィス、企業全体のコンピュータ網、イントラネット、およびインターネットで一般的である。
【００２２】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ１１０は、ネットワークインタフェースまたはネットワークアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータ１１０は、通常、モデム１７２またはインターネットなどのＷＡＮ１７３を介して通信を確立するためのその他の手段を含む。内部にあることも、外部にあることも可能なモデム１７２は、ユーザ入力インタフェース１６０、またはその他の適切な機構を介してシステムバス１２１に接続することができる。ネットワーク化された環境では、コンピュータ１１０に関連して示したプログラムモジュール、またはプログラムモジュールの部分は、リモートメモリ記憶装置の中に記憶されることが可能である。例として、限定としてではなく、図１は、リモートアプリケーションプログラム１８５が、メモリ装置１８１上に常駐しているのを示している。図示したネットワーク接続は、例示的であり、コンピュータ間で通信リンクを確立する他の手段も使用できることが認められよう。
【００２３】
ここに説明された多くの技術は、ハードウェアまたはソフトウェアと関連して、あるいは、必要に応じて両者の組み合わせと関連して実装されることができる。このように、本発明、あるいは本発明の一部またはある側面の方法および装置は、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ハードディスクドライブまたは他のいずれの機械読み取り可能記憶媒体のような実現可能なメディアにて具体化されたプログラムコード（すなわち、命令）の形態をとることができ、コンピュータのような機械にプログラムコードがロードされ、実行されたときは、その機械は本発明を実施するための装置となる。プログラムで制御できるコンピュータ上のプログラムコードの実行の場合において、コンピュータ機器は、一般的にプロセッサ、プロセッサによって読み取り可能記憶媒体（揮発性および不揮発性のメモリおよび／またはストレージ要素を含む）、少なくともひとつの入力デバイス、および少なくともひとつの出力デバイスを含む。たとえば、ＡＰＩ、再利用可能な制御、あるいは同種のものの使用により、本発明に関連して説明されるプロセスを実装し、または利用することができる一または複数のプログラムは、好ましくは、コンピュータシステムと通信するために高水準の手続き型プログラミング言語か、オブジェクト指向型プログラミング言語で実装される。しかしながら、もし要望されるのであれば、プログラムはアセンブリや機械語で実装されることができる。いずれにせよ、言語はコンパイルされるか、またはインタプリタされた言語であり、ハードウェア実装に組み合わされる。
【００２４】
具体例は、一または複数のスタンドアロンコンピュータシステムの状況における本発明を利用することに言及するが、限定されたものではなく、むしろネットワークや分散されたコンピューティング環境のようないずれのコンピューティング環境と関連して実装されることができる。またさらには、本発明は、複数の処理チップまたはデバイスで、または全体で実装されることができ、そして、ストレージも同様に複数のデバイスの全体で生じさせることができる。そのようなデバイスは、パーソナルコンピュータ、ネットワークサーバ、ハンドヘルドデバイス、スーパーコンピュータ、または自動車や飛行機のような他のシステムに組み込まれたコンピュータを含むことができる。
【００２５】
図２は、本発明の一態様による、コンピューティングシステムのブートプロセスの間の転送制御の説明のブロック図である。各レベルの完全性は、特定のレベルに制御を転送する前に検証される。
【００２６】
ＢＩＯＳ１３３は、スタートアップの間、コンピュータ１１０内の要素間に情報を転送することを助ける基本的なルーチンを含む。上述のとおり、ＢＩＯＳ１３３は、通常、コンピュータシステムの読み出し専用メモリ（ＲＯＭ）１３１に含まれており、いつでも利用可能なことを保証する。コンピュータ１１０がオンにされると、スタートアッププロセスの制御はＢＩＯＳ１３３に渡され、それがマウス１６１、キーボード１６２、モニタ１９１のような様々なデバイスと、オペレーティングシステム１３４と、の間の対話を制御する。ＢＩＯＳ１３３がコンピュータ１１０を起動するとき、実際にオペレーティングシステム１３４をコンピュータ１１０のランダムアクセスメモリ（ＲＡＭ）１３２内にロードする予定であるブートプログラムを配置する前に、ＢＩＯＳはすべての付属（attachments）が動作可能であることを確認する。
【００２７】
ブートブロック２１０は、実際にブートプログラムが配置されるディスクドライブ１４１のセクタである。ＢＩＯＳ１３３は、コンピュータ１１０のＲＡＭ１３２にブートブロック２１０をロードする。それから、ブートブロック２１０の完全性チェック（以下で、詳細に説明される）を実行した後に、ＢＩＯＳ１３３は、システムの制御をブートブロック２１０に渡す。ブートブロック２１０におけるブートプログラムは、非常に限られた機能を有している。ブートプログラムのタスクは、オペレーティングシステム１３４がある基本的なレベルで機能することを開始しオペレーティングシステム自身をコンピュータ機器にロードし始めることができるように、十分なオペレーティングシステム１３４をＲＡＭ１３２に単に読み出すだけである。
【００２８】
そのためには、ブートプログラムは、オペレーティングシステム１３４の残り部分をロードするオペレーティングシステム１３４の一部であるローダ２２０をロードする。オペレーティングシステムが十分に機能的になった後には、ハードディスク１４１、ＣＤ ＲＯＭ１５６、あるいはネットワーク１７１または１７３においてさえも配置され得るアプリケーションプログラム１３５のような様々なプログラムを配置し、ロードすることができる。プログラムを配置した後に、オペレーティングシステムは引き続き選択されたプログラムをＲＡＭ１３２にロードし、その結果、プログラム命令が実行することができる。ロードされたプログラムは、さらにまたロードされることを必要とする自身の要素を有してもよく、ローダ２２０は、この動作に関与する。
【００２９】
上述したように、コンピュータ機器は、システム上にて実行する様々なモジュールの完全性を検証する。それは鍵の使用を介して行う。鍵は、ディスクドライブ１４１の暗号化された一部でありうる安全な場所に記憶されたり、安全なメモリの場所またはその他の場所に埋め込まれる。本発明の実施態様において、鍵は企業内の中央でドメイン制御装置によって割り当てられ管理される。
【００３０】
本発明の実施態様において、ローカルに記憶された鍵２２５はローダ２２０によって取り出される。ローカルに記憶された鍵２２５は、コンピューティングシステムにおいて固有のものであることができ、そしてシステムをさらに安全にするために鍵の値を決定することをより困難にすることによって、時間とともに変更されることができる。ローカルに記憶された鍵２２５は、コンピュータ機器によって合成されてもよいし、たとえばコンピュータ機器の製造中にコンピュータ機器の内部に配置されてもよい。それゆえ、ローダがオペレーションシステムのいずれかの部分をロードし制御を渡す前に、まず最初にオペレーションシステムコードを検証しなければならない。本発明の一態様によると、ブートシーケンスの各部分は、ローカルに記憶された鍵２２５を用いて署名される。それから、オペレーションシステムの各部分がロードされる前に、そのコードが少なくともローカルに記憶された鍵２２５によって署名されていること、およびそのコード部分は修正されていないことを確認するために検証が実行される。
【００３１】
カーネル２３０は、オペレーションシステム１３４の中心部分であり、コンピュータ１１０を管理するモジュールとして考えることができる。従って、カーネル２３０がいずれの悪意のコードにも感染していないことがとても重要である。悪意のコードをカーネルにおいて実行することを許可することは、惨事となりうる。カーネルは、一般的に、オペレーションシステムがロードする最初の部分であり、システムの制御を得る前にローカルに記憶された鍵によって検証を経験もしなければならない。基本的な、しかし非常に重要なオペレーティングシステムのサービスがカーネル２３０によって提供され管理される。カーネルは、メモリ管理、プロセスとタスク管理、およびディスク管理に責任を負っている。アプリケーションプログラム１３５は、カーネル２３０の様々なサービスを要求する。典型的には、そのサービスのために競合するすべての要求を処理するための割り込みハンドラー、プロセスの順番を決定するためのスケジューラ、各スケジュール化されたプロセスを完了するためにコンピュータ１１０の使用を許可するためのスーパーバイザーを含む。カーネル２３０は常に使用され、コンピュータ１１０のメインメモリに滞在し、それゆえ、通常は、保護されたコンピュータ記憶領域にロードされる。カーネル２３０は、実行可能ファイル２４０を実行許可する前に、実行可能ファイル２４０の完全性チェックを実行する。
【００３２】
実行可能ファイル２４０は、プログラムを含むファイルであり、コンピュータ１１０におけるプログラムとして実行されることができる。実行可能ファイル２４０が実行することを選択された場合には、オペレーティングシステム１３４はそのプログラムを実行する。実行可能ファイル２４０は、バイナリ値の連続であるためバイナリと呼ばれることもある。とはいうものの、プログラムの中には厳密に言えばバイナリファイルではないものであっても実行可能と考えられるものがあり得る。たとえば、バイトコードプログラムはコンピューティングシステム上で実行することを意図されているため、実行可能と考えられる。そのほかの信頼できるプログラムである実行可能ファイル２４０は、悪意のコードを含むために変更されうる。それゆえ、信頼できるソースから受け取ったファイルだけを実行することおよびファイルが動作の間で修正されなかったことを確認することの重要性を説明する。
【００３３】
図２は、システムスタートアップの間の様々な構成の完全性をチェックするプロセスをさらに明示する。最初に、ＢＩＯＳ１３３は、ブートブロック２１０に実行制御を転送する前にブートブロック２１０の完全性をチェックする。もちろん、ＢＩＯＳ１３３は不揮発性メモリに記憶されており、そのため、変更されることは不可能である。それゆえ、完全性をチェックすることは必ずしも要求されない。制御がブートブロック２１０に渡した後は、ブートアッププロセスの一部、すなわち、オペレーティングシステム１３４の残りの部分をロードするローダ２２０をロードすることを実行する。制御を渡す前に、ブートブロック２１０はローダ２２０の完全性を検証する。同様に、ローダはオペレーションシステムカーネル２３０をロードする。しかし、カーネル２３０をロードする前に、ローダ２２０はカーネル２３０の完全性を検証する。その後、コンピュータ機器１１０の動作の通常のコースの間に、ユーザはコンピュータ機器１１０上にて様々なプログラムやアプリケーションを実行するであろう。それらのプログラムやアプリケーションもまた検証されることを必要とする。よって、それからカーネル２３０が実行可能ファイル２４０の完全性を確認した後に、実行制御はカーネル２３０から実行可能ファイル２４０へと渡される。
【００３４】
本発明の一態様では、ローダ２２０が、ＣＤＲＯＭまたはＤＶＤのような取り外し可能不揮発性光ディスク１５６、または磁気テープカセットのような取り外し可能不揮発性磁気ディスク１５２のようなコンピュータ読み取り可能メディア上で利用可能なコードの読み取り専用コピーであることを提供する。ローダ２２０は、本実施形態において、書き込み可能メディアであるカーネル２３０に実行制御を転送する前に、コンピュータ読み取り可能メディアからカーネル２３０の完全性を認証する。本実施形態では、読み取り専用メディアは外部のウィルス作者によって変更されることが不可能であるので、追加的な保護手段をもたらす。
【００３５】
本発明は、実行可能ファイルやブートプログラムのみの完全性チェックになんら限定されるものではない。実際、完全性チェックは、なんら限定されるわけではないが、バイトコードファイル、実行可能ファイル、およびスタートアッププログラムを含むいずれのプログラムにおいても実行されることができる。
【００３６】
さらには、本発明は、コンピューティングシステムの全てのプログラムの実行前における完全性チェックの実装に制限されることはない。本発明によるチェックは、一または複数の選択されたプログラムのために実行されてもよい。
【００３７】
図３ａおよび図３ｂは図２で示したステップを発展させた図である。このように、実行制御が転送される前に様々な完全性チェックが実施されるステップが示される。さらには、完全性チェックは、各レベルに限定されず、ブートプログラムに限定されず、むしろどのようなタイプのプログラムにおいても実行されることができる。本発明によれば、プログラムの例示は、限定されるものではないが、実行可能ファイル、ブートおよびスタートアップファイル、バッチプログラム、およびスクリプトを含む。いくつかの例は、ブートブロック、ローダコード、カーネル、および実行可能ファイルまたはロードされたイメージである。
【００３８】
図３ａのステップ３００において、ＢＩＯＳ１３３は、最初にスタートアッププロセスを制御し、様々な付属物（Attachments）の動作可能性を確認した後に、オペレーションシステム１３４をＲＡＭ１３２にロードするプロセスを開始する。ＢＩＯＳ１３３は、通常、不揮発性メモリに記憶され、コンピュータ機器のブートアップの間、揮発性メモリ（すなわちＲＡＭ１３２）に移される。この理由のために、ＢＩＯＳ１３３は、容易に変更されないために自分自身を検証しないでよい。それにもかかわらず、コンピュータ機器１１０上で動作する他のプログラムモジュールと同様の検証プロセスをＢＩＯＳに受けさせるプレＢＩＯＳ検証ステップが実行されることができる。これは、ＢＩＯＳがフラッシュメモリに記憶され、または、ＢＩＯＳ自身が置き換わっていなかったことを確認することを欲した場合において、特に当てはまる。ステップ３１０において、ＢＩＯＳ１３３によって、ブートブロック２１０の完全性がチェックされる。ステップ３２０において、完全性が十分に検証された場合には、ステップ３３０にて、ＢＩＯＳ１３３は、ブートブロック２１０をＲＡＭ１３２にロードし、システムの実行制御をブートブロック２１０に渡す。完全性が確認されなかった場合には、ステップ３４０にてブートサイクルは停止される。
【００３９】
ブートブロック２１０が実行制御を受け取ると、ブートブロック２１０は、オペレーティングシステム１３４の残りの部分をステップ３５０にてＲＡＭ１３２にロードする。ブートブロック２１０もまた実行制御をローダ２２０に渡す前にローダの２２０の完全性をチェックする。ローダの２２０完全性チェックは、ステップ３６０で実行される。ローダ２２０完全性が確認されなかった場合には、サイクルはステップ３４０にて停止される。ブートブロック２１０がローダ２２０の完全性が満足できるものであることを検出した場合には、ブートブロック２１０は、ステップ３７０においてブートブロック２１０は実行制御をローダ２２０に渡す。ローダ２２０は、ユーザによって実行されることが選択されたプログラムをＲＡＭ１３３に格納したりロードすることに対して責任を負う。この格納とロード動作はステップ３８０で行われる。
【００４０】
図３ｂのステップ３９０において、ローダ２２０は、カーネル２３０の完全性を検証する。先般の完全性チェックと同様に、４００にてチェックが完全性を確認した場合には、転送制御は、ステップ４１０にてローダ２２０からカーネル２３０に送信される。完全性が確認されなかった場合には、ステップ４２０へとプロセスは続き、そこでサイクルが停止される。
【００４１】
ステップ４３０において、現在実行制御を保持しているカーネル２３０は、選択されたプログラムの完全性を判断する。ロードされたイメージまたは実行可能ファイルのようなプログラムの完全性がステップ４４０にて確認された場合には、コンピューティングシステムの実行制御は、ステップ４５０にてプログラムに転送され、その結果、選択されたプログラムが実行されることが可能となる。プログラムの完全性が確認されなかった場合には、ステップ４２０でサイクルは停止され、プログラムは実行制御を受信しない。
【００４２】
先般のフローチャートは、どのくらい完全性チェックが様々な転送制御ポイントで実行されるのかを説明する。図４は、それを発展させ、完全性検証プロセス自身のブロック図表現を提供する。たとえば、プログラムは、なんら限定されるものではないが、ブートプロセスに関係のあるモジュールの一部、オペレーティングシステムまたはアプリケーションプログラムがプログラム５００によって表される。本発明のひとつの目的は、次に行われる動作において、プログラム５００が変更されたかを決めることである。ある種の修正が発生した場合には、システムはプログラム５００を再実行することは安全ではないことを決定する。説明されたプロセスは、プログラムが変更されていないことを決めるためにチェックが実行されることを示すが、プログラムの一部のみが検証される場合があってもよく、システムは他のプログラムの部分が時間の経過とともに変更することを許可する場合があってもよい。これは、特に変更することを許可されるプログラムの部分が、コードではなくプログラムによって使用されるデータを含む場合である。このような場合において、プログラム５００の一部は、悪意のコードを導入することなしに正当に変更することができると決められることができる。
【００４３】
最初に、プログラム５００の固有の表現Ａ５１０が作り出される。固有の表現は、様々な機能のいずれか一つによって作り出されることができ、その機能はプログラム５００の圧縮された表現を生成する。表現は、適度な一意性を有するように形成される。
【００４４】
表現５１０を作り出すために使用された機能の一例は、ハッシュ法アルゴリズムである。周知のハッシュ法アルゴリズムは、Ｓｅｃｕｒｅ Ｈａｓｈ Ａｌｇｏｒｉｔｈｍ（ＳＨＡ １）およびＭＤ５を含む。しかしながら、表現を生成するための他のアルゴリズムまたは機能が採用されてもよく、本発明は、特定のアルゴリズムや機能に決して限定されない。
【００４５】
表現Ａ５１０は、その後、電子署名５２０を形成するために暗号化される。電子署名５２０は、プログラム５００の固有かつ安全な表現を表す。暗号化プロセスには多くのものが知られている。本発明は、決して限定されるものではないが、公開鍵／秘密鍵暗号化、対称暗号化（symmetric encryption）、および非対象暗号化(asymmetric encryption)を採用することができる。
【００４６】
電子署名５２０が復号化されると、その結果は固有の表現Ａ５１０になる。使用された復号化機能は、採用された特定の暗号化機能と一致する。たとえば、表現Ａ５１０は、秘密鍵を使用して暗号化された場合には、復号化はその秘密鍵と対応する公開鍵で生成されるだろう。
【００４７】
その後、次のプログラム５００のロードオペレーションのために、プログラム５００が変更されたかを決めるために検証が要求される。次の動作のためのプログラムは、図４にて承認（confirmation）５３０として表示される。確認５３０の固有の表現が形成され、その結果、固有の表現Ｂ５４０となる。固有の表現Ｂ５４０の作成は、固有の表現Ａの作成と類似しているはずである。
【００４８】
固有の表現Ｂ５４０が、電子署名５２０の復号化である固有の表現Ａ５１０と一致した場合には、承認(confirmation)５３０は、プログラム５００と同じである。このように、プログラム５００は、変更されておらず、コンピューティングシステムにとってプログラム５００を実行し、ロードすることは安全である。しかしながら、もし固有の表現Ｂ５４０が固有の表現Ａ５１０と一致しない場合には、プログラム５００は、どこかで変えられており、ローディングは発生すべきではない。
【００４９】
図５は、プログラム５００は変更されておらず、したがって次の動作のために再実行されることを許可されることを確認するためのローカルに記憶された署名鍵２２５を使用する方法を明示するフローチャートである。図５に示される方法は、公開鍵／秘密鍵暗号化を使用するが、他の暗号化方法が採用されてもよい。
【００５０】
カーネル２３０のようなプログラム５００が受信されると、プログラム５００の固有の表現Ａ５１０が方法のステップ６００にて、作り出される。ハッシュ法アルゴリズム、または圧縮されたプログラム５００の表現を作成する他のいずれの機能は、固有の表現Ａ５１０を作り出すために使用されてもよい。表現は、適度な一意性を有するように形成される。固有の表現Ａ５１０は、ステップ６１０において、ローカルに記憶された鍵２２５で暗号化される。この鍵は、上記にて詳細に説明されたように、機械において固有のものであるため、プログラム５００は決定されない。暗号化は、電子署名５２０を表現し、ステップ６２０にて、プログラム５００と関連付けられる。そのためには、電子署名は、プログラム５００に直接付加されてもよいし、プログラム５００から独立して記憶されてもよく、そして、プログラムと電子署名との関連付けは、他のプロセスによって追跡される。
【００５１】
署名されたプログラム５００は、システムがプログラム５００をリロードまたは再実行を試みるまで記憶される。システムが続いてプログラム５００をロードしようとした時には、暗号化された電子署名５２０はステップ６３０において公開鍵で復号化される。公開鍵は秘密鍵／公開鍵ペアーの一部であり、本発明の一態様においては、ローカルに記憶された鍵は秘密鍵である。先に記載したように、対称暗号化（symmetric encryption）技術のような他の暗号化スキームが検討される。
【００５２】
承認（confirmation）５３０の固有の表現Ｂ５４０がステップ６４０にて作り出される。この固有の表現Ｂ５４０は、ステップ６００にてプログラム５００の表現が形成されたことと同じ方法で形成されなければならない。たとえば、同じハッシュ法アルゴリズムが両方の動作のために使用されることが必要である。承認(confirmation)５３０の表現は、ステップ６５０において、電子署名５２０の復号化と比較される。ステップ６６０において、比較は結果が一致するかをチェックされる。結果が一致である場合には、ステップ６７０にて、一致は、プログラム５００が修正されておらず、承認（confirmation）ファイル５３０が実際にプログラム５００であることを示すので、プログラム５００は次の動作のためにロードされることが可能となる。固有の表現Ａ５１０である復号化が、固有の表現Ｂ５４０である新しい表現と一致しない場合には、ステップ６８０にて動作が停止される。この不一致は、プログラム５００が修正されており、破損されたかもしれないことを示す。
【００５３】
このように、本方法は、実行に先立って修正されていないプログラムのみがシステムにおいてロードされ、実行されるであろうことを確認する。
【００５４】
本発明の一態様において、ユーザが最初にアプリケーション、プログラム、またはコードモジュールをダウンロードおよび／または、さもなければインストールするときは、システムはシステム全体の完全性を確認しようと試みる。そのためには、プログラムは第三者署名システムおよび信頼できる局を使用することを独立して検証されることができる。しかしながら、特定のプログラムにそのような信頼できる署名が全く利用できない場合には、ユーザは特定のプログラムコードを使用することを依然として要望する。さらには、ユーザには、プログラムコードのソースが正当な要素であると信じる十分な理由がある（またはそのような判断を下すために決断することに気持ちが傾かされる）。プログラムコードは第三者署名がないため、コンピュータ機器１１０にロードされた後にプログラムコードが変更されたことができないようにするために、コードをローカル署名鍵２２５で署名させるであろう。そのためには、コンピューティングシステムのユーザは、実行可能ファイル２４０のようなプログラム５００が信頼できるソースからのものであるか否かに関して入力を要求されることが好ましい。ユーザが、そのソースは信頼できるものであると信じる場合には、プロセスはユーザがそのように指示することにより継続する。しかしながら、ユーザが、そのソースが信頼できるものと信じない場合には、プログラム５００がシステムにロードされ、またはインストールされることなく、終了するだろう。
【００５５】
上記の説明から明らかなように、本発明のシステムおよび方法の全部または一部は、ハードウェア、ソフトウェア、または両者の組み合わせによって実現される。ソフトウェアに実現されると、本発明の方法および装置、またはそれらのある側面またはある部分は、プログラムコード（すなわち、命令）の形式に実現されることができる。このプログラムコードは、コンピュータ読み取り可能媒体に記憶されることができ、そこに、プログラムコードがロードされ、コンピュータ１１０のような機械によって実行されるときは、その機械は発明を実施するための装置となる。コンピュータ読み取り可能メディアは、限定されるわけではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）または他の光ディスクストレージ、メモリカード、メモリスティック、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは所望の情報を格納するのに使用することができ、コンピュータ１１０がアクセスすることができる任意の他のメディアを含む。プログラムコードは、好ましくは、コンピュータシステムと通信するために高水準の手続き型プログラミング言語か、オブジェクト指向型プログラミング言語で実装されることができる。あるいは、プログラムコードはアセンブリまたは機械語で実装されることができる。いずれにせよ、プログラムコードはコンパイルされた形式で、または解釈によって実行されることができる。
【００５６】
前述で示すように、本発明は、検証されたプログラムのみがシステムで実行されること、およびプログラムコードは実行に先駆けて修正も変更もされていないことを確認するためのシステムと方法に関する。広い発明概念を逸脱することなく上記説明された態様を変更できることを理解されたい。たとえば、本発明は、上記でコンピュータ１１０に実装されるとして説明されたが、本発明は、例として、そしてなんら限定されるものではないが、衛星放送受信機、セットトップボックス、アーケードゲーム、パーソナルコンピュータ（ＰＣ）、携帯電話、パーソナルデジタルアシスタント（ＰＤＡ）、および他のハンドヘルドデバイスを含む他の多くのタイプのコンピュータ機器で具体化できることを理解されたい。従って、本発明は、シミュレーション、イメージ、ビデオ、オーディオ、テキスト、ゲーム、オペレーティングシステム、アプリケーションプログラム、または任意の他の形態のソフトウェアのデジタルデータやプログラムコードに適用されることができる。さらに、本発明の方法とシステムは、たとえば、限定されないが、ほとんどの任意のタイプのメディアで、または、無線周波数送信および光信号を含むほとんどの任意のタイプの伝搬媒体を介して分配される、ほとんどの任意のタイプのネットワーク上のデジタルデータおよびプログラムコードへのアクセス制御に容易に適用され、またはアクセス制御で用いるため容易に修正されることができる。したがって、本発明は、開示された特定の態様に限定されるものではなく、特許請求の範囲に定義されたような発明の精神と範囲において全ての修正をカバーすることを目的としていると解される。
【図面の簡単な説明】
【００５７】
【図１】本発明が具体化され得るコンピューティング環境の例示的なブロック図である。
【図２】オペレーションシステムにおけるブート周期の間の転送制御の繋がりを説明するブロック図である。
【図３ａ】本発明による完全性チェックの実施を説明するフローチャートである。
【図３ｂ】本発明による完全性チェックの実施を説明するフローチャートである。
【図４】プログラムが修正されたか決定するために使用されるプログラムの構成と、プログラムの表現のブロック図である。
【図５】プログラムを検証するためのローカルに記憶された署名鍵の使用を明示するためのフローチャートである。
【図１】
2008537224.tif 000003
【図２】
2008537224.tif 000004
【図３ａ】
2008537224.tif 000005
【図３ｂ】
2008537224.tif 000006
【図４】
2008537224.tif 000007
【図５】
2008537224.tif 000008
【国際調査報告】
2008537224.tif 000009