(57)【特許請求の範囲】
【請求項１】
ユーザモードで実行されるセキュアエンクレーブを用いてデータ暗号化を強化するコンピューティングデバイスであって、
プロセッサと、
メモリと、
前記プロセッサのカーネルモードで少なくとも部分的に実装されるユーザモードインタフェースモジュールと
を備え、
前記ユーザモードインタフェースモジュールは、
前記ユーザモードインタフェースモジュールと、前記プロセッサのユーザモードで少なくとも部分的に実行可能な、セキュアエンクレーブをホストするエンクレーブホストモジュールとにアクセス可能な共有バッファのキューに未処理データを入れ、
前記セキュアエンクレーブに前記未処理データの暗号化操作を行わせて処理済みデータを作り出させるため、バッファデータインジケータを前記エンクレーブホストモジュールに提供する、
コンピューティングデバイス。
【請求項２】
前記カーネルモードで少なくとも部分的に実行可能なストレージマッパーモジュールをさらに備え、前記ユーザモードインタフェースモジュールはさらに、前記未処理データを前記ストレージマッパーモジュールから受信する、
請求項１に記載のコンピューティングデバイス。
【請求項３】
前記ストレージマッパーモジュールは、前記ユーザモードで少なくとも部分的に実行されるアプリケーションからの１つ又は複数の読み出し要求をインターセプトし、前記１つ又は複数の読み出し要求の対象となる未処理データを前記ユーザモードインタフェースモジュールにリダイレクトする、
請求項２に記載のコンピューティングデバイス。
【請求項４】
前記ユーザモードインタフェースモジュールはさらに前記処理済みデータを受信し、
前記ストレージマッパーモジュールはさらに、前記ユーザモードインタフェースモジュールから前記処理済みデータを受信する、
請求項２に記載のコンピューティングデバイス。
【請求項５】
前記ストレージマッパーモジュールはさらに、前記処理済みデータが平文であるか、それとも暗号文であるかを判定する、
請求項４に記載のコンピューティングデバイス。
【請求項６】
前記１つ又は複数の読み出し要求の対象となる前記未処理データは暗号文を含み、前記ユーザモードインタフェースモジュールは、前記暗号文の少なくとも一部を前記共有バッファのキューに入れ、前記暗号化操作は、前記共有バッファのキューに入れられた前記暗号文を解読することを含む、
請求項３に記載のコンピューティングデバイス。
【請求項７】
前記ストレージマッパーモジュールは、前記ユーザモードで少なくとも部分的に実行されるアプリケーションからの１つ又は複数の書き込み要求をインターセプトし、前記１つ又は複数の書き込み要求に関連付けられる未処理データを前記ユーザモードインタフェースモジュールにリダイレクトする、
請求項２に記載のコンピューティングデバイス。
【請求項８】
前記１つ又は複数の書き込み要求に関連付けられる前記未処理データは平文であり、前記ユーザモードインタフェースモジュールは前記平文を前記共有バッファのキューに入れ、前記暗号化操作は前記共有バッファのキューに入れられた前記平文を暗号化することを含む、
請求項７に記載のコンピューティングデバイス。
【請求項９】
前記エンクレーブホストモジュールは、前記エンクレーブホストモジュール及び前記ユーザモードインタフェースモジュールの両方に露出しているプロキシにシステムコールを発行し、
前記ユーザモードインタフェースモジュールは、前記システムコールをインターセプトし、
前記ユーザモードインタフェースモジュールは、前記システムコールを解放することにより、前記バッファデータインジケータを少なくとも部分的に提供する、
請求項１から８のいずれか一項に記載のコンピューティングデバイス。
【請求項１０】
前記プロキシは、カーネルモードのデバイス又はデータ構造を含む、
請求項９に記載のコンピューティングデバイス。
【請求項１１】
前記セキュアエンクレーブは、前記暗号化操作をインプレースで行い、これにより前記処理済みデータは、前記共有バッファ内の対応する前記未処理データの部分と同じ位置に書き込まれる、
請求項１から８のいずれか一項に記載のコンピューティングデバイス。
【請求項１２】
前記エンクレーブホストモジュールはさらに、前記セキュアエンクレーブにより実行される前記暗号化操作の少なくとも一部が完了したことを、前記ユーザモードインタフェースモジュールに示す完了インジケータを提供するよう動作可能である、
請求項１から８のいずれか一項に記載のコンピューティングデバイス。
【請求項１３】
ユーザモードで実行されるエンクレーブを用いて暗号化操作を強化する方法であって、プロセッサのカーネルモードで実行されるユーザモードインタフェースモジュールを用いて、
未処理データを受信する段階と、
前記ユーザモードインタフェースモジュール、及び前記プロセッサのユーザモードで少なくとも部分的に実行されるエンクレーブホストモジュールにアクセス可能な共有バッファのキューに前記未処理データを入れる段階であって、前記エンクレーブホストモジュールはセキュアエンクレーブをホストする、段階と、
バッファデータインジケータを前記エンクレーブホストモジュールに提供する段階であって、前記エンクレーブホストモジュールは、前記セキュアエンクレーブに前記未処理データの暗号化操作を行わせて処理済みデータを作り出させる、段階と
を備える
方法。
【請求項１４】
前記ユーザモードインタフェースモジュールは、前記プロセッサの前記カーネルモードで実行されるストレージマッパーモジュールから前記未処理データを受信し、前記未処理データは、平文、暗号文、又はこれらの組み合わせを含む、
請求項１３に記載の方法。
【請求項１５】
前記ユーザモードインタフェースモジュールを用いて、前記未処理データを前記共有バッファのキューに入れ、実質的に並行して、前記処理済みデータを前記共有バッファから受信する段階をさらに備える、
請求項１３に記載の方法。
【請求項１６】
前記バッファデータインジケータを提供する段階は、前記ユーザモードインタフェースモジュールによって、プロキシを対象とするシステムコールを解放する段階を含む、
請求項１３から１５のいずれか一項に記載の方法。
【請求項１７】
ユーザモードで実行されるエンクレーブを用いて暗号化操作を強化するプログラムであって、
未処理データを受信する動作と、
ユーザモードインタフェースモジュール、及びプロセッサのユーザモードで少なくとも部分的に実行されるエンクレーブホストモジュールにアクセス可能な共有バッファのキューに前記未処理データを入れる動作であって、前記エンクレーブホストモジュールはセキュアエンクレーブをホストする、動作と、
バッファデータインジケータを前記エンクレーブホストモジュールに提供する動作であって、前記エンクレーブホストモジュールは、前記セキュアエンクレーブに、前記未処理データの暗号化操作を行わせて処理済みデータを作り出させる、動作と
を含む動作をコンピュータに実行させる
プログラム。
【請求項１８】
前記ユーザモードインタフェースモジュールは、前記プロセッサのカーネルモードで実行されるストレージマッパーモジュールから前記未処理データを受信し、前記未処理データは、平文、暗号文、又はこれらの組み合わせを含む、
請求項１７に記載のプログラム。
【請求項１９】
前記ユーザモードインタフェースモジュールを用いて、
前記未処理データを前記共有バッファのキューに入れ、実質的に並行して、前記処理済みデータを前記共有バッファから受信する動作を含む動作の実行をさらにもたらす、
請求項１７に記載のプログラム。
【請求項２０】
前記バッファデータインジケータを提供する動作は、前記ユーザモードインタフェースモジュールによって、プロキシを対象とするシステムコールを解放する動作を含む、
請求項１７から１９のいずれか一項に記載のプログラム。
【請求項２１】
ユーザモードで実行されるセキュアエンクレーブを用いてデータ暗号化を強化するコンピューティングデバイスであって、
プロセッサと、
メモリと、
前記プロセッサのカーネルモードで少なくとも部分的に実装されるユーザモードインタフェース手段と
を備え、
前記ユーザモードインタフェース手段は、
前記ユーザモードインタフェース手段と、前記プロセッサのユーザモードで少なくとも部分的に実行可能な、セキュアエンクレーブをホストするエンクレーブホスト手段とにアクセス可能な共有バッファのキューに未処理データを入れ、
前記セキュアエンクレーブに前記未処理データの暗号化操作を行わせて処理済みデータを作り出させるため、バッファデータインジケータを前記エンクレーブホスト手段に提供する、
コンピューティングデバイス。
【請求項２２】
前記カーネルモードで少なくとも部分的に実行可能なストレージマッパー手段をさらに備え、
前記ユーザモードインタフェース手段はさらに、前記未処理データを前記ストレージマッパー手段から受信し、
前記ストレージマッパー手段は、前記ユーザモードで少なくとも部分的に実行されるアプリケーションからの１つ又は複数の読み出し要求をインターセプトし、前記１つ又は複数の読み出し要求の対象となる未処理データを前記ユーザモードインタフェース手段にリダイレクトする、
請求項２１に記載のコンピューティングデバイス。
【請求項２３】
前記ユーザモードインタフェース手段は、暗号文の少なくとも一部を前記共有バッファのキューに入れ、前記暗号化操作は、前記共有バッファのキューに入れられた前記暗号文を解読することを含む、
請求項２１に記載のコンピューティングデバイス。
【請求項２４】
前記エンクレーブホスト手段は、前記エンクレーブホスト手段及び前記ユーザモードインタフェース手段の両方に露出しているプロキシにシステムコールを発行し、
前記ユーザモードインタフェース手段は、前記システムコールをインターセプトし、
前記ユーザモードインタフェース手段は、前記システムコールを解放することにより、前記バッファデータインジケータを少なくとも部分的に提供する、
請求項２１から２３のいずれか一項に記載のコンピューティングデバイス。
【請求項２５】
前記プロキシは、カーネルモードのデバイス又はデータ構造を含む、
請求項２４に記載のコンピューティングデバイス。
【請求項２６】
請求項１７から２０のいずれか一項に記載のプログラムを格納する、
コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は概して、１つ又は複数のセキュアエンクレーブを用いて、データ暗号化を強化するための技術に関する。より詳細には、本開示は、セキュアエンクレーブを用いてカーネルモードプログラムによって通常行われるデータ暗号化操作を強化するための技術に関し、これは、ユーザモード及び／又はプリブート環境で実行することができる。そのような技術を利用するデバイス、システム、及び方法も開示される。
【背景技術】
【０００２】
例えば、情報が、ハードドライブ、ソリッドステートディスクなどのデータストレージに格納される又はそこから読み出される場合、その情報を暗号化する及び解読するために、ディスク暗号化ソフトウェアが用いられることが多い。そのような例では、データ暗号化は、暗号化キーを用いてカーネルモードで動作するアプリケーションによって行われることが多い。暗号化キーを用いるデータ暗号化は、暗号化キー（又は対応する復号化キー）が保護されたままであるという条件で、概して安全である。これに関して、権限のない集団によるアクセスから暗号化キー及び／又は復号化キーを保護するのに、様々な技術が利用可能である。例えば、ユーザが提供するパスフレーズでキーをラップ（ｗｒａｐｐｉｎｇ）する、信頼済みのプラットフォームモジュール及び／又はスマートカードでキーを閉じ込めるなどによって、キーを保護することができる。
【０００３】
既存のキー保護技術は有用であるが、そのような技術は完全にセキュアではない。これは、暗号化操作が平文又は暗号文で行われているので、多くの暗号化技術が平文のキーをメモリ内に露出させていることが原因である。これにより、活動的なハッカー及び／又はマルウェアが平文のキーを取得する機会を与えることになる。
【０００４】
例えば、権限のない第三者が、いわゆる「コールドブート（ｃｏｌｄ−ｂｏｏｔ）」攻撃を実行して、暗号化システムに、平文のキーを含んだその物理メモリのコンテンツをダンプさせることができ、その後、当該第三者は結果として得られるダンプファイルからキーを復元することができる。あるいは、第三者が、いわゆる「悪意のあるメイド（ｅｖｉｌ  ｍａｉｄ）」攻撃を実行して、ユーザパスフレーズが入力された時にそれをインターセプトするキーロガーをインストールすることができ、その後キーロガーは、当該第三者が平文の暗号化キーを復元するのに用いることができる。同様に、クライアントシステムのソフトウェアスタックの下に仮想マシンモニタ（ＶＭＭ）を作成する「ブルーピル（ｂｌｕｅ−ｐｉｌｌ）」攻撃を実行することができる。その実装に応じて、暗号化キーを直接取得する、又は平文の暗号化キーを復元するのに用いられ得るユーザパスフレーズを取得するのに、ＶＭＭは利用されることがある。
【０００５】
上記の観点から、ディスク暗号化を強化するための技術に関心が高まっている。特に、暗号化操作の実行の間に、情報を暗号化及び解読するのに用いられるキーを保護するための技術に関心が高まっている。
【図面の簡単な説明】
【０００６】
特許請求に係る主題の実施形態の特徴及び利点は、以下の詳細な説明が進むにつれ、また図面を参照することで、明らかになるであろう。ここで、同様の数字は同様の部分を示している。
【図１】本開示に係るデータ暗号化操作を強化するセキュアエンクレーブを実装する電子デバイスの例示的な実施形態を示す。
【図２】本開示に係るデータ暗号化操作を強化するセキュアエンクレーブを実装する電子デバイスの例示的な実施形態の一部を示す。
【図３】本開示に係る、セキュアエンクレーブを用いてデータ暗号化操作を強化する方法の１つの例による、ユーザモードインタフェースモジュールに対するカーネルの例示的な動作に関するフローチャートである。
【図４】本開示に係るセキュアエンクレーブを用いてデータ暗号化操作を強化する方法の１つの例による、エンクレーブホストモジュールの例示的な動作に関するフローチャートである。
【図５】本開示に係る、プリブート段階でセキュアエンクレーブを実装する方法の１つの例の例示的な動作に関するフローチャートである。
【発明を実施するための形態】
【０００７】
本開示は、特定の応用に関する例示の実施形態を参照して本明細書で説明されるが、そのような実施形態は単に例示的なものであり、添付された特許請求の範囲により定義される本発明は、それらの実施形態に限定されないことを理解されたい。実際に、例示の目的のために、本明細書で説明される技術は、平文のデータがディスク（例えば、ハードドライブ、ソリッドステートディスクなど）に書き込まれる前に暗号化される、あるいはディスクから読み出された暗号文のデータが解読されるという、１つ又は複数の使用例の文脈で論じられてよい。そのような議論は単に例示の目的のためであり、本明細書で説明される技術の全て又は一部は、他の文脈で用いられてよいことを理解されたい。本明細書で提供される教示を入手できる当業者は、本開示の範囲内の追加の変更、追加の応用、及び追加の実施形態、並びに本開示の実施形態が有用になるであろう追加の分野を認識するであろう。
【０００８】
本明細書で用いられる表記及び専門用語を全般に参照して、続く詳細な説明の部分が、コンピュータ上又はコンピュータのネットワーク上で実行されるプログラム手順に関して提示されてよい。これらの手順上の説明及び表現は、当業者が自分の仕事の内容を他の当業者に最も効果的に伝達するために用いられる。手順は、ここでは、所望の結果をもたらす、自己矛盾のない動作のシーケンスであると、概して考えられる。これらの動作は、物理量の物理的操作を必要とする動作である。通常、これらの量は、必ずしもそうではないが、格納される、転送される、組み合わされる、比較される、及びそうでなければ操作されることが可能な、電気信号、磁気信号、又は光信号の形態を取る。主に一般的に用いる理由で、これらの信号をビット、値、要素、記号、文字、用語、番号などとして言及することが時には都合のよいことが分かる。しかし、これら及び類似の用語の全ては、適切な物理量に関連付けられており、こうした量に適用される単に便利なラベルであることに留意されたい。
【０００９】
さらに、これらの操作は、追加する又は比較するなどの用語で言及されることが多く、一般に、人間のオペレータにより行われる知的動作に関連付けられる。しかし、人間のオペレータのそのような能力は、１つ又は複数の実施形態の一部を形成する、本明細書で説明される動作のいずれにおいても、大部分の場合、必要ではなく、望ましいものでもない。むしろ、これらの動作は機械の操作である。様々な実施形態の動作を行うのに有用な機械には、中に格納され、本明細書の教示に従って書き込まれているコンピュータプログラムによって、選択的に起動する又は構成される汎用デジタルコンピュータが含まれ、及び／又は必要な目的のために特別に構築された装置が含まれる。様々な実施形態はまた、これらの動作を行うための装置又はシステムに関する。これらの装置は、必要な目的のために特別に構築されてよく、又は汎用コンピュータを含んでもよい。様々なこれらの機械に必要な構造は、与えられる説明から明らかになるであろう。
【００１０】
本開示の文脈において、「コンピューティングデバイス」及び「電子デバイス」という用語は、少なくとも部分的にセキュアエンクレーブを用いて暗号化操作を行うのに利用されてよい様々なデバイスを指すために区別なく用いられている。好適なコンピューティングデバイスの非限定的な例には、カメラ、携帯電話、コンピュータ端末、デスクトップコンピュータ、電子リーダ、ファクシミリ機器、キオスク（ｋｉｏｓｋ）、ネットブックコンピュータ、ノートブックコンピュータ、インターネットデバイス、決済端末、携帯情報端末、メディアプレーヤ及び／又はレコーダ、サーバ、セットトップボックス、スマートフォン、タブレットパーソナルコンピュータ、テレビ、ウルトラモバイルパーソナルコンピュータ、有線電話、これらの組み合わせなどが含まれる。そのようなデバイスは、携帯型でも固定型でもよい。限定されるものではないが、本明細書で説明されるクライアントは、携帯電話、デスクトップコンピュータ、電子リーダ、ラップトップコンピュータ、セットトップボックス、スマートフォン、タブレットパーソナルコンピュータ、テレビ、又はウルトラモバイルパーソナルコンピュータの形態であることが好ましい。
【００１１】
本明細書で用いられるとき、「ディスク」、「ストレージ」、及び「ストレージデバイス」という用語は、不揮発性のデータストレージを提供するのに用いられ得る１つ又は複数の不揮発性メモリデバイスを指すのに、本明細書では区別なく用いられる。本明細書で用いられ得るストレージデバイスの非限定的な例には、磁気ストレージデバイス（例えば、磁気ハードドライブ、光磁気ドライブ、熱アシスト磁気記録デバイス、磁気ディスクなど）、ソリッドステートストレージデバイス（例えば、不揮発性ソリッドステートＮＯＴ  ＡＮＤ（ＮＡＮＤ）又はＮＯＴ  ＯＲ（ＮＯＲ）メモリを利用するストレージデバイス）、不揮発性メモリを含んだメモリスティック及び／又はメモリカード、これらの組み合わせなどが含まれる。
【００１２】
「暗号化操作」という表現は概して、必要に応じて、平文の暗号文への暗号化、暗号文の平文への復号化、又はこれらの何らかの組み合わせを指すために本明細書で用いられている。したがって、「暗号化操作」という用語は、この表現が用いられる文脈に基づいて適切な解釈が与えられる状態で、データの暗号化及び復号化の両方を包含するものと理解されたい。
【００１３】
本明細書の任意の実施形態に用いられるとき、「モジュール」という用語は、本開示に係る１つ又は複数の動作を行うよう構成されるソフトウェア、ファームウェア、及び／又は回路を指すことができる。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記録されたソフトウェアパッケージ、コード、命令、命令セット、及び／又はデータとして具現化されてよい。ファームウェアは、メモリデバイスにハードコードされた（例えば不揮発性の）コード、命令、又は命令セット、及び／又はデータとして具現化されてよい。「回路」は、本明細書の任意の実施形態に用いられるとき、例えば、物理的に組み込まれた回路、１つ又は複数の別個の命令処理コアを含むコンピュータプロセッサなどのプログラマブル回路、ステートマシン回路、プログラマブル回路により実行される命令を格納するソフトウェア及び／又はファームウェアを単独で含んでよく、又はこれらの任意の組み合わせを含んでもよい。モジュールは、１つ又は複数のクライアントデバイスの一部を形成する回路として（例えば、少なくとも部分的にハードウェアで実装されたロジックとして）、集合的に又は個別に具現化されてよい。
【００１４】
後に詳細に説明されるように、本開示の技術は、コンピューティングデバイスにより行われるデータ暗号化操作を強化するために、１つ又は複数のセキュアエンクレーブ（本明細書では、「メモリエンクレーブ」又は単に「エンクレーブ」とも呼ばれる）を利用する。一般に、セキュアエンクレーブは、コンピューティングデバイスの従来のリング境界によって課されるアクセスポリシと異なるアクセスポリシを有する少なくとも１つのメモリページで構成されている。セキュアエンクレーブ内のメモリページは、読み出し／書き込み制御が、特定の動作モード又は特権「リング」、システム管理モード、又は関連プロセッサの仮想マシンモニタに関して排他性を有するように構成され得る関連の読み出し／書き込み制御を有することができる。したがって、セキュアエンクレーブは、保護された場所をホストに提供し、信頼されたコード、データなどを実行するよう設計されてよく、これにより、セキュアエンクレーブは、オペレーティングシステム、仮想マシンモニタ、これらの組み合わせなどのアプリケーションソフトウェア及び特権ソフトウェアを含んだ、クライアント上の他のソフトウェアから保護され得る。限定されるものではないが、好適なセキュアエンクレーブには、Ｉｎｔｅｌ（登録商標）のセキュアエンクレーブ技術を用いて提供され得るものが含まれ、これらはＩｎｔｅｌ（登録商標）セキュアガード命令（ＳｇＸ）を用いて、又は別の方式で実装されてよい。もちろん、他の好適なメモリエンクレーブ技術が用いられてよい。
【００１５】
例えば、いくつかの実施形態において、本明細書で説明される技術は、暗号化操作を行うのに用いられ得る１つ又は複数のキーの保管にセキュアな場所を提供するために、セキュアエンクレーブを利用する。代替的に又は追加的に、いくつかの実施形態において、暗号化操作は、セキュアエンクレーブ内で行われてよく、これにより、そこに格納されたキーは決してメモリ内で露出することはない。理解され得るように、これにより、権限のない第三者が、暗号化操作を行うのに用いられるキーをコンピューティングデバイスの物理メモリから取得するのを制限する、又は阻止することさえできる。
【００１６】
いくつかの実施形態において、セキュアエンクレーブは、そこに格納されたキーを、エンクレーブ自体の計測値に基づいてラップすることにより保護するために用いられてよい。そのような実施形態において、キーが暗号化操作を行うのに用いられ得る前に、キーを（エンクレーブの計測値を用いて）アンラップ（ｕｎｗｒａｐ）することが必要となることがある。理解され得るように、キーがラップされた後に、エンクレーブの計測値が（例えば、改ざんに起因して）任意の態様に変わった場合、キーのアンラップは可能でなくてよい。これにより、エンクレーブ自体を改ざんする、又はそうでなければ標的にする攻撃を介して、第三者が平文のキーにアクセスするのを効果的に阻止することができる。
【００１７】
セキュアエンクレーブの特徴及び特別に暗号化されたメモリ位置の使用に起因して、セキュアエンクレーブとのやり取りは、ユーザモードで実行されるアプリケーションに限定され得ることに留意されたい。このことを考慮して、多くのデータ暗号化スイートが、カーネルモードで実行される暗号化アプリケーションを利用する。このことは、暗号化アプリケーションが全ディスク暗号化又は部分的なディスク暗号化の動作を行うことを担う例では特に当てはまり、ディスクの全て又は指定された部分に書き込まれるデータは、ディスクにコミットされる（書き込まれる）前に暗号化されることになる。したがって、多くの既存の暗号化スイートは、エンクレーブ（これは、ユーザモードで動作することができる）と、暗号化アプリケーション（これは、カーネルモードで動作することができる）との間のやり取りを限定する又は阻止し得る制約に起因して、セキュアエンクレーブを活用することができない。以下に説明されるように、本開示の１つの態様は、この問題に取り組むことを目指すデバイス及び方法に関する。
【００１８】
全ディスク暗号化又は部分的なディスク暗号化などのいくつかの使用例において、コンピューティングデバイスを起動するのに必要なデータの全て又は一部が、暗号文としてディスクに格納されてよい。そのような例において、１つ又は複数のアプリケーション（例えば、ＢＩＯＳレベルの暗号化アプリケーション）は、クライアントデバイスをディスクから起動するのに必要なアプリケーション／データを解読するために、プリブート段階で暗号化／復号化キーを利用することができ、その後に通常はデバイスが起動され得る。この方法は効果的であるが、権限のない第三者による攻撃を受けやすい場合があるシステムメモリにおいて、平文のキーを露出させることがある。このことを考慮して、本開示の別の態様は、例えば、全ディスク暗号化又は部分的なディスク暗号化の文脈において、コンピューティングデバイスの起動前又は起動中に行われ得る暗号化操作の強化を、セキュアエンクレーブを用いることで可能とする技術に関する。理解されるように、そのような技術は、プリブート段階において、すなわち、ユーザモードアプリケーションが通常実行される前に、（通常はユーザモード環境で実行される）エンクレーブの使用を可能にすることができる。
【００１９】
次に図面を参照する。ここでは、全体に渡って、同様の参照数字が同様の要素を指すのに用いられている。理解を明確且つ容易にする目的で、以下の説明は、特定の使用例において暗号化操作を強化するセキュアエンクレーブの使用に重点を置くことに留意されたい。これらの使用例に関して多数の詳細が提供されてよいが、本明細書で説明される技術は、本明細書で説明される特定の使用例に関して提供される詳細のいくつか又は全てを用いずに、他の文脈において潜在的に実施され得ることを理解されたい。明確さを目的として、よく知られた構造及びデバイスがブロック図の形態で示されていることにも留意されたい。添付された特許請求の範囲内の全ての変更形態、均等形態、及び代替形態が包含されることが意図されている。
【００２０】
上記のことを考慮して、図１は、本開示に係る暗号化操作を強化するセキュアエンクレーブを実装するよう構成されたコンピューティングデバイスの１つの例示的な実施形態に関するシステムアーキテクチャのコンポーネントを示す。示されるように、コンピューティングデバイス１００は、プロセッサ１１０、入出力インタフェース（Ｉ／Ｏ）１２０、及びストレージ１３０を含む。そのようなコンポーネントは、バス又は他の好適な通信媒体（不図示）を介するなどして、任意の好適な態様で互いに通信可能に結合されてよい。現代のコンピューティングデバイスに一般に見出され得る物理（例えば、ランダムアクセス）メモリ、ディスプレイなどの様々なコンポーネントは、明確さを目的として図１から省略されている。
【００２１】
コンピューティングデバイス１００は、セキュアエンクレーブを用いて少なくとも部分的に暗号化操作を行うのに好適な、任意のタイプのコンピューティングデバイスであってもよい。そのようなデバイスの例は上記に列挙されているので、繰り返して説明されない。コンピューティングデバイス１００は概して、そのフォームファクタに関係なく、ユーザモードで動作するセキュアエンクレーブを用いることで、そうでなければカーネルモードで実行される１つ又は複数のアプリケーションによって行われるであろう暗号化操作を行うことができるよう構成される。図１は、この態様で構成される単一のコンピューティングデバイス１００を示すが、本明細書で説明される様々な操作及びコンポーネントは、複数のコンピューティングデバイスの中に組み込まれてよく、及び／又はそこに実装されてよいことを理解されたい。
【００２２】
プロセッサ１１０は、任意の好適な汎用プロセッサ又は特定用途向け集積回路であってよく、１つ又は複数のスレッドを１つ又は複数のプロセッサコア上で実行することが可能であってよい。限定されるものではないが、いくつかの実施形態において、プロセッサ１１０は汎用プロセッサであってよく、例えば、限定されないが、Ｉｎｔｅｌ（登録商標）Ｃｏｒｐ．、Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ（登録商標）、ＡＲＭ（登録商標）、ＮＶＩＤＩＡ（登録商標）、Ａｐｐｌｅ（登録商標）、及びＳＡＭＳＵＮＧ（登録商標）から商業的に入手可能な汎用プロセッサなどであってよい。図１は、単一のプロセッサを含むコンピューティングデバイス１００を示すが、１つ又は複数の処理コアを含む複数のプロセッサが用いられてもよい。限定されるものではないが、いくつかの実施形態におけるプロセッサ１１０は、過去に製造された、現在製造されている、又は今後製造される、単一又はマルチコアのＩｎｔｅｌ（登録商標）プロセッサである。
【００２３】
プロセッサ１１０は、そのタイプに関係なく、「カーネルモード」及び「ユーザモード」と呼ばれる異なる動作モードを提供するよう構成されてよい。プロセッサ１１０は、実行している又は実行するアプリケーションの特権レベルに基づいて、カーネルモードとユーザモードを切り換えることができる。一般に、インタフェース機能を初期化してコンピューティングデバイスのコンポーネント（例えば、ドライバ、オペレーティングシステム（ＯＳ）コンポーネント、プリブートアプリケーションなど）に提供するのに用いられ得るアプリケーションは、カーネルレベルの特権を有し、したがって、カーネルモードで動作する。すなわち、プロセッサ１１０は、これらのタイプのアプリケーションを実行する場合、カーネルモードで動作するよう構成される。これに対して、大部分の他のアプリケーションはユーザレベルの特権を有し、したがって、プロセッサ１１０は、そのようなアプリケーションを実行する場合、ユーザモードで動作するよう構成される。
【００２４】
図１にさらに示されるように、プロセッサ１１０は、１つ又は複数のモデル固有レジスタ（ＭＳＲ１１２）と、セキュアエンクレーブページキャッシュ（ＥＰＣ）１１４とを含むことができる。プロセッサ１１０は制御ルーチン１３１を実行するので、１つ又は複数のＭＳＲ１１２がユーザモード動作とカーネルモード動作を切り換えることを可能にするように設定することができる。例えば、１つ又は複数のＭＳＲ１１２は、ＳＹＳＣＡＬＬ／ＳＹＳＲＥＴ命令を可能にするよう設定されてよく、これにより、ユーザモードとカーネルモードの間でプロセッサ１１０を切り換えることができる。
【００２５】
図１は、ＥＰＣ１１４をプロセッサ１１０に含まれているものとして図示しているが、ＥＰＣ１１４は、限定されないが、ストレージ１３０、プラットフォームローカルメモリ（例えば、ＤＲＡＭなど）、基本入出力システム（ＢＩＯＳ）によりアクセス可能なメモリなど、コンピューティングデバイス１００の別のコンポーネントに存在してよいことに留意されたい。いくつかの実施形態において、ＥＰＣ１１４は、コンピューティングデバイス１００のプラットフォームローカルメモリの、暗号で保護された領域に格納される。他の実施形態において、ＥＰＣ１１４は、ストレージ１３０の、暗号で保護された領域に格納される。なおもさらなる実施形態において、ＥＰＣ１１４は、ＢＩＯＳがアクセス可能なメモリの、暗号で保護された領域に格納される。
【００２６】
Ｉ／Ｏ１２０は、コンピューティングデバイス１００がそのそれぞれのコンポーネントの間で、及びオプションとして１つ又は複数の外部デバイスに対して、データを送信及び受信することを可能にするよう構成されるハードウェア（すなわち、回路）、ソフトウェア、又はハードウェアとソフトウェアの組み合わせを含むことができる。そのような通信は、近距離通信ネットワーク及び／又は長距離通信ネットワークを用い、有線接続又は無線接続を介して行われてよい。したがって、Ｉ／Ｏ１２０は、そのような通信をサポートするハードウェア、例えば、１つ又は複数のトランスポンダ、アンテナ、Ｂｌｕｅｔｏｏｔｈ（登録商標）チップ、パーソナルエリアネットワークチップ、近距離無線通信チップ、ネットワークインタフェースカード、これらの組み合わせなどを含むことができる。
【００２７】
ストレージ１３０は、上述したものなど、任意の好適なストレージデバイス又はストレージデバイスの組み合わせであってよい。限定されるものではないが、いくつかの実施形態において、ストレージ１３０は、１つ又は複数の磁気ハードドライブ、ソリッドステートドライブ（ＳＳＤ）、スマートカード、ユニバーサルシリアルバス（ＵＳＢ）ドライブ、メモリスティック、これらの組み合わせなどの形態であってよく、又はこれらであってよい。示されるように、ストレージ１３０は、制御ルーチン１３１、暗号文１３２（例えば、全ディスク暗号化又は部分的なディスク暗号化の使用例の場合）、ストレージマッパーモジュール１５１、ユーザモードインタフェースモジュール（ＵＭＩＭ）１５２、バッファ１５４、エンクレーブホストモジュール１６０、及びセキュアエンクレーブ１６２のうちの１つ又は複数を格納することができる。バッファ１５４、エンクレーブホストモジュール１６０、及びセキュアエンクレーブ１６２は、ストレージ１３０に格納されているものとして図示されているが、そのような実装は必須ではないことを理解されたい。実際に、そのようなコンポーネントは、限定されないが、プロセッサ１１０内のメモリ（例えば、プロセッサキャッシュメモリ）、システム物理メモリ（例えば、ＤＲＡＭ）、これらの組み合わせなど、任意の好適なメモリ及びメモリ位置に実装されてよい。
【００２８】
制御ルーチン１３１は、様々な機能を実行するロジックを実装するプロセッサ１１０上で動作する一連の命令を含む。例えば、制御ルーチン１３１を実行する際に、プロセッサ１１０は、ストレージマッパーモジュール１５１及びＵＭＩＭ１５２などのカーネルモードコンポーネントにカーネルモードサポートを提供することができる。さらに、プロセッサ１１０が制御ルーチン１３１を実行すると、エンクレーブホストモジュール１６０、エンクレーブ１６２、及び他のユーザモードアプリケーション（図１には示されていない）などのユーザモードコンポーネントにユーザモードサポートを提供することができる。後に詳細に説明されるように、ＵＭＩＭ１５２は、エンクレーブ１６２による暗号化操作の実行に利用できるように、（例えば、ストレージ１３０からの）暗号文１３２、及び／又は（例えば、１つ又は複数のユーザモードアプリケーションからの）平文などのデータをバッファ１５４に向けるパイプ役として機能することができる。さらに、いくつかの実施形態において、ＵＭＩＭ１５２は、ＵＭＩＭ１５２（カーネルモードアプリケーション）とエンクレーブホストモジュール１６０（ユーザモードアプリケーション）との間の通信を可能にするのに活用され得るプロキシ（図１には示されていない）を、コンピューティングデバイス１００（又はより具体的にはプロセッサ１１０）に確立させるよう構成されてよい。
【００２９】
様々な実施形態において、制御ルーチン１３１は、オペレーティングシステム（ＯＳ）、デバイスドライバ、及び／又はアプリケーションレベルのルーチン（例えば、ディスク媒体で提供されるいわゆる「ソフトウェアスイート」、リモートサーバから取得される「アプレット」など）のうちの１つ又は複数を含むことができる。オペレーティングシステムが含まれる場合、オペレーティングシステムは、コンピューティングデバイス１００及び／又はプロセッサ１１０に適切である様々な利用可能なオペレーティングシステムのうちのいずれかであってよく、その中には、限定されないが、Ｍｉｃｒｏｓｏｆｔ（登録商標）のＷｉｎｄｏｗｓ（登録商標）オペレーティングシステム、Ｍａｃ（登録商標）ＯＳ（登録商標）、Ｌｉｎｕｘ（登録商標）オペレーティングシステム、Ａｎｄｒｏｉｄ（登録商標）オペレーティングシステム、Ｕｎｉｘ（登録商標）オペレーティングシステム、あるいはモバイルデバイス又は他の電子デバイス用のその他のオペレーティングシステムなどが含まれる。
１つ又は複数のデバイスドライバが含まれる場合、これらのデバイスドライバは、様々な他のコンポーネントのうちのいずれかに、それがコンピューティングデバイス１００のハードウェアコンポーネントであってもソフトウェアコンポーネントであっても、サポートを提供することができる。
【００３０】
いくつかの実施形態において、制御ルーチン１３１（又は、その何らかのコンポーネント）は、セキュアエンクレーブ１６２を作成するよう動作することができる。例えば、制御ルーチン１３１は、セキュアエンクレーブ１６２を作成するカーネルモードドライバを含むことができる。カーネルモードドライバは、少なくとも１つのメモリページをＥＰＣ１１４に割り当てる、またエンクレーブイメージを割り当てられたメモリページの位置に拡張するなどによって、任意の好適な態様でセキュアエンクレーブ１６２を作成することができる。必要に応じて、エンクレーブは次に、例えば、エンクレーブ１６２に割り当てられたＥＰＣ１１４内のメモリページをエンクレーブホストモジュール１６０にマッピングするマッピング操作を行うことで、エンクレーブホストモジュール１６０に移されてよい。
【００３１】
もちろん、後にさらに詳細に説明されるように、エンクレーブ１６２は、制御ルーチン１３１により作成される必要はない。実際に、本開示のいくつかの実施形態において、エンクレーブ１６２は、コンピューティングデバイス１００のプリブート段階において、例えば、コンピューティングシステム１００を起動するのに必要とされ得る制御ルーチン１３１のコンポーネントの実行前に、作成及び／又はインスタンス化されてよい。例えば、エンクレーブは、例えば、制御ルーチン１３１の様々なコンポーネントを読み込む前に、ＢＩＯＳブートローダ又は他のＢＩＯＳアプリケーションによって確立されてよい。この態様でエンクレーブ１６２を作成することは、制御ルーチン１３１の全て又は一部がエンクレーブによって暗号化された場合、例えば、コンピューティングデバイス１００がシャットダウンした場合、特に有用であり得る。
【００３２】
セキュアエンクレーブにより処理されるデータをＵＭＩＭ１５２に送信するよう概して構成されるストレージマッパーモジュール１５１は、ハードウェア、ソフトウェア、又はハードウェアとソフトウェアの組み合わせの形態であってよい。例えば、後に詳細に説明されるように、全ディスク暗号化又は部分的なディスク暗号化の状況において、ストレージマッパーモジュール１５１は、（例えば、図１には示されていないユーザモードアプリケーションからの）平文データ、及び／又は（例えば、これも示されていないディスク又は他のメモリからの）暗号文データをＵＭＩＭ１５２に送信するよう構成されてよい。
【００３３】
例示のために、ストレージマッパーモジュール１５１は、説明したばかりの態様でデータを送信するよう動作する独立したコンポーネントとして、本明細書に説明されている。しかし、ストレージマッパーモジュール１５１は、この態様で実装される必要はないことを理解されたい。例えば、ストレージマッパーモジュールは、ストレージ１３０のストレージスタック（不図示）とともに実装されてよく、又はその一部として実装されてもよい。ストレージスタックの特徴及び特性は、制御ルーチン１３１の特徴に応じて、より具体的にはコンピューティングデバイス１００上で実行されているオペレーティングシステムのタイプに応じて、異なってよいことが理解されよう。例えば、Ｌｉｎｕｘ（登録商標）オペレーティングシステムの環境において、ストレージマッパーモジュールは、ＤｅｖｉｃｅＭａｐｐｅｒフレームワークの文脈で実装されてよく、これは、物理ブロックデバイスをより高いレベルの仮想ブロックデバイスにマッピングするＬｉｎｕｘ（登録商標）メカニズムであり、「ｄｍ−ｃｒｙｐｔ」として知られるＬｉｎｕｘ（登録商標）カーネルモードディスク暗号化サブシステムに関連して用いられる。もちろん、他の実装が可能であり、そのような実装は当業者によって容易に理解されるであろう。特定の実装に関係なく、ストレージマッパーモジュール１５１は、前述したように、データ（平文、暗号文、又は他の文）をＵＭＩＭ１５２に送信するよう概して構成されることを理解されたい。
【００３４】
バッファ１５４は、バッファ１５４がプロセッサ１１０上で実行され得るカーネルモードアプリケーション及びユーザモードアプリケーションによりアクセス可能であってよいように、構成されてよい。したがって、バッファ１５４は、カーネルモードアプリケーション及びユーザモードアプリケーションにより、書き込まれ読み出され得る「共有」バッファとして理解されてよい。例えば、いくつかの実施形態では、ＵＭＩＭはデータ（例えば、暗号文又は平文）をバッファ１５４に書き込む、又は書き込ませることができ、その後、当該データは、エンクレーブホストモジュール１６０（又は、より具体的にはエンクレーブ１６２）によりバッファ１５４から読み出されてよい。エンクレーブ１６２は、必要に応じてデータに暗号化操作を行い、その後バッファ１５４に書き込まれ得る「処理済み」データを生成することができる。ＵＭＩＭは次に、図２に関してさらに詳細に説明されるように、処理済みデータをバッファ１５４から取得し、そのデータをコンピューティングデバイス１００の他のコンポーネント、例えば、ストレージマッパーモジュール１５１に向けることができる。
【００３５】
バッファ１５４は、任意の好適なタイプの共有バッファであってよい。限定されるものではないが、いくつかの実施形態において、バッファ１５４は、リング（円形の）バッファの形態である。理解されるように、リングバッファは、端と端が接続されたかのような単一の固定サイズのバッファを用いるデータ構造であってよく、これにより、バッファは先入れ先出し（ＦＩＦＯ）の特徴を有する。そのような例において、ＵＭＩＭ１５２は、エンクレーブ１６２で処理するために、データをバッファ１５４に書き込むことができ、これにより、前述したようにデータに暗号化操作を行うことができる。
【００３６】
いくつかの実施形態においてエンクレーブ１６２は、バッファ１５４内のデータに暗号化操作を「インプレース（ｉｎ  ｐｌａｃｅ）」で行うことができ、すなわちこれにより、結果として得られる処理済みデータ（必要に応じて、暗号文又は平文）は、（未処理の）データと同じバッファ１５４内の位置に保持される。ＵＭＩＭ１５２は次に、前述したように、例えばＦＩＦＯ方式で、処理済みデータをバッファ１５４から読み出すことができる。このプロセスは、例えば、プロセッサ１１０の異なるスレッド上で、ＵＭＩＭ１５２及びエンクレーブホストモジュール１６０を実行することで、促進されてよい。例えば、ＵＭＩＭ１５２が処理済みデータをバッファ１５４から読み出す場合、ＵＭＩＭ１５２は（必要に応じて）当該データを追加の（未処理の）データと交換することができる。追加のデータは次に、上述したように、エンクレーブホストモジュール１６０により読み出され、エンクレーブ１６２により処理されてよい。言い換えると、エンクレーブホストモジュール１６０が未処理データをバッファ１５４から抜き取り、暗号化操作の実行のために当該未処理データをエンクレーブ１６２に提供する場合、ＵＭＩＭ１５２はバッファ１５４を未処理データで満たすよう動作することができる。同様に、ＵＭＩＭ１５２が処理済みデータをバッファ１５４から読み出し、そのデータをストレージマッパーモジュール１５１に提供する場合、エンクレーブホストモジュール１６０はバッファ１５４を処理済みデータで満たすことができる。これにより、エンクレーブ１６２の単一の起動（例えば、エンクレーブ１６２に制御を渡す単一のＥＥＮＴＥＲ命令の実行）で、エンクレーブ１６２が停止する前に（例えば、ＥＥＸＩＴ命令の実行前に）、大量のデータ及び／又は複数の少量バッチのデータに暗号化操作を行うことを可能にすることができる。これにより、特にワークロードが高い場合に、潜在的には、繰り返しエントリに関連付けられたオーバーヘッドを低減し、エンクレーブ１６２から抜け出すことができる。
【００３７】
前述したように、エンクレーブ１６２は、エンクレーブホストモジュール１６０によってホストされてよい。一般に、エンクレーブホストモジュール１６０は、ハードウェア、ソフトウェア、又は、エンクレーブ１６２の動作を管理するよう構成される、ハードウェアとソフトウェアの組み合わせを含むことができる。例えば、いくつかの実施形態において、エンクレーブホストモジュール１６０は、ディスク、又は制御ルーチン１３１の環境内で実行され得る他のサービスとして構成されてよい。いくつかの実施形態において、エンクレーブホストモジュール１６０は、エンクレーブ１６２を動作させる１つ又は複数のカーネルモードアプリケーション（例えば、ＵＭＩＭ１５２）からインジケーションを受信することができるユーザモードアプリケーション及び／又はサービスであってよい。例えば、いくつかの実施形態において、エンクレーブホストモジュール１６０は、データがバッファ１５４に存在することを示すバッファデータインジケーションを、ＵＭＩＭ１５２から受信することができる。バッファデータインジケーションに応答して、エンクレーブホストモジュール１６０は、例えば、制御をエンクレーブ１６２に渡すＥＥＮＴＥＲ命令を実行する又はその命令の実行をもたらすことで、エンクレーブ１６２を動作させることができる。エンクレーブ１６２は次に、概ね前述したように、バッファ１５４内のデータに暗号化操作を実行することができる。もちろん、エンクレーブ１６２の動作を制御するための他のメカニズムが可能であり、それらは本開示により想定される。
【００３８】
バッファデータインジケーションは、任意の好適な態様で提供されてよい。いくつかの実施形態において、ＵＭＩＭ１５２は、バッファデータインジケーションをエンクレーブホストモジュール１６０に提供するよう構成されてよい。ＵＭＩＭ１５２及びエンクレーブホストモジュール１６０が直接互いに通信することができる例において、例えば、ＵＭＩＭ１５２は、バッファデータインジケーションを含んだメッセージをエンクレーブホストモジュール１６０に発行することができる。しかし、多くの状況において、ＵＭＩＭ１５２（カーネルモードコンポーネント）がエンクレーブホストモジュール１６０（ユーザモードコンポーネント）と直接通信することは可能ではないことがある。そのような例において、ＵＭＩＭ１５２及びエンクレーブホストモジュール１６０は、プロキシを介して互いに通信するよう構成されてよい。
【００３９】
例えば、エンクレーブホストモジュール１６０は、カーネルモードプロキシに向けられたコール（例えば、読み出しコマンド）を発行するよう構成されてよい。カーネルモードプロキシは、ＵＭＩＭ１５２又はコンピューティングデバイス１００の何らかの他のコンポーネント、例えばストレージマッパーモジュール１５１などによって確立されてよい。カーネルモードプロキシは、ユーザモードアプリケーションに露出し得るファイル又は他のデータ構造であってよく、又はそれを含んでよい。例えば、制御ルーチン１３１がＬｉｎｕｘ（登録商標）オペレーティングシステムである例において、プロキシは、その他のデバイスとして設定されてよく、これは、エンクレーブホストモジュール１６０によりアクセス可能であってよいファイル又は他のデータ構造を作成することになり得る。そのような例において、エンクレーブホストモジュール１６０は、上述したように、プロキシ（又は、より具体的には、プロキシに関連付けられたファイル又は他のデータ構造）に向けられたシステムコール（例えば、読み出しコマンド）を発行するよう構成されてよい。
【００４０】
このことを考慮して、いくつかの実施形態のＵＭＩＭ１５２は、エンクレーブホストモジュール１６０により発行されたシステムコールをインターセプトし、データがバッファ１５４に存在するまで当該コールを保持するよう構成されてよい。データがバッファ１５４に存在する場合、ＵＭＩＭ１５２はシステムコールを解放することができる。システムコールの解放は、データがバッファ１５４に存在することを示すバッファデータインジケーションとして、エンクレーブホストモジュール１６０に理解されてよい。エンクレーブホストモジュール１６０は次に、（例えば、ＥＥＮＴＥＲ命令を実行させることにより）エンクレーブ１６２を起動することができる。エンクレーブ１６２は次に、前述したように、バッファ１５４内のデータに暗号化操作を実行することができる。暗号化操作の実行は、バッファ１５４内に残っている（未処理）データがなくなるまで続けることができる。その時に、エンクレーブホストモジュール１６０は、プロキシ（又は、より具体的には、プロキシに関連付けられたファイル又は他のデータ構造）を対象とする別のシステムコール（例えば、読み出しコマンド）を発行することができる。前のシステムコールのように、エンクレーブホストモジュール１６２により発行される追加のシステムコールは、ＵＭＩＭ１５２によりインターセプトされ、データがバッファ１５４に存在するまで保持されてよい。アプリケーションに応じて、システムコールが発行されるとすぐにエンクレーブ１６２は無効になってよく（例えば、ＥＥＸＩＴ命令の実行により、制御を解放してよい）、閾値期間の終了後、又はいくつかの他の基準が満たされたことに応答して、エンクレーブ１６２は有効になる。
【００４１】
本開示の技術をさらに説明するために、次に図２を参照する。この図は、セキュアエンクレーブによる暗号化操作の実行に関連したコンピューティングデバイス１００の様々なコンポーネントのやり取りを例示するブロック図である。具体的には、図２は、コンピューティングデバイス１００の様々なコンポーネントのうちのどれが、ユーザモード及びカーネルモードで動作することができるか、またそのようなコンポーネント間のそれぞれのやり取りを図示する。例示のために、図２のコンポーネントにより行われ得る動作は、コンピューティングシステム１００（又は、より具体的には制御ルーチン１３１）が全ディスク暗号化を実装するよう構成される使用例で説明される。そのような使用例では、ディスク又は他のメモリ（例えば、メモリ２００）に格納されている、又は格納されることになるデータは暗号化される（すなわち、暗号文の形態になる）ことを理解されたい。同様に、メモリ２００から読み出される暗号化データ（暗号文）は、コンピューティングデバイス１００上で実行されるアプリケーション、例えばユーザモードアプリケーションが利用できるように解読される。
【００４２】
上記のことを考慮して、図２は、図１に関連して前述された同じコンポーネントのうちの多く、すなわち、ストレージマッパーモジュール１５１、ＵＭＩＭ１５２、バッファ１５４、エンクレーブホストモジュール１６０、及びエンクレーブ１６２を含むようなコンピューティングデバイス１００を図示している。したがって、そのようなコンポーネントの特徴は、再度説明しない。さらに、図２は、メモリ２００、ユーザモードアプリケーション２０１、及びプロキシ２０２を含むようなコンピューティングデバイス１００を図示する。
【００４３】
いくつかの実施形態において、メモリ２００は不揮発性メモリであり、これはストレージ１３０内にあっても、そこから遠く離れていてもよい。限定されるものではないが、いくつかの実施形態において、メモリ２００はストレージ１３０内にある。その位置に関係なく、メモリ２００はデータを（平文、又は暗号文の形態で）格納するよう動作可能であってよい。コンピューティングデバイス１００が全ディスク暗号化を実装する使用例で上述したように、メモリ２００に格納されるデータは、暗号文の形態であることを理解されたい。
【００４４】
動作の過程で、ユーザモードアプリケーション２０１は、メモリ２００に格納されている暗号文を対象とした読み出し要求を、コンピューティングデバイス（又は、その何らかのコンポーネント）に発行させることができる。例えば、いくつかの実施形態において、ユーザモードアプリケーション２０１は、読み出し要求をストレージマッパーモジュール１５１に発行することができ、ストレージマッパーモジュール１５１は、コンピューティングデバイス１００上で実行される制御ルーチンのストレージスタックとやり取りすることができ、又はそこには不可欠であり得る。いずれの場合も、ストレージマッパーモジュール１５１は、読み出しコマンドをメモリ２００に発行することができ、又はその発行をもたらすことができる。読み出しコマンドは、メモリ２００の該当する部分に格納された暗号文（データ）を読み出させて、ストレージマッパーモジュール１５１に提供させるよう構成されてよい。概ね前述したように、メモリ２００からの暗号文の受信に応答して、ストレージマッパーモジュール１５１は、暗号文をＵＭＩＭ１５２に伝えるよう構成されてよい。
【００４５】
代替的に又は追加的に、動作の過程で、ユーザモードアプリケーション２０１は、コンピューティングデバイス又はその何らかのコンポーネントに、データ（例えば、平文）をメモリ２００に書き込む書き込み要求を発行させることができる。例えば、いくつかの実施形態において、ユーザモードアプリケーション２０１は、書き込み要求をストレージマッパーモジュール１５１に発行することができる。全ディスク暗号化の使用例に関する文脈において、平文のデータがメモリ２００に書き込まれる前に、それを暗号化することが必要になり得る。そのような例（又は、データの暗号化が望まれる他の使用例）において、ストレージマッパーモジュール１５１は、概ね前述したのと同じ態様で、書き込み要求に関連付けられたデータ（平文）をＵＭＩＭ１５２に転送するよう構成されてよい。
【００４６】
ストレージマッパーモジュール１５１から（暗号文又は平文の形態で）データを受信したことに応答して、ＵＭＩＭ１５２は、データの全て又は一部をバッファ１５４のキューに入れることができる。上述したように、バッファ１５４は、ＵＭＩＭ、及びエンクレーブホストモジュール１６０などのユーザモードアプリケーションによりアクセスされ得る共有バッファの形態（例えば、リングバッファ）であってよい。暗号文をバッファ１５４のキューに入れるのと同時に、又はその後に、ＵＭＩＭ１５２は、データ（具体的には暗号文）がバッファ１５４に存在することをエンクレーブホストモジュール１６０に示すバッファデータインジケータを提供することができる。いくつかの実施形態で前述したように、ＵＭＩＭ１５２は、プロキシ、例えばプロキシ２０２を対象とするシステムコール（例えば、読み出し要求）を解放することにより、バッファデータインジケータをエンクレーブホストモジュール１６０に少なくとも部分的に提供することができる。
【００４７】
上述したように、プロキシ２０２は、エンクレーブホストモジュール１６０などのユーザモードアプリケーションに露出し得るカーネルモードのデバイス（又は関連したデータ構造）の形態であってよい。プロキシ２０２は、任意の好適な態様で、コンピューティングデバイス１００の任意の好適なコンポーネントによって作成されてよい。例えば、ストレージマッパーモジュール及び／又はＵＭＩＭは、例えばプロセッサ１０１によるプロキシ２０２の作成をもたらすことができる。限定されるものではないが、いくつかの実施形態において、ストレージマッパーモジュール１５１が使用可能である（例えば、搭載されている）場合、ＵＭＩＭ１５２が使用可能である（例えば、搭載されている）場合、又はその両方の場合、プロキシ２０２は確立されてよい。いずれの場合も、エンクレーブホストモジュール１６０は、プロキシ２０２を対象とするシステムコールを発行することができる。ＵＭＩＭ１５２は、当該システムコールをインターセプトし、これを、データがバッファ１５４に存在するまで保持することができる。データがバッファ１５４のキューに入れられると、ＵＭＩＭ１５２はシステムコールを解放することができ、これにより、データがバッファ１５４に存在することを示すバッファデータインジケータを、エンクレーブホストモジュール１６０に提供する。もちろん、プロキシ２０２を対象とするシステムコールを解放することは、ＵＭＩＭ１５２がどのようにバッファ１５４内のデータの存在をエンクレーブホストモジュール１６０に示すことができるかという、１つの例にすぎない。当業者であれば理解するであろうが、バッファデータインジケータを提供する他の方法が可能である。
【００４８】
いくつかの実施形態において、バッファ１５４内のデータが平文の形態であるか、それとも暗号文の形態であるか、したがって、エンクレーブ１６２がそのデータを暗号化するのか、それとも解読するのかということに専用のバッファデータインジケータを、ＵＭＩＭ１５２がエンクレーブホストモジュール１６０に提供することが望ましい場合がある。これに関して、プロキシ２０２は、第１のデータ構造及び第２のデータ構造を提供する（又は、これらの形態になる）よう構成されてよい。上記の説明に則して、エンクレーブホストモジュール１６０は、第１のデータ構造及び第２のデータ構造を対象とする第１のシステムコール及び第２のシステムコールをそれぞれ発行することができる。ＵＭＩＭ１５２は、前述したのと同じ態様で第１のシステムコール及び第２のシステムコールをインターセプトして、これらを保持することができる。データをバッファ１５４のキューに入れた後、ＵＭＩＭ１５２は次に、バッファ１５４内のデータの存在を示すだけでなく、どのタイプの動作（暗号化又は復号化）がそこでエンクレーブ１６２により行われるのかも示すバッファデータインジケータを、エンクレーブホストモジュール１６０に発行することができる。
【００４９】
例えば、ＵＭＩＭ１５２は、エンクレーブホストモジュール１６０により発行され、プロキシ２０２に関連付けられた第１のデータ構造を対象とする第１のシステムコールを解放することができ、その間、プロキシ２０２に関連付けられた第２のデータ構造を対象とする第２のシステムコールを保持し続け、これにより、バッファ１５４内のデータが暗号化されることをエンクレーブホストモジュール１６０に示すことができる。同様に、ＵＭＩＭ１５２は、エンクレーブホストモジュール１６０により発行され、プロキシ２０２に関連付けられた第２のデータ構造を対象とする第２のシステムコールを解放することができ、その間、プロキシ２０２に関連付けられた第１のデータ構造を対象とする第１のシステムコールを保持し続け、これにより、バッファ１５４内のデータが解読されることをエンクレーブホストモジュール１６０に示すことができる。もちろん、エンクレーブ１６２によってバッファ１５４内のデータに暗号化が行われるのか、それとも復号化が行われるのかを制御する他の方法が可能であり、これらの方法は本開示で想定されている。
【００５０】
バッファデータインジケータの受信に応答して、エンクレーブホストモジュール１６０は、例えば、ＥＥＮＴＥＲ命令又は他の好適なコマンドの実行をもたらすことにより、制御をエンクレーブ１６２に渡すことができる。エンクレーブ１６２は次に、例えば、そこに格納された１つ又は複数のキーを用いて、バッファ１５４内のデータに暗号化操作を行うことができる。いくつかの実施形態におけるそのような操作は、エンクレーブ１６２内で行われ、これにより、そこに格納されたキーは、システムの物理メモリには露出していない。結果として得られる処理済みデータ（必要に応じて、暗号文又は平文）は次に、バッファ１５４に書き込まれてよい。いくつかの実施形態において、処理済みデータは、バッファ１５４内のその対応する（未処理）データと同じ位置（アドレス）に書き込まれる。そのような例において、エンクレーブ１６２は、暗号化操作を「インプレース」で行うとみなされてよい。
【００５１】
バッファ１５４内のデータの全てが処理された場合、エンクレーブホストモジュール１６０（又は、より具体的には、エンクレーブ１６２）は、追加の処理データを要求することができる。いくつかの実施形態において、エンクレーブホストモジュール１６０は、例えば、完了インジケータをＵＭＩＭ１５２に提供することにより、バッファ１５４内のデータ処理を完了したことを示すことができる。エンクレーブホストモジュール１６０は、限定されないが、プロキシ２０２を対象とする別のシステムコールを発行するなど、任意の好適な態様で完了インジケータを提供することができる。代替的に又は追加的に、エンクレーブホストモジュール１６０は、どのページもマッピングされていないアドレス（例えば、仮想アドレス）を対象とする読み出し要求又は書き込み要求を発行するよう構成される可能性があり、その結果、ページフォールトをもたらす。そのような例において、ＵＭＩＭ１５２は、そのような誤りを監視し、そのような誤りを完了インジケータと解釈するよう構成されてよい。いずれの場合も、いくつかの実施形態において、完了インジケータはまた、追加データがエンクレーブホストモジュール１６０により要求されていることをＵＭＩＭ１５２に示すことができる。
【００５２】
もちろん、上記の手法は、エンクレーブ１６２がバッファ１５４内のデータに対して暗号化操作の実行を完了したことを、ＵＭＩＭ１５２がどのように判定することができるかに関するほんの数例である。当業者であれば理解するであろうが、他の方法も可能である。
【００５３】
完了インジケータが、プロキシを対象とするシステムコールの形態である例において、ＵＭＩＭ１５２は、完了インジケータに応答して、バッファ１５４内の処理済みデータをストレージマッパーモジュールに伝達することができ、ストレージマッパーモジュールは次に、必要に応じて、処理済みデータをメモリ２００又はユーザモードアプリケーション２０１に提供することができる。さらに、ＵＭＩＭ１５２は、追加データがエンクレーブ１６２による処理に利用可能であるかに関して判定を行うこともできる。利用可能な場合、ＵＭＩＭ１５２は、追加データをバッファ１５４のキューに入れ、プロキシ２００（又は、それと関連付けられたデータ構造）を対象とするシステムコールを解放することができ、これにより、別のバッファデータインジケータをエンクレーブホストモジュール１６０に提供し、追加データがバッファ１５４内に存在することを示すことができる。このプロセスは、ユーザモードアプリケーション２０１により発行された読み出し／書き込み要求に関連付けられたデータの全てをエンクレーブ１６２が処理するまで継続してよい。
【００５４】
いずれの場合も、ＵＭＩＭ１５２は、バッファ１５４からストレージマッパーモジュール１５１に処理済みデータを伝達することができる。処理済みデータが平文の場合、ストレージマッパーモジュール１５１は、要求通りに、ユーザモードアプリケーション２０１、又はコンピューティングデバイス１００の別のコンポーネントに平文を伝達することができる。しかし、データが暗号文の場合、ストレージマッパーモジュール１５１は、例えば、暗号文をメモリ２００に書き込む書き込みコマンドを実行することにより、又はその実行をもたらすことにより、暗号文をメモリ２００に伝達することができる。
【００５５】
いくつかの実施形態において、ＵＭＩＭ１５２から受信したデータが平文であるか、それとも暗号文であるかを、ストレージマッパーモジュール１５１が判定することが望ましい場合がある。そのような例において、ストレージマッパーモジュール１５１は、ＵＭＩＭ１５２から受信したデータがユーザモードアプリケーション２０１（平文）に向けられているのか、それともメモリ２００（暗号文）に向けられているのかに基づくなど、任意の好適な態様で、そのような判定を行うことができる。例えば、ユーザモードアプリケーション２０１により発行された、メモリ２００を対象とする書き込み要求に応答して、ストレージマッパーモジュール１５１がデータをＵＭＩＭ１５２に送信した例において、例えば、ストレージマッパーモジュール１５１は、ＵＭＩＭ１５２から受信したデータが暗号文であると判定することができる。代替的に又は追加的に、例えば、暗号化データを含んだメモリ２００の何らかの部分を対象とする読み出し要求に応答して、ストレージマッパーモジュール１５１がデータをＵＭＩＭ１５２に送信した例において、ストレージマッパーモジュール１５１は、ＵＭＩＭ１５２から受信したデータが暗号文であると判定することができる。
【００５６】
次に図３を参照すると、この図は、本開示に係る、セキュアエンクレーブを用いてディスク暗号化を強化する方法に関する１つの例の動作を例示するフロー図である。具体的には、上記の図１及び図２の説明に則した態様で構成されるコンピューティングデバイスに実装され得るように、図３は、ユーザモードインタフェースモジュール（ＵＭＩＭ）により行われ得る例示の動作を示す。
【００５７】
示されるように、方法３００はブロック３０１で開始する。本方法は次に、ブロック３０２に進んでよく、ここで（未処理）データが受信されてよい。上記の説明に則して、未処理データはストレージマッパーモジュールから受信されてよく、ストレージマッパーモジュールは、ユーザモードアプリケーションにより発行された読み出し要求又は書き込み要求に応答して、データをＵＭＩＭに送信することができる。前述したように、（未処理）データは平文又は暗号文の形態でよく、それはセキュアエンクレーブにより処理されることになるので、「未処理」とみなされてよい。
【００５８】
いずれの場合も、（未処理）データが受信されると、本方法はブロック３０３に進んでよく、ここで、（未処理）データはバッファのキューに入れられてよい。前述したように、バッファは、カーネルレベルＵＭＩＭ（カーネルレベル）、ユーザレベルエンクレーブ管理モジュール、及び／又はユーザレベルエンクレーブなど、コンピューティングデバイスのカーネルレベルコンポーネント及びユーザレベルコンポーネントの両方によりアクセス可能な共有バッファの形態であってよい。限定されるものではないが、いくつかの実施形態におけるバッファはリングバッファである。
【００５９】
データがバッファのキューに入れられると、本方法はブロック３０４に進んでよく、ここで、エンクレーブが、バッファのキューに入ったデータの存在を通知されてよい。上記の説明に則して、エンクレーブは、限定されないが、プロキシを対象とするシステムコール（例えば、読み出し要求）の解放などの任意の好適な態様で、キューに入ったデータの存在を通知されてよい。当業者であれば理解するであろうが、もちろん、エンクレーブは、何らかの他の方式でキューに入ったデータの存在を通知され得る。いずれの場合も、キューに入ったデータの存在をエンクレーブに通知することで、キューに入ったデータの暗号化操作の実行をエンクレーブに開始させることができる。処理済みデータ（必要に応じて、平文又は暗号文）は、同じバッファ（例えば、エンクレーブがインプレースで暗号化又は復号化を行うところ）、又はカーネルモードコンポーネント及びユーザモードコンポーネントの間でも共有され得る別のバッファに格納されてよい。
【００６０】
エンクレーブがキューに入ったデータの存在を通知されると、本方法はブロック３０５に進んでよく、ここで、暗号化操作がバッファ内の（未処理）データの全て又は一部に対して完了したかに関して判定が行われてよい。前述したように、この判定は、例えば、完了インジケータの発行及び／又は検出に基づいて行われてよい。限定されるものではないが、いくつかの実施形態において、完了インジケータは、（例えば、エンクレーブ管理モジュールによる）プロキシを対象とする追加のシステムコールの形態であってよい。もちろん、バッファ内のデータの全て又は一部に対して暗号化操作が完了したかを判定する他の方法が利用されてよい。
【００６１】
バッファ内のデータの全て又は一部に対する暗号化操作が完了していないと判定される場合、本方法はブロック３０５からブロック３０６に進んでよく、ここで、本方法を続けるかに関して判定が行われてよい。ブロック３０６の結果は、閾値期間が終了したか、より高い優先順位のジョブを実行する必要があるかなど、様々な要素が条件となり得る。いずれの場合も、本方法を続けない場合、本方法はブロック３０９に進んで終了してよい。しかし、本方法を続ける場合、本方法はブロック３０５に戻ってよい。
【００６２】
バッファ内のデータの全て又は一部に対する暗号化操作が完了したと判定される場合、本方法はブロック３０５からブロック３０７に進んでよい。ブロック３０７に従って、（処理済み）データがバッファから読み出されて適切に送信されてよい。例えば、（処理済み）データが平文である場合、当該データは（例えば、ユーザレベルアプリケーションにより発行された、メモリに格納された暗号文を対象とする読み出し要求に応答して）ユーザレベルアプリケーションに送信されてよい。あるいは、（処理済み）データが暗号文である例において、当該データは（例えば、アプリケーションにより発行された書き込み要求に応答して）ストレージに送信されてよい。
【００６３】
本方法は次に、ブロック３０７からブロック３０８に進んでよい。ブロック３０８に従って、本方法を続けるかに関して判定が行われてよい。この判定の結果は、例えば、暗号化操作が追加の（未処理）データに対して行われる必要があるかが条件になり得る。必要がある場合、本方法は継続してブロック３０３に戻ってよく、それに従って、追加の（未処理）データがバッファのキューに入ってよい。しかし、暗号化操作が追加データに対して行われる必要がない場合、本方法はブロック３０９に進んで終了してよい。
【００６４】
例示のために、図３は、ブロック３０８に従った判定がブロック３０７に従った処理済みデータの提供に続く実施形態を示していることに留意されたい。ブロック３０８の動作の実行は、ブロック３０７の動作に続く必要はなく、いくつかの実施形態では、ブロック３０７の実行前、又はそれと同時に行われてよいことを理解されたい。言い換えると、ブロック３０７の動作の前、又はそれと同時に、暗号化操作が追加の未処理データに対して行われる必要があるかに関して判定が行われてよい。必要がある場合、バッファの処理済みデータは読み出されて、追加データと取り替えられてよく、次に追加データは上述したようにセキュアエンクレーブにより処理されてよい。
【００６５】
次に図４を参照すると、この図は、本開示に係る、セキュアエンクレーブを用いてディスク暗号化を強化する方法に関する別の例の動作を例示するフロー図である。具体的には、例えば、上記の図１及び図２の説明に則した態様で構成されるコンピューティングデバイスに実装され得るように、図４は、エンクレーブホストモジュール及び／又はセキュアエンクレーブにより行われ得る例示の動作を示す。
【００６６】
示されるように、方法４００はブロック４０１で開始する。本方法は次にブロック４０２及び４０３に進んでよく、それらに従って、カーネルモードコンポーネント及びユーザモードコンポーネントの両方にアクセス可能なバッファ内に（未処理）データが存在するかに関して判定が行われてよい。上記の説明に則して、この判定の結果は、（未処理）データがバッファ内に存在するという、（例えば、ＵＭＩＭ又は他のコンポーネントからの）何らかのインジケーションを受信することが条件になり得る。インジケーションは、例えば、プロキシを対象とするシステムコール（例えば、読み出し要求）の解放であってよい。
【００６７】
ブロック４０３に従って、（未処理）データがバッファ内に存在しないと判定される場合、本方法はブロック４０４に進んでよい。ブロック４０４に従って、本方法を続けるかに関して判定が行われてよい。ブロック４０４の結果は、限定されないが、予め定められた期間が終了したかなど、様々な要素が条件になり得る。いずれの場合も、本方法を続けないと判定した場合、本方法はブロック４０８に進んで終了してよい。しかし、本方法を続ける場合、本方法はブロック４０４からブロック４０２に戻ってよい。
【００６８】
ブロック４０３に従って、（未処理）データがバッファ内に存在すると判定される場合、本方法はブロック４０５に進んでよい。ブロック４０５に従って、暗号化操作が、セキュアエンクレーブを用いて、バッファ内のデータに少なくとも部分的に行われてよい。例えば、制御をセキュアエンクレーブに渡すために、ＥＥＮＴＥＲ命令が実行されてよい。セキュアエンクレーブは次に、必要に応じて、バッファからデータを読み出して、当該データに暗号化操作（例えば、暗号化又は復号化）を行うことができる。いくつかの実施形態において、暗号化操作はエンクレーブ内で、例えば、そこに格納された１つ又は複数のキーを用いて行われてよい。セキュアエンクレーブが暗号化操作を行うとき、結果として得られる処理済みデータはエンクレーブから出力されてよく、例えば（インプレースの暗号化又は復号化の場合には）バッファに戻り、あるいはコンピューティングデバイスのカーネルモードコンポーネント及びユーザモードコンポーネントの間で共有され得る別のバッファに戻る。
【００６９】
本方法は次にオプションのブロック４０６に進んでよく、ここで、暗号化操作がバッファ内のデータの全て又は一部に行われたというインジケーションが（例えば、セキュアエンクレーブ又はエンクレーブホストモジュールから）カーネルモードコンポーネント（例えば、ＵＭＩＭ）に提供されてよい。しかし、前述したように、いくつかの実施形態において、カーネルモードコンポーネントは、暗号化操作がバッファ内のデータに対して行われたかを単独で判定することができる場合があり、その場合、ブロック４０６の動作は必要とされなくてよい。
【００７０】
ブロック４０６に従って、暗号化操作が完了したというインジケーションが提供されると、又はブロック４０６の動作が必要とされない場合、本方法はブロック４０７に進んでよい。ブロック４０７に従って、追加の（未処理）データがバッファ内に存在するかに関して判定が行われてよい。存在する場合、本方法はブロック４０５に戻ってよい。しかし、存在しない場合には、本方法はブロック４０８に進んで終了してよい。
【００７１】
理解され得るように、上述の技術は、セキュアエンクレーブがコンピューティングデバイスのストレージに格納されるデータの全て又は一部に暗号化操作を行うのに活用され得る使用例を可能にすることができる。例えば、上述の技術は、例えば、ディスクに格納された全てのデータをエンクレーブにより保護された１つ又は複数のキーで暗号化するためにセキュアエンクレーブを用いることで、全ディスク暗号化プロトコルを強化するのにセキュアエンクレーブを用いることを可能にすることができる。これにより、いくつかのセキュリティ上の利点が前述したように提供され得るが、上述の態様でエンクレーブを用いると、結果として、コンピューティングデバイスを起動するのに必要とされ得るファイル、アプリケーション、及び他のデータ構造を暗号化することになることがある。そのようなコンポーネントは、エンクレーブにより保護された１つ又は複数のキーで暗号化されていると考えられるため、必要なファイルを解読するのにエンクレーブが利用できない限り、コンピューティングデバイス１００を起動することは不可能であることがある。
【００７２】
上記のことを考慮して、本開示の別の態様は、オペレーティングシステムを起動する前に、エンクレーブを用いて暗号化操作（具体的には復号化）を行うことを可能にする技術に関する。具体的には、本開示の１つの態様は、プリブート段階でエンクレーブを作成する（以下「プリブートエンクレーブ」）１つ又は複数のプリブートアプリケーションを用いることに関する。プリブートエンクレーブは、作成されると、エンクレーブにより（例えば、ランタイム中に）前もって暗号化された暗号化データ（例えば、ファイル、アプリケーションなど）を解読するのに用いられてよく、コンピューティングデバイスを起動するのに必要とされてよい。
【００７３】
コンピュータシステムの初期化を担うアプリケーションは、一般にカーネルモードで動作することを理解されたい。例えば、基本入出力システム（「ＢＩＯＳ」）及びユニファイド・エクステンシブル・ファームウェア・インタフェース（「ＵＥＦＩ」）は、コンピュータシステムを起動するのに必要な様々なプラットフォームデバイス（特に、オペレーティングシステムが属するストレージデバイス）を初期化するアプリケーション（又はアプリケーションの集合）である。これらのアプリケーションはカーネルモードで動作し、さらにオペレーティングシステムの起動前に動作を行うので、「プリブートアプリケーション」と呼ばれることがある。オペレーティングシステムブートローダのコンポーネント（例えば、Ｌｉｎｕｘ（登録商標）オペレーティングシステムのＧＲＵＢ又はＬＩＬＯ、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのＷｉｎｄｏｗｓ（登録商標）ブートローダ）も、オペレーティングシステムが起動され得る前に必要とされる動作を行うので、プリブートアプリケーションとみなされてよい。
【００７４】
上記のことを考慮して、図５を参照すると、この図は、本開示に係る、プリブート段階でセキュアエンクレーブを実装する方法に従って実行され得るロジック動作のフロー図である。示されるように、方法５００はブロック５０１で開始する。本方法は次にブロック５０２に進んでよく、それに従って、プリブートエンクレーブが実装されてよい。エンクレーブが、必要な特性（例えば、計測値）、及びコンピューティングデバイスを起動するのに必要とされ得る暗号化データを解読するのに必要なキーを有するという条件で、プリブートエンクレーブの実装は任意の好適な態様で行われてよい。
【００７５】
例えば、いくつかの実施形態において、１つ又は複数のプリブートアプリケーション（ＢＩＯＳアプリケーション、ＵＥＦＩアプリケーション、オペレーティングシステムブートローダなど）により、プリブートエンクレーブがプリブート段階で作成されてよい。そのような実施形態において、プリブートアプリケーションは、オペレーティングシステムが読み込まれる前に、命令をプロセッサにより実行させることができる。例えば、プリブートアプリケーションは、エンクレーブをホストするために、プロセッサ（例えば、プロセッサ１０１）にメモリページをエンクレーブページキャッシュ（例えば、ＥＰＣ１１４）内に割り当てさせるという命令を、実行させることができる。プリブートアプリケーションは次に、プロセッサにエンクレーブイメージ（例えばこれは、例えばＢＩＯＳメモリ、ＴＰＭ、他の保護されたメモリなど、プリブートアプリケーションにアクセス可能な保護されたメモリに格納されてよい）をＥＰＣ内に割り当てられたメモリページまで拡張させることができる。代替的に又は追加的に、プリブートアプリケーションは、ＥＰＣ内に割り当てられたメモリページにエンクレーブの作成をもたらす１つ又は複数の命令（例えば、Ｅｃｒｅａｔｅ命令）の実行をもたらすことができる。
【００７６】
いくつかの例において、プリブートアプリケーションがプロセッサに対するユーザモードサポートを可能にし、これにより、プリブートエンクレーブが実装され得ることも望ましいことがある。これに関して、いくつかの実施形態では、プリブートアプリケーションは、例えば、１つ又は複数のページテーブル、グローバル記述子テーブル、割り込み記述子テーブル、及び／又は機械固有レジスタ（例えば、ＭＳＲ１１２）を変更することで、プリブートエンクレーブのユーザモードサポートを可能にするよう構成されてよい。
【００７７】
上述したように、本開示の技術は、ランタイム中にセキュアエンクレーブを使用して、データがディスクに書き込まれる前にデータの暗号化を可能にすることにより、全ディスク暗号化操作を強化することができる。いくつかの実施形態において、ランタイム中のデータの暗号化が、暗号化キーを用いてエンクレーブ内で行われてよい。コンピューティングデバイスのシャットダウン前に、セキュアエンクレーブは、エンクレーブの計測値を用いてキーをラップ（暗号化）することにより、暗号化キー（及び／又は任意の関連した復号化キー）を保護することができる。理解され得るように、この態様で保護された平文のキーを取得するのは、当該キーを暗号化したエンクレーブと同じ（例えば、同一の）計測値を有するエンクレーブを用いないと困難になり得る。
【００７８】
したがって、いくつかの実施形態において、ブロック５０２に従って実装されたプリブートエンクレーブは、（例えば、ランタイム中に）ディスクに格納されたデータを暗号化したエンクレーブと同じ計測値を有するよう構成されてよい。実際に、多くの実施形態において、プリブートエンクレーブの計測値が、ランタイム中にデータ暗号化を行うのに用いられたエンクレーブと同一であることが有利となることがある。このことを考慮して、例えばランタイム中にディスクに格納されたデータを暗号化するのに前もって用いられたエンクレーブの計測値と同じ計測値を有するプリブートエンクレーブを作成するのに、多数の方法が利用されてよい。例えば、プリブートアプリケーションの実行により、ランタイム中にディスク上のデータを暗号化したエンクレーブをホストするのに用いられたプリブートエンクレーブをホストするために、同じＥＰＣ範囲及び／又はメモリページをプロセッサに割り当てさせることができる。
【００７９】
いくつかの実施形態において、プリブートアプリケーションは、実行されると、プロセッサに、プリブートエンクレーブに割り当てられたＥＰＣ範囲を隔離させることができ、これにより、デバイスの他のコンポーネント（例えば、ＯＳ）が、後になって、当該ＥＰＣ範囲を上書きすることを防止することができる。言い換えると、ＥＰＣ範囲を隔離（確保）することで、コンピューティングデバイスの他のコンポーネントにより、エンクレーブが「ページアウト」されることを防止することができる。理解され得るように、エンクレーブに割り当てられたＥＰＣ範囲（又は他のメモリ範囲）を上書きすると、エンクレーブの計測値が変わることがある。さらにはこれにより、エンクレーブの計測値で暗号化されているキーを解読することが困難又は不可能になることがあり、潜在的には、システムクラッシュがもたらされることもある。
【００８０】
図５に戻り、ブロック５０２に従ってプリブートエンクレーブが実装されると、本方法はブロック５０３に進んでよい。ブロック５０３に従って、プリブートエンクレーブは、コンピューティングデバイスを起動するのに必要とされ得る暗号化データの解読に適用されてよい。この目的にプリブートエンクレーブを用いる様々な方法が、本開示によって想定され、また包含される。例えば、ＵＥＦＩ起動の状況において、ＵＥＦＩドライバは（例えば、全ディスク暗号化アプリケーション又は何らかの他のアプリケーションの一部として）、ディスクから読み出された暗号化データを、復号化のためにセキュアエンクレーブに向けるよう実行されてよく、その後、結果として得られる平文が、コンピューティングデバイスを起動するのに利用されてよい。より具体的には、いくつかの実施形態において、ＵＥＦＩドライバは、ファイルシステムが搭載され得るＢＬＯＣＫ−ＩＯインタフェースを露出させ、暗号化ディスク／パーティションのＢＬＯＣＫ−ＩＯプロトコルからプリブートエンクレーブまでのトラフィックをフィルタリングするよう動作することができる。この方法では、ＵＥＦＩドライバは、ディスクから読み出された暗号化データを、復号化のためにプリブートエンクレーブに向けることができる。同様に、ＵＥＦＩドライバは、システムの起動を容易にするように、結果として得られる平文を適切に送信することができる。
【００８１】
ＯＳを起動するのに必要とされる暗号化データがプリブートエンクレーブにより解読されたとき、又は解読されると、本方法はブロック５０３からブロック５０４に進んでよく、それに従ってＯＳが起動されてよい。本方法は次にブロック５０５に進んでよく、ここで、プリブートエンクレーブは、ユーザモードコンポーネント（例えば、エンクレーブホストモジュール１６０）に渡されてよい。
【００８２】
本明細書で用いられるとき、プリブートエンクレーブをユーザモードコンポーネントに「渡す」ということには、プリブートエンクレーブが（例えば、ＥＰＣ１１４に）残ることを可能にすることが含まれ、これにより、プリブートエンクレーブは上述したように、ランタイム中にカーネルモードコンポーネント（例えば、ストレージマッパーモジュール１５１）により用いられてよい。いくつかの例において、プリブートアプリケーションは、プリブートエンクレーブに割り当てられたＥＰＣ範囲をエンクレーブホストモジュール１６０に伝達することにより、プリブートエンクレーブをユーザモードコンポーネントに渡すことができる。これは、例えば、プリブートエンクレーブに割り当てられたＥＰＣ範囲（又は他の仮想メモリアドレス範囲）をエンクレーブホストモジュール１６０にマッピングするマッピング操作を、例えば、アドバンスド・コンフィグレーション・アンド・パワー・インタフェース（ＡＣＰＩ）テーブル、ＵＥＦＩ変数、固定メモリアドレス、これらの組み合わせなどを用いて実行することにより、行われてよい。プリブートエンクレーブが移されると、本方法はブロック５０６に進んで終了してよい。
【００８３】
本開示の別の態様は、プロセッサにより実行されると、プロセッサ（又は、プロセッサを含むデバイス）に本開示に係る動作を行わせるコンピュータ可読命令を含んだ、コンピュータ可読記憶媒体に関する。コンピュータ可読記憶媒体は、用いられる場合、製造品の形態であってよい。いくつかの例において、コンピュータ可読記憶媒体は、限定されないが、光記憶媒体、磁気記憶媒体、又は半導体記憶媒体など、非一時的なコンピュータ可読媒体又は機械可読記憶媒体であってよい。いずれの場合も、記憶媒体は、図３、図４、及び図５のうちの１つ又は複数の方法の動作に対する命令など、様々なタイプのコンピュータ実行可能命令を格納することができる。用いられ得る好適なコンピュータ可読記憶媒体の非限定的な例には、電子データを格納することが可能なあらゆる有形の媒体が含まれ、それらの媒体には、揮発性メモリ又は不揮発性メモリ、取り外し可能なメモリ又は取り外しができないメモリ、消去可能なメモリ又は消去ができないメモリ、書き込み可能なメモリ又は再書き込み可能なメモリなどが含まれる。コンピュータ実行可能命令の例には、あらゆる好適なタイプのコードが含まれてよく、それらのコードは、ソースコード、コンパイラ型コード、インタプリタ型コード、実行可能コード、静的コード、動的コード、オブジェクト指向型コード、視覚コードなどである。
［実施例］
【００８４】
以下の実施例は、さらなる実施形態に関する。本開示の以下の実施例は、以下に提供されるように、システム、デバイス、方法、実行されると当該方法に基づいて機械に動作を行わせる命令を格納したコンピュータ可読記憶媒体、及び／又は当該方法に基づいて動作を行うための手段などの主題要素を含むことができる。
【００８５】
実施例１：この実施例によれば、ユーザモードで実行されるセキュアエンクレーブを用いてデータ暗号化を強化するよう構成されたコンピューティングデバイスが提供され、当該デバイスには、プロセッサと、メモリと、プロセッサのカーネルモードで少なくとも部分的に実装されるユーザモードインタフェースモジュールとが含まれ、ユーザモードインタフェースモジュールは、ユーザモードインタフェースモジュールと、プロセッサのユーザモードで少なくとも部分的に実行可能な、セキュアエンクレーブをホストするエンクレーブホストモジュールとにアクセス可能な共有バッファのキューに未処理データを入れ、セキュアエンクレーブに未処理データの暗号化操作を行わせて処理済みデータを作り出させるよう構成されるバッファデータインジケータをエンクレーブホストモジュールに提供する。
【００８６】
実施例２：この実施例は、実施例１の特徴のうちいずれか又は全てを含み、カーネルモードで少なくとも部分的に実行可能なストレージマッパーモジュールをさらに含み、ユーザモードインタフェースモジュールはさらに、未処理データをストレージマッパーモジュールから受信する。
【００８７】
実施例３：この実施例は、実施例２の特徴のうちいずれか又は全てを含み、ストレージマッパーモジュールは、ユーザモードで少なくとも部分的に実行されるアプリケーションからの１つ又は複数の読み出し要求をインターセプトし、１つ又は複数の読み出し要求の対象となる未処理データをユーザモードインタフェースモジュールにリダイレクトする。
【００８８】
実施例４：この実施例は、実施例２の特徴のうちいずれか又は全てを含み、ユーザモードインタフェースモジュールはさらに処理済みデータを受信し、ストレージマッパーモジュールはさらに、ユーザモードインタフェースモジュールから処理済みデータを受信する。
【００８９】
実施例５：この実施例は、実施例４の特徴のうちいずれか又は全てを含み、ストレージマッパーモジュールはさらに、処理済みデータが平文であるか、それとも暗号文であるかを判定する。
【００９０】
実施例６：この実施例は、実施例３の特徴のうちいずれか又は全てを含み、１つ又は複数の読み出し要求の対象となる未処理データは暗号文を含む。
【００９１】
実施例７：この実施例は、実施例６の特徴のうちいずれか又は全てを含み、ユーザモードインタフェースモジュールは、暗号文の少なくとも一部を共有バッファのキューに入れ、暗号化操作は、共有バッファのキューに入れられた暗号文を解読することを含む。
【００９２】
実施例８：この実施例は、実施例２から７のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、ストレージマッパーモジュールは、ユーザモードで少なくとも部分的に実行されるアプリケーションからの１つ又は複数の書き込み要求をインターセプトし、１つ又は複数の書き込み要求に関連付けられる未処理データをユーザモードインタフェースモジュールにリダイレクトする。
【００９３】
実施例９：この実施例は、実施例８の特徴のうちいずれか又は全てを含み、１つ又は複数の書き込み要求に関連付けられる未処理データは平文である。
【００９４】
実施例１０：この実施例は、実施例９の特徴のうちいずれか又は全てを含み、ユーザモードインタフェースモジュールは平文を共有バッファのキューに入れ、暗号化操作はバッファのキューに入れられた平文を暗号化することを含む。
【００９５】
実施例１１：この実施例は、実施例１から１０のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、エンクレーブホストモジュールは、エンクレーブホストモジュール及びユーザモードインタフェースモジュールの両方に露出しているプロキシにシステムコールを発行する。ユーザモードインタフェースモジュールは、システムコールをインターセプトする。ユーザモードインタフェースモジュールは、システムコールを解放することにより、バッファデータインジケータを少なくとも部分的に提供する。
【００９６】
実施例１２：この実施例は、実施例１１の特徴のうちいずれか又は全てを含み、プロキシは、カーネルモードのデバイス又はデータ構造を含む。
【００９７】
実施例１３：この実施例は、実施例１１及び１２のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、ユーザモードインタフェースモジュールはさらにプロキシを作成する。
【００９８】
実施例１４：この実施例は、実施例１から１３のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、セキュアエンクレーブは、少なくとも１つのキーを用いて暗号化操作を行う。コンピューティングデバイスのシャットダウン前に、セキュアエンクレーブは、エンクレーブの計測値を用いて少なくとも部分的にキーを暗号化する。
【００９９】
実施例１５：この実施例は、実施例１４の特徴のうちいずれか又は全てを含み、セキュアエンクレーブは、エンクレーブ内で暗号化操作を行う。
【０１００】
実施例１６：この実施例は、実施例１から１５のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、セキュアエンクレーブは、暗号化操作をインプレースで行い、これにより処理済みデータは、共有バッファ内の対応する未処理データの部分と同じ位置に書き込まれる。
【０１０１】
実施例１７：この実施例は、実施例１から１６のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、共有バッファはリングバッファである。
【０１０２】
実施例１８：この実施例は、実施例１７の特徴のうちいずれか又は全てを含み、ユーザモードインタフェースモジュールが未処理データをリングバッファのキューに入れる間に、エンクレーブホストモジュールは、未処理データをリングバッファから読み出し、エンクレーブに提供するよう動作可能である。エンクレーブホストモジュールはさらに、セキュアエンクレーブにより作り出された処理済みデータをリングバッファのキューに入れるよう動作可能である。エンクレーブホストモジュールが処理済みデータをリングバッファのキューに入れる間に、ユーザモードインタフェースモジュールはさらに、処理済みデータをリングバッファから除去するよう動作可能である。
【０１０３】
実施例１９：この実施例は、実施例１から１８のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、エンクレーブホストモジュールはさらに、セキュアエンクレーブにより実行される暗号化操作の少なくとも一部が完了したことを、ユーザモードインタフェースモジュールに示す完了インジケータを提供するよう動作可能である。
【０１０４】
実施例２０：この実施例は、実施例１９の特徴のうちいずれか又は全てを含み、エンクレーブホストモジュールは、エンクレーブホストモジュール及びユーザモードインタフェースモジュールの両方に露出しているプロキシを対象とするシステムコールを発行することにより、少なくとも部分的に完了インジケータを提供する。
【０１０５】
実施例２１：この実施例は、実施例２０の特徴のうちいずれか又は全てを含み、プロキシは、カーネルモードのデバイス又はデータ構造を含む。
【０１０６】
実施例２２：この実施例によれば、ユーザモードで実行されるエンクレーブを用いて暗号化操作を強化する方法が提供され、本方法は、プロセッサのカーネルモードで実行されるユーザモードインタフェースモジュールを用いて、未処理データを受信する段階と、ユーザモードインタフェースモジュール、及びプロセッサのユーザモードで少なくとも部分的に実行されるエンクレーブホストモジュールにアクセス可能な共有バッファのキューに未処理データを入れる段階であって、エンクレーブホストモジュールはセキュアエンクレーブをホストする、段階と、バッファデータインジケータをエンクレーブホストモジュールに提供する段階であって、バッファデータインジケータは、セキュアエンクレーブに未処理データの暗号化操作を行わせて処理済みデータを作り出させるよう構成される、段階とを含む。
【０１０７】
実施例２３：この実施例は、実施例２２の特徴のうちいずれか又は全てを含み、ユーザモードインタフェースモジュールは、プロセッサのカーネルモードで実行されるストレージマッパーモジュールから未処理データを受信する。
【０１０８】
実施例２４：この実施例は、実施例２３の特徴のうちいずれか又は全てを含み、未処理データは、平文、暗号文、又はこれらの組み合わせを含む。
【０１０９】
実施例２５：この実施例は、実施例２３の特徴のうちいずれか又は全てを含み、ユーザモードインタフェースモジュールを用いて、処理済みデータをバッファから受信する段階と、処理済みデータをストレージマッパーモジュールに提供する段階とをさらに含む。
【０１１０】
実施例２６：この実施例は、実施例２２の特徴のうちいずれか又は全てを含み、ユーザモードインタフェースモジュールを用いて、未処理データを共有バッファのキューに入れ、実質的に並行して、処理済みデータを共有バッファから受信する段階をさらに含む。
【０１１１】
実施例２７：この実施例は、実施例２４の特徴のうちいずれか又は全てを含み、未処理データは平文であり、バッファデータインジケータは、セキュアエンクレーブに平文を暗号化させるよう構成される。
【０１１２】
実施例２８：この実施例は、実施例２４の特徴のうちいずれか又は全てを含み、未処理データは暗号文であり、バッファデータインジケータは、セキュアエンクレーブに暗号文を解読させるよう構成される。
【０１１３】
実施例２９：この実施例は、実施例２２から２８のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、バッファデータインジケータを提供する段階は、ユーザモードインタフェースモジュールによって、プロキシを対象とするシステムコールを解放する段階を含む。
【０１１４】
実施例３０：この実施例は、実施例２９の特徴のうちいずれか又は全てを含み、システムコールは、エンクレーブホストモジュールにより発行されたものである。
【０１１５】
実施例３１：この実施例は、実施例２９の特徴のうちいずれか又は全てを含み、ユーザモードインタフェースモジュールを用いて、プロキシを作成させる段階をさらに含む。
【０１１６】
実施例３２：この実施例は、実施例２９から３１のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、プロキシは、カーネルモードのデバイス又はデータ構造を含む。
【０１１７】
実施例３３：この実施例は、実施例２２から３２のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、セキュアエンクレーブを用いて、セキュアエンクレーブにより保護される少なくとも１つのキーで暗号化操作を行う段階をさらに含む。
【０１１８】
実施例３４：この実施例は、実施例２２から３３のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、暗号化操作は、セキュアエンクレーブ内で行われる。
【０１１９】
実施例３５：この実施例は、実施例２２から３４のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、セキュアエンクレーブを用いて、暗号化操作をインプレースで行う段階をさらに含み、これにより処理済みデータは、共有バッファ内の対応する未処理データの部分と同じ位置に書き込まれる。
【０１２０】
実施例３６：この実施例は、実施例２２から３５のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、共有バッファはリングバッファである。
【０１２１】
実施例３７：この実施例は、実施例３６の特徴のうちいずれか又は全てを含み、エンクレーブホストモジュールを用いて、ユーザモードインタフェースモジュールが未処理データをリングバッファのキューに入れる間に、未処理データをリングバッファから読み出し、セキュアエンクレーブに提供する段階と、処理済みデータをリングバッファのキューに入れる段階と、ユーザモードインタフェースモジュールを用いて、エンクレーブホストモジュールが処理済みデータをリングバッファのキューに入れる間に、処理済みデータをリングバッファから除去する段階とをさらに含む。
【０１２２】
実施例３８：この実施例は、実施例２２から２７のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、エンクレーブホストモジュールを用いて、セキュアエンクレーブにより実行される暗号化操作の少なくとも一部が完了したことを示す完了インジケータを、ユーザモードインタフェースモジュールに提供する段階をさらに含む。
【０１２３】
実施例３９：この実施例は、実施例３８の特徴のうちいずれか又は全てを含み、エンクレーブホストモジュールを用いて、エンクレーブホストモジュール及びユーザモードインタフェースモジュールの両方に露出しているプロキシを対象とするシステムコールを発行することにより、少なくとも部分的に完了インジケータを提供する段階をさらに含む。
【０１２４】
実施例４０：この実施例は、実施例３９の特徴のうちいずれか又は全てを含み、プロキシは、カーネルモードのデバイス又はデータ構造を含む。
【０１２５】
実施例４１：この実施例によれば、ユーザモードで実行されるエンクレーブを用いて暗号化操作を強化するコンピュータ可読命令を含む少なくとも１つのコンピュータ可読媒体が提供され、これは、コンピューティングデバイスのプロセッサにより実行されると、未処理データを受信する動作と、ユーザモードインタフェースモジュール、及びプロセッサのユーザモードで少なくとも部分的に実行されるエンクレーブホストモジュールにアクセス可能な共有バッファのキューに未処理データを入れる動作であって、エンクレーブホストモジュールはセキュアエンクレーブをホストする、動作と、バッファデータインジケータをエンクレーブホストモジュールに提供する動作であって、バッファデータインジケータは、セキュアエンクレーブに、未処理データの暗号化操作を行わせて処理済みデータを作り出させるよう構成される、動作とを含む動作をコンピューティングデバイスに実行させる。
【０１２６】
実施例４２：この実施例は、実施例４１の特徴のうちいずれか又は全てを含み、ユーザモードインタフェースモジュールは、プロセッサのカーネルモードで実行されるストレージマッパーモジュールから未処理データを受信する。
【０１２７】
実施例４３：この実施例は、実施例４２の特徴のうちいずれか又は全てを含み、未処理データは、平文、暗号文、又はこれらの組み合わせを含む。
【０１２８】
実施例４４：この実施例は、実施例４２の特徴のうちいずれか又は全てを含み、命令は実行されると、ユーザモードインタフェースモジュールを用いて、処理済みデータをバッファから受信し、処理済みデータをストレージマッパーモジュールに提供する動作を含む動作の実行をさらにもたらす。
【０１２９】
実施例４５：この実施例は、実施例４１から４４のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、命令は実行されると、ユーザモードインタフェースモジュールを用いて、未処理データを共有バッファのキューに入れ、実質的に並行して、処理済みデータを共有バッファから受信する動作を含む動作の実行をさらにもたらす。
【０１３０】
実施例４６：この実施例は、実施例４３の特徴のうちいずれか又は全てを含み、未処理データは平文であり、バッファデータインジケータは、セキュアエンクレーブに平文を暗号化させるよう構成される。
【０１３１】
実施例４７：この実施例は、実施例４３の特徴のうちいずれか又は全てを含み、未処理データは暗号文であり、バッファデータインジケータは、セキュアエンクレーブに暗号文を解読させるよう構成される。
【０１３２】
実施例４８：この実施例は、実施例４１から４７のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、バッファデータインジケータを提供する段階は、ユーザモードインタフェースモジュールによって、プロキシを対象とするシステムコールを解放する段階を含む。
【０１３３】
実施例４９：この実施例は、実施例４８の特徴のうちいずれか又は全てを含み、システムコールは、エンクレーブホストモジュールにより発行されたものである。
【０１３４】
実施例５０：この実施例は、実施例４８の特徴のうちいずれか又は全てを含み、命令は実行されると、ユーザモードインタフェースモジュールを用いて、プロキシを作成させる動作を含む動作の実行をさらにもたらす。
【０１３５】
実施例５１：この実施例は、実施例４８の特徴のうちいずれか又は全てを含み、プロキシは、カーネルモードのデバイス又はデータ構造を含む。
【０１３６】
実施例５２：この実施例は、実施例４１から５１のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、命令は実行されると、セキュアエンクレーブを用いて、セキュアエンクレーブにより保護される少なくとも１つのキーで暗号化操作を行う動作を含む動作の実行をさらにもたらす。
【０１３７】
実施例５３：この実施例は、実施例４１から５２のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、暗号化操作は、セキュアエンクレーブ内で行われる。
【０１３８】
実施例５４：この実施例は、実施例４１から５３のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、上記命令は実行されると、上記セキュアエンクレーブを用いて、暗号化操作をインプレースで行う動作を含む動作の実行をさらにもたらし、これにより処理済みデータは、共有バッファ内の対応する未処理データの部分と同じ位置に書き込まれる。
【０１３９】
実施例５５：この実施例は、実施例４１から５４のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、共有バッファはリングバッファである。
【０１４０】
実施例５６：この実施例は、実施例５５の特徴のうちいずれか又は全てを含み、命令は実行されると、エンクレーブホストモジュールを用いて、ユーザモードインタフェースモジュールが未処理データをリングバッファのキューに入れる間に、未処理データをリングバッファから読み出し、セキュアエンクレーブに提供する動作と、処理済みデータをリングバッファのキューに入れる動作と、ユーザモードインタフェースモジュールを用いて、エンクレーブホストモジュールが処理済みデータをリングバッファのキューに入れる間に、処理済みデータをリングバッファから除去する動作とを含む動作の実行をさらにもたらす。
【０１４１】
実施例５７：この実施例は、実施例５６の特徴のうちいずれか又は全てを含み、命令は実行されると、エンクレーブホストモジュールを用いて、セキュアエンクレーブにより実行される暗号化操作の少なくとも一部が完了したことを示す完了インジケータを、ユーザモードインタフェースモジュールに提供する動作を含む動作の実行をさらにもたらす。
【０１４２】
実施例５８：この実施例は、実施例５７の特徴のうちいずれか又は全てを含み、命令は実行されると、エンクレーブホストモジュールを用いて、エンクレーブホストモジュール及びユーザモードインタフェースモジュールの両方に露出しているプロキシを対象とするシステムコールを発行することにより、少なくとも部分的に完了インジケータを提供する動作を含む追加の動作の実行をさらにもたらす。
【０１４３】
実施例５９：この実施例は、実施例５８の特徴のうちいずれか又は全てを含み、プロキシは、カーネルモードのデバイス又はデータ構造を含む。
【０１４４】
実施例６０：この実施例によると、ユーザモードで実行されるセキュアエンクレーブを用いてデータ暗号化を強化するよう構成されたコンピューティングデバイスが提供され、当該デバイスは、プロセッサと、メモリと、プロセッサのカーネルモードで少なくとも部分的に実装されるユーザモードインタフェース手段とを含み、ユーザモードインタフェース手段は、ユーザモードインタフェース手段と、プロセッサのユーザモードで少なくとも部分的に実行可能な、セキュアエンクレーブをホストするエンクレーブホスト手段とにアクセス可能な共有バッファのキューに未処理データを入れ、セキュアエンクレーブに未処理データの暗号化操作を行わせて処理済みデータを作り出させるよう構成されているバッファデータインジケータをエンクレーブホスト手段に提供する。
【０１４５】
実施例６１：この実施例は、実施例６０の特徴のうちいずれか又は全てを含み、カーネルモードで少なくとも部分的に実行可能なストレージマッパー手段をさらに含み、ユーザモードインタフェース手段はさらに、未処理データをストレージマッパー手段から受信する。
【０１４６】
実施例６２：この実施例は、実施例６１の特徴のうちいずれか又は全てを含み、ストレージマッパー手段は、ユーザモードで少なくとも部分的に実行されるアプリケーションからの１つ又は複数の読み出し要求をインターセプトし、１つ又は複数の読み出し要求の対象となる未処理データをユーザモードインタフェース手段にリダイレクトする。
【０１４７】
実施例６３：この実施例は、実施例６１の特徴のうちいずれか又は全てを含み、ユーザモードインタフェース手段はさらに処理済みデータを受信し、ストレージマッパー手段はさらに、ＵＭＩＭから処理済みデータを受信する。
【０１４８】
実施例６４：この実施例は、実施例６３の特徴のうちいずれか又は全てを含み、ストレージマッパー手段はさらに、処理済みデータが平文であるか、それとも暗号文であるかを判定する。
【０１４９】
実施例６５：この実施例は、実施例６２の特徴のうちいずれか又は全てを含み、１つ又は複数の読み出し要求の対象となる未処理データは暗号文を含む。
【０１５０】
実施例６６：この実施例は、実施例６５の特徴のうちいずれか又は全てを含み、ユーザモードインタフェース手段は、暗号文の少なくとも一部を共有バッファのキューに入れ、暗号化操作は、共有バッファのキューに入れられた暗号文を解読することを含む。
【０１５１】
実施例６７：この実施例は、実施例６１から６６のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、ストレージマッパー手段は、ユーザモードで少なくとも部分的に実行されるアプリケーションからの１つ又は複数の書き込み要求をインターセプトし、１つ又は複数の書き込み要求に関連付けられる未処理データをユーザモードインタフェース手段にリダイレクトする。
【０１５２】
実施例６８：この実施例は、実施例６７の特徴のうちいずれか又は全てを含み、１つ又は複数の書き込み要求に関連付けられる未処理データは平文である。
【０１５３】
実施例６９：この実施例は、実施例６８の特徴のうちいずれか又は全てを含み、ユーザモードインタフェース手段は平文を共有バッファのキューに入れ、暗号化操作はバッファのキューに入れられた平文を暗号化することを含む。
【０１５４】
実施例７０：この実施例は、実施例６０から６９のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、エンクレーブホスト手段は、エンクレーブホスト手段及びユーザモードインタフェース手段の両方に露出しているプロキシにシステムコールを発行し、ユーザモードインタフェース手段はシステムコールをインターセプトし、ユーザモードインタフェース手段は、システムコールを解放することにより、バッファデータインジケータを少なくとも部分的に提供する。
【０１５５】
実施例７１：この実施例は、実施例７０の特徴のうちいずれか又は全てを含み、プロキシは、カーネルモードのデバイス又はデータ構造を含む。
【０１５６】
実施例７２：この実施例は、実施例７０の特徴のうちいずれか又は全てを含み、ユーザモードインタフェース手段はさらにプロキシを作成する。
【０１５７】
実施例７３：この実施例は、実施例６０から７２のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、セキュアエンクレーブは、少なくとも１つのキーを用いて暗号化操作を行い、コンピューティングデバイスのシャットダウン前に、セキュアエンクレーブは、エンクレーブの計測値を用いて少なくとも部分的にキーを暗号化する。
【０１５８】
実施例７４：この実施例は、実施例７３の特徴のうちいずれか又は全てを含み、セキュアエンクレーブは、エンクレーブ内で暗号化操作を行う。
【０１５９】
実施例７５：この実施例は、実施例６０から７４のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、セキュアエンクレーブは、暗号化操作をインプレースで行い、これにより処理済みデータは、共有バッファ内の対応する未処理データの部分と同じ位置に書き込まれる。
【０１６０】
実施例７６：この実施例は、実施例６０から７５のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、共有バッファはリングバッファである。
【０１６１】
実施例７７：この実施例は、実施例７６の特徴のうちいずれか又は全てを含み、ユーザモードインタフェース手段が未処理データをリングバッファのキューに入れる間に、エンクレーブホスト手段は、未処理データをリングバッファから読み出し、エンクレーブに提供するよう動作可能である。エンクレーブホスト手段はさらに、セキュアエンクレーブにより作り出された処理済みデータをリングバッファのキューに入れるよう動作可能である。エンクレーブホスト手段が処理済みデータをリングバッファのキューに入れる間に、ユーザモードインタフェース手段はさらに、処理済みデータをリングバッファから除去するよう動作可能である。
【０１６２】
実施例７８：この実施例は、実施例６０から７７のいずれか１つの実施例の特徴のうちいずれか又は全てを含み、エンクレーブホスト手段はさらに、セキュアエンクレーブにより実行される暗号化操作の少なくとも一部が完了したことを、ユーザモードインタフェース手段に示す完了インジケータを提供するよう動作可能である。
【０１６３】
実施例７９：この実施例は、実施例７８の特徴のうちいずれか又は全てを含み、エンクレーブホスト手段は、エンクレーブホスト手段及びユーザモードインタフェース手段の両方に露出しているプロキシを対象とするシステムコールを発行することにより、少なくとも部分的に完了インジケータを提供する。
【０１６４】
実施例８０：この実施例は、実施例７９の特徴のうちいずれか又は全てを含み、プロキシは、カーネルモードのデバイス又はデータ構造を含む。
【０１６５】
実施例８１：この実施例によれば、ユーザモードで実行されるエンクレーブを用いて暗号化操作を強化するためのコンピュータ可読命令を含む少なくとも１つのコンピュータ可読媒体が提供され、これはコンピューティングデバイスのプロセッサにより実行されると、実施例２２から４０のいずれか１つの実施例に記載の方法をコンピューティングデバイスに行わせる。
【０１６６】
実施例８２：この実施例によれば、実施例２２から４０のいずれか１つの実施例に記載の方法を行う手段を含む装置が提供される。
【０１６７】
本明細書で利用されている用語及び表現は、限定の用語としてではなく説明の用語として用いられており、そのような用語及び表現の使用において、示され説明された特徴（又はその一部）のあらゆる均等物を除外する意図はなく、特許請求の範囲内で様々な変更が可能であることが認識される。したがって、特許請求の範囲は、そのような均等物の全てを包含することが意図されている。
【図１】
0006682752.tif 000002
【図２】
0006682752.tif 000003
【図３】
0006682752.tif 000004
【図４】
0006682752.tif 000005
【図５】
0006682752.tif 000006