实用指南:IDE Key Management的密钥协商过程

IDE Key Management(IDE_KM)的密钥协商过程是基于SPDM(Security Protocol and Data Model,安全协议与数据模型)+ DOE(Data Object Exchange,数据对象交换)实现的安全流程,核心是在主机(如Root Port)与PCIe设备(如Endpoint)之间建立信任关系,并生成/分发IDE流所需的加密/完整性密钥。以下是详细的分阶段流程(以主机-设备双向协商为例):

1. 协商过程

IDE_KM的基础环境准备

在密钥协商前,需完成以下准备工作:

  1. 设备枚举与DOE发现:主机通过PCIe配置空间枚举,定位设备的DOE扩展能力(Capability ID=0x0025),并映射其MMIO地址(用于后续通信);
  2. 硬件安全模块就绪:设备侧的KMU(Key Management Unit)、IDE控制器处于“可配置”状态,支持密钥存储与加密/解密操作;
  3. SPDM协议支持:主机与设备均实现SPDM 1.2+规范(PCI-SIG定义),支持身份认证、密钥交换等功能。

阶段1:SPDM安全会话建立(信任基础)

IDE_KM的密钥协商依赖SPDM建立的“安全信道”,此阶段的核心是身份认证+会话主密钥生成

步骤1.1:SPDM版本与能力协商

  • 主机通过DOE发送SPDM_GET_VERSION请求,设备返回支持的SPDM版本(如1.2);
  • 主机发送SPDM_GET_CAPABILITIES请求,设备返回支持的算法套件(如:
    • 密钥交换算法:ECDH P-384;
    • 哈希算法:SHA-384;
    • 对称加密算法:AES-256-GCM;
    • 签名算法:ECDSA P-384)。

步骤1.2:SPDM身份认证

  • 证书交换:主机发送SPDM_GET_DIGEST请求,设备返回自身证书链的哈希值;主机验证哈希值后,发送SPDM_GET_CERTIFICATE请求,设备返回完整证书链(含设备公钥、CA签名);
  • 挑战-响应认证:主机生成随机挑战值(Nonce),发送SPDM_CHALLENGE请求;设备使用私钥对挑战值+设备信息进行签名,返回SPDM_CHALLENGE_RESPONSE;主机验证签名,确认设备身份合法。

步骤1.3:SPDM会话主密钥生成

  • 密钥交换:主机与设备通过SPDM_KEY_EXCHANGE请求/响应,交换ECDH公钥(基于协商的椭圆曲线,如P-384);
  • 主密钥派生:双方基于ECDH共享密钥、会话Nonce、哈希算法,派生SPDM会话主密钥(Master Secret)
  • 会话密钥生成:从主密钥派生会话所需的子密钥(如:
    • Session Integrity Key:用于会话消息的完整性校验;
    • Session Encryption Key:用于会话消息的加密)。

至此,主机与设备之间建立了加密+认证的SPDM安全会话,后续的IDE密钥协商均在此信道中传输。

阶段2:IDE密钥的派生与协商

此阶段的核心是基于SPDM会话主密钥,生成IDE流专用的加密/完整性密钥(每个IDE流对应独立密钥):

步骤2.1:IDE密钥派生规则确认

主机与设备协商IDE密钥的派生规则(遵循PCIe IDE规范):

  • 派生根:SPDM会话主密钥;
  • 派生因子:IDE流ID(Stream ID)设备BDF地址会话Nonce(确保每个IDE流的密钥唯一);
  • 密钥长度:符合IDE算法要求(如AES-256需32字节,SHA-384需48字节)。
步骤2.2:主机派生IDE密钥

主机根据协商的规则,派生IDE流的密钥对:

  • 加密密钥(Encryption Key):用于TLP有效载荷加密(如AES-256-GCM的密钥);
  • 完整性密钥(Integrity Key):用于TLP完整性校验(如HMAC-SHA-384的密钥);
    注:若使用AEAD算法(如AES-GCM),则只需派生一个AEAD密钥,同时实现加密与完整性。
步骤2.3:密钥封装为DOE数据对象

主机将派生的IDE密钥封装为DOE材料对象(符合DOE格式要求):

  • 数据对象头部:
    • Data Object Type:设置为“IDE密钥(如PCI-SIG定义的0x0001)”;
    • Vendor ID:主机对应的厂商ID(如0x1234);
    • Length:密钥的总长度(如AES-256密钥为8 DW,即32字节);
  • 数据对象内容:密钥的明文(但会被SPDM会话加密传输)。

阶段3:IDE密钥的安全传输(通过DOE)

将IDE密钥通过SPDM加密的DOE信道,传输到设备侧:就是此阶段的核心

步骤3.1:分块写入DOE写邮箱寄存器

主机将封装好的DOE资料对象(密钥),按“DOE写数据邮箱寄存器”的位宽(32位/64位)拆分为分块:

  • 每次写入前,检查“邮箱就绪位(Mailbox Ready)”,确保邮箱空闲;
  • 逐块写入DOE Write Data Mailbox Register(偏移0x10h),并通过SPDM会话加密每个分块。

步骤3.2:设备侧接收与解密

  • 设备从“DOE读数据邮箱寄存器”中读取分块,利用SPDM会话密钥解密,重组为完整的DOE材料对象;
  • 设备验证数据对象的完整性(通过头部的Length与实际长度比对,以及SPDM的MAC校验)。

posted @ 2026-01-20 17:22  gccbuaa  阅读(0)  评论(0)    收藏  举报