(57)【特許請求の範囲】
【請求項１】
保護データにアクセスする、プログラムの実行中に、前記保護データを、エンクレーブページキャッシュ（ＥＰＣ）とシステムメモリとの間で移動させる第１の命令を少なくとも実行する実行論理と、
トランスレーション・ルックアサイド・バッファ（ＴＬＢ）と、
を備え、
前記ＴＬＢは、ＴＬＢ中の少なくとも１つのエントリがエンクレーブ用であることを示す少なくとも１つのビットを含む、
プロセッサ。
【請求項２】
前記プログラムがハードディスクドライブまたは保護メモリに格納されているときに、セキュリティマップ（ＳＭＡＰ）が前記プログラムの整合性の確保を助けるために使用される、
請求項１に記載のプロセッサ。
【請求項３】
前記実行論理は、セキュアなエンクレーブで実行されているソフトウェアスレッドを識別する、ユーザのプログラムに前記ソフトウェアスレッドの実体を知らせる第２の命令を少なくとも実行する、
請求項１又は２に記載のプロセッサ。
【請求項４】
前記実行論理は、セキュアなエンクレーブに格納されているデータの整合性を判断するべく、セキュアなマップ（ＳＭＡＰ）フィールドとセキュリティ情報（ＳＥＣ＿ＩＮＦＯ）フィールドとを含む少なくとも１つの情報フィールドに動的にアクセスする第２の命令を少なくとも実行する、
請求項１から３のいずれか１項に記載のプロセッサ。
【請求項５】
前記実行論理は、メモリに格納されているセキュアなエンクレーブの状態を、ローカルエージェントまたは遠隔エージェントのいずれかに報告する第２の命令を少なくとも実行する、
請求項１から４のいずれか１項に記載のプロセッサ。
【請求項６】
ソフトウェアプログラムの実行中に、前記ソフトウェアプログラムを攻撃から保護するクリプト・メモリ・アパーチャ（ＣＭＡ）と、
前記ソフトウェアプログラムが実行していない間に前記ソフトウェアプログラムを保護するセキュアなマップ（ＳＭＡＰ）と
を更に備える請求項１から５のいずれか１項に記載のプロセッサ。
【請求項７】
前記実行論理は、セキュアなエンクレーブ内の対応するメモリまたはソフトウェアスレッドの割り当てまたは割り当て解除をする少なくとも１つのセキュアなエンクレーブアクセス命令を実行する、
請求項１から６のいずれか１項に記載のプロセッサ。
【請求項８】
単一のプロセッササイクルにおいてセキュアなエンクレーブ内で複数のメモリ更新を行わせる階層保護ツリー、ＳＭＡＰを更に備える、
請求項１から７のいずれか１項に記載のプロセッサ。
【請求項９】
前記実行論理は、セキュアなエンクレーブに固有キーを提供する第２の命令を少なくとも実行する、
請求項１から８のいずれか１項に記載のプロセッサ。
【請求項１０】
前記実行論理は、アントラステッド・エージェントが管理するトラステッド環境を構築する第２の命令を少なくとも実行する、
請求項１から９のいずれか１項に記載のプロセッサ。
【請求項１１】
前記実行論理は、セキュアなエンクレーブにアクセスするためのライセンスの有効性を、前記エンクレーブのサイズをライセンス証明書が規定するサイズと比較して判断する第２の命令を少なくとも実行する、
請求項１から１０のいずれか１項に記載のプロセッサ。
【請求項１２】
前記実行論理は、セキュアなエンクレーブのユーザレベルのポリシー管理を行い、制御ビットにより制御される、
請求項１から１１のいずれか１項に記載のプロセッサ。
【請求項１３】
前記実行論理は、ユーザに対してライセンス許諾されるセキュアなエンクレーブの少なくとも１つのインスタンスに対するアクセスを許可する第２の命令を少なくとも実行する、
請求項１から１２のいずれか1項に記載のプロセッサ。
【請求項１４】
前記実行論理は、セキュアなエンクレーブのデバッグを行わせる、デバッグを許可されたエンクレーブのみのエンクレーブセキュリティを侵害する第２の命令を少なくとも実行する、
請求項１から１３のいずれか１項に記載のプロセッサ。
【請求項１５】
それぞれエンクレーブページキャッシュ（ＥＰＣ）に対してメモリページの割り当てまたは割り当て解除を行う少なくとも１つの命令を実行する実行論理と、
トランスレーション・ルックアサイド・バッファ（ＴＬＢ）と、
を備え、
前記ＴＬＢは、ＴＬＢ中の少なくとも１つのエントリがエンクレーブ用であることを示す少なくとも１つのビットを含む、
プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は概して、情報処理分野に係り、より詳しくは、コンピューティングシステムおよびマイクロプロセッサのセキュリティ分野に係る。
【背景技術】
【０００２】
コンピュータシステム内におけるアプリケーションおよびそのデータの間の実行および整合性を確保することは、益々重要になってきている。先行技術におけるセキュリティ技術では、セキュアなアプリケーションおよびデータを柔軟に且つ信頼性高く適切に提供することができない。
【０００３】
本発明の実施形態は、添付図面において限定ではなく例示として示されており、図面において同様の参照番号を付された部材同士は同様の部材である。
【図面の簡単な説明】
【０００４】
【図１】本発明の少なくとも１つの実施形態を利用することができるマイクロプロセッサのブロック図である。
【図２】本発明の少なくとも１つの実施形態を利用することができる共有バスコンピュータシステムのブロック図である。
【図３】本発明の少なくとも１つの実施形態を利用することができるポイントツーポイントインターコネクトコンピュータシステムのブロック図である。
【図４】本発明の少なくとも１つの実施形態を利用することができるマルチコアマイクロプロセッサのブロック図である。
【図５】本発明の一実施形態のセキュアなエンクレーブ（ＳＥ）の可能性のある実装例である。
【図６】本発明の少なくとも１つの実施形態を利用することができるマイクロプロセッサのブロック図である。
【図７】本発明の一実施形態に実装可能なエンクレーブページキャッシュの一部分にアクセスする制御構造の一例を示す。
【図８】本発明の一実施形態におけるスレッド制御構造の一例を示しており、データ構造同士の縫合を示す。
【図９】本発明の一実施形態にみることができる、クオーティングとして知られているソフトウェア認証プロセスの一ステップを示す。
【図１０】本発明の一実施形態における、計測値レジスタセットからクオートを生成するための各ステップを示す。
【図１１】本発明の一実施形態における計測値レジスタＭＲ＿ＥＡＤＤを更新するＥＡＤＤプロセスを示す。
【図１２】本発明の一実施形態におけるレポートを生成するＥＲＥＰＯＲＴ命令を示す。
【図１３】本発明の一実施形態に見られる中継保護メカニズムを示す。
【図１４】本発明の一実施形態に見られる中継保護メカニズムのＭＡＣツリー構造の部分の一例を示す。
【図１５】ページ不良エラーコードマップの実装法を示す本発明の一実施形態を示す。
【図１６】本発明の一実施形態のエンクレーブを立ち上げる許可証を生成するプロセスの一例を示す。
【図１７】本発明の一実施形態における、単一のパッケージのセキュアなエンクレーブのためのプラットフォームキー階層の実装例を示す。
【図１８】本発明の一実施形態における、マイクロコードベースのセキュアなエンクレーブキー階層の一例を示す。
【図１９】本発明の一実施形態にみることができるエンクレーブＣＴＬ＿ＭＳＲレジスタを示す。
【図２０】本発明の一実施形態で利用される暗号ブロック鎖アルゴリズムを示す。
【図２１】本発明の一実施形態における単一のＡＥＳブロックの暗号を示すフローチャートである。
【図２２】本発明の一実施形態で実装される暗号ブロック鎖アルゴリズムを利用する複数のＡＥＳブロックの暗号例を示すフローチャートである。
【図２３】スタックスイッチで割り込んだ後のアプリケーションおよび割り込みスタックの一実施形態を示す。
【図２４】本発明の一実施形態の複数の状態セーブ領域スロットのスタックを実装する方法の一例を示す。
【図２５】本発明の一実施形態における割り込み、不良、およびトラップの状態遷移を有する状態マシンの一部を示す。
【図２６】本発明の一実施形態における、デジタル乱数生成器のためのプロセッサパッケージを示す。
【図２７】本発明の一実施形態におけるデバッグレジスタＤＲ７  ２７００を示す。
【発明を実施するための形態】
【０００５】
本発明の実施形態は、セキュアなアプリケーションおよびデータを柔軟に且つ信頼性高く提供する技術に係る。本発明には複数の態様の複数の実施形態があるが、「セキュアなエンクレーブアーキテクチャ」なる添付書類を、少なくとも１つの実施形態としてここに参照として組み込む。しかし、組み込まれた文献は、本発明の実施形態の範囲を制限するものではなく、本発明の精神および範囲内で他の実施形態も利用可能である。
【０００６】
図１は、本発明の少なくとも１つの実施形態を利用することができるマイクロプロセッサのブロック図である。特に図１は、それぞれがローカルキャッシュ１０７と１１３とに関連付けられた１以上のプロセッサコア１０５および１１０を有するマイクロプロセッサ１００を示す。さらに図１には、ローカルキャッシュ１０７および１１３のそれぞれに格納されている情報の少なくとも一部のバージョンを格納する共有キャッシュメモリ１１５が示されている。一部の実施形態では、マイクロプロセッサ１１０はまた、図１に示されていない他の論理（例えば、集積メモリコントローラ、集積グラフィックコントローラ、および、コンピュータシステム内の、例えばＩ／Ｏ制御等の他の機能を実行する論理）を含むこともできる。一実施形態では、マルチプロセッサシステム内の各マイクロプロセッサまたはマルチコアプロセッサ内の各プロセッサコアは、少なくとも１つの実施形態では、セキュアなエンクレーブ技術を実行するための論理１１９を含む、または論理１１９と関連付けられている。論理には回路、ソフトウェア（有形媒体に具現化されている）、またはこれら両方を含むことで、一部の先行技術の実装例よりも効率的に複数のコアまたはプロセッサ間のリソース割り当てを行うことができる。
【０００７】
例えば図２は、本発明の一実施形態を利用することができるフロントサイドバス（ＦＳＢ）コンピュータシステムを示す。プロセッサ２０１、２０５，２１０、または２１５いずれもが、プロセッサコア２２３、２２７、２３３、２３７、２４３、２４７、２５３、２５７を含む、またはこれらと関連付けられているローカルレベル１（Ｌ１）キャッシュメモリ２２０、２２５、２３０、２３５、２４０、２４５、２５０、２５５のうちいずれかの情報にアクセスすることができる。さらには、プロセッサ２０１、２０５、２１０、または２１５いずれもが、チップセット２６５を介して、システムメモリ２６０から、または、共有レベル２（Ｌ２）キャッシュ２０3、２０７、２１３、２１７のいずれかからの情報にアクセスすることができる。図２に示すプロセッサのうち１以上は、少なくとも一実施形態におけるセキュアなエンクレーブ技術を実行する論理２１９を含む、または論理２１９と関連付けられてよい。
【０００８】
図２に示すＦＳＢコンピュータシステムに加えて、ポイントツーポイント（Ｐ２Ｐ）インターコネクトシステムおよびリングインターコネクトシステム等の他のシステム構成を、本発明の様々な実施形態と協働して利用することもできる。例えば図３のＰ２Ｐシステムは、幾つかプロセッサを含むことができ、このうち２つのプロセッサ３７０、３８０が例示されている。プロセッサ３７０、３８０はそれぞれ、メモリ３２、３４と接続するためにローカルメモリコントローラハブ（ＭＣＨ）３７２、３８２を含んでよい。プロセッサ３７０、３８０は、ＰｔＰインタフェース回路３７８、３８８を利用してポイントツーポイント（ＰｔＰ）インタフェース３５０を介してデータを交換することができる。プロセッサ３７０、３８０はそれぞれ、ポイントツーポイントインタフェース回路３７６、３９４、３８６、３９８を利用して個々のＰｔＰインタフェース３５２、３５４を介してチップセット３９０とデータを交換することができる。チップセット３９０はさらに、高性能グラフィックインタフェース３３９を介して高性能グラフィック回路３３８とデータを交換することができる。本発明の実施形態は、任意の数のプロセッサコアを有する任意のプロセッサ内に配置されてもよいし、または、図３のＰｔＰバスエージェントそれぞれの内部に配置されてもよい。一実施形態では、任意のプロセッサコアが、ローカルキャッシュメモリ（不図示）を含む、またはこれと関連付けられていてよい。さらに、共有キャッシュ（不図示）が、両プロセッサ外のプロセッサに含まれていながらも、ｐ２ｐインターコネクトを介して両プロセッサに接続されており、プロセッサを低電力モードにする場合、これらプロセッサの両方または片方のローカルキャッシュ情報を共有キャッシュに格納できる、という構成も可能である。図３に示す１以上のプロセッサまたはコアは、少なくとも１つの実施形態においては、セキュアなエンクレーブ技術を実行する論理３１９を含む、または論理３１９と関連付けられていてよい。
【０００９】
少なくとも１つの実施形態の１以上の態様は、プロセッサ内の様々な論理を表す機械可読媒体に格納される代表的なデータにより実装することができ、データが機械により読み出されることで、機械は、ここに記載する技術を実行する論理を製造する。「ＩＰコア」として知られているような表現は、有形の機械可読媒体（「テープ」）に格納されて、論理またはプロセッサを実際に製造する製造機械に装填するために様々な顧客または製造用設備に供給されてよい。
【００１０】
従って、マイクロアーキテクチャメモリ領域アクセスを方向付ける方法および装置が記載された。上述した記載は、例示を意図しており限定は意図していない。数多くの他の実施形態も、上述した記載を読み理解した当業者には明らかであろう。従って本発明の範囲は、添付請求項および請求項が含みうる均等物の全範囲を参照して決定される。
【００１１】
セキュアなエンクレーブは、アプリケーションにＯＳプロセスのコンテキスト内でコードを実行してデータを格納させるための安全な場所を提供する命令セットである。この環境下で実行されるアプリケーションはエンクレーブと称される。エンクレーブは、エンクレーブページキャッシュ（ＥＰＣ）から実行される。エンクレーブページは、ＯＳによりＥＰＣに装填される。エンクレーブのページがＥＰＣから取り出されるたびに、暗号保護を利用して、エンクレーブの機密性を保護して、エンクレーブをＥＰＣに戻すときの改ざんを検知することができる。ＥＰＣ内で、エンクレーブデータは、プロセッサが提供するアクセス制御メカニズムを利用して保護される。以下の表２−１は、特権のないエンクレーブ命令の完全リストを提供している。
【表２−１】
0005443599.tif 000002
【００１２】
これらの命令はリング３でのみ実行される。全ての他の時点においては、これらは＃ＵＤ不良を生成する。表２−２は、特権を有する命令のリストを提供する。
【表２−２】
0005443599.tif 000003
【００１３】
エンクレーブページキャッシュ（ＥＰＣ）は、エンクレーブコードを実行して、保護されたエンクレーブデータにアクセスする場所である。ＥＰＣは、プラットフォームの物理アドレス空間内に配置されるが、アクセスはＳＥ命令を利用してのみ可能となる。ＥＰＣは、多くの異なるエンクレーブからのページを含んでよく、ページの整合性および機密性を保護するアクセス制御メカニズムを提供する。ページキャッシュは、プラットフォームのコヒーレントな物理メモリに利用されるものに類似したコヒーレンスプロトコルを維持している。
【００１４】
ＥＰＣは幾つかの方法でインスタンス化することができる。例えば、プロセッサパッケージ上の専用ＳＲＡＭから構築することができる。クリプト・メモリ・アパーチャ（Crypto Memory Aperture）が好適な実装メカニズムとして知られている。このメカニズムにより、ＥＰＣを大きくすることができる。ＣＭＡについては以下で詳述する。
【００１５】
エンクレーブページキャッシュマップ（ＥＰＣＭ）は、ＥＰＣ内の各ページに関連付けられた状態情報を含む。この状態は、ページが属すエンクレーブ、装填されるページの状態等の情報を提供する。ＥＰＣからページが取り出されると、状態情報もエクスポートされて、暗号手段を利用して保護される。エンクレーブページをＥＰＣに再装填するときには、状態情報を検証する。
【００１６】
図４は、本発明の少なくとも１つの実施形態を利用することができるマルチコアマイクロプロセッサ４９９のブロック図である。マイクロプロセッサ４９９は、複数のコア４００、４２０を含むことができる。コア４００は、ＣＲ３  ４０２、ＳＭＢＲ４０４、ページミスハンドラ４０８、ＰＭＨＥ４１０、および変換ルックアサイドバッファ４１２を含むことができる。コア４２０は、ＣＲ３  ４２２、ＳＭＢＲ４２４、ページミスハンドラ４２８、ＰＭＨＥ４３０、および変換ルックアサイドバッファ４３２を含むことができる。本発明の一部の実施形態では、マイクロプロセッサ４９９は、コア４００とコア４２０との間で共有されるレベル１キャッシュ４４０を含む。レベル１キャッシュ４４０は、最終レベルのキャッシュ４４５との間でデータをやりとりすることができる。ホームエージェント４５０は、最終レベルのキャッシュ４４５に接続して、暗号エンジン４５２に接続（attach to）することができる。ホームエージェント４５０は、クリプト・メモリ・アパーチャ４８０の物理アドレス空間４８８を、メモリコントローラ４５４を介して評価（assess）することができる。クリプト・メモリ・アパーチャ４８０は、エンクレーブページキャッシュ４８２、エンクレーブページキャッシュマップ４８４、補助格納部４８６、物理アドレス空間の一部４８８を含む。
【００１７】
ＣＭＡは、ＥＰＣ、ＥＰＣＭ、その他ＳＥ関連の構造をインスタンス化する助けを行うメカニズムである。アパーチャとは、この目的の利用に備えさせられる物理アドレス空間の一領域のことである。
【００１８】
ＥＰＣおよびＥＰＣＭ（およびその他の実装データ構造）は、アパーチャ内のある位置にマッピングされる。補助格納部は、これらリソースのための実際のデータのことである。ＥＰＣのメモリ要求が生成されると、ＣＭＡは、暗号化されたＥＰＣデータが含まれている補助格納部の位置に再マッピングを行い、そのデータを取得する。
【００１９】
一般的には、殆どのＳＥは、マイクロコードに実装される。ＣＭＡ、パッケージ外およびコア内のデータ移動制御する論理を含む複数の位置にハードウェアによるサポートが必要である。
【００２０】
図５は、本発明の一実施形態のセキュアなエンクレーブ（ＳＥ）の可能性のある実装例である。オペレーティングシステムおよびＶＭＭ５４２は、ＥＬＰＧ命令５４０を利用して、エンクレーブ５３２のエンクレーブページを、エンクレーブページキャッシュ５４４に装填することができる。マイクロプロセッサがエンクレーブ５３２内で実行していないときには、エンクレーブページキャッシュ５４４はＳＥＲＲレジスタ５３２によるソフトウェアアクセスから保護される。エンクレーブ内で実行する場合には、マイクロコードページテーブルが保護５４８を提供する。各ＶＭにはＶＭＣＳが関連付けられている。ＶＭ５１０はＶＭＣＳ５１５に接続されている。ＶＭ５２０はＶＭＣＳ５２５に接続されている。ＶＭ５３０はＶＭＣＳ５３５に接続されている。ＳＭＭ５００は、別個のコンテナにあってよく、プロセッサ状態は別個のコンテナにあってよい。
【００２１】
図５は、セキュアなエンクレーブ実装の一実施形態の高レベル概略図である。この実装例では、ＥＰＣは、マイクロコードが管理する別個のコンテナに維持されている。コンテナは、エンクレーブ内で実行されていない場合にはアクセス不可能である。エンクレーブに入った場合には、制御は、別個のコンテナに含まれているＥＰＣ内のエンクレーブコードに移される。
【００２２】
エンクレーブ内で実行されている間に起こったページ不良または例外は全て、マイクロコードにより関連ＯＳまたはＶＭＭに反映される。機械がエンクレーブ内で実行していない場合には、ＥＰＣへのアクセス制御はＳＥレンジレジスタ（ＳＥＲＲ）により提供される。機械が内部で実行されている場合には、マイクロコードはページテーブルレベルの保護を提供して、実行されているエンクレーブに属さない他のＥＰＣエントリへのアクセスを禁止する。
【００２３】
セキュアなエンクレーブを実装する一方法に、一部のプロセッサ内のマイクロコード機能を利用して命令および保護を行う、というものがある。この機能は、エンクレーブの目的達成をセキュアに行うというセキュリティ要件に適合しているだろう。
【００２４】
図２−２に示すＳＥＲＲレジスタは、ページミスハンドラＰＭＨに実装される。レジスタは、各論理プロセッサについて独立してイネーブルおよびディセーブルされてよい。
【００２５】
性能を向上させる実装におけるオプションとして、変換ルックアサイドバッファ（ＴＬＢ）のエントリがエンクレーブまたは特定のエンクレーブ用であることを示すために、１ビットまたは幾つかのビットを提供する、というものがある。これらのビットが提供されていない場合には、エンクレーブを退出するときに、他のコードがこのエンクレーブにアクセスしないようにするためにＴＬＢフラッシュが必要となる。
【００２６】
エンクレーブビットをエンクレーブモードビットと比較する。余剰ビットは、エンクレーブ空間ｉｄの機能を提供する。特定のエンクレーブはｉｄを割り当てられてよい。ｉｄは、アドレスチェックの一環として、実行中のエンクレーブのｉｄと比較される。ＴＬＢサポートは、性能向上策の１つのオプションである。ＥＰＣデータの除去によってあるエントリがＴＬＢで無効化された場合、特定のマイクロコード化された撃墜メカニズム（special microcoded shootdown mechanism）が必要となる。一実施形態では、マイクロコードがエンクレーブ信頼境界（enclave trust boundary）内の全ての他のコアと接触をとり、このエントリがどのＴＬＢ内にもないことを確かめる。他の実施形態では、他のプロセッサがＴＬＢエントリを無効化したことを確かめる手段をマイクロコードに提供するようにしてもよい。
【００２７】
ＤＭＡスヌープを回避してＥＰＣに対して無効化するためには、特別なＳＡＤおよび／またはＴＡＤエントリが提供される。これら専用のレジスタがＥＰＣを保護する。これは、ＳＥＲＲと同じ値に設定される。
【００２８】
一実施形態では、各エンクレーブのセキュアなエンクレーブに対してセキュアな鍵を保証するために、マイクロコードは乱数へのセキュアなアクセスを利用することができる。
【００２９】
エンクレーブは改ざんされないように保護されてよい。改ざん保護に利用されるメカニズムの詳細は、実装例に応じて変わる。これにより、エンクレーブが改ざんされると、改ざんを検知したスレッド上でのさらなる実行が防止される。ユーザにエンクレーブの状態を理解させるために、構築されているエンクレーブを証明するための立証メカニズムを設ける。これには、エンクレーブコンテンツの情報を提示するＥＲＥＰＯＲＴ命令が含まれる。
【００３０】
エンクレーブ設計で必要となるマイクロコード符号を簡略化するために、アーキテクチャエンクレーブというコンセプトが開発された。この種類のエンクレーブには、エンクレーブのためのコードの原本に基づいて特別なアクセス特権が与えられる。
【００３１】
電力サイクルにおけるエンクレーブ状態は、ソフトウェアポリシーに依存している。ＣＭＡ内のデータは、電力停止時に失われる。エンクレーブを保存することが望ましい場合には、ソフトウェアによって電力サイクルにおいてエンクレーブデータが失われないように保証することができる。ＥＰＣに常駐するデータは、ソフトウェアがエンクレーブをＳ３電力状態中に生かしておきたい場合には、メモリにフラッシュすることができる。ソフトウェアは、電力喪失時にアプリケーションに全てのエンクレーブの除去を義務付ける選択を行うこともできる。
【００３２】
エンクレーブはその位置に応じて保護される。ＣＰＵパッケージ外のデータは、暗号化および整合性チェックを利用して保護される。エンクレーブページキャッシュ内のコードおよびデータについては、ページがアクセス制御メカニズムを利用して保護される。
【００３３】
図６は、本発明の少なくとも１つの実施形態を利用することができるマイクロプロセッサのブロック図である。図６は、複数のプロセッサコア６００、６０５、６１０、６１５、およびキャッシュ６２０を有するマイクロプロセッサ６００を示す。エンクレーブデータ６３５は暗号化することができる。クリプト・メモリ・アパーチャデータ６３０は、エンクレーブデータ６３５の保護に利用される。
【００３４】
システムメモリに常駐しているエンクレーブページは、暗号化および整合性を利用して保護される。ページのＥＰＣへの装填においては、ページはＥＰＣにコピーされ、復号化されて、そのページの整合性をチェックする。図６は、データのこの部分を示している。
【００３５】
ＥＰＣ内に常駐しているエンクレーブページは、システムメモリに格納されてから、エンクレーブキーを利用して暗号化される。認証情報もページ格納時に格納される。ＥＰＣ内のエンクレーブデータは、復号（unencrypt）されてアクセス制御メカニズムにより保護される。プロセッサは、データの所有権を持つエンクレーブしかアクセスできないように、このデータを保護する。
【００３６】
ＥＰＣに常駐しているエンクレーブページが、キャッシュから、ＣＰＵパッケージ外のメインメモリに強制的に移動させられると、ＣＭＡ暗号化により保護される。ＣＭＡは、このデータを暗号化してデータの機密性を実現する。ＥＰＣの整合性は、ＥＰＣに対する読み書きを防止するレンジレジスタにより提供される。
【００３７】
図７は、本発明の一実施形態に実装可能なエンクレーブページキャッシュの一部分にアクセスする制御構造の一例を示す。エンクレーブページキャッシュ７２０の各ページは、エンクレーブページキャッシュマップ７１０内に対応するメタデータを有していてよい。図７に示すメタデータにおいて、リニアアドレス７００のセットを含むセキュアなエンクレーブが、リニアアドレスがエンクレーブページキャッシュマップ７１０に格納されているリニアアドレスに合致する場合、エンクレーブページキャッシュ７２０に格納されているデータにアクセスすることができる。
【００３８】
図７は、ＥＰＣおよびＥＰＣＭの配置および利用法を示す。ＥＰＣは４ｋページに分割される。各エンクレーブは、ＥＰＣに常駐している幾つかの数のページを有してよい。ＥＰＣの各ページのＥＰＣＭのエントリには、セキュリティを確保するために必要なメタ情報を提供するものもある。ＥＰＣＭの詳細は実施例に固有である。
【００３９】
アプリケーションがエンクレーブの装填を所望する場合には、ＯＳのシステムルーチンを呼び出す。ＯＳはＥＰＣ内に数ページを割り当てようとする。空いている場所がない場合には、ＯＳはビクティム・エンクレーブを選択して除去する。ＯＳは、ビクティム・エンクレーブのページを、各ページについてＥＷＢＩＮＶＰＧ命令を利用して強制的に除去（evict）する。ＯＳが強制除去を完了すると、ＥＣＲＥＡＴＥコマンドを利用してエンクレーブにセキュアなエンクレーブ制御構造（ＳＥＣＳ）を追加する。ＳＥＣＳを生成した後で、ＯＳは、ＥＡＤＤＰＲＥ命令の利用によりアプリケーションにより要求されたようにページをエンクレーブに追加する。
【００４０】
データページをエンクレーブに追加するには、ＯＳは先ず、ＥＡＤＤＳＭＡＰ命令を利用してＳＭＡＰページをエンクレーブに追加する。エンクレーブのサイズおよび配置に応じて、ＯＳは複数のＳＭＡＰページを割り当てる場合がある。エンクレーブページ全てがエンクレーブに追加されると、ＯＳはＥＩＮＩＴ命令を実行して、エンクレーブを実行する。ＥＩＮＩＴ命令に対するパラメータは、エンクレーブがその機械上での実行を許可されていることを示す認可状である。アプリケーションの装填時には許可状を生成する必要がある。ＥＩＮＩＴが無事に完了すると、アプリケーションはＥＥＮＴＥＲ命令を実行してエンクレーブに入ることができる。
【００４１】
エンクレーブが構築され、実行準備が整った旨の表示がなされると、アプリケーションは、エンクレーブに物理的メモリを追加したり取り除いたりする必要がある場合がある。エンクレーブにはこれを助けるために、さらなるメモリを追加させる命令が存在する。メモリをエンクレーブに追加する際、メモリはエンクレーブ内の正確なリニアアドレスに割り当てられる。ＯＳはこのメモリページを、リニアアドレスを示すＥＰＣにコピーする。ＥＡＤＤＰＯＳＴ命令を実行して、このメモリをエンクレーブ（enclave enclave）に追加する。ＳＭＡＰノードがＥＰＣ内に常駐していない場合には、先ずこれを装填する。
【００４２】
メモリをエンクレーブにコピーした後は、ソフトウェアは、ページを受諾してから、内部的にアクセスできるようになっていてよい。エンクレーブは、ＥＡＣＣＥＰＴ命令を実行することによりデータを受諾する。この命令は、エンクレーブ内のソフトウェアによってのみ実行可能である。
【００４３】
一部の場合には、ソフトウェアは、エンクレーブメモリの特性の修正を望む場合がる。そのためには、ＳＭＡＰを更新する必要がある。例えばソフトウェアが、別のスレッドエントリポイントであるＴＣＳをエンクレーブ内に生成しようとする場合を考える。この場合、エンクレーブは、ＥＭＯＤＩＦＹ命令を利用してページのＳＭＡＰ特性を変更するようＯＳに要求する。特性が変更された後で、エンクレーブソフトウェアは、ＥＡＣＣＥＰＴ命令を実行して、ページの利用を許可する。
【００４４】
メモリページはエンクレーブから除去することもできる。エンクレーブがページの除去の準備ができている場合には、ＯＳに要求を送る。ＯＳは、ＥＲＥＭＯＶＥ命令を実行して、ＳＭＡＰからページを除去させる。ＥＲＥＭＯＶＥ命令はさらに、ＥＰＣエントリの無効化も行う。
【００４５】
エンクレーブ環境の整合性を確保する方法としては、アクセスチェックを数回行う、というものがある。実施される様々なセキュリティ特性のなかには、データをＥＰＣに正確に位置させて、データがエンクレーブの間でリークしないようにして、参照アドレスが破損しないようにすることで、コードがエンクレーブの異なるリニアアドレスに移動させられないようにする、というものがある。
【００４６】
アクセス保護要件は、レンジャレジスタおよびマイクロコード管理されたシャドーページテーブルを利用して実装することができる。別の実施形態では、シャドーページテーブルのオーバヘッドを回避するために、ページミスハンドラハードウェアを修正して、同じアクセス制御要件を実行することができる。
【００４７】
ＥＰＣは、ＬＰがマイクロコードモードで実行中、または、ＬＰがエンクレーブ内で実行中であり、アクセスされているリニアアドレスがそのエンクレーブがカバーするリニアアドレスレンジに属している場合にのみ、論理プロセッサ（ＬＰ）によりアクセス可能である。言い換えると、ＥＰＣレンジに行くことが許されるのはマイクロコードアクセスまたはエンクレーブアクセスのみである。ＥＰＣレンジに対する他のアクセスはすべて、不法とみなされる。
【００４８】
エンクレーブアクセスは、ＥＰＣに属す物理アドレスに対して解決（resolve）されてよい。アクセスがＥＰＣ外であるが、リニアアドレスが、アドレスがエンクレーブ内にあると示している場合には、アクセスは停止されてよい。ＯＳに対する不良または命令は、報告を行う。
【００４９】
エンクレーブ内のアドレスに対するアクセスは、アクセスを成功させるためにＥＰＣ内に位置させることができる。エントリがＥＰＣに存在するかのチェックは、通常、ＥＰＣＭをチェックして、有効なビットを検証することにより行われる。各ＥＰＣページは特定のエンクレーブ専用である。そのＥＰＣエントリに対する参照は、ＥＰＣページを所有するエンクレーブによってのみ可能である。これは、実行中のエンクレーブのＳＥＣＳに、参照しているページが合致するかを検証することでチェックすることができる。
【００５０】
各ＥＰＣページは、エンクレーブ用の特定のリニアアドレスページを表す。要求されているリニアアドレスは、ＥＰＣ内のページのリニアアドレスに整合する場合がある。例えばＥＰＣＭエントリは、エンクレーブページがＥＰＣに導入されるリニアアドレスを格納する。エンクレーブアクセスがＥＰＣページに対して解決される場合には、ページを導入するリニアアドレスは、現在の要求のリニアアドレスと合致する。
【００５１】
エンクレーブのリニアアドレスマッピングは破損していてはいけない。リニアアドレスのページテーブルが破損している場合には、アクセスが不法なものとされる。これにより、攻撃者がコードおよびデータをエンクレーブの付近またはその中に運び入れることを防止する。
【００５２】
ＯＳ／ＶＭＭが初期化の後にエンクレーブにページを追加すると、ＥＡＤＤＰＯＳＴ命令が、そのページのＥＰＣＭに「係属中」ビットを設定する。係属中を示すビットは、後続するＥＰＣ書き戻しおよび強制除去（ＳＥＣ＿ＩＮＦＯを利用する）を経ても生存し続ける。エンクレーブは、ＥＡＣＣＥＰＴを発行して、係属中のビットをクリアすることができる。エンクレーブアクセスが、係属中のビットが設定されたＥＰＣページに対して解決された場合には、ＬＰは、ＯＳ／ＶＭＭにＥＦ＿ＰＥＮＤＩＮＧ不良を発行する。
【００５３】
ＯＳ／ＶＭＭが中継保護されたエンクレーブページをＥＰＣに装填すると、ＦＣＲ（フレッシュチェック要求された）ビットが、そのページのＥＰＣＭエントリに設定される。ＯＳ／ＶＭＭは、そのＥＰＣページに対してＥＵＰＳＭＡＰ命令を実行してこのビットをクリアすることで、このビットをクリアすることができる。エンクレーブアクセスの継続は、このページのＦＣＲビットが設定されていない場合に限って許可される。さもなくば、ＬＰはＥＦ＿ＦＲＥＳＨ＿ＣＨＫ不良をＯＳ／ＶＭＭに送信する。
【００５４】
各ＥＰＣＭエントリは、エンクレーブがそのページに対する書き込みを許可されているかを示す「ダーティ」なビットを含む。エンクレーブのエンクレーブページに対する書き込みは、ＥＰＣＭのそのページのダーティビットが設定されているときに限って許可される。さもなくば、ＬＰはＥＦ＿ＥＷＲＩＴＥをＯＳ／ＶＭＭに発行する。ＯＳ／ＶＭＭは、そのページに対してＥＵＰＳＭＡＰ命令を実行することで、ダーティビットを設定することができる。
【００５５】
論理プロセッサがエンクレーブ内で実行しているときはいつでも、そのエンクレーブのＳＥＣＳページがＥＰＣ内に存在しうる。しかし、ＳＥセキュリティモデルでは、エンクレーブは、自身のＳＥＣＳに直接メモリアクセスを行うことは許可されていない（ただしエンクレーブは、完全にセキュリティを脅かすという前提で、自身のエンクレーブキーを読み出すことはできる）。エンクレーブアクセスが、そのエンクレーブに対してＳＥＣＳを保持するＥＰＣページに対して解決される場合には、ＯＳ／ＶＭＭは、ＥＦ＿ＡＴＴＲＩＢ＿ＳＥＣＳ不良を介して通知を受ける。エンクレーブは、ＴＳＣ属性セットを有するページの修正は許可されていない。エンクレーブがＥＰＣに装填されたＴＣＳの修正を試みると、ＯＳ／ＶＭＭは、ＥＦ＿ＡＴＴＲＩＢ＿ＴＣＳ不良を介して通知を受ける。以下の表のサイズフィールドにおいては、４：３２および６４ビットモード両方の４バイトフィールド、８：３２および６４ビットモード両方の８バイトフィールド、および、８（４）：両方のモードにおける８バイトフィールド（上位４バイトは３２ビットモードでは無視される）という値および指標を利用することができる。
【００５６】
注：一部のフィールドは、小文字の「ｏ」から始まる名称を有する（例えばｏＬＳＰ）。これらフィールドはポインタであるが、エンクレーブでは、エンクレーブのベースに対するオフセットとして表される。この表記法により、エンクレーブページの計測値を、エンクレーブを生成した位置から独立させることができる。
【００５７】
注：フィールドは（未だ）特に決まった順序で記載されていない。一部のフィールドは、銘々のデータ構造内の異なるメモリページに移動させられてよく、これにより例えば異なる保護手段が可能となる。
【表４−１】
0005443599.tif 000004
【００５８】
各スレッドには、スレッド制御構造（ＴＣＳ）が関連付けられている。ＴＣＳは以下を含む。
【表４−２Ａ】
0005443599.tif 000005
【表４−２Ｂ】
0005443599.tif 000006
【表４−２Ｃ】
0005443599.tif 000007
スレッド状態は５つの値のうちいずれかをとることができる。
【表１】
0005443599.tif 000008
【００５９】
＜状態セーブ領域オフセット（ｏＳＳＡ）＞
状態セーブ領域オフセット（ｏＳＳＡ）は、エンクレーブで実行中に生じる割り込みまたは例外にプロセッサ状態をセーブするのに利用される状態セーブフレームのスタックを指し示している。次の状態セーブ領域（ＮＳＳＡ）が割り込みマイクロコードにより利用されて、エンクレーブでの実行中に生じる割り込みまたは例外のどこにプロセッサ状態をセーブするかが判断される。これは、ｏＳＳＡがアドレス指定するフレームアレイへのインデックスである。セーブ領域（ＣＳＳＡ）のカウントは、このＴＣＳに利用可能なＳＳＡフレームの数を特定する。割り込みまたは例外が生じ、且つ、これ以上利用可能なＳＳＡフレームがない場合には（ＮＳＳＡ＞＝ＣＳＳＡ）、割り込みまたは例外がまだ起こりえて、プロセッサ状態がクリアされるが、ＴＣＳは無効（ＩＮＶＡＬＩＤ）であるとして表示される。
【００６０】
エンクレーブでの実行中に割り込みが起こった場合には、機械の状態がＴＣＳ：：ＳＳＡ（状態セーブ領域）にセーブされる。この領域には以下が含まれる。
【表４−３Ａ】
0005443599.tif 000009
【００６１】
ＴＣＳ：：ＳＳＡは、割り込みが生じたときにもページアウトされない。ＥＥＮＴＥＲは、ＳＳＡがＥＰＣ内にあることをチェックして、物理アドレスをキャッシュする。ページが強制移動させられている場合には、ＥＷＢＩＮＶＰＧを実行中のプロセッサが、ＳＳＡを利用してスレッドを現在実行中のプロセッサでエンクレーブを退出させて、ページ不良を報告する。
【００６２】
図８は、データ構造全ての縫合方法を示す。煩雑にならないように、全てのスレッドのそれぞれの構造は示していない。アントラステッドスタック（Untrusted Stacks）およびそれに関連するポインタも省かれている。図８は、本発明の一実施形態におけるスレッド制御構造の一例を示しており、セーブ状態領域同士の縫合を示す。状態セーブ領域ポインタ８００は、セーブ領域０  ８２０を指し示している。現在の状態セーブ領域８０５は、セーブ領域１  ８２４を指し示している。次の状態セーブ領域８１０は、次のセーブ領域８２８を指し示している。セーブ状態領域の数は、利用可能なセーブ状態領域の数への参照を提供している。
【００６３】
ページ情報（ＰＡＧＥ＿ＩＮＦＯ）は、ＥＰＣ−管理命令へのパラメータとして利用されるアーキテクチャデータ構造である。
【表４−３Ｂ】
0005443599.tif 000010
ＳＥＣ＿ＩＮＦＯフラグおよびＥＰＣフラグは、ページの種類を示すビットを含んでいる。
【表２】
0005443599.tif 000011
ＳＥＣ＿ＩＮＦＯフラグは、エンクレーブページの状態を記述・説明するビットセットである。
【表４−４Ａ】
0005443599.tif 000012
【表４−４Ｂ】
0005443599.tif 000013
【表４−４Ｃ】
0005443599.tif 000014
【００６４】
セキュリティ情報（ＳＥＣ＿ＩＮＦＯ）データ構造は、偽造保護に必要な暗号メタデータを保持する。
【表４−５】
0005443599.tif 000015
【００６５】
証明書（ＣＥＲＴ）とは、アーキテクチャエンクレーブを提供される証明書構造であり、ＥＭＫＰＥＲＭＩＴに渡される。この構造は４０９６バイトであり、ページを整列されてよい（page-aligned）。
【表４−６Ａ】
0005443599.tif 000016
【表４−６Ｂ】
0005443599.tif 000017
【００６６】
ＥＲＰＯＲＴ構造は、ＥＲＥＰＯＲＴ命令の出力である。
【表４−７】
0005443599.tif 000018
【００６７】
計測値（ＭＥＡＳＵＲＥＭＥＮＴＳ）は、ＥＲＤＭＲ命令の出力パラメータであり、指定されたＳＥＣＳからとられたエンクレーブの計測値レジスタ値（Measurement Register values）が含まれている。
【表４−８】
0005443599.tif 000019
【００６８】
キー要求（ＫＥＹ＿ＲＥＱＵＥＳＴ）は、ＥＧＥＴＫＥＹ命令への入力パラメータであり、適切なキー、および、そのキーを導出するために必要なさらなるパラメータを選択するのに利用される。
【表４−９】
0005443599.tif 000020
【表４−１０】
0005443599.tif 000021
【表４−１１】
0005443599.tif 000022
【００６９】
この構造を、キー導出で利用することで、エンクレーブのセキュリティバージョンおよびエンクレーブのＳＥ  ＴＣＢに基づいてキーが生成される。ＴＣＢセキュリティバージョン構造の詳細については、プラットフォームＴＣＢ復帰仕様を参照のこと。
【表４−１２】
0005443599.tif 000023
【表４−１３】
0005443599.tif 000024
【表４−１４】
0005443599.tif 000025
【表４−１５】
0005443599.tif 000026
ＥＰＣＭフラグとは、エンクレーブページの状態を記述するビットのセットである。
【表４−１６】
0005443599.tif 000027
【００７０】
エンクレーブページキャッシュ・マップ（ＥＰＣＭ）は、プロセッサがページキャッシュの内容を追跡するために利用するセキュアな構造である。ＥＰＣＭは、ＥＰＣに現在装填されている各ページのきっちり１つのエントリを保持する。
【表４−１７】
0005443599.tif 000028
【００７１】
証明（認証）（attestation）は、特に遠隔の実体に対して、ソフトウェア１つがプラットフォーム上に構築されている、と示すプロセスである。セキュアなエンクレーブの場合には、遠隔のプラットフォームが、ソフトウェアが、そのソフトウェアが秘匿性およびデータ保護の観点で信頼性を確認される前に、エンクレーブ内で保護されている正規のプラットフォーム上で動作するように遠隔プラットフォームにより構築するメカニズムである。証明処理は、計測、格納、およびレポート（報告）という３段階からなる。
【００７２】
エンクレーブの計測期間には、事前エンクレーブ構築と事後エンクレーブ構築という２つの期間が存在する。エンクレーブ命令は、構築されたエンクレーブを計測させる役割を果たす。ひとたびエンクレーブが構築されると、エンクレーブ内のソフトウェアが計測をする責任を負う。
【００７３】
図９は、本発明の一実施形態にみることができる、クオーティングと称されるソフトウェア認証プロセスの一ステップを示す。一実施形態では、署名処理９１０により、計測値レジスタ９０１、９０２、９０３、９０４から、連結されたデータに、署名キー９１５を適用する。署名処理９１０の結果がクオート９２０である。
【００７４】
暗号結合計測（cryptographically binds measurements）を報告する処理は、プラットフォームにエンクレーブを生成するときになされる。このメカニズムは、この種類の機能が時にＴＰＭコマンドとしてプラットフォームで利用可能になっていることから、しばしば「クオーティング」と称される。計測値レジスタ（ＭＲ）の値は、連結されてから、非対称鍵を用いて署名される。これに対向する者は単に、クオート構造で署名を検証して、このクオートの正当性を立証する必要がある。
【００７５】
図１０は、本発明の一実施形態における、計測値レジスタセット１０００からクオートを生成するための各ステップを示す。ローカルレポート１００５は、計測値レジスタ１０００に対称認証キーでアクセスすることで生成することができる。クオーティング・エンクレーブ１０２５は、ローカルレポート１００５を匿名のクオート１０１０または通常のクオート１０２０に変換するソフトウェアを含んでよい。
【００７６】
非対称鍵に関する計算の性質上、および、エンクレーブリーフの命令数を低減させたいという要望から、非対称署名を行わせる命令は含めないこととする。以下の図に示す我々の採る方法では、対称鍵認証キーに基づいて「レポート」を生成して、これらの対称鍵に基づく「レポート」を、エンクレーブを利用してそれ自身が保護されているソフトウェアを利用して、非対称署名の「クオート」に変換させる。クオーティング・エンクレーブ（Quoting Enclave）は、プラットフォーム証明キーにアクセスを有するまでに先ず認証されねばならないことから、クオーティング・エンクレーブ自身が、認証エンクレーブとして知られている特殊用途のエンクレーブである。
【００７７】
各エンクレーブは、２つの２５６ビットの幅の計測値レジスタ（ＭＲ＿ＥＡＤＤ＆ＭＲ＿ＰＯＬＩＣＹ）および２つのレザーブされたレジスタを提供する。これら計測値レジスタは、エンクレーブのＳＥＣＳ内に含められている。
【００７８】
図１１は、本発明の一実施形態における計測値レジスタＭＲ＿ＥＡＤＤ１１００を更新するＥＡＤＤプロセスを示す。拡張処理１１１５は、ＭＲ＿ＥＡＤＤ１１００の現在の値、ページデータ１１０５、およびページメタデータ１１１０を入力として利用することができる。拡張処理の出力がＭＲ＿ＥＡＤＤ'１１２０であり、これは、ＭＲ＿ＥＡＤＤ１１００に格納される次の値となる。
【００７９】
ＭＲ＿ＥＡＤＤは、ＥＩＮＩＴ命令が呼び出される前にＥＡＤＤ命令を利用して構築されたものであるので、エンクレーブの集合計測値を含んでいる。これはマイクロコードにより書き込まれるので、エンクレーブコードが読み取りだけができるＳＥＣＳのページに配置される必要がある。ＥＡＤＤは、呼び出される毎に、ＳＨＡ２５６をページデータおよびそのページに関連付けられたセキュリティメタデータに計算して（つまり、これはページおよびページのＳＥＣ＿ＩＮＦＯフラグの（エンクレーブのベースアドレスに対する）相対アドレスである）、この値をＭＲ＿ＥＡＤＤ１１００に拡張する。「拡張」とは、新たなＭＲ値＝ハッシュ（古いＭＲ値｜｜入力値）という意味である。
【００８０】
ＭＲ＿ＰＯＬＩＣＹは、エンクレーブの起動を許可するポリシーを認証するときに利用されるポリシーの値を含んでいる。この値は、起動時にＳＥＣＳ内に配置されたエンクレーブ許可証から取り出されて、ＥＩＮＩＴ命令が成功裏に完了したものとしてコピーされたものである。ＭＲ＿ＰＯＬＩＣＹは、マクロコードによってのみ書き込まれるので、エンクレーブコードからは読み取りしかできないＳＥＣＳのページに配置される必要がある。
【００８１】
図１２は、本発明の一実施形態におけるレポートを生成するＥＲＥＰＯＲＴ命令を示す。キーＩＤ１２００、所有者エポック１２０５、パッケージヒューズキー１２１０、および固定ストリングＭＡＣキー１２１５が、導出命令１２２０に入力される可能性がある。導出１２２０の出力は、ＣＭＡＣ１２２５を、ＴＣＢバージョン１２３２、ＩＳＶバージョン１２３４、機能１２３６、フラグ１２３８、ユーザデータ１２４０、および計測値レジスタ１２４２の現在の値とともに入力することができる。ＣＭＡＣ１２２５の出力は、ＭＡＣ１２４４に格納することができる。ＥＲＥＰＯＲＴ命令の出力は、キー識別子１２３０、ＴＣＢバージョン１２３２、ＩＳＶバージョン１２３４、機能１２３６、フラグ１２３８、ユーザデータ１２４０、計測値レジスタ１２４２、およびＭＡＣ１２４４を含むことができる。
【００８２】
ＥＲＥＰＯＲＴ命令は、対称鍵ベースのＧＭＡＣを計測値レジスタ、ユーザデータ、およびさらなるコンテキスト情報（例えば、エンクレーブの機能およびフラグ）に行うための中間鍵を生成する。
【００８３】
計測値レジスタに加えて、ユーザは２５６ビットの幅のデータブロックを提供して、レポートに含めさせることができる。ユーザは、多くのアプリケーション特定の値（例えばチャレンジャＮＯＮＣＥおよび／またはアプリケーション作成キー）の証明を希望する。これらの値は、単一のハッシュに低減（reduce）され、レポート内に含ませることができる。
【００８４】
キーの磨耗を防ぐために、ＥＲＥＰＯＲＴを繰り返し呼び出して、乱数１２８ビット値（reportKeyIDとして知られている）を、プロセッサの各電力サイクルで生成して、内部の位置に格納する。この値は、この値を利用した２∧３２ＡＥＳ処理の後に増分される。一実施形態では、ＥＲＥＰＯＲＴ命令への各呼び出しによってこの値を１つ増分させる。
【表５−１】
0005443599.tif 000029
表５−２：ＥＲＥＰＯＲＴ構造
【００８５】
レポート構造中のフラグフィールドは、チャレンジャがエンクレーブを信頼してよいかを確かめるために有用なので、エンクレーブについてのある状態情報を決定するために、または、ＥＲＥＰＯＲＴ命令を呼び出したときに利用することができる。
【表５−３】
0005443599.tif 000030
表５−４：フラグ
【００８６】
一実施形態では、適切な機能セットを有するアーキテクチャエンクレーブが、ＥＧＥＴＫＥＹコマンドを有するＣＭＡＣ処理で利用されるキーを取得することがアーキテクチャにより許可されているので、現在実行されているハードウェアでレポートが生成されたことを検証することができる。この機能はクオーティング・アーキテクチャ・エンクレーブに限定されている。
【００８７】
エンクレーブ外で実行しているときにエンクレーブの計測値を取得するために、ＥＲＤＭＲ（計測値読み取り）命令が提供される。この命令は、有効なＳＥＣＳページへのポインタ、および、計測値を配信するアドレスへのポインタを採る。計測値は、ＭＥＡＳＵＲＥＭＥＮＴ構造の形態で配信される。ＭＥＡＳＵＲＥＭＥＮＴ構造は暗号による保護（暗号保護）はされない。
【表５−５】
0005443599.tif 000031
【００８８】
エンクレーブページキャッシュ内にないときにはエンクレーブページは暗号により保護される。暗号保護には、機密保護、偽造保護、および再生保護という３つのレベルがある。一実施形態では、アプリケーションが、同じエンクレーブの他のページについて選択された保護レベルとは独立して各エンクレーブページの保護レベルを選択することができる。エンクレーブの実装により、アプリケーションは、偽造保護、偽造保護、および再生保護、機密保護および偽造保護、および機密保護、偽造保護、よび再生保護という組み合わせから選択を行うことができる。機密保護および偽造保護をエンクレーブページに行うには、ＧＣＭ（Galois Counter Mode）等の幾つかの認証された暗号モードのうちいずれかを、ＡＥＳ等の適切な暗号法とともに利用することができる。しかし、再生保護には、より高度な解決法が要求される。
【００８９】
図１３は、本発明の一実施形態にみることができる、偽造保護および再生保護メカニズムを示している。偽造保護により、攻撃者が、プログラムが生成していない暗号化されたデータの別の値で置き換えることが防がれる。レプレイ保護により、攻撃者が、プログラムが生成した現在の最新値ではない暗号化されたデータの値で置き換えることが防がれる。ノードバージョン番号１３００はＩＶ１３１０に入り、その後ＧＭＡＣ１３２５アルゴリズムに入ることができる。子１３０５のバージョン番号は、データ１３１５をＧＭＡＣ１３２５アルゴリズムに送ることができる。ＧＭＡＣ１３２５アルゴリズムは、キー１３２０、ＩＶ１３１０、およびデータ１３１５を組み合わせてＭＡＣ１３３０を生成する。
【００９０】
再生保護によって、論理プロセッサが任意の時点に見るエンクレーブの全てのコンテンツが、破損してないエンクレーブの単一のスナップショットに属するように保証される。従って再生保護メカニズムは、エンクレーブバージョンのコンセプトを定義して、偽造保護されたエンクレーブページが、エンクレーブのそのバージョンに属すかを判断するメカニズムを提供する必要がある。この目的のために、再生保護メカニズムは、ＧＭＡＣ等のメッセージ認証アルゴリズムを利用して、偽造保護されたエンクレーブページ各々の内容をページバージョン番号に結びつける。ＧＭＡＣの場合には、このバージョンは、図１３に示す初期化ベクトル（ＩＶ）の一部として利用することができる。
【００９１】
図１４は、本発明の一実施形態に見られる中継保護メカニズムのＭＡＣツリー構造の部分の一例を示す。リーフノード１４２５は、個々のＭＡＣコンテンツページ１４３０のバージョン情報を含みうる。１４２０等の各リーフノードは、個々のＭＡＣコンテンツページを含む（不図示）。各内部ノード１４１０、１４１５は、リンク先の子のグループのバージョン情報を含みうる。ルート１４００は、ツリーデータ構造の最高位のノードである。
【００９２】
全エンクレーブに対するバージョン付けを拡張するために、再生保護メカニズムは、バージョンツリーを維持する。リーフノードは、エンクレーブインスタンスの個々の再生保護されたページのバージョンを含む。各内部ノードは、子の各グループのバージョンを提供するので、それらが表すページのバージョン情報を論理的に保持している。図１４はこのコンセプトを図式化している。
【００９３】
一実施形態では、Ｏ（ｎ）ページをＯ（ｌｏｇ  ｎ）へと処理する必要のあるデータ数を低減させるようにツリー構造が選択されている。ハッシュツリーではなくてバージョンツリーを利用することで、ツリーを更新することなくＥＰＣからのページの強制退去が可能となる。
【００９４】
再生保護では各ページのバージョンが暗号的に自身の内容に結び付けられている必要があるので、再生保護では偽造保護が必要となる。従って、ＳＥアーキテクチャにおいては偽造保護が必須である。さらに、ＳＥを始めから実装しておくことにより、サポートされる保護の組み合わせのリストがさらに制限されうる。
【００９５】
ＯＳ／ＶＭＭは、ＥＣＲＥＡＴＥ命令を実行することによりエンクレーブを生成する。エンクレーブの生成中に、エンクレーブにより保護されるリニアアドレスの範囲が特定される。このリニアアドレスの範囲は、エンクレーブリニア空間（ＥＬＳ）レンジとして知られている。
【００９６】
ひとたびエンクレーブが生成されると、ＥＬＳレンジに属している個々のページを、ＥＡＤＤＰＲＥ命令を利用してエンクレーブに追加する。ＥＡＤＤＰＲＥ命令は、追加されたページの各々を、これらのページをエンクレーブページキャッシュ内に移動させることにより、エンクレーブ保護領域に移動させる。ＥＷＢＩＮＶＰＧを利用してこれらページのいずれかがＥＰＣ外に置かれている場合、論理プロセッサは、これらページに暗号保護を行う。
【００９７】
暗号保護は、各エンクレーブページに暗号メタデータを関連付けることにより行われる。メタデータは、ｕＣｏｄｅのフローにより、様々なプロセッサ命令がエンクレーブページのコンテンツを復号して、各エンクレーブページの信頼性／フレッシュネスを検証するために利用される。ＳＥアーキテクチャは、暗号メタデータを更新、管理、およびその正当性を立証（validate）するためにこのような命令を幾つか提供する。
【００９８】
各エンクレーブページは、セキュリティ情報ＳＥＣ＿ＩＮＦＯデータ構造に関連付けられている。ＳＥＣ＿ＩＮＦＯデータ構造の目的は、ページを復号および検証する必要のある暗号メタデータを保持することである。ＳＥＣ＿ＩＮＦＯ構造の様々なフィールドは以下の通りである。
【表６−１】
0005443599.tif 000032
【００９９】
セキュリティ情報フラグ（ＳＥＣ＿ＩＮＦＯ．Ｆｌａｇｓ）は、保護されているページのページタイプ、暗号およびアクセス保護を記述する。
【表６−２Ａ】
0005443599.tif 000033
【表６−２Ｂ】
0005443599.tif 000034
【表６−２Ｃ】
0005443599.tif 000035
【０１００】
セキュリティマップ（ＳＭＡＰ）は、エンクレーブページのフレッシュネスを検証するために必要となる暗号メタデータを格納するのに利用されるデータ構造である（つまり再生保護）。セキュリティマップは、エンクレーブの特定のスナップショットの完全バージョンのツリーを表す。セキュリティマップの各ノードは、２５６の子のノード（リーフノードの場合にはエンクレーブページ）のバージョンを保持する。セキュリティノードに関するさらなるメタデータが、特定のＳＭＡＰノードのＳＥＣ＿ＩＮＦＯ内に含められる。
【０１０１】
一実施形態では、セキュリティマップツリーは２レベル深くてよく（セキュリティマップの深さは、ＳＥアーキテクチャによりサポートされるエンクレーブのサイズに関している。Ｇｅｎ１では、ＳＥアーキテクチャは最大エンクレーブサイズ３２ＧＢをサポートしている。）、エンクレーブ内のエンクレーブページのエンクレーブオフセットを利用してアクセスされる。ＳＭＡＰのルートは、ＳＥＣＳに含められ、１２８の子のノードのバージョンのみを保持する。エンクレーブオフセットのビットは、適切な子を選択するのに利用され、ＳＭＡＰにインデックスするのに利用される。ｇｅｎ１では、エンクレーブオフセットは３５ビット長である。エンクレーブオフセットは、以下の公式により抽出される（エンクレーブリニアアドレス＆エンクレーブマスク）。エンクレーブマスクは、（エンクレーブのサイズ−１）で求められ、ＥＣＲＥＡＴＥ中に計算することができる。
【表６−３】
0005443599.tif 000036
【０１０２】
一般的には、深さｌ＞１において、ビットＮ−（ｌ）×８からＮ−（ｌ＋１）×８＋１を利用して、次のレベルの適切な子を選択する。
【０１０３】
注：セキュリティマップは、論理データ構造であり、アーキテクチャではない。論理プロセッサは、ＳＭＡＰが位置しているリニアアドレス空間の位置についてすら認識していない。システムソフトウェアは、セキュリティマップを維持および探索（walking）する役割を担う。セキュリティマップの各個々のノードは、アーキテクチャにより定義された構造を有するが、アーキテクチャは、セキュリティマップがどのようにメモリ内に維持されているかを特定しない。しかし、セキュリティマップ内の各ノードが、セキュリティマップ内によく定義された論理位置を有しており、ノードがマップ内であちこち移動する場合にはセキュリティマップに関する様々なプロセッサ命令が、それを攻撃のシナリオとして解釈する、ということに留意されたい。
【０１０４】
ルートセキュリティノードは、ＳＥＣＳに含まれており、１２８の子のバージョン情報を含んでいる。非ルートセキュリティノードは、保護されたページであり、関連付けられたＳＥＣ＿ＩＮＦＯ（and its associated SEC_INFO）である。保護されたページは、２５６の子のバージョン情報を含む。
【表６−４】
0005443599.tif 000037
【０１０５】
ＳＥＣ＿ＩＮＦＯは、ＳＭＡＰ内のＳＭＡＰの位置を含む。ＳＭＡＰの位置は、リニア／エンクレーブオフセットおよびページタイプＳＭＡＰ＿ＬＥＶＥＬ＿１およびＳＭＡＰ＿ＬＥＶＥＬ＿２により決定される。
【０１０６】
再生保護されたエンクレーブページを追加するためには、ＳＭＡＰの親が生成されて、ＦＣＲビットがクリアされた状態でＥＰＣ内に常駐している必要がある。エンクレーブページの整合性を検証するために、論理プロセッサは、ＳＥＣ＿ＩＮＦＯ構造内のＩＶ＿Ｐおよびｋｅｙ＿ｉｄを利用してキーを生成する。このキーを利用して、ＳＥＣ＿ＩＮＦＯ構造およびページの内容内のフラグに対してＭＡＣを計算する。計算されたＭＡＣは、ＳＥＣ＿ＩＮＦＯ構造内に設けられているＭＡＣと比較される。ＭＡＣ同士が整合する場合に、このページが整合性チェックに合格したとみなすことができる。
【０１０７】
論理プロセッサは、ＥＬＰＧ命令を利用してＥＰＣにページを装填するときに、ページの整合性を検証する。この命令の一部として、論理プロセッサは、ページの検証に利用されたＳＥＣ＿ＩＮＦ構造からＩＶ＿Ｐを記憶する（note down）。
【０１０８】
エンクレーブページのフレッシュネスを検証するために、論理プロセッサは、エンクレーブページおよびそのｓｍａｐの親がＥＰＣに装填されており、ｓｍａｐの親がフレッシュであることを検証する。そして、ページのバージョンを、ｓｍａｐの親に格納されているバージョンと比較する。これら２つのバージョンが合致した場合には、プロセッサは、このページの新たなバージョンを生成して、ｓｍａｐの親のバージョンとエンクレーブページのバージョンを更新する。最後に、エンクレーブページをフレッシュであると表示する。
【０１０９】
注：新たなバージョン生成によって、ページを修正可能なものにすることができる。これにより、アーキテクチャおよび実装両方が簡単になる。
【０１１０】
エンクレーブページを除去するために、論理プロセッサは、エンクレーブページとそのｓｍａｐの親とがＥＰＣに装填されており、両方ともフレッシュであることを検証する。そして、ｓｍａｐの親のページのバージョンを０に設定して、エンクレーブページのＥＰＣスロットを利用可能であると表示する。
【０１１１】
エンクレーブページキャッシュ（ＥＰＣ）は、ＣＰＵが、ＳＥ暗号保護により暗号保護を受けていないエンクレーブページを一時的に格納するために利用するセキュアなストレージである。
【０１１２】
以下の要件がＥＰＣで特定される。非デバッグエンクレーブに属すＥＰＣに装填されるエンクレーブメモリページへのアクセスは、エンクレーブ外のソフトウェア実体による修正から保護することができる。攻撃者は、直接のハードウェア攻撃では、ＥＰＣに装填されている非デバッグエンクレーブに属す平文データを読み取ることができない。また攻撃者は、直接のハードウェア攻撃では、非デバッグエンクレーブに属すＥＰＣのデータを修正することができない。システムのＣＰＵは、ＥＰＣに装填されるデータにコヒーレント且つセキュアにアクセスすることができる。
【０１１３】
ＥＰＣを実装するメカニズムは幾つかある。ＥＰＣは、オンダイＳＲＡＭまたはｅＤＲＡＭの上に実装可能である。ＥＰＣはさらに、ＣＰＵの最終レベルキャッシュのやり方を動的に隔離することにより構築することもできる。この実装例では、パッケージの外部からの許可されていないアクセスからＥＰＣを保護することができる。一方でシステム内の他のパッケージは、ＥＰＣにコヒーレント且つセキュアにアクセスすることができる。
【０１１４】
ＥＰＣを実装する別のメカニズムに、クリプト・メモリ・アパーチャ（Crypto Memory Aperture）がある。クリプト・メモリ・アパーチャ（Crypto Memory Aperture）は、プラットフォームＤＲＡＭを利用して暗号により保護された揮発性ストレージを生成する費用効果のよいメカニズムを提供する。ＣＭＡは、ＣＰＵアンコア（CPU uncore）内の１以上の戦略的に配置された暗号ユニットを利用してカスタマ技術が必要とする様々なレベルの保護を提供する。様々なアンコア（uncore）エージェントは、ＣＭＡに対するメモリアクセスを認識し、これら２５のアクセスをアンコア内に位置しているクリプト・コントローラにルーティングするよう修正される。クリプト・コントローラは、所望の保護レベルに応じて、プラットフォームＤＲＡＭへの１以上のメモリアクセスを生成して、暗号文を取得する。そして、暗号文を処理して、平文を得て、元のＣＭＡメモリ要求を満たす。ＣＭＡは、Ｉｎｔｅｌ  ＱｕｉｃｋＰａｔｈインターコネクト（ＱＰＩ）プロトコルに完全に統合されており、ＱＰＩプロトコルへのセキュリティ拡張によりマルチパッケージプラットフォームにスケーリングされる。マルチパッケージプラットフォーム３０の構成では、ＣＭＡは、外的に対面している（externally facing）ＱＰＩリンク層のリンクレベルのセキュリティ（Ｌｉｎｋ−Ｓｅｃ）エンジンを利用して、Ｉｎｔｅｌ  ＣＰＵの間のメモリ転送を保護する。
【０１１５】
ＳＥＣＳは、ＥＰＣに現在装填されている場合にアクティブと称される。本書類では後述するように、ＯＳ／ＶＭＭは、ＥＰＣに装填されるものを管理する役割を果たす。しかし、ＥＰＣにエンクレーブページを装填する間に、ＯＳ／ＶＭＭは、その対象ページ自身がＳＥＣＳである場合を除いて、ＣＰＵにそのページのＳＥＣＳの所在を伝える。装填されているページがＳＥＣＳではない場合には、ＣＰＵは、そのページに対応するＳＥＣＳをＥＰＣ内に配置するよう要求する。エンクレーブのページを装填する前にはいつでも、ＯＳ／ＶＭＭは、そのエンクレーブのＳＥＣＳをＥＰＣに装填してよい（MAY load）。
【０１１６】
ＣＰＵは、ＳＥＣＳをＥＰＣに装填することのできる回数に対しては制約を課しはしないが、ＯＳ／ＶＭＭがエンクレーブページキャッシュにＳＥＣＳのコピーを複数装填するようなことが頻繁に行われるとは考えにくい。とはいえ、もしも同じＳＥＣＳの複数のコピーがＥＰＣに装填される場合には、これらコピーそれぞれを別個のアクティブＳＥＣＳインスタンスとして捉え、アクティブＳＥＣＳの異なるインスタンスに属すＥＰＣに装填されたエンクレーブページを、ハードウェアによりそれぞれ異なるエンクレーブに属すものとして捉える。
【０１１７】
ＯＳ／ＶＭＭは、ＥＰＣを、システムアドレス空間の物理メモリの連続ブロックとしてとらえる（１０）。しかし、内部ストレージを低減させて、高速インデックスを可能とするために、ＣＰＵは、スロット識別子（ＳＩＤ）を各ＥＰＣページに関連付ける。ＥＰＣページの物理アドレスおよび対応するスロット識別子は、以下のように互いに関連している。
sid=(page_pa-epc_base_pa)>>12
page_pa=pc_base_p|(sid<<12)
【０１１８】
ハードウェアは、０ｘＦＦという特殊なスロットを用いて、無効なスロットを示す。ＥＰＣスロット識別子は、ｕＣｏｄｅおよびＰＭＨ両方により利用されて、エンクレーブページに関する情報を追跡する。
【０１１９】
ＥＰＣに装填される全てのエンクレーブページは、よく定義されたシステム物理アドレスを有する。ＥＰＣに属す物理アドレスおよびＥＰＣスロット識別子間に一対一のマッピング関係があることから、ＥＰＣに装填される各ページは自身のＥＰＣスロット識別子あるいはＥＰＣ＿ＳＩＤを有するということができよう。
【０１２０】
加えて、ＳＥＣＳページを除く、ＥＰＣに装填される全てのエンクレーブページは、アクティブＳＥＣＳインスタンスと関連付けられる。アクティブＳＥＣＳインスタンスが、ＥＰＣに装填されたＳＥＣＳページにすぎないことを想起されたい。この結果、アクティブＳＥＣＳページも自身のＥＰＣ＿ＳＩＤを有する。非ＳＥＣＳエンクレーブページが属すＳＥＣＳページのＥＰＣ＿ＳＩＤは、非ＳＥＣＳ２５ページのＳＥＣＳ＿ＳＩＤと称される。ＥＰＣに装填される各ページについて、ハードウェアはＳＥＣＳ＿ＳＩＤの記録をとっておく。ＥＰＣに装填されるＳＥＣＳページのＳＥＣＳ＿ＳＩＤは、０ｘＦＦ（または無効ＳＩＤ）と定義される。
【０１２１】
ＥＰＣＭは、プロセッサがページキャッシュの内容を追跡するために利用するセキュアな構造である。３０ＥＰＣＭは、ＥＰＣに現在装填されている各ページのきっちり１つのエントリを保持する。それが表すページにおいては、各ＥＰＣＭエントリが、ページが属すエンクレーブ、ページがエンクレーブページキャッシュに移動させられるリニアアドレス、ページのバージョン等の情報を追跡する。ＥＰＣＭ構造は、アドレス変換フローにおいてＣＰＵにより利用されて、ＥＰＣに装填されるエンクレーブページに対してアクセス制御を実施する。ＥＰＣＭエントリは、（ｘ）ｕＣｏｄｅにより、様々な命令フローの一環として管理される。
【０１２２】
本発明の一実施形態では、エンクレーブページキャッシュ（ＥＰＣ）は、割り当て、割り当て解除が動的に行われてよい。一実施形態では、オペレーティングシステム等のソフトウェアが、ＥＰＣ等のメモリページを割り当てたり、ＥＰＣのメモリ割り当て解除を行ったりする。一実施形態では、オペレーティングシステムは、エンクレーブの任意のページをＥＰＣ内に割り当てることもできる。一部の実施形態では、ＥＰＣは、メモリ内の全ての利用可能な位置を占めてよい。一実施形態において、動的ＥＰＣの固定ＥＰＣとの１つの違いは、動的ＥＰＣがメモリのページの追加および除去を可能とすることである。一実施形態では、ソフトウェアドライバ等の論理が、メモリ領域をＥＰＣとして割り当てたり、ＥＰＣのメモリ割り当てを解除したりする。一実施形態では、起動前処理によりメモリの各ページのメタデータの格納に利用できるメモリがチェックされ、ソフトウェアがページをＥＰＣまたは非ＥＰＣであると宣言し、ハードウェア論理が各ページの属性の追跡・実施（enforce）を行ってよい。
【０１２３】
一実施形態では、ハードウェア論理は、変換ルックアサイドバッファ（ＴＬＢ）およびページミスハンドラ（ＰＭＨ）によって、ＥＰＣとして利用されるメモリに対するアクセスを制御してよい。一実施形態では、検索アドレスがＴＬＢ内に合致するものがあるとき（ＴＬＢヒットとして知られている）、セキュアなエンクレーブがＥＰＣを退出するときにＴＬＢをフラッシュしてよい。一実施形態では、検索アドレスがＴＬＢに合致するものがない場合（ＴＬＢミスとして知られている）、さらなるルックアップによって、複数のメモリ参照においてエンクレーブページキャッシュマップ（ＥＰＣＭ）からデータを取得することができる。一実施形態では、ＰＭＨは、ＥＰＣＭのルックアップを行うことができる。別の実施形態では、ＰＭＨのレンジレジスタをチェックして、連続物理アドレス、ＥＰＣに対する制御を制御する。オペレーティングシステムは、ＥＰＣページへのアクセスとして、直接メモリアクセス（ＤＭＡ）を許可しない。もしもメモリの戻りページが、エンクレーブページとして表示されていた場合には、そのページのセキュアなエンクレーブ制御構造識別子（ＳＥＣＳＩＤ）を、現在実行中のエンクレーブと比較して、アクセスがセキュアであることを確かめてよい。戻りページのＳＥＣＳＩＤと、現在実行中のエンクレーブのものとが合致しない場合には、ＰＭＨは停止メッセージを発行してよい。メモリの戻りページがエンクレーブページとして表示されていない場合、またはメモリの戻りページがエンクレーブページとして表示されており、そのページのＳＥＣＳＩＤが実行中のエンクレーブのものと合致する場合には、ＰＭＨは、ページ変換をＴＬＢに装填してよい。一実施形態では、キャッシュタグを利用して、書き戻しサイクルで他のラインからエンクレーブラインを識別することができる。しかし、少なくとも１つの実施形態では、そのタイプのメモリ要求が書き戻しサイクル中にＥＰＣＭにアクセスすると論理が判断する場合には、キャッシュタグは利用されない。
【０１２４】
本発明の一実施形態では、ソフトウェア、ＢＩＯＳが、オペレーティングシステムが起動してエンクレーブページを作成する前に、メモリを割り当てることができる。一実施形態では、ソフトウェアは、ＢＩＯＳの一連のステップによりＥＰＣを生成することができる。ＢＩＯＳは、あるメモリをメタデータの格納用にリザーブすることができ、各プロセッサについてレンジレジスタを設定することができる。ＢＩＯＳは、ベースアドレスおよびメモリサイズを入力とすることができる。システム構成は、ＭＣＨＥＣＫという処理によりチェックされて、全てのパッケージおよび全てのコアにおける全てのレジスタを、エンクレーブ外のアクセスから保護することができる目的に適した設定とする。ＭＣＨＥＣＫは、システムがリセットされるまでレジスタをロックする。別の実施形態では、ソフトウェアは、メモリの部分をＥＰＣの一部と宣言することの出来るＥＰＣＡＤＤとして知られている命令によりＥＰＣにページを追加することができる。ＥＰＣＡＤＤシーケンスは、メモリアドレスを入力とすることができ、成功または失敗を示すメッセージを出力することができる。ＥＰＣＡＤＤが成功を示すメッセージを出力する場合には、ＥＰＣＡＤＤは、ＥＰＣＭ．Ｅビットを設定することができ、その物理アドレスに対応するページをシステムの全てのＴＬＢからフラッシュする。本発明の一実施形態では、ＥＰＣＡＤＤは、ＲＡＸにおける０１のエラーコードを戻して、入力アドレスを有するページが既にＥＰＣページであることを示し、０２のエラーコードを戻して、入力アドレスが範囲外であることを示すことができる。ＥＰＣＡＤＤがＥＰＣの一部であるとして宣言するメモリページは、ＥＰＣセマンティクスにデータにアクセスするよう要求してよい。本発明のこの実施形態では、ソフトウェアは、ＥＷＢＩＮＶＧとして知られている命令のＥＰＣからページを除去して、暗号化されたデータを、暗号保護および整合性保護を継続させながら、引き続き利用可能にすることができる。このフォーマットのデータは、ハードディスクドライブの通常メモリに格納することができる。また別の実施形態では、ＥＰＣＲＥＭＯＶＥとして知られている命令のソフトウェアが、ＥＰＣ内のページを除去して、暗号化されたデータを利用不可能にすることができる。ＥＰＣＲＥＭＯＶＥを実行するハードウェアは、ページおよびＥＰＣＭの部分をクリアする。ＥＰＣＲＥＭＯＶＥは、先ずＥＷＢＩＮＶＰＧを実行することなく実行することができる。一実施形態では、ＥＰＣＲＥＭＯＶＥシーケンスは、メモリアドレスに基づいてＥＰＣからページを除去することができる。本発明の一実施形態では、ＥＰＣＲＥＭＯＶＥ命令は、ＲＡＸに０１のエラーコードを含み、除去されるページが、セキュアなエンクレーブ制御構造（ＳＥＣＳ）の一部であり、除去不可能であることを示し、０２のエラーコードは、除去されるページがＥＰＣページではないことを示す。メモリのページのグローバルＴＬＢ撃墜は、本発明の一実施形態におけるＥＰＣＲＥＭＯＶＥから生じてよく、ページに前に占有されていたメモリは、汎用ソフトウェアアクセス用に利用可能となってよい。
【０１２５】
ＰＭＨは、メモリ空間の保護されている領域へのアクセスを防止する。アーキテクチャによっては、これは、ＥＰＣへのアクセスの物理アドレスチェックのみといった簡単なもので済むこともある。さらなるＰＭＨサポートを利用して、ＳＥの性能向上または別の実装が可能となる場合もある。ＳＥアーキテクチャは、エンクレーブページキャッシュに対するエンクレーブページへの不正アクセス防止にページミスハンドラ（ＰＭＨ）を利用する。ＰＭＨは様々なイベントを検知して、これらイベントをマイクロコードに報告する。マイクロコードは、イベントをＯＳ／ＶＭＭに報告してよい。次いでＯＳ／ＶＭＭは、不良を修復するために適切な命令を実行することができる。
【０１２６】
ＥＣＲＥＡＴＥ命令を利用してエンクレーブを作成する場合には、リニアアドレスレンジをそのエンクレーブに対して指定する。このレンジは、そのエンクレーブの「リニアアドレスレンジ（linear address range）」と称される。エンクレーブのリニアアドレスレンジに属すメモリページは全て、エンクレーブの保護下にあり、ＳＥＣ＿ＩＮＦＯエントリが関連付けられていると考えることができる。
【０１２７】
あるエンクレーブのリニアアドレスレンジに属すメモリページも、「エンクレーブページ（enclave page）」と称される。エンクレーブ内で実行しているプログラムは、エンクレーブページキャッシュ内に装填されておりそのページの所有者であるエンクレーブであるエンクレーブページにのみアクセスを許可される。プロセッサは、こうではない場合には例外クラスイベントを生成する。ＯＳ／ＶＭＭは、必要に応じて、エンクレーブページをＥＰＣに装填する責任を負う。
【０１２８】
論理プロセッサがエンクレーブを実行しており、そのエンクレーブページにメモリアクセスを生成する場合、このメモリアクセスは「エンクレーブアクセス（enclave access）」と称される。正しい実体によりアクセスされていることを確かめるためにかドレスチェックが行われてよい。
【０１２９】
一実施形態では、ＰＭＨは、アクセス制御機能を提供して、プログラムがエンクレーブ内で実行していないときにＥＰＣを保護する。各論理プロセッサについてイネーブルされているレンジレジスタは、プロセッサがエンクレーブコードを実行していないときにＥＰＣに対するアクセスを制限する。このレンジレジスタは、プロセッサがエンクレーブコードの実行を開始するとディセーブルされる。その持ち場において、プロセッサは特殊なページテーブルを定位置に置く。これらページテーブルは、プロセッサによる制御を受けて、そのエンクレーブが所有しているＥＰＣページのみにアクセスを許可する。プロセッサおよびマイクロコードは、これら２つのメカニズムを利用してＥＰＣへのアクセスを制限する。
【０１３０】
一部の実施形態では、性能、実装の複雑性、シリコンのコストといった数多くの軸同士の間を調整されてよい。この章では、開発者に対して可能性ある調整例の幾つかを示すために３つの実装例を紹介する。以下の表８−１は、これら保護の例および必要となるＰＭＨサポートを示す。
【表８−１】
0005443599.tif 000038
【０１３１】
表８−１の第１行に示すとおり、必要なアクセス制御保護を提供するには追加のレンジレジスタは１つでよい。この特定の実装例では、他の保護はマイクロによって提供される。レンジレジスタは、論理プロセッサごとにイネーブルされてよい。このメカニズムを利用する基本実装例を図２−２に示す。
【０１３２】
ＰＭＨは、マイクロコードモードでもエンクレーブモードでも実行されていないＬＰからＣＭＡレンジ（ＣＰＵのＣＭＲＲがカバーしている）へのアクセスを除去するよう修正される。加えて、エンクレーブモードで実行しているＬＰは、ＣＭＡのＥＰＣサブレンジにのみアクセスを許可される。
【０１３３】
図１５は、ページ不良エラーコードマップの実装を示す本発明の一実施形態を示す。ビット５  １５４０が設定されている場合、ビット９、ビット８、ビット７、ビット６を一緒に復号して、ページ不良エラーコードを決定することができる。ｒｅｓビット１５１２、Ｉ／Ｄビット１５１４、ＲＥＶＤビット１５１６、Ｕ／Ｓビット１５１８、Ｗ／Ｒビット１５２０、Ｐビット１５２２。
【０１３４】
あるページがＥＰＣにない場合、その旨を伝えるために「不良」がＯＳ／ＶＭＭに提供される。表８−２に示すように、ページ不良エラーコードマップを変更する。これは、不良条件を報告するために利用される新たなビットを示している。ＥＰＣ不良がない場合には、ビット５をゼロに設定して、ビット６から９もゼロに設定する。不良がＥＰＣ条件に起因している場合には、ビット５を設定して、ソフトウェアはビット６から９を復号して、ＥＰＣ不良条件を解明してもよい。不良タイプについてのさらなる情報は次のセクションに記す。
【０１３５】
ページ不良エラーコードのビット５が設定されている場合、ビット６から９が所与であると解釈される（表８−２）。これは、このページ不良を起こした条件を示している。状態の一部は、通常処理では生じ得ないであろう不法の条件を示しており、ＯＳ／ＶＭＭ管理エラーを示している。
【表８−２】
0005443599.tif 000039
【０１３６】
攻撃からＥＰＣを保護するためには、プラットフォームの全てのＴＬＢのＥＰＣアドレスを無効化するメカニズムを利用することができる。この特徴により、全てのコアに対して、特定のページの無効化を知らせることができる。次いで、全てのプロセッサから撃墜完了報告を受けるまで待つ。
【０１３７】
エンクレーブが退出するたびに（ＥＥＸＩＴ）、ＴＬＢは、ＴＬＢに現在存在しているエンクレーブページへのアクセスを禁ずることができる（may not allow accesses）。これは、ＴＬＢのクリアにより、またはさらなるビットを利用してエンクレーブエントリをタグ付けすることにより可能となる。
【０１３８】
また別の方法としては、エンクレーブ退出時にＴＬＢでエンクレーブビットを利用して、全てのエンクレーブエントリをクリアする、というものもある。別の方法としては、幾つかのビットを利用して特定のエンクレーブを特定するものもある。この場合、エンクレーブエントリは強制的に除去される必要がない。エンクレーブエントリは、ｔｌｂに残されてよい。アドレスをルックアップのためにｔｌｂに送る場合には、これらビットはルックアップに追加される。これらビットは、エンクレーブの身元を示すコアからのエンクレーブｉｄと比較される。ビットが合致した場合には、要求はこのエンクレーブから来ていることになる。合致しない場合には、要求がこのエンクレーブからのものではないことになるので、ルックアップはこの位置にヒットしない。
【０１３９】
エンクレーブ認証は、エンクレーブコードのエンクレーブ内における実行を許可した認可機関（つまり、このコードの著者／承認者）を見つける手段を提供する。エンクレーブ認証はさらに、エンクレーブマイクロコードフロー、フレキシブルシール＆レポート、および、幾つかの新たなビジネスモデルの実施点を外部委託するファウンデーションも提供する。
【０１４０】
セキュアエンクレーブアーキテクチャのある態様では、マイクロコード化された命令内の実装にあまり適していない複雑、且つ時間のかかるフローが必要となる場合がある。これに対する解決法は、セキュアエンクレーブアーキテクチャのこれらの部分をマイクロコードに外部委託することである。多くの場合、任されたコードは、繊細なプロセッサまたはプラットフォームデータへの特別なアクセスを要求する。例えばＥＰＩＤ信号は、単一の命令には長すぎる。この代わりに、クオーティング・エンクレーブを利用して、ＥＰＩＤ秘密鍵への特別なアクセスを許可することにより、ＥＰＩＤ署名されたクオートを生成する。エンクレーブ認証により、Ｉｎｔｅｌは、クオーティング・エンクレーブのみによって、ＥＰＩＤキーに対するアクセス等の特別なエンクレーブに許可された追加機能を特定することができる。Ｉｎｔｅｌが提供するエンクレーブは、追加機能を有し、コアのエンクレーブ機能を実装するが、アーキテクチャエンクレーブと称される。
【０１４１】
エンクレーブ・シール・ストレージは、エンクレーブのある属性（例えば装填時間計測値）にデータを暗号化する機能をエンクレーブソフトウェアに提供する。エンクレーブ証明フレームワークによって、エンクレーブは、エンクレーブを計測した証拠を外部の実体に提供することができる。多くの状況において、エンクレーブの正確なソフトウェアハッシュよりも、データのシールまたはエンクレーブのソースに対する証明のほうが望ましい。
【０１４２】
一実施形態では、認証されたエンクレーブにおける署名が確認されると、エンクレーブの署名に利用されたキーの公的な部分は、シール＆証明メカニズムに利用可能となり、この結果、販売業者は、エンクレーブ計測値に基づく強固な保護と、エンクレーブのコードのソースに基づくこれよりも柔軟な保護との間で選択することができるようになる。
【０１４３】
エンクレーブ認証は２つの部分に分割される。各エンクレーブは、Ｉｎｔｅｌにそのルートを辿る（rooted back to Intel）ことができる署名鎖（signature chain）を有するエンクレーブライセンスを伴っている。エンクレーブライセンスは、そのエンクレーブのソース／責任実体、エンクレーブが必要とする特別な機能、および、そのエンクレーブを実現する特別なビジネスモデル／取り決めを特定するために必要な追加情報を示す。ライセンスは、特別なエンクレーブに対するものであってよく、これは、このエンクレーブの計測値を示しており、または、キーについて示しており、これが後に必要に応じてエンクレーブに署名することができるようになる。
【０１４４】
例えばＡが、Ａのビデオプレーヤで利用するエンクレーブを製造するライセンスを購入する場合を考える。このために、Ｉｎｔｅｌは、販売業者Ａのビデオプレーヤのルートキーと、Ｉｎｔｅｌが販売業者Ａがビデオプレーヤエンクレーブでの利用を許可される機能とに関するライセンスを生成する。次に販売業者Ａは、ビデオプレーヤのルートキーを利用して、リリースする各ビデオプレーヤ修正版についての個々のライセンスファイルに署名する。これにより、エンクレーブのライセンス鎖が、複数の中間ライセンスを含むことになる。
【０１４５】
署名されたライセンス鎖は、エンクレーブ起動プロセス中の評価には理想的とはいえないので、代わりに、これらを、許可証（permit）と称される単一の命令の実行しやすい構造（single instruction digestible structure）に組み込む。許可証は、ＣＭＡＣアルゴリズムを利用して対称認証され、エンクレーブの初期化（ＥＩＮＩＴ）中に解釈される。
【表１１−１Ａ】
0005443599.tif 000040
【表１１−１Ｂ】
0005443599.tif 000041
【表１１−２】
0005443599.tif 000042
【０１４６】
ラインセンスの部分の殆どが許可証にコピーされ、同様の構造を成す。ライセンスＩＤは、ビジネス上の取り決めを特定するための６４ビットの数値である。ライセンスの種類は、ライセンスを適用するプラットフォームを特定する。バルクライセンスにより、このエンクレーブを、セキュアなエンクレーブをサポートしているプラットフォーム上に立ち上げることができる。プラットフォームごとのライセンスにより、プラットフォームは先ず示されているライセンス認可機関に接触をとり、エンクレーブを立ち上げる許可を要求する。ひとたび許可されると、ライセンス認可機関とは接触をとる必要はなくなるが、これにより、ライセンス認可機関は、このエンクレーブが配置されたプラットフォームの数を課金目的で追跡することができる。このエンクレーブをライセンスしたＩＳＶは、エンクレーブのこのバージョンのセキュリティバージョン番号を構築することもできる。こうすることで、このバージョンがシールするデータを、前のバージョンではなくて将来のバージョンについて利用可能とすることができる。フラグフィールドは、この許可証を適用するために設定されうるエンクレーブのためのフラグを示す。機能マスクは、このエンクレーブに許可されうる特別な機能のビットマスクである。親のキーハッシュとは、このエンクレーブのライセンスを署名して、キーを署名した公開鍵でハッシュした公開鍵のハッシュである。実体ハッシュとは、このライセンスを適用する実体の予期されるハッシュである。エンクレーブの場合には、これは、適切に構築されたエンクレーブのＭＲ．ＥＡＤＤの値である。ライセンスキーにおいては、これは公開鍵のハッシュである。
【０１４７】
ライセンスにおいては、ライセンスを署名するのに利用される公開鍵を、ライセンス自身に含める。許可証はＣＰＵキーを利用してＭＡＣされる。正規のｃｐｕＭＡＣは、ＥＭＫＰＥＲＭＩＴ命令がこの許可証を、ライセンス鎖が今度はＩｎｔｅｌに対して認証されたことを示す。ライセンスの種類がバルクではない場合には、ライセンスＭＡＣが、アーキテクチャライセンスエンクレーブが適切なライセンス認可機関に連絡して、このプラットフォームがエンクレーブを立ち上げうるという確認を受けたことを示す。
【０１４８】
全てのエンクレーブが許可証を要求するわけではない。エンクレーブの開発をし易くするために、開発中およびソフトウェアのライフサイクルのデバッグ段階に許可証をオプションとする。以下のポリシーがＥＩＮＩＴにより実施される。非デバッグエンクレーブは常に許可証を立ち上げることを要求する。デバッグエンクレーブは、許可証なしに立ち上げられる。しかし、ＥＩＮＩＴに許可証が提示されない場合には、ＭＲ．Ｐｏｌｉｃｙ、ＩＳＶ  Ｓｅｃバージョン、許可証の見るバージョン（Permit See Version）、および機能の全てを０に設定する。
【０１４９】
許可証がデバッグエンクレーブの立ち上げに利用される場合には、ｐｅｒｍｉｔ−＞フラグ「デバッグ」を設定することができ、デバッグエンクレーブが許可する機能のみを許可証に設定することができる。
【０１５０】
図１６は、本発明の一実施形態のエンクレーブを立ち上げる許可証を生成するプロセスの一例を示す。このプロセスは、３つの段階（許可証発行１６００、さらなるライセンス承認１６４０、および初期化エンクレーブ１６８０）を有することができる。許可証発行１６００段階では、ＩＳＶキー許可証１６１５を、ＥＭＫＰＥＲＭＩＴ命令１６１２をＩＳＶキーライセンス１６１０に実行することにより生成することができる。ＣＰＵのみ用のＭＡＣを有するエンクレーブ許可証１６２５は、ＥＫＰＥＲＭＩＴ命令１６１２を、エンクレーブライセンス１６２０およびＩＳＶキー許可証１６１５に行うことにより生成することができる。さらなるライセンス承認１６４０段階では、ＣＰＵのみ用のＭＡＣを有するエンクレーブ許可証１６２５、および、ライセンスされる情報に対応する第三者エンクレーブ１６４２が、ライセンスエンクレーブ１６４４に入り、ライセンスエンクレーブ１６４４が、ＣＰＵ用のＭＡＣおよびライセンスを有するエンクレーブ許可証１６４５を生成する。初期化エンクレーブ１６８０段階では、エンクレーブＳＥＣＳ１６８２、および、ＣＰＵ用のＭＡＣおよびライセンスを有するエンクレーブ許可証１６４５が、ＥＩＮＩＴ１６８４命令に対する入力とされてよい。ＥＩＮＩＴ１６８４ｍリｔリの出力は、ＩＳＶエンクレーブ１６８５となる。
【０１５１】
エンクレーブを起動するには、ソフトウェアとともに出荷されるライセンスから許可証を生成して、ＣＰＵに提供して、エンクレーブを開始させることができる。このプロセスは、許可証発行、さらなるライセンス承認、および、エンクレーブ初期化という３つの段階に分割することができる。図１６は、このプロセスのフローを示す。
【０１５２】
ＥＭＫＰＥＲＭＩＴという新たな命令を利用して、ライセンスから許可証を生成する。ＥＭＫＰＥＲＭＩＴは、単一のライセンスから単一の許可証を生成するが、連続呼び出しされることで、ライセンスの鎖を、許可書キーを利用してＭＡＣを有する単一の許可証に変換することもできる。次のセクションでは、このことを詳述する。
【０１５３】
各ライセンスは、許可証を利用可能とするためにとることができるさらなるステップを決定する「ライセンスの種類」を含む。プラットフォームごとのライセンスは、クラウドのライセンス認可機関に、エンクレーブが配置されるプラットフォームの課金額を維持するよう要求する。この種類のライセンスにおいては、さらなる段階が必要となる。つまり、ライセンスエンクレーブと称されるアーキテクチャエンクレーブは、クラウドのライセンス認可機関と交渉して、承認されると、ライセンスキーを用いて許可証にさらなるＭＡＣを提供する。例えばアーキテクチャエンクレーブは常にバルクライセンスであり、これは、実行するためにライセンスキーＭＡＣが不要であることを意味する。これらは、セキュアなエンクレーブをサポートする任意のプラットフォーム上で動作する。
【０１５４】
エンクレーブの初期化において許可証が実施形態される。初期化中に許可証が処理され、エンクレーブ計測値が許可証内のものと合致した場合には、ＭＡＣは正しいことになり、エンクレーブが起動される。ＥＩＮＩＴはライセンスの種類を見て、さらなる承認を要するライセンスのライセンスＭＡＣのみを調査する。
【０１５５】
ＥＭＫＰＥＲＭＩＴは、ライセンス上のＲＳＡ署名を検証するのに必要となる時間のために、特権付き命令である。この命令は、検証して、その内容から許可証を生成する非常に単純な署名付き証明書をとる。ライセンスは、署名およびそれを署名するのに利用するキーの公開部分の両方を含む。これにより、ｕＣｏｄｅは、Ｉｎｔｅｌのライセンス署名キーのハッシュのみを格納して、Ｉｎｔｅｌが署名したライセンスを認証することができる。ＥＭＫＰＥＲＭＩＴは、さらに、キーの認証された承認を提供することにより、ＩＳＶキーが署名したライセンスを認証することができる。これは、ＩＳＶの公開鍵のハッシュを含む許可証を作成することによって行われる。この結果、ＥＭＫＰＥＲＭＩＴがＩｎｔｅｌのライセンスを、内部ハッシュ、あるいは、第２の許可証に提供されているハッシュを持つＩＳＶキーを利用して、Ｉｎｔｅｌのライセンスを検証することができる。
【０１５６】
ＥＭＫＰＥＲＭＩＴは、ライセンスへのポインタ、キー許可証へのオプションのポインタ、および、出力許可証へのポインタという３つのパラメータをとる。Ｉｎｔｅｌが署名したライセンスについては、キー許可証が空値であり、内部的にハードコードされた許可証パラメータのセットが利用される。アーキテクチャエンクレーブのライセンスを認証する呼び出し方法を利用して、その許可証を生成する。ＥＭＫＰＥＲＭＩＴは、このライセンスの公開鍵がｕＣｏｄｅにより認可されるようにする（含まれている公開鍵のハッシュを内部ハッシュと比較することにより）。
【０１５７】
ＩＳＶの場合には、ＩＳＶのキーは、Ｉｎｔｅｌが署名したライセンスを有する。キー許可証を利用しないＥＭＫＰＥＲＭＩＴの呼び出しには、Ｉｎｔｅｌのキーハッシュを利用して、ライセンス上の署名を検証して、ＩＳＶキーのハッシュを認可する許可証を生成して、合法なライセンス署名キーを表す。そしてＥＭＫＰＥＲＭＩＴを再度呼び出す（ＩＳＶのキーの許可証を含む）。ＥＭＫＰＥＲＭＩＴは、キーの許可証のＭＡＣを認証して、前にＩｎｔｅｌのハッシュを利用したＩＳＶキーのハッシュを利用する。エンクレーブライセンスの公開鍵がＩＳＶキーの値にハッシュを行い、且つ、エンクレーブライセンスがそれにより適切な署名を行う、ということを仮定して、ＥＭＫＰＥＲＭＩＴは、エンクレーブ用の許可証を生成する。この許可証は、ライセンス情報（全鎖で一貫していてよい）、ライセンス鎖の全ての公開鍵のハッシュ、エンクレーブの計測値、およびその機能を示している。
【０１５８】
以下のステップがｕ−ｃｏｄｅによりＥＭＫＰＥＲＭＩＴ中にとられる。
【表３】
0005443599.tif 000043
【０１５９】
ライセンスエンクレーブは、ｕＣｏｄｅが見える範囲の外で起動されるエンクレーブについての決定をするように設計される。例えばｕＣｏｄｅは、ＩＳＶのＩｎｔｅｌとのビジネスにおける取り決めにより、さらなるエンクレーブ配置が許可されるかを評価する。ライセンスエンクレーブは、アセスメントを行う必要がある全ての材料の収集、および、エンクレーブの起動のさらなる承認、拒絶を行うように設計されている。ライセンスエンクレーブは、複雑なビジネスにおける取り決めのみをサポートする必要があり、バルクライセンス（例えば、必要とされている回数だけ任意のプラットフォームでエンクレーブを起動させる機能）には必要がない。
【０１６０】
ライセンスエンクレーブは、システムサービスであることが予期されている。ライセンスが、ライセンスエンクレーブからのさらなる承認が必要であると示す場合、ＥＭＫＰＥＲＭＩＴが生成したライセンス鎖およびエンクレーブ許可証をライセンスエンクレーブに渡す。ライセンスエンクレーブは次に、承認要求を生成する。そしてアプリケーションはこの承認要求を適切なライセンス認可機関に送り、ここで承認通知が生成される。そしてライセンスエンクレーブに戻されて、ライセンスエンクレーブは、ライセンスキーを利用して、ライセンスＭＡＣフィールド内の許可証をＭＡＣする。
【０１６１】
エンクレーブに対して許可証が発行されると、エンクレーブ機動プロセスでｕ−ｃｏｄｅを利用して評価して実施することができる。これは、許可証のリニアアドレスをパラメータとして利用して、ＥＩＮＩＴ命令の一部として実施される。（１）スクラッチパッドの許可証をコピーする、（２）許可証上のｃｐｕＭＡＣを、許可証キーを利用して検証する、（３）ライセンスタイプ！＝バルクである場合には、ライセンスＭＡＣを、ライセンスキーを利用して検証する、（４）許可証内の計測値を、ＳＥＣＳ内のＭＲ．ＥＡＤＤと比較する、（５）許可証内のフラグを、ＳＥＣＳ内のフラグと比較する、（６）許可証内のＰｕｂｋｅｙハッシュをＭＲ．Ｐｏｌｉｃｙにコピーする、（７）ＩＳＶ  ＳＶＮをＳＥＣＳにコピーする、（８）許可証内の機能マップをＳＥＣＳにコピーする、という、さらなるステップをＥＩＮＩＴに、認証されたエンクレーブメカニズムの一環として追加する。
【０１６２】
＜機能＞
現在の機能マップは、このエンクレーブに利用可能な１２８ビットマスクの機能である。
【表１１−３Ａ】
0005443599.tif 000044
【表１１−３Ｂ】
0005443599.tif 000045
【０１６３】
空間は、ＥＩＮＩＴがとるアクションに基づいて組織化される。ビット００−０３は、リングレベルの制約がこのエンクレーブ上でアクティブになったときの将来の利用のためにリザーブされる。０４−０７は、将来許可されるページ保護を示すためにリザーブされている。０８−２３は、ＥＧＥＴＫＥＹを通じて利用可能なプロセッサキーである。２４−３１は、他の制御（例えば証明のために名称ベースのモードを利用する、または、将来制限を希望する技術に対するもの等）のためである。一部の機能は、デバッグモードでエンクレーブによって利用されない。デバッグ列は、ある機能をデバッグモードにおいて利用して合法かを示す。
【０１６４】
将来の世代においては、ビット００は、リングレベルおよびＶＴの制約が、このエンクレーブに適用されることを示していてよい。ビット０１−０２は、エンクレーブが実行を許可されるリングレベルを示しており、ビット０２は、エンクレーブがＶＴルートモードで実行されるか示している。各ＥＥＮＴＥＲにおいて、現在のＣＰＬをビット０１−０２に比較して、このエンクレーブがこのリングレベルにおいて実行を許可されているかを判断する。これを実行する試みが誤ったリングで行われる場合、ＥＥＮＴＥＲは失敗する。同様に、リング制約がアクティブな場合は、エンクレーブは、ビット０３が起動中にはＶＴルートモードからしか入ることができない。第一世代では、これらビットがＭＢＺである。
【０１６５】
エンクレーブページは、暗号化されても、整合性のみを保護されてもよい。さらに、ページは実行可能であってもなくてもよい。将来の世代においては、これらの属性を追跡して、ＥＰＣＭのセキュリティ情報の部分で実施することができる。ページが実施可能であるか、またはエンクレーブが既にＥＩＮＩＴされているかに基づいて、エンクレーブのエンクレーブページへの暗号化の利用を制御するために機能ビットがリザーブされる。
【０１６６】
多くのアーキテクチャエンクレーブは、ＣＰＵ内で、またはＣＰＵにより保護されているキーへのアクセスを要求するリング３の実体である。ＥＧＥＴＫＥＹはこれらキーに対するアクセスを提供し、機能ビットは、キーへのアクセスを許可することができるか決定するためにＥＧＥＴＫＥＹにより利用される。
【０１６７】
以下は、これら特性および短い説明を有する現在のアーキテクチャエンクレーブのリストである。
【０１６８】
プロビジョンエンクレーブは、ＫＥＹ＿ＰＲＯＶＩＳＩＯＮ機能を有し、Ｉｎｔｅｌにより承認されており、新たなデバイス証明キー（ＤＡＫ）またはプロビジョン証明キー（ＰＡＫ）が必要になるたびに、単一のパッケージプラットフォーム上で実行される。その目的は、エンクレーブに、ＥＧＥＴＫＥＹが提供するプロビジョンシードに基づいて、デバイスＩＤ＆プロビジョンキーを導出させる、というものである。次いでプロビジョンエンクレーブは、これらキーを利用して、プロビジョンサーバに対してプラットフォームの正当性を証明して、デバイス証明キー（ＤＡＫ）を取得する。ＤＡＫを取得した後で、プロビジョンエンクレーブは、オプションとしてＤＡＫを利用して、プラットフォーム証明キー（ＰＡＫ）プロバイダとの間で認証を行い、ＰＡＫを再試行する。ＰＡＫの利用により、特定のＩＳＶについて保証することで、ユーザによりよいプライバシーを提供することができ、そのアクティビティがそのプラットフォームの前の所有者のものに関連付けられなくなる。ＰＡＫを取得してから、プロビジョンエンクレーブは、クオーティング・エンクレーブが取得することができるように、それをシールする。
【０１６９】
クオーティング・エンクレーブは、機能ＫＥＹ＿ＲＥＰＯＲＴを有し、エンクレーブにより承認されており、ＥＰＩＤキーをプロビジョンするのに利用されたプロビジョンエンクレーブ（通常はＩｎｔｅｌ）と同じ著者を有する。その位置は、全てのａｐｐｓに対して利用可能であるＯＳサービスである。その目的は、エンクレーブにプラットフォームＥＰＩＤキーのシールを解かせることである。ＥＲＥＰＯＲＴからのレポートは入力として提供される。エンクレーブは、ＥＧＥＴＫＥＹを利用して、レポートキーを取得する。レポートキーは、次に、レポートを検証するのに利用される。エンクレーブは、ＥＰＩＤの利用によりクオートに署名する。
【０１７０】
ライセンスエンクレーブは、ＫＥＹ＿ＬＩＣＥＮＳＥ機能を有し、Ｉｎｔｅｌにより認可され、Ｒｏｏｔ  Ｉｎｔｅｌにより署名されており、エンクレーブ（ＯＳサービス）とともに出荷され、単独でインスタンス化されている。その目的は、複雑なライセンスポリシーを評価することである。エンクレーブがライセンスエンクレーブからさらなるライセンス確認を要求する場合には、ＥＩＮＩＴは、ライセンスエンクレーブがライセンスキーを利用してその許可証をＣＭＡＣした後に限り、それを受け付けることができる。
【０１７１】
単一のパッケージシステムにおいて、エンクレーブのアーキテクチャが利用する全ての対称キーを、プロセッサのヒューズアレイに格納された単一の特異性ソースから導出する。キー階層は、ＳＥ  ＴＣＢ階層に分割されて、これはプラットフォーム実装に依存しており、その構造が全てのセキュアなエンクレーブ実装にわたり一貫したＳＥキー階層である。ＴＣＢ復帰用のキーイング材料およびＥＰＩＤプロビジョンの基礎は、ＳＥキー階層のルートとして機能するＳＥ  ＴＣＢ階層により提供される。エンクレーブ命令セットおよびトラステッドアーキテクチャエンクレーブ両方で利用される全てのキーイング材料は、ＳＥキー階層により提供される。
【０１７２】
プラットフォームは、ヒューズされている１２８ビットのプラットフォーム固有キーを提供する。これらキーは、秘密のＣＰＵ論理に格納されているキーを利用してヒューズで暗号化される。幾つかの単一の目的のキーはこのキーを利用して導出され、ＴＣＢ復帰技術は、プラットフォームの要件に基づいて適用される。結果生じるキーは、ＳＥキー階層のルートとして機能する。
【０１７３】
アーキテクチャエンクレーブのキーは、ＥＧＥＴＫＥＹ命令を利用して取得される。
【０１７４】
エンクレーブアーキテクチャは、ＲＥＰＯＲＴの値の証明をプラットフォーム外のシステムに提供するために非対称キーの利用を必要とする。このキー（ＥＰＩＤキー）は、最初はヒューズで提供されるが、配置後にキー階層から導出されるキーの１つを利用して再度プロビジョンされてよい。ＥＰＩＤ証明キーのプロビジョン方法は、本明細書の範囲外である。さらなる情報は、デバイス証明キー（ＤＡＫ）プロビジョン仕様を参照されたい。
【０１７５】
最後に、エンクレーブのアーキテクチャも、全てのプロセッサの論理にあるキーを利用して、ＯＥＭにおけるキーイング材料をプロビジョンする。このキーはアウトオブボックス経験グローバルキー（Out-of-Box Experience Global Key）として知られている。我々は、このキーに同様の導出処理を行い、ＩＳＶの固有性を提供する。ＯＯＢキーから導出されたこれらキーのＩＳＶによる利用法は、本明細書の範囲外である。
【０１７６】
キー階層のＳＥ  ＴＣＢの部分はプラットフォーム特有であり、全ての基礎は、同じ基本のキーセットを必要とする。我々はこれらをベースキーと称す。これらは全てヒューズキーおよび論理キー内に導出され、ＳＥキー階層のルートである。次いでこれらキーは、ＳＥ命令により、ＳＥアーキテクチャで直接利用される全てのキーを導出するために利用される。これらキーはＴＣＢキー階層の結果である。４つのＳＥベースキーに、プラットフォーム固有メカニズムによりＳＥアーキテクチャに利用可能となるＥＰＩＤコンポーネントが足し合わせられる。表１２−１は、これらキーをそれぞれ示す。
【表１２−１】
0005443599.tif 000046
【０１７７】
図１７は、単一のパッケージのセキュアなエンクレーブのためのプラットフォームキー階層の実装を示す本発明の一実施形態を示す。ボックスベースキー外１７００は、利用可能な導出リソース１７５０から導出され１７０２、ボックスキー外１７０４が生成される。利用可能な導出リソース１７５０は、固有値１７５２、所有者エポック１７５４、セキュアなエンクレーブセキュリティバージョン１７５６、ＳＥＣＳ計測値レジスタ１７５８、ＩＳＶセキュリティバージョン１７６０、およびＳＥＣＳフラグ１７６２を含むエレメントを有するストリングである。プロビジョンキー１７１０は、Ｉｎｔｅｌバックエンドに対してプラットフォームの正当性を証明することができる。ＥＰＩＤ  ＩＤ１７１２は署名キーである。初期ｓａｆｅＩＤキーブロブ１７１８は、クオートであり、ｓａｆｅＩＤシード１７１６に関連付けられている。ベースｏｐｓキー１７１４は、利用可能な導出リソース１７５０からの情報と組み合わせられて、エンクレーブキー１７３０、許可証キー１７３２、ライセンスキー１７３４、レポートキー１７３６、認証キー１７３８、およびシールキー１７４０を含む一連のキーを導出する１７２０ことができる。
【０１７８】
図１７ａは、マルチパッケージキー階層の一実施形態を示す。
【０１７９】
セキュアなエンクレーブ命令およびデータ構造は、キーイング材料のソースであるベースキーに依存している。表１２−１に示すプラットフォームキー階層は、プラットフォームキー材料の階層関係、および、プラットフォームルートキーからのキーの導出方法の記述である。
【０１８０】
エンクレーブラップキー（enclave wrapping key）１７５２は、エンクレーブページキャッシュ（ＥＰＣ）内で保護されていない間にセキュアなエンクレーブ制御構造（ＳＥＣＳ）のページを暗号化するのに利用される対称キーである。
【０１８１】
許可証キー１７５４は、許可証に正当性および整合性を提供するのに利用され、これにはエンクレーブの機能およびライセンス情報が含まれる。許可証はＭＡＣされて、ＥＩＮＩＴへの遷移中にその整合性が確かめられる。このキーはＥＭＫＰＥＲＭＩＴ  ｕＣｏｄｅおよびＥＩＮＩＴにより利用される。
【０１８２】
ライセンスキー１７５６は、ｕＣｏｄｅにより評価不可能なライセンスポリシーに準拠してアサートするのに利用される（is used assert compliance with）。ライセンスキーは、ＥＩＮＩＴが評価するライセンスエンクレーブから認証された承認を生成するのに利用される。ＥＩＮＩＴ  ｕＣｏｄｅが利用するこのキーは、ＥＧＥＴＫＥＹを介して利用可能であり、ＫＥＹ＿ＬＩＣＥＮＳＥ機能セットとともにエンクレーブされる。
【０１８３】
レポートキー１７５８は、レポートの正当性および整合性を提供するのに利用される。レポートは、ＥＲＲＥＰＯＲＴによりＭＡＣされ、クオーティング・エンクレーブに遷移する間に、整合性を確かめられる。このキーはＥＲＥＰＯＲＴ  ｕＣｏｄｅにより利用され、ＱＵＯＴＥ機能セットを有するエンクレーブに対してＥＧＥＴＫＥＹを介して利用可能となる。
【０１８４】
認証キー１７６０は、エンクレーブ固有キーであり、クオーティング・エンクレーブからＩＳＶエンクレーブに送信されるデータの正当性および整合性を提供するのに利用され、エンクレーブからエンクレーブへの認証を同じプラットフォームで実現する。キーは、ＥＧＥＴＫＥＹを介して全てのエンクレーブに利用可能となり、ＩＳＶ＿ＡＵＴＨ機能セットを有するエンクレーブが、必要としているキーを特定することができる。
【０１８５】
シールキー１７６２は、１２８ビットを各エンクレーブに提供して、それらの含む繊細なデータを暗号化させる。複数のシールポリシーをこのシールキーに統合することで、ＩＳＶに、どのソフトウェアを使ってデータのシールを解くかについての柔軟性を持たせることができる。これらのキーは、ＥＧＥＴＫＥを介して任意のエンクレーブに利用可能となるが、個々にはシールキーは、要求されているシールポリシーに合致するエンクレーブにのみ利用可能となる。
【０１８６】
ＥＰＩＤ  ＩＤ１７１２は、パッケージを一意に識別する。その唯一の目的は、デバイス証明キーのプロビジョンを可能とする、ということであり、デバイス証明キーは、ＥＰＩＤベースの匿名証明キーである。ＥＰＩＤ  ＩＤは、プロビジョンエンクレーブのみにアクセス可能である。プロビジョンエンクレーブは、これをセキュアなチャネルを介して、承認されたプロビジョンサーバのみに提供し、しかもこれは、ユーザまたはオペレーティングシステムが開始するプロビジョンプロセス中に限って行われる。このＩＤは、ＰＲＯＶＩＳＩＯＮＩＮＧ機能を有するエンクレーブに対してＥＧＥＴＫＥＹを介して利用可能となる。
【０１８７】
プロビジョンキー１７１０は、Ｉｎｔｅｌバックエンドにプラットフォームの正当性を証明すること、および、現在のＳＥ  ＴＣＢの実行を認証することに利用される。プロビジョンキーへのアクセスを示すことで、プロビジョンサーバは、エンクレーブが実際はＥＰＩＤ  ＩＤを所有しており、少なくとも特定のＴＣＢセキュリティバージョン上で実行されているデバイスであることを確かめることができる。プロビジョンキーは、このパッケージおよびこれを要求するプロビジョンエンクレーブの署名者に固有である。これにより、単一のプラットフォームで利用されている場合、これら複数のプロビジョンインフラストラクチャの間を分離させることができる。このキーはＥＧＥＴＫＥＹを介して、ＫＥＹ＿ＰＲＯＶＩＳＩＯＮ機能を有するエンクレーブに利用可能である。
【０１８８】
プロビジョンシールキーは、所有権に変更があった後であっても取得可能な方法でプロビジョンを暗号化することができるように、１２８ビットキーをプロビジョンエンクレーブに与える。このキーを利用して古いＥＰＩＤを暗号化することで、新たなＥＰＩＤの取得中にプラットフォームが無効になったことを証明することができる。プロビジョンキーはこのパッケージおよびこれを要求するプロビジョンエンクレーブの署名者に固有である。これにより、単一のプラットフォームで利用されている場合、これら複数のプロビジョンインフラストラクチャの間を分離させることができる。このキーはＥＧＥＴＫＥＹを介して、ＫＥＹ＿ＰＲＯＶＩＳＩＯＮ機能を有するエンクレーブに利用可能である。
【０１８９】
ＩＳＶアウトオブボックス（ＯＯＢ）経験キー１７００は、全てのＩｎｔｅｌプラットフォームとＩＳＶとの間の共有キーである。このキーは、特定のＩＳＶに固有のＯＯＢルートから導出される。ＩＳＶは、このキーに購入アクセスすることができ、このキーに対して秘密を暗号化して、ＯＥＭのハードディスク画像内に配置することができる。これらの秘密は、セキュアなエンクレーブ内で安全に実行されているこれらのコードのみがアクセス可能であり、プラットフォームはオンライン動作または完全な証明キープロビジョンを行う必要がない。これらキーはＥＧＥＴＫＥＹを介して、ＯＯＢ機能を有するエンクレーブに利用可能である。
【０１９０】
プロビジョンキーは、セキュアなエンクレーブアーキテクチャに対して重要なキーであるが、プラットフォーム・キーイング材料からは導出されない。これらキーは、プロビジョンサーバまたはオフライン技術からプロビジョンされる。デバイス証明キー（ＤＡＫ）は、個々のエンクレーブの特性を証明するための匿名署名キー（ＥＰＩＤ）利用である。これは、キーまたは秘密のプロビジョン中にＩＳＶにより利用され、この繊細な情報を改ざんされていないアプリケーションの保護された導入にのみ送信するようにする。
【０１９１】
デバイス証明キーには２つのソースがある。好適なアーキテクチャは、ヒューズで圧縮される初期ＤＡＫを、ＥＰＩＤキーブロブおよびＥＰＩＤエントロピーとして出荷する。これにより、プラットフォームは、最初の電源投入直後に証明を開始することができるようになる。第２のソースは、ＤＡＫプロビジョンサーバに接触をとり、ＥＰＩＤ  ＩＤおよびプロビジョンキーを利用してハードウェアの正当性を証明した後に１つがダウンロードされる。この２番目の方法は、ヒューザされたＥＰＩＤ  キーを有さないプラットフォームおよび基礎となるＴＣＢのバージョンを無効化した後のプラットフォームにより利用される。ＥＰＩＤヒューズは、ＥＧＥＴＫＥＹを介してＰＲＯＶＩＳＩＯＮＩＮＧ機能を有するエンクレーブにアクセス可能である。
【０１９２】
プラットフォーム証明キー（ＰＡＫ）は、オプションとしてさらなるプライバシーのレベルを提供する。ＤＡＫのある利用を関連付けることもできる。特にＩＳＶエンクレーブが名称ベースの証明機能を有する場合には、単一のＩＳＶが、所与のＥＰＩＤがこのサービスを再利用するか判断することができる。（しかし複数のＩＳＶの間で、ユーザの追跡のための結託は行われない）。ＤＡＫは、所有者にではなくて、むしろプラットフォームに結び付けられているので、この関連付けは、ウォータフォール・イベント中継続する。従って一部のユーザは、第三者にＰＡＫを発行してもらって日々の証明に利用するより、も自身のＤＡＫを利用して自分のプラットフォームの正当性を証明するほうを好む。マルチパッケージのプラットフォームでは、各パッケージのＤＡＫは、ＰＡＫ（証明におけるプラットフォーム全体を表す）を構築するのに利用される。
【０１９３】
ユーザがアクセス可能なキーのキー導出は、ＮＩＳＴ特殊公報８００−１０８（擬似乱数関数を利用するキー導出について推奨されている）に準拠する。キー導出関数の構成においては、擬似乱数関数（ＰＲＦ）が必要である。ＰＲＦは、ＮＩＳＴ  ＳＰ８００−３８Ｂに定義されているＡＥＳ−ＣＭＡＣアルゴリズム、処理のブロック暗号モードについて推奨−認証のためのＣＭＡＣモード、２００５年５月（http://csrc.nist.gov/publications/nistpubs/800-108/sp800-108.pdf）に基づく。一般的なキー導出は、DerivativeKey=PRFParentKey(DerivativeString)である。
【０１９４】
導出ストリング（derivative string）は、要求されている特定のキーに基づく８つの要素からなるサブセットからなる。表１２−２は、導出の一部となりうる利用可能なエレメントをそれぞれ説明している。
【表１２−２Ａ】
0005443599.tif 000047
【表１２−２Ｂ】
0005443599.tif 000048
【表１２−２Ｃ】
0005443599.tif 000049
【０１９５】
各キーは、予め定義された導出要素のセットを有しており、これは導出ストリングを含む。表１２−３は、キー階層の各キーに含まれる要素を示している。各列はキーを表し、行は、そのキーに特定の要素が含まれているかを示す。デバッグストリングは、要求を発するエンクレーブのＳＥＣＳが、デバッグモードにあることを示している場合に含められ、「要求」は、このエレメントが要求されておらず、キー導出のために要求において選択可能であることを示している。
【表１２−３】
0005443599.tif 000050
【０１９６】
セキュアなエンクレーブは、起動シーケンスの幾つかのポイントでソフトウェアのセキュリティ侵害を分離させ復帰させる技術をサポートしている。分離をサポートするために、エンクレーブに提供された全ての長期キーイング材料を、現在のＴＣＢのセキュリティバージョンを利用して導出する。
【０１９７】
このセクションでは、復帰可能なＴＣＢが、ｕＣｏｄｅ、ＭＣＨＥＣＫ、およびマイクロコード（またはｕＶＭＭ）からなるプラットフォームのアーキテクチャの一例について説明する。ハードウェア要件は、どのＳＥサポートプラットフォームについても同じであってよいが、具体的なキーフローは、特定のＴＣＢ要素に依存している。ここで利用されている技術に類似した技術を利用して他のプラットフォームをサポートすることもできる。
【０１９８】
ＣＰＵベースの保護技術をサポートするためには、ハードウェアに以下のキーが必要である。これらキーはＴＣＢキー階層の基盤となる。
＜ステッピング固有の２５６ビットの論理キー＞
２５６ビットの論理キーは、１２８ビットのヒューズ・ラップキー、および、１２８ビットのアウトオブボックス経験キー（out-of-box experience key）という２つの部分に分割される。しかし、ｕＣｏｄｅを追加する単一の１２８ビットのキーを両方について利用することもできる。
＜ダイ固有の５４４ビットのヒューズキー＞
これらには、３２ビットのグループｉｄ、２５６ビットのＳａｆｅＩｄＡ.ｘ値、および２５６ビットのプレシードが含まれる。Ａ.ｘ値および２５６ビットのプレシードは、上述した１２８ビットのヒューズ・ラップキーで暗号化される。
＜一次レジスタ＞
キー導出プロセスでは、キーを格納して、パッケージ上に置き、ｕＣｏｄｅのみに利用可能とさせる必要がある。プラットフォームのランタイム中は２つの１２８ビットレジスタが必要である。ＣＭＡが起動して動作するまでの間は、ＥＰＩＤキーのために、さらなる２５６ビットの空間が必要である。この後は、該さらなる２５６ビットはＣＰＵには不要となる。
＜ＴＣＢ  ＳＶＮレジスタ＞
このレジスタは、各ＴＣＢ層にＳＶＮを保持するよう分割された６４ビットのロック可能レジスタである。分割の仕方はプラットフォーム設計者の裁量に任されているが、８個の８ビットのＳＶＮに分割する、というのが妥当に思われる。このレジスタの各部分は、独立してロック可能である。
【０１９９】
キーを特定のＴＣＢバージョンのセットに結合することは、ヒューズキーから第１セットのキーを、開始される機動シーケンスの種類に基づいてｕＣｏｄｅに導出させることにより行われる。このヒューズをロックした後、起動シーケンスの各装填において鎖状に導出（a chain of derivations）が行われる。
【０２００】
低レベルのコードを装填した後で、鎖は、エンクレーブで実行されているソフトウェアの、ＩＳＶが割り当てられたセキュリティバージョン（ISV assigned security version）を含み続ける。特定の構成においては、現在のバージョンから導出したキー、および、前の構成からのキーにアクセスすることができる。これにより、新たな安定性のあるバージョンへユーザデータを途切れなく遷移させることができる。
【０２０１】
ダイ固有のキーが生成されると、キー・ラップ・キーで暗号化される。これにより、ハードウェア監視ツールを利用してキーを抽出し、その部分に配置される前に通過するキーを保護することが益々難しくなる。
【０２０２】
これらキーを暗号化するのに利用される暗号アルゴリズムは、１０ラウンドの１２８ビットのＡＥＳ−ＥＣＢ復号である。キー生成サーバは、ＡＥＳ−ＥＣＢ暗号化を各キーに行い、ヒューズで焼かれる暗号文キーを生成する。
【０２０３】
ＴＣＢキー階層におけるキー導出に利用される擬似乱数機能（ＰＲＦ）は、プラットフォームに特有である。ＡＥＳ−ＮＩをサポートするプラットフォーム用には、１２８ビットのＡＥＳ−ＥＣＢが推奨される。目的は、他のキーからキーを導出するための不可逆的な方法を提供する、というものである。このセクションでは、以下の関数のプロトタイプを利用する。
【表４】
0005443599.tif 000051
【０２０４】
キー導出ではＰＲＦに３つの方法がある。ＰＲＦループ導出は、異なるＳＶＮのキー間の関係を構築しつつ、ｕＣｏｄｅ  ＳＶＮをキーに投入するのに利用される。具体的には、PRELoop(x-1)=PRFPRELoop(x)(const)である。
【０２０５】
これにより、データを前方マイグレーションさせる。ｕＣｏｄｅ  ＳＶＮ３を実行する場合を例にとる。エンクレーブはＥＧＥＴＫＥＹを利用して、このバージョンに基づくシールキーを取得して（ＰＲＥＬｏｏｐ（３））、これを利用してデータをシールする。フィールドｕＣｏｄｅのアップグレードを配信し、次の起動ｕＣｏｄｅ  ＳＶＮは４である。アップグレードの後で、ＥＧＥＴＫＥＹ実装は、ＰＲＦＬｏｏｐ（４）にアクセス可能となる。エンクレーブが、ＥＧＥＴＫＥＹにＳＶＮ３キーを送るよう要求する場合、PRELoop(3)=PRFPRELoop(4)(constant)を計算して、古いシールキーを取得することができる。
【０２０６】
この特性を構築するには、ＰＲＦのループを利用するが、特性PRFPRELoop(x-1)がPRFPRELoop(x)から計算されるので、ＳＶＮの最大値を構築して、ここから減算していく必要がある。特定の最大値は、要求される性能に基づいて各プラットフォームの種類に対して構築する必要がある。最大値の初期値としては３２を推奨する。ＰＲＦループ導出は、以下のようになる。
【表５】
0005443599.tif 000052
【０２０７】
この方法は、ｕＣｏｄｅのＳＶＮをＳＶＮキーに投入するために利用され、ＳＥベースのキーの基礎となるキーである。ヒューズされるダイ固有キーは、２８８ビットのＥＰＩＤ値、および、２５６ビットのランダムキーを含む。全てのエフェメラルではない対称鍵は、これら２５６ビット（２個の１２８ビットキーからなる）から導出することができる。従って、単一のキーから複数のキーを導出するための技術の作成が可能である。こうするためには、ヒューズキーが復号されると、これを利用して異なる固定定数を利用してＰＲＦを呼び出すことができる。鍵を分割すると、一般的には以下のような形になる。
【０２０８】
【表６】
0005443599.tif 000053
【０２０９】
この技術は、ＥＰＩＤ  ＩＤおよびプロビジョンＩＤの一部として利用される乱数を生成するのに利用される。
【０２１０】
ＳＶＮキーがｕＣｏｄｅ  ＳＶＮに基づいてループ導出されると、ＳＥ  ＣＭＡ等の、離れた保護メモリ内に格納することができる。マイクロコードは、ＳＶＮキーからキーを導出するためだけに、マイクロコードに曝されるＭＳＲを利用する。ＭＳＲは、導出の基礎が、グローバルなアウトオブボックスのキーなのか、ヒューズキーなのか、および、各ＴＣＢ層について要求されているＳＶＮセットを示すキー選択器を利用する。これにより、要求が現在の値以下であることを確かめることができる。ＵＣｏｄｅは、任意の必要なＰＲＥを利用して、古いＳＶＮキー、ＰＲＦ，および要求されているＴＣＢ  ＳＶＮを取得することができる。
【表７】
0005443599.tif 000054
【０２１１】
適切なＳＶＮキーが利用可能になると、要求されているＴＣＢ  ＳＶＮのＣＭＡＣのキーとして利用される。マイクロコードは、これをＣＭＡＣキーとして、Ｏｐｓキー、またはプロビジョンベースキーの固定ストリングについてＳＥＯｐｓシード（Ｉｎｔｅｌが知らないヒューズキーの部分から導出した値）に対して利用する。つまり、se_base_key=CMAC(svn_base_key,se_ops_seed)である。
【０２１２】
図１８は、本発明の一実施形態における、マイクロコードベースのセキュアなエンクレーブキー階層の一例を示す。リセットマイクロコード１８００階層では、グローバル・ラップ論理キー１８０１およびインテルが知っている固有のルートヒューズ１８０２を、ラップ解除１８０６機能への入力として利用する。ラップ解除１８０６およびマイクロコードＳＶＮ１８０５の出力がＰＲＦループ１８０８に入力される。マイクロコードＳＶＮ１８０５およびグローバルルート論理キー１８０３は別のＰＲＦループ１８０９に入る。ＰＲＦループ１８０８の出力は、ＳＶＮキー１８１０レジスタに格納される。ＰＲＦループ１８０９の出力は、グローバルキーレジスタ１８１２に格納される。マイクロコードＳＶＮ１８０５は、ＴＣＢ  ＳＶＮレジスタ１８１４に格納される。グローバルラップ論理キー１８０１およびＳＥ  ＥＰＩＤ  Ａ.ｘヒューズ１８９３は、ラップ解除１８０７関数に入力され、結果をＳＥ  ＥＰＩＤ１８１６レジスタに格納する。ＭＣｈｅｃｋ１８２０階層においては、ＭＣｈｅｃｋＳＶＮ１８２１およびＴＣＢ  ＳＶＮレジスタ１８１４の出力が、ＴＣＢ  ＳＶＮレジスタ１８２６に格納される。ＳＶＮキーレジスタ１８１０は、マイクロコードＳＶＮレジスタ１８２２に格納される。グローバルキーレジスタ１８１２は、グローバルキーレジスタ１８２４に格納される。ＳＥ  ＥＰＩＤ１８１６は、ＳＥ  ＥＰＩＤ１８２８に格納される。装填マイクロコード１８３０階層では、マイクロコードＳＶＮ１８３１およびＴＣＢ  ＳＶＮレジスタ１８２６の出力を、ＴＣＢ  ＳＶＮレジスタ１８４６に格納する。マイクロコードＳＶＮレジスタ１８２２は、マイクロコードＳＶＮレジスタ１８３２に格納される。グローバルキーレジスタ１８２４は、グローバルキーレジスタ１８３４に格納される。ＳＥ  ＥＰＩＤ１８２８は、ＳＥ  ＥＰＩＤ１８３８に格納される。ＸｕＭＳＲ導出キー１８４０階層では、マイクロコードＳＶＮ差異１８４１がＰＲＦループ１８４２およびＰＲＦループ１８４４に入る。マイクロコードＳＶＮ１８３２レジスタがデータをＰＲＦループ１８４２に送り、グローバルキーレジスタ１８３４がデータをＰＲＦループ１８４４に送る。ＰＲＦループ１８４２の出力およびＴＣＢ  ＳＶＮレジスタ１８３６の出力が、ＰＲＦループ１８４６に入り、ＰＲＦループ１８４４の出力およびＴＣＢ  ＳＶＮレジスタ１８３６の出力が、ＰＲＦループ１８４８に入る。ＰＲＦループ１８４６の出力は、ＳＶＮベースキー１８５０に格納され、ＰＲＦループ１８４８の出力はグローバルキー１８５２に格納される。マイクロコード１８６０階層では、Ｉｎｔｅｌが知らない固有のルートヒューズ１８９４をシード１  １８５６に格納して、ＥＰＩＤグループＩＤヒューズがＥＰＩＤグループ１８５８に格納される。シード１  １８５６は、ＰＲＥループ１８８６およびＰＲＥ１８８８に入る。ＰＲＥループ１８８８の出力は、ＳＥ  ＥＰＩＤシード１  １８９２である。ＰＲＦループ１８８６の出力はＳＥ  ｏｐｓシード１８９０である。ＳＥ  ｏｐｓシード１８９０は、ＳＶＮベースキー１８５０から得られ、要求されたＳＶＮ１８６４は、ＣＭＡＣ１８６８関数に入り、ＳＥ  ｏｐｓキー１８７２を生成す��。現在のＳＶＮ１８６２は、ＳＶＮベースキー１８５０から得られ、ＣＭＡＣ１８６６関数に入り、ＳＥプロビジョンキー１８７０を生成する。ＳＶＮベースキーが｛０、０、０｝１８７４に等しい場合、ＳＶＮベースキー１８５０は、シード０  １８７６に格納される。シード０  １８７６は、ＰＲＦループ１８７８およびＰＲＦループ１８８０に入る。ＰＲＦループ１８７８の出力は、ＳＥ  ＥＰＩＤ  ＩＤ１８８２であり、ＰＲＦループ１８８０の出力は、ＳＥ  ＥＰＩＤシード０  １８８４である。
【０２１３】
全てのコアが同期して、ドアベルまたは類似したメカニズムを利用して、全てがＭＣＨＥＣＫに入るようにする。全てのコアがＭＣＨＥＣＫを実行中になると、（１）ｕＣｏｄｅが、ヒューズの読み取り、復号、およびロックを行う、（２）ｕＣｏｄｅがＰＲＦループをＳＶＮキーに、ＰＲＦループをＯＯＢＥキーに利用して、ｕＣｏｄｅのＳＶＮを両キーに投入する。ｕＣｏｄｅは、そのＳＶＮをＴＣＢ  ＳＶＮレジスタに書き込み、その部分をロックする、（３）ＭＣＨＥＣＫローダまたは早期ＭＣＫＥＣＫコードが、ＭＣＨＥＣＫのＳＶＮをＴＣＢ  ＳＶＮレジスタに書き込み、ロックする、（４）マイクロコードパッチ・ローダが、マイクロコードパッチＳＶＮをＴＣＢ  ＳＶＮレジスタに書き込み、ロックする、という各ステップがＢＳＰから行われる。ＡＰは、キーフローに参加しない。
【０２１４】
マイクロコード初期化中、またはＥＧＥＴＫＥＹの呼び出し時に、マイクロコードは、要求を満たすのに必要となるＳＥベースキーを計算する。ベースキーは、さらに性能向上のために利用するために、ＣＭＡ内にキャッシュされてよい。表１２−４は、ベースキーの計算方法を示す。
【表１２−４】
0005443599.tif 000055
【０２１５】
プラットフォームのウォータフォールでユーザのプライバシーおよびデータを保護するために、２５６ビットのランダム所有者エポックをキー導出に含める。この値は、所有者変更中にランダムに作成される。エンクレーブキーを利用する前に、ソフトウェアは、所有者エポックをＳＥ＿ＥＰＯＣＨ＿ＭＳＲに書き込んでよい。これはＢＩＯＳがフラッシュに永久書き込みを行うことにより実行されてよい。一部のユーザ入力（ユーザ起動パスワードのハッシュ等）からこれを計算することもできる。または、エンクレーブの利用を許可する前に、セキュアなエンクレーブドライバにより提供されてもよい。
【０２１６】
この値の機密性は、プラットフォームにより暗号化されるデータが、ウォータフォールの後でラップトップの所有者により最初に認可されているエンクレーブでは復号できないことを保証する必要がある。この値のセキュリティ侵害は、エンクレーブデータのセキュリティ侵害につながらない。
【０２１７】
ＳＥキー情報構造は、メモリまたはパッケージの保護された領域に格納されている非永久構造である。ＣＭＡが最もよく利用される位置であるが、オンダイで保護されたストレージのいずれかを利用することも可能である。電源投入中には、ＳＥキー情報を初期化することができる。キーＩＤは乱数値に設定され、キーカウントは０に設定される。エンクレーブキー、許可書キー、およびレポートキーが利用されるごとに、キーＩＤが読み出され（the KeyID read）、キーカウントを増分する。２＾３２個のキーが利用された後で、キーＩＤが新たな乱数の値に変更され、キーカウントが０にリセットされる。ＳＥキー情報配置を５に示す。
【表１２−５】
0005443599.tif 000056
【０２１８】
電源が投入されると、プラットフォームキーテーブルをｕＣｏｄｅにより初期化する。ＢＩＯＳその他のホストファームウェアは、現在の所有者エポックを、永久ストレージから、または、ユーザから取得して、これをLoadOwnerEpochMSRに書き込む。この時点ではエンクレーブキー階層が利用可能である。
【０２１９】
エンクレーブのアーキテクチャの多くは、エンクレーブデータの認証および機密性を提供するためにキーが利用され、プロセッサの複雑性を最小限にとどめるために、アーキテクチャエンクレーブを利用して、高レベルの利用のためにこれらキーを処理する。例えば、クオーティング・エンクレーブは、ＲＥＰＯＲＴキーを利用して、ＥＲＥＰＯＲＴ命令により生成されたＲＥＰＯＲＴ構造がプラットフォーム上に作成されたことを確認して、ＰＥＲＭＩＴＩＮＧエンクレーブは、ＰＥＲＭＩＴキーを利用して、エンクレーブが起動されたときにＥＩＮＩＴが消費するエンクレーブＰＥＲＭＩＴを生成する。
【０２２０】
加えて、任意のアプリケーションレベルのエンクレーブが、エンクレーブ外のプラットフォーム上の格納されている秘密をシールするためにキーにアクセスする必要があり、アプリケーションエンクレーブが再度確立されたとき（電力サイクル中であっても）シールは解除される。
【０２２１】
こうするためのメカニズムはＥＧＥＴＫＥＹ命令である。これは、現在のソフトウェア環境について秘密を構築するための単一のインタフェースである。
ＥＧＥＴＫＥＹは現在、以下のキーにアクセスを提供している：（１）プロビジョンキーＩＤ（プロセッサについて一意に暗号化された（プロビジョンキーを利用して）データブロブを識別するために、アーキテクチャ・プロビジョン・エンクレーブが利用する）、（２）プロビジョンキー（プロセッサについて一意に暗号化されたデータブロブを復号するために、アーキテクチャ・プロビジョン・エンクレーブが利用する）、（３）プロビジョンシールキー（エンクレーブが、所有者が変わっても復号できるような形にＥＰＩＤを暗号化するために、アーキテクチャ・プロビジョン・エンクレーブが利用する）、（４）許可証キー（許可証を作成するためにアーキテクチャ許可証エンクレーブが利用する）、（５）レポートキー（レポート構造を検証するために、アーキテクチャ・クオーティング・エンクレーブが利用する）、（６）ＩＳＶ認証キー（ＩＳＶ  ＡＵＴＨ  ＫＥＹ）（特定の対象アプリケーションエンクレーブのための認証データを作成するために、アーキテクチャ・クオーティング・エンクレーブが利用する）、（７）認証キー（ＡＵＴＨ  ＫＥＹ）（アーキテクチャ・クオーティング・エンクレーブが受け取ったデータを認証するために、アプリケーションエンクレーブが利用する）、（８）シールキー（エンクレーブ外に格納を希望するデータを暗号化するために、アプリケーションエンクレーブが利用する）、（９）ＯＯＢ経験キー（アウトオブボックス経験利用のために（例えばＢｌｕＲａｙプレーヤ）暗号化データを予めプロビジョンするために、ＩＳＶが利用する）。
【０２２２】
これら値の殆どは、未加工でプロセッサに常駐はせず、実際には、単一のヒューズキーの値からＥＧＥＴＫＥＹの要求に応じて導出される。これらキーのそれぞれが単一のキーではなく、可能性のあるセットからの単一のキーにあるときに要求に応じて導出される。配信された特定のキーは、複数のパラメータに依存しており、そのうち一部がユーザ選択可能であり、その他がシステムまたは特定の状態に基づいている。
【０２２３】
キーを選択するために、キー要求構造をＥＧＥＴＫＥＹ命令への入力として利用する。キーを選択することに加えて、ユーザは、キー要求構造を利用して、キー生成中に利用を希望する、制御下にあるこれら変数を、呼び出し者に特定させる。以下の図面は、キー要求構造を示す。
【表１２−６】
0005443599.tif 000057
【０２２４】
キー選択は、ユーザが必要とするキーを特定するのに利用され、キーポリシーは、キーを作成するのに利用されるさらなる値を確かめるのに利用される（それが、アーキテクチャエンクレーブの特定のセキュリティバージョンであろうと、アーキテクチャエンクレーブの特定のセキュリティバージョンであろうと、アプリケーションエンクレーブの特定のバージョンであろうと、現在のエンクレーブに関連付けられた計測値レジスタであろうと（ＥＧＥＴＫＥＹがＥＮＣＬＡＶＥ内から呼び出されるとき））。
【０２２５】
さらなるランダムネスがキー導出に利用することもでき、これは特に、キーの消耗を防止するために必要であり、ＰＥＲＭＩＴＩＮＧおよびＱＵＯＴＩＮＧアーキテクチャエンクレーブにより利用される。また、シールキー（SEALing key）を作成するときにもアプリケーションエンクレーブにより利用される。ゼロにセットされたフィールドは、ランダムネスを追加しないことを意味しており、そうでない場合にはフィールドは、２５６ビットの整列したデータの値を指し示すことになる。以下の表は、キー選択フィールドの構造を特定する。
【表１２−７】
0005443599.tif 000058
【０２２６】
キーポリシーは、ビットフィールドセレクタであり、特定の値（ユーザまたはシステム状態いずれからのものであっても）が、キー導出に利用されるかを判断するのに利用される。
【表１２−８】
0005443599.tif 000059
【０２２７】
＜エンクレーブレジスタおよび制御＞
【表１４−１】
0005443599.tif 000060
【０２２８】
２つのイネーブルレベルがエンクレーブに提供される。第１のイネーブルは、ＢＩＯＳによるビットセットのｏｐｔである。これは一度の書き込み関数（write once function）である。次のリセットまでにエンクレーブ機能をイネーブルまたはディセーブルする。第２のイネーブルは、ＯＳまたはＶＭＭに提供されて、必要に応じてエンクレーブ機能をＯＮまたはＯＦＦに切り替える。
【０２２９】
図１９は、本発明の一実施形態にみることができるエンクレーブＣＴＬ＿ＭＳＲレジスタを示す。最下位ビットがイネーブル１９００である。レジスタのビット１が１９１０でＯｎである。ビット２から６３はリザーブされている。
【０２３０】
エンクレーブ機能は、先ず、図１９に示すエンクレーブＣＴＬ＿ＭＳＲにイネーブルビットを設定することから始まる。このビットは、パッケージのリセットが行われるとディセーブルに初期設定される。このビットは、パッケージリセットの後に一度書き込むことができる。
【０２３１】
ＢＩＯＳは、ビットをセットして、エンクレーブをイネーブルする。ＢＩＯＳがビットをクリアすると、エンクレーブは、その部分がリセットされるまでイネーブルすることができない。
【０２３２】
ソフトウェアは、ＣＰＵＩＤ命令を実行することで、エンクレーブのサポートを検知することができる。ＣＰＵＩＤは、エンクレーブがサポートされているか否かを示す結果を戻す。
【０２３３】
ビットのＯｐｔがクリアされると、ＣＰＵＩＤは、そのエンクレーブを実行しないことを報告する。
【０２３４】
システムソフトウェアは、図１９に示すエンクレーブＣＴＬ＿ＭＳＲを利用してエンクレーブ機能を制御する。Ｏｎビットは、ソフトウェアに、エンクレーブ機能に対するアクセスを動的に制御させる。
【０２３５】
ソフトウェアは、ＣＰＵＩＤ命令を実行することで、エンクレーブのサポートを検知することができる。エンクレーブＣＴＬ  ＭＳＲにＯＮビットがセットされている場合に、エンクレーブサポートが示される。
【０２３６】
ＴＣＳＭＳＲレジスタは、ＴＣＳのアドレスを含む各プロセッサ上のレジスタであり、例外処理およびＲＤＴＣＳＰＴＲにより利用される。エンクレーブに入るときに装填される。レジスタは、ＥＥＮＴＥＲを実行するときにＴＣＳの値を装填され、ＥＲＤＴＣＳＰＴＲにより読み取られる。レジスタサイズは、プロセッサのモードに基づく。
【０２３７】
各プロセッサ上にあるエンクレーブ・ベースアドレスレジスタは、実行中のエンクレーブの下位アドレスを含み、マイクロコードによりエンクレーブに入るときに装填される。レジスタサイズは、プロセッサのモードに基づく。このレジスタはソフトウェアからは見えず、一時的なマイクロコード（microcode temporary）である。
【０２３８】
レジスタは、現在のエンクレーブのアドレスの上限を保持し、エンクレーブに入るときに装填される。レジスタは、エンクレーブが実行を開始するときに、ＳＥＣＳに格納されている値を装填される。これは、一時的なマイクロコードレジスタである。レジスタサイズは、プロセッサのモードに基づく。
【０２３９】
エンクレーブページキャッシュ（ＥＰＣ）最大サイズレジスタは、ＥＰＣの最大サイズを示す。このサイズは、４０９６バイトのページの数で与えられる。これは３２ビットのレジスタである。このレジスタは、読み取り専用であり、現在の設計でＥＰＣがサポートする最大サイズを示す。
【０２４０】
ＥＰＣサイズレジスタＥＰＣ＿ＳＩＺＥ  ＭＳＲは、ＥＰＣの現在定義されているサイズを示す。レジスタを装填することで、ＥＰＣがそのサイズに定義される。この値は、４０９６ビットのページで与えられる。例えば、４０９６ビットのページ１枚が１である。レジスタの値は、ＥＰＣ＿ＭＡＸ値を超えることはできない。値がＥＰＣ＿ＭＡＸ値を超えると、ＷＲＭＳＲ命令によりＧＰ不良がとられる。このレジスタに書き込むことで、書き込み前に、ＥＰＣの全てのデータが無効化される。ソフトウェアは、このレジスタを更新する前に（必要であれば）全てのＥＰＣエントリをセーブしてよい。
【０２４１】
ＥＰＣベースレジスタは、ＥＰＣのベースの位置を示す。このレジスタに書き込むことで、書き込み前に、ＥＰＣの全てのデータが無効化される。ソフトウェアは、このレジスタを更新する前に（必要であれば）全てのＥＰＣエントリをセーブしてよい。
【０２４２】
概して、外部インタフェースは、エンクレーブのセキュリティを侵害しうる転送またはトランザクションを許可しない。セキュアなエンクレーブは、エンクレーブキーについてランダムな数を要求する。乱数生成器は、マイクロコードによりセキュアにアクセス可能である。パーツのコアに配置される必要はない。
【０２４３】
図２６は、本発明の一実施形態における、デジタル乱数生成器のためのプロセッサパッケージを示す。プロセッサパッケージ２６００は、コア０  ２６４０、コア１  ２６７０という複数のコアを含みうる。コア０  ２６４０は、マイクロコード２６４２、マイクロコード２６４４、マイクロコード２６４６、ＲＮＧマイクロコードモジュール２６５０、およびＲＮＧキュー２６５４を含んでよい。コア１  ２６７０は、マイクロコード２６７２、マイクロコード２６７４、マイクロコード２６７６、ＲＮＧマイクロコードモジュール２６８０、およびＲＮＧキュー２６８４を含んでよい。読み取りランダム命令２６３０は、マイクロコード２６４２と通信してよく、読み取りランダム命令２６３５は、マイクロコード２６７２と通信してよい。プロセッサパッケージ２６００は、さらに、ＤＲＮＧ２６０２を含んでよく、ＤＲＮＧ２６０２は、ＳＴＤ２６０８、ＯＰＥ２６１０、ＰＳＫ２６１２、およびＴＳＣ２６１４をとる。ＤＲＮＧ２６０２は、デジタルエントロピーソース２６０４を取得することができ、これはオンラインの自己テスト２６０６に接続する。オンラインの自己テスト２６０６の出力は、組み合わせられた調節器／決定論ランダムビット生成器（ＤＲＢＧ）２６２０の１つの入力であってよい。
【０２４４】
エンクレーブは、作成時にデバッグエンクレーブとして設定されてよい。デバッグエンクレーブは、ＥＤＢＧＲＤおよびＥＤＢＧＷＲ命令を利用してエンクレーブの内容に外部アクセスすることができる。デバッグエンクレーブは、ＥＣＲＥＡＴＥ内にデバッグエンクレーブを設定することによりセットアップされる。このビットはエンクレーブのＥＣＳ内に格納される。
【０２４５】
デバッグビットクレアで作成されるエンクレーブは、生成エンクレーブである。エンクレーブは、ＥＰＣは、エンクレーブがデバッグエンクレーブであると示すデバッグビットを含んでいる。エンクレーブは、メインメモリ内に、またはディスク上に、暗号化されたままで残っている。エンクレーブの内容を探す必要のあるデバッガは、メモリをＥＰＣに装填する。ＥＤＢＧＲＤおよびＥＤＢＧＷＲ命令を利用して、ＥＰＣに常駐するエンクレーブメモリの位置にアクセスすることができる。デバッグエンクレーブは、実行するために許可証を必要とせず、有効な許可証なしに実行される。
【０２４６】
生成エンクレーブに入るときにデバッグ制御レジスタＤＲ７は、ＴＣＳセーブ領域にセーブされる。ＤＲ７は図２７に示されている。図２７は、本発明の一実施形態では、デバッグレジスタＤＲ７  ２７００である。レジスタＤＲ７  ２７００は、Ｌ０  ２７０２、Ｌ１  ２７０６、Ｌ２  ２７１０、Ｌ３  ２７１４、Ｇ０  ２７０４、Ｇ１  ２７０８、Ｇ２  ２７１２、およびＧ３  ２７１６を含む。ＤＲ７  レジスタ２７００の他のビットは、ＬＥ２７１８、ＧＥ２７２０、００１  ２７２２、ＧＤ２７２４、００  ２７２６、Ｒ／Ｗ０  ２７２８、ＬＥＮ０  ２７３０、Ｒ／Ｗ１  ２７３２、ＬＥＮ１  ２７３４、Ｒ／Ｗ２  ２７３６、ＬＥＮ２  ２７３８、Ｒ／Ｗ３  ２７４０、およびＬＥＮ３  ２７４２を含む。
【０２４７】
ビットＬ３−Ｌ０およびＧ３−Ｇ０は、０の値に設定されている。ＤＲ７は、エンクレーブの退出時に元の値に設定される。
【０２４８】
デバッグエンクレーブについては、デバッグレジスタの値を変更しない。ＲＦＬＡＧＳ．ＴＦは、ＥＥＮＴＥＲ命令の開始時に設定され、以下の２つの場合を考慮に入れる必要がある。
【０２４９】
１つの場合は、デバッガがレガシー（非ＳＥ認識）である、または、エンクレーブが生成（非デバッグ）モードにある場合である。
【０２５０】
ＳＥ認識デバッガは、デバッグモード・エンクレーブを対象としている。
【０２５１】
第１の場合には、＃ＤＢ例外が、次のＥＥＸＩＴ命令の対象において生じうる。これにより、エンクレーブが、大きく、不透明な処理（large, opaque operation）として取り扱われる。第２の場合には、ユーザは、エンクレーブによる単一のステップへの完全な自由度を利用することができる(complete freedom to single step through the enclave)。この行為は、エンクレーブ内の３つのデータフィールド、および、ＥＥＮＴＥＲ、ＥＥＸＩＴ、および、ＥＩＲＥＴにおけるＲＦＬＡＧＳ．ＴＦの特殊処理によりサポートされる。
【表１５−１】
0005443599.tif 000061
【表１５−２】
0005443599.tif 000062
【０２５２】
ＴＣＳセーブ領域にレジスタ値をセーブする。レジスタは０に設定される。エンクレーブの終了時には、レジスタは、エントリ値に復元される。エンクレーブが、開始時にイネーブルされた分岐トレース（branch trace）を有する場合、ＥＥＮＴＥＲがエンクレーブに入る前の最終エントリとなる。エンクレーブの終了時に、終了後の始めの位置が分岐トレースに書き込まれる。
【０２５３】
Ｉｎｔ  ｎおよびＩｎｔ  ３命令は、エンクレーブ内で実行されるときにＧＰ不良として報告される。デバッガは、エンクレーブをデバッグするときにＧＰ不良条件をフックすることができる。
【０２５４】
本文書では、ＡＥＳブロック暗号のためにＣＭＡＣモード処理を実施する新規な技術を記載する。ＣＭＡＣは、メッセージの真偽をサポートするモードであり、メッセージＡおよびキーＫを入力として受け付けて、認証タグＴを戻す。認証タグの導出は、ＣＢＣ（暗号ブロック鎖）アルゴリズムを利用して行われる。ＣＭＡＣは、長さ拡張攻撃に対する保護メカニズムを含むために、ＣＢＣよりも複雑である。これらを「ＣＭＡＣの３つの特性」と称する。以下では、ＣＢＣおよびＣＭＡＣを概略する。
【０２５５】
図２０は、本発明の一実施形態で利用される暗号ブロック鎖アルゴリズムを示す。初期化ベクトル２０００およびステージ１入力２０１０は、排他的論理和ゲート２０１２に入る。排他的論理和ゲート２０１２の出力は、ステージ１ブロック暗号２０１５に入る。ステージ１ブロック暗号出力２０１８は次に、ステージ２排他的論理和ゲート２０２２に、ステージ２入力２０２０とともに入る。排他的論理和ゲート２０２２の出力は、ステージ２ブロック暗号２０２５に入る。ステージ２ブロック暗号出力２０２８は、暗号ブロック鎖の次の段階に入る（不図示）。
【０２５６】
ＣＢＣアルゴリズムは、ブロック暗号を利用して、一部のデータの機密性を確保する、または、このデータの認証タグを計算する。ＣＢＣアルゴリズムの基本をなす構想は、前の暗号からの出力が、暗号化前に次の入力ブロックでＸＯＲされる、というものである。このようにして、入力データに存在しうるパターンを、暗号文から排除することができる。また、ブロック暗号のトランザクションの間のＸＯＲ処理の組み合わせにより、理想的には許されない（forgeable）メッセージ認証タグを導出するために混合が大幅に行われる（strong mixing）。
【０２５７】
ＣＢＣアルゴリズムは、図２０と以下に示される。暗号は、ＡＥＳの場合同様に、１２８ビットの暗号と想定する。
【表８】
0005443599.tif 000063
【０２５８】
ＣＭＡＣの仕様は、ＣＢＣアルゴリズムを初期化および終了させるために３つのさらなるアルゴリズムを含む。これらは、ＣＭＡＣの「３つの特徴」と称される。１つ目の特徴は、対称鍵Ｋから２つのサブキー値Ｋ１およびＫ２を導出することに関する。サブキーＫ１およびＫ２は、中間値Ｌから導出される。ＣＭＡＣは、対称鍵の値Ｋを利用して、ゼロからなるストリング（つまり０１２８）に、対称鍵値Ｋを利用して対称鍵ブロック暗号変換を行うことでＬが得られる、と示している。この関係を、式（１）Ｌ＝ＣＩＰＨＥＲＫ（０１２８）で示す。
【０２５９】
Ｌが導出されると、Ｌの最上位ビットをチェックする。これがゼロであれば、Ｋ１を、左に１ビットシフトすることにより、Ｌから導出される。そうでない場合は、Ｌを左に１ビットシフトして、特殊な値ＲｂでＸＯＲして、Ｋ１を生成する。Ｒｂは、バイナリ形式の（０１２０１００００１１１）として定義される。Ｋ２も同じプロシージャでＫ１から生成される。サブキーＫ１、Ｋ２の導出は、以下の擬似符号に示されている。ＭＳＢ（）がある値の最上位ビットを示すこととする。
【表９】
0005443599.tif 000064
【０２６０】
ＣＭＡＣの第２の特徴は、入力データにＣＢＣアルゴリズムを利用する前に、パディングを行うことに関している。データの最後のブロックが完全なブロックではない場合にはそのブロックを、１に必要な数の０を付けたビットでパディングして、最終的なブロックが完全なものになるようにする。
【０２６１】
ＣＭＡＣの第３の特徴は、長さ拡張攻撃を回避するために行われる最終ブロックに対する修正に関している。最終ブロックが完全に１ではない場合（パディング不要の場合）には、最終ブロックをサブキーＫ１でＸＯＲする。そうでない場合には、サブキーＫ２でＸＯＲする。ＣＭＡＣタグ生成および検証アルゴリズムを以下に示す。
【０２６２】
【表１０】
0005443599.tif 000065
【０２６３】
以下では、対称鍵ブロック暗号がＡＥＳとして利用され、プロセッサがＡＥＳラウンド加速（AES round acceleration）の命令セットをサポートしている場合の、ＣＢＣ（）アルゴリズムの実装方法例を示す。Ｉｎｔｅｌアーキテクチャは、ウェストミア（Ｗｅｓｔｍｅｒｅ）プロセッサ（２００９）およびそれ以降の時間フレームにおいて４つの新たな命令をサポートする。これら命令は、ＡＥＳＥＮＣ（ＡＥＳラウンド暗号）、ＡＥＳＥＮＣＬＡＳＴ（ＡＥＳ最終ラウンド暗号）、ＡＥＳＤＥＣ（ＡＥＳラウンド復号）、ＡＥＳＤＥＣＬＡＳＴ（ＡＥＳ最終ラウンド復号）である。これら命令の仕様を以下に示す。
【表１６−１】
0005443599.tif 000066
【０２６４】
タグ検証プロセスがタグ生成と同じであることから、ＣＭＡＣモードを、ＡＥＳラウンド命令を利用して実装するには、ＡＥＳＥＮＣ  ＡＥＳＥＮＣＬＡＳＴのみの呼び出しで十分である。図２１は、単一のＡＥＳブロックの暗号化と関連付けられたフローチャートである。図２２は、ＣＢＣアルゴリズムを利用する多数のＡＥＳブロックの暗号化と関連付けられたフローチャートを示す。
【０２６５】
キースケジュール変換を実装するためには、逆混合列（inverse mix columns）用のＡＥＳＩＭＣ命令とＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴ命令とを利用することができる。ＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴは、暗号化に利用されるラウンドキーを生成するために利用される。ＡＥＳＩＭＣは、暗号ラウンドキーを、均等な逆暗号化モデルに従って復号に利用可能な形式に変換するために利用される。ＡＥＳＩＭＣおよびＡＥＳＫＥＹＧＥＮＡＳＳＩＳＴ命令は、http://softwarecommunity.intel.com/articles/eng/3788.htmに記載されている。
【０２６６】
ＣＭＡＣは、１２８ビットの量のビッグエンディアン記述を利用して示される。ＣＭＡＣをリトルエンディアン・マシンを利用して正確に実装するには、１６バイト幅の反映処理をソースコード実装のある時点で行う必要がある。この処理は、ＰＳＨＵＦＢ命令（１クロック・レイテンシー、スループット）の利用により迅速に行うことができる。以下に、バイトシャッフルが必要な時点を記述する。
【０２６７】
ＳＵＢＫＥＹＳ（）アルゴリズム実装バイト反映（byte reflection）は、ＡＥＳ暗号をゼロストリングに利用して導出された後であって、２つのサブキーが導出される前に、Ｌに対して行われる必要がある。バイト反映は、２つのサブキーに対して、Ｌから導出された後で必要である。ＳＵＢＫＥＹＳ（）実装は、以下のＣで示される。
【表１１Ａ】
0005443599.tif 000067
【表１１Ｂ】
0005443599.tif 000068
【０２６８】
次に、最終ブロックが完全ではない場合に限って、最終ブロックに対するバイト反映をパディングの前後に行う必要がある。これらのステップは以下のＣの実装例に示されている。
【表１２】
0005443599.tif 000069
【０２６９】
function_pshufb()が、１２８ビット幅のバイト反映を行う。
【０２７０】
＜ＳＭＩのＳＥ要件＞
エンクレーブは、ＳＭＭ空間内での実行を許可されていない。エンクレーブをＳＭＭモードで実行しようとすると、命令のＧＰ不良が生じる。ＳＭＩがエンクレーブ内で実行している間に生じると、プロセッサは、レジスタ状態を、遠隔のエンクレーブ内にセーブして、終了する。終了すると、ＴＢＤ  ＭＳＲビットを、エンクレーブの実行中にＳＭＩが生じたことを示すように設定する。ＳＭＭコードは、エンクレームデータにアクセスできない。ＥＰＣ領域に接触しようと試みると、実際のモードではジャンクデータを戻し、保護されたモードではＥＰＣページ不良を戻すこととなる。
【０２７１】
一部の命令は実行が許可されない。どの命令が合法かを決定するためには幾つかの一般法則が利用される。
１．エンクレーブ内ではリングレベルの変更は許可されない。リングレベルの変更または変更の可能性の命令は禁止されている。
２．外部ソフトウェアは、エンクレーブ内のＶＭＥＸＩＴＳにサービス提供できない。エンクレーブ内でＶＭＥＸＩＴを生成する、または生成する可能性のある全ての命令を禁ずる。
３．ソフトウェアは、エンクレーブ内で仮想マシンを生成することができない。全てのＶＭＸ命令を禁ずる。
４．エンクレーブの内部でＩ／Ｏ参照を実行する命令を禁ずる。
【０２７２】
エンクレーブの第一世代では、プロセッサは、エンクレーブに入るときに、ＩＯＰＬセットを０として、リング３で実行されてよい。エンクレーブを仮想化または非仮想化環境で実行する際に、プログラミング環境を保存するためには、表１８−１にリストされている命令が合法である。
【表１８−１】
0005443599.tif 000070
【０２７３】
エンクレーブ内の状態には制約が課されている。エンクレーブに入るとき、GDTR.limit、LDTR.limit, IA32_EFER.SCE、および、IA32_SYSENTER_CSをＴＣＳ領域にセーブする。ローカルの値がクリアされる。これらレジスタへアクセスする、またはアクセスを生じさせる命令は、エンクレーブ内で失敗する。GDTR.limit、LDTR.limit, IA32_EFER.SCE、および、IA32_SYSENTER_CSは、エンクレーブを抜けるときに復元される。
【表１８−２】
0005443599.tif 000071
【０２７４】
エンクレーブの寿命は、独立した（distinct phases）に分類できる。第１の段階は、エンクレーブ生成である。第２の段階は、エンクレーブ利用である。最終の段階は、エンクレーブ破壊である。
【０２７５】
エンクレーブの生成および利用には、ＯＳ／ＶＭＭのサポートが必要となる。エンクレーブはＯＳ／ＶＭＭにセキュリティ面で依存しないが、一定のハードウェアデータ構造を適切に維持するためにはＯＳ／ＶＭＭが必要となる。ＯＳ／ＶＭＭがこれら構造の維持に失敗すると、セキュリティは損なわれないが、エンクレーブ全体が不良となる場合がある。
【０２７６】
幾つかの命令は、エンクレーブの証明、秘密データのシールおよびシール解除、および、認証されたエンクレーブの許可をサポートする。
【０２７７】
第１の段階では、エンクレーブは、アプリケーションによる利用に備えて、セキュアに構築され、内部ソフトウェア環境が設定されていてよい。３つの命令を利用してエンクレーブを生成する。第１の命令ＥＣＲＥＡＴＥは、最初の状態環境を設定する。この命令は、エンクレーブキーを生成し、装填し、暗号化を行い、エンクレーブデータ構造の格納に利用される２ページの整合性チェックを行う。第２の命令ＥＡＤＤＰＲＥは、エンクレーブに１ページのデータを追加する。詳しくは、エンクレーブ内のコード、スタック、およびヒープに必要なページを追加する。第３の命令ＥＩＮＩＴは、公知の状態に内部ソフトウェア環境を設定する。この命令の完了時には、エンクレーブは第２の段階である「利用」に移動している。
【０２７８】
ＥＩＮＩＴを実行する前に、構築ソフトウェアは許可証を、ＥＭＫＰＥＲＭＩＴを実行することにより、または、許可エンクレーブを利用することにより取得していてよい。
【０２７９】
エンクレーブは、ＥＥＮＴＥＲ命令により入力される。この命令により、マシンがエンクレーブモードへと遷移する。そして、予め定義されたエントリポイントへ制御を渡す。ＥＥＸＩＴ命令は、エンクレーブから外部アプリケーションに戻る。ＥＩＲＲＥＴ命令は、割り込みの終了からエンクレーブに戻る。
【０２８０】
ＥＥＮＴＥＲまたはＥＩＲＥＴを介してエンクレーブに入る際には、以下の処理を命令により実行する。すなわち、処理は、GDTR.limitのセーブおよびクリア、LDTR.limit、IA32_EFER.SCE、IA32_SYSENTER_CSである。抜けるときに、GDTR、LDTR、IA32_EFER、および、IA32_SYSENTER_CSを復元する（On exit restore GDTR, LDTR, IA32_EFER, and IA32_SYSENTER_CS）。
【０２８１】
エンクレーブの破壊には命令は存在しない。
【０２８２】
EDBG_READ命令は、デバッグエンクレーブ内のある位置の８バイトの読み取りを行う。非デバッグエンクレーブにはアクセスが許可されていない。EDBG_WRITE命令は、デバッグエンクレーブ内のある位置への８バイトの書き込みを行う。非デバッグエンクレーブにはアクセスが許可されていない。
【０２８３】
エンクレーブページキャッシュ（ＥＰＣ）は、２つの命令を解して管理される。２つの命令は、ＥＰＣページ（ＥＬＰＧおよびＥＷＢＩＮＶＰＧ）を装填／格納する。
【０２８４】
ＥＲＥＰＯＲＴは、エンクレーブ計測値を保持する暗号的に保護された構造を生成する。ＥＧＥＴＫＥＹは、様々な種類のエンクレーブ固有キーを取得する手段を提供する。ＥＭＫＰＥＲＭＩＴは、認証されたエンクレーブに対する許可証を生成するために利用される。
【表１９−１】
0005443599.tif 000072
注２：「内部」には利用可能なモデルがないが、内部からＥＭＫＰＥＲＭＩＴに実行を許可することにまつわる被害は知られていない。
注３：将来のバージョンでは、リング０からもエンクレーブへのエントリが可能となるかもしれない。
【０２８５】
割り込みが生じると、プロセッサ状態をエンクレーブ内にセーブして（隠して）、状態をクリアする。さらに、割り込みの戻りアドレスを隠してもよい。
【０２８６】
エンクレーブの実行中に生じる割り込みは、オペレーティングシステムが予期するような形態の割り込みスタックに情報をプッシュして、ＯＳコードを変更する必要がないようにする。これを遂行するために、トランポリンコードへのポインタを、割り込みスタックへとＲＩＰとしてプッシュする。このトランポリンコードは、ゆくゆくは、特殊パラメータ（q.v.）を有するＥＥＮＴＥＲ命令によりエンクレーブへ戻る。
【０２８７】
利用される割り込みスタックは、非ＳＥモードで利用されたものと同じ規則により選択される。つまり規則とは、（１）特権付きレベル変更がある場合には、割り込みスタックは、新たなリングに関連付けられたものである、（２）特権付きレベル変更がない場合には、現在のアントラステッド・スタック（Untrusted Stack）を利用する、（３）ＩＡ−３２ｅ  ＩＳＴメカニズムを利用する場合には、この方法を利用して割り込みスタックを選択する。
【０２８８】
図２３は、スタックスイッチで割り込んだ後のアプリケーションおよび割り込みスタックの一実施形態を示す。現在のセーブ状態領域フレーム２３００は、ＲＳＰレジスタ２３０５を含む。スレッド制御構造２３１０は、状態セーブ領域２３１２および割り込み戻りルーチン２３１４のカウントを含みうる。割り込みスタック２３３０は、ＳＳレジスタ２３３２、ＲＳＰレジスタ２３３４、フラグレジスタ２３３６、ＣＳレジスタ２３３８、命令レジスタ２３４０、およびエラーコード２３４２を含む。割り込みスタック２３３０は、ＲＳＰレジスタ２３３４内のデータを、アプリケーションスタック２３２０およびセーブ状態領域２３００のカウントに送ってよい。エラーコード２３４２は、プッシュ２３４６後に、ＲＳＰから来てよい。割り込みルーティングルーチン２３１４および命令レジスタ２３４０は、ｕＲＴＳ２３４４のスレッドごとのトランポリンを送出する。
【０２８９】
いずれの場合にも、割り込みスタックおよびそれにプッシュされた情報の選択は、非ＳＥ処理と矛盾しない。図２３は、スタックスイッチで割り込んだ後の、アプリケーションおよび割り込みスタックを示す。スタックスイッチのない割り込みは、アプリケーションスタックを利用する。加えて、ＴＣＳポインタは、後ほどＥＥＮＴＥＲ命令が、割り込み後にエンクレーブを再開するときに利用するので、ＲＢＸに配置される。
【０２９０】
ＴＣＳ：：ＩＲＲ（割り込み戻りルーチン）は、後に特別なスレッドに戻る、スレッドごとのコードシーケンスを指し示している。このポインタは、戻りＲＩＰとして割り込みスタックにプッシュされる。これによりデータ構造のセットが、ＩＲＥＴを、割り込み戻りコード（特別なＥＥＮＴＥＲ命令を含む）が実行されるアプリケーションに戻す。ＥＥＮＴＥＲは、割り込み時に初期化されるＲＢＸレジスタをとり、これをＴＣＳとして利用して、エンクレーブに再度入る。
【０２９１】
ＣＦ（キャリー・フラグ）、ＳＦ（サイン・フラグ）、ＰＦ（パリティ・フラグ）、ＯＦ（オーバフロー・フラグ）、ＡＳ（調節フラグ）、ＤＦ（方向フラグ）、ＺＦ（ゼロ・フラグ）というＲＦＬＡＧＳのビットは、レジスタを割り込みスタックにプッシュする前にクリアされる。
【０２９２】
図２４は、本発明の一実施形態の複数の状態セーブ領域スロットのスタックを実装することのできる方法を示す。スレッド制御構造２４００は、次の状態セーブ領域スロット２４０２、現在の状態セーブ領域スロット２４０４、および、状態セーブ領域スロット２４０６を含んでよい。状態セーブ領域０  ２４１０、状態セーブ領域１２４１２、および状態セーブ領域Ｎ  ２４１８は、状態セーブ領域内の３つの別個の選択位置である。次の状態セーブ領域スロット２４０２は、状態セーブ領域で利用される位置を特定する（状態セーブ領域０  ２４１０）。現在の状態セーブ領域スロット２４０４は、状態セーブ領域で利用される位置を特定する（状態セーブ領域１  ２４１２）。状態セーブ領域スロット２４０６は、状態セーブ領域で利用される位置を特定する（状態セーブ領域Ｎ  ２４１８）。
【０２９３】
状態セーブ領域は、割り込み時点のエンクレーブ状態を保持する。割り込みは、次のエンクレーブに再度入る可能性のあるユーザモードに送られうるので、ＳＳＡは、図１９−３に示すような複数のＳＳＡスロットからなるスタックである。利用される状態セーブ領域の位置は、ＴＣＳの３つの変数により制御されるが、３つの変数とは、状態セーブ領域スロット（ＮＳＳＡ）の数（状態セーブ領域スタックの全スロット数を定義する）、現在の状態のセーブ領域スロット（ＣＳＳＡ）（次の割り込み上で利用される現在のスロットを定義する）、状態セーブ領域（ＳＳＡ）（割り込み上にプロセッサ状態をセーブするのに利用されるセーブ領域スロットのセット）である。
【０２９４】
エンクレーブ内のスレッド上で実行中に割り込みが生じたときには、マイクロコードが、ＴＣＳ：：ＳＳＡおよびＴＣＳ：：ＣＳＳＡを調べて、利用されるセーブ領域を決定する。プロセッサ状態がセーブされクリアされ（秘密のリークを防止するために）、ＴＣＳ：：ＣＳＳＡを増分する。後述するように、最終スロットで例外が生じた場合には、例外をエンクレーブに送ることができない。
【０２９５】
注：ＥＥＮＴＥＲでは、ＣＣＳＡをＮＳＳＡ未満としてよく、割り込みについて少なくとも１つのセーブ領域が存在するよう保証される（割り込みから戻るためにＥＥＮＴＥＲを利用中ではない限り）。
【０２９６】
図２５は、割り込み、不良、およびトラップの状態遷移を有する状態マシンの一部を示す。可能性のある状態は、非アクティブ２５００、アクティブ２５１０、予期２５２０、処理済み（ＥＥＮＴＥＲ不法）２５３０、および処理中２５４０である。ＥＥＮＴＥＲがＴＣＳ：ＥＮＴＲＹ２５０２に配置されると、非アクティブ２５００は、アクティブ２５１０に遷移する。ＥＥＸＩＴ２５０４が生じると、アクティブ２５１０は非アクティブ２５００に遷移する。割り込み、不良、またはトラップ２５１２が生じると、アクティブ２５１０は予期２５２０に遷移する。ＥＩＲＥＴ２５１４が生じると、予期２５２０はアクティブ２５１０に遷移する。ＥＥＮＴＥＲがＴＣＳ：ＨＡＮＤＬＥＲ２５２４に配置されると、予期２５２０が処理中２５４０に遷移する。ＥＩＲＥＴ２５２２が生じると、予期２５２０が処理中２５４０に遷移する。割り込み、不良、またはトラップ２５２６が生じると、処理中２５４０は予期２５２０に遷移する。ＥＥＸＩＴ２５３２が生じると、処理中２５４０が処理済み２５３０に遷移する。エンクレーブ例外ハンドラで処理割り込みが生じ、ＥＩＲＥＴ２５３４が生じると、処理済２５３０が処理中２５４０に遷移する。エンクレーブ例外ハンドラからではない処理割り込みが生じ、ＥＩＲＥＴ２５３４が生じると、処理済み２５３０がアクティブ２５１０に遷移する。点線の遷移２５２２、２５２６、２５３４は、エンクレーブ例外ハンドラ内の割り込みの処理中のみに生じる。
【０２９７】
図２５は、エンクレーブ状態マシンの、割り込みに対処する部分を示す。割り込みは、オプションのスタックスイッチおよび割り込みスタックに合成割り込みフレームをプッシュすることから始まる。イベントが割り込みであった場合には、エンクレーブは割り込み状態に入る。イベントが例外であった場合には、エンクレーブは例外状態に入る。これら２つの状態は、エンクレーブへのエンクレーブ例外を確実に配信するために、さらには、攻撃アプリケーションコードによるスプリアス例外の配信を妨げるために、区別される。
【０２９８】
割り込み状態に遷移すると、アントラステッド・コード（アプリケーション、ＯＳまたはこれらの両方）は、ＥＥＮＴＥＲ／ＲＥＴＵＲＮ＿ＦＲＯＭ＿ＩＮＴＥＲＲＵＰＴを利用したエンクレーブの再開を行うだけでよい。
【０２９９】
例外状態に遷移すると、アントラステッド・コード（アプリケーション、ＯＳまたはこれらの両方）は、（１）ＥＩＲＥＴを利用してエンクレーブを再開して割り込まれたＩＰに戻る。これは、例えばページ不良を処理する方法である。割り込みが不良により生じ、不良条件を修正するために何も行われていない場合には、不良命令を再度実行して、不良を再度起こす（and will fault again）。しかしトラップの後のＥＩＲＥＴは、トラップ命令の後に命令に戻る、（２）エンクレーブ例外ハンドラを呼び出す、（３）スレッドまたはエンクレーブを破棄する、と決定してよい。
【０３００】
予期状態のＥＥＮＴＥＲは、処理中状態に進む。トラップハンドラからのＥＥＸＩＴ（処理中状態）は、処理済状態に進む。ＥＮＴＥＲ／ＮＯＲＭＡＬは、この状態において不法である。トランポリンからのＥＩＲＥＴは、最後の割り込みからＳＳＡにプッシュされた状態（アクティブまたは処理中状態）を再開する。
【０３０１】
セキュアなエンクレーブ命令を２つのオペコード（つまり、特権付きオペコードと特権なしオペコード）に分割する。命令処理は、命令の呼び出し時にＲＡＸの値により決定される。
【表１９−２】
0005443599.tif 000073
【表１９−３】
0005443599.tif 000074
【０３０２】
ＥＣＲＥＡＴＥ命令は、保護されているＳＥＣＳを初期化する。ソースオペランドは、page_info構造を指し示している。コンテンツページフィールドは、保護されていないＳＥＣＳ構造を指し示している。ＳＥＣＳ構造は、ページが整列されていてもよい。ＳＥＣＳベースの下位の１２ビットおよび境界値は０であってよい。ＳＥＣＳは、ＥＰＣ内の空のスロットのアドレスである。sec_infoは、保護されていないsec_info構造のアドレスである。対応するsec_infoフラグフィールドは、適切に初期化されてよい。
【表１３】
0005443599.tif 000075
【表１４】
0005443599.tif 000076
【表１５】
0005443599.tif 000077
【表１６】
0005443599.tif 000078
【表１７】
0005443599.tif 000079
【０３０３】
＜ＥＡＤＤＰＲＥ＞
＜命令の説明＞
ＥＡＤＤＰＲＥは、特権のあるソフトウェアに、lin_addrが指定するエンクレーブ内のページに、エンクレーブの外部のページをコピーさせ、エンクレーブページの属性は、sec_infoフラグフィールドを利用して設定される。命令の一部として、ページをハッシュして、結果生じるハッシュ値を、エンクレーブの計測値レジスタに拡張する。ＥＡＤＤＰＲＥは、ＥＩＮＩＴ命令がまだ初期化していないエンクレーブに対してのみ実行することができる。
【表１８】
0005443599.tif 000080
【表１９】
0005443599.tif 000081
【表２０】
0005443599.tif 000082
【表２１】
0005443599.tif 000083
【表２２】
0005443599.tif 000084
【表２３】
0005443599.tif 000085
【表２４】
0005443599.tif 000086
【０３０４】
＜ＥＡＤＤＰＯＳＴ＞
＜命令の説明＞
ＥＡＬＬＯＣＡＴＥは、特権のあるソフトウェアに、lin_addrが指定するエンクレーブのＳＭＡＰエントリを初期化させ、エンクレーブページの属性は、sec_infoフラグフィールドを利用して設定される。エンクレーブがページにアクセスできるようになる前に、ＥＡＣＣＥＰＴ命令を用いてエンクレーブのページにアクセスしてよい。ＥＡＬＬＯＣＡＴＥは、ＥＩＮＩＴ命令が初期化したエンクレーブにのみ実行される。
【表２５】
0005443599.tif 000087
【表２６】
0005443599.tif 000088
【表２７】
0005443599.tif 000089
【表２８】
0005443599.tif 000090
【表２９】
0005443599.tif 000091
【表３０】
0005443599.tif 000092
【０３０５】
＜ＥＭＫＰＥＲＭＩＴ＞
＜命令の説明＞
エンクレーブまたはライセンスを認証して、これを用いて許可証を生成する。ｒｂｘ＝＝ＮＵＬＬである場合には、証明書はＩｎｔｅｌにより署名されてよい。他の場合には、ライセンスは、ｒｂｘ許可証に示されるキーにより署名されてよい。
【表３１】
0005443599.tif 000093
【表３２】
0005443599.tif 000094
【表３３】
0005443599.tif 000095
【表３４】
0005443599.tif 000096
【表３５】
0005443599.tif 000097
【０３０６】
＜ＥＩＮＩＴ＞
＜命令の説明＞
ＥＩＮＩＴは、エンクレーブを、ソフトウェア環境で実行準備できた状態として表示する。ついに初期化に成功すると（At the end successful initialization）、ＥＥＮＴＥＲをエンクレーブに対して許可する。
【表３６】
0005443599.tif 000098
【表３７】
0005443599.tif 000099
【表３８】
0005443599.tif 000100
【表３９】
0005443599.tif 000101
【０３０７】
＜ＥＬＰＧ＞
＜命令の説明＞
この命令は、ページをエンクレーブページキャッシュ（ＥＰＣ）に装填するのに利用される。
【表４０】
0005443599.tif 000102
【表４１】
0005443599.tif 000103
【表４２】
0005443599.tif 000104
【表４３】
0005443599.tif 000105
【表４４】
0005443599.tif 000106
【０３０８】
＜ＥＷＢＩＮＶＰＧ＞
＜命令の説明＞
この命令は、ＥＰＣからメインメモリにダーティページを書き戻すために利用される。
【表４５】
0005443599.tif 000107
【表４６】
0005443599.tif 000108
【表４７】
0005443599.tif 000109
【表４８】
0005443599.tif 000110
【表４９】
0005443599.tif 000111
【０３０９】
＜ＥＵＰＳＭＡＰ＞
＜命令の説明＞
この命令は、ＥＰＣに常駐しているエンクレーブページのバージョンをチェックおよび更新する。
【表５０】
0005443599.tif 000112
【表５１】
0005443599.tif 000113
【表５２】
0005443599.tif 000114
【表５３】
0005443599.tif 000115
【０３１０】
＜ＥＲＥＭＯＶＥ＞
＜命令の説明＞
この命令は、データがＥＰＣに装填されたときにＳＭＡＰを更新する。
【表５４】
0005443599.tif 000116
【表５５】
0005443599.tif 000117
【表５６】
0005443599.tif 000118
【表５７】
0005443599.tif 000119
【表５８】
0005443599.tif 000120
【０３１１】
＜ＥＡＤＤＳＭＡＰ＞
＜命令の説明＞
この命令は、エンクレーブを既に初期化したとき、ＳＭＡＰに新たなページを追加するために利用される。
【表５９】
0005443599.tif 000121
【表６０】
0005443599.tif 000122
【表６１】
0005443599.tif 000123
【表６２】
0005443599.tif 000124
【表６３】
0005443599.tif 000125
【表６４】
0005443599.tif 000126
【０３１２】
＜ＥＭＯＤＩＦＹ＞
＜命令の説明＞
この命令は、ＳＥＣ＿ＩＮＦＯフィールドを修正して、エンクレーブが該エンクレーブ内のページを修正することを許可する。エンクレーブは、ページに対する変更を要求するが、プロセスを完了するために変更を受け付けてもよい。
【表６５】
0005443599.tif 000127
【表６６】
0005443599.tif 000128
【表６７】
0005443599.tif 000129
【０３１３】
＜ＥＡＣＣＥＰＴ＞
＜命令の説明＞
エンクレーブ内のソフトウェアは、この命令を利用して、ＳＥＣ＿ＩＮＦＯフィールドへの変更を受け付ける。これにより、ＳＭＡＰを新たなページタイプに更新することができる。
【表６８】
0005443599.tif 000130
【表６９】
0005443599.tif 000131
【表７０】
0005443599.tif 000132
【０３１４】
＜ＥＥＮＴＥＲ＞
＜命令の説明＞
ＥＥＮＴＥＲ命令は、エンクレーブに実行を渡す。命令の最後に、ＣＰＵは、ＴＣＳ  ｏＥＮＴＲＹまたはｏＨＡＮＤＬＥＲで指定されるＩＰで、エンクレーブモードで実行されている。ＥＥＮＴＥＲは、ＴＣＳが有効であり、エントリ可能であることを確かめる。ＴＣＳおよび対応するＳＳＡは、命令を続けるためにメモリに常駐させてよい。ＥＥＮＴＥＲはさらに、状態マシンをチェックして、エントリのタイプを判断し、ＴＣＳ内で一度に１つの論理プロセッサのみがアクティブであることを確かめる。ＲＦＬＡＧＳ．ＴＦは、ＥＥＮＴＥＲ上で、僅かに修正された振る舞いを有する。ＲＦＬＡＧＳ．ＴＦがＴＣＳ．ＳＡＶＥ＿ＴＦに格納されて、その後、ＴＣＳ．ＴＦから装填される。次にデバッグ例外が、ＲＦＬＡＧＳ．ＴＦの更新値に応じて条件付きで生成される。エンクレーブがデバッグモードにない場合には、デバッグレジスタＤＲ７をＴＣＳ．ＤＲ７にセーブして、クリアする。ＩＡ３２＿ＤＥＢＵＧＣＴＬ  ＭＳＲについても同様である。
【表７１】
0005443599.tif 000133
【表７２】
0005443599.tif 000134
【表７３】
0005443599.tif 000135
【表７４】
0005443599.tif 000136
【表７５】
0005443599.tif 000137
【０３１５】
＜ＲＦＬＡＧＳ．ＴＦの振る舞い＞
ＥＥＮＴＥＲの実行開始時のＲＦＬＡＧＳ．ＴＦの値は、ＥＥＮＴＥＲ完了時のトラップに影響しない。ＴＣＳから装填されるＲＦＬＡＧＳ．ＴＦの値は、トラップがとられているかを決定する。
＜ＤＲ７の振る舞い＞
エンクレーブがデバッグモードにない場合には、デバッグレジスタＤＲ７をＴＣＳ．ＤＲ７にセーブして、クリアする。
＜ＩＡ３２＿ＤＥＢＵＧ＿ＣＴＬの振る舞い＞
エンクレーブがデバッグモードにない場合には、ＩＡ３２＿ＤＥＢＵＧ＿ＣＴＬ  ＭＳＲをＴＣＳ．ＤＥＢＵＧ＿ＣＴＬにセーブして、クリアする。
【表７６】
0005443599.tif 000138
【表７７】
0005443599.tif 000139
【０３１６】
＜ＥＥＸＩＴ＞
ＥＥＸＩＴは、エンクレーブの外部へと抜ける。
＜命令の説明＞
ＥＥＸＩＴは、エンクレーブモードをディセーブルして、ＲＢＳが指定する位置に分岐する。この命令によりレジスタは影響を受けない。秘密がいずれかのレジスタに含まれる場合には、これらレジスタをクリアするのはエンクレーブソフトウェアの任務となる。ＲＦＬＡＧＳ．ＴＦは、ＥＥＸＩＴ上で、僅かに修正された振る舞いを有する。ＲＦＬＡＧＳ．ＴＦがＴＣＳ．ＳＡＶＥ＿ＴＦから装填される。次に、デバッグ例外が、ＲＦＬＡＧＳ．ＴＦの更新値に応じて条件ＣＲ-0021付きで生成される。エンクレーブがデバッグモードにない場合には、デバッグレジスタＤＲ７をＴＣＳ．ＤＲ７に装填する。この振る舞い、および、ＲＦＬＡＧＳ．ＴＦの振る舞いは、？？？に詳述されている。
【表７８】
0005443599.tif 000140
【表７９】
0005443599.tif 000141
【表８０】
0005443599.tif 000142
【０３１７】
＜ＲＦＬＡＧＳ．ＴＦの振る舞い＞
ＥＥＸＩＴの実行開始時のＲＦＬＡＧＳ．ＴＦの値は、ＥＥＸＩＴの完了時のトラップには影響しない。ＳＳＡから装填されるＲＦＬＡＧＳ．ＴＦの値は、トラップをとるかを決定する。
＜ＤＲ７の振る舞い＞
エンクレーブがデバッグモードにない場合には、デバッグレジスタＤＲ７をＴＣＳ．ＤＲ７に装填する。
＜ＩＡ３２＿ＤＥＢＵＧ＿ＣＴＬの振る舞い＞
エンクレーブがデバッグモードにない場合には、ＩＡ３２＿ＤＥＢＵＧ＿ＣＴＬ  ＭＳＲをＴＣＳ．ＤＥＢＵＧ＿ＣＴＬから装填する。
【表８１】
0005443599.tif 000143
【０３１８】
＜ＥＩＲＥＴ＞
＜命令の説明＞
ＥＩＲＥＴ命令は、ＳＳＡに前に格納していたマシン状態を利用して、例外または割り込みのために中断していたエンクレーブの実行を再開する。ＥＩＲＥＴは、ＴＣＳが有効であり、再開可能であることを確かめる。ＴＣＳおよび対応するＳＳＡが、処理を進めるために命令のためのメモリに常駐している場合がある。ＥＩＲＥＴはさらに、状態マシンをチェックして、エントリの種類を判断し、ＴＣＳ内で一度に１つの論理プロセッサのみがアクティブであることを確かめる。ＲＦＬＡＧＳ．ＴＦがＥＩＲＥＴ上に設定されている場合、命令の完了時にデバッグ例外が生じる（つまり、通常のＴＦの振る舞い）。この例外は、エンクレーブ内で生じたものとして報告され（通常のＳＥで定義されている方法により）、内部では命令は実行されない。ＥＩＲＥＴはＳＳＡからのＲＦＬＡＧＳを復元するので、ＴＦは、ＥＩＲＥＴの終了時に設定されてよい。この場合、ＴＦは、以下の命令に影響する（これも通常のＴＦの振る舞いである）。
【表８２】
0005443599.tif 000144
【表８３】
0005443599.tif 000145
【表８４】
0005443599.tif 000146
【表８５】
0005443599.tif 000147
【０３１９】
＜ＲＦＬＡＧＳ．ＴＦの振る舞い＞
ＲＦＬＡＧ．ＴＦがＥＩＲＥＴ命令の始めに設定されている場合、＃ＤＢが完了後に生じる。例外は、ＴＦが設定されていなければ制御が転送されたＲＩＰで報告される。実際、エンクレーブにおいて転送処理は行われない。ＥＩＲＥＴの通常処理の一環として、ＲＦＬＡＧＳをＳＳＡコピーから復元する。結果生じるＴＦが設定されている場合には、エンクレーブ内の対象命令の実行後に＃ＤＢが生じる。これらの振る舞いは、通常のＩＡ  ＩＲＥＴ命令の振る舞いと矛盾しない。
＜ＤＲ７の振る舞い＞
ＤＲ７は、最後の割り込みまたは例外で前にセーブされたＳＳＡコピーからを復元される。
＜ＩＡ３２＿ＤＥＢＵＧ＿ＣＴＬの振る舞い＞
ＩＡ３２＿ＤＥＢＵＧ＿ＣＴＬ  ＭＳＲは、最後の割り込みまたは例外で前にセーブされたＳＳＡコピーから復元される。
【表８６】
0005443599.tif 000148
【０３２０】
＜ＥＲＥＰＯＲＴ＞
ＥＲＥＰＯＲＴ命令は、エンクレーブの内容に関する計測値を報告する。
＜命令の説明＞
ＥＲＥＰＯＲＴは、エンクレーブ計測値レジスタ、その機能およびデバッグステータス（フラグ）を取得する。これらの値全ては、対称メッセージ認証コードを利用して保護され、ＲＥＰＯＲＴキーを利用して検証することができる。ＲＥＰＯＲＴキーを要求するエンクレーブでは、適切な機能がＳＥＣＳに設定されて、ＥＧＥＴＫＥＹ命令によりこれを取得することができる。この命令の結果は、宛先位置output_buffer_laに配置される。
【表８７】
0005443599.tif 000149
【表８８】
0005443599.tif 000150
【表８９】
0005443599.tif 000151
【０３２１】
＜ＥＲＤＭＲ＞
ＥＲＤＭＲ命令は、エンクレーブＳＥＣＳから計測値レジスタの値を読み取る。
＜命令の説明＞
この命令は、エンクレーブ外からのみ実行可能である。ＳＥＣＳが有効なＳＥＣページを指し示している場合には、命令は、output_buffer_laにより特定されるアドレスに、エンクレーブ計測値レジスタの内容を出力する。
【表９０】
0005443599.tif 000152
【表９１】
0005443599.tif 000153
【表９２】
0005443599.tif 000154
【０３２２】
＜ＥＧＥＴＫＥＹ＞
エンクレーブコードにより利用されて、プロセッサキー階層から特定のキーを戻す。
＜命令の説明＞
要求されるキーは、ＫｅｙＲｅｑｕｅｓｔ構造を利用して特定され、そのアドレスは入力として提供される。このアドレスは自然整列される。出力は常に２５６ビットのデータ値となる。この値とするためには、output_laは自然整列される必要がある。
【表９３】
0005443599.tif 000155
【表９４】
0005443599.tif 000156
【表９５】
0005443599.tif 000157
【表９６】
0005443599.tif 000158
【表９７】
0005443599.tif 000159
【表９８】
0005443599.tif 000160
【表９９】
0005443599.tif 000161
【０３２３】
＜ＥＲＤＴＣＳＰＴＲ＞
＜命令の説明＞
ＥＲＤＴＣＳＰＴＲ命令は、現在のＴＣＳリニアアドレスをＲＢＸに読み込むために利用される。
【表１００】
0005443599.tif 000162
【表１０１】
0005443599.tif 000163
【０３２４】
＜ＥＤＢＧＲＤ＞
＜命令の説明＞
ＥＤＢＧＲＤ命令は、デバッグエンクレーブから８バイトを読み取るのに利用される。
【表１０２】
0005443599.tif 000164
【表１０３】
0005443599.tif 000165
【表１０４】
0005443599.tif 000166
【０３２５】
＜ＥＤＢＧＷＲ＞
＜命令の説明＞
ＥＤＢＧＷＲ命令は、８バイトをデバッグ・エンクレーブページに書き込むために利用される。
【表１０５】
0005443599.tif 000167
【表１０６】
0005443599.tif 000168
【表１０７】
0005443599.tif 000169
【０３２６】
＜ＥＲＤＩＮＦＯ＞
ＥＲＤＩＮＦＯ命令は、エンクレーブページキャッシュの内容に関する情報を戻す。
＜命令の説明＞
エンクレーブ外で実行されると、ＥＲＥＰＯＲＴは、自身の機能およびデバッグステータス（フラグ）を、エンクレーブ計測値レジスタに報告する。これらの値全ては、対称メッセージ認証コードを利用して保護され、ＥＶＥＲＩＦＹＲＥＰＯＲＴ命令を利用して検証することができる。この命令の結果は、宛先位置output_buffer_laに配置される。
【表１０８】
0005443599.tif 000170
【表１０９】
0005443599.tif 000171
【表１１０】
0005443599.tif 000172
【０３２７】
＜ルーチン参照＞
＜退出（Exit）＞
このセクションでは、退出処理についての擬似コードを提供する。このコードは、エンクレーブコードが計画していないエンクレーブからの退出があるときに呼び出される。エンクレーブの実行は、停止した場所から再開される。再開に必要な情報は、外部スタック上にセーブされる。プロセッサのアーキテクチャ状態は、適切なセーブ領域にセーブされる。
【表１１１】
0005443599.tif 000173
【表１１２】
0005443599.tif 000174
【０３２８】
＜リーダ・ロックの取得＞
ＲＷロックにより、論理プロセッサは、共有リソースにアクセスして、スレッドが共有リソースにアクセスすることのできる２つのモードを提供する。この２つのモードとは、（１）共有モード：複数のリーダ論理プロセッサに対する共有の読み取り専用アクセスを許可し、これにより、これら複数のプロセッサが、共有リソースからコンカレントにデータを読み出すことができるようになるモード、（２）排他的モード：一度の１つの書き込み論理プロセッサへの読み書きアクセスを許可するモードであり、排他的モードでロックが取得されると、他のスレッドは、書き込みを行っている実体がロックを解除するまでは共有リソースにアクセスできなくなる、である。
【表１１３】
0005443599.tif 000175
【表１１４】
0005443599.tif 000176
【表１１５】
0005443599.tif 000177
【表１１６】
0005443599.tif 000178
【表１１７】
0005443599.tif 000179
【０３２９】
＜サブルーチンの説明＞
このサブルーチンは、実際のところ、ｕＣｏｄｅがＰＭＨアドレス−変換機能をｕＣｏｄｅに曝すとき利用されるハードウェアの追加である。ＸＵＴＲＡＮＳＬＡＴＥは、主に、ＰＭＨコンテキストおよびリニアアドレスを入力として、出力として最終物理アドレスを生成するｕＯｐである。ＰＭＨがページテーブル・ウォークの間に不良条件に遭遇すると、これらがｕＣｏｄｅに報告される。ｕＯｐの詳細は、本書類の範囲外である。
【０３３０】
＜サブルーチンの説明＞
このサブルーチンは、識別されたキーを有する導出バッファ（DerivationBuffer）にＣＭＡＣ処理を行うことでキーを生成する際に利用される。導出バッファは、１２８ビットの倍数でなくてはならない。
【表１１９】
0005443599.tif 000180
【表１２０】
0005443599.tif 000181
【図１】
0005443599.tif 000182
【図２】
0005443599.tif 000183
【図３】
0005443599.tif 000184
【図４】
0005443599.tif 000185
【図５】
0005443599.tif 000186
【図６】
0005443599.tif 000187
【図７】
0005443599.tif 000188
【図８】
0005443599.tif 000189
【図９】
0005443599.tif 000190
【図１０】
0005443599.tif 000191
【図１１】
0005443599.tif 000192
【図１２】
0005443599.tif 000193
【図１３】
0005443599.tif 000194
【図１４】
0005443599.tif 000195
【図１５】
0005443599.tif 000196
【図１６】
0005443599.tif 000197
【図１７】
0005443599.tif 000198
【図１８】
0005443599.tif 000199
【図１９】
0005443599.tif 000200
【図２０】
0005443599.tif 000201
【図２１】
0005443599.tif 000202
【図２２】
0005443599.tif 000203
【図２３】
0005443599.tif 000204
【図２４】
0005443599.tif 000205
【図２５】
0005443599.tif 000206
【図２６】
0005443599.tif 000207
【図２７】
0005443599.tif 000208