(57)【特許請求の範囲】
【請求項１】
命令を実行し、少なくとも１つのコア及び第１マイクロコード記憶部、第２マイクロコード記憶部及び拡張レジスタを有するプロセッサを備える装置であって、
前記第１マイクロコード記憶部は、前記プロセッサの命令セットアーキテクチャ（ＩＳＡ）の命令を実行する第１プロセッサ命令を含み、
前記第２マイクロコード記憶部は、システムソフトウェアには不可視の隠れ環境における実行を行う隠れリソースマネージャ（ＨＲＭ）を生成及び実行する第２プロセッサ命令を含み、
前記拡張レジスタは、前記隠れ環境の少なくとも１つのカーネルコードモジュールの測定値及び前記少なくとも１つのカーネルコードモジュールの検証のステータスを含むセキュリティ情報を格納する、装置。
【請求項２】
前記拡張レジスタは、前記隠れ環境において実行される少なくとも１つのアプリケーションに対する起動制御ポリシーのハッシュを更に格納する請求項１に記載の装置。
【請求項３】
前記プロセッサは、完全に前記プロセッサ内に存在する前記隠れ環境における証明を実行する請求項１に記載の装置。
【請求項４】
前記証明は、前記プロセッサと結合されたあらゆるエージェントとの通信を行うことなく実行される請求項３に記載の装置。
【請求項５】
前記プロセッサは、cipher message authentication code（ＣＭＡＣ：暗号化メッセージ認証コード）の計算を実行し、前記ＣＭＡＣの計算結果を、インテグリティチェック値（ＩＣＶ）アレイのエントリに格納するアクセラレータを更に有する請求項１に記載の装置。
【請求項６】
前記アクセラレータは、前記プロセッサと結合されたメモリの隠れパーティションの複数のページの各々に対する前記ＣＭＡＣの計算を実行する請求項５に記載の装置。
【請求項７】
前記プロセッサは、前記プロセッサの製造者によって格納され、前記製造者を特定する第１識別子と、前記プロセッサを含むシステムのオーナーによって格納される第２識別子とを有し、
前記第２識別子は、制御可能な量の固有性を有する請求項１に記載の装置。
【請求項８】
前記プロセッサは、前記プロセッサのヒューズ設定に基づいて、プライベートキーを生成する請求項１に記載の装置。
【請求項９】
第１プライベートキーを使用して、システムのシステムメモリの隠れパーティションの複数ページのcipher message authentication code（ＣＭＡＣ：暗号化メッセージ認証コード）を生成し、複数の前記ＣＭＡＣの各々をインテグリティチェック値（ＩＣＶ）アレイの対応するエントリに格納する段階と、
第２プライベートキーを使用して、前記第１プライベートキー及びカウンタの値を、暗号化ブロブへと暗号化する段階と、
前記システムを、第１電力状態から、前記システムメモリが前記システムのプロセッサによって保護されない低電力状態へと遷移させる段階と、
前記システムが前記低電力状態から前記第１電力状態へと遷移する時に、前記隠れパーティションを検証するべく、前記暗号化ブロブ及び前記ＩＣＶアレイを使用する段階と
を備える方法。
【請求項１０】
前記第２プライベートキーは、隠れ環境において実行される前記プロセッサのマイクロコードによって、記憶キーから導出される請求項９に記載の方法。
【請求項１１】
前記第１プライベートキーを使用して前記ＩＣＶアレイのＣＭＡＣを生成し、前記ＩＣＶアレイの前記ＣＭＡＣを第２記憶装置に格納する段階を更に備える請求項９に記載の方法。
【請求項１２】
前記システムが前記低電力状態へと遷移する前に、前記カウンタの値を永続的メモリに格納する段階と、
前記低電力状態から戻った後に、格納された前記カウンタの値をインクリメントする段階とを更に備え、
前記プロセッサが前記低電力状態である時には、前記システムメモリは、セルフリフレッシュモードである請求項９に記載の方法。
【請求項１３】
前記カウンタの値をインクリメントする段階と、
前記システムが前記低電力状態へと遷移する前に、インクリメントした前記カウンタの値を不揮発性記憶装置に格納する段階とを更に備える請求項９に記載の方法。
【請求項１４】
前記隠れパーティションの検証は、
前記第２プライベートキーを使用して、前記第１プライベートキー及び前記カウンタの値を取得するべく、前記暗号化されたブロブを解読する段階と、
前記カウンタの値を、前記不揮発性記憶装置に格納されている前記インクリメントされたカウンタの値と比較する段階と、
前記ＩＣＶアレイの前記ＣＭＡＣ及び前記ページの前記ＣＭＡＣを検証する段階とを含み、
前記第２プライベートキーは、前記プロセッサのマイクロコードによって生成される請求項１３に記載の方法。
【請求項１５】
前記比較の結果における差分が、所定の閾値よりも大きい場合には、前記検証の失敗を示す段階を更に備える請求項１４に記載の方法。
【請求項１６】
前記ＩＣＶアレイに対して計算されたＣＭＡＣが前記ＩＣＶアレイの格納されているＣＭＡＣ値と一致しない、又は、前記ページの少なくとも１つに対して計算されたＣＭＡＣが前記ＩＣＶアレイに格納されている対応する前記ＣＭＡＣと一致しない場合には、前記検証の失敗を示す段階を更に備える請求項１４に記載の方法。
【請求項１７】
システムに、
プロセッサのマイクロコードに実装される隠れリソースマネージャ（ＨＲＭ）を使用して、実行される前記システムのシステムソフトウェアには不可視な隠れ環境を証明する検証装置から、証明要求及びノンスを受信させる段階、
インターコネクトを介して前記プロセッサと結合されるエージェントとの通信を行うことなく、前記証明要求に応答して、前記マイクロコードを介して、署名された証明記録を前記プロセッサ内に直接生成させる段階、
前記署名された証明記録を前記検証装置に供給させる段階
を実行させるためのプログラム。
【請求項１８】
前記証明要求を前記隠れ環境のカーネルで受信し、前記証明要求と関連付けられているアプリケーションの起動履歴にアクセスし、前記起動履歴をハッシュし、前記ノンス及びハッシュされた前記起動履歴を前記ＨＲＭに供給する段階を更に備える請求項１７に記載のプログラム。
【請求項１９】
前記ＨＲＭを使用して、前記システムのオーナーによって生成された前記システムのオーナー識別子、起動制御ポリシーの測定結果、前記隠れ環境の少なくとも１つのカーネルの測定結果を含む前記証明記録を生成し、前記証明記録をプライベートキーで署名する段階を更に備える請求項１８に記載のプログラム。
【請求項２０】
署名された前記証明記録を前記検証装置に送信し、前記プライベートキーに対応する公開キーを使用して前記署名された証明記録を検証する段階を更に備える請求項１９に記載のプログラム。
【請求項２１】
前記署名された証明記録に格納されている前記ノンスと前記検証装置によって提供された前記ノンスとを比較することにより、前記署名された証明記録を検証し、前記アプリケーションを、アプリケーションのホワイトリストに含めるべきかを判断する段階を更に備える請求項２０に記載のプログラム。
【請求項２２】
前記マイクロコードの実行により、前記隠れ環境を起動する段階、
前記マイクロコードを使用して、第１カーネルに対する第１マニフェストに基づいて、前記第１カーネルを検証し、前記第１カーネルが検証された場合には、前記プロセッサの拡張レジスタを前記第１カーネルの測定結果で更新する段階、
前記マイクロコードを使用して、第２カーネルに対する第２マニフェストに基づいて、前記第２カーネルを検証し、前記第２カーネルが検証された場合には、前記拡張レジスタを前記第２カーネルの測定結果で更新する段階を更に備える請求項１７に記載のプログラム。
【請求項２３】
命令を実行し、少なくとも１つのコア及びマイクロコード記憶部及び拡張レジスタを有するプロセッサと、
前記プロセッサと結合され、隠れメモリパーティションを含み、前記プロセッサが低電力状態の時にはセルフリフレッシュ状態であるシステムメモリと
を備えるシステムであって、
前記マイクロコード記憶部は、システムソフトウェアには不可視の前記隠れ環境における実行を行う隠れリソースマネージャ（ＨＲＭ）を生成及び実行するプロセッサ命令を含み、
前記拡張レジスタは、前記隠れ環境の少なくとも１つのカーネルコードモジュールの測定値及び前記少なくとも１つのカーネルコードモジュールの検証のステータスを含むセキュリティ情報を格納し、
前記ＨＲＭは、第１プライベートキーを使用して、隠れメモリパーティションの複数のページ各々についてcipher message authentication code（ＣＭＡＣ：暗号化メッセージ認証コード）を生成し、前記ＣＭＡＣの各々をインテグリティチェック値（ＩＣＶ）アレイの対応するエントリに格納し、第２プライベートキーを使用して前記第１プライベートキー及びカウンタの値を暗号化ブロブへと暗号化し、前記システムが低電力状態から遷移する時に、前記隠れ環境で使用するべく前記ＨＲＭによって割り当てられた前記隠れメモリパーティションの前記複数のページを検証するべく、前記暗号化ブロブ及び前記ＩＣＶアレイの複数の前記エントリの各々を使用する、システム。
【請求項２４】
前記プロセッサは、前記プロセッサと結合されるあらゆるエージェントとの通信を行うことなく、完全に前記プロセッサ内に存在する前記隠れ環境における証明を実行する請求項２３に記載のシステム。
【請求項２５】
前記プロセッサは、ＣＭＡＣの計算を実行し、前記ＣＭＡＣの計算結果の各々を、前記ＩＣＶアレイのエントリに格納するアクセラレータを更に有する請求項２３に記載のシステム。
【請求項２６】
前記プロセッサは、前記プロセッサの製造者によって格納され、前記製造者を特定する第１識別子と、前記プロセッサを含むシステムのオーナーによって格納される第２識別子とを有し、
前記第２識別子は、制御可能な量の固有性を有する請求項２３に記載のシステム。
【請求項２７】
前記ＨＲＭは、ゲストオペレーティングシステムへアクセス可能な前記システムメモリのメモリパーティションの複数ページの検証を可能とする請求項２３に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータシステムは、１以上のプロセッサ、メモリ、入出力デバイス等を含むハードウェア要素の集合体によって構成されている。また、オペレーティングシステム（ＯＳ）、仮想化マシンモニタ（ＶＭＭ）等のシステムソフトウェアを含む様々な種類のソフトウェアが、システムに存在している。また、ワープロ機能、電子メール、ゲーム等のユーザーが望む特定のタスクを実行するべく、アプリケーションソフトウェアを提供することができる。ソフトウェアと下層のプロセッサハードウェアとの間の通信を可能とするためには、ソフトウェアの命令を、例えば、プロセッサに格納されたマイクロコードを使用して実装することができるマイクロ命令（μｏｐｓ）のような小さな命令に変換してもよい。
【０００２】
一般的に、ＯＳ又はＶＭＭのようなシステムソフトウェアに対して、メモリの全範囲が可視状態とされている。しかしながら、セキュア（安全な）オペレーション等を提供するために、プロセッサのマイクロコードに、ＯＳ／ＶＭＭからは隠された状態に実装されてもよいリースマネージャを使用して実行されるコードを含むメモリに、隠されたパーティションを設けてもよい。しかしながら、このような隠されたリソースの提供には、様々なセキュリティ及び証明（attestation）の問題が生じ、複雑さを増している。
【０００３】
一例として、システムが、Advanced Configuration and Power Interface (ACPI) Rev. 2.0規格、２００３年４月２５日による、いわゆるサスペンド（Ｓ３）状態のような特定の低電力状態に置かれる場合、システムメモリは、セルフリフレッシュ状態となる。しかしながら、プロセッサは電源ＯＦＦとなるため、メモリに対する有効な保護が存在しなくなる。したがってシステムがＳ３状態にあり、メモリの再開の検証が行われていない場合には、悪意を持った者が、メモリの内容を書き換えることができ、システムメモリの隠されたメモリパーティションへのコード注入攻撃につながる。Ｓ３状態に入る前であって、Ｓ３状態からＳ０状態への再開（resume）時の内容の検証を行う前に、メモリをハッシュ（hash）することにより、コード注入攻撃を回避することができるが、メモリをハッシュしその後でメモリの内容を検証するという更なる作業が発生し、Ｓ０とＳ３との間の遷移に必要な時間が長くなってしまうという欠点がある。
【図面の簡単な説明】
【０００４】
【図１】本発明の一実施形態に係るプラットフォームのブロック図である。
【図２】本発明の一実施形態に係るintegrity check value（ＩＣＶ：整合性確認値）アレイのブロック図である。
【図３】本発明の一実施形態に係る隠れメモリ整合性計算及び保護の概略のブロック図である。
【図４】本発明の一実施形態に係る低電力状態への遷移方法を示したフローチャートである。
【図５】低電力モードから通常電力モーへの実行を再開する方法を示したフローチャートである。
【図６】本発明の一実施形態に係る検証方法を示したフローチャートである。
【図７】本発明の一実施形態に係る高レベル起動方法を示したフローチャートである。
【図８】本発明の一実施形態に係る起動オペレーションのフローチャートである。
【図９】本発明の一実施形態に係る証明方法のフローチャートである。
【図１０】本発明の一実施形態に係るプロセッサのブロック図である。
【発明を実施するための形態】
【０００５】
実施形態は、低電力状態を抜けて通常動作状態へと移る時に使用される隠れメモリパーティションの整合性（インテグリティ）の効率的な検証を提供する。また、様々なソフトウェアを実行する環境を実行に先立って検証することができる隠れ環境証明を提供するのに、実施形態を使用することができる。このような証明は、インターコネクトを介してその他の構成要素にアクセスする必要なくプロセッサ内に完全に実装することができるので、速度を上げ複雑性を低減させることができ、インターコネクト及びその他の構成要素とのやり取りを通じたセキュリティの脅威の可能性を下げることができる。
【０００６】
ホストオペレーティングシステム（ＯＳ）／仮想化マシンモニタ（ＶＭＭ）と隠れパーティションとの間のメモリ分離を提供するべく、プロセッサは、隠れメモリへのホストＯＳ／ＶＭＭ生成アクセスを効果的にブロックする１以上のハードウェア範囲レジスタを使用してもよい。同様に、隠れパーティションからホストＯＳ／ＶＭＭメモリへのアクセスを制御するべく、隠れパーティションの下にページテーブルが存在していてもよい。隠れ環境におけるオペレーションをより良く理解するべく、このような環境を提供するプラットフォームの概要について説明する。
【０００７】
図１は、本発明の一実施形態に係るプラットフォームのブロック図である。図１に示すように、プラッフォーム１０は、サーバーコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ等のいかなるコンピュータシステムであってもよい。プラットフォームは、要求されたオペレーションを共に実行する様々なハードウェア及びソフトウェアを含む。図に示すように、プラットフォームハードウェアは、一実施形態では、複数のプロセッサコア２２ａ−２２ｎを含むマルチコアプロセッサである、プロセッサ２０を含む。以下に説明するように、コア２２はそれぞれ、ＯＳ又はＶＭＭのようなその他のシステムソフトウェアからは隠された隠れ環境において実行されるマイクロコードを含んでもよい。また、プロセッサ２０は、一実施形態では、ダイナミック・ランダム・アクセスメモリ（ＤＲＡＭ）であるシステムメモリ３０と通信を行うメモリコントローラハブ（ＭＣＨ）２４を含む。
【０００８】
プラットフォーム１０の付加的なハードウェアには、例えば、ディスクドライブ、光ストレージ又はその他の不揮発性ストレージのようなマスストレージである、記憶装置５０のような周辺機器に対する制御を提供してもよい仮想化エンジン４２（virtualization engine：ＶＥ）及び管理容易性エンジン（manageability engine：ＭＥ）４４を含む周辺機器コントローラハブ（peripheral controller hub：ＰＣＨ）４０を含んでもよい。また、ネットワーク・インターフェース・コントローラ（ＮＩＣ）５５は、プラットフォーム１０及びネットワークのその他のエージェントとの間の通信を可能としてもよく、ネットワークには、例えば、ローカルエリアネットワーク（ＬＡＮ）、無線ＬＡＮ（ＷＬＡＮ）のような無線ネットワーク、又は、携帯電話ネットワークのような広域無線ネットワークが含まれる。図１の実施形態には特定のハードウェアが示されているが、本発明の範囲はこの点に関して限定されない。
【０００９】
更に図１に示されるように、様々なソフトウェアが存在する。初めに、隠れリソースマネージャ（ＨＲＭ）２５が示されている。図示するように、ソフトウェアのこの層は、下に位置するプロセッサハードウェアと隠れパーティション７０との間のインターフェースとして動作する。一実施形態では、ＨＲＭ２５は、プロセッサのマイクロコードストレージに格納されたプロセッサマイクロコードとして実装されていてもよい。このマイクロコード及びストレージは、対応するユーザーレベル命令の命令セットアーキテクチャ（ＩＳＡ）を提供するのに使用される従来のマイクロコード及びマイクロコードストレージとは別のものであってもよい。しかしながら、ある実施形態では、隠れマイクロコード及び従来のマイクロコードは、１つのマイクロストレージの異なるパーティションに格納されていてもよい。
【００１０】
リソースマネージャは、隠れパーティション７０のコードにサービスを提供するべく実行されてもよい。図に示すように、この隠れパーティションには様々なコードが存在してもよく、コードは、その他のシステムソフトウェア、すなわちＯＳ及びＶＭＭからは隠され、例えば、セグメント化されているシステムメモリ３０の１つのパーティションに格納されていてもよい。隠れパーティション７０は、プラットフォームの様々なデバイスと結合するためのカーネルサービス及びドライバを提供する１以上の隠れカーネル及びドライバ７２を含む、様々なコードを含む。隠れ実行環境において実行されてもよい１以上のアプリケーション７５に加えて、更なるコア機能（capabilities）コード７４が存在してもよい。本発明の範囲は、この点に関して限定されないが、汎用ＯＳよりも高い整合性を提供する正式なセキュリティモデルに従うべく実装されるオペレーションに対する隠れ実行環境であってもよい。また、プラットフォーム１０は、様々なホストデバイスドライバ６２及びホストアプリケーション６４を含んでもよい、ホストＯＳ／ＶＭＭパーティション６０を含む従来のソフトウェアを含む。このようなコードは、システムメモリ３０の別のパーティションに格納されていてもよい。ＨＲＭ２５は、ＯＳ／ＶＭＭパーティションに対して、システムハードウェアの抽象化を提供する。
【００１１】
実施形態は、Ｓ３からＳ０及びＳ０からＳ３への遷移を実行するのに掛かる時間を低減させるべく、隠れ環境において実行されるプロセッサマイクロコードによって実装されてもよいメカニズムを提供する。システムをＳ３へと遷移させると、プロセッサは電源ＯＦＦ状態とされ、メモリは、セルフリフレッシュモードとなる。この時、メモリに対する保護が存在せず、様々な実行時保護は、動作状態にない。したがって、隠れメモリを含むメモリは、様々なセキュリティの脅威に対して脆弱な状態となっていると考えられる。状態Ｓ１及びＳ２では、プロセッサ構成要素（例えば、コア及びアンコアのみ）に適用され、システムメモリには関係がない。更なる低い電力状態Ｓ４及びＳ５では、システムメモリへの電源供給が断たれるため、全てのメモリコンテンツが失われる。
【００１２】
脅威は様々な形態で存在し、以下のような形態が考えられる。以下に示す例が、全ての脅威の形態を含んでいるわけではない。例えば、一例として、攻撃者が、Ｓ３電力状態遷移の間に、メモリイメージを修正／置換することができる悪意を持ったコード注入が挙げられる。別の例としては、ハッシュアルゴリズムを利用した脅威が存在し、攻撃者が暗号化ハッシュアルゴリズムの弱点を利用して、有効ページのハッシュ署名（hash signature）を有する攻撃メモリぺージを見つけ、攻撃ページをメモリに注入する形態が挙げられる。攻撃者が一旦、攻撃ページを取得すると、その攻撃ページを、同様な設定の多数のシステムに注入することができるbreak once run everywhere（ＢＯＲＥ）攻撃という形態も存在する。また、リプレイアタック（replay attack）という形態では、攻撃者は、全てのメモリページ及びインテグリティチェック値を記録し、現在のメモリページ及びインテグリティ値を置き換える。ページスワップアタック（page swap attack）という形態では、攻撃者は、同じ暗号化メッセージ認証コード（ＣＭＡＣ）値を有するページを交換する。
【００１３】
セルフリフレッシュの実行を許可する前に、セフルリフレッシュ状態のメモリイメージを測定（例えば、ハッシュ及び検証される）させることにより、一定の脅威に対処することができる。一実施形態において、この方法では、値がインテグリティチェック値（integrity check value：ＩＣＶ）アレイに記録されるページ毎の整合性チェックが実行される。ＨＲＭマイクロコードによって、ハッシュが実行される。一実施形態において、ＩＣＶアレイの各エントリは、次のような情報を含む。Network Working Group Request for Comments (RFC) 4493、２００６年６月に従って動作するAdvanced Encryption Standard-Cipher-based Message Authentication Code (AES-CMAC)、又は、ページのセキュアハッシュアルゴリズム（ＳＨＡ）ハッシュである、インテグリティチェック値、最後のＩＣＶ計算が実行されて以降、ページが修正されたかを示す真／偽の値を示すＩＣＶ有効インジケータ、ＤＭＡを使用してデバイスによってページがアクセスされたかを示す真／偽（true/false）の値を示すダイレクト・メモリ・アクセス（ＤＭＡ）ページインジケータが含まれる。
【００１４】
一実施形態において、ＨＲＭは、周期的に隠れページをハッシュするのに、バックグラウンドタスクを利用してもよい。隠れ環境への遷移の前に、バックグラウンドタスクが起動されて、メモリ内の複数ページの一定のセットをハッシュすることができる。例えば、隠れイメージが、６４ＭＢの大きさである場合、インテグリティ保護を行うべきページ数は、１６３８４となる。バックグラウンドタスクは、１６Ｋページ全体を総当り的に実行し、一実行毎に、１６ページのハッシュを実行してもよい。したがって、隠れ実行環境（ＨＥＥ）に割り当てられた１６Ｋページの全てのハッシュを実行するには、１Ｋ（１０００）回のバックグラウンドタスクを起動する必要がある。ページをハッシュするのに掛かる時間は、ＨＥＥに起因し、実行クレジットから差し引かれる。
【００１５】
ＩＣＶ計算は、様々なハッシュアルゴリズムに応じて実行される。例えば、ＳＨＡ１ハッシュの替わりに、ＳＨＡ２オペレーションのような強いハッシュアルゴリズムを使用して、ハッシュアルゴリズムの悪用に対処してもよい。しかしながら、ＳＨＡ２アルゴリズムを使用することに関係する性能の不利益及びメモリオーバーヘッドコストが存在する。ＳＨＡ２５６は、およそ２０サイクル／バイトを必要とし、ＳＨＡ５１２は、約１２サイクル／バイトを必要とする。ＳＨＡ２アルゴリズムは、多くの場合、かなり大きいメッセージダイジェストを生成する。ＳＨＡ２５６は、２５６ビット（３２バイト）メッセージダイジェスト（ＭＤ）を有し、ＳＨＡ５１２は、６４バイトＭＤを有する。このオーバーヘッドは、メモリに（１６−６４ＭＢ）内のページ数で乗算されるので、非常に大きな付加オーバーヘッドとなる。
【００１６】
したがって、多くの実施形態では、ＡＥＳ−ＣＭＡＣオペレーションのようなＳＨＡ２の替わりのオペレーションを使用してもよく、これらのオペレーションはＳＨＡアルゴリズムよりも高速である。また、別原像計算困難性（second pre-image resistance）を有することから、ＳＨＡ２機能の替わりに、ＣＭＡＣを使用してもよい。
【００１７】
図２には、本発明の一実施形態に係るintegrity check value（ＩＣＶ：整合性確認値）アレイのブロック図である。図２に示すように、隠れ実行環境は、メモリの隠れパーティションにその情報（すなわち、コード及びデータ）を格納してもよい。特に、図２に示すように、メモリ１１０の複数のページ１１０１−１１０ｎを、隠れ実行環境のために分割してもよい。隠れ環境のバックグラウンドにおける実行の間、ＨＲＭは、これらページのそれぞれのハッシュを実行し、ＩＣＶアレイ１２０にハッシュ値を格納してもよい。図に示すように、ＩＣＶアレイ１２０は、複数のエントリ１２５ａ−１２５ｎを含み、各エントリは、隠れパーティション１１０の１ページに対応している。エントリはそれぞれ、ＣＭ  ＡＣ値又はハッシュ値を、上記した有効インジケータ１２２及びＤＭＡインジケータ１２４と共に格納するＩＣＶフィールド１２６を含む。一実施形態において、ＩＣＶアレイ１２０は、隠れパーティション１１０の一部分に格納されていてもよく、実装では、このＩＣＶアレイをその他のロケーションに格納してもよい。ＩＣＶアレイ１２０のハッシュは、ＨＲＭのみが知っている暗号化キーを使用して、計算及び暗号化されてもよい。このようにして、ＨＲＭのみが、ＩＣＶアレイを修正することができる。
【００１８】
Ｓ０からＳ３への遷移では、ＨＲＭは、隠れメモリページに対するＩＣＶ値を生成してもよい。そして、一実施形態において、Ｓ０からＳ３への遷移では、ＨＲＭは、各メモリページに対するＣＭＡＣ値を上記のインジケータと共に計算することによって、動的にＩＣＶアレイを構築する。ＩＣＶアレイは、未使用のメモリページに格納されてもよい。その後、隠れメモリは、整合性計算及び本発明の一実施形態に係る保護を利用して、保護される。
【００１９】
図３は、本発明の一実施形態に係る隠れメモリ整合性計算及び保護の概略を示したブロック図である。図３に示すように、隠れパーティション１１０は、複数のメモリページＰ１〜Ｐｎを含み、メモリページはそれぞれ、ページテーブルエントリ１０５に表された情報を使用してアクセスされてもよい。このようなページテーブルエントリは、プロセッサ内に存在し、プロセッサは、トランスレーション・ルックアサイド・バッファ（ＴＬＢ）又はその他の構造にこのようなエントリを格納してもよいし、エントリを隠れパーティション内に存在させてもよい。隠れパーティションに対するページテーブルエントリは、別のページテーブルに格納されてもよい。
【００２０】
整合性計算を実行するべく、メモリページがそれぞれ、ＡＥＳ−ＣＭＡＣ機能１５０に提供されてもよく、一実施形態では、ＡＥＳ−ＣＭＡＣ機能は、プロセッサコア、アンコア（コア以外の構成）、統合入出力コントローラ、周辺機器コントローラ、メモリコントローラ、又は、セキュリティコプロセッサに存在するアクセラレータ又はその他の専用ハードウェアを使用して、実装されてもよい。プラットフォームそれぞれに固有のプライベートキーＫ１をＣＭＡＣ計算の一部として使用することにより、攻撃者は簡単に各プラットフォームに対するＫ１を予測できなくなることから、別のプラットフォームからのＣＭＡＣ値を使用して、標的のプラットフォームを攻撃できなくなる。
【００２１】
一実施形態において、このキーは１２８ビットであり、プラットフォームにそれぞれ固有であってもよい。一実施形態では、ＡＥＳ−ＣＭＡＣの計算には、ＡＥＳアルゴリズムを実装するべくユーザーレベルのＩＳＡ命令を実行可能なコアに収容されるＡＥＳアクセラレータを使用してもよい。ＡＥＳアクセラレータを使用することにより、ＡＥＳ−ＣＭＡＣは、一実施形態では、３．５サイクル／バイトで機能し、ページ整合性保護に対する効率的で安全な方法を提供することができる。ページそれぞれに対して得られたＣＭ  ＡＣ値を、ＩＣＶアレイ１２０に格納してもよい。一実施形態において、ページ毎のメモリオーバーヘッドは、ＣＭ  ＡＣ毎に６４ビットである。１２８ビットＫ１値から生じた１２８ビットＣＭＡＣから、上位ビットが選択される。また、ＩＣＶアレイ１２０全体についての整合性計算を、機能１６０及び同じキーＫ１を使用して同様に実行してもよく、アレイＣＭＡＣ値（ＣＭＡＣＡ）を記憶装置１６５に格納する。一実施形態において、ＣＭＡＣＡ値は、６４ビットであってもよい。
【００２２】
どのインテグレティ値についてインスタンス化が計算されたのかを特定するべく、Network Working Group Request for Comments 3602（２００３年９月）に従うＡＥＳ暗号化ブロックチェーン化（ＣＢＣ）暗号化機能１７０を実行して、記憶装置１７５に格納されている第２プライベートキーＫ２を使用して暗号化ブロブ１９０を生成してもよく、暗号化ブロブは、キー値Ｋ１及びカウンタ１８０に格納されているカウンタＣ１の値に対する暗号化を実行するべく動作する。一実施形態において、Ｋ２は、ＨＲＭ記憶キー（ＨＲＭのみが知る対称キー）から導出される。そして、ＨＲＭ記憶キーは、プロセッサ内又はチップセット内のヒューズのセットから得ることができる。様々な実施形態において、カウンタは、単調（ｍｏｎｏｔｏｎｉｃ）カウンタであってもよい。
【００２３】
異なる実装形態では、単調カウンタリソースは、様々な技術を利用して実装可能である。例えば、カウンタは、ＴＰＭ又はＭＥにアクセスすることによって実現することができる。この例では、ＨＲＭがＴＰＭの所有権を取ってカウンタリソースへのアクセスを保証する、又は、ＨＲＭが、例えば、プロセッサに存在する永続的（ｐｅｒｓｉｓｔｅｎｔ）レジスタにアクセスしてもよい。別の例では、ＨＲＭは、ＭＥとの信頼関係を確立することにより（例えば、キー交換を行うことにより）、隠れ記憶領域（例えば、フラッシュ又はその他の不揮発性メモリ）にアクセスしてもよい。別の例では、ＨＲＭは、記憶装置との信頼関係を確立することにより（例えば、キー交換を実行することにより）、ハードディスクドライブ又は半導体ドライブ（ＨＤＤ／ＳＳＤ）のような記憶装置にアクセスしてよい。
【００２４】
得られたブロブ１９０は格納され、動作状態へと戻る遷移の後も、隠れパーティションのメモリが完全な状態であるか判断するべく、後でブロブにアクセスしてもよい。ブロブへの組み込みに続いて、カウンタ値Ｃ２を再開するべくＣ１がインクリメントされる。その後、例えば、読み出し−インクリメント−書き込み不可分オペレーションを使用して、Ｃ２を永続的メモリに書き込み、リプレイアッタックが確実に検出されるようにしてもよい。別の実施形態では、インクリメントは、Ｓ３ステートからの再開の後に行われてもよい。
【００２５】
幾つかの実施形態では、ＣＭＡＣにおけるページメタデータから取得されたページインデックス値を取り込むことにより、ページスワップアタック対策を行うことができる。ページインデックス値は、攻撃を阻止するのにハードウェアによる保護に依存するＨＲＭによって決定される。ＨＲＭにおけるプログラムのバグによって、１ページ以上のＣＭＡＣに、複製されたページインデックス値が含まれてしまうことにつながる可能性がある。別の技術では、第２の単調カウンタを、より信頼性の高い固有の識別子として使用してもよい。
【００２６】
図４は、本発明の一実施形態に係る低電力状態への遷移方法を示したフローチャートである。図４に示すように、方法２００は、低電力状態へ遷移する（例えば、Ｓ０からＳ３への遷移）命令を受信する段階から開始する（ブロック２１０）。隠れ環境のマイクロコードを使用して、及び、プライベートキーＫ１を使用して、ＡＥＳ−ＣＭＡＣ値を、隠れメモリの各ページについて計算してもよい（ブロック２２０）。これらのＣＭＡＣ値は、ＩＣＶアレイに格納されてもよい（ブロック２３０）。この計算の全てが完了すると、同じキーＫ１を使用して、アレイ全体に対するＡＥＳ−ＣＭＡＣ値を計算することができる（ブロック２４０）。このＣＭＡＣ値は、別の記憶装置に格納されてもよい（ブロック２５０）。
【００２７】
その後、図４に示すように、単調カウンタ値Ｃ１及びＫ１が、メモリに書き込まれてもよい（ブロック２６０）。一例として、これらの値は、キャッシュロケーション又は隠れパーティション内のような、一時記憶場所に格納されてもよい。そして、プライベートキーＫ２を使用して、このメモリが暗号化され、暗号化ブロブが生成される（ブロック２７０）。このブロブは、Ｓ３永続的（persistent）メモリに格納されてもよい（ブロック２８０）。一例として、ブロブは、Ｓ３モードの間にセルフリフレッシュ状態に保たれる隠れパーティションの所定の領域に格納されてもよい。図４の実施形態が、特定の実装形態を利用して示されたが、本発明の範囲は、この点に関して限定されない。
【００２８】
図５は、低電力モードから、通常電力モードでの実行を再開する方法を示したフローチャートである。図に示すように、方法３００は、ＨＲＭにおいて再開通知を受信する段階（ブロック３１０）によって開始される。Ｓ３再開（レジューム）のため、ＨＲＭは、例えば、基本入力／出力システム（ＢＩＯＳ）を介して、隠れイメージを再開する通知を受信してもよい（ブロック３１０）。ＨＲＭは、隠れ環境に対するコンテナを生成し、隠れメモリに有効なＩＣＶアレイが存在するか否かを判断する。ＩＣＶアレイが存在する場合は、ＩＣＶアレイのＣＭＡＣ（ＣＭＡＣＡ）及び各ページに対するＣＭＡＣを検証することにより、ＩＣＶアレイの有効性を判断することができる（ひし形３２０）。ＩＣＶアレイ整合性が完全でない場合は、ＨＲＭは、通常のリセット経路として隠れ初期化を継続する、すなわち、メモリ内のイメージが廃棄されて、例えば、不揮発性記憶装置から新しいロードコードの読み込みが実行される（ブロック３２５）。
【００２９】
ＩＣＶアレイの整合性が危険に晒されていない場合には、ＨＲＭは、全てのＨＥＥページを隠れページテーブルにおいて存在しないものとして印を付け（ブロック３３０）、制御を隠れブートローダーエントリポイントに渡す（ブロック３３５）。ブートローダーが実行を開始すると、コード及びデータページアクセス（ブロック３４０）は、ページテーブル違反（fault）をＨＲＭに生成する（ひし形３４５）。ＩＣＶアレイ内のページに対して有効なＩＣＶが存在する場合には（ひし形３５０）、ＨＲＭは、違反ページでＩＣＶを計算し、それをＩＣＶアレイ内のＩＣＶとつき合わせて、ページの整合性を検証する（ブロック３５５）。整合性が確認された場合（ひし形３７０）には、ページは、（ページに対する変更を追跡するべく）リードオンリーページとして隠れページテーブルにマップされる（ブロック３７５）。その後、ページへのアクセスが許可されてもよい（ブロック３８０）。
【００３０】
図５に示すように、ひし形３５０において、対応するＩＣＶアレイエントリに対するページに対する有効ＩＣＶが存在しないと判断された場合には、制御はブロック３６０に移り、初期化コードを使用してページが読み込まれてもよい。また、図に示すように、有効ＩＣＶエントリが存在するが、計算されたＩＣＶが、対応する格納されたＩＣＶ値と一致しない場合には、ひし形３７０における検証が失敗したことになり、セキュリティ違反が報告されてもよい（ブロック３９０）。図５の実施形態は、特定の実装形態を有するように示されたが、本発明の範囲は、この点に関して限定されない。例えば、ある実装形態では、（例えば、システムメモリの隠されていないメモリパーティションの）ゲストＯＳにアクセス可能なメモリページの検証を実行してもよく、ＨＲＭはこのような検証も実行可能とされる。
【００３１】
図６は、本発明の一実施形態に係る検証方法を示したフローチャートである。図６に示すように、Ｓ３ステートからの再開時にＩＣＶアレイの検証が行われる場合、方法４００がＨＲＭによって実装されてもよい。図に示すように、方法４００は、ＩＣＶ整合性を判断する要求を受信することによって開始されてもよい（ブロック４１０）。そして、ＨＲＭは、ＨＲＭの記憶キーから暗号化されたキーＫ２を導出し（ブロック４２０）、キーＫ１及びカウンタ値Ｃ１を取得するべくＫ２を使用してブロブを解読してもよい（ブロック４３０）。電力状態遷移は、Ｓ３からの再開時又はその前に呼び出されて、再開カウンタ値Ｃ２をインクリメントしてもよく、再開時に永続的記憶装置から取得されてもよい（ブロック４４０）。
【００３２】
ひし形４５０において、ＨＲＭは、Ｃ１値がＣ２値と比較して、その差分が、所定の閾値（例えば、１）よりも大きいかの判断を行ってもよい。差分が大きい場合は、検証失敗となり、セキュリティ違反が報告されてもよい（ブロック４６０）。比較結果が予想された通りであった場合には、制御はブロック４７０に移り、ＩＣＶアレイに対するＣＭＡＣ値及び隠れ実行環境ページ各々に対するＣＭＡＣ値の検証が行われてもよい（ブロック４７０）。計算された値が格納された値と一致する場合には、ひし形４７５において検証が成功となり、検証成功の報告が行われてもよい（ブロック４８０）。一致しなかった場合には、検証失敗となり、制御がブロック４６０に移る。
【００３３】
ＡＥＳ−ＣＭＡＣ及びＣＭＡＣ値のアレイのＡＥＳ−ＣＭＡＣ（ＣＭＡＣ  Ａ）に基づいて、メモリページのハッシュを実行することにより、実施形態は、別原像計探索攻撃（second pre-image attack）を防ぐ効率的な技術を実現することができる。また、ＣＭＡＣＡ値の暗号化を含む単調カウンタ値の利用により、以前の電力状態遷移からのページを使用して全てのメモリページを置き換える攻撃を防ぐことができる。また、ページインデックス値をページＣＭＡＣ計算に含めることにより、同じＣＭＡＣ値を有する異なるアドレスロケーションに発生した同一ページの、悪意を持った置き換えを防ぐことができる。
【００３４】
実施形態は更に、ユーザーのプライバシー目標に配慮すると同時に、隠れ管理容易性環境（manageability environment）を外部エンティティに対して証明するべくマイクロプロセッサのマイクロコードを使用して、隠れ管理容易性環境のインスタンス化を可能としてもよい。また、環境の整合性測定結果をマイクロコードによって記録しておき、後で、リモートのエンティティ又は外部エンティティによって使用及び検証を行うことができる。
【００３５】
このような証明を実現するために、マイクロコードは、証明機能が外部の脅威から保護される信用の基点（root-of-trust）を生成することができる。プロセッサの拡張レジスタを使用して、整合性測定結果を格納してもよい。そして、拡張レジスタのコンテンツにデジタル署名するのに、プライベートキー（例えば、いわゆるＥＰＩＤ）を使用することができる。そして、対応する公開キーは、ＥＰＩＤプライベートキーの署名の暗号的な検証を行うことができる。ある実施形態では、プラットフォームのプライバシー及びセキュリティポリシーを決定する役割を担うエンティティによって、ＯｗｎｅｒＩＤ値を提供することもできる。
【００３６】
実行／セットアップにおいて隠れ環境に読み込まれるファームウェアの整合性を検証するのに、非対称コード署名キーを使用してもよい。そして、整合性マニフェストは、許容されるインテグリティ測定値のホワイトリストを含んでもよい。このマニフェストは、隠れ環境で起動されてもよいアプリケーション全てを示す起動制御（launch control）ポリシーを保護してもよい。
【００３７】
一般的に、安全な隠れ環境にブートされるオペレーションには、１）起動（launch）段階、及び、２）証明（attestation）段階の２つの段階が存在する。起動段階では、ファームウェアが、ＨＲＭによって主メモリから隠されるメモリページに読み込まれる。初めに、非対称コード署名キーを使用して、整合性マニフェストの検証が行われる。そして、マニフェストに収容されているホワイトリスト（例えば、ハッシュ値）を使用して、ロードされるモジュールの検証が行われる。
【００３８】
ＨＲＭによってのみアクセス可能な拡張レジスタにコード測定値が記憶されるため、信頼できないコードによってその値が更新又はリセットされないようになっている。以下に記載するように、一実施形態において、検証対象となる第１オブジェクトは、カーネル０と称され、隠れ環境の一時カーネル（transient kernel）であり、隠れ環境の永続的カーネル（カーネル１）を起動するのに使用されるブートローダーである。カーネル０は、ＨＲＭからコード署名キーを受信して、コード整合性測定を実行し、カーネル１に対する検証を行う。測定結果は、ＨＲＭに渡されて、拡張レジスタに格納される。そして、カーネル１は、カーネル０から供給された起動制御ポリシーを利用して、アプリケーションコード整合性を検証する。アプリケーションの整合性測定値は、起動履歴（launch history）と称されるログファイルに記録されてもよい。証明段階の詳細について、以下に説明する。
【００３９】
図７には、本発明の一実施形態に係る、高レベル起動方法のフローチャートが示されている。図７に示すように、方法５００は、システムリセットで開始してもよい（ブロック５１０）。ＨＲＭコードを実行して、一時カーネル（transient kernel）の検証を行ってもよい（ブロック５２０）。一時カーネルが検証された場合（ひし形５３０）には、制御がブロック５４０に移り、一時カーネルの測定値がプロセッサの拡張レジスタに格納されてもよい（ブロック５４０）。検証に失敗した場合には、検証失敗を報告してもよい（ブロック５３５）。
【００４０】
図に示すように、検証により一時カーネルが有効であると示されると、一時カーネルが起動されて（ブロック５５０）、隠れカーネルの検証を行うべく実行されてもよい（ブロック５６０）。この隠れカーネルは、隠れ実行環境に対する永続的なカーネルであってもよい。そして、ひし形５６５において、隠れカーネルが証明されているかの判断が行われてもよい。証明されている場合には、隠れカーネルの測定値が拡張レジスタに格納されて（ブロック５７５）、隠れカーネルを使用して実行すべき１以上のアプリケーションを認証してもよい（ブロック５８０）。隠れカーネルが証明されていない場合には、制御はブロック５７０に移り、検証失敗が報告される。図７の実施形態において特定の実装形態が示されたが、本発明の範囲は、この点に関して限定されない。
【００４１】
アプリケーションの起動は、ＨＲＭに向かって先行する層（レイヤ）の起動成功に依存し、これについては、図８に本発明の一実施形態に係る起動オペレーションのフロー５００'に詳細に記載されている。図に示すように、ＨＲＭ層５１０'は、マイクロコード（及びＨＲＭ）が実行されるパッチ・アット・リセット（Patch-at-Reset）メカニズムの一部として黙示的に起動される。ＨＲＭコード自体は、製造段階の一部として署名される。コードイメージに含まれるものとしては、製造者が発行するRivest Shamir Adelman（ＲＳＡ）２０４８又は公開キーであるコード署名キー（ＨＰＫ）がある。リセットの後、ＨＥＥカーネル０コードが、ＨＲＭによって読み込まれる。カーネル０及びカーネル１イメージは、不揮発性記憶装置に位置してもよい。イメージは、実行可能コード及びコードのインテグリティハッシュを含む署名されたマニフェストを含む。
【００４２】
ＨＲＭがカーネル０を読み込む時、ＨＲＭは、マニフェストにおけるハッシュ値と比較されるカーネル０コードのハッシュ（例えば、ＡＥＳ−ＣＭＡＣハッシュ）を計算する。ＨＰＫコード署名キーを使用して、マニフェスト署名の検証が行われる。カーネル０イメージ整合性が証明されると、プロセッサ内に存在してもよい拡張レジスタ５１５'が、ハッシュ値及び検証成功を示すフラグ（例えば、K0_SUCCESS_BIT = TRUE）で更新されてもよい。証明されなかった場合には、レジスタは、検証失敗を示すべく更新される（例えば、K0_SUCCESS_BIT = FALSE）。
【００４３】
フラグビットが設定されている場合（例えば、K0_SUCCESS_BIT = TRUE）にのみ、ＨＲＭがカーネル０を起動し、カーネル０にＨＰＫ公開キーが渡された時に、カーネル０層５２０'が開始されてもよい。設定されていない場合には、ＨＲＭは、カーネル０及びカーネル１の拡張レジスタの使用を許可しない。一実施形態において、カーネル０は、カーネル１の起動を目的とする一時カーネルである。カーネル０は、カーネル１コード、コードのハッシュ、カーネル１で実行可能なアプリケーションのホワイトリストを収容するアプリケーション起動制御ポリシー（ＡｐｐＬＣＰ）及びＨＰＫの署名を含むカーネル１マニフェストを含む。ＡｐｐＬＣＰはハッシュされて、拡張レジスタ５１５'に拡張される。ＡｐｐＬＣＰフォーマットは、拡張レジスタに拡張されたハッシュに含まれるバージョン情報を含んでもよい。カーネル０がカーネル１コードを読み込む時、カーネル０は、カーネル１マニフェストに置けるハッシュ値と比較されるカーネル１コードのハッシュ（例えば、ＡＥＳ−ＣＭＡＣハッシュ）を計算する。マニフェスト署名は、ＨＰＫコード署名キーを使用して検証される。一実施形態において、カーネル１コアサービス及び共有ライブラリの全ては、カーネル１整合性測定に含まれる。
【００４４】
カーネル１のイメージ整合性が確認された場合には、拡張レジスタ５１５'は、ハッシュ値及び検証成功を示すフラグ（例えば、K1_SUCCESS_BIT = TRUE）で更新される。確認されなかった場合は、レジスタは、検証失敗を示すべく設定されるフラグ（例えば、K1_SUCCESS_BIT = FALSE）で更新される。カーネル１が、ＡｐｐＬＣＰインテグリティハッシュを計算する。ハッシュは、更新のためにレジスタ５１５'を拡張するべく与えられる。この時、カーネル１レイヤ（層）５３０'が起動される。起動の一部として、ＡｐｐＬＣＰがカーネル１に渡される。カーネル１は、起動されるアプリケーション各々に対してインテグリティハッシュを計算することにより、アプリケーションを安全に読み込む。ＡｐｐＬＣＰとは別に、あるポリシーが、どのアプリケーションを読み込むべきかを決定する。カーネル１が計算したハッシュ（ＡＥＳ−ＣＭＡＣ）が、ＡｐｐＬＣＰに収容されているハッシュ値と一致する場合には、アプリケーション整合性チェックは成功となる。アプリケーション起動結果の履歴は、起動履歴５３５'に記録されてもよい。この時、隠れ環境は、実行の準備ができている。
【００４５】
証明段階において、検証装置は、環境インテグリティの証明を取得する要求を開始してもよい。検証装置は、ノンス（nonce）（例えば、ノンス１）をカーネル１に供給して、証明結果が新しいものである（すなわち、前の要求から再生されたものでない）こと確かにする。そしてカーネル１は、処理のためにノンス１を有するＨＲＭへと渡すべき起動履歴のハッシュを構築してもよい。
【００４６】
ＨＲＭは、起動履歴ハッシュ、ノンス、拡張レジスタ及びＯｗｎｅｒＩＤ（以下で説明する）をメッセージに組み込んでもよく、メッセージは、プライベートキーによってデジタル署名される。署名された証明記録は、カーネル１に戻された後、元の検証装置に転送される。検証装置は、以前に受信したプライベートキーのパブリックコピーを使用して、ＥＰＩＤ署名を確認する。検証装置は、隠れ環境とのやり取りに関連するリスクを評価するべく証明記録を分析するポリシーを適用する。
【００４７】
様々な実施形態において、マイクロプロセッサコアとは別個に証明制御部を設ける必要なく、証明がプロセッサに完全に提供されてもよい。これにより、バスアーキテクチャに任せる必要がなくなり、証明制御部とコアを結合するインターコネクトも必要なくなる。また、実施形態は、オンチッププロセッサリソースが隠れ簡易容易性（manageability）環境のインスタンスを作成できることから、隠れ環境と証明とを組み合わせることができる。
【００４８】
すなわち、証明は、プロセッサコアで実行されるマイクロコードにおける隠れ環境と一体化される。マイクロコードは、プロセッサマイクロコードと同様な信用の基点を有し、ＥＰＩＤ、拡張レジスタ及びコード署名キーの適切な管理を任されてもよい。ＥＰＩＤを使用して受信された証明に署名を行うことにより、証明記録は、所定の製造者が提供するハードウェアによって構築されていることから、検証装置は、証明記録が信頼できるものであると知ることができる、ユーザー生成プライベートキー（例えば、ＯｗｎｅｒＩＤ）が使用される実施形態では、ＯｗｎｅｒＩＤを証明記録に含めることにより、プラットフォームのオーナー（Owner）が、どの程度ＯｗｎｅｒＩＤを固有のものとするか又は固有でないものとするかを決定することによって、プライバシー属性を制御することができる。
【００４９】
ＨＥＥ環境の証明は、検証装置の証明要求メッセージで開始される。検証装置は、カーネル１とやり取りする能力を有するいかなる環境であってもよい。図９は、本発明の一実施形態に係る証明方法６００のフローチャートである。図９に示すように、検証装置６１０は、証明が有意義なトランザクションに固有のノンス（nonce）（ノンス１）を計算する。証明書登録（certificate enrollment）プロセスのように長寿命（数年にわたる）である場合もあるし、ウェブページにサービスを提供するハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）セッションのような短寿命（数秒）である場合もある。検証装置は、ノンス１が同様に構築されるかについての完全な制御を有する。ノンス１は、証明が取得されるトランザクションに対するリプレイアタックを防いでもよい。検証装置６１０は、どのアプリケーションを証明に含めるべきかを特定する証明要求の一部として、ノンス１をカーネル１  ６２０に供給する。
【００５０】
カーネル１は、インテグリティ値を取得し、所定のアプリケーション（例えば、Ａｐｐ−Ｘ）に対するステートを起動するべく、起動履歴６２５にクエリ（問い合わせ）を行う。そして、ノンス１と共に情報が、ＨＲＭ６３０に転送される。ＨＲＭは、隠された構成の一部として顧客の環境に提供されるＯｗｎｅｒｌＤのようなプライベートキー及びカーネル１によって渡される情報を含む証明記録（attestation record）を構築する。図に示すように、ＯｗｎｅｒｌＤ６３５は、プロセッサの内部又は外部のＨＲＭと関連付けられた不揮発性メモリに格納されてもよい。製造者が規定するＩＤとは対照的に、プラットフォームが最初に環境に読み込まれる時、ＯｗｎｅｒｌＤを形成して、プラットフォームのオーナーがハードウェアに対する自身のＩＤを確立することができる。このように、ハードウェアのオーナーは、プラットフォームの名付け方、及び、どの程度の固有性が望ましいかを決定することができる。したがって、機構のプライバシーポリシーに基づいて、このＯｗｎｅｒｌＤは、決められた量の個人特定情報を開示してもよい。ＯｗｎｅｒｌＤは、例えば、アンコア内のヒューズから導出されたＨＲＭラッピングキー（ＨＷＫ）を使用して暗号化される。そして、ラッピングされたＯｗｎｅｒｌＤは、カーネル０、カーネル１、アプリケーション、マニフェスト及びアプリケーションデータと共に、不揮発性記憶装置に格納されてもよい。例えば、アンコア内に収容される機械固有レジスタ（machine specific register：ＭＳＲ）である拡張レジスタ６３８からの情報はカーネル１及びカーネル０のインテグリティ測定値及びＡｐｐＬＣＰのハッシュを含み、ＥＰＩＤプライベートキーを使用して署名される照明記録が供給される。
【００５１】
署名された結果は、検証装置６１０に転送されて、そこでＥＰＩＤ公開キーを使用してＥＰＩＤ署名の検証が行われる。証明記録ノンス１が、元のデータと比較されて、リプレイアタックの検出が行われる。顧客によって提供されるＯｗｎｅｒｌＤのチェックが行われ、検証装置によって所有されるプラットフォームであるかの判断がなされる。Ａｐｐ−Ｘが目的の環境下で実行されているか検証するべく、アプリケーションのホワイトリスト、カーネル１及びカーネル０イメージを調べてもよい。一例として、顧客の環境内に配置されるプラットフォームに割り当てられたＯｗｎｅｒｌＤは、通常ネットワーク又は企業内に配置される検証エージェントによって問い合わせられるディレクトリサービスに保管される。検証装置はまた、ディレクトリサービスに保管されているオーナー承認済カーネル、アプリケーション及び設定のホワイトリストにアクセスしてもよい。
【００５２】
図１０は、本発明の一実施形態に係るプロセッサのブロック図である。図１０に示すように、プロセッサ７００は、マルチステージのパイプラインされたアウトオブオーダープロセッサであってもよい。図１０のプロセッサ７００は、本発明の一実施形態に係る隠れ実行環境に使用される様々な特徴を示すべく、相対的に簡略化されて図示されている。
【００５３】
図１０に示すように、プロセッサ７００は、実行されるマクロ命令をフェッチするのに用いられ、プロセッサ内で後に利用されるのに備えて命令を準備するフロントエンドユニット７１０を含む。例えば、フロントエンドユニット７１０は、フェッチユニット７０１、命令キャッシュ７０３及び命令デコーダ７０５を含んでもよい。図に示すように、フロントエンドユニット７１０は更に、プロセッサのＩＳＡのプロセッサ命令を格納するＩＳＡマイクロコードストア７０６を含む。また、別の隠れマイクロコードストア７０８が、隠れ実行環境に対するプロセッサ命令を格納することができる。フェッチユニット７０１は、例えば、メモリ又は命令キャッシュ７０３からマクロ命令をフェッチしてもよく、フェッチした命令を命令デコーダ７０５に供給して、プリミティブ、すなわち、プロセッサによって実行されるマクロオペレーションへとデコードしてもよい。
【００５４】
図１０に示すように、フロントエンドユニット７１０と実行ユニット７２０との間には、マイクロ命令を受信して実行に備えるアウトオブオーダ（ＯＯＯ）エンジン７１５が結合されてもよい。具体的には、ＯＯＯエンジン７１５は、マイクロ命令フローを並び替えて、実行に必要な様々なリソースを割り当てると同時に、レジスタファイル７３０及びベクトルレジスタファイル７３５のような様々なレジスタファイル内の記憶ロケーションにおける論理的レジスタのリネームを提供する様々なバッファを含んでもよい。レジスタファイル７３０は、整数及び浮動小数点オペレーションに対して、別のレジスタファイルを含んでもよい。ベクトルレジスタファイル７３５は、例えば、１レジスタにつき２５６又は５１２ビットといったベクトルサイズ単位に対する記憶領域を提供してもよい。拡張レジスタ７２５及び不揮発性記憶装置７２２のような更なる記憶装置が存在してもよい。上記したように、拡張レジスタ７２５は、隠れ実行環境における証明オペレーションの間に使用される情報を格納するのに使用されてもよい。様々な情報の中でも、不揮発性記憶装置７２２は、例えば、ＥＰＩＤ及びＯｗｎｅｒｌＤを含むプライベートキー及びプロセッサ識別子を格納してもよい。
【００５５】
実行ユニット７２０内には様々なリソースが存在してもよく、例えば、様々な整数、浮動小数点及び単一命令複数データ（ＳＩＭＤ）ロジックユニット、暗号化アクセラレータのようなその他の専用ハードウェアが存在してもよい。結果は、リタイアメントロジック、すなわち、リオーダバッファ（ＲＯＢ）７４０に供給されてもよい。具体的には、ＲＯＢ７４０は、実行される命令と関連付けられた情報を受信するための様々なアレイ及びロジックを含んでもよい。情報は、ＲＯＢ７４０によって調べられて、命令が有効にリタイアされて、得られたデータがプロセッサのアーキテクチャ状態にコミットされるか否か、又は、命令の適切なリタイヤメントを阻む１以上の例外が発生したかが判断される。無論、ＲＯＢ７４０は、リタイヤメントに関するその他のオペレーションを扱ってもよい。
【００５６】
図１０に示すように、ＲＯＢ７４０は、一実施形態ではローレベルキャッシュ（例えば、Ｌ１キャッシュ）であるキャッシュ７５０と結合されるが、この点に関して、本発明の範囲は限定されない。また、実行ユニット７２０は、キャッシュ７５０と直接結合することができる。キャッシュ７５０からのデータ伝送がハイレベルキャッシュ、システムメモリ等で発生してもよい。図１０の実施形態では、ハイレベルの場合が示されているが、本発明の範囲は、この点に関して限定されない。
【００５７】
実施形態は、コードに実装されてもよく、また、命令を実行するシステムをプログラムするのに使用することができる命令を格納する記憶媒体に格納されてもよい。記憶媒体としては、特にこれに限定されないが、フロッピー（登録商標）ディスク、光ディスク、半導体ドライブ（solid state drive：ＳＳＤ）、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、再書き込み可能コンパクトディスク（ＣＤ−ＲＷ）及び磁気光学ディスクを含むあらゆる種類のディスク、並びに、リードオンリーメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）及びスタティックランダムアクセスメモリ（ＳＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）、消去可能−プログラム可能リードオンリーメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能−プログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、磁気又は光学カードのような半導体デバイス、又は、電気的命令を格納するのに適したその他の種類の媒体が含まれる。
【００５８】
本発明が、限られた数の実施形態を参照して説明されたが、数多くの改良及び変更が可能であることは、当業者にとって明らかである。添付の特許請求の範囲は、本発明の精神及び範囲におけるこのような改良及び変更も含むことを意図している。
【図１】
0005390703.tif 000002
【図２】
0005390703.tif 000003
【図３】
0005390703.tif 000004
【図４】
0005390703.tif 000005
【図５】
0005390703.tif 000006
【図６】
0005390703.tif 000007
【図７】
0005390703.tif 000008
【図８】
0005390703.tif 000009
【図９】
0005390703.tif 000010
【図１０】
0005390703.tif 000011