(57)【特許請求の範囲】
【請求項１】
プロセッサが仮想マシン（ＶＭ）を実行している間にＶＭの状態を定義するためのレジスタを実装する前記プロセッサ上で動作する前記ＶＭの終了条件を検出することであって、前記終了条件は、前記ＶＭが前記プロセッサ上での実行から削除され、前記プロセッサの制御が前記ＶＭのハイパーバイザに戻されることを示す、ことと、
前記終了条件を検出したことに応じて、前記レジスタの内容を、前記ＶＭの前記ハイパーバイザがアクセスできない第１のデータ構造に記憶することと、
前記終了条件を検出したことに応じて及び前記終了条件が非自動終了であることに応じて、前記終了条件を前記ＶＭに認識させることを要求する例外ハンドラを、前記ＶＭを用いてインスタンス化することであって、前記例外ハンドラは、前記レジスタのサブセットを選択するように構成されている、ことと、
前記例外ハンドラによって、前記レジスタのサブセットの内容を前記ハイパーバイザに選択的に公開することと、
前記レジスタのサブセットの内容を前記ハイパーバイザに公開したことに応じて、前記例外ハンドラによって、前記プロセッサ上での実行から前記ＶＭを削除するための終了プロセスを開始するための終了コマンドを発行することと、を含む、
方法。
【請求項２】
前記レジスタの内容を前記第１のデータ構造に記憶することは、前記レジスタの内容を、前記ハイパーバイザがアクセスできないメモリ位置に記憶することを含む、請求項１に記載の方法。
【請求項３】
前記レジスタの内容を前記第１のデータ構造に記憶することは、前記レジスタの内容を前記第１のデータ構造に記憶する前に、ハードウェア暗号化モジュールを使用して前記レジスタの内容を暗号化することを含む、請求項１に記載の方法。
【請求項４】
前記レジスタのサブセットの内容を選択的に公開することは、前記レジスタのサブセットの内容を、前記ハイパーバイザに見える第２のデータ構造に記憶することを含む、請求項１に記載の方法。
【請求項５】
前記終了条件が、前記終了条件を前記ＶＭに認識させる必要のない自動終了であることに応じて、前記例外ハンドラをインスタンス化しないことをさらに含む、請求項４に記載の方法。
【請求項６】
前記ハイパーバイザに公開された前記第２のデータ構造内の前記レジスタのサブセットの内容に基づいて、前記ＶＭの前記終了プロセスを完了することをさらに含む、請求項５に記載の方法。
【請求項７】
前記ＶＭの前記終了プロセスを完了することは、前記第２のデータ構造内の前記レジスタのサブセットの内容のうち少なくとも１つを変更することを含む、請求項６に記載の方法。
【請求項８】
前記終了プロセスを完了した後に前記プロセッサ上で前記ＶＭの実行を開始することに応じて、前記レジスタの内容を前記第１のデータ構造からロードすることと、
前記第２のデータ構造内の前記レジスタのサブセットの内容のうち変更された少なくとも１つに対応するように、前記レジスタ内の少なくとも１つの値を変更することと、をさらに含む、請求項７に記載の方法。
【請求項９】
前記レジスタの内容を前記第１のデータ構造からロードすることは、前記第１のデータ構造内の前記レジスタの内容に基づいて計算されたチェックサムが、事前に記憶されたチェックサムと一致することに応じて、前記レジスタの内容を前記第１のデータ構造からロードすることを含む、請求項８に記載の方法。
【請求項１０】
プロセッサであって、仮想マシン（ＶＭ）が前記プロセッサ上で実行されている間に前記ＶＭの状態を定義するためのレジスタを実装するプロセッサを備え、
前記プロセッサは、前記ＶＭの終了条件であって、前記ＶＭが前記プロセッサ上での実行から削除され、前記プロセッサの制御が前記ＶＭのハイパーバイザに戻されることを示す終了条件を検出し、前記プロセッサは、前記終了条件を検出したことに応じて、前記レジスタの内容を、前記ＶＭの前記ハイパーバイザがアクセスできない第１のデータ構造に記憶し、前記ＶＭは、前記終了条件を検出したことに応じて及び前記終了条件が非自動終了であることに応じて、前記終了条件を前記ＶＭに認識させることを要求する例外ハンドラをインスタンス化し、前記例外ハンドラは、前記レジスタのサブセットを選択するように構成されており、前記例外ハンドラは、前記レジスタのサブセットの内容を前記ハイパーバイザに選択的に公開するように構成されており、前記例外ハンドラは、前記レジスタのサブセットの内容を前記ハイパーバイザに公開したことに応じて、前記プロセッサ上での実行から前記ＶＭを削除するための終了プロセスを開始するための終了コマンドを発行するように構成されている、
装置。
【請求項１１】
前記プロセッサは、前記レジスタの内容を、前記ハイパーバイザがアクセスできない位置に記憶する、請求項１０に記載の装置。
【請求項１２】
前記レジスタの内容を前記第１のデータ構造に記憶する前に前記レジスタの内容を暗号化するハードウェア暗号化モジュールをさらに備える、請求項１０に記載の装置。
【請求項１３】
前記ＶＭは、前記レジスタのサブセットの内容を、前記ハイパーバイザに見える第２のデータ構造に記憶することによって、前記レジスタのサブセットの内容を選択的に公開する、請求項１０に記載の装置。
【請求項１４】
前記ＶＭは、前記終了条件が、前記終了条件を前記ＶＭに認識させる必要のない自動終了であることに応じて、前記例外ハンドラをインスタンス化しない、請求項１３に記載の装置。
【請求項１５】
前記ハイパーバイザは、前記ハイパーバイザに公開された前記第２のデータ構造内の前記レジスタのサブセットの内容に基づいて、前記ＶＭの前記終了プロセスを完了する、請求項１４に記載の装置。
【請求項１６】
前記ハイパーバイザは、前記第２のデータ構造内の前記レジスタのサブセットの内容のうち少なくとも１つを変更する、請求項１５に記載の装置。
【請求項１７】
前記プロセッサは、前記終了プロセスを完了した後に前記プロセッサ上で前記ＶＭの実行を開始することに応じて、前記レジスタの内容を前記第１のデータ構造からロードし、前記例外ハンドラは、前記第２のデータ構造内の前記レジスタのサブセットの内容のうち変更された少なくとも１つに対応するように、前記レジスタ内の少なくとも１つの値を変更するように構成されている、請求項１６に記載の装置。
【請求項１８】
前記プロセッサは、前記第１のデータ構造内の前記レジスタの内容に基づいて計算されたチェックサムが、事前に記憶されたチェックサムと一致することに応じて、前記レジスタの内容を前記第１のデータ構造からロードする、請求項１７に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して処理システムに関し、特に、処理システムにおける情報セキュリティに関する。
【背景技術】
【０００２】
単一プロセッサのハードウェアを使用して、別個独立したプロセッサをエミュレートする１つ以上の仮想マシン（ＶＭ）を実装することができる。例えば、プロセッサ内の処理ユニット、メモリ及び他のハードウェアを一緒に使用して、複数のＶＭを実装することができ、各ＶＭは、処理ユニットにロードされたときに完全なオペレーティングシステムを実行することができる完全なシステムプラットフォームとして機能する。プロセッサは、例えば、メモリの一部を異なるＶＭに割り当てること、処理ユニット上で実行するＶＭをロードすること、又は、ＶＭ終了プロセスを処理することによって、ＶＭ間でハードウェアを分割するハイパーバイザを実装する。ハイパーバイザは、異なるＶＭを隔離して、ＶＭのセキュリティと完全性とを保護する。例えば、従来のハイパーバイザは、各ＶＭに対して別個のメモリページテーブル又は他の論理エンティティを定義することによって、異なるＶＭを互いに隔離する。ただし、異なるＶＭに関連付けられたデータは、ハイパーバイザにとって可視状態のままであるため、ハイパーバイザがセキュリティ上の脆弱性となり得る。したがって、ＶＭの所有者がハイパーバイザ及びクラウド環境を信頼しない又は信頼できないパブリッククラウドモデル等の特定の環境では、ＶＭデータをハイパーバイザに対して制限なく可視化できるようにする信頼モデルは望ましくない。例えば、悪意のあるユーザは、処理システム上のハイパーバイザ又は他のＶＭの動作を変更及び制御するのを可能にするハイパーバイザー内の欠陥又はバグを特定し、他のＶＭに記憶されたプライベートデータを公開する可能性がある。
【０００３】
本開示は、添付の図面を参照することによってより良く理解され、その多くの特徴及び利点が当業者に明らかとなるであろう。異なる図面において同じ符号を使用することは、類似又は同一の項目を示している。
【図面の簡単な説明】
【０００４】
【図１】いくつかの実施形態による、ＶＭに関連する状態情報の隔離を提供する処理システムを示す図である。
【図２】いくつかの実施形態による、ＶＭの情報の暗号隔離（cryptographic isolation）を提供するための処理システムの例示的な動作を示す図である。
【図３】いくつかの実施形態による、仮想マシン通信ブロック（ＶＭＣＢ）のブロック図である。
【図４】いくつかの実施形態による、ＶＭの情報の暗号隔離を提供し、状態情報の一部を選択的に公開するための処理システムの例示的な動作を示す図である。
【図５】いくつかの実施形態による、ＶＭの情報を復号する処理システムの例示的な動作を示す図である。
【図６】いくつかの実施形態による、プロセッサ上のＶＭの実行を終了する方法を示す図である。
【図７】いくつかの実施形態による、プロセッサ上のＶＭの実行を開始する方法を示す図である。
【図８】いくつかの実施形態による、自動終了条件に応じて、プロセッサ上のＶＭの実行を終了する方法を示す図である。
【図９】いくつかの実施形態による、終了プロセスのタイプに基づいてＶＭの終了プロセスを処理する方法のフロー図である。
【発明を実施するための形態】
【０００５】
処理システムにおいて仮想マシン（ＶＭ）を実装するために使用されるソフトウェア、及び、ＶＭによって生成されるデータ（総称してＶＭ情報と呼ばれ得る）は、セキュアなＶＭ情報を暗号化して隔離するために、処理システムのメモリアクセスパスにハードウェア暗号化モジュールを採用することによって、保護し得る。ハードウェア暗号化モジュールは、ＶＭによってメモリに書き込まれたデータを暗号化するか、ＶＭによってメモリから読み込まれたデータを復号化する。したがって、ハイパーバイザが使用できない正しい暗号化／復号キーがなければ、ＶＭによってメモリに記憶されたデータに有意義にアクセスすることができない。ただし、本明細書で説明する追加のセキュリティ対策がなければ、ＶＭの実行中にプロセッサの状態を定義するレジスタ値がハイパーバイザに見えるままである。したがって、ハイパーバイザは、状態情報の漏えい、又は、状態情報を変更して意図しない動作を引き起こす制御フロー攻撃に対して脆弱である可能性がある。ＶＭによって開始されるいくつかのタイプの動作を実行するために、いくつかの状態レジスタの内容がハイパーバイザによって使用される必要があるので、ハイパーバイザからレジスタ値を（例えば、レジスタ値を暗号化することによって）単に隠すだけでは、ＶＭの機能が大幅に制限されるか、ＶＭが動作不能になる。
【０００６】
ハイパーバイザからＶＭの状態を定義する状態レジスタの内容を隔離し、１つ以上の関連する状態レジスタの内容をハイパーバイザに選択的に公開することによって、ＶＭのセキュリティが向上する。いくつかの実施形態では、ハードウェア暗号化モジュールは、状態レジスタの内容を、データ構造（本明細書では「仮想マシン制御ブロック」又は「ＶＭＣＢ」と呼ばれる）に書き込まれるときに暗号化し、データ構造から読み出されるときに復号化する。次に、ＶＭは、復号された値がハイパーバイザに見えるように、別のデータ構造（本明細書では「ゲストハイパーバイザ通信ブロック」又は「ＧＨＣＢ」と呼ばれる）の状態レジスタの内容を選択的に公開し得る。例えば、ＶＭは、ワールドスイッチをもたらす終了条件をトリガし得る。本明細書で使用される場合、「終了条件」という用語は、ハーバー（harbor）に、ハイパーバイザへ制御を戻させるあらゆるイベントを示す。本明細書で使用される場合、「ワールドスイッチ」という用語は、ＶＭ又はハイパーバイザを実行から削除し、別のＶＭ又はハイパーバイザの実行を開始することを指す。ＶＭが終了する前に、プロセッサは、ＶＭによって実装された例外ハンドラに例外を発行する。例外ハンドラは、ハイパーバイザに見える状態情報の一部を決定し、ＶＭがこの部分をＧＨＣＢに公開する。次に、ＶＭは終了プロセスを開始し、ＶＭの状態レジスタの内容が暗号化され、終了条件を開始するＶＭに応じてＶＭＣＢに書き戻される。プロセッサがハイパーバイザをロードすると、ＧＨＣＢ内の状態情報の可視部分を使用してＶＭの終了プロセスが完了する。
【０００７】
ハイパーバイザは、別のワールドスイッチを開始して、ＶＭをプロセッサにロードできる。ＶＭの状態レジスタの内容は、ワールドスイッチ中にプロセッサハードウェアによって復号され、プロセッサ内の状態レジスタに書き込まれる。ハイパーバイザは、終了プロセスを完了している間にＧＨＣＢに記憶された状態情報の内容を変更している可能性があるため、この変更に基づいてＶＭの状態レジスタの内容を更新し得る。例えば、ハードウェア暗号化モジュールは、ＶＭＣＢに記憶された状態レジスタの内容を復号し、例外ハンドラは、ＧＨＣＢに記憶された情報に基づいて値を更新し得る。いくつかの実施形態では、ＶＭＣＢに記憶されている暗号化された状態情報のチェックサムが計算され、状態情報をプロセッサに戻す前にＶＭＣＢの状態情報を検証するために使用され得る。
【０００８】
図１は、いくつかの実施形態による、ＶＭに関連する状態情報の隔離を提供する処理システム１００を示す図である。処理システム１００は、プロセッサ１０２と、メモリ１０３と、を含む。処理システム１００は、例えばサーバ、パーソナルコンピュータ、タブレット、セットトップボックス、ゲームシステム等の様々な電子装置の何れかに組み込むことができる。プロセッサ１０２は、定義されたタスクを実行するためにプロセッサ１０２の回路を操作する命令セット（例えば、コンピュータプログラム）を実行するように動作する。メモリ１０３は、プロセッサ１０２によって使用されるデータを記憶することによって、これらのタスクの実行を容易にし、プロセッサ１０２によるアクセスのために命令セットをさらに記憶することができる。メモリ１０３は、ランダムアクセスメモリ（ＲＡＭ）、フラッシュメモリ若しくはハードディスクドライブ（ＨＤＤ）等の不揮発性メモリ、又は、これらの組み合わせとすることができる。
【０００９】
命令セットを実行する過程で、プロセッサ１０２は、メモリ１０３にデータを記憶するための書き込み要求、及び、メモリ１０３からデータを読み出すための読み出し要求を含むメモリアクセス要求を生成する。各メモリアクセス要求は、メモリアクセス要求の対象となるメモリ１０３の位置を示すメモリアドレスを含む。読み出し要求に応じて、メモリ１０３は、読み出し要求のメモリアドレスに対応する位置に記憶された情報（データ又は命令）を取り出し、その情報をプロセッサ１０２に提供する。書き込み要求に応じて、メモリ１０３は、書き込み要求のメモリアドレスに対応する位置に要求の書き込み情報を記憶する。
【００１０】
プロセッサ１０２は、セキュリティモジュール１０４を含む。図示した実施形態では、セキュリティモジュール１０４がプロセッサ１０２に実装されているが、セキュリティモジュールのいくつかの実施形態では、プロセッサ１０２の外部に存在し、バスを介してプロセッサ１０２に接続されてもよい。セキュリティモジュール１０４は、汎用プロセッサコア、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、プロセッサコアの動作モード、又は、処理システム１００のセキュリティ操作（プロセッサ１０２で実行されるエンティティ（例えば、ＶＭ、ハイパーバイザ、コンピュータプログラム等）の登録、実行されるエンティティのセキュリティキーの生成及び識別、セキュリティ操作のための処理システム１００の認証等を含む）を実行するように設計及び構成された他のモジュールとして実装し得る。いくつかの実施形態では、セキュリティモジュール１０４は、攻撃を受けやすい動作を実行することができないように、その動作を実行することが許可される前にセキュアな登録プロセスを受け、その動作をセキュリティ動作のみに制限することができる。本明細書でさらに説明するように、セキュリティモジュール１０４のいくつかの実施形態では、処理システム１００で実行されるように登録されたエンティティを識別するセキュリティキーを生成することによる処理システム１００での情報の暗号隔離、及び、かかる暗号隔離を可能にする他の動作をサポートする。
【００１１】
命令の実行を容易にするために、プロセッサ１０２は、プロセッサコア１０５，１０６等の１つ以上プロセッサコアと、キャッシュ１０７，１０８，１０９等の１つ以上のキャッシュと、ノースブリッジ１１０と、セキュリティモードレジスタ１１１と、を含む。プロセッサコア１０５，１０６は、個別に又は同時に命令を実行する処理ユニットである。いくつかの実施形態では、プロセッサコア１０５，１０６の各々は、命令をフェッチし、フェッチされた命令を対応する演算にデコードし、処理システム１００のリソースを使用してメモリアクセス要求を含む動作を実行する個別の命令パイプラインを含む。各プロセッサコア１０５，１０６は、各メモリアクセス要求を、メモリアクセス要求に対応する情報が暗号保護のために指定されていることを示すセキュアメモリアクセス要求、又は、メモリアクセス要求に対応する情報が暗号保護のために指定されていないことを示す非セキュアメモリアクセス要求の２つのタイプの何れかに識別するように構成されている。
【００１２】
キャッシュ１０７，１０８，１０９は、メモリ１０３に記憶された情報のサブセットを記憶するメモリコンポーネントであり、プロセッサコア１０５，１０６にそれぞれの情報サブセットへのより高速なアクセスを提供する。明確さのために、キャッシュ１０９は単一のキャッシュとして示されているが、いくつかの実施形態では、キャッシュ１０９は、プロセッサ１０２のメモリ階層の異なるレベルに存在する異なるキャッシュを含む、複数のキャッシュを表すことができる。キャッシュ１０９は、メモリアクセス要求を受信し、そのストレージアレイ（図１では省略）がメモリアクセス要求の対象となる情報を記憶しているかどうかを識別する。記憶している場合、キャッシュ１０９は、キャッシュヒットを示し、ストレージアレイにおけるメモリアクセス要求を満たす。キャッシュ１０９がターゲットとなる情報を記憶していない場合、キャッシュミスを示し、ノースブリッジ１１０にメモリアクセス要求を提供する。
【００１３】
ノースブリッジ１１０は、プロセッサ１０２がメモリ１０３と通信するためのインタフェースを提供するメモリコントローラである。いくつかの実施形態では、ノースブリッジ１１０は、入出力コントローラ（例えばサウスブリッジ、図示省略）とのインタフェース、及び、異なるプロセッサコア（例えば、プロセッサコア１０５，１０６及びグラフィックス処理ユニット等の他のプロセッサコア（図示省略））間のインタフェースを提供する等の他の機能を実行することができる。ノースブリッジ１１０は、メモリコントローラとしての能力において、キャッシュ１０９からメモリアクセス要求を受信し、これらの要求のメモリ１０３への提供を制御する。また、ノースブリッジ１１０は、メモリアクセス要求に対する応答をメモリ１０３から受信し、応答のキャッシュ１０９への提供を制御する。いくつかの実施形態では、ノースブリッジ１１０は、処理システム１００の入出力装置（図示省略）からメモリアクセス要求（例えば、ダイレクトメモリアクセス要求）を受信し、これらのメモリ１０３への提供を制御することができる。
【００１４】
プロセッサコア１０５，１０６の各々は、対応するプロセッサコアの状態を定義する値を記憶する、１つ以上の対応するレジスタの対応するセットを含む。レジスタ１１５は、プロセッサコア１０５用のレジスタのセットを表し、レジスタ１１６は、プロセッサコア１０６用のレジスタのセットを表す。プロセッサ１０２のいくつかの実施形態では、ハイパーバイザの制御下で複数のＶＭを（同時に又は独立して）実行するように構成されている。ハイパーバイザ及び各ＶＭは、プロセッサコア１０５，１０６の状態を定義するレジスタ１１５，１１６に対応する値のセットによって定義される。したがって、レジスタ１１５，１１６の値は、プロセッサ１０２又はプロセッサコア１０５，１０６がハイパーバイザ又は１つ以上のＶＭを実行しているときのハイパーバイザの状態又は１つ以上のＶＭの状態を表す。レジスタ１１５，１１６の値は、ハイパーバイザ又はＶＭによって実行されているプログラムの命令ポインタ、ハイパーバイザ又はＶＭの終了コード、浮動小数点データ、浮動小数点タグ又は状態情報、浮動小数点制御情報、ｘ８７レジスタ状態、ＸＭＭレジスタ状態、ＹＭＭレジスタ状態、他のレジスタが有効な情報を含むかどうかを示すビットマップ、レジスタ１１５，１１６の値に基づいて予め計算されたチェックサムの位置等を示すために使用され得る。
【００１５】
レジスタ１１５，１１６に記憶された値は、プロセッサ１０２上で現在実行中のエンティティに応じて、メモリ１０３とレジスタ１１５，１１６との間を移動し得る。例えば、「ワールドスイッチ」を使用して、プロセッサ１０２上の第１のＶＭの実行を終了又は中断し、第２のＶＭ（又はハイパーバイザ）をプロセッサ１０２上にロードして実行し得る。第１のＶＭの状態を定義するためにレジスタ１１５，１１６に記憶された値は、レジスタ１１５，１１６からメモリ１０３に移動され、第２のＶＭの状態を定義する状態レジスタ値は、メモリ１０３から対応するレジスタ１１５，１１６に移動される。第１のＶＭ又は第２のＶＭの状態に応じて、値は、本明細書で述べるように、レジスタ１１５，１１６の異なるサブセットの内外に移動されてもよい。
【００１６】
少なくとも１つの実施形態では、処理システム１００は、各ＶＭがハイパーバイザ又は他の任意のＶＭを信頼しない又は信頼できない信頼モデルを想定する。したがって、異なるＶＭに関連する情報は、情報がハイパーバイザ及び他のＶＭからアクセスできないように、当該情報をメモリ１０３のセキュア領域１２０に記憶することによって、他のＶＭ及びハイパーバイザから隔離され得る。隔離された情報は、ＶＭに関連する命令の実行中に、メモリ１０３に書き込まれる情報又はメモリ１０３から読み出される情報を含み得る。隔離された情報には、ＶＭの状態を表すレジスタの内容も含まれる。したがって、各ＶＭのレジスタの内容は、本明細書では仮想マシン制御ブロック（ＶＭＣＢ）１２１と呼ばれるデータ構造１２１に記憶され得る。例えば、プロセッサ１０２上で実行中のＶＭの終了条件が検出された場合、レジスタ１１５，１１６の値がＶＭＣＢ１２１に記憶され、この値がハイパーバイザ及び他のＶＭから隔離される。レジスタ１１５，１１６の内容のサブセットは、例えば、終了条件の検出に応じて、開始されたＶＭ終了プロセスを完了するために、ハイパーバイザによって必要とされてもよい。したがって、ＶＭは、本明細書ではゲストハイパーバイザ通信ブロック（ＧＨＣＢ）１２２と呼ばれる別のデータ構造１２２に値を記憶することによって、レジスタのサブセットの内容をハイパーバイザ（又は他のＶＭ）に選択的に公開することができる。
【００１７】
いくつかの実施形態では、ハイパーバイザ又は他のＶＭから物理的にアクセスできないメモリ位置に情報を記憶することによって、ハイパーバイザ及び他のＶＭから情報を隔離することができる。また、ハイパーバイザ又は他のＶＭにとって未知の１つ以上のセキュリティキーを使用して、データ構造１２１に記憶されたデータを暗号化することによって、ＶＭに関連する情報をハイパーバイザ及び他のＶＭから隔離することができる。例えば、レジスタ１１５，１１６の内容は、レジスタの内容をデータ構造１２１に記憶する前にハードウェア暗号化モジュールを使用して暗号化され、これにより、データ構造１２１に記憶された情報に対してハイパーバイザ又は他のＶＭがアクセスできない状態にする。データ構造１２１の位置の暗号化又は隠蔽は、ハイパーバイザ及び他のＶＭから情報を隔離するために、一緒に又は別々に使用されてもよい。
【００１８】
情報の暗号隔離を提供するために、ノースブリッジ１１０は、指定された暗号規格に従って及びキー１２６に基づいて、情報を暗号化及び復号化するように動作するハードウェア実装された暗号化モジュール１２５を含む。いくつかの実施形態では、暗号化モジュール１２５は、高度暗号化標準（ＡＥＳ）の暗号化及び復号化を採用しているが、他の実施形態では、暗号化モジュール１２５は、他の暗号化／復号化技術を採用してもよい。暗号化モジュール１２５のいくつかの実施形態では、（例えば、ワイヤ、トレース、トランジスタ及び他の要素の、固定された所定のセットとして）ハードコードされたロジック、ＦＰＧＡ等のプログラマブルロジック、又は、ハードコードされたロジックとプログラマブルロジックとの組み合わせを用いて実装されてもよい。
【００１９】
書き込み要求を受信したことに応じて、ノースブリッジ１１０は、要求がセキュアメモリアクセス要求であるか、非セキュアメモリアクセス要求であるか、を識別する。書き込み要求が非セキュアメモリアクセス要求である場合、ノースブリッジ１１０は、暗号化モジュール１２５をバイパスし、書き込まれる情報を暗号化せずに書き込み要求をメモリ１０３に提供する。書き込み要求がセキュアメモリアクセス要求である場合、ノースブリッジ１１０は、メモリアクセス要求を生成したエンティティ（例えば、プログラム、ＶＭ、ソフトウェアサービス等）に割り当てられたキー１２６の１つを識別する。暗号化モジュール１２５は、選択されたキーを使用して、書き込まれる情報を暗号化し、暗号化された情報と共に書き込み要求を、記憶のためにメモリ１０３に提供する。いくつかの実施形態では、暗号化モジュール１２５は、選択されたキーとメモリアクセス要求の物理アドレスとの両方を、対応する情報の暗号化及び復号化に使用して、ブロック移動攻撃を防止する。いくつかの実施形態では、暗号化モジュール１２５は、プロセッサ１０２における制御ビット（図示省略）の状態に基づいて、暗号化及び復号化のために物理アドレスを使用するかどうかを識別する。制御ビット状態は、セキュリティモジュール１０４によって設定することができる。
【００２０】
ノースブリッジ１１０は、読み出し要求を受信したことに応じて、要求をメモリ１０３に提供し、その後、要求に応答する情報を受信する。ノースブリッジ１１０が読み出し要求を非セキュアメモリアクセス要求として識別した場合、暗号化モジュール１２５をバイパスし、読み出し情報を暗号化せずにキャッシュ１０８に提供する。ノースブリッジ１１０が読み出し要求をセキュアメモリアクセス要求として識別した場合、読み出しアクセス要求を生成したエンティティに割り当てられたキー１２６の１つを識別し、暗号化モジュール１２５が読み出し情報を復号化する。ノースブリッジ１１０は、復号された読み出し情報を、記憶のためにキャッシュ１０８に提供する。場合によっては、ノースブリッジ１１０は、キャッシュ１０８への情報の提供をバイパスし、対応する読み出しアクセス要求を生成したプロセッサコアに対して、復号された読み出し情報を直接提供する。
【００２１】
また、暗号化モジュール１２５は、レジスタ１１５，１１６に記憶された値を暗号化及び復号化するために使用される。ノースブリッジ１１０は、プロセッサ１０２で実行中のＶＭの終了条件を検出したことに応じて、ＶＭに割り当てられたキー１２６の１つを識別する。暗号化モジュール１２５は、選択されたキーを使用して、レジスタ１１５，１１６に記憶された値を暗号化し、暗号化された値を、記憶のためにデータ構造１２１のメモリ１０３に提供する。ノースブリッジ１１０は、実行のためにプロセッサ１０２にＶＭをロードする要求を検出したことに応じて、ＶＭに割り当てられたキー１２６の１つを識別する。ノースブリッジ１１０は、データ構造１２１に記憶されている暗号化された状態情報に対する要求を提供し、要求を提供したことに応じて、暗号化された状態情報を受信する。暗号化モジュール１２５が、選択されたキーを使用して、暗号化された状態情報を復号化し、次いで、ノースブリッジ１１０が、復号された状態情報を使用して、対応するレジスタ１１５，１１６を設定することによって、プロセッサコア１０５，１０６の状態がＶＭの状態を表す。
【００２２】
レジスタ１１５，１１６の値は、暗号化されていない値をデータ構造１２２に記憶することによって（例えば、ハイパーバイザ又は他のＶＭに）公開されてもよい。例えば、プロセッサ１０２は、プロセッサ１０２上で実行中のＶＭの終了条件を検出したことに応じて、例外を発行することができる。例外は、終了条件のタイプに基づいて発行され得る。例えば、自動終了では例外が発行されず、非自動終了では例外が発行され得る。自動終了は、ＶＭが終了を認識することを必要とせずに、ＶＭがＶＭ例外ハンドラをインスタンス化しない終了条件である。自動終了には、プロセッサ上のＶＭを定義する状態情報を変更する予定のないイベントが含まれ得る。非自動終了は、終了条件が発生したことをＶＭに通知する必要のある終了条件である。ＶＭ内の例外ハンドラは、例外を検出し、それに応じて、公開されるレジスタ１１５，１１６内の値のサブセットを決定し得る。例えば、値のサブセットは、ハイパーバイザがＶＭの終了プロセスを完了するために必要とする状態情報に対応し得る。したがって、ノースブリッジ１１０は、レジスタ１１５，１１６内の値のサブセットに対応する暗号化されていない値をデータ構造１２２に提供し、これにより、ハイパーバイザ又は他のＶＭが値のサブセットに対してアクセス可能にし得る。
【００２３】
いくつかの実施形態では、セキュリティモードレジスタ１１１は、暗号化モジュール１２５の動作を制御するために使用される。セキュリティモードレジスタ１１１は、プロセッサ１０２上で実行され得る各ＶＭのガードモードオンフィールド１３０と、ガードモードアクティブフィールド１３５と、拡張ガードモードフィールド１４０と、を含む。いくつかの実施形態では、異なるセキュリティモードレジスタ１１１をプロセッサコア１０５，１０６に実装することができる。ノースブリッジ１１０は、ガードモードオンフィールド１３０が、関連するＶＭの特定の状態（例えば、ネゲート状態）にあることに応じて、セキュアメモリアクセス要求又はデータ構造１２１へのメモリアクセス要求を含む、関連するＶＭによる全てのメモリアクセス要求に対して、暗号化モジュール１２５をバイパスする。これにより、処理システム１００は、プロセッサ１０２で実行されている全てのプログラムに対して、暗号化及び復号化がバイパスされるモードで動作することが可能になる。ノースブリッジ１１０は、ガードモードオンフィールド１３０が異なる特定の状態（例えば、アサート状態）にあることに応じて、ガードモードアクティブフィールド１３５の状態を識別する。ノースブリッジ１１０は、ガードモードアクティブフィールド１３５が特定の状態（例えば、ネゲート状態）にあることに応じて、ＶＭに関連する受信メモリアクセス要求（セキュアメモリアクセス要求又はデータ構造１２１へのメモリアクセス要求を含む）に対して暗号化モジュール１２５をバイパスし、ガードモードアクティブフィールド１３５が異なる状態（例えば、アサート状態）にあることに応じて、非セキュアメモリアクセス要求に対してのみ暗号化モジュール１２５をバイパスする。拡張ガードモードフィールド１４０は、非自動終了等の特定のタイプの終了条件に応じて、例外が発行されるかどうかを制御するために使用されてもよい。
【００２４】
図２は、いくつかの実施形態による、ＶＭの情報の暗号隔離を提供するための処理システム１００の例示的な動作を示す図である。図示した例では、プロセッサ１０２は、ＶＭ２００及びＶＭ２０１を同時に実行する。また、プロセッサ１０２は、ハイパーバイザ２０２を実行して、ＶＭ２００，２０１と処理システム１００のハードウェアとの間のインタフェースを提供する。それらの実行中に、ＶＭ２００，２０１は、本明細書で説明するように、メモリ１０３からセキュアな情報にアクセス（記憶及び取得）する。ＶＭ２００，２０１の終了条件によって、対応するレジスタ２０５，２０６内の状態情報が、図１に示すデータ構造１２１，１２２に対応するデータ構造２１０，２１１等の対応するセキュアなメモリ位置に記憶される。暗号化モジュール１２５は、データ構造２１０，２１１に記憶されているＶＭ２００，２０１の状態情報が暗号的に隔離されることによって、各ＶＭによってのみアクセス可能になるのを保証する。データ構造２１０，２１１に記憶されている暗号化された情報は、他のＶＭ又はハイパーバイザ２０２から隔離され、アクセスすることができない。レジスタ２０５，２０６内の状態情報は、暗号化されていない情報をデータ構造２１２に記憶することによって選択的に公開することができる。いくつかの実施形態では、異なるデータ構造２１２を異なるＶＭに関連付けることができる。
【００２５】
動作において、プロセッサ１０２で実行することが許可される前に、各ＶＭ２００，２０１は、セキュリティモジュール１０４に登録される。いくつかの実施形態では、ＶＭは次のように登録される。ＶＭの所有者は、例えば、セキュアなハンドシェーキングプロトコルを使用して、セキュリティモジュール１０４とセキュアな通信チャネル（図２では省略）を確立する。「ＶＭＩＤ」と呼ばれる識別値、及び、「ＶＭＫＥＹ」と呼ばれるセキュリティキーが、ＶＭに対して生成される。この生成は、セキュリティモジュール１０４又は別個のセキュリティデバイスで行うことができ、セキュアな通信チャネルを介してセキュリティモジュール１０４に通信することができる。セキュリティモジュール１０４は、ＶＭＫＥＹ値及びＶＭＩＤ値の各々が対応するＶＭに対して一意であることを保証する。ＶＭの所有者は、対応するＶＭのイメージを暗号化（又はセキュリティモジュール１４０に暗号化を依頼する）し、それをハイパーバイザー２０２に提供し、ハイパーバイザ２０２は、暗号化されたイメージをセキュアなデータとしてメモリ１０３に記憶する。
【００２６】
続いて、プロセッサ１０２は、ＶＭを実行する要求を受信する。この要求に応じて、プロセッサ１０２は、要求されたＶＭのＶＭＩＤをセキュリティモジュール１０４に通知する。セキュリティモジュール１０４は、ＶＭＩＤに基づいて、セキュリティキー１２６から要求されたＶＭのセキュリティキーを識別し、セキュリティキーを暗号化モジュール１２５に提供する。図２に示す例では、プロセッサ１０２は、以下においてＶＭ−Ａ２００及びＶＭ−Ｂ２０１と呼ぶことができるＶＭ２００，２０１の両方を実行する要求を受信している。セキュリティモジュール１０４は、ＶＭ−Ａ２００のキー２２０と、ＶＭ−Ｂ２０１のキー２２１と、を暗号モジュール１２５に提供する。ノースブリッジ１１０は、対応するデータ構造２１０，２１１からＶＭ２００，２０１の状態情報を要求し、次に、受信した情報を、対応するキー２２０，２２１を使用して復号する。復号された状態情報は、ＶＭ２００，２０１の状態を定義するために、対応するレジスタ２０５，２０６に記憶される。
【００２７】
それらの実行中に、ＶＭ２００，２０１は、メモリアクセス要求を生成し、それらをノースブリッジ１１０に提供する。ノースブリッジ１１０は、要求のメモリアドレスに含まれる１つ以上のビットに基づいて、メモリアクセス要求がセキュアメモリアクセス要求であるかどうかを識別する。セキュアメモリアクセス要求でない場合、ノースブリッジ１１０は、暗号化モジュール１２５をバイパスし、暗号化も復号化も行わずにメモリアクセス要求を満たす。メモリアクセス要求がセキュアメモリアクセス要求である場合、ノースブリッジ１１０は、メモリアクセス要求によって提供されるメモリアドレス又は他の情報に基づいて、ＶＭ２００，２０１の何れがメモリアクセス要求を生成したかを識別する。暗号化モジュール１２５は、メモリアクセス要求を生成したＶＭに対応するキー２２０，２２１の１つを選択し、選択されたキーを使用して、メモリアクセス情報（読み出しデータ若しくは書き込みデータ）の暗号化（書き込み要求の場合）又は復号化（読み出し要求の場合）を実行する。また、暗号化モジュール１２５は、書き込み要求の復号化、及び、読み出し要求の暗号化を実行してもよい。
【００２８】
１つ以上のＶＭ２００，２０１は、プロセッサで対応するＶＭの実行を終了するプロセスを開始する終了条件を生成することができる。このプロセスは、ＶＭの終了プロセスと呼ばれ得る。終了条件を検出したことに応じて、ノースブリッジ１１０は、１つ以上の対応するレジスタ２０５，２０６に記憶された状態情報にアクセスし、１つ以上の対応するキー２２０，２２１に基づいて暗号化するために状態情報を暗号化モジュール１２５に提供する。次に、ノースブリッジ１１０は、暗号化された情報を、メモリ１０３内の１つ以上の対応するデータ構造２１０，２１１に書き込む。プロセッサ１０２は、終了条件が自動終了又は非自動終了であるかどうかを判別し、終了条件が非自動終了である場合に、終了条件を検出したことに応じて例外を発行する。例外ハンドラは、１つ以上のレジスタ２０５，２０６の値がハイパーバイザ２０２又は他のＶＭ２００，２０１に公開されるかどうかを判別することによって例外に応答する。そうである場合、ノースブリッジ１１０は、暗号化モジュール１２５をバイパスし、レジスタ２０５，２０６のサブセットの暗号化されていない内容をメモリ１０３のデータ構造２１２に書き込む。
【００２９】
上述したように、データの暗号保護はノースブリッジ１１０で行われ、暗号保護に使用されるキーは未知であり、ＶＭ２００，２０１及びハイパーバイザ２０２はアクセスできない。これにより、一方のＶＭが他方のＶＭのセキュア情報にアクセスできなくなる。例えば、終了時に、ＶＭ２００を定義する状態情報がデータ構造２１０に記憶される。状態情報はＶＭ２００に関連付けられているので、暗号化モジュール１２５は、ＶＭ２０１に割り当てられたキー２２１ではなく、ＶＭ２００に割り当てられたキー２２０を使用して状態情報を暗号化する。したがって、ハイパーバイザ２０２及びＶＭ２０１は、正しいキーへのアクセス権を有していないので、暗号化された状態情報を有意義に又は正確に解釈又は復号することができない。したがって、データ構造２１０に記憶された状態情報は、ＶＭ２０１及びハイパーバイザ２０２によるアクセスから暗号的に隔離される。
【００３０】
いくつかの実施形態では、処理システム１００は、セキュリティを強化するためにキー２２０，２２１を定期的に変更する。例えば、セキュリティモジュール１０４は、ＶＭが完全にシャットダウンされたときに（一時停止ではない）、ＶＭの新たなキーを生成し、ＶＭが再スタートしたときに新たなキーを有していることを保証する。セキュリティモジュール１０４は、古いキーの下でメモリ１０３に記憶されたＶＭのセキュア情報について、ＶＭが再スタートしたときにセキュア情報にアクセスできるように、古いキーを使用して当該情報を復号し、新たなキーを使用して情報を再暗号化するようにノースブリッジ１１０に指示することができる。
【００３１】
セキュリティモジュール１０４は、ＶＭが一時停止状態に移行することに応じて、ＶＭの新たなキーを生成することができる。ＶＭの一部（例えば、ゲストオペレーティングシステム）は、ＶＭの暗号化されたデータを記憶するメモリ１０３のメモリページを識別するデータ構造を維持する。ＶＭが一時停止状態に移行することに応じて、セキュリティモジュール１０４は、ノースブリッジ１１０に対して、識別されたメモリページを古いキーを用いて復号し、メモリページを新たなキーを用いて再暗号化するように指示することにより、一時停止状態が終了したときにＶＭがセキュア情報にアクセスできるのを保証する。
【００３２】
図３は、いくつかの実施形態による、仮想マシン通信ブロック（ＶＭＣＢ）の一実施例であるデータ構造３００のブロック図である。データ構造３００は、図１に示すデータ構造１２１、又は、図２に示すデータ構造２１０，２１１のいくつかの実施形態を実装するために使用されてもよい。データ構造３００は、制御状態情報３０１を記憶するフィールドと、図１に示すプロセッサ１０２等のプロセッサ上で実行され得るＶＭの保存状態情報３０２を記憶するフィールドと、を含む。したがって、データ構造３００の情報は、図１に示すレジスタ１１５，１１６等の１つ以上のレジスタからデータ構造３００に記憶されてもよく、データ構造３００から１つ以上のレジスタに書き込まれてもよい。
【００３３】
制御状態情報３０１のいくつかの実施形態では、制御状態情報３０１は、ＶＭに関連するハイパーバイザ及び他のＶＭにアクセスできるように、暗号化されずにデータ構造３００に残される。制御状態情報３０１は、ハイパーバイザに通知されるイベントを示す情報、割り込みがゲストに対して保留中であるかどうかを示す情報等を含むことができる。ハイパーバイザは、制御状態情報３０１を使用してＶＭをプロセッサにロードし、終了プロセスを実行してプロセッサ上でＶＭの実行を終了させる等の動作を実行する。例えば、制御状態情報３０１は、本明細書で述べるように、保存状態情報３０２のサブセットをハイパーバイザに公開するために使用される第２のデータ構造３０５（ＧＨＣＢ等）の位置を示す機械固有レジスタ（ＭＳＲ）の値を含む。ＶＭのいくつかの実施形態は、第２のデータ構造３０５の位置を示すＭＳＲの値を読み書きすることができる。
【００３４】
保存状態情報３０２は、プロセッサ上で実行するときにＶＭの状態を定義するレジスタの暗号化された内容を含む。保存状態情報３０２は、ＶＭによって実行される命令の位置、又は、ＶＭによって最後に実行された命令の位置を示す命令ポインタを含む。保存状態情報３０２のいくつかの実施形態は、ハイパーバイザ又はＶＭの終了コード、他のレジスタが有効情報を含むかどうかを示すビットを含むビットマップ、汎用レジスタ状態情報、浮動小数点タグ若しくは状態情報若しくは浮動小数点制御情報を含む浮動小数点レジスタ状態情報、ｘ８７レジスタ状態情報、ＸＭＭレジスタ状態情報、及び、ＹＭＭレジスタ情報を含む。保存状態情報３０２のいくつかの実施形態は、情報をレジスタからデータ構造３００に移動する前にレジスタに記憶された値に基づいて予め計算されたチェックサム３１０の位置へのポインタも含むことができる。例えば、チェックサム３１０は、図１に示すメモリ１０３内のメモリ位置に記憶されてもよい。チェックサム３１０の値は、レジスタに書き戻された情報がレジスタから以前に保存された情報と同じであることを確認するために使用される。
【００３５】
いくつかの実施形態では、ＶＭの状態は、保存状態情報３０２内のレジスタの内容のサブセットによって定義されてもよい。したがって、ＶＭがプロセッサを終了するときに、保存状態情報３０２のサブセットのみが暗号化され、データ構造２０１に記憶され得る。同じサブセットは、ＶＭの実行がプロセッサ上で開始されたときに復号され、プロセッサ内のレジスタに書き込まれ得る。保存状態情報３０２のサブセットは、ビット３１６，３１７，３１８の対応するアレイ３１５によって示される。例えば、ビット３１６は、ＶＭの状態を定義するために浮動小数点レジスタ状態が使用されることを示すために「１」の値に設定されてもよく、ビット３１７は、ＶＭの状態を定義するためにｘ８７レジスタ状態が使用されることを示すために「１」の値に設定されてもよく、ビット３１８は、ＶＭの状態を定義するためにＸＭＭレジスタ状態が使用されないことを示すために「０」の値に設定されてもよい。アレイ３１５は、機械固有レジスタ（ＭＳＲ）として実装することができる。
【００３６】
図４は、いくつかの実施形態による、ＶＭの情報の暗号隔離を提供し、情報の一部を選択的に公開する処理システム１００の例示的な動作を示す図である。最初に、ＶＭは処理システム１００上で実行されている。処理システム１００は、ＶＭが処理システム上で実行を終了することを示す終了条件を検出する。終了条件を検出したことに応じて、暗号化モジュール１２５は、レジスタ１１５の内容を暗号化し、暗号化した値を第１のデータ構造１２１に記憶する。また、処理システム１００は、終了状態が自動終了又は非自動終了を示すかどうかを判別してもよい。終了条件が非自動終了である場合、処理システム１００は、ＶＭ例外ハンドラ４００によって処理され得る例外を発行する。ＶＭ例外ハンドラ４００は、例えば、ハイパーバイザに公開されるレジスタ１１５の内容のサブセットを決定する。例えば、ＶＭ例外ハンドラ４００は、ハイパーバイザによって使用されるレジスタ１１５のサブセットの内容を公開して、ＶＭの終了プロセスを完了することができる。次に、ＶＭ例外ハンドラ４００は、値のサブセットを第２のデータ構造１２２にコピーする。ＶＭ例外ハンドラ４００は、第２のデータ構造１２２に記憶された値のサブセットのコピーが暗号化されずに他のエンティティに公開されるように、暗号化モジュール１２５をバイパスする。
【００３７】
図５は、いくつかの実施形態による、ＶＭの情報を復号する処理システム１００の例示的な動作を示す図である。処理システム１００は、図１に示すプロセッサ１０２等のプロセッサ上でＶＭの実行を開始するコマンドを受信する。暗号化モジュール１２５は、コマンドを受信したことに応じて、第１のデータ構造１２１に記憶された情報の要求を送信し、要求された暗号化情報を受信し、第１のデータ構造１２１から受信した暗号化情報を復号する。復号された情報は、対応するレジスタ１１５に記憶される。ハイパーバイザ等のエンティティは、処理システム１００がコマンドを受信する前に第２のデータ構造１２２に記憶されている変更された情報を有する場合があり、その結果、レジスタ１１５の内容のサブセットは、ハイパーバイザによって行われた変更を反映するように修正される必要がある。例えば、ハイパーバイザは、第２のデータ構造１２２に記憶された情報の内容を変更して、ＶＭの前回の終了プロセスを完了している場合があり、したがって、第２のデータ構造１２２の値に対する変更を認識していない可能性がある。非自動終了の場合、ＶＭ例外ハンドラ５００は、第２データ構造１２２に記憶された情報の要求を送信し、要求された情報を受信し、何れかの情報が変更されたかどうかを判別する。そうであれば、ＶＭ例外ハンドラ５００は、レジスタ１１５内の対応する値を変更することができる。
【００３８】
図６は、いくつかの実施形態による、非自動終了条件に応じて、プロセッサ上のＶＭの実行を終了する方法６００を示す図である。方法６００は、本明細書では非自動終了プロセスとも呼ばれ、図２に示すＶＭ２００，２０１等のＶＭ、図１に示すプロセッサ１０２等のプロセッサ（ＣＰＵ−ＨＷ）、図２に示すハイパーバイザ２０２等のハイパーバイザに実装される。
【００３９】
ブロック６０５では、ＶＭは、プロセッサ上のＶＭの実行を終了するための非自動終了プロセスを開始する終了条件をトリガする。終了条件に応じて、ＶＭは、プロセッサによって検出されるシグナリング６１０を生成し、プロセッサは、終了条件の検出に応じて（ブロック６１５で）例外を生成する。例外のいくつかの実施形態は、図１に示すセキュリティモードレジスタ１１１等のセキュリティモードレジスタに記憶された情報に基づいてイネーブルされる。例えば、例外は、図１に示す拡張ガードモードフィールド１４０に記憶された値に基づいてイネーブルされてもよい。例外には、ＶＭによってトリガされる終了条件のエラーコードに対応するエラーコードが含まれ得る。次に、例外シグナリング６２０をＶＭに提供することができる。
【００４０】
本明細書で述べるように、ＶＭのいくつかの実施形態は、ＶＭ例外ハンドラをインスタンス化して、プロセッサによって生成された例外６２０等の例外を検出し処理する。例外６２０を検出したことに応じて、ＶＭ例外ハンドラは、終了プロセスを完了する前に、ＶＭを定義する状態情報の一部を、例えばハイパーバイザに公開するかどうかを決定する。ブロック６２５では、ＶＭ例外ハンドラは、状態情報の一部を公開する。状態情報の一部は、図１に示すレジスタ１１５，１１６又は図２に示すレジスタ２０５，２０６等のプロセッサ内のレジスタのサブセットの内容を含むことができる。状態情報の一部を公開することは、ハイパーバイザが、状態情報の暗号化されていない内容を、アクセス可能なデータ構造に書き込むことを含む。いくつかの実施形態では、状態情報を公開することは、状態情報に関連するエラーコードをデータ構造にコピーすることを含む。ブロック６３０では、ＶＭ例外ハンドラが終了コマンドを生成し、終了コマンドシグナリング６３５がプロセッサに提供される。
【００４１】
終了コマンドシグナリング６３５に応じて、プロセッサは、ブロック６４０において、状態情報を、保護されたメモリ位置に保存する。プロセッサのいくつかの実施形態は、図１に示す暗号化モジュール１２５等の暗号化モジュールを実装して、暗号化された状態情報を図１に示すデータ構造１２１又は図２に示すデータ構造２１０，２１１等のデータ構造に記憶する前に、状態情報を暗号化する。暗号化モジュールは、暗号化モジュール及びＶＭには知られているが、ハイパーバイザを含む他のエンティティには知られていない１つ以上のセキュリティキーを使用して、状態情報を暗号化する。プロセッサのいくつかの実施形態は、ビット３１６〜３１８等のビットによって示されるレジスタのサブセットの内容を、図３に示すアレイ３１５に保存することができる。
【００４２】
ブロック６４５では、プロセッサは、保護されたメモリに状態情報が保存された後に、ハイパーバイザの状態情報をレジスタにロードする。次に、シグナリング６５０は、プロセッサによって提供され、プロセッサレジスタに記憶されたハイパーバイザの状態情報に基づいてプロセッサ上のハイパーバイザの実行を開始することができる。ブロック６５５では、ハイパーバイザは、状態情報の公開された部分に基づいて、ＶＭの終了プロセスを完了する。終了プロセスを完了することは、状態情報の公開された部分の内容を変更することを含むことができる。例えば、ハイパーバイザは、エミュレートされた入出力装置からの戻り値を使用して値を修正することができる。
【００４３】
図７は、いくつかの実施形態による、非自動終了プロセスに続くプロセッサ上のＶＭの実行を開始するための方法７００を示す図である。方法７００は、本明細書では実行プロセスとも呼ばれ、図２に示すＶＭ２００，２０１等のＶＭ、図１に示すプロセッサ１０２等のプロセッサ（ＣＰＵ−ＨＷ）、図２に示すハイパーバイザ２０２等のハイパーバイザに実装される。
【００４４】
ブロック７０５では、ハイパーバイザは、ＶＭのための実行コマンドを発行し、シグナリング７１０をプロセッサに送信して、実行のためにＶＭをプロセッサにロードするプロセスを開始する。ブロック７１５では、プロセッサは、保護されたメモリから状態情報をロードする。例えば、プロセッサ内の実行モジュールは、暗号化された状態情報を保護されたメモリに要求すること、暗号化された状態情報を受信すること、及び、暗号化された状態情報を復号することができる。プロセッサのいくつかの実施形態は、状態情報を復号してプロセッサ内のレジスタに保存する前に、予め計算されたチェックサムに基づいて、暗号化された状態情報を検証し得る。例えば、プロセッサは、図３に示すチェックサム３１０等のチェックサムを使用して、暗号化された状態情報を検証し得る。次に、復号された状態情報は、プロセッサ内のレジスタにロードされ得る。シグナリング７２０は、状態情報がプロセッサのレジスタにロードされたことを示す。
【００４５】
シグナリング７２０に応じて、制御は、ブロック７２５においてＶＭ例外ハンドラに戻される。ＶＭ例外ハンドラは、公開された状態情報の何れかが、例えば図６に示す終了プロセスの一部としてハイパーバイザによって修正されたかどうかを判別する。ブロック７３０では、何れかが検出された場合、ＶＭ例外ハンドラは、修正されている公開された状態情報に対応するレジスタ内の値を修正する。ブロック７３５では、ＶＭ例外ハンドラがＶＭに制御を返し、ＶＭの制御は、プロセッサのレジスタに記憶された状態情報に基づいて実行され得る。
【００４６】
図８は、いくつかの実施形態による、自動終了条件に応じて、プロセッサ上のＶＭの実行を終了する方法８００を示す図である。方法８００は、本明細書では自動終了プロセスとも呼ばれ、図２に示すＶＭ２００，２０１等のＶＭ、図１に示すプロセッサ１０２等のプロセッサ（ＣＰＵ−ＨＷ）、図２に示すハイパーバイザ２０２等のハイパーバイザに実装される。
【００４７】
ブロック８０５では、ＶＭは、プロセッサ上のＶＭの実行を終了するための自動終了プロセスを開始する終了条件をトリガする。終了条件トリガに応じて、プロセッサは、ブロック８２０において状態情報を保護されたメモリ位置に保存する。プロセッサのいくつかの実施形態は、図１に示す暗号化モジュール１２５等の暗号化モジュールを実装して、暗号化された状態情報を図１に示すデータ構造１２１又は図２に示すデータ構造２１０，２１１等のデータ構造に記憶する前に、状態情報を暗号化する。暗号化モジュールは、暗号化モジュール及びＶＭには知られているが、ハイパーバイザを含む他のエンティティには知られていない１つ以上のセキュリティキーを使用して、状態情報を暗号化する。プロセッサのいくつかの実施形態は、ビット３１６〜３１８等のビットによって示されるレジスタのサブセットの内容を、図３に示すアレイ３１５に保存することができる。
【００４８】
ブロック８２５では、プロセッサは、状態情報が保護されたメモリに保存された後に、ハイパーバイザの状態情報をレジスタにロードする。次に、シグナリング８３０は、プロセッサによって提供され、プロセッサレジスタに記憶されたハイパーバイザの状態情報に基づいてプロセッサ上のハイパーバイザの実行を開始することができる。ブロック８３５では、ハイパーバイザはＶＭの終了プロセスを完了する。
【００４９】
ＶＭの実行は、自動終了プロセスに続いてプロセッサ上で開始し得る。ブロック８４０では、ハイパーバイザは、ＶＭのための実行コマンドを発行し、シグナリング８４５をプロセッサに送信して、実行のためにＶＭをプロセッサにロードするプロセスを開始する。ブロック８５０では、プロセッサは、保護されたメモリから状態情報をロードする。例えば、プロセッサ内の実行モジュールは、暗号化された状態情報を保護されたメモリに要求すること、暗号化された状態情報を受信すること、及び、暗号化された状態情報を復号することができる。プロセッサのいくつかの実施形態は、状態情報を復号してプロセッサ内のレジスタに保存する前に、予め計算されたチェックサムに基づいて、暗号化された状態情報を検証し得る。例えば、プロセッサは、図３に示すチェックサム３１０等のチェックサムを使用して、暗号化された状態情報を検証し得る。次に、復号された状態情報は、プロセッサ内のレジスタにロードされ得る。シグナリング８５５は、状態情報がプロセッサのレジスタにロードされ、ＶＭが実行を開始し得ることを示す。
【００５０】
図９は、いくつかの実施形態による、終了プロセスのタイプに基づいてＶＭの終了プロセスを処理する方法９００のフロー図である。方法９００は、図１に示すプロセッサ１０２のいくつかの実施形態で実施することができる。ブロック９０５では、プロセッサは、プロセッサ上で実行中のＶＭによって生成された終了条件を検出する。決定ブロック９１０では、プロセッサは、ＶＭの終了プロセスのタイプを決定する。終了プロセスは、自動終了又は非自動終了であってよい。自動終了は、ＶＭが終了を認識することを必要とせず、ＶＭがＶＭ例外ハンドラをインスタンス化しない終了条件である。自動終了には、プロセッサ上のＶＭを定義する状態情報を変更する予定のないイベントが含まれてもよい。非自動終了は、終了条件が発生したことをＶＭに通知する必要がある終了条件である。ＶＭ例外ハンドラは、非自動終了条件に応じてインスタンス化される。
【００５１】
決定ブロック９１０でプロセッサが自動終了条件を検出した場合、プロセッサは、ブロック９１５において、状態情報を、保護されたメモリに保存する。例えば、プロセッサ内の暗号化モジュールは、本明細書で説明するように、状態情報を暗号化し、暗号化された状態情報をデータ構造に記憶することができる。ブロック９２０では、プロセッサは、状態情報が保護されたメモリに保存された後に、ホストの状態情報をプロセッサレジスタにロードする。例えば、プロセッサは、ＶＭのハイパーバイザを定義する状態情報をロードし得る。ブロック９２５では、終了プロセスは、例えばハイパーバイザによって完了される。
【００５２】
決定ブロック９１０でプロセッサが非自動終了条件を検出した場合、プロセッサは、ブロック９３０において例外を生成する。ＶＭは、非自動終了条件に応じてＶＭ例外ハンドラをインスタンス化し、ＶＭ例外ハンドラは、ハイパーバイザ等の他のエンティティに見えるように状態情報のサブセットを決定する（ブロック９３５）。サブセットは、プロセッサ上のＶＭを定義する状態情報の何れも含まないか、一部又は全てを含むことができる。ブロック９４０では、ＶＭ例外ハンドラは、可視状態情報を、図１に示すデータ構造１２２又は図２に示すデータ構造２１２等の保護されていないメモリに保存する。いくつかの実施形態では、保護されていないメモリの位置は、図３に示す制御状態情報３０１等の暗号化されていない制御状態情報を使用して、ハイパーバイザ等の他のエンティティに示されてもよい。ブロック９４５では、ＶＭ例外ハンドラは、状態情報を保護されたメモリに保存することによって終了プロセスが完了し得るように、自動終了条件を生成することができる。
【００５３】
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的（non-transitory）なコンピュータ可読記憶媒体に記憶され、又は、他の方法で有形に具体化された１つ以上の実行可能命令のセットを含む。ソフトウェアは、１つ以上のプロセッサによって実行されたときに、上述した技術の１つ以上の態様を実行するために１つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶装置、ソリッドステートストレージ装置（例えば、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）等）、又は、他の不揮発性メモリ装置等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、１つ以上のプロセッサによって解釈若しくは他の方法で実行可能な他の命令フォーマットであってよい。
【００５４】
一般的な説明で上述したアクティビティ又は要素の全てが必要であるとは限らず、特定のアクティビティ又は装置の一部が必要でなくてもよいこと、及び、説明したアクティビティ又は要素に加えて、１つ以上のさらなるアクティビティが実行され、１つ以上のさらなる要素が含まれてもよいことに留意されたい。さらに、アクティビティが列挙される順序は、必ずしもそれらが実施される順序ではない。また、これらの概念は、特定の実施形態を参照して説明されている。しかし、当業者であれば、以下の特許請求の範囲に記載された本発明の範囲から逸脱することなく、様々な修正及び変更を行うことができることを理解するであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、そのような変更の全ては、本発明の範囲内に含まれることが意図される。
【００５５】
特定の実施形態に関して、利益、他の利点、及び、問題に対する解決手段を上述した。しかし、この利益、利点、問題に対する解決手段、及び、任意の利益、利点又は解決手段を生じさせ若しくはより顕著にし得る任意の特徴は、任意又は全ての特許請求の範囲の需要な、必須の、又は、不可欠な特徴と解釈されないものとする。さらに、開示された発明が、本明細書の教示の利益を有する当業者には明白で、異なっているが同等の方法で修正又は実施され得るので、上記で開示された特定の実施形態は例示にすぎない。以下の特許請求の範囲に記載されている以外の、本明細書に示された構成又は設計の詳細に対する制限は意図されていない。したがって、上記で開示された特定の実施形態は、変更又は修正されてもよく、かかる変形の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、本願で求められる保護は、以下の特許請求の範囲に記載されている。
【図１】
0006672341.tif 000002
【図２】
0006672341.tif 000003
【図３】
0006672341.tif 000004
【図４】
0006672341.tif 000005
【図５】
0006672341.tif 000006
【図６】
0006672341.tif 000007
【図７】
0006672341.tif 000008
【図８】
0006672341.tif 000009
【図９】
0006672341.tif 000010