s390(IBM Z)保護 VM のブート/IPL
概要
保護仮想マシン(PVM)のメモリは、I/O やハイパーバイザからアクセスできない。 ハイパーバイザが PVM のメモリにアクセスする必要がある場合は、そのメモリを アクセス可能にしなければならない。ハイパーバイザからアクセス可能にした メモリは暗号化される。詳しくは Documentation/virt/kvm/s390/s390-pv.rst を 参照。"
IPL(ブート)では、小さい平文のブートローダが起動する。これは KVM に、 暗号化されたコンポーネントに関する情報と、保護仮想マシンを復号するために 必要なメタデータを提供する。
このデータに基づき、KVM は保護仮想マシンを Ultravisor(UV)に知らせ、PVM の メモリの保護、コンポーネントの復号、データとアドレスリストのハッシュの検証を 行って完全性を保証するよう UV に指示する。その後 KVM は、UV が横取りして KVM に代わって実行する SIE 命令で PVM を実行できる。
ゲストイメージは、自ら PV モードへ切り替える不透明なカーネルイメージの ようなものなので、ユーザはブート手順を変えることなく、利用可能なあらゆる 方法(ネットワーク、dasd、scsi、ダイレクトカーネルなど)で暗号化された ゲストの実行ファイルとデータを読み込める。
Diag308
この診断命令は、仮想マシンの IPL と関連する操作を扱う基本の仕組みである。 VM は IPL 情報ブロックを設定・取得できる。これは IPL の方法/デバイスを 指定し、VM メモリとサブシステムのリセットや IPL を要求する。
PVM では、この仕組みが新しいサブコードで拡張されている:
サブコード 8: タイプ 5 の IPL 情報ブロック(PVM 用の情報ブロック)を設定する サブコード 9: 保存したブロックをゲストメモリに格納する サブコード 10: 保護仮想化モードへ移行する
新しい PV load-device-specific-parameters フィールドは、PV モードへ移行する ために必要なすべてのデータを指定する。
PV ヘッダの開始位置
PV ヘッダの長さ
- 次の要素からなるコンポーネントのリスト
AES-XTS tweak プレフィックス
開始位置
サイズ
PV ヘッダには鍵とハッシュが含まれる。UV はこれを使って PV を復号・検証する。 また、制御フラグと開始 PSW も含まれる。
コンポーネントとは、たとえば暗号化されたカーネル、カーネルパラメータ、 initrd である。コンポーネントは UV が復号する。
暗号化されたデータを最初にインポートした後は、定義済みのすべてのページが ゲストの内容を含む。指定されていないページは、最初のアクセス時にゼロページ として扱われる。
保護仮想化モードで実行しているときは、一部のサブコードが例外を引き起こしたり エラーコードを返したりする。
ゲストメモリをクリアしない操作を指定するサブコード 4 と 7 は、仕様例外を 引き起こす。セキュア VM が削除されるときに UV がすべてのメモリをクリアする ため、クリアしない IPL サブコードは許可されないのである。
サブコード 8、9、10 は仕様例外を引き起こす。保護モードへの再 IPL は、 非保護モードを経由する回り道でのみ可能である。
鍵
すべての CEC は固有の公開鍵を持ち、ツールで暗号化イメージを構築できる。 ツールについては s390-tools を参照。