SEVは、ハイパーバイザーの制御下で複数のVMを実行することをサポートするAMD-Vアーキテクチャの拡張機能です。 有効にすると、SEVハードウェアはすべてのコードとデータにVM ASIDをタグ付けします。VMASIDは、データの送信元または送信先のVMを示します。 このタグは、SOC内では常にデータとともに保持され、所有者以外の人がそのデータを使用することを防ぎます。 タグはSOC内のVMデータを保護しますが、128ビット暗号化を使用したAESはSOC外のデータを保護します。 データがSOCを出入りするとき、関連するタグに基づくキーを使用してハードウェアによって暗号化/復号化されます。
図 SEVアーキテクチャ、仮想マシンのメモリの内容は、対称AESアルゴリズムと各仮想マシンの個別のキーを使用して暗号化されます。
したがって、メモリ内容の暗号化/復号化は、マイクロプロセッサレベル(System-on-Chip、SOC)で、データ自体が内部キャッシュにある時点で発生します。 データがマイクロプロセッサーの内部メモリーにロードされると、暗号化が解除され、アンロードされると暗号化されます。
図 SEVを使用すると、個々のアプリケーションのメモリを分離して暗号化し、不正アクセスから保護することもできます。
AMDの専門家は、メモリブロックの分離と暗号化は、仮想マシン全体のレベルだけでなく、Intel SGXで提供される個々のアプリケーションのレベルでも発生する可能性があることを示しています。
SEVは、良性であるが脆弱な(完全に悪意のない)ハイパーバイザーからゲストVMを保護するように設計されています。 特に、ゲストVMの攻撃対象領域を減らし、ゲストデータを盗むために特定のタイプのVMエスケープバグ(たとえば、ハイパーバイザーの読み取り専用)が使用されるのを防ぐことができます。
SEVにより、アプリケーションは、より高い特権レベルのアプリケーションからだけでなく、潜在的に脆弱なハイパーバイザー、VMエスケープなどの攻撃に対して攻撃者が使用できる脆弱性からもメモリ領域を保護できます。
図 SEVの使用例。
上の図は、SEVの典型的な使用例を示しています。 仮想マシン(ゲスト)は、仮想ページにコードとアプリケーションデータをプライベート(つまり、暗号化される)としてマークし、プロセスページのテーブルがあるメモリページにも保護対策が必須です。 ハイパーバイザーと仮想マシンの両方で利用可能なサービス共有データ(共有)は、パブリックとしてマークされます。 メモリのプライベート部分のすべてのコンテンツは、ハイパーバイザーに認識されていない特定の仮想マシンの個別のキーを使用して暗号化されます。 共有メモリの内容は、ハイパーバイザーキーを使用して暗号化されます。
SEVの詳細な説明は、AMDのマニュアルに記載されています 。