背景
支持业界标准SPDM协议,在支持SPDM协议的组件上电接入时,可以通过SPDM协议获取接入组件身份信息。
关联issue
资源参考
openBMC实现
openBMC的资源协作接口有一个associations的关联机制,可以在资源注册后把几个资源关联起来
存在一个SPDM Responder的资源,持有如下资源:
deviceName -> 设备名称
inventoryPath -> 设备资源路径
componentIntegrity -> 设备完整性资源路径 -> 证书资源在这个下面、getSignedMeasurements也在这实现
trustedComponent -> 可信组件资源路径
- /xyz/openbmc_project/Inventory/Item/TrustedComponent.interface.yaml
path:/xyz/openbmc_project/TrustedComponent/:DeviceName
prop:
TrustedComponentTypeassociations:reported_by -> xyz.openbmc_project.Attestation.ComponentIntegrity
protecting -> xyz.openbmc_project.Inventory.Item
- /xyz/openbmc_project/Attestation/ComponentIntegrity.interface.yaml
path:
/xyz/openbmc_project/ComponentIntegrity/:DeviceName
prop:
Enabled
Type
TypeVersion
LastUpdated
associations:
authenticated_by -> xyz.openbmc_project.Inventory.Item
reported_by -> xyz.openbmc_project.Inventory.Item.TrustedComponent
- /xyz/openbmc_project/Attestation/MeasurementSet.interface.yaml
method:
SPDMGetSignedMeasurements
整体方案
整体资源层级如下:
- /bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName
- /bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/Certificates
- /bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/Certificates/:Id
- /bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/ComponentIntegrity
- /bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/ComponentIntegrity/:Id
- /bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/ComponentIntegrity/:Id/Measurements
- /bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/ComponentIntegrity/:Id/Measurements/:Index
评审点
评审点1:新增资源协作接口:bmc.kepler.RoT.TrustedComponent
评审点2:新增资源协作接口:bmc.kepler.RoT.ComponentIntegrity
评审点3:新增资源协作接口:bmc.kepler.RoT.ComponentIntegrity.MeasurementSet
评审点4:新增资源协作接口:bmc.kepler.RoT.ComponentIntegrity.SPDMMeasurement
评审点5:新增证书资源
path:/bmc/kepler/Chassis/:ChassisId/TrustedComponent/:DeviceName/Certificates/:Id
实现已有资源协作接口:bmc.kepler.CertificateService.Certificate
详细描述
评审点1:新增资源协作接口呈现组件可信根信息
path:/bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName
interface:bmc.kepler.RoT.TrustedComponent
变化类型:新增资源协作接口
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|---|
| Name | 新增属性 | s | 无 | 只读r:ReadOnly | 不持久化 | false | 可信根对应组件的名称,如:CPU1 | ||
| TargetComponent | 新增属性 | s | 无 | 只读r:ReadOnly | 不持久化 | false | 指向可信根对应组件的资源 | 对应资源下需实现 bmc.kepler.Inventory.Hardware 接口 | |
| Type | 新增属性 | s | 无 | 枚举:Discrete,Integrated | 只读r:ReadOnly | 不持久化 | false | 可信组件的类型,例如可信组件的任何物理特征:离散/集合,定义参考redfish规范TrustedComponent资源的TrustedComponentType属性 |
评审点2:新增资源协作接口呈现组件完整性校验信息
path:/bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/ComponentIntegrity/:Id
interface:bmc.kepler.RoT.ComponentIntegrity
变化类型:新增资源协作接口
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|---|
| Type | 新增属性 | s | 无 | 枚举:SPDM,TPM | 只读,读权限:ReadOnly | 不持久化 | false | 上报本完整性报告所使用的安全技术,定义参考redfish规范ComponentIntegrity资源的ComponentIntegrityType属性 | 当前仅实现SPDM,TPM预留 |
| Version | 新增属性 | s | 无 | 只读,读权限:ReadOnly | 不持久化 | false | 上报本完整性报告所使用的安全技术的版本号,定义参考redfish规范ComponentIntegrity资源ComponentIntegrityTypeVersion属性 | ||
| LastUpdated | 新增属性 | t | 无 | 只读,读权限:ReadOnly | 不持久化 | false | 组件完整性报告最后更新时间 |
评审点3:新增资源协作接口呈现整体度量信息
path:/bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/ComponentIntegrity/:Id
interface:bmc.kepler.RoT.ComponentIntegrity.MeasurementSet
变化类型:新增资源协作接口
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|---|
| Specification | 新增属性 | s | 无 | 枚举:DMTF | 只读r:ReadOnly | 不持久化 | false | 协商的度量规范,当前标准仅支持DMTF | |
| SummaryType | 新增属性 | s | 无 | 枚举:All,TCB | 只读r:ReadOnly | 不持久化 | false | 度量摘要的类型。All:包含所有组件的度量摘要;TCB:仅包含可信计算基的度量摘要 | 当前仅有TCB |
| SummaryHashAlgorithm | 新增属性 | s | 无 | 只读r:ReadOnly | 不持久化 | false | 用于计算摘要的hash算法 | ||
| SummaryHash | 新增属性 | s | 无 | 只读r:ReadOnly | 不持久化 | false | 度量摘要数据,用SummaryHashAlgorithm指定的算法计算出的摘要数据的Base64编码字符串 |
| 方法名称 | 变化类型 | 请求签名 | 响应签名 | 权限 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|
| SPDMGetSignedMeasurements | 新增方法 | ayys | sssss | SecurityMgmt | 用于向SPDM响应端请求生成一个挑战响应 |
请求参数:
| 参数名称 | 签名 | 说明 |
|---|---|---|
| MeasurementIndices | ay | 一组用于标识度量块的索引值,数组包含[1~254]中的一个或多个唯一值,或者[255] |
| SlotId | y | 用于生成度量数据签名的证书私钥的槽位索引,取值范围[0~7]或15。取值0~7时代表使用指定槽位的证书进行签名;取值15时代表使用预先配置的公私钥对进行签名,仅当请求端已预先配置了响应端的公钥时才可使用 |
| Nonce | s | 挑战随机数,一个总长度为64的16进制字符串,规则:^[0-9a-fA-F]{64}$ |
响应参数:
| 参数名称 | 签名 | 说明 |
|---|---|---|
| Version | s | SPDM协商版本号 |
| PublicKey | s | 可用于验证签名的公钥,仅当请求参数中SlotId为15时,本参数有效 |
| HashingAlgorithm | s | SPDM协商的哈希算法 |
| SigningAlgorithm | s | SPDM协商的签名算法 |
| SignedMeasurements | s | 基于Nonce和指定度量块计算得到的签名摘要的Base64字符串 |
评审点4:新增资源协作接口呈现明细度量信息
path:/bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/ComponentIntegrity/:Id/Measurements/:Index
interface:bmc.kepler.RoT.ComponentIntegrity.SPDMMeasurement
变化类型:新增资源协作接口
| 属性名称 | 变化类型 | 签名 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|
| Index | 新增属性 | y | 只读r:ReadOnly | 不持久化 | false | 度量块的索引 | ||
| HashAlgorithm | 新增属性 | s | 只读r:ReadOnly | 不持久化 | false | SPDM请求方与SPDM响应方之间协商确定的哈希算法 | ||
| MeasurementType | 新增属性 | s | 枚举:【FirmwareConfiguration、HardwareConfiguration、ImmutableROM、MeasurementManifest、MutableFirmware、MutableFirmwareSecurityVersionNumber、MutableFirmwareVersion】 | 只读r:ReadOnly | 不持久化 | false | 度量值所代表的数据类型或特征 | |
| Measurement | 新增属性 | s | 只读r:ReadOnly | 不持久化 | false | 度量数据,由HashAlgorithm指定的哈希算法对度量块进行计算后的Base64字符串 | ||
| LastUpdated | 新增属性 | t | 只读r:ReadOnly | 不持久化 | false | 度量信息的最后更新时间 | ||
| PartofSummaryHash | 新增属性 | b | true/false | 只读r:ReadOnly | 不持久化 | false | 该块是否为属于计算SummaryHash时使用的度量块的一部分 | |
| SecurityVersionNumber | 新增属性 | s | 只读r:ReadOnly | 不持久化 | false | 一个8字节的十六进制编码字符串,表示该度量值所代表的安全版本号。 | 仅当MeasurementType为MutableFirmwareSecurityVersionNumber时,此属性有效 |
评审点5:新增证书资源
path:/bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/Certificates/:Id(新增)
interface:bmc.kepler.CertificateService.Certificate(已有)
评审结论
1、同意新增TrustedComponent资源协作对象路径和接口,具体描述如下:
变化类型:新增path,interface
path:/bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName
interface:bmc.kepler.RoT.TrustedComponent
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|---|
| Name | 新增属性 | s | 无 | 只读,读权限:ReadOnly | 不持久化 | false | 可信根对应组件的名称,如:CPU1 | ||
| TargetComponent | 新增属性 | s | 无 | 只读,读权限:ReadOnly | 不持久化 | false | 指向可信根对应组件的资源 | 对应资源下需实现 bmc.kepler.Inventory.Hardware 接口 | |
| Type | 新增属性 | s | 无 | 枚举:Discrete,Integrated | 只读,读权限:ReadOnly | 不持久化 | false | 可信组件的类型,例如可信组件的任何物理特征:离散/集合,定义参考redfish规范TrustedComponent资源的TrustedComponentType属性 |
2、同意新增ComponentIntegrity资源协作对象路径和接口,具体描述如下:
变化类型:新增path,interface
path:/bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/ComponentIntegrity/:Id
interface:bmc.kepler.RoT.ComponentIntegrity
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|---|
| Type | 新增属性 | s | 无 | 枚举:SPDM/TPM | 只读,读权限:ReadOnly | 不持久化 | false | 生成完整性报告所使用的安全技术,定义参考redfish规范ComponentIntegrity资源的ComponentIntegrityType属性 | 当前仅实现SPDM,TPM预留 |
| Version | 新增属性 | s | 无 | 只读,读权限:ReadOnly | 不持久化 | false | 生成完整性报告所使用的安全技术的版本号,定义参考redfish规范ComponentIntegrity资源ComponentIntegrityTypeVersion属性 | ||
| LastUpdated | 新增属性 | t | 无 | 只读,读权限:ReadOnly | 不持久化 | false | 组件完整性报告最后更新时间 |
interface:bmc.kepler.RoT.ComponentIntegrity.MeasurementSet
| 属性名称 | 变化类型 | 签名 | 默认值 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|---|
| Specification | 新增属性 | s | 无 | 枚举:DMTF | 只读,读权限:ReadOnly | 不持久化 | false | 协商的度量规范,当前标准仅支持DMTF | |
| SummaryType | 新增属性 | s | 无 | 枚举:All,TCB | 只读,读权限:ReadOnly | 不持久化 | false | 度量摘要的类型All:包含所有组件的度量摘要TCB:仅包含可信计算基的度量摘要 | 当前仅有TCB |
| SummaryHashAlgorithm | 新增属性 | s | 无 | 只读,读权限:ReadOnly | 不持久化 | false | 用于计算摘要的hash算法 | ||
| SummaryHash | 新增属性 | s | 无 | 只读,读权限:ReadOnly | 不持久化 | false | 度量摘要数据,用SummaryHashAlgorithm指定的算法计算出的摘要数据的Base64编码字符串 |
| 方法名称 | 变化类型 | 请求签名 | 响应签名 | 权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|
| SPDMGetSignedMeasurements | 新增方法 | ayys | sssss | SecurityMgmt | 不涉及 | 不涉及 | 用于向SPDM响应端请求生成一个挑战响应 |
请求参数:
| 参数名称 | 签名 | 说明 |
|---|---|---|
| MeasurementIndices | ay | 一组用于标识度量块的索引值,数组包含[0~254]中的一个或多个唯一值,或者[255] |
| SlotId | y | 用于生成度量数据签名的证书私钥的槽位索引,取值范围[0~7]或15。取值0~7时代表使用指定槽位的证书进行签名;取值15时代表使用预先配置的公私钥对进行签名,仅当请求端已预先配置了响应端的公钥时才可使用 |
| Nonce | s | 挑战随机数,一个总长度为64的16进制字符串,规则:^[0-9a-fA-F]{64}$ |
响应参数:
| 参数名称 | 签名 | 说明 |
|---|---|---|
| Version | s | SPDM协商版本号 |
| PublicKey | s | 可用于验证签名的公钥;仅当请求参数中SlotId为15时,本参数有效 |
| HashingAlgorithm | s | SPDM协商的哈希算法 |
| SigningAlgorithm | s | SPDM协商的签名算法 |
| SignedMeasurements | s | 基于Nonce和指定度量块计算得到的签名摘要的Base64字符串 |
3、同意新增Measurement资源协作对象路径和接口,具体描述如下:
变化类型: 新增path,interface
path:/bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/ComponentIntegrity/:Id/Measurements/:Index
interface:bmc.kepler.RoT.ComponentIntegrity.SPDMMeasurement
| 属性名称 | 变化类型 | 签名 | 取值范围 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|
| Index | 新增属性 | y | 只读,读权限:ReadOnly | 不持久化 | false | 度量块的索引 | ||
| HashAlgorithm | 新增属性 | s | 只读,读权限:ReadOnly | 不持久化 | false | SPDM请求方与SPDM响应方之间协商确定的哈希算法 | ||
| MeasurementType | 新增属性 | s | 枚举:FirmwareConfiguration、HardwareConfiguration、ImmutableROM、MeasurementManifest、MutableFirmware、MutableFirmwareSecurityVersionNumber、MutableFirmwareVersion | 只读,读权限:ReadOnly | 不持久化 | false | 度量值所代表的数据类型或特征 | |
| Measurement | 新增属性 | s | 只读,读权限:ReadOnly | 不持久化 | false | 度量数据,由HashAlgorithm指定的哈希算法对度量块进行计算后的Base64字符串 | ||
| LastUpdated | 新增属性 | t | 只读,读权限:ReadOnly | 不持久化 | false | 度量信息的最后更新时间 | ||
| PartofSummaryHash | 新增属性 | b | true,false | 只读,读权限:ReadOnly | 不持久化 | false | 该块是否为属于计算SummaryHash使用的度量块的一部分 | |
| SecurityVersionNumber | 新增属性 | s | 只读,读权限:ReadOnly | 不持久化 | false | 一个8字节的十六进制编码字符串,表示该度量值所代表的安全版本号。 | 仅当MeasurementType为MutableFirmwareSecurityVersionNumber时,此属性有效 |
4、同意新增可信组件证书资源协作对象路径,复用已有的证书接口,具体描述如下:
变化类型:新增path
path:bmc/kepler/Chassis/:ChassisId/TrustedComponents/:DeviceName/Certificates/:Id
interface:bmc.kepler.CertificateService.Certificate (复用)
遗留问题
1、建议interface新增一个层级进行业务区分
结论:新增层级 RoT(Root of Trust),如:bmc.kepler.RoT.TrustedComponent
2、bmc.kepler.RoT.TrustedComponent 有类似可以复用的 interface,考虑是否复用
结论:组件通用信息不在 bmc.kepler.RoT.TrustedComponent 中重复实现,新增 TargetComponent 属性,存放对应组件的资源path,用于指向对应的组件,该path需要实现 bmc.kepler.Inventory.Hardware 接口。安全特性的相关的属性由 bmc.kepler.RoT.TrustedComponent 来承载实现。