(58)【調査した分野】(Int.Cl.,DB名)
プロセッサが仮想マシン(VM)を実行している間にVMの状態を定義するためのレジスタを実装する前記プロセッサ上で動作する前記VMの終了条件を検出することであって、前記終了条件は、前記VMが前記プロセッサ上での実行から削除され、前記プロセッサの制御が前記VMのハイパーバイザに戻されることを示す、ことと、
前記終了条件を検出したことに応じて、前記レジスタの内容を、前記VMの前記ハイパーバイザがアクセスできない第1のデータ構造に記憶することと、
前記終了条件を検出したことに応じて及び前記終了条件が非自動終了であることに応じて、前記終了条件を前記VMに認識させることを要求する例外ハンドラを、前記VMを用いてインスタンス化することであって、前記例外ハンドラは、前記レジスタのサブセットを選択するように構成されている、ことと、
前記例外ハンドラによって、前記レジスタのサブセットの内容を前記ハイパーバイザに選択的に公開することと、
前記レジスタのサブセットの内容を前記ハイパーバイザに公開したことに応じて、前記例外ハンドラによって、前記プロセッサ上での実行から前記VMを削除するための終了プロセスを開始するための終了コマンドを発行することと、を含む、
方法。
前記レジスタの内容を前記第1のデータ構造に記憶することは、前記レジスタの内容を、前記ハイパーバイザがアクセスできないメモリ位置に記憶することを含む、請求項1に記載の方法。
前記レジスタの内容を前記第1のデータ構造に記憶することは、前記レジスタの内容を前記第1のデータ構造に記憶する前に、ハードウェア暗号化モジュールを使用して前記レジスタの内容を暗号化することを含む、請求項1に記載の方法。
前記レジスタのサブセットの内容を選択的に公開することは、前記レジスタのサブセットの内容を、前記ハイパーバイザに見える第2のデータ構造に記憶することを含む、請求項1に記載の方法。
前記終了条件が、前記終了条件を前記VMに認識させる必要のない自動終了であることに応じて、前記例外ハンドラをインスタンス化しないことをさらに含む、請求項4に記載の方法。
前記ハイパーバイザに公開された前記第2のデータ構造内の前記レジスタのサブセットの内容に基づいて、前記VMの前記終了プロセスを完了することをさらに含む、請求項5に記載の方法。
前記VMの前記終了プロセスを完了することは、前記第2のデータ構造内の前記レジスタのサブセットの内容のうち少なくとも1つを変更することを含む、請求項6に記載の方法。
前記レジスタの内容を前記第1のデータ構造からロードすることは、前記第1のデータ構造内の前記レジスタの内容に基づいて計算されたチェックサムが、事前に記憶されたチェックサムと一致することに応じて、前記レジスタの内容を前記第1のデータ構造からロードすることを含む、請求項8に記載の方法。
前記VMは、前記レジスタのサブセットの内容を、前記ハイパーバイザに見える第2のデータ構造に記憶することによって、前記レジスタのサブセットの内容を選択的に公開する、請求項10に記載の装置。
前記VMは、前記終了条件が、前記終了条件を前記VMに認識させる必要のない自動終了であることに応じて、前記例外ハンドラをインスタンス化しない、請求項13に記載の装置。
前記ハイパーバイザは、前記ハイパーバイザに公開された前記第2のデータ構造内の前記レジスタのサブセットの内容に基づいて、前記VMの前記終了プロセスを完了する、請求項14に記載の装置。
【発明を実施するための形態】
【0005】
処理システムにおいて仮想マシン(VM)を実装するために使用されるソフトウェア、及び、VMによって生成されるデータ(総称してVM情報と呼ばれ得る)は、セキュアなVM情報を暗号化して隔離するために、処理システムのメモリアクセスパスにハードウェア暗号化モジュールを採用することによって、保護し得る。ハードウェア暗号化モジュールは、VMによってメモリに書き込まれたデータを暗号化するか、VMによってメモリから読み込まれたデータを復号化する。したがって、ハイパーバイザが使用できない正しい暗号化/復号キーがなければ、VMによってメモリに記憶されたデータに有意義にアクセスすることができない。ただし、本明細書で説明する追加のセキュリティ対策がなければ、VMの実行中にプロセッサの状態を定義するレジスタ値がハイパーバイザに見えるままである。したがって、ハイパーバイザは、状態情報の漏えい、又は、状態情報を変更して意図しない動作を引き起こす制御フロー攻撃に対して脆弱である可能性がある。VMによって開始されるいくつかのタイプの動作を実行するために、いくつかの状態レジスタの内容がハイパーバイザによって使用される必要があるので、ハイパーバイザからレジスタ値を(例えば、レジスタ値を暗号化することによって)単に隠すだけでは、VMの機能が大幅に制限されるか、VMが動作不能になる。
【0006】
ハイパーバイザからVMの状態を定義する状態レジスタの内容を隔離し、1つ以上の関連する状態レジスタの内容をハイパーバイザに選択的に公開することによって、VMのセキュリティが向上する。いくつかの実施形態では、ハードウェア暗号化モジュールは、状態レジスタの内容を、データ構造(本明細書では「仮想マシン制御ブロック」又は「VMCB」と呼ばれる)に書き込まれるときに暗号化し、データ構造から読み出されるときに復号化する。次に、VMは、復号された値がハイパーバイザに見えるように、別のデータ構造(本明細書では「ゲストハイパーバイザ通信ブロック」又は「GHCB」と呼ばれる)の状態レジスタの内容を選択的に公開し得る。例えば、VMは、ワールドスイッチをもたらす終了条件をトリガし得る。本明細書で使用される場合、「終了条件」という用語は、ハーバー(harbor)に、ハイパーバイザへ制御を戻させるあらゆるイベントを示す。本明細書で使用される場合、「ワールドスイッチ」という用語は、VM又はハイパーバイザを実行から削除し、別のVM又はハイパーバイザの実行を開始することを指す。VMが終了する前に、プロセッサは、VMによって実装された例外ハンドラに例外を発行する。例外ハンドラは、ハイパーバイザに見える状態情報の一部を決定し、VMがこの部分をGHCBに公開する。次に、VMは終了プロセスを開始し、VMの状態レジスタの内容が暗号化され、終了条件を開始するVMに応じてVMCBに書き戻される。プロセッサがハイパーバイザをロードすると、GHCB内の状態情報の可視部分を使用してVMの終了プロセスが完了する。
【0007】
ハイパーバイザは、別のワールドスイッチを開始して、VMをプロセッサにロードできる。VMの状態レジスタの内容は、ワールドスイッチ中にプロセッサハードウェアによって復号され、プロセッサ内の状態レジスタに書き込まれる。ハイパーバイザは、終了プロセスを完了している間にGHCBに記憶された状態情報の内容を変更している可能性があるため、この変更に基づいてVMの状態レジスタの内容を更新し得る。例えば、ハードウェア暗号化モジュールは、VMCBに記憶された状態レジスタの内容を復号し、例外ハンドラは、GHCBに記憶された情報に基づいて値を更新し得る。いくつかの実施形態では、VMCBに記憶されている暗号化された状態情報のチェックサムが計算され、状態情報をプロセッサに戻す前にVMCBの状態情報を検証するために使用され得る。
【0008】
図1は、いくつかの実施形態による、VMに関連する状態情報の隔離を提供する処理システム100を示す図である。処理システム100は、プロセッサ102と、メモリ103と、を含む。処理システム100は、例えばサーバ、パーソナルコンピュータ、タブレット、セットトップボックス、ゲームシステム等の様々な電子装置の何れかに組み込むことができる。プロセッサ102は、定義されたタスクを実行するためにプロセッサ102の回路を操作する命令セット(例えば、コンピュータプログラム)を実行するように動作する。メモリ103は、プロセッサ102によって使用されるデータを記憶することによって、これらのタスクの実行を容易にし、プロセッサ102によるアクセスのために命令セットをさらに記憶することができる。メモリ103は、ランダムアクセスメモリ(RAM)、フラッシュメモリ若しくはハードディスクドライブ(HDD)等の不揮発性メモリ、又は、これらの組み合わせとすることができる。
【0009】
命令セットを実行する過程で、プロセッサ102は、メモリ103にデータを記憶するための書き込み要求、及び、メモリ103からデータを読み出すための読み出し要求を含むメモリアクセス要求を生成する。各メモリアクセス要求は、メモリアクセス要求の対象となるメモリ103の位置を示すメモリアドレスを含む。読み出し要求に応じて、メモリ103は、読み出し要求のメモリアドレスに対応する位置に記憶された情報(データ又は命令)を取り出し、その情報をプロセッサ102に提供する。書き込み要求に応じて、メモリ103は、書き込み要求のメモリアドレスに対応する位置に要求の書き込み情報を記憶する。
【0010】
プロセッサ102は、セキュリティモジュール104を含む。図示した実施形態では、セキュリティモジュール104がプロセッサ102に実装されているが、セキュリティモジュールのいくつかの実施形態では、プロセッサ102の外部に存在し、バスを介してプロセッサ102に接続されてもよい。セキュリティモジュール104は、汎用プロセッサコア、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、プロセッサコアの動作モード、又は、処理システム100のセキュリティ操作(プロセッサ102で実行されるエンティティ(例えば、VM、ハイパーバイザ、コンピュータプログラム等)の登録、実行されるエンティティのセキュリティキーの生成及び識別、セキュリティ操作のための処理システム100の認証等を含む)を実行するように設計及び構成された他のモジュールとして実装し得る。いくつかの実施形態では、セキュリティモジュール104は、攻撃を受けやすい動作を実行することができないように、その動作を実行することが許可される前にセキュアな登録プロセスを受け、その動作をセキュリティ動作のみに制限することができる。本明細書でさらに説明するように、セキュリティモジュール104のいくつかの実施形態では、処理システム100で実行されるように登録されたエンティティを識別するセキュリティキーを生成することによる処理システム100での情報の暗号隔離、及び、かかる暗号隔離を可能にする他の動作をサポートする。
【0011】
命令の実行を容易にするために、プロセッサ102は、プロセッサコア105,106等の1つ以上プロセッサコアと、キャッシュ107,108,109等の1つ以上のキャッシュと、ノースブリッジ110と、セキュリティモードレジスタ111と、を含む。プロセッサコア105,106は、個別に又は同時に命令を実行する処理ユニットである。いくつかの実施形態では、プロセッサコア105,106の各々は、命令をフェッチし、フェッチされた命令を対応する演算にデコードし、処理システム100のリソースを使用してメモリアクセス要求を含む動作を実行する個別の命令パイプラインを含む。各プロセッサコア105,106は、各メモリアクセス要求を、メモリアクセス要求に対応する情報が暗号保護のために指定されていることを示すセキュアメモリアクセス要求、又は、メモリアクセス要求に対応する情報が暗号保護のために指定されていないことを示す非セキュアメモリアクセス要求の2つのタイプの何れかに識別するように構成されている。
【0012】
キャッシュ107,108,109は、メモリ103に記憶された情報のサブセットを記憶するメモリコンポーネントであり、プロセッサコア105,106にそれぞれの情報サブセットへのより高速なアクセスを提供する。明確さのために、キャッシュ109は単一のキャッシュとして示されているが、いくつかの実施形態では、キャッシュ109は、プロセッサ102のメモリ階層の異なるレベルに存在する異なるキャッシュを含む、複数のキャッシュを表すことができる。キャッシュ109は、メモリアクセス要求を受信し、そのストレージアレイ(
図1では省略)がメモリアクセス要求の対象となる情報を記憶しているかどうかを識別する。記憶している場合、キャッシュ109は、キャッシュヒットを示し、ストレージアレイにおけるメモリアクセス要求を満たす。キャッシュ109がターゲットとなる情報を記憶していない場合、キャッシュミスを示し、ノースブリッジ110にメモリアクセス要求を提供する。
【0013】
ノースブリッジ110は、プロセッサ102がメモリ103と通信するためのインタフェースを提供するメモリコントローラである。いくつかの実施形態では、ノースブリッジ110は、入出力コントローラ(例えばサウスブリッジ、図示省略)とのインタフェース、及び、異なるプロセッサコア(例えば、プロセッサコア105,106及びグラフィックス処理ユニット等の他のプロセッサコア(図示省略))間のインタフェースを提供する等の他の機能を実行することができる。ノースブリッジ110は、メモリコントローラとしての能力において、キャッシュ109からメモリアクセス要求を受信し、これらの要求のメモリ103への提供を制御する。また、ノースブリッジ110は、メモリアクセス要求に対する応答をメモリ103から受信し、応答のキャッシュ109への提供を制御する。いくつかの実施形態では、ノースブリッジ110は、処理システム100の入出力装置(図示省略)からメモリアクセス要求(例えば、ダイレクトメモリアクセス要求)を受信し、これらのメモリ103への提供を制御することができる。
【0014】
プロセッサコア105,106の各々は、対応するプロセッサコアの状態を定義する値を記憶する、1つ以上の対応するレジスタの対応するセットを含む。レジスタ115は、プロセッサコア105用のレジスタのセットを表し、レジスタ116は、プロセッサコア106用のレジスタのセットを表す。プロセッサ102のいくつかの実施形態では、ハイパーバイザの制御下で複数のVMを(同時に又は独立して)実行するように構成されている。ハイパーバイザ及び各VMは、プロセッサコア105,106の状態を定義するレジスタ115,116に対応する値のセットによって定義される。したがって、レジスタ115,116の値は、プロセッサ102又はプロセッサコア105,106がハイパーバイザ又は1つ以上のVMを実行しているときのハイパーバイザの状態又は1つ以上のVMの状態を表す。レジスタ115,116の値は、ハイパーバイザ又はVMによって実行されているプログラムの命令ポインタ、ハイパーバイザ又はVMの終了コード、浮動小数点データ、浮動小数点タグ又は状態情報、浮動小数点制御情報、x87レジスタ状態、XMMレジスタ状態、YMMレジスタ状態、他のレジスタが有効な情報を含むかどうかを示すビットマップ、レジスタ115,116の値に基づいて予め計算されたチェックサムの位置等を示すために使用され得る。
【0015】
レジスタ115,116に記憶された値は、プロセッサ102上で現在実行中のエンティティに応じて、メモリ103とレジスタ115,116との間を移動し得る。例えば、「ワールドスイッチ」を使用して、プロセッサ102上の第1のVMの実行を終了又は中断し、第2のVM(又はハイパーバイザ)をプロセッサ102上にロードして実行し得る。第1のVMの状態を定義するためにレジスタ115,116に記憶された値は、レジスタ115,116からメモリ103に移動され、第2のVMの状態を定義する状態レジスタ値は、メモリ103から対応するレジスタ115,116に移動される。第1のVM又は第2のVMの状態に応じて、値は、本明細書で述べるように、レジスタ115,116の異なるサブセットの内外に移動されてもよい。
【0016】
少なくとも1つの実施形態では、処理システム100は、各VMがハイパーバイザ又は他の任意のVMを信頼しない又は信頼できない信頼モデルを想定する。したがって、異なるVMに関連する情報は、情報がハイパーバイザ及び他のVMからアクセスできないように、当該情報をメモリ103のセキュア領域120に記憶することによって、他のVM及びハイパーバイザから隔離され得る。隔離された情報は、VMに関連する命令の実行中に、メモリ103に書き込まれる情報又はメモリ103から読み出される情報を含み得る。隔離された情報には、VMの状態を表すレジスタの内容も含まれる。したがって、各VMのレジスタの内容は、本明細書では仮想マシン制御ブロック(VMCB)121と呼ばれるデータ構造121に記憶され得る。例えば、プロセッサ102上で実行中のVMの終了条件が検出された場合、レジスタ115,116の値がVMCB121に記憶され、この値がハイパーバイザ及び他のVMから隔離される。レジスタ115,116の内容のサブセットは、例えば、終了条件の検出に応じて、開始されたVM終了プロセスを完了するために、ハイパーバイザによって必要とされてもよい。したがって、VMは、本明細書ではゲストハイパーバイザ通信ブロック(GHCB)122と呼ばれる別のデータ構造122に値を記憶することによって、レジスタのサブセットの内容をハイパーバイザ(又は他のVM)に選択的に公開することができる。
【0017】
いくつかの実施形態では、ハイパーバイザ又は他のVMから物理的にアクセスできないメモリ位置に情報を記憶することによって、ハイパーバイザ及び他のVMから情報を隔離することができる。また、ハイパーバイザ又は他のVMにとって未知の1つ以上のセキュリティキーを使用して、データ構造121に記憶されたデータを暗号化することによって、VMに関連する情報をハイパーバイザ及び他のVMから隔離することができる。例えば、レジスタ115,116の内容は、レジスタの内容をデータ構造121に記憶する前にハードウェア暗号化モジュールを使用して暗号化され、これにより、データ構造121に記憶された情報に対してハイパーバイザ又は他のVMがアクセスできない状態にする。データ構造121の位置の暗号化又は隠蔽は、ハイパーバイザ及び他のVMから情報を隔離するために、一緒に又は別々に使用されてもよい。
【0018】
情報の暗号隔離を提供するために、ノースブリッジ110は、指定された暗号規格に従って及びキー126に基づいて、情報を暗号化及び復号化するように動作するハードウェア実装された暗号化モジュール125を含む。いくつかの実施形態では、暗号化モジュール125は、高度暗号化標準(AES)の暗号化及び復号化を採用しているが、他の実施形態では、暗号化モジュール125は、他の暗号化/復号化技術を採用してもよい。暗号化モジュール125のいくつかの実施形態では、(例えば、ワイヤ、トレース、トランジスタ及び他の要素の、固定された所定のセットとして)ハードコードされたロジック、FPGA等のプログラマブルロジック、又は、ハードコードされたロジックとプログラマブルロジックとの組み合わせを用いて実装されてもよい。
【0019】
書き込み要求を受信したことに応じて、ノースブリッジ110は、要求がセキュアメモリアクセス要求であるか、非セキュアメモリアクセス要求であるか、を識別する。書き込み要求が非セキュアメモリアクセス要求である場合、ノースブリッジ110は、暗号化モジュール125をバイパスし、書き込まれる情報を暗号化せずに書き込み要求をメモリ103に提供する。書き込み要求がセキュアメモリアクセス要求である場合、ノースブリッジ110は、メモリアクセス要求を生成したエンティティ(例えば、プログラム、VM、ソフトウェアサービス等)に割り当てられたキー126の1つを識別する。暗号化モジュール125は、選択されたキーを使用して、書き込まれる情報を暗号化し、暗号化された情報と共に書き込み要求を、記憶のためにメモリ103に提供する。いくつかの実施形態では、暗号化モジュール125は、選択されたキーとメモリアクセス要求の物理アドレスとの両方を、対応する情報の暗号化及び復号化に使用して、ブロック移動攻撃を防止する。いくつかの実施形態では、暗号化モジュール125は、プロセッサ102における制御ビット(図示省略)の状態に基づいて、暗号化及び復号化のために物理アドレスを使用するかどうかを識別する。制御ビット状態は、セキュリティモジュール104によって設定することができる。
【0020】
ノースブリッジ110は、読み出し要求を受信したことに応じて、要求をメモリ103に提供し、その後、要求に応答する情報を受信する。ノースブリッジ110が読み出し要求を非セキュアメモリアクセス要求として識別した場合、暗号化モジュール125をバイパスし、読み出し情報を暗号化せずにキャッシュ108に提供する。ノースブリッジ110が読み出し要求をセキュアメモリアクセス要求として識別した場合、読み出しアクセス要求を生成したエンティティに割り当てられたキー126の1つを識別し、暗号化モジュール125が読み出し情報を復号化する。ノースブリッジ110は、復号された読み出し情報を、記憶のためにキャッシュ108に提供する。場合によっては、ノースブリッジ110は、キャッシュ108への情報の提供をバイパスし、対応する読み出しアクセス要求を生成したプロセッサコアに対して、復号された読み出し情報を直接提供する。
【0021】
また、暗号化モジュール125は、レジスタ115,116に記憶された値を暗号化及び復号化するために使用される。ノースブリッジ110は、プロセッサ102で実行中のVMの終了条件を検出したことに応じて、VMに割り当てられたキー126の1つを識別する。暗号化モジュール125は、選択されたキーを使用して、レジスタ115,116に記憶された値を暗号化し、暗号化された値を、記憶のためにデータ構造121のメモリ103に提供する。ノースブリッジ110は、実行のためにプロセッサ102にVMをロードする要求を検出したことに応じて、VMに割り当てられたキー126の1つを識別する。ノースブリッジ110は、データ構造121に記憶されている暗号化された状態情報に対する要求を提供し、要求を提供したことに応じて、暗号化された状態情報を受信する。暗号化モジュール125が、選択されたキーを使用して、暗号化された状態情報を復号化し、次いで、ノースブリッジ110が、復号された状態情報を使用して、対応するレジスタ115,116を設定することによって、プロセッサコア105,106の状態がVMの状態を表す。
【0022】
レジスタ115,116の値は、暗号化されていない値をデータ構造122に記憶することによって(例えば、ハイパーバイザ又は他のVMに)公開されてもよい。例えば、プロセッサ102は、プロセッサ102上で実行中のVMの終了条件を検出したことに応じて、例外を発行することができる。例外は、終了条件のタイプに基づいて発行され得る。例えば、自動終了では例外が発行されず、非自動終了では例外が発行され得る。自動終了は、VMが終了を認識することを必要とせずに、VMがVM例外ハンドラをインスタンス化しない終了条件である。自動終了には、プロセッサ上のVMを定義する状態情報を変更する予定のないイベントが含まれ得る。非自動終了は、終了条件が発生したことをVMに通知する必要のある終了条件である。VM内の例外ハンドラは、例外を検出し、それに応じて、公開されるレジスタ115,116内の値のサブセットを決定し得る。例えば、値のサブセットは、ハイパーバイザがVMの終了プロセスを完了するために必要とする状態情報に対応し得る。したがって、ノースブリッジ110は、レジスタ115,116内の値のサブセットに対応する暗号化されていない値をデータ構造122に提供し、これにより、ハイパーバイザ又は他のVMが値のサブセットに対してアクセス可能にし得る。
【0023】
いくつかの実施形態では、セキュリティモードレジスタ111は、暗号化モジュール125の動作を制御するために使用される。セキュリティモードレジスタ111は、プロセッサ102上で実行され得る各VMのガードモードオンフィールド130と、ガードモードアクティブフィールド135と、拡張ガードモードフィールド140と、を含む。いくつかの実施形態では、異なるセキュリティモードレジスタ111をプロセッサコア105,106に実装することができる。ノースブリッジ110は、ガードモードオンフィールド130が、関連するVMの特定の状態(例えば、ネゲート状態)にあることに応じて、セキュアメモリアクセス要求又はデータ構造121へのメモリアクセス要求を含む、関連するVMによる全てのメモリアクセス要求に対して、暗号化モジュール125をバイパスする。これにより、処理システム100は、プロセッサ102で実行されている全てのプログラムに対して、暗号化及び復号化がバイパスされるモードで動作することが可能になる。ノースブリッジ110は、ガードモードオンフィールド130が異なる特定の状態(例えば、アサート状態)にあることに応じて、ガードモードアクティブフィールド135の状態を識別する。ノースブリッジ110は、ガードモードアクティブフィールド135が特定の状態(例えば、ネゲート状態)にあることに応じて、VMに関連する受信メモリアクセス要求(セキュアメモリアクセス要求又はデータ構造121へのメモリアクセス要求を含む)に対して暗号化モジュール125をバイパスし、ガードモードアクティブフィールド135が異なる状態(例えば、アサート状態)にあることに応じて、非セキュアメモリアクセス要求に対してのみ暗号化モジュール125をバイパスする。拡張ガードモードフィールド140は、非自動終了等の特定のタイプの終了条件に応じて、例外が発行されるかどうかを制御するために使用されてもよい。
【0024】
図2は、いくつかの実施形態による、VMの情報の暗号隔離を提供するための処理システム100の例示的な動作を示す図である。図示した例では、プロセッサ102は、VM200及びVM201を同時に実行する。また、プロセッサ102は、ハイパーバイザ202を実行して、VM200,201と処理システム100のハードウェアとの間のインタフェースを提供する。それらの実行中に、VM200,201は、本明細書で説明するように、メモリ103からセキュアな情報にアクセス(記憶及び取得)する。VM200,201の終了条件によって、対応するレジスタ205,206内の状態情報が、
図1に示すデータ構造121,122に対応するデータ構造210,211等の対応するセキュアなメモリ位置に記憶される。暗号化モジュール125は、データ構造210,211に記憶されているVM200,201の状態情報が暗号的に隔離されることによって、各VMによってのみアクセス可能になるのを保証する。データ構造210,211に記憶されている暗号化された情報は、他のVM又はハイパーバイザ202から隔離され、アクセスすることができない。レジスタ205,206内の状態情報は、暗号化されていない情報をデータ構造212に記憶することによって選択的に公開することができる。いくつかの実施形態では、異なるデータ構造212を異なるVMに関連付けることができる。
【0025】
動作において、プロセッサ102で実行することが許可される前に、各VM200,201は、セキュリティモジュール104に登録される。いくつかの実施形態では、VMは次のように登録される。VMの所有者は、例えば、セキュアなハンドシェーキングプロトコルを使用して、セキュリティモジュール104とセキュアな通信チャネル(
図2では省略)を確立する。「VMID」と呼ばれる識別値、及び、「VMKEY」と呼ばれるセキュリティキーが、VMに対して生成される。この生成は、セキュリティモジュール104又は別個のセキュリティデバイスで行うことができ、セキュアな通信チャネルを介してセキュリティモジュール104に通信することができる。セキュリティモジュール104は、VMKEY値及びVMID値の各々が対応するVMに対して一意であることを保証する。VMの所有者は、対応するVMのイメージを暗号化(又はセキュリティモジュール140に暗号化を依頼する)し、それをハイパーバイザー202に提供し、ハイパーバイザ202は、暗号化されたイメージをセキュアなデータとしてメモリ103に記憶する。
【0026】
続いて、プロセッサ102は、VMを実行する要求を受信する。この要求に応じて、プロセッサ102は、要求されたVMのVMIDをセキュリティモジュール104に通知する。セキュリティモジュール104は、VMIDに基づいて、セキュリティキー126から要求されたVMのセキュリティキーを識別し、セキュリティキーを暗号化モジュール125に提供する。
図2に示す例では、プロセッサ102は、以下においてVM−A200及びVM−B201と呼ぶことができるVM200,201の両方を実行する要求を受信している。セキュリティモジュール104は、VM−A200のキー220と、VM−B201のキー221と、を暗号モジュール125に提供する。ノースブリッジ110は、対応するデータ構造210,211からVM200,201の状態情報を要求し、次に、受信した情報を、対応するキー220,221を使用して復号する。復号された状態情報は、VM200,201の状態を定義するために、対応するレジスタ205,206に記憶される。
【0027】
それらの実行中に、VM200,201は、メモリアクセス要求を生成し、それらをノースブリッジ110に提供する。ノースブリッジ110は、要求のメモリアドレスに含まれる1つ以上のビットに基づいて、メモリアクセス要求がセキュアメモリアクセス要求であるかどうかを識別する。セキュアメモリアクセス要求でない場合、ノースブリッジ110は、暗号化モジュール125をバイパスし、暗号化も復号化も行わずにメモリアクセス要求を満たす。メモリアクセス要求がセキュアメモリアクセス要求である場合、ノースブリッジ110は、メモリアクセス要求によって提供されるメモリアドレス又は他の情報に基づいて、VM200,201の何れがメモリアクセス要求を生成したかを識別する。暗号化モジュール125は、メモリアクセス要求を生成したVMに対応するキー220,221の1つを選択し、選択されたキーを使用して、メモリアクセス情報(読み出しデータ若しくは書き込みデータ)の暗号化(書き込み要求の場合)又は復号化(読み出し要求の場合)を実行する。また、暗号化モジュール125は、書き込み要求の復号化、及び、読み出し要求の暗号化を実行してもよい。
【0028】
1つ以上のVM200,201は、プロセッサで対応するVMの実行を終了するプロセスを開始する終了条件を生成することができる。このプロセスは、VMの終了プロセスと呼ばれ得る。終了条件を検出したことに応じて、ノースブリッジ110は、1つ以上の対応するレジスタ205,206に記憶された状態情報にアクセスし、1つ以上の対応するキー220,221に基づいて暗号化するために状態情報を暗号化モジュール125に提供する。次に、ノースブリッジ110は、暗号化された情報を、メモリ103内の1つ以上の対応するデータ構造210,211に書き込む。プロセッサ102は、終了条件が自動終了又は非自動終了であるかどうかを判別し、終了条件が非自動終了である場合に、終了条件を検出したことに応じて例外を発行する。例外ハンドラは、1つ以上のレジスタ205,206の値がハイパーバイザ202又は他のVM200,201に公開されるかどうかを判別することによって例外に応答する。そうである場合、ノースブリッジ110は、暗号化モジュール125をバイパスし、レジスタ205,206のサブセットの暗号化されていない内容をメモリ103のデータ構造212に書き込む。
【0029】
上述したように、データの暗号保護はノースブリッジ110で行われ、暗号保護に使用されるキーは未知であり、VM200,201及びハイパーバイザ202はアクセスできない。これにより、一方のVMが他方のVMのセキュア情報にアクセスできなくなる。例えば、終了時に、VM200を定義する状態情報がデータ構造210に記憶される。状態情報はVM200に関連付けられているので、暗号化モジュール125は、VM201に割り当てられたキー221ではなく、VM200に割り当てられたキー220を使用して状態情報を暗号化する。したがって、ハイパーバイザ202及びVM201は、正しいキーへのアクセス権を有していないので、暗号化された状態情報を有意義に又は正確に解釈又は復号することができない。したがって、データ構造210に記憶された状態情報は、VM201及びハイパーバイザ202によるアクセスから暗号的に隔離される。
【0030】
いくつかの実施形態では、処理システム100は、セキュリティを強化するためにキー220,221を定期的に変更する。例えば、セキュリティモジュール104は、VMが完全にシャットダウンされたときに(一時停止ではない)、VMの新たなキーを生成し、VMが再スタートしたときに新たなキーを有していることを保証する。セキュリティモジュール104は、古いキーの下でメモリ103に記憶されたVMのセキュア情報について、VMが再スタートしたときにセキュア情報にアクセスできるように、古いキーを使用して当該情報を復号し、新たなキーを使用して情報を再暗号化するようにノースブリッジ110に指示することができる。
【0031】
セキュリティモジュール104は、VMが一時停止状態に移行することに応じて、VMの新たなキーを生成することができる。VMの一部(例えば、ゲストオペレーティングシステム)は、VMの暗号化されたデータを記憶するメモリ103のメモリページを識別するデータ構造を維持する。VMが一時停止状態に移行することに応じて、セキュリティモジュール104は、ノースブリッジ110に対して、識別されたメモリページを古いキーを用いて復号し、メモリページを新たなキーを用いて再暗号化するように指示することにより、一時停止状態が終了したときにVMがセキュア情報にアクセスできるのを保証する。
【0032】
図3は、いくつかの実施形態による、仮想マシン通信ブロック(VMCB)の一実施例であるデータ構造300のブロック図である。データ構造300は、
図1に示すデータ構造121、又は、
図2に示すデータ構造210,211のいくつかの実施形態を実装するために使用されてもよい。データ構造300は、制御状態情報301を記憶するフィールドと、
図1に示すプロセッサ102等のプロセッサ上で実行され得るVMの保存状態情報302を記憶するフィールドと、を含む。したがって、データ構造300の情報は、
図1に示すレジスタ115,116等の1つ以上のレジスタからデータ構造300に記憶されてもよく、データ構造300から1つ以上のレジスタに書き込まれてもよい。
【0033】
制御状態情報301のいくつかの実施形態では、制御状態情報301は、VMに関連するハイパーバイザ及び他のVMにアクセスできるように、暗号化されずにデータ構造300に残される。制御状態情報301は、ハイパーバイザに通知されるイベントを示す情報、割り込みがゲストに対して保留中であるかどうかを示す情報等を含むことができる。ハイパーバイザは、制御状態情報301を使用してVMをプロセッサにロードし、終了プロセスを実行してプロセッサ上でVMの実行を終了させる等の動作を実行する。例えば、制御状態情報301は、本明細書で述べるように、保存状態情報302のサブセットをハイパーバイザに公開するために使用される第2のデータ構造305(GHCB等)の位置を示す機械固有レジスタ(MSR)の値を含む。VMのいくつかの実施形態は、第2のデータ構造305の位置を示すMSRの値を読み書きすることができる。
【0034】
保存状態情報302は、プロセッサ上で実行するときにVMの状態を定義するレジスタの暗号化された内容を含む。保存状態情報302は、VMによって実行される命令の位置、又は、VMによって最後に実行された命令の位置を示す命令ポインタを含む。保存状態情報302のいくつかの実施形態は、ハイパーバイザ又はVMの終了コード、他のレジスタが有効情報を含むかどうかを示すビットを含むビットマップ、汎用レジスタ状態情報、浮動小数点タグ若しくは状態情報若しくは浮動小数点制御情報を含む浮動小数点レジスタ状態情報、x87レジスタ状態情報、XMMレジスタ状態情報、及び、YMMレジスタ情報を含む。保存状態情報302のいくつかの実施形態は、情報をレジスタからデータ構造300に移動する前にレジスタに記憶された値に基づいて予め計算されたチェックサム310の位置へのポインタも含むことができる。例えば、チェックサム310は、
図1に示すメモリ103内のメモリ位置に記憶されてもよい。チェックサム310の値は、レジスタに書き戻された情報がレジスタから以前に保存された情報と同じであることを確認するために使用される。
【0035】
いくつかの実施形態では、VMの状態は、保存状態情報302内のレジスタの内容のサブセットによって定義されてもよい。したがって、VMがプロセッサを終了するときに、保存状態情報302のサブセットのみが暗号化され、データ構造201に記憶され得る。同じサブセットは、VMの実行がプロセッサ上で開始されたときに復号され、プロセッサ内のレジスタに書き込まれ得る。保存状態情報302のサブセットは、ビット316,317,318の対応するアレイ315によって示される。例えば、ビット316は、VMの状態を定義するために浮動小数点レジスタ状態が使用されることを示すために「1」の値に設定されてもよく、ビット317は、VMの状態を定義するためにx87レジスタ状態が使用されることを示すために「1」の値に設定されてもよく、ビット318は、VMの状態を定義するためにXMMレジスタ状態が使用されないことを示すために「0」の値に設定されてもよい。アレイ315は、機械固有レジスタ(MSR)として実装することができる。
【0036】
図4は、いくつかの実施形態による、VMの情報の暗号隔離を提供し、情報の一部を選択的に公開する処理システム100の例示的な動作を示す図である。最初に、VMは処理システム100上で実行されている。処理システム100は、VMが処理システム上で実行を終了することを示す終了条件を検出する。終了条件を検出したことに応じて、暗号化モジュール125は、レジスタ115の内容を暗号化し、暗号化した値を第1のデータ構造121に記憶する。また、処理システム100は、終了状態が自動終了又は非自動終了を示すかどうかを判別してもよい。終了条件が非自動終了である場合、処理システム100は、VM例外ハンドラ400によって処理され得る例外を発行する。VM例外ハンドラ400は、例えば、ハイパーバイザに公開されるレジスタ115の内容のサブセットを決定する。例えば、VM例外ハンドラ400は、ハイパーバイザによって使用されるレジスタ115のサブセットの内容を公開して、VMの終了プロセスを完了することができる。次に、VM例外ハンドラ400は、値のサブセットを第2のデータ構造122にコピーする。VM例外ハンドラ400は、第2のデータ構造122に記憶された値のサブセットのコピーが暗号化されずに他のエンティティに公開されるように、暗号化モジュール125をバイパスする。
【0037】
図5は、いくつかの実施形態による、VMの情報を復号する処理システム100の例示的な動作を示す図である。処理システム100は、
図1に示すプロセッサ102等のプロセッサ上でVMの実行を開始するコマンドを受信する。暗号化モジュール125は、コマンドを受信したことに応じて、第1のデータ構造121に記憶された情報の要求を送信し、要求された暗号化情報を受信し、第1のデータ構造121から受信した暗号化情報を復号する。復号された情報は、対応するレジスタ115に記憶される。ハイパーバイザ等のエンティティは、処理システム100がコマンドを受信する前に第2のデータ構造122に記憶されている変更された情報を有する場合があり、その結果、レジスタ115の内容のサブセットは、ハイパーバイザによって行われた変更を反映するように修正される必要がある。例えば、ハイパーバイザは、第2のデータ構造122に記憶された情報の内容を変更して、VMの前回の終了プロセスを完了している場合があり、したがって、第2のデータ構造122の値に対する変更を認識していない可能性がある。非自動終了の場合、VM例外ハンドラ500は、第2データ構造122に記憶された情報の要求を送信し、要求された情報を受信し、何れかの情報が変更されたかどうかを判別する。そうであれば、VM例外ハンドラ500は、レジスタ115内の対応する値を変更することができる。
【0038】
図6は、いくつかの実施形態による、非自動終了条件に応じて、プロセッサ上のVMの実行を終了する方法600を示す図である。方法600は、本明細書では非自動終了プロセスとも呼ばれ、
図2に示すVM200,201等のVM、
図1に示すプロセッサ102等のプロセッサ(CPU−HW)、
図2に示すハイパーバイザ202等のハイパーバイザに実装される。
【0039】
ブロック605では、VMは、プロセッサ上のVMの実行を終了するための非自動終了プロセスを開始する終了条件をトリガする。終了条件に応じて、VMは、プロセッサによって検出されるシグナリング610を生成し、プロセッサは、終了条件の検出に応じて(ブロック615で)例外を生成する。例外のいくつかの実施形態は、
図1に示すセキュリティモードレジスタ111等のセキュリティモードレジスタに記憶された情報に基づいてイネーブルされる。例えば、例外は、
図1に示す拡張ガードモードフィールド140に記憶された値に基づいてイネーブルされてもよい。例外には、VMによってトリガされる終了条件のエラーコードに対応するエラーコードが含まれ得る。次に、例外シグナリング620をVMに提供することができる。
【0040】
本明細書で述べるように、VMのいくつかの実施形態は、VM例外ハンドラをインスタンス化して、プロセッサによって生成された例外620等の例外を検出し処理する。例外620を検出したことに応じて、VM例外ハンドラは、終了プロセスを完了する前に、VMを定義する状態情報の一部を、例えばハイパーバイザに公開するかどうかを決定する。ブロック625では、VM例外ハンドラは、状態情報の一部を公開する。状態情報の一部は、
図1に示すレジスタ115,116又は
図2に示すレジスタ205,206等のプロセッサ内のレジスタのサブセットの内容を含むことができる。状態情報の一部を公開することは、ハイパーバイザが、状態情報の暗号化されていない内容を、アクセス可能なデータ構造に書き込むことを含む。いくつかの実施形態では、状態情報を公開することは、状態情報に関連するエラーコードをデータ構造にコピーすることを含む。ブロック630では、VM例外ハンドラが終了コマンドを生成し、終了コマンドシグナリング635がプロセッサに提供される。
【0041】
終了コマンドシグナリング635に応じて、プロセッサは、ブロック640において、状態情報を、保護されたメモリ位置に保存する。プロセッサのいくつかの実施形態は、
図1に示す暗号化モジュール125等の暗号化モジュールを実装して、暗号化された状態情報を
図1に示すデータ構造121又は
図2に示すデータ構造210,211等のデータ構造に記憶する前に、状態情報を暗号化する。暗号化モジュールは、暗号化モジュール及びVMには知られているが、ハイパーバイザを含む他のエンティティには知られていない1つ以上のセキュリティキーを使用して、状態情報を暗号化する。プロセッサのいくつかの実施形態は、ビット316〜318等のビットによって示されるレジスタのサブセットの内容を、
図3に示すアレイ315に保存することができる。
【0042】
ブロック645では、プロセッサは、保護されたメモリに状態情報が保存された後に、ハイパーバイザの状態情報をレジスタにロードする。次に、シグナリング650は、プロセッサによって提供され、プロセッサレジスタに記憶されたハイパーバイザの状態情報に基づいてプロセッサ上のハイパーバイザの実行を開始することができる。ブロック655では、ハイパーバイザは、状態情報の公開された部分に基づいて、VMの終了プロセスを完了する。終了プロセスを完了することは、状態情報の公開された部分の内容を変更することを含むことができる。例えば、ハイパーバイザは、エミュレートされた入出力装置からの戻り値を使用して値を修正することができる。
【0043】
図7は、いくつかの実施形態による、非自動終了プロセスに続くプロセッサ上のVMの実行を開始するための方法700を示す図である。方法700は、本明細書では実行プロセスとも呼ばれ、
図2に示すVM200,201等のVM、
図1に示すプロセッサ102等のプロセッサ(CPU−HW)、
図2に示すハイパーバイザ202等のハイパーバイザに実装される。
【0044】
ブロック705では、ハイパーバイザは、VMのための実行コマンドを発行し、シグナリング710をプロセッサに送信して、実行のためにVMをプロセッサにロードするプロセスを開始する。ブロック715では、プロセッサは、保護されたメモリから状態情報をロードする。例えば、プロセッサ内の実行モジュールは、暗号化された状態情報を保護されたメモリに要求すること、暗号化された状態情報を受信すること、及び、暗号化された状態情報を復号することができる。プロセッサのいくつかの実施形態は、状態情報を復号してプロセッサ内のレジスタに保存する前に、予め計算されたチェックサムに基づいて、暗号化された状態情報を検証し得る。例えば、プロセッサは、
図3に示すチェックサム310等のチェックサムを使用して、暗号化された状態情報を検証し得る。次に、復号された状態情報は、プロセッサ内のレジスタにロードされ得る。シグナリング720は、状態情報がプロセッサのレジスタにロードされたことを示す。
【0045】
シグナリング720に応じて、制御は、ブロック725においてVM例外ハンドラに戻される。VM例外ハンドラは、公開された状態情報の何れかが、例えば
図6に示す終了プロセスの一部としてハイパーバイザによって修正されたかどうかを判別する。ブロック730では、何れかが検出された場合、VM例外ハンドラは、修正されている公開された状態情報に対応するレジスタ内の値を修正する。ブロック735では、VM例外ハンドラがVMに制御を返し、VMの制御は、プロセッサのレジスタに記憶された状態情報に基づいて実行され得る。
【0046】
図8は、いくつかの実施形態による、自動終了条件に応じて、プロセッサ上のVMの実行を終了する方法800を示す図である。方法800は、本明細書では自動終了プロセスとも呼ばれ、
図2に示すVM200,201等のVM、
図1に示すプロセッサ102等のプロセッサ(CPU−HW)、
図2に示すハイパーバイザ202等のハイパーバイザに実装される。
【0047】
ブロック805では、VMは、プロセッサ上のVMの実行を終了するための自動終了プロセスを開始する終了条件をトリガする。終了条件トリガに応じて、プロセッサは、ブロック820において状態情報を保護されたメモリ位置に保存する。プロセッサのいくつかの実施形態は、
図1に示す暗号化モジュール125等の暗号化モジュールを実装して、暗号化された状態情報を
図1に示すデータ構造121又は
図2に示すデータ構造210,211等のデータ構造に記憶する前に、状態情報を暗号化する。暗号化モジュールは、暗号化モジュール及びVMには知られているが、ハイパーバイザを含む他のエンティティには知られていない1つ以上のセキュリティキーを使用して、状態情報を暗号化する。プロセッサのいくつかの実施形態は、ビット316〜318等のビットによって示されるレジスタのサブセットの内容を、
図3に示すアレイ315に保存することができる。
【0048】
ブロック825では、プロセッサは、状態情報が保護されたメモリに保存された後に、ハイパーバイザの状態情報をレジスタにロードする。次に、シグナリング830は、プロセッサによって提供され、プロセッサレジスタに記憶されたハイパーバイザの状態情報に基づいてプロセッサ上のハイパーバイザの実行を開始することができる。ブロック835では、ハイパーバイザはVMの終了プロセスを完了する。
【0049】
VMの実行は、自動終了プロセスに続いてプロセッサ上で開始し得る。ブロック840では、ハイパーバイザは、VMのための実行コマンドを発行し、シグナリング845をプロセッサに送信して、実行のためにVMをプロセッサにロードするプロセスを開始する。ブロック850では、プロセッサは、保護されたメモリから状態情報をロードする。例えば、プロセッサ内の実行モジュールは、暗号化された状態情報を保護されたメモリに要求すること、暗号化された状態情報を受信すること、及び、暗号化された状態情報を復号することができる。プロセッサのいくつかの実施形態は、状態情報を復号してプロセッサ内のレジスタに保存する前に、予め計算されたチェックサムに基づいて、暗号化された状態情報を検証し得る。例えば、プロセッサは、
図3に示すチェックサム310等のチェックサムを使用して、暗号化された状態情報を検証し得る。次に、復号された状態情報は、プロセッサ内のレジスタにロードされ得る。シグナリング855は、状態情報がプロセッサのレジスタにロードされ、VMが実行を開始し得ることを示す。
【0050】
図9は、いくつかの実施形態による、終了プロセスのタイプに基づいてVMの終了プロセスを処理する方法900のフロー図である。方法900は、
図1に示すプロセッサ102のいくつかの実施形態で実施することができる。ブロック905では、プロセッサは、プロセッサ上で実行中のVMによって生成された終了条件を検出する。決定ブロック910では、プロセッサは、VMの終了プロセスのタイプを決定する。終了プロセスは、自動終了又は非自動終了であってよい。自動終了は、VMが終了を認識することを必要とせず、VMがVM例外ハンドラをインスタンス化しない終了条件である。自動終了には、プロセッサ上のVMを定義する状態情報を変更する予定のないイベントが含まれてもよい。非自動終了は、終了条件が発生したことをVMに通知する必要がある終了条件である。VM例外ハンドラは、非自動終了条件に応じてインスタンス化される。
【0051】
決定ブロック910でプロセッサが自動終了条件を検出した場合、プロセッサは、ブロック915において、状態情報を、保護されたメモリに保存する。例えば、プロセッサ内の暗号化モジュールは、本明細書で説明するように、状態情報を暗号化し、暗号化された状態情報をデータ構造に記憶することができる。ブロック920では、プロセッサは、状態情報が保護されたメモリに保存された後に、ホストの状態情報をプロセッサレジスタにロードする。例えば、プロセッサは、VMのハイパーバイザを定義する状態情報をロードし得る。ブロック925では、終了プロセスは、例えばハイパーバイザによって完了される。
【0052】
決定ブロック910でプロセッサが非自動終了条件を検出した場合、プロセッサは、ブロック930において例外を生成する。VMは、非自動終了条件に応じてVM例外ハンドラをインスタンス化し、VM例外ハンドラは、ハイパーバイザ等の他のエンティティに見えるように状態情報のサブセットを決定する(ブロック935)。サブセットは、プロセッサ上のVMを定義する状態情報の何れも含まないか、一部又は全てを含むことができる。ブロック940では、VM例外ハンドラは、可視状態情報を、
図1に示すデータ構造122又は
図2に示すデータ構造212等の保護されていないメモリに保存する。いくつかの実施形態では、保護されていないメモリの位置は、
図3に示す制御状態情報301等の暗号化されていない制御状態情報を使用して、ハイパーバイザ等の他のエンティティに示されてもよい。ブロック945では、VM例外ハンドラは、状態情報を保護されたメモリに保存することによって終了プロセスが完了し得るように、自動終了条件を生成することができる。
【0053】
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的(non-transitory)なコンピュータ可読記憶媒体に記憶され、又は、他の方法で有形に具体化された1つ以上の実行可能命令のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されたときに、上述した技術の1つ以上の態様を実行するために1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶装置、ソリッドステートストレージ装置(例えば、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等)、又は、他の不揮発性メモリ装置等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは他の方法で実行可能な他の命令フォーマットであってよい。
【0054】
一般的な説明で上述したアクティビティ又は要素の全てが必要であるとは限らず、特定のアクティビティ又は装置の一部が必要でなくてもよいこと、及び、説明したアクティビティ又は要素に加えて、1つ以上のさらなるアクティビティが実行され、1つ以上のさらなる要素が含まれてもよいことに留意されたい。さらに、アクティビティが列挙される順序は、必ずしもそれらが実施される順序ではない。また、これらの概念は、特定の実施形態を参照して説明されている。しかし、当業者であれば、以下の特許請求の範囲に記載された本発明の範囲から逸脱することなく、様々な修正及び変更を行うことができることを理解するであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、そのような変更の全ては、本発明の範囲内に含まれることが意図される。
【0055】
特定の実施形態に関して、利益、他の利点、及び、問題に対する解決手段を上述した。しかし、この利益、利点、問題に対する解決手段、及び、任意の利益、利点又は解決手段を生じさせ若しくはより顕著にし得る任意の特徴は、任意又は全ての特許請求の範囲の需要な、必須の、又は、不可欠な特徴と解釈されないものとする。さらに、開示された発明が、本明細書の教示の利益を有する当業者には明白で、異なっているが同等の方法で修正又は実施され得るので、上記で開示された特定の実施形態は例示にすぎない。以下の特許請求の範囲に記載されている以外の、本明細書に示された構成又は設計の詳細に対する制限は意図されていない。したがって、上記で開示された特定の実施形態は、変更又は修正されてもよく、かかる変形の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、本願で求められる保護は、以下の特許請求の範囲に記載されている。