Trusted Platform Module (TPM) は暗号処理を行うプロセッサで、暗号鍵を利用してハードウエアの機密を保持するための仕組みです。 TPM は開発者向けにセキュリティ機能を提供しますので、 TPM を擬似的に再現するエミュレータが存在すると、より安全性の高い仮想環境を構築できるようになります。また、ハードウエア TPM デバイスとは異なり、ゲスト側からのアクセス数に制限がありません。このほか、 TPM バージョン 1.2 と 2.0 を簡単に切り替えて使用することもできます。 QEMU では swtpm パッケージで提供されるソフトウエア TPM エミュレータに対応しています。
ソフトウエア TPM エミュレータをインストールして使用するには、まず libvirt
仮想化環境をインストールする必要があります。 6.2項 「仮想化コンポーネントのインストール」 を参照して、提供されている仮想化ソリューションの中からいずれかをインストールしてください。
swtpm
の使用 #Edit sourceswtpm
は 3 種類のインターフェイスを提供しています。それぞれ socket
, chardev
, cuse
と呼ばれます。下記の手順では socket インターフェイスを使用するものとします。
VM のディレクトリ内に mytpm0
というディレクトリを作成して、ここに TPM の状態を保存します。たとえば VM のディレクトリが /var/lib/libvirt/qemu/sle15sp3
であれば、下記のようになります:
>
sudo
mkdir /var/lib/libvirt/qemu/sle15sp3/mytpm0
あとは swtpm
を起動します。起動を行うと QEMU (例: /var/lib/libvirt/qemu/sle15sp3
) が使用するソケットファイルが作成されます:
>
sudo
swtpm socket --tpmstate dir=/var/lib/libvirt/qemu/sle15sp3/mytpm0 \ --ctrl type=unixio,path=/var/lib/libvirt/qemu/sle15sp3/mytpm0/swtpm-sock \ --log level=20
既定では swtpm
は TPM バージョン 1.2 エミュレータを起動し、その状態を tpm-00.permall
ディレクトリ内に保存します。 TPM 2.0 インスタンスを作成したい場合は、下記のように入力して実行します:
>
sudo
swtpm socket --tpm2 --tpmstate dir=/var/lib/libvirt/qemu/sle15sp3/mytpm0 \ --ctrl type=unixio,path=/var/lib/libvirt/qemu/sle15sp3/mytpm0/swtpm-sock \ --log level=20
TPM 2.0 の場合、状態は tpm2-00.permall
ディレクトリ内に保存されます。
あとは qemu-system-アーキテクチャ
コマンドに対して、下記のようなコマンドラインパラメータを追加します:
>
qemu-system-x86_64 \
[...]
-chardev socket,id=chrtpm,path=/var/lib/libvirt/qemu/sle15sp3/mytpm0/swtpm-sock \
-tpmdev emulator,id=tpm0,chardev=chrtpm \
-device tpm-tis,tpmdev=tpm0
最後にゲスト側で、 TPM デバイスが利用可能になっているかどうかを確認します。具体的には下記のコマンドを入力して実行します:
>
tpm_version
TPM 1.2 Version Info:
Chip Version: 1.2.18.158
Spec Level: 2
Errata Revision: 3
TPM Vendor ID: IBM
TPM Version: 01010000
Manufacturer Info: 49424d00
libvirt
での swtpm の使用 #Edit sourcelibvirt
で swtpm を使用する場合は、ゲストの XML 設定内に TPM デバイスの情報を追加します:
<devices> <tpm model='tpm-tis'> <backend type='emulator' version='2.0'/> </tpm> </devices>
libvirt
の場合、 swtpm はゲストの起動と共に自動的に開始されます。事前に起動しておく必要はありません。 permall
状態ファイルは /var/lib/libvirt/swtpm/VM_UUID
ディレクトリ内に保存されます。
ゲスト側で Open Virtual Machine Firmware (OVMF) を使用している場合、 TPM の完全性計測が行われます。イベントログを読む場合は、 /sys/kernel/security/tpm0/binary_bios_measurements
ファイルを参照してください。
Wikipedia の https://ja.wikipedia.org/wiki/Trusted_Platform_Module には、 TPM に関する大まかな説明が書かれています。
openSUSE Leap 固有の仮想環境の設定については、 第6章 「仮想化コンポーネントのインストール」 に説明があります。
swtpm の使用方法に関する詳細は、マニュアルページ ( man 8 swtpm
) をお読みください。
TPM の libvirt
における仕様については、 https://libvirt.org/formatdomain.html#elementsTpm (英語) に説明が書かれています。
OVMF での UEFI ファームウエアの有効化に関する説明は、 9.3.1項 「高度な UEFI 設定」 をお読みください。