(57)【要約】  実行する第１のコンピューティング・モジュールは、未検証の第２のコンピューティング・モジュールのランタイム起源を検証する。第２のコンピューティング・モジュールの作成者を識別する署名された証明書が、第１のコンピューティング・モジュールにおいて受信される。署名された証明書と、第２のコンピューティング・モジュールとの間の関連付けが、検証される。次いで、第１のコンピューティング・モジュールによって署名され、また第２のコンピューティング・モジュールのランタイム起源を識別する第１の起源証明書、および関連する秘密キーが、生成され、また第１の起源証明書は、第２のコンピューティング・モジュールに対して発行される。起源証明書および静的識別証明書を含む署名された証明書のチェーンが、発行される可能性がある。チェーンの中の各起源証明書は、実行のレイヤのインテグリティを検証し、また複数の静的識別証明書は、ソフトウェアの各レイヤに関連するコンピューティング・モジュールのそれぞれの作成者を識別する。第２のコンピューティング・モジュールの起源は、証明書の発行されたチェーンを通して再帰的にトレースされる可能性がある。
2014526101.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ・プログラムを検証するための方法であって、
第１のコンピューティング・モジュールにおいて第２のコンピューティング・モジュールからの少なくとも１つの署名された証明書を受信するステップであって、前記第２のコンピューティング・モジュールからの前記少なくとも１つの署名された証明書は、前記第２のコンピューティング・モジュールの作成者を識別し、前記第１のコンピューティング・モジュールは、プロセッサを備え、前記第２のコンピューティング・モジュールは、ブート・プロセスを含む、受信するステップと、
前記少なくとも１つの署名された証明書と、前記第２のコンピューティング・モジュールとの間の関連付けを検証するステップと、
前記第１のコンピューティング・モジュールによって生成される公開／秘密キー対を使用して前記第１のコンピューティング・モジュールによって署名される第１の起源証明書を生成するステップであって、前記第１の起源証明書は、前記公開／秘密キー対からの公開キー、およびリセットの後に実行される前記ブート・プロセスのブート・イメージのランタイム起源を識別する、生成するステップと
を含む方法。
【請求項２】
前記第２のコンピューティング・モジュールにおいて、前記第１の起源証明書を受信するステップと、
前記第２のコンピューティング・モジュールにおいて、第３のコンピューティング・モジュールからの少なくとも１つの署名された証明書を受信するステップであって、前記第３のコンピューティング・モジュールからの前記少なくとも１つの署名された証明書は、前記第３のコンピューティング・モジュールの作成者を識別する、受信するステップと、
識別する前記第３のコンピューティング・モジュールからの前記少なくとも１つの署名された証明書と、前記第３のコンピューティング・モジュールとの間の関連付けを検証するステップと、
前記第２のコンピューティング・モジュールによって生成される公開／秘密キー対を使用して、前記第１の起源証明書に基づいて、第２の起源証明書を生成するステップであって、前記第２の起源証明書は、前記第２のコンピューティング・モジュールによって生成される前記公開／秘密キー対からの公開キー、および前記第３のコンピューティング・モジュールのランタイム起源を識別する、生成するステップと
をさらに含む、請求項１に記載の方法。
【請求項３】
前記第２のコンピューティング・モジュールに対して署名された証明書のチェーンを発行するステップをさらに含み、署名された証明書の前記チェーンは、複数の起源証明書および複数の静的識別証明書を含み、実行のレイヤに関連する各起源証明書および各静的識別証明書は、ソフトウェア実行の各レイヤに関連するソフトウェアのそれぞれの作成者を識別する、請求項１に記載の方法。
【請求項４】
コンピュータ・プログラムを検証するためのシステムであって、
第１のコンピューティング・モジュールにおいて第２のコンピューティング・モジュールからの少なくとも１つの署名された証明書を受信するための手段であって、前記第２のコンピューティング・モジュールからの前記少なくとも１つの署名された証明書は、前記第２のコンピューティング・モジュールの作成者を識別し、前記第１のコンピューティング・モジュールは、プロセッサを備え、前記第２のコンピューティング・モジュールは、ブート・プロセスを含む、受信するための手段と、
前記少なくとも１つの署名された証明書と、前記第２のコンピューティング・モジュールとの間の関連付けを検証するための手段と、
前記第１のコンピューティング・モジュールによって生成される公開／秘密キー対を使用して前記第１のコンピューティング・モジュールによって署名される第１の起源証明書を生成するための手段であって、前記第１の起源証明書は、前記公開／秘密キー対からの公開キー、およびリセットの後に実行される前記ブート・プロセスのブート・イメージのランタイム起源を識別する、生成するための手段と
を備えるシステム。
【請求項５】
前記第１のコンピューティング・モジュールは、証明書と、前記証明書に関連する秘密の公開キーとを含んでおり、前記証明書は、前記第１のコンピューティング・モジュールを実行するハードウェアを記述している、請求項４に記載のシステム。
【請求項６】
前記第２のコンピューティング・モジュールに対して署名された証明書のチェーンを発行するための手段をさらに備え、署名された証明書の前記チェーンは、信頼されている証明機関によって発行され、また第１のコンピューティング・モジュールの作成者を識別する少なくとも１つの証明書を含み、署名された証明書の前記チェーンは、複数の起源証明書および複数の静的識別証明書を含み、実行のレイヤに関連する各起源証明書および各静的識別証明書は、ソフトウェア実行の各レイヤに関連するソフトウェアのそれぞれの作成者を識別する、請求項４に記載のシステム。
【請求項７】
前記少なくとも１つの署名された証明書は、信頼されている証明機関によって発行される少なくとも１つの証明書、および前記少なくとも１つの署名された証明書の別のものによって署名される少なくとも１つの証明書を含む署名された証明書のチェーンを含み、
前記署名された証明書と、前記第２のコンピューティング・モジュールとの間の関連付けを検証するための前記手段は、前記信頼されている証明機関によって発行される前記少なくとも１つの証明書に対して前記少なくとも１つの署名された証明書の署名をトレースしてさかのぼるための手段を備える、請求項４に記載のシステム。
【請求項８】
コンピューティング・デバイスによる実行に応じて、
第１のコンピューティング・モジュールにおいて第２のコンピューティング・モジュールからの少なくとも１つの署名された証明書を受信するステップであって、前記第２のコンピューティング・モジュールからの前記少なくとも１つの署名された証明書は、前記第２のコンピューティング・モジュールの作成者を識別し、前記第１のコンピューティング・モジュールは、プロセッサを備え、前記第２のコンピューティング・モジュールは、ブート・プロセスを含む、受信するステップと、
前記少なくとも１つの署名された証明書と、前記第２のコンピューティング・モジュールとの間の関連付けを検証するステップと、
前記第１のコンピューティング・モジュールによって生成される公開／秘密キー対を使用して前記第１のコンピューティング・モジュールによって署名される第１の起源証明書を生成するステップであって、前記第１の起源証明書は、前記公開／秘密キー対からの公開キー、およびリセットの後に実行される前記ブート・プロセスのブート・イメージのランタイム起源を識別する、生成するステップと
を含むオペレーションを実行するように前記コンピューティング・デバイスにさせるコンピュータ読取り可能媒体符号化命令を含む装置。
【請求項９】
前記オペレーションは、前記第２のコンピューティング・モジュールに対して前記第１の起源証明書を発行するステップをさらに含む、請求項８に記載の装置。
【請求項１０】
前記第２のコンピューティング・モジュールに対して署名された証明書のチェーンを発行するステップをさらに含み、署名された証明書の前記チェーンは、複数の起源証明書および複数の静的識別証明書を含み、実行のレイヤに関連する各起源証明書および各静的識別証明書は、ソフトウェア実行の各レイヤに関連するソフトウェアのそれぞれの作成者を識別する、請求項８に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、プログラミング・コードを信頼できるように識別することを対象としており、またより詳細には、コンピューティング・プラットフォームのランタイム・インテグリティを信頼できるように識別することを対象としている。
【背景技術】
【０００２】
ソフトウェアおよびファームウェアを含んでいるコンピュータ・コードの信頼性またはインテグリティは、確認し、保証することが難しい。ソフトウェアが、インストレーションまたは実行に先立って修正されているかどうかについての制限された決定が、様々なコード署名技法（ｃｏｄｅ−ｓｉｇｎｉｎｇ  ｔｅｃｈｎｉｑｕｅｓ）を用いて達成されることもある。例えば、信頼されている機関によって発行される暗号化キー（例えば、公開／秘密キー）を使用して、ソフトウェア・ベンダーは、秘密キーを用いてファイル（例えば、ソフトウェア・プログラム）にデジタル署名することができる。エンド・ユーザは、ソフトウェア・ベンダーの公開キーを使用して、ファイルの作成者を検証することができる。ファイルに基づいて計算されるハッシュ・コード（例えば、暗号化ハッシュ）を使用して、ファイルが、ソフトウェア・ベンダーによって署名された後に修正されていないことを検証することができる。
【０００３】
これらの技法は、基礎となっているコード（例えば、実行可能なファイルまたはスクリプト）が、それが、例えば、暗号化ハッシュを使用してソフトウェア・ベンダーによって署名されて以来、変更されても、または破損されてもいないことを保証しようと試みる。しかしながら、そのような技法は、静的なファイル・アイデンティティのインテグリティ（すなわち、コンピュータ読取り可能媒体に対して書き込まれるようなファイル・データのインテグリティ）を検証することだけに制限される。
【発明の概要】
【課題を解決するための手段】
【０００４】
本発明の一実施形態に従って、実行する第１のコンピューティング・モジュールによって受信される第２のコンピューティング・モジュールの署名された証明書を、証明することができる。少なくとも１つの署名された証明書が、第１のコンピューティング・モジュールにおいて第２のコンピューティング・モジュールから受信され、その署名された証明書は、第２のコンピューティング・モジュールの作成者を識別している。署名された証明書と、第２のコンピューティング・モジュールとの間の関連付けが、検証される。その関連付けは、ハッシュ値を比較することにより、検証される。第１のコンピューティング・モジュールによって署名される第１の起源証明書が、その関連する公開／秘密キー対と一緒に生成され、第１の起源証明書は、第２のコンピューティング・モジュールのランタイム起源を識別している。
【０００５】
一実施形態に従って、第１の起源証明書および関連する公開／秘密キー対が、第２のコンピューティング・モジュールに対して発行される。
【０００６】
上記で論じられたランタイム起源は、実行するソフトウェア・モジュールおよびランタイム環境を識別するために有用である。例えば、第２のコンピューティング・モジュールは、第３のコンピューティング・モジュールを受信するためのローダを実行することができ、またローダとすることができる。それゆえに、第２のコンピューティング・モジュールは、上記で説明される第１のコンピューティング・モジュールが第２のコンピューティング・モジュールと対話するのと同様にして、第３のコンピューティング・モジュールと対話することができる。一実施形態に従って、第２のコンピューティング・モジュールは、第３のコンピューティング・モジュールから少なくとも１つの署名された証明書を受信し、その署名された証明書は、第３のコンピューティング・モジュールの作成者を識別している。署名された証明書と、第２のコンピューティング・モジュールとの間の関連付けは、ハッシュ値を比較することにより検証される。第２のコンピューティング・モジュールによって署名される第２の起源証明書が、第２のコンピューティング・モジュールの秘密キー対を使用して第１のコンピューティング・モジュールによって署名される第１の起源証明書に基づいて生成され、その第２の起源証明書は、第３のコンピューティング・モジュールのランタイム起源を識別している。
【０００７】
一実施形態に従って、署名された証明書のチェーンが、第２のコンピューティング・モジュールに対して発行される。署名された証明書のチェーンは、信頼されている証明機関によって発行される少なくとも１つの証明書を含んでおり、また第１のコンピューティング・モジュールの作成者を識別する。署名された証明書のチェーンは、複数の起源証明書を含んでおり、実行のレイヤに関連する各起源証明書および各静的識別証明書は、ソフトウェア実行の各レイヤに関連するソフトウェアのそれぞれの作成者を識別している。
【０００８】
一実施形態に従って、少なくとも１つの署名された証明書は、信頼されている証明機関によって発行される少なくとも１つの証明書、および少なくとも１つの署名された証明書についての、別のものによって署名される少なくとも１つの証明書を含む署名された証明書のチェーンを含んでいる。署名された証明書と、第２のコンピューティング・モジュールとの間の関連付けを検証するステップは、信頼されている証明機関によって発行される少なくとも１つの証明書に対して少なくとも１つの署名された証明書についての署名をトレースするステップを含んでいる。
【０００９】
一実施形態に従って、第１のコンピューティング・モジュールは、ハードウェア・ブート・プロセスと、ハードウェア・デバイスを識別する証明書とを含んでいる。初期のソフトウェア・イメージは、ハードウェア・コンピューティング・デバイスによって検証される。署名された証明書が、ハードウェア・ブート・プロセスによって生成されて、コンピューティング・デバイスが、初期ソフトウェア・イメージを検証し、またリセットの後に直ちに初期のソフトウェア・イメージを実行したことを認証する。
【００１０】
一実施形態に従って、第１のコンピューティング・モジュールは、クラウド・コンピューティング・サービスを含んでいる。
【００１１】
これらおよび他の特徴は、説明および図面を考慮して、当業者によって理解されるであろう。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態による、コンピューティング・モジュールのランタイム起源を確立するためのプロセスの流れ図である。
【図２】本発明の一実施形態による、コンピューティング・モジュールのランタイム起源を表す証明書のチェーンの説明図である。
【図３】本発明の一実施形態に従って構成され得るコンピュータの高レベル図である。
【発明を実施するための形態】
【００１３】
コンピュータ・コードを含むファイル（または複数のファイル）（例えば、実行可能ファイルまたはスクリプト・ファイル）に署名するための様々な技法が、存在している。ファイルを署名することは、ファイルに含まれるコンピュータ・コードの作成者が、実際にコンピュータ・コードの作成者であることを要求しているエンティティを識別し、またコンピュータ・コードが、そのファイル（単数または複数）が署名された後に変更されなかったことを検証する。しかしながら、そのようなファイル署名技法は、保証が、署名されたファイルの中のコンピュータ・コードとインターフェースする他のソフトウェアまたはコンピューティング・モジュールの証明書のインテグリティまたは作成者であることについて提供されない点で制限されている。それゆえに、不安定さとぜい弱性とは、実行するコンピュータ・コードとインターフェースするソフトウェアの他のレイヤにおいて導入される可能性がある。
【００１４】
例えば、文書処理プログラムについてのプログラミング・コードを含むファイルは、そのファイルが、作成者であることを主張するエンティティによって書かれたことを識別するために、またそのファイルが、署名された後に変更されなかったことを検証するために、その作成者によって署名される可能性がある。しかしながら、文書処理プログラムは、オペレーティング・システム「の上で」実行される。すなわち、文書処理プログラムは、オペレーティング・システムによってロードされ、またオペレーティング・システムによって提供されるランタイム環境において実行される。文書処理プログラムを含むファイルの署名を検証することは、オペレーティング・システムが、信頼できるという保証を提供するものではない。同様に、オペレーティング・システムは、仮想化環境によってロードされることもある。たとえ文書処理プログラムを含むファイルと、オペレーティング・システムを含むファイル（単数または複数）が署名されるとしても、これらの署名は、仮想化環境が、信頼できることを保証するものではない。さらなる一例においては、ソフトウェア・コンポーネントによってアクセスされるネットワーク・リソース、サード・パーティ・ソフトウェア・ライブラリ、またはクラウド・コンピューティング・サービスは、システムにおけるセキュリティ・リスクの源泉となる可能性がある。コンピュータ・プログラムによってアクセスされる任意のリソースの信頼性は、個々のソフトウェア・コンポーネントを記述するファイルに署名することによって保証されるものではない。さらに、ファイル署名技法は、ソフトウェア・コンポーネントの起源と、そのソフトウェア・コンポーネントによるすべてのレイヤおよびリソースのアクセスとの検証を提供してはいない。
【００１５】
図１は、本発明の一実施形態による、コンピューティング・モジュールのランタイム起源を確立するためのプロセス１００の流れ図である。この考察の目的のために、コンピューティング・モジュールが、参照される。しかしながら、当業者なら、コンピューティング・モジュールが、実行可能ソフトウェア、ソフトウェア・ライブラリ、ファームウェア、ブート・コード、ネットワーク・サービス、または他のコンピュータ・リソースを含むことができることを理解するであろう。
【００１６】
ソフトウェア・ランタイムの起源は、ブートストラップ・プロセスにおいてコードをロードする各ステージにおいて実行される再帰的アルゴリズムである。最終的な実行プログラムは、プロセッサがリセットされて以来実行されるソフトウェアの各レイヤを説明する証明書のチェーンに対するアクセス権を有する。証明書のこのチェーンにおけるアンカーは、プロセッサそれ自体を説明するハードウェアにより提供された証明書である。ハードウェアにより提供された証明書は、プロセッサの製造業者によってあらかじめロードされ、またそのハードウェア・セキュリティ特性が、十分に説明されるハードウェアを十分に識別する。ハードウェアにより提供された証明書は、プロセッサが、物理的にセキュリティ保護されており、潜在的なセキュリティの漏洩を有するソフトウェア・エミュレーションではないという認証として提示される可能性がある。例えば、証明書は、モデル８０３２１３４８を示しており、また製造業者は、セキュリティ保護されたブート・プロセスを提供すること、ＤＲＡＭインターフェースと、ロックされたＪＴＡＧアクセス・ポートとを暗号化することとして、すべての８０３２１３４８プロセッサを規定する。そのような情報は、ハードウェア・プロセッサの上で実行されるプログラムが、外部のハードウェア・プロ−ビングから安全になることをリモート・ユーザに確信させることになる。
【００１７】
本明細書において説明されるソフトウェア・ランタイム起源アルゴリズムは、ソフトウェアの各レイヤが、ロードされ、また実行されるときに、再帰的に実行されることもある。ソフトウェアのローディングは、「ローディング」エージェントと、ひとたびロードされた後に、それ自体、後続のソフトウェア・モジュールのためのローディング・エージェントになり得るソフトウェア・モジュールとによって容易にされる。ローディング・エージェントは、それ自体の経歴または起源を説明する証明書のチェーンを含んでいる。証明書のこのチェーンのうちの最後のものは、ローディング・エージェントの公開／秘密キー対のうちの公開物の半分を認証する。
【００１８】
各々のローディング・エージェントまたはローダは、１）証明書のチェーンと、２）そのチェーンの中の最後の証明書によって署名される公開キーに対応する秘密キーとを含んでいる。各ソフトウェア・モジュールは、「コード署名され」ており、また１）静的ビット・イメージと、２）静的証明書チェーンのうちの最後の証明書が、ソフトウェア・モジュールのハッシュを符号化するために使用されるソフトウェア・モジュールの作成者によって保持される秘密キーに関連する公開キーを含んでいる場合の、ソフトウェア・モジュールの起源を規定する関連する静的証明書チェーンと、３）ソフトウェア・モジュールの符号化されたハッシュとを含む。
【００１９】
図１の中の流れ図として示されるプロセス１００は、ソフトウェア・モジュールを検証し、また次いで検証され、またアクティブに実行されるソフトウェア・モジュールに対してデータを伝えるために、ローダによって取られるステップのプロセスであり、その結果、ソフトウェア・モジュールは、ローダの役割を仮定することができ、また後続のソフトウェア・モジュールのローディングを容易にすることができる。プロセス１００に従って、署名された証明書（例えば、Ｘ．５０９証明書）は、ステップ１１０において、未検証の第２のコンピューティング・モジュールから実行する信頼されている第１のコンピューティング・モジュールまたはローダにおいて受信される。信頼されているコンピューティング・モジュールは、プログラムの起源を検証する証明書のチェーンに関連付けられる。証明書のチェーンは、プロセス１００を使用して、または以下で説明されるブートストラップ・メカニズムを経由して、生成される可能性がある。すなわち、プロセス１００は、再帰的に実行されて、追加のコンピューティング・モジュールが、実行する信頼されているコンピューティング・モジュールの上で実行されるときに実行の各レイヤを検証することができる。信頼されている第１のコンピューティング・モジュールまたはローダは、第１のコンピューティング・モジュールを実行しているハードウェアを記述する証明書（統合された静的アイデンティティ証明書チェーンならびに秘密の公開キー）を含むことができる。
【００２０】
ステップ１２０において、署名された証明書と、第２のコンピューティング・モジュールとの間の関連付けが、検証される。署名された証明書は、複数の証明書を含むことができ、これらの証明書のうちの少なくとも１つが、信頼されている機関によって署名される。例えば、ある会社は、信頼されている機関からの証明書を発行されることもある。会社は、この証明書を使用して、追加の証明書に署名することができ、これらの追加の証明書を次には使用して、他の証明書などに署名することができる。署名された証明書と、第２のコンピューティング・モジュールとの間の関連付けの検証は、ハッシュ値を比較することにより実行される。具体的には、第２のコンピューティング・モジュールのハッシュは、ローダによって計算される。次いで、ローダは、証明書の関連する静的チェーンの中の第２のソフトウェア・モジュールの最後の証明書の中の公開キーを使用した第２のコンピューティング・モジュールがある場合には、その暗号化された符号化されたハッシュを暗号解読する。ローダによって計算される計算されたハッシュが、復号されたハッシュにマッチする場合、そのときには第２のソフトウェア・モジュールは、検証されていると見なされる。各ハッシュは、ビットのパターンを表す。署名された証明書と、第２のコンピューティングとの間の関連付けは、署名された証明書のソフトウェア・ハッシュに関連するビットのパターンが、第２のコンピューティング・モジュールのハッシュに関連するビットのパターンにマッチするかどうかをチェックすることによって検証される。ソフトウェア署名についての他の知られている、また従来の方法もまた、可能である。
【００２１】
決定１４０において、署名された証明書と、第２のコンピューティング・モジュールとの間の関連付けが、検証されない場合、プロセス１００は、ステップ１７０において第２のコンピューティング・モジュールに対するアクセスを拒否する。アクセスの拒否は、ソフトウェア・コンポーネントの実行を停止すること、ネットワーク・リソースに対するアクセスを防止すること、またはライブラリをロードすることに失敗することを含むことができる。
【００２２】
署名された証明書と、第２のコンピューティング・モジュールとの間の関連付けが、決定１４０において検証される場合、ステップ１５０において、公開／秘密キー対が、第１のコンピューティング・モジュールまたはローダによって生成される。
【００２３】
ステップ１５５において、第１のコンピューティング・モジュールまたはローダは、第２のコンピューティング・モジュールについての新しい起源証明書を生成する。この新しい起源証明書は、第１のコンピューティング・モジュールまたはローダが、第２のコンピューティング・モジュールを検証しており、またロードしていることを証明する。新しい起源証明書は、その主題としての第１のコンピューティング・モジュールの名前と、ステップ１５０に関して上記で考察された公開／秘密キー対からの新しく生成された公開キーとを含む。新しい起源証明書は、第２のコンピューティング・モジュールのランタイム起源を識別し、またローダの秘密キーを使用して、第１のコンピューティング・モジュールまたはローダによって署名される。したがって、新しい起源証明書は、第１のコンピューティング・モジュールまたはローダの起源証明書チェーンと暗号的に接続される。次いで、この新しい起源証明書は、ローダのランタイム起源証明書チェーンに追加されて、第２のコンピューティング・モジュールについての新しいランタイム起源証明書を形成することができる。
【００２４】
ステップ１６０において、新しい起源証明書は、第２のコンピューティング・モジュールに対して発行される。具体的には、新しいランタイム起源証明書は、ローダによって第２のソフトウェア・モジュールのロードされたイメージに対して発行される。ローダはまた、ローダによって生成される新しく生成された秘密キーを第２のソフトウェア・モジュールのロードされたイメージに対して発行する。
【００２５】
ステップ１６５において、ローダまたは第１のコンピューティング・モジュールの起源証明書のチェーンは、第２のコンピューティング・モジュールに対して発行される。さらに、ローダまたは第１のコンピューティング・モジュールは、第２のコンピューティング・モジュールに関連する識別証明書を第２のコンピューティング・モジュールに対して発行することもできる。これらの識別証明書は、第２のコンピューティング・モジュールの上に存在し、またはファイル・イメージ・アノテーションにおいて使用可能とすることができる。すべての証明書が、発行された後に、ローダは、第２のコンピューティング・モジュールのロードされたソフトウェア・イメージに対して制御を転送し、また第２のコンピューティング・モジュールは、それ自体の公開／秘密キー対を有するアクティブなエージェントまたはローダになり、また後続のコンピューティング・モジュールのローディングを容易にすることができる。第２のコンピューティング・モジュールは、ローダの役割を仮定しており、またこれ以降、それ自体のアイデンティティを示すために提供される証明書を識別するのと同様に、ランタイム環境を記述する起源証明書のチェーンに対するアクセス権を用いて実行することができる。
【００２６】
第２のコンピューティング・モジュールは、今や、プログラムのランタイム起源を検証する証明書のチェーンに関連付けられる。第２のコンピューティング・モジュールは、今や、第１のコンピューティング・モジュールが、第２のコンピューティング・モジュールとの上述の署名された証明書の関連付けを検証したときと同じやり方で、他のコンピューティング・モジュールとの他のコンピューティング・モジュール（例えば、第３のコンピューティング・モジュール）の証明書の関連付けを検証することができる。
【００２７】
コンピュータ・システムは、本発明に従って、ハードウェア・ブート・プロセスと、初期ブート・コード証明書を検証するプロセッサ（第１のコンピューティング・モジュール）と、ブート・コード（すなわち、第２のコンピューティング・モジュール）の署名とを含むことができる。ブート・プロセスは、セキュリティ保護されたプロセッサを有するセキュリティ保護されたコンピューティング・プラットフォームの上で実施される可能性がある。コンピュータは、その製造業者によって署名される証明書（例えば、Ｘ．５０９証明書）と、公開キー・インフラストラクチャ（ＰＫＩ：Ｐｕｂｌｉｃ  Ｋｅｙ  Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）仕様の中で説明されるような公開／秘密キー対とを含むことができる。オプションとして、すべてのオフチップ・データ転送は、ネットワーク通信やＤＲＡＭトランザクションなどのように暗号化されることもある。
【００２８】
ブート・プロセス中に、プロセッサは、プロセス１００において、上記で考察される第１のコンピューティング・モジュールとしての機能を果たし、またブート・イメージは、第２のコンピューティング・モジュールとしての機能を果たす。プロセッサは、ブート・イメージからの署名された証明書を受信し、またブート・イメージは、署名された証明書を使用して検証される。次いで、プロセッサは、プロセッサが、ブート・イメージを検証し、またリセットの後に直ちにそれを実行したことを証明する起源証明書をブート・イメージに対して提供する。プロセッサはまた、ブート・イメージの上で実行されるコンピューティング・モジュールの起源証明書を生成し、また署名する際に使用するためにブート・イメージに対して公開／秘密キー対を提供する。
【００２９】
ユーザまたは他のコンピュータ・プログラムは、コンピューティング・モジュールの起源証明書のチェーンを分析することにより、署名された証明書と、コンピューティング・モジュールとの間の関連付けを検証することができる。ブート・プロセスを含む、コンピューティング・モジュールによってアクセスされるソフトウェアの各レイヤは、プロセス１００を通して入念に検査されているので、コンピューティング・モジュールの証明書の起源のチェーンをまた使用して、ソフトウェアと、その下で実行されるすべてのレイヤとのランタイム起源をプロセッサのリセット時におけるプロセッサの上で実行される初期ソフトウェアまでトレースしてさかのぼることもできる。
【００３０】
図２は、本発明の一実施形態による、コンピューティング・モジュールのランタイム起源を表す証明書のチェーン２００の説明図である。各証明書は、発行者「Ｉ」と、主題「Ｓ」とを含んでいる。証明書のチェーン２００は、１組のコンポーネント証明書２１０と、１組の起源証明書２２０とを含んでいる。コンポーネント証明書２１０は、各ランタイム・レイヤについての１つまたは複数の証明書を含んでおり、また製造業者を通してよく知られている証明機関へとトレースしてさかのぼることが可能であるレイヤの静的アイデンティティを説明している。図２に示されるように、コンポーネント証明書２１０は、プロセッサ証明書レイヤ２３０と、仮想化証明書レイヤ２４０と、オペレーティング・システム証明書レイヤ２５０と、アプリケーション証明書レイヤ２６０とを含む。
【００３１】
プロセッサ証明書レイヤ２３０は、会社、インテル（Ｉｎｔｅｌ）（すなわち、主題）に対して信頼されている機関、コモド（Ｃｏｍｏｄｏ）、（すなわち、発行者）によって発行される第１の証明書２３１を含んでいる。プロセッサ証明書レイヤ２３０は、セキュリティ保護されたプロセッサ（すなわち、Ｓｅｃ８６）についての第１の証明書２３１を使用して「インテル」によって発行される第２の証明書２３２をさらに含んでいる。
【００３２】
仮想化証明書レイヤ２４０は、会社、ヴイエムウェア（ＶＭＷａｒｅ）（すなわち、主題）に対して信頼されている機関、ゴーダディ（ＧｏＤａｄｄｙ）、（すなわち、発行者）によって発行される第１の証明書２４１を含んでいる。仮想化証明書レイヤ２４０は、仮想化ソフトウェア・プログラム（すなわち、ＥＳＸｉ）についての第１の証明書２４１を使用して「ヴイエムウェア」によって発行される第２の証明書２４２をさらに含んでいる。
【００３３】
オペレーティング・システム証明書レイヤ２５０は、会社ウィンドリバー（ＷｉｎｄＲｉｖｅｒ）（すなわち、主題）に対して信頼されている機関、ベリサイン（ＶｅｒｉＳｉｇｎ）、（すなわち、発行者）によって発行される第１の証明書２５１を含んでいる。オペレーティング・システム証明書レイヤ２５０は、オペレーティング・システム（すなわち、リナックス（Ｌｉｎｕｘ））についての第１の証明書２５１を使用して「ウィンドリバー」によって発行される第２の証明書２５２をさらに含んでいる。
【００３４】
アプリケーション証明書レイヤ２６０は、会社、マイクロソフト（Ｍｉｃｒｏｓｏｆｔ）（すなわち、主題）に対して信頼されている機関、ベリサイン（ＶｅｒｉＳｉｇｎ）、（すなわち、発行者）によって発行される第１の証明書２６１を含んでいる。アプリケーション証明書レイヤ２６０は、一連の製品（すなわち、ＭＳオフィス（ＭＳ  Ｏｆｆｉｃｅ））についての第１の証明書２６１を使用して「マイクロソフト」によって発行される第２の証明書２６２をさらに含んでいる。アプリケーション証明書レイヤ２６０は、ソフトウェア・アプリケーション（すなわち、ＭＳオフィス）についての第２の証明書２６２を使用して「ＭＳオフィス」によって発行される第３の証明書２６３をさらに含んでいる。
【００３５】
起源証明書２２０は、各レイヤのランタイム起源を示しており、またリセット時にプロセッサの上で実行される初期ソフトウェアへとトレースしてさかのぼられることもある。図に示されるように、起源証明書の組２２０は、証明書２７０を含んでおり、この証明書は、仮想化ソフトウェアに署名するようにプロセッサによって生成される。すなわち、証明書２７０は、ランタイム仮想化ソフトウェア、ＥＳＸｉに対して、証明書２３２を使用して、プロセッサによって発行される。同様に、証明書２８０は、証明書２４２を使用して、オペレーティング・システム、リナックスに対して仮想化レイヤによって発行される。証明書２９０は、証明書２５２を使用して、アプリケーションＭＳワード（ＭＳＷｏｒｄ）に対してオペレーティング・システムによって発行される。
【００３６】
したがって、図２に示されるように、アプリケーションＭＳワードのランタイム起源は、証明書のチェーン２００に与えられる。すなわち、証明書のチェーン２００を使用して、ソフトウェアの各レイヤは、信頼されている機関に対して検証され、またトレースされることもあり、またソフトウェアのレイヤのスタックは、リセットの後に、検証され、またプロセッサへとトレースしてさかのぼられる。
【００３７】
これらの証明書を用いて、可能性のあるユーザは、信頼されている証明機関へと実行の各レイヤ（すなわち、コンピューティング・モジュール）をトレースしてさかのぼることができる。プロセス１００と、証明書のチェーン（例えば、証明書のチェーン２００）とは、様々なアプリケーションにおいて使用される可能性があることに注意すべきである。例えば、プロセス１００に従って入念に検査されているリモート「クラウド・コンピューティング」環境は、ユーザ、またはユーザのシステムに対して証明書のチェーンを提供して、「クラウド・コンピューティング」環境の信頼のための基礎を確立することができる。したがって、たとえユーザが、ハードウェアの物理制御を有する必要がなく、またそれゆえに、マルウェア（例えば、プライベート情報を取り込み、またはリモートな計算を汚染するためのソフトウェア）が存在することを物理的に検証することができないとしても、プロセス１００によって生成される証明書のチェーンは、信頼されている計算のレベルを提供する。
【００３８】
プロセス１００と、証明書のチェーンとをまた使用して、電子ウォレットやセルラー方式電話支払いシステムなどの近距離無線通信における信頼のレベルを提供することもできる。消費者によって動作させられるフェムトセルの信頼性もまた、このようにして通信される可能性がある。さらに、プロセス１００と、証明書のチェーンとを使用して、動的なソフトウェア・アップデートを必要とするシステムの信頼性を検証することができる。例えば、アップデートのアイデンティティは、インストレーションの前にチェックされる可能性があり、またひとたびインストールされた後に、ソフトウェア・システムの現在の状態を記述する記録は、公的に使用可能にされる可能性がある。
【００３９】
共用リソースに対するアクセスを制御するための上記で説明された方法は、よく知られているコンピュータ・プロセッサと、メモリ・ユニットと、ストレージ・デバイスと、コンピュータ・ソフトウェアと、他のコンポーネントとを使用したコンピュータの上で実施される可能性がある。そのようなコンピュータの高レベル・ブロック図が、図３に示されている。コンピュータ３００は、プロセッサ３１０を含んでおり、このプロセッサは、そのようなオペレーションを規定するコンピュータ・プログラム命令を実行することにより、コンピュータ３００の全般的なオペレーションを制御する。コンピュータ・プログラム命令は、ストレージ・デバイス３２０または他のコンピュータ読取り可能媒体（例えば、磁気ディスク、ＣＤ  ＲＯＭなど）に記憶され、またコンピュータ・プログラム命令の実行が望ましいときに、メモリ３３０にロードされることもある。それゆえに、図１の方法ステップは、メモリ３３０および／またはストレージ３２０に記憶されるコンピュータ・プログラム命令によって規定され、またコンピュータ・プログラム命令を実行するプロセッサ３１０によって制御される可能性がある。
【００４０】
例えば、コンピュータ・プログラム命令は、図１の方法ステップによって規定されるアルゴリズムを実行するために、当業者によってプログラムされるコンピュータ実行可能コードとして実施されることもある。したがって、コンピュータ・プログラム命令を実行することにより、プロセッサ３１０は、図１の方法ステップによって規定されるアルゴリズムを実行する。コンピュータ３００はまた、ネットワークを経由して他のデバイスと通信するための１つまたは複数のネットワーク・インターフェース３４０を含んでもいる。コンピュータ３００はまた、コンピュータ３００（例えば、ディスプレイ、キーボード・マウス、スピーカ、ボタンなど）とのユーザ相互作用を可能にする入出力デバイス３５０を含んでもいる。当業者なら、実際のコンピュータの実装形態が、同様に他のコンポーネントを含むこともできること、および図３が、実例となる目的のためのそのようなコンピュータのコンポーネントのうちのいくつかについての高レベル表現であることを認識するであろう。
【００４１】
上記の詳細な説明は、あらゆる点で例証的および例示的であるが、非限定的であるものとして理解されるべきであり、本明細書において開示される本発明の範囲は、本詳細な説明から決定されるべきではなく、正確に言えば、特許法によって許可される全容に従って解釈されるように特許請求の範囲から決定されるべきである。本明細書において示され、また説明される実施形態が、本発明の原理について例示的なものにすぎないこと、および様々な修正形態が、本発明の範囲および精神から逸脱することなく、当業者によって実施され得ることを理解すべきである。当業者なら、本発明の範囲および精神を逸脱することなく、様々な他の特徴の組合せを実施することができる。示されている様々な機能モジュールは、例示的な目的のためにすぎず、また組み合わせられ、再配列され、かつ／またはその他のやり方で修正される可能性がある。
【図１】
2014526101.tif 000003
【図２】
2014526101.tif 000004
【図３】
2014526101.tif 000005
【国際調査報告】
2014526101.tif 000006
2014526101.tif 000007