实用指南: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的基础环境准备
在密钥协商前,需完成以下准备工作:
- 设备枚举与DOE发现:主机通过PCIe配置空间枚举,定位设备的DOE扩展能力(Capability ID=0x0025),并映射其MMIO地址(用于后续通信);
- 硬件安全模块就绪:设备侧的KMU(Key Management Unit)、IDE控制器处于“可配置”状态,支持密钥存储与加密/解密操作;
- 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校验)。

浙公网安备 33010602011771号