21 软件 TPM 模拟器 #
21.1 简介 #
可信平台模块 (TPM) 是使用加密密钥保护硬件的加密处理器。对于使用 TPM 开发安全功能的开发人员而言,软件 TPM 模拟器是一种便利的解决方案。与硬件 TPM 设备相比,该模拟器对可以访问它的 Guest 数不设限制。此外,您可以方便地在 TPM 版本 1.2 与 2.0 之间切换。QEMU 支持 swtpm 软件包中包含的软件 TPM 模拟器。
21.2 先决条件 #
您需要先安装 libvirt
虚拟化环境,然后才能安装并使用软件 TPM 模拟器。请参见第 6.2 节 “安装虚拟化组件”并安装所提供的虚拟化解决方案之一。
21.3 安装 #
要使用软件 TPM 模拟器,请安装 swtpm 软件包:
>
sudo
zypper install swtpm
21.4 将 swtpm
与 QEMU 配合使用 #
swtpm
提供三种类型的接口:socket
、chardev
和 cuse
。以下过程重点介绍 socket 接口。
在 VM 目录(例如
/var/lib/libvirt/qemu/sle15sp3
)中创建mytpm0
目录用于存储 TPM 状态:>
sudo
mkdir /var/lib/libvirt/qemu/sle15sp3/mytpm0开始
swtmp
.它将创建 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提示:TPM 版本 2.0默认情况下,
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=20TPM 2.0 状态存储在
tpm2-00.permall
目录中。将以下命令行参数添加到
qemu-system-ARCH
命令:>
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运行以下命令,以校验在 Guest 中是否可以使用 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
21.5 将 swtpm 与 libvirt
配合使用 #
要将 swtpm 与 libvirt
搭配使用,请将以下 TPM 设备添加到 Guest XML 规范中:
<devices> <tpm model='tpm-tis'> <backend type='emulator' version='2.0'/> </tpm> </devices>
libvirt
将自动为 Guest 启动 swtpm。您无需提前手动启动 swtpm。相应的 permall
文件是在 /var/lib/libvirt/swtpm/VM_UUID
中创建的。
21.6 使用 OVMF 固件进行 TPM 测量 #
如果 Guest 使用开放虚拟机固件 (OVMF),它将使用 TPM 来测量组件。可以在 /sys/kernel/security/tpm0/binary_bios_measurements
中找到事件日志。
21.7 资源 #
维基百科在 https://en.wikipedia.org/wiki/Trusted_Platform_Module 页面上全面介绍了 TPM。
第 6 章 “安装虚拟化组件”中介绍了如何在 SUSE Linux Enterprise Server 上配置特定的虚拟化环境。
swtpm 的手册页 (
man 8 swtpm
) 中提供了其用法细节。https://libvirt.org/formatdomain.html#elementsTpm 上提供了 TPM 的详细
libvirt
规范第 10.3.1 节 “高级 UEFI 配置”中介绍了如何使用 OVMF 启用 UEFI 固件。