3. 固件启动流程与信任根
在 AMD EPYC 平台上,服务器上电后并不是 CPU 直接跳到 BIOS 代码开始执行。真正最先“醒来”的,是集成在 SoC 内部的一颗独立安全处理器——PSP(Platform Security Processor,平台安全处理器)。它基于 ARM Cortex-A5 内核,拥有独立的 ROM、SRAM 和密钥存储区,构成了整条启动链的硬件信任根(Hardware Root of Trust, HRoT)。理解 EPYC 的固件启动流程,本质上就是理解“信任如何从一颗不可篡改的 ROM 逐级传递到操作系统”的过程。
一、信任根:为什么是 PSP 而不是 BIOS
传统 x86 平台的信任根通常落在 BIOS Flash 上,但 Flash 是可被物理替换或刷写的,因此“BIOS 是否可信”本身无法自证。EPYC 的设计把信任根下沉到芯片内部:PSP 的片上 ROM(Boot ROM)在流片时固化,无法被外部修改,其中包含第一段启动代码和 AMD 公钥。上电复位后,x86 核心仍处于复位状态,只有 PSP 开始执行,它负责验证并加载后续所有固件。这就是“PSP 先启动、x86 后启动”的基本秩序。
二、从 PSP 到 UEFI 的完整启动链
EPYC 的启动链可以划分为若干可验证的阶段,每一阶段在把控制权交给下一阶段之前,都要先验证对方的签名。下图展示了从加电到操作系统加载的信任传递路径,以及各阶段对应的固件对象与验证动作。
三、安全启动链的关键机制
整条链的核心是逐级签名验证。PSP Boot ROM 中固化的 AMD 根公钥(ROTPK)是信任的起点,它验证 PSP 目录的签名;PSP 目录中又包含用于验证下一级固件的公钥哈希。这种“上一级验证下一级”的链式结构,使得任何一级被篡改都会导致验证失败,从而阻断启动。
在 UEFI 阶段,验证机制由 Secure Boot 接管。它使用 PK(Platform Key)、KEK(Key Exchange Key)、db(Authorized Signature Database)和 dbx(Forbidden Signature Database)四级密钥体系。固件在加载每个驱动或引导器前,会检查其签名是否在 db 中、是否不在 dbx 中。EPYC 平台还支持 AMD Secure Processor 的固件 TPM(fTPM),用于度量启动过程并将结果记录到 PCR 寄存器,供操作系统远程证明使用。
四、实操观察:如何确认启动链状态
在 Linux 下,可以通过以下方式观察信任链是否完整建立。首先检查 PSP 是否成功加载固件:
# 查看 PSP 相关内核日志
dmesg | grep -i "psp\|sev\|ccp"
# 典型输出:
# ccp 0000:00:08.0: PSP enabled, firmware version: 0x0b00210a
# ccp 0000:00:08.0: SEV firmware version: 1.55
其次确认 Secure Boot 状态:
# 检查 Secure Boot 是否启用
mokutil --sb-state
# 输出:SecureBoot enabled
# 查看固件度量日志(需 root)
cat /sys/kernel/security/tpm0/binary_bios_measurements | xxd | head
如果 dmesg 中看不到 PSP 固件版本,通常意味着 PSP 固件加载失败或平台未正确配置。此时应检查 SPI Flash 中的 PSP 目录是否完整、签名是否与 ROTPK 匹配。若 Secure Boot 显示 disabled,则需在 BIOS 中确认是否已导入 PK/KEK/db 证书。
五、信任根验证的边界与常见误区
需要明确的是,PSP 信任根验证的是固件来源的完整性与真实性,而不是固件内容的功能正确性。一个签名合法但存在缺陷的固件仍会被加载。此外,ROTPK 一旦熔断到芯片中便不可更改,因此密钥管理必须在生产阶段完成。对于运维人员而言,理解这条链的意义在于:当服务器出现“无法上电自检”或“Secure Boot 拒绝加载”时,能够快速定位是 PSP 阶段、UEFI 阶段还是 OS 阶段的验证失败,而不是盲目更换硬件。
总结来看,EPYC 的启动流程是一条从 PSP Boot ROM 出发、经 PSP 固件目录、UEFI SEC/PEI、DXE,最终到达操作系统引导器的信任链。每一级都通过密码学签名验证下一级,任何一环断裂都会导致启动中止。掌握这条链的结构与验证点,是进行固件调试、安全加固和故障排查的基础。