背景
Host存在使用三方插卡展示BMC侧可信度量信息诉求,BMC增加IPMI接口将度量日志信息通过IPMI接口传递给host侧,构建符合可信计算3.0标准的硬件信任链,实现BMC与Host间的可信协同,满足等保/关基要求
评审点
新增IPMI命令用于带内获取BMC侧启动度量,硬件度量信息
详细描述
命令名称: 查询可信计算度量信息
命令说明: 可信计算相关信息查询接口
命令权限: ReadOnly
是否锁定之后可以访问: 是
是否有敏感数据: 否
命令样式:
- 请求:
ipmitool raw 0x30 0x93 <ManufacturerID> <SubCmd> <Data Type> <reserved> <Offset> <Length> - 响应:
<Completion Code> <ManufacturerID> <End of List> <data>
命令请求参数:
| 字节顺序 | 域取值说明 |
|---|---|
| NetFn | 30h |
| Cmd | 93h |
| 1:3 | Manufacturer ID,LS Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 4 | SubCmd,固定为 93h |
| 5 | Data Type, 数据类型,详见 数据类型说明 |
| 6:7 | 预留扩展,填0 |
| 8:9 | Offset, 读取的数据偏移,LS Byte first |
| 10 | Length,读取长度 |
命令响应参数:
| 字节顺序 | 域取值说明 |
|---|---|
| 1 | Completion Code 00h = 【标准完成码】命令响应成功 C0h = 【标准完成码】命令总线忙 C1h = 【标准完成码】命令无效 CEh = 【标准完成码】命令无法响应,数据未准备完成 |
| 2:4 | Manufacturer ID,LS Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 5 | End of List,表示当前数据是否结束。当参数数据比较长的时候,可能需要分多次读取,通过此字段可以判断数据是否读完。 [7:1]:reserved. [0]:End of list,取值如下: 0:当前是最后一帧数据 1:当前不是最后一帧数据 |
| 6 | Data,实际返回的数据长度可能小于等于Length,响应数据见表数据类型说明 |
数据类型说明
| Data Type | Data Format | 读写类型 | 子命令字可用通道 | 描述 |
|---|---|---|---|---|
| 0 | 见表版本信息格式 | read only | bt/ipmb | 芯片版本、固件版本等,见下表版本信息格式 |
| 1 | 见表BMC信息格式 | read only | bt/ipmb | BMC基础固件度量信息 |
| 2 | 见表BMC信息格式 | read only | bt/ipmb | BMC引导固件度量信息 |
| 3 | 见表BMC信息格式 | read only | bt/ipmb | BMC运行固件度量信息 |
| 4 | 见表BMC信息格式 | read only | bt/ipmb | BMC安全协处理器固件度量信息 |
| 5 | 见表BMC信息格式 | read only | bt/ipmb | BIOS固件度量信息 |
| 6 | 见表OS信息格式 | read only | bt/ipmb | Host安全引导固件度量信息 |
| 7 | 见表OS信息格式 | read only | bt/ipmb | Host引导固件度量信息 |
| 8 | 见表OS信息格式 | read only | bt/ipmb | Host引导固件配置度量信息 |
| 9 | 见表OS信息格式 | read only | bt/ipmb | Host内核固件度量信息 |
| 10 | 见表OS信息格式 | read only | bt/ipmb | Host初始根文件系统度量信息 |
| 11 | 见表硬件度量信息格式 | read only | bt/ipmb | CPU设备硬件度量信息 |
| 12 | 见表硬件度量信息格式 | read only | bt/ipmb | 网卡设备硬件度量信息 |
| 13 | 见表硬件度量信息格式 | read only | bt/ipmb | NPU设备硬件度量信息 |
| 14 | 见表硬件度量信息格式 | read only | bt/ipmb | GPU设备硬件度量信息 |
数据格式说明
版本信息格式
| Data字节顺序 | 长度(byte) | 描述 |
|---|---|---|
| data 1 | 1 | 信息格式版本号,当前版本为1 |
| data 2:5 | 4 | tcm芯片版本(16进制编码),LS Byte first |
| data 6:9 | 4 | tcm固件版本(16进制编码),LS Byte first |
BMC信息格式
| Data字节顺序 | 长度(byte) | 描述 |
|---|---|---|
| data 1 | 1 | 信息格式版本号,当前版本为1 |
| data 2:5 | 4 | TCG定义的类型,平台状态寄存器索引值,从1开始,LS Byte first |
| data 6:9 | 4 | TCG定义的类型,代表日志事件类型,当前事件类型取值为0xf1,LS Byte first |
| data 10:41 | 32 | data 46:N+32 数据的hash值(16进制编码) |
| data 42:45 | 4 | data 46:N+32 数据长度 |
| data 46:49 | 4 | 固件类型,取值包括:1 - L1,2 - UBoot,3 - Rootfs,4 - BIOS,7 - Coprocessor |
| data 50:53 | 4 | 固件数量 |
| data 54:N | 40*固件数量 | 每个固件在存储区域的offset(4字节)、size(4字节),以及hash值(32字节) |
| data N+1:N+32 | 32 | 所有固件的hash拼接后计算得出的hash值 |
| data N+33:N+64 | 32 | 固件名称(字符串,包含结束符) |
| data N+65:N+96 | 32 | 实际度量值(16进制编码) |
| data N+97:N+128 | 32 | 基准度量值(16进制编码) |
| data N+129 | 1 | 对比结果,255:未刷新/无效数据,0:成功,1:失败 |
| data N+130 | 1 | 控制行为,255:未刷新/无效数据,0:允许启动,1:阻止启动 |
OS信息格式
| Data字节顺序 | 长度(byte) | 描述 |
|---|---|---|
| data 1 | 1 | 信息格式版本号,当前版本为1 |
| data 2:33 | 32 | 固件名称(字符串,包含结束符) |
| data 34:65 | 32 | 实际度量值(16进制编码) |
| data 66:97 | 32 | 基准度量值(16进制编码) |
| data 98 | 1 | 对比结果,255:未刷新/无效数据,0:成功,1:失败 |
| data 99 | 1 | 控制行为,255:未刷新/无效数据,0:允许启动,1:阻止启动 |
硬件度量信息格式
| Data字节顺序 | 长度(byte) | 描述 |
|---|---|---|
| data 1 | 1 | 信息格式版本号,当前版本为1 |
| data 2 | 1 | 组件数量 |
| data 3:34 | 32 | 固件名称(字符串,包含结束符),带槽位号 |
| data 35:66 | 32 | 实际度量值(16进制编码) |
| data 67:98 | 32 | 基准度量值(16进制编码) |
| data 99:130 | 32 | 实际型号(字符串,包含结束符) |
| data 131:162 | 32 | 基准型号(字符串,包含结束符) |
| data 163:194 | 32 | 实际厂商(字符串,包含结束符) |
| data 195:226 | 32 | 基准厂商(字符串,包含结束符) |
| data 227:290 | 64 | 实际标识(字符串,包含结束符) |
| data 291:354 | 64 | 基准标识(字符串,包含结束符) |
| data 355 | 1 | 部件状态,0:正常,1:增加,2:移除,3:变更,其它:失败 |
| data 356:N | 353 | 如果有多个部件,格式同 data 3:355 |
命令示例:
样例1:
- 请求:
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x93 0x00 0x00 0x00 0x00 0x00 0x05 - 响应:
db 07 00 00 01 00 00 09 00
评审结论
同意新增IPMI命令带内获取BMC侧启动度量,硬件度量信息
命令请求参数:
| 字节顺序 | 域取值说明 |
|---|---|
| NetFn | 30h |
| Cmd | 93h |
| 1:3 | Manufacturer ID |
| 4 | SubCmd,固定为 93h |
| 5 | Data Type, 数据类型,详见 数据类型说明 |
| 6:7 | 预留扩展,填0 |
| 8:9 | Offset, 读取的数据偏移,LS Byte first |
| 10 | Length,读取长度 |
命令响应参数:
| 字节顺序 | 域取值说明 |
|---|---|
| 1 | Completion Code |
| 2:4 | Manufacturer ID |
| 5 | End of List [0]:End of list,取值如下: 0:当前是最后一帧数据 1:当前不是最后一帧数据 |
| 6 | Data,实际返回的数据长度可能小于等于Length |
数据格式定义参考详细描述
遗留问题
1、确认是否可以不用多帧设计
结论: 需要使用多帧设计,后面演进会使用quote签名,某个数据类型的属性查询会超过200字节