(58)【調査した分野】(Int.Cl.,DB名)
前記IOMMUにおいて、メモリマップドI/O(MMIO)レジスタにアクセスする要求を受信したことに応じて、前記識別タグ値に基づいて前記MMIOレジスタへのアクセスを許可することを含む、
請求項1の方法。
【発明を実施するための形態】
【0004】
図1〜
図5は、プロセッサのメモリアクセスパスにおいてハードウェア暗号化モジュールを使用してセキュア情報を暗号で隔離することによって、処理システムにおいてセキュア情報を保護する技術を示す図である。プロセッサは、入出力デバイスとメモリとの間のメモリアクセスパスにおいてハードウェア暗号化モジュールを使用して、セキュア情報を暗号で隔離する。いくつかの実施形態では、暗号化モジュールは、プロセッサのメモリコントローラに配置されており、プロセッサの入出力メモリ管理ユニット(IOMMU)に提供される各メモリアクセス要求は、メモリアクセス要求の送信元を識別する要求側ID値を含む。いくつかの実施形態では、プロセッサは、入出力(IO)デバイス上で異なる仮想機能(VF)を実行するために、処理システム内で使用される。例えば、いくつかの実施形態では、暗号化モジュールは、IOデバイス上で実行されているVF毎に一意のキーを記憶する。いくつかのシナリオでは、VFのキーは、処理システムのプロセッサコアとは別のセキュリティモジュールによって生成される場合があるので、ハイパーバイザを含むプロセッサコアで実行されるソフトウェアは、当該キーにアクセスすることができない。IOMMUがDMA要求を受信したことに応じて、メモリアクセス要求に含まれる要求側ID値に基づいて要求側VFの送信元が特定される。要求側ID値は、要求側VFに関連するVM TAG値を、デバイステーブルを用いて検索するために、IOMMUによって使用される。VM TAG値は、メモリに書き込まれたデータを暗号化し又はメモリから読み出されたデータを復号化するために、DMA要求で使用される特定の暗号化キーを識別する。
【0005】
いくつかの実施形態では、本明細書において説明する技術は、物理的に安全ではない環境で使用される処理システムにおいて実施され、処理システムのメモリは、認可されていない物理的アクセス(例えば、ハードウェアメモリモジュールの盗難、又は、メモリの物理的プローブ等)にさらされる。しかしながら、暗号化モジュールは、セキュアデータを暗号化形式でメモリに記憶するので、セキュアデータは、認可されていない物理的アクセスを受けたとしても、容易に利用することができない。例えば、認可されたVFが、別のVM/VFに割り当てられたメモリ位置に記憶されているデータを取得するようにDMA要求を試みたとしても、データは、誤った暗号化キーを用いてアクセスされ、その結果、誤ったキーが暗号化/復号化に使用される(すなわち、メモリアクセスに応じて、データの正確な平文/クリアテキストが返されない)。
【0006】
図1は、いくつかの実施形態による、情報の暗号保護を提供する処理システム100を示す図である。処理システム100は、プロセッサ102と、メモリ104と、を含む。処理システム100は、サーバ、パーソナルコンピュータ、タブレット、セットトップボックス、ゲームシステム等の様々な電子デバイスの何れにも組み込むことができる。プロセッサ102は、概して、プロセッサ102の回路を操作して定義されたタスクを実行する命令(例えば、コンピュータプログラム)のセットを実行するように構成されている。メモリ104は、プロセッサ102が使用するデータを記憶することによって、これらのタスクの実行を容易にする。メモリ104は、ランダムアクセスメモリ(RAM)や、フラッシュメモリ又はハードディスクドライブ(HDD)等の不揮発性メモリや、これらの組み合わせとすることができる。また、処理システム100は、物理入出力(I/O)デバイス106を含む。物理I/Oデバイス106は、例えば、ネットワークインタフェースカード(NIC)又はホストバスアダプタ(HBA)等とすることができる。
【0007】
プロセッサ102は、セキュリティモジュール108を含む。セキュリティモジュール108は、汎用プロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、プロセッサコアの動作モード、又は、処理システム100のセキュリティ動作を実行するように設計され構成された他のモジュールであり、セキュリティ動作には、プロセッサ102で実行されるエンティティ(例えば、仮想マシン及びコンピュータプログラム等)の登録、実行されるエンティティのセキュリティキーの生成及び識別、セキュリティ動作のための処理システム100の認証等が含まれる。いくつかの実施形態では、セキュリティモジュール108は、悪用に対して脆弱な状態になる動作を実行することのないように、セキュリティモジュール108の動作を実行することが許可される前にセキュア登録プロセスを経てもよく、セキュリティモジュール108の動作がセキュリティ動作のみに制限されてもよい。本明細書でさらに説明するように、セキュリティモジュール108は、セキュリティキーを生成し、処理システム100で実行されるように登録されたエンティティを識別し、暗号隔離を可能にする他の動作によって、処理システム100における情報の暗号隔離をサポートする。
【0008】
また、プロセッサ102は、プロセッサコア110,112と、キャッシュ114と、メモリコントローラ(例えば、ノースブリッジ)116と、セキュリティモードレジスタ118と、を含む。プロセッサコア110,112は、命令を個別及び同時に実行する処理ユニットである。いくつかの実施形態では、プロセッサコア110,112の各々は、命令をフェッチし、フェッチした命令を対応する動作に復号化し、処理システム100のリソースを使用して様々な動作を実行する個別の命令パイプラインを含む。さらに、プロセッサ102は、デバイス(
図1に示すI/Oデバイス106等)をメモリコントローラ116に接続するために使用される入出力メモリ管理ユニット(IOMMU)120を含む。
【0009】
いくつかの実施形態では、処理システム100は、メモリ104に記憶されている情報の場所又は情報の種類(例えば、命令若しくはデータ)に対応するメモリアドレスと共に含まれる制御ビットに基づいて情報のセキュリティ指定(情報を暗号保護するかどうか)が割り当てられる、セキュリティスキームを実施する。これにより、大量のデータをセキュア情報として簡単に分類し、効率的な情報保護を提供することが可能になる。例えば、いくつかの実施形態では、制御ビットは、特定の種類の情報(例えば、命令情報、又は、仮想アドレスからメモリ104の物理アドレスへのマッピングを提供するページテーブル情報等)がセキュア情報として指定されるように、処理システム100によって設定される。これにより、この情報が暗号保護される。データに割り当てられたアドレスの制御ビットは、例えば、プロセッサ102で実行されるプログラムによって要求された指定に基づいて、よりきめ細かい方法で指定することができる。このセキュリティスキームは、より一般的なデータに柔軟性を提供しながら、重要なデータの保護を提供する(例えば、仮想マシン又はそのプログラムの不正な実行を抑制する)。
【0010】
いくつかの実施形態では、情報に割り当てられたセキュリティの種類は、情報に対応するメモリアドレスに基づいて指定されるので、処理システム100は、ページテーブル自体を使用して、各メモリアドレスのセキュリティの種類を示す。したがって、後述するように、IOMMU120は、メモリアクセス要求に対応するメモリアドレスを識別する過程において、メモリアクセス要求の種類を識別する。具体的には、メモリアドレスがセキュア情報を記憶するものと示されている場合、対応するメモリアクセスは、セキュアメモリアクセスとして識別される。同様に、メモリアドレスが非セキュア情報を記憶しているものと示されている場合、対応するメモリアクセスは、非セキュアメモリアクセスとして識別される。
【0011】
メモリコントローラ116は、I/Oデバイス106がメモリ104と通信するためのインタフェースを提供する。IOMMU120は、I/Oデバイス106からメモリアクセス要求(例えば、ダイレクトメモリアクセス要求)を受信し、メモリコントローラ116を介したメモリ104へのこれらの要求の提供を制御する。また、メモリコントローラ116は、メモリアクセス要求に対する応答をメモリ104から受信し、I/Oデバイス106への応答の提供を制御する。
【0012】
情報の暗号隔離を提供するために、メモリコントローラ116は、特定の暗号標準に従って、キー124に基づいて、情報を暗号化及び復号化するように構成された暗号化モジュール122を含む。いくつかの実施形態では、暗号化モジュール122は、高度暗号化規格(AES)暗号化及び復号化を使用するように構成されているが、他の実施形態では、暗号化モジュール122は、他の暗号化/復号化技術を使用し得る。
【0013】
メモリコントローラ116は、各メモリアクセス要求を、2つの種類(すなわち、メモリアクセス要求に対応する情報が暗号保護指定されていることを示すセキュアメモリアクセス要求、又は、メモリアクセス要求に対応する情報が暗号保護指定されていないことを示す非セキュアメモリアクセス要求)うち1つの種類として識別するように構成されている。メモリコントローラ116は、書き込み要求の受信に応じて、当該要求がセキュアメモリアクセス要求であるか、非セキュアメモリアクセス要求であるかを識別する。書き込み要求が非セキュアメモリアクセス要求である場合、メモリコントローラ116は、暗号化モジュール122をバイパスして、書き込まれる情報を暗号化せずに書き込み要求をメモリ104に提供する。書き込み要求がセキュアメモリアクセス要求である場合、メモリコントローラ116は、メモリアクセス要求を生成したI/Oデバイス106に割り当てられたキー124のうち1つのキーを識別する。いくつかの実施形態では、メモリコントローラ116は、本明細書でさらに説明するように、I/Oデバイス106に割り当てられた識別タグ値(すなわち、VM TAG)に基づいて、キーを識別し選択する。暗号化モジュール122は、選択されたキーを使用して、書き込まれる情報を暗号化し、暗号化された情報と共に書き込み要求を、記憶のためにメモリ104に提供する。いくつかの実施形態では、暗号化モジュール122は、対応する情報の暗号化及び復号化のために、選択されたキー及びメモリアクセス要求の物理アドレスの両方を使用し、これにより、ブロック移動攻撃を防ぐ。いくつかの実施形態では、暗号化モジュール122は、プロセッサ102における制御ビット(図示省略)の状態に基づいて、暗号化及び復号化のために物理アドレスを使用するか否かを識別する。制御ビット状態は、セキュリティモジュール108によって設定することができる。
【0014】
メモリコントローラ116は、読み出し要求を受信したことに応じて、要求をメモリ104に提供し、次いで、当該要求に応じた情報を受信する。メモリコントローラ116が読み出し要求を非セキュアメモリアクセス要求として識別した場合、メモリコントローラ116は、暗号化モジュール122をバイパスし、読み出し情報を、暗号化することなくI/Oデバイス106に提供する。メモリコントローラ116が読み出し要求をセキュアメモリアクセス要求として識別した場合、メモリコントローラ116は、読み出しアクセス要求を生成したI/Oデバイス106に割り当てられたキー124のうち1つのキーを識別し、暗号化モジュール122は、読み出し情報を復号化する。次に、メモリコントローラ116は、復号化された読み出し情報をI/Oデバイス106に提供する。
【0015】
いくつかの実施形態では、暗号化モジュール122の動作を制御するために、セキュリティモードレジスタ118が使用される。セキュリティモードレジスタ118は、ガードモードオンフィールド126と、ガードモードアクティブフィールド128と、を含む。ガードモードオンフィールド126が特定の状態(例えば、ネゲート状態)であることに応じて、メモリコントローラ116は、セキュアメモリアクセス要求を含む全てのメモリアクセス要求について暗号化モジュール122をバイパスする。これにより、処理システム100は、プロセッサ102及びI/Oデバイス106で実行されている全てのプログラムについて暗号化及び復号化がバイパスされるモードで動作することが可能になる。
【0016】
ガードモードオンフィールド126が異なる特定の状態(例えば、アサート状態)であることに応じて、メモリコントローラ116は、ガードモードアクティブフィールド128の状態を識別する。ガードモードアクティブフィールド128が特定の状態(例えば、ネゲート状態)であることに応じて、メモリコントローラ116は、受信したメモリアクセス要求(セキュアメモリアクセス要求を含む)について暗号化モジュール122をバイパスし、ガードモードアクティブフィールド128が異なる状態(例えば、アサート状態)であることに応じて、非セキュアメモリアクセス要求についてのみ暗号化モジュール122をバイパスする。いくつかの実施形態では、ガードモードオンフィールド126は、プロセッサ102における複数の個々のプログラム又はエンティティ(例えば、VM)の実行を管理するエンティティ(例えば、ハイパーバイザ)によって設定され、個々のプログラム又はエンティティ毎に個別に設定される。したがって、セキュリティモードレジスタ118によって、暗号化モジュール122の使用を異なる粒度レベルで制御することが可能になる。
【0017】
いくつかの実施形態では、I/Oデバイス106は、IOMMU120に送信された仮想アドレスを含むメモリアクセス要求を開始することによって、メモリコントローラ116を使用して、ダイレクトアクセスメモリ(DMA)要求を介してメモリ104内のセキュア情報130にアクセスすることができる。IOMMU120は、I/Oデバイス106によって使用されるデバイス仮想アドレスと、メモリ104内の物理アドレスと、の間でアドレス変換を実行することができる。例えば、I/Oデバイス106は、メモリ104にデータを記憶する書き込み要求と、メモリ104からデータを取得する読み出し要求と、を含むメモリアクセス要求を生成する。各メモリアクセス要求は、メモリアクセス要求が対象とするメモリ104内の位置を示すメモリアドレスを含む。メモリ104は、読み出し要求に応じて、読み出し要求のメモリアドレスに対応する位置に記憶されている情報(データ又は命令)を取得し、当該情報をI/Oデバイス106に提供する。メモリ104は、書き込み要求に応じて、書き込み要求のメモリアドレスに対応する位置に、要求の書き込み情報を記憶する。
【0018】
さらに、暗号化モジュール122は、メモリアクセス要求に関連するデータの暗号化(書き込みアクセスの場合)又は復号化(読み出しアクセスの場合)を実行する。セキュアメモリアクセスの場合、暗号化モジュール122は、メモリアクセスに関連するデータの暗号化(書き込みアクセスの場合)又は復号化(読み出しアクセスの場合)を実行する。後述するように、プロセッサのメモリアクセスパス内のハードウェアによって暗号化が行われるので、メモリ104に記憶されたデータは、正しい暗号化/復号化キーなしに有意義にアクセスすることができない。
【0019】
図2は、いくつかの実施形態による、
図1の処理システム100の例示的な動作を示す図である。プロセッサ202は、2つの仮想マシン(VM)、すなわちVM−A204及びVM−B206を同時に実行するように構成されている。また、プロセッサ202は、ハイパーバイザ208を実行して、VM204,206と処理システムのハードウェアとの間のインタフェースを提供する。動作中、VM204,206の各々は、プロセッサ202で実行されるのが許可される前に、セキュリティモジュール210に登録される。いくつかの実施形態では、VM所有者がセキュリティモジュール210とのセキュア通信チャネル212を確立したものとして、VMが登録される。「VM TAG」で示す識別タグ値と、「VM KEY」で示すセキュリティキーとが、VMに対して生成される。この生成は、セキュリティモジュール210又は別のセキュリティデバイスで行われ、セキュア通信チャネル212を介してセキュリティモジュール210に通信されてもよい。いくつかの実施形態では、各VMのVM TAG値は、ハイパーバイザ208によって最初に書き込まれ、セキュリティモジュール210に提供されて暗号化される。セキュリティモジュール210は、VM KEY及びVM TAG値の各々が、対応するVMに一意であることを保証する。VM所有者は、対応するVMのイメージを暗号化してハイパーバイザ208に提供し、ハイパーバイザ208は、暗号化されたイメージをセキュアデータとしてメモリ214(例えば、セキュア情報空間232,234)に記憶する。
【0020】
ハイパーバイザ208は、各VMを、当該VMの対応する暗号化アドレス空間に割り当てる。セキュア情報232は、VM−A204のVMイメージを含み、セキュア情報234は、VM−B206のVMイメージを含む。メモリ214は、プロセッサ202が使用するデータを記憶する。メモリ214は、ランダムアクセスメモリ(RAM)や、フラッシュメモリ又はハードディスクドライブ(HDD)等の不揮発性メモリや、これらの組み合わせとすることができる。
【0021】
また、処理システムは、物理入出力(I/O)デバイス216を含む。物理I/Oデバイス216は、例えば、ネットワークインタフェースカード(NIC)又はホストバスアダプタ(HBA)等とすることができる。I/Oデバイス216は、デバイス上に構成された複数の仮想機能(VF)を含むことができる。例えば、I/Oデバイス216は、デバイス上に構成された2つのVF、すなわちVF−A218及びVF−B220を含む。ハイパーバイザ208は、VF218,220を、VM204,206にマッピングする(例えば、割り当てる)。例えば、VF−A218は、VM−A204にマッピングされ、VF−B220は、VM−B206にマッピングされる。さらに、セキュリティモジュール210は、各VFに一意の識別タグ値(例えば、VM TAG)を割り当てることによって、VMをI/OデバイスのVFに対応付ける。この構成によって、IOMMU224を介したVMからI/Oデバイス216のレジスタへのパスが提供され、認可されたVMのみが対応するVFのレジスタに到達することができることを保証する。例えば、メモリ214内に存在するデバイステーブル236において、VM−A TAGは、VF−A218に対応付けられており、VM−B TAGは、VF−B220に対応付けられている。
【0022】
デバイス(I/Oデバイス216等)をメモリコントローラ222に接続するために、IOMMU224が使用される。IOMMU224は、I/Oデバイス216がメモリ214と通信するためのインタフェースを提供する。メモリコントローラ222は、IOMMU224を介してI/Oデバイス216からメモリアクセス要求(例えば、ダイレクトメモリアクセス要求)を受信し、これらの要求のメモリ214への提供を制御する。また、メモリコントローラ222は、メモリ214からのメモリアクセス要求への応答を受信し、I/Oデバイス216への応答の提供を制御する。
【0023】
メモリコントローラ222は、情報の暗号隔離を提供するために、特定の暗号標準に従って、キー228,230に基づいて、情報を暗号化及び復号化するように構成された暗号化モジュール226を含む。いくつかの実施形態では、暗号化モジュール226は、高度暗号化標準(AES)暗号化及び復号化を使用するように構成されているが、他の実施形態では、暗号化モジュール226は、他の暗号化/復号化技術を使用することができる。従来、ハイパーバイザ208は、プロセッサ202と直接対話し、これにより、VM204,206に関連する全てのセキュリティキーにアクセスすることができる。これにより、悪意又は欠陥のあるハイパーバイザが、VMのセキュア情報へのアクセスを、認可されていない者に提供することが可能になる。例えば、悪意のあるハイパーバイザ又はVM−Aが、VM−Bに割り当てられたデバイスVF−Bと通信して、特定の悪意のあるDMA動作をVM−Bのメモリ内に実行するのを抑制することが望ましい。同様に、悪意のあるVFは、認可されていない他のVM/VFによって使用される情報にアクセスするために、DMAの実行を試みる場合がある。これに対し、本明細書でさらに説明するように、
図2の例では、セキュリティキーへのアクセスは、セキュリティモジュール210によって管理され、認可された情報へのVFアクセスのみが許可される。
【0024】
セキュリティモジュール210は、セキュリティキーを生成し、処理システムで実行されるために登録されたエンティティを識別し、暗号隔離を可能にする他の動作によって、情報の暗号隔離をサポートする。セキュリティキーの生成は、セキュリティモジュール210又は別のセキュリティデバイスにおいて行われ、セキュア通信チャネル212を介してセキュリティモジュール210に通信され得る。セキュリティモジュール210は、VM KEY及びVM TAG値の各々が、対応するVMに一意であることを保証する。本明細書で使用される「セキュリティキー」という用語は、認証又は暗号化キー、及び、キーに署名する任意の証明書又は証明書チェーンを指す。セキュリティモジュール210は、VM−A204及びVM−B206の各々に関連する2つの異なるセキュリティキー、すなわちKEY−A228及びKEY−B230を生成して保持する。セキュリティモジュール210は、ハイパーバイザ208がセキュリティキーにアクセスできないように、セキュリティキー228,230をメモリコントローラ222に直接提供する。いくつかの実施形態では、セキュリティモジュール210は、キーをメモリコントローラ222のレジスタに直接書き込むことによって、キーを提供する。これらのレジスタは、プロセッサ202で実行されるハイパーバイザ208又は他のエンティティにアクセスできず(例えば、アドレス指定できない)、したがって、悪意のあるエンティティがセキュリティキー228,230にアクセスし、次にセキュア情報アドレス空間232,234にアクセスするのを抑制する。
【0025】
図3は、いくつかの実施形態による、例示的なダイレクトメモリアクセス動作を実行する
図1及び
図2の処理システムの一部を示す図である。図示した例では、プロセッサ302は、2つの仮想マシン(VM)、すなわちVM−A304及びVM−B306を同時に実行するように構成されている。また、プロセッサ302は、ハイパーバイザ308を実行して、VM304,306と処理システムのハードウェアとの間のインタフェースを提供する。動作中、VM304,306の各々は、プロセッサ302で実行されるのを許可される前に、セキュリティモジュール310に登録される。ハイパーバイザ308は、各VMを、メモリ312内のVMに対応する暗号化アドレス空間に割り当てる。メモリ312は、プロセッサ302が使用するデータを記憶する。メモリ312は、ランダムアクセスメモリ(RAM)や、フラッシュメモリ、ハードディスクドライブ(HDD)等の不揮発性メモリや、これらの組み合わせとすることができる。セキュア情報空間314は、VM−A304に対応付けられており、セキュア情報空間316は、VM−B306に対応付けられている。
【0026】
また、処理システムは、物理入出力(I/O)デバイス318と、メモリコントローラ320と、入出力メモリ管理ユニット(IOMMU)322と、を含む。物理I/Oデバイス318は、例えば、ネットワークインタフェースカード(NIC)又はホストバスアダプタ(HBA)等とすることができる。I/Oデバイス318は、デバイス上に構成された複数の仮想機能(VF)を含むことができる。I/Oデバイス318は、デバイス上に構成された2つのVF、すなわちVF−A324及びVF−B326を含む。ハイパーバイザ308は、VF324,326を、VM304,306にマッピングする(例えば、割り当てる)。例えば、VF−A324は、VM−A304にマッピングされ、VF−B326は、VM−B306にマッピングされる。
【0027】
図2を参照して上述したように、セキュリティモジュール310は、各VFに一意の識別タグ値(例えば、VM TAG)を割り当てることによって、VMをI/OデバイスのVFに対応付ける。プロセッサ302がVM−Aを実行する場合、VM−AがVM−A TAG(すなわち、識別タグ値)と共にロードされ、このタグは、メモリにアクセスするときに使用される。例えば、VM−A TAGは、セキュリティモジュール310によってVF−A324に割り当てられ、VM−B TAGは、VF−B326に割り当てられる。また、セキュリティモジュール310は、セキュリティキー328,330を生成して、メモリコントローラ320に提供する。
図3の例では、セキュリティモジュール310は、VM−A304及びVM−B306の各々に関連する2つの異なるセキュリティキー、すなわちKEY−A328及びKEY−B330を生成して保持する。セキュリティモジュール310は、ハイパーバイザ308がセキュリティキーにアクセスできないように、セキュリティキー328,330をメモリコントローラ320に直接提供する。
【0028】
これと同じタグが、I/Oデバイス318内のメモリマップドI/O(MMIO)レジスタにアクセスするときに提供される。IOMMU322は、保護テーブルを用いて、VM−Aタグを有するMMIO要求が、要求されたMMIOアドレスにアクセスすることを許可されているかどうかを識別するように構成されている。いくつかの実施形態では、IOMMUは、VMアクセシビリティと共にMMIOアパーチャ(例えば、MMIOレジスタに関連するメモリ物理アドレス空間の一部)を含むルックアップテーブル(図示省略)を含む。ルックアップテーブルは、MMIOトラフィック(例えば、VMからI/Oデバイス318のMMIOへの読み書き)をチェックするために使用され、VM TAGを、許容可能なダウンストリームのMMIOアドレス範囲に対応付ける。VM TAGは、VMからI/Oデバイス318へのトラフィックを認可するためのMMIOアクセス要求に含まれる。VMによって提供された値とVFに割り当てられた値との間でVM TAG値の不一致がある場合、I/Oデバイス318のMMIOへのアクセスが抑制される。このMMIO隔離によって、悪意のあるハイパーバイザが、VMにアクセスできるVFを制御するのを抑制することができる。
【0029】
いくつかの実施形態では、このダウンストリームのMMIOアクセスの認可は、IOMMU322によって実行されるが、代替としてIOMMU322とは別のモジュールで実行することもできる。この構成により、VMからI/Oデバイス318のレジスタへのパスが提供され、セキュリティモジュール310によって認可されたVMのみが、関連するVFのレジスタに到達できることが保証される。本明細書で使用される「ダウンストリーム」という用語は、IOMMU322を介したVMからI/Oデバイス318への読み出し又は書き込みを含むMMIOトラフィックを指す。「アップストリーム」という用語は、IOMMU322を介したVF324,326又はI/Oデバイス318からメモリ312への読み出し又は書き込みを含むダイレクトメモリアクセス(DMA)トラフィックを指す。
【0030】
デバイス(I/Oデバイス318等)をメモリコントローラ320に接続するために、IOMMU322が使用される。メモリコントローラ320は、I/Oデバイス318がメモリ312と通信するためのインタフェースを提供する。いくつかの例では、メモリコントローラ320は、IOMMU322を介してI/Oデバイス318からメモリアクセス要求(例えば、ダイレクトメモリアクセス要求)を受信し、これらの要求のメモリ312への提供を制御する。別の例では、メモリコントローラ320は、メモリアクセス要求に対する応答をメモリ312から受信し、I/Oデバイス318への応答の提供を制御する。
【0031】
I/Oデバイス318のVF324,326は、メモリアクセス要求を開始することによって、ダイレクトアクセスメモリ(DMA)要求を介して、メモリコントローラ320を使用し、メモリ312内のセキュア情報314,316にアクセスすることができる。例えば、これらの実行の過程において、VF324,326は、セキュア情報314,316にアクセスする(記憶及び取得する)。暗号化モジュール332は、セキュア情報314,316が暗号隔離されていることを保証し、これにより、そこに記憶されているデータは、各々のVM/VFに割り当てられたセキュリティキーを使用してのみ暗号化/復号化することができる。
【0032】
いくつかの実施形態では、VF324,326は、メモリ要求の対象となる仮想アドレスと、VF毎に一意の要求側IDと、を含むメモリアクセス要求を、IOMMU322に提供する。例えば、VF−A324は、そのメモリアクセス要求と共に「REQUEST ID−A」という要求側IDを送信し、VF−Bは、そのメモリアクセス要求と共に「REQUEST ID−B」という要求側IDを送信する。要求側IDは、I/Oデバイスハードウェア(例えば、デバイス番号及び仮想機能番号)、及び/又は、システムバイオスファームウェア若しくはハイパーバイザ308(例えば、バス番号)によって部分的に制御することができる。IOMMU322は、メモリ312に記憶された、要求側IDに対するVM TAGのマッピングを含むデバイステーブル340を使用して、受信した要求側IDに関連するVM TAGを検索することによって、DMA動作の要求側IDに基づいてVM TAG値を決定する。
【0033】
いくつかのシナリオでは、悪意のあるエンティティは、(例えば、ソフトウェアエミュレーションを介して)IOMMU322をエミュレートすることによって、VMのセキュア情報にアクセスしようと試みる場合がある。これらのシナリオに対処するために、いくつかの実施形態では、IOMMU322及びVM304,306は、IOMMU322がエミュレートされていないことを保証するインテグリティチェック手順を実行することができる。具体的には、IOMMU322のインテグリティ(完全性)をチェックするために、VM304,306は、指定されたコマンドを、メモリ312の対応するセキュア情報空間に書き込むことができる。例えば、いくつかの実施形態では、各々のVMがページテーブルを変更する場合、VM304,306は、IOMMU TLB無効化コマンドを、対応するセキュア情報空間の特定位置に書き込む。IOMMU322は、セキュア情報空間からコマンドを読み出し、当該コマンドを実行し(例えば、そのTLB336内の古いアドレス変換のキャッシュされたコピーを無効にすることによって)、コマンドの完了時に、対応するセキュア情報空間の特定位置に特定値を書き込む(すなわち、特定位置に記憶されているコマンドに上書きする)。IOMMUは、メモリコントローラ320を介してメモリ312に特定値を書き込むので、特定値は、コマンドを発行したVMに対応する暗号化キーを使用して書き込まれる。コマンドを発行したVMは、特定位置の特定値を定期的にチェックする。特定位置に誤った値が書き込まれているとVMが識別した場合、又は、特定位置のコマンドが特定の時間内に上書きされなかった場合、VMは、ページテーブルコマンドが発行されたエンティティが認可されていないと判別し、次いで、是正措置を講じ得る。プロセッサ302は、セキュア情報空間を使用してインテグリティチェックを実行することによって、不正なエンティティがIOMMU322をエミュレートしてセキュア情報空間にアクセスすることができないことを保証する。具体的には、不正なエンティティは、特定値を正しく暗号化することができないので(正しい暗号化キーを認識していないため)、特定値をメモリ312に書き込むことができない。
【0034】
いくつかの実施形態では、IOMMU322は、要求の仮想メモリアドレスに含まれる1つ以上のビットに基づいて、メモリアクセス要求がセキュアメモリアクセス要求であるか否かを識別する。例えば、
図4及び
図5においてさらに説明するように、仮想アドレスは、アクセス要求がセキュアであるか、非セキュアであるかを示すC−ビットを含む。要求が非セキュアである場合、IOMMU322は、暗号化モジュール332をバイパスして、暗号化又は復号化なしにメモリアクセス要求を満たす。
【0035】
要求がセキュアメモリアクセス要求である場合(例えば、アサートされているC−ビットに基づいて)、IOMMU322は、デバイステーブル340を用いて、DMAを要求しているVF(例えば、メモリアクセス要求を生成したVF324,326のうち1つ)によって提供された要求側ID(例えば、REQUEST ID−A又はID−B)に基づいて、VM TAGを検索する。識別されたVM TAGは、メモリコントローラ320の暗号化モジュール332に提供され、暗号化モジュール332は、DMA要求と共に使用される暗号化キーを識別する(すなわち、メモリ読み出しは、関連するキーを使用して、メモリ312からのデータを復号化し、メモリ書き込みは、関連するキーを使用して、メモリ312に送られるデータを暗号化する)。したがって、暗号化モジュール332は、IOMMUから出力されたVM TAGに対応するセキュリティキー328,330のうち1つのキーを選択し、選択したキーを使用して、メモリアクセス情報(読み出しデータ又は書き込みデータ)に対して暗号化(書き込み要求の場合)又は復号化(読み出し要求の場合)を実行する。
【0036】
また、IOMMU322は、I/Oデバイス318に関連するページテーブル情報(ページテーブル338内)を検索して、アドレス変換に使用する。IOMMU322は、I/Oデバイス318によって使用されるデバイス仮想アドレスと、メモリ312内の物理アドレスと、の間でアドレス変換を実行するためのアドレス変換モジュール334及び変換索引バッファ(TLB)336を含む。IOMMU322は、TLB336とメモリ312内のページテーブル338とを利用して、メモリアクセス要求の対象となるメモリの特定のページの物理アドレスを取得する。ページテーブル338は、仮想アドレスを物理アドレスにマッピングする。メモリコントローラ320は、メモリのページにアクセスするために、物理アドレスを使用する。いくつかの実施形態では、IOMMUアドレス変換後に導出される物理アドレスの上位ビットは、暗号化モジュール332への転送のためにVM TAGを符号化するために、再利用することができる。他の実施形態では、VM TAGは、物理アドレスとは別に送信されてもよい。
【0037】
IOMMU322は、要求側IDに基づいてVM TAGを検索し、DMA要求の対象となる物理アドレスをメモリコントローラ320に転送する。いくつかの実施形態では、IOMMUアドレス変換後に導出される物理アドレスの上位ビットは、暗号化モジュール332への転送のためにVM TAGを符号化するために、再利用することができる。他の実施形態では、VM TAGは、物理アドレスとは別に送信されてもよい。メモリコントローラは、要求を受信すると、VM TAGに基づいて暗号化キーを検索し、次に、暗号化モジュールを使用してメモリを暗号化/復号化する。これにより、I/Oデバイス318上で実行されているVFは、関連するVMと同じ暗号化キー(例えば、KEY−A328及びKEY−B330)を参照することによって、メモリ312の暗号化されたメモリ領域に直接アクセスすることが可能になり、VM304,306及びハイパーバイザ308との対話が不要になる。上述したように、データの暗号保護は、メモリコントローラ320で行われ、暗号保護に使用されるセキュリティキーは知られておらず、VF324,326、VM304,306及びハイパーバイザ308にはアクセスできない。これにより、或るVFが他のVM/VFのセキュア情報にアクセスできないことが保証される。
【0038】
DMA要求は、通常、メモリコントローラ320に渡されるが、適切なVM TAG(DMA要求と共に提供され、VM TAGを検索するためにデバイステーブル340によって使用される要求側ID値に基づく)を有していてもよいし、有していなくてもよく、したがって、適切な暗号化キー又は誤った暗号化キーを使用したメモリアクセスが発生し得る。例えば、要求側VFによって提供された要求側IDに関連するVM TAGが、正しいセキュリティキーと一致する場合に、メモリアクセス要求は、メモリトラフィックを暗号化/復号化するために、適切なセキュリティキーと共に暗号化モジュール332に転送され、これにより、要求側VFが、関連するVMのセキュアメモリ空間にアクセスすることが可能になる。しかしながら、要求側VFによって提供された要求側IDに関連するVM TAGが、正しいセキュリティキーと一致しない場合に、セキュアメモリ空間内の物理メモリは、未だ読み出し又は書き込みされるが、誤ったキーを使用して復号化/暗号化することになる。誤ったセキュリティキーを用いて読み出しを行うと、復号化後に正確な平文が返されないという結果に陥る。
【0039】
例えば、いくつかの実施形態では、VF−A324は、セキュア情報316(VF−B326のセキュア情報)にアクセスするためのメモリアクセス要求を発行することができる。メモリアクセス要求がVF−A324によって生成されたので、IOMMU322は、メモリ312のデバイステーブル340にアクセスして、VF−A324に関連するVM TAGを検索し、メモリコントローラ320に提供する。VF−A324のVM−Aタグがメモリコントローラ320に提供され、メモリコントローラ320は、暗号化モジュール332を使用して、提供されたVM−Aタグに関連するセキュリティキーを検索する。メモリアクセス要求の対象となるセキュア情報316は、セキュアデータを暗号化するために元々使用されていたKEY−B330ではなく、KEY−A328を使用して復号化される。よって、誤ったキーを使用してデータが復号化されたので、VF−Aは、復号化されたデータを有意義に又は正しく解釈することができない。したがって、VM−B306/VF−B326のセキュア情報316は、VF−A324によるアクセスから暗号隔離されている。
【0040】
図4は、いくつかの実施形態による、メモリアクセス要求のセキュリティの種類(例えば、セキュア又は非セキュア)の識別を可能にするIOMMU322の一部を示す図である。具体的には、
図4は、アドレス変換モジュール434と、変換索引バッファ(TLB)436と、を示す。アドレス変換モジュール434は、概して、対応するメモリアクセス要求の仮想アドレスを、VF(例えば、
図3のVF−A324及びVF−B326)から受信するように構成されている。アドレス変換モジュール434は、受信した各仮想アドレスを、メモリアクセス要求の対象となるメモリ312の位置を識別する、対応する物理アドレスに変換する。
【0041】
アドレス変換モジュール434は、TLB436及びページテーブル438(例えば、
図3のメモリ312内)のうち一方又は両方を使用して、仮想アドレスを、対応する物理アドレスに変換する。ページテーブル438は、仮想アドレスによりインデックス化された複数のエントリ(例えば、エントリ402)を含む。いくつかの実施形態では、ページテーブル438は、マルチレベルページテーブルであり、これにより、より高いレベルのページは、仮想アドレスに関連する他のページを識別するエントリを含み、より低いレベルのページは、仮想アドレスに割り当てられた物理アドレスを識別する。ページウォークにおいてページテーブルをトラバースすることによって、物理アドレスを識別することができる。アクセスされる次のレベルのページを識別するために最高レベルのページが最初にアクセスされ、物理アドレスを含む最低レベルのページテーブルが識別され、その最高レベルのページテーブルから物理アドレスが取得されるまで、同様の動作が続く。また、最低レベルのページテーブルは、物理アドレスに対応するデータが暗号的に保護されているか否かを示すビット(「C−ビット」と呼ばれる)を記憶する。TLB436は、アドレス変換モジュール434によって最近受信された仮想アドレスを反映するページテーブル438のエントリのサブセットを共に記憶する複数のエントリ(例えば、エントリ404)を含む。
【0042】
アドレス変換モジュール434は、仮想アドレスの受信に応じて、TLB436にアクセスして、TLBが仮想アドレスに対応するエントリを含むか否かを判別する。アドレスのC−ビット部分は、メモリアクセス要求がセキュアメモリアクセス要求であるか否かを識別するために、IOMMU322によって使用される。したがって、例えば、物理アドレス値内のC−ビットがアサート状態である場合、メモリIOMMU322は、対応するメモリアクセス要求をセキュアメモリアクセス要求として識別し、要求側に対応するVM TAGを検索する。アドレス変換モジュール434は、VM TAGを物理アドレスに加えて、結果として得られた物理アドレス値を、セキュリティキーを検索するのに暗号化モジュールによって使用されるために提供する。ページテーブルエントリ内のC−ビットがデアサートされている場合、IOMMU322は、VM TAGを物理アドレスに加えず、メモリアクセスは、暗号化又は復号化なしに進行する。
【0043】
図5は、いくつかの実施形態による、暗号保護のために指定された情報を保護するために、メモリコントローラでダイレクトメモリアクセス要求を処理する方法500のフロー図である。説明のために、方法500は、
図3のIOMMU322における例示的な実施態様に関して述べられる。ブロック502において、IOMMU322は、要求側VFからメモリアクセス要求を受信する。メモリアクセス要求は、VF324又はVF326のうち1つによって生成された要求であってもよい。
図1〜
図4に関連して上述したように、メモリアクセス要求のアドレス値は、メモリアクセス要求がセキュアメモリアクセス要求であるか否かを示すC−ビット値と、要求側VFを識別する要求側ID値と、を含むことができる。
【0044】
ブロック504において、IOMMU322は、メモリアクセス要求のC−ビットがアサートされているか否かを判別する。アサートされていない場合、メモリアクセス要求は非セキュアメモリアクセス要求であり、方法フローはブロック506に進み、メモリコントローラ320は、暗号化モジュール332をバイパスしてメモリアクセス要求を満たす。書き込み要求の場合、メモリコントローラ320は、書き込み情報を暗号化しないので、メモリ312は、書き込み情報を暗号化されていない形式で記憶する。読み出し要求の場合、メモリコントローラ320は、メモリ312から情報を取得し、情報を復号化せずに要求側VFに提供する。
【0045】
ブロック504に戻って、メモリアクセス要求のC−ビットがアサートされているとIOMMU322が識別した場合、メモリアクセス要求は、セキュアメモリアクセス要求である。したがって、方法フローはブロック508に進み、IOMMU322は、
図3で説明したデバイステーブル340を使用して、要求側VFの要求側IDに基づいてVM TAGを検索する。VM TAGがメモリコントローラ320に提供され、方法フローはブロック510に進む。ブロック510において、メモリコントローラ320は、提供されたVM TAGに対応するセキュリティキー328,330のうち1つのキーを識別する。ブロック512において、暗号化モジュール332は、メモリアクセス要求を満たすために使用される情報を暗号化又は復号化する。すなわち、メモリアクセス要求が書き込み要求である場合、暗号化モジュール332は、識別されたセキュリティキーを使用して、書き込まれる情報を暗号化する。メモリアクセス要求が読み出し要求である場合、メモリコントローラ320は、メモリ312から読み出される情報を取得し、暗号化モジュール332は、識別されたセキュリティキーを使用して、取得された情報を復号化する。ブロック514において、メモリコントローラ320は、暗号化された情報(書き込み要求の場合)又は復号化された情報(読み出し要求の場合)を用いて、メモリアクセス要求を満たす。
【0046】
いくつかの実施形態では、
図1〜
図5を参照して上述したプロセッサ等の上述した装置及び技術は、1つ以上の集積回路(IC)デバイス(集積回路パッケージ又はマイクロチップとも呼ばれる)を備えるシステムで実施される。これらのICデバイスの設計及び製造には、通常、電子設計自動化(EDA)及びコンピュータ支援設計(CAD)ソフトウェアツールが使用される。これらの設計ツールは、通常、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計又は適合するための処理の少なくとも一部を実行するように1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作する、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能な非一時的なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されてもよいし、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスされてもよい。
【0047】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の記憶媒体、又は、記憶媒体の組み合わせを含むことができる。かかる記憶媒体には、限定されないが、光媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、キャッシュ)、不揮発性メモリ(例えば、読み出し専用メモリ(ROM)、フラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステム(例えば、システムRAM又はROM)に内蔵されてもよいし、コンピュータシステム(例えば、磁気ハードドライブ)に固定的に取り付けられてもよいし、コンピュータシステム(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)に着脱可能に取り付けられてもよいし、有線又は無線のネットワークを介してコンピュータシステム(例えば、ネットワークアクセス可能なストレージ(NAS))に接続されてもよい。
【0048】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0049】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。