English日本語

功能

Windows 11 不用绕过

能得到什么

给虚拟机打开 TPM(向导里勾选,或在配置里写 "tpm": true),其余的 keelOS 都自动处理:第一次开机时生成 TPM 的身份(背书密钥、证书、SHA-256 的 PCR 组);每次开机或恢复时起一个新的 TPM 模拟器。TPM 的永久状态放在这台虚拟机自己的 ZFS 数据集里,快照和复制都会带上它。

怎么做的

虚拟机看到的是标准的 CRB 接口 TPM,后面是 swtpm,也就是 QEMU 和 Proxmox 用的那个 TPM 模拟器。keelOS 把它的两条通道都接上了:数据通道传 TPM 命令,控制通道管上电、复位和状态的导出导入。所以虚拟机重启时 TPM 会复位;挂起时,TPM 的易失状态(PCR、会话、已加载的密钥)写进虚拟机的检查点,恢复时灌进一个新的模拟器。宿主重启时用的也是这个检查点。

上游 bhyve 的 TPM 代码也修结实了:格式不对的命令回 TPM 错误,而不是让 TPM 永久失效;没实现的寄存器像真硬件一样忽略,而不是停掉虚拟机;模拟器挂了,虚拟机只收到 TPM 错误,照常运行。

实测

  • Windows 11 25H2:安装程序自己的 TPM 2.0 和 Secure Boot 检查直接通过,没有任何绕过。
  • BitLocker 用 TPM 保护器加密了系统盘。
  • Windows 重启:TPM 自动解封,没要恢复密钥。
  • 挂起再恢复(换成新的模拟器进程):暂停 3.7 秒,TPM 和 BitLocker 照常。
  • 恢复前后 PCR 的值一致;虚拟机自己重启时,PCR 从零重新度量。

顺带解决的:新建的虚拟机把所有 vCPU 放进一个插槽(Windows 11 专业版最多用两个插槽);修了一个让 Windows 重启时卡住的 e1000 中断问题。

还没做的

  • TPM 状态文件没有加密。它和磁盘在同一台机器上,加密在这里能防的情形有限。
  • Secure Boot 还没有预置微软的密钥。
  • 要固件在下次开机时执行的 TPM 请求(比如 Windows 里的"清除 TPM")会丢,上游 bhyve 也一样。
  • 打开 BitLocker 之前要先卸下可启动的安装 ISO,否则 Windows 会拒绝。

阅读文章 →

← 全部功能