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 和英特尔公司先前完成的 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 实例与系统上的逻辑 vTPM 之间存在一对一的映射。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 工具栈将 vTPM 驱动程序的支持添加到 Xen 中。有关设置 vTPM 和 vTPM 管理器存根域的详细信息,请参阅 Xen 文档 (docs/misc/vtpm.txt)。一旦存根域运行,就会以与域配置文件中的磁盘或网络设备相同的方式设置 vTPM 设备。

为了使用 IMA 等需要在 initrd 之前加载 TPM 的功能,必须将 xen-tpmfront 驱动程序编译到内核中。如果不使用此类功能,则可以将驱动程序编译为模块,并将像往常一样加载。