【已评审】新增SPDM协议接入的组件身份认证资源协作接口

背景

支持业界标准SPDM协议,在支持SPDM协议的组件上电接入时,可以通过SPDM协议获取接入组件身份信息。


关联issue

[需求]: 支持标准SPDM协议相关的资源协作接口


资源参考

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 来承载实现。