Xen 虚拟 TPM 接口¶
作者:Matthew Fioravante (JHUAPL), Daniel De Graaf (NSA)
本文档介绍了 Xen 的虚拟可信平台模块 (vTPM) 子系统。 假定读者熟悉构建和安装 Xen、Linux,并且基本了解 TPM 和 vTPM 概念。
简介¶
这项工作的目标是为虚拟客户操作系统(在 Xen 术语中,DomU)提供 TPM 功能。 这允许程序以与在物理系统上与 TPM 交互相同的方式在虚拟系统中与 TPM 交互。 每个客户机都有自己唯一的、模拟的软件 TPM。 但是,每个 vTPM 的机密(密钥、NVRAM 等)都由 vTPM 管理器域管理,该域将机密密封到物理 TPM。 如果创建这些域(管理器、vTPM 和客户机)的过程是可信的,则 vTPM 子系统会将信任链从硬件 TPM 扩展到 Xen 中的虚拟机。 vTPM 的每个主要组件都实现为一个单独的域,提供由虚拟机监控程序保证的安全隔离。 vTPM 域在 mini-os 中实现,以减少内存和处理器开销。
此 mini-os vTPM 子系统构建在 IBM 和 Intel 公司之前完成的 vTPM 工作之上。
设计概述¶
vTPM 的架构如下所述
+------------------+
| Linux DomU | ...
| | ^ |
| v | |
| xen-tpmfront |
+------------------+
| ^
v |
+------------------+
| mini-os/tpmback |
| | ^ |
| v | |
| vtpm-stubdom | ...
| | ^ |
| v | |
| mini-os/tpmfront |
+------------------+
| ^
v |
+------------------+
| mini-os/tpmback |
| | ^ |
| v | |
| vtpmmgr-stubdom |
| | ^ |
| v | |
| mini-os/tpm_tis |
+------------------+
| ^
v |
+------------------+
| Hardware TPM |
+------------------+
- Linux DomU
想要使用 vTPM 的基于 Linux 的客户机。 可能有多个这样的客户机。
- xen-tpmfront.ko
Linux 内核虚拟 TPM 前端驱动程序。 此驱动程序为基于 Linux 的 DomU 提供 vTPM 访问。
- mini-os/tpmback
Mini-os TPM 后端驱动程序。 Linux 前端驱动程序连接到此后端驱动程序,以促进 Linux DomU 与其 vTPM 之间的通信。 此驱动程序也由 vtpmmgr-stubdom 使用,以与 vtpm-stubdom 通信。
- vtpm-stubdom
实现 vTPM 的 mini-os 桩域。 在正在运行的 vtpm-stubdom 实例和系统上的逻辑 vtpms 之间存在一对一映射。 vTPM 平台配置寄存器 (PCR) 通常全部初始化为零。
- mini-os/tpmfront
Mini-os TPM 前端驱动程序。 vTPM mini-os 域 vtpm-stubdom 使用此驱动程序与 vtpmmgr-stubdom 通信。 此驱动程序也用于与 vTPM 域通信的 mini-os 域中,例如 pv-grub。
- vtpmmgr-stubdom
实现 vTPM 管理器的 mini-os 域。 只有一个 vTPM 管理器,它应该在机器的整个生命周期内运行。 此域调节对系统上物理 TPM 的访问,并保护每个 vTPM 的持久状态。
- mini-os/tpm_tis
Mini-os TPM 1.2 版 TPM 接口规范 (TIS) 驱动程序。 vtpmmgr-stubdom 使用此驱动程序直接与硬件 TPM 通信。 通过将硬件内存页映射到 vtpmmgr-stubdom 来促进通信。
- 硬件 TPM
焊接在主板上的物理 TPM。
与 Xen 集成¶
使用 Xen 4.3 中的 libxl 工具栈在 Xen 中添加了对 vTPM 驱动程序的支持。 有关设置 vTPM 和 vTPM 管理器桩域的详细信息,请参阅 Xen 文档 (docs/misc/vtpm.txt)。 桩域运行后,以与域配置文件中的磁盘或网络设备相同的方式设置 vTPM 设备。
为了使用诸如 IMA 等需要在 initrd 之前加载 TPM 的功能,xen-tpmfront 驱动程序必须编译到内核中。 如果不使用此类功能,则可以将驱动程序编译为模块并照常加载。