
栏目介绍:“玩转OurBMC” 是OurBMC社区开创的知识分享类栏目,主要聚焦于社区和BMC全栈技术相关基础知识的分享,全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过 “玩转OurBMC” 栏目,帮助开发者们深入了解到社区文化、理念及特色,增进开发者对BMC全栈技术的理解。
欢迎各位关注 “玩转OurBMC” 栏目,共同探索OurBMC社区的精彩世界。同时,我们诚挚地邀请各位开发者向 “玩转OurBMC” 栏目投稿,共同学习进步,将栏目打造成为汇聚智慧、激发创意的知识园地。
在现代数据中心架构中,基板管理控制器(BMC)由于承担带外管理职责并具备接近硬件级的控制权限,其安全性直接关系到整机系统的可信性。一旦BMC遭受Rootkit等固件级攻击,攻击者可绕过操作系统防护机制,获取对底层硬件资源的深度控制能力。因此,构建自底向上的不可篡改信任链,成为保障BMC安全的关键。
以飞腾腾珑E2000(以下简称E2000或飞腾E2000)网安版为代表的新一代国产处理器平台,在芯片内部SE安全域集成了符合GM/T 0012-2020规范的可信密码模块(TCM),提供硬件级可信根能力。该内置TCM原生支持SM2/SM3/SM4等国密算法,为BMC构建可信启动体系提供坚实基础。
本文作为本系列的第三篇,将视线从BMC 侧可信能力进一步向外延伸,探讨如何把已落地的 TCM 信任根通过标准 CRB 协议经 PCIe 链路暴露给主机,实现从 BMC 可信到整机可信的跨越。我们将先系统梳理 TCG CRB 的控制区、Start 握手与命令/应答缓冲机制,再深入解析一次 TPM 命令的完整流转路径,并串联启动度量、远程证明等典型整机可信场景,呈现一套以标准协议为纽带、贯穿 BMC 到主机 OS 的可信延伸实践指南。
01 TPM-CRB 协议介绍
CRB(Command/Response Buffer,命令/应答缓冲接口)是 TCG (可信计算组织)为 TPM 2.0 定义的标准硬件抽象接口。与 FIFO 接口的字节流管道不同,CRB 采用内存映射的命令/应答缓冲 + 控制寄存器握手模式。CRB 的关键特性是 bus agnostic(物理总线无关)——规范明确它可以各式各样的物理接口上,而协议本身只规定软件如何与 TPM 对话,不限定 TPM 芯片的物理位置。
与FIFO 相比,CRB 的优势在于:软件一次性写入完整命令缓冲,无需逐字节轮询;控制寄存器提供明确的就绪/忙/完成语义;且同一套 CRB 驱动可适配多种物理承载方式。
| 区域 | 作用 |
| Control Area (控制区) | 状态机维护 |
| Command Buffer (命令缓冲区) | 软件写入TPM命令 |
| Response Buffer (应答缓冲区) | TPM写入应答 |

02 TCM-CRB 在OurBMC上的实践
飞腾腾珑E2000 BMC自带TCM可信根,因此我们可以基于 BMC 自带的TCM可信根与 PCIe 链路规范,通过 PCIe Endpoint (EP) 模式将 BMC 模拟为一个标准的 TCM/TPM 2.0 设备。Host 端无需修改操作系统内核(使用Linux内核原生 tpm_crb 驱动),仅需通过 ACPI 描述向Host OS提供CRB相关的寄存器信息,即可识别并使用该可信根。
系统采用了 Host 轮询 (Polling) + BMC 中断触发 (Doorbell) 的混合交互模式,既保证了 Host 端驱动的兼容性,又通过硬件机制降低了 BMC 端的 CPU 负载。
BAR 空间规划:采用双BAR分离设计,以隔离控制流和数据流。
BAR 1 (Control Area):配置为 Doorbell 监控区域,Host 写入该区域可触发 BMC 硬件中断。

BAR 2 (Data Area):用于存放CRB 协议寄存器(Request, Status, Start 等)与 Command/Response Buffer。

基于CRB规范,完成一次TPM命令执行的流程如下:
1、命令发送:
a) Host 将 TCM 指令数据写入 BAR 2 (Data Area) 的 Command Buffer;
b) Host 将 BAR2 控制区域的 start 字段置1;
2、触发执行:
a) Host 调用 ACPI 的 _DSM 方法将控制权移交 BIOS。由 BIOS 的 AML 代码写入Doorbell区域触发中断;
b) BMC PCIe 控制器检测到 BAR 1 的写操作,命中预设的 Doorbell 监控窗口,立即向 BMC CPU 触发硬件中断;
c) BMC 中断服务程序唤醒 TCM 业务进程,开始处理。此机制消除了 BMC 对 Start 位的轮询等待;
3、命令处理:
a) BMC 读取 BAR 2 中的指令,调用后端物理 TCM (PhyTCM);
b) 计算完成后,BMC 将结果写回 BAR 2 的 Response Buffer;
4、完成通知:
a) BMC 将 BAR 2 的 Start 寄存器写为 0;
b) Host 的 tpm_crb 驱动在发送命令后进入轮询循环 (Polling Loop),检测到 Start 变为 0 后,判定命令执行完成;
5、读取响应:
a) Host 从 BAR 2 读取返回数据;

03 总结
本系列第一期介绍了BMC 本地的可信启动流程:从 BMC 上电开始,固件/操作系统各启动阶段依次对下一级镜像做哈希度量,将结果扩展到 TCM 的 PCR 中,从而在 BMC 域内建立起一条可验证的完整性链。第二期在此基础上构建了完整的TCM 软件栈,使 BMC 不仅能完成本地度量,还具备远程证明与完整性度量架构能力。
本期则将这条信任链延伸到了主机侧。对主机软件而言,将BMC视作可信根与使用主板外接 TPM 并无差别,但信任锚点实际驻留在 BMC 域。由此,第一期验证过的启动度量机制可以复用于主机启动路径;第二期积累的远程证明、完整性校验等软件能力,也可通过直接服务于整机,而无需在主机侧重复建设一套可信软件栈。

欢迎大家关注OurBMC社区,了解更多BMC技术干货。
OurBMC社区官方网站:
https://www.ourbmc.cn/
:从 BMC 可信到整机可信&spm=1001.2101.3001.5002&articleId=163138516&d=1&t=3&u=584c4b4a30134401b9ef52f40085865f)
1583

被折叠的 条评论
为什么被折叠?



