2. 安全通信基础
在 HSM 与主处理器的通信链路中,安全不是一个单一开关,而是一组彼此配合、又各自独立的安全目标。理解这些目标的边界与相互关系,是设计安全协议、评估攻击面、排查通信异常的前提。本节围绕五个核心安全目标展开,并给出对应的威胁模型与典型失效场景。
一、五个核心安全目标
机密性(Confidentiality):保证通信内容不被未授权方读取。在 HSM 场景中,密钥、PIN 块、会话密钥、敏感指令参数都必须以密文形式在链路上传输。机密性通常由对称加密(如 AES-CBC、AES-GCM)或密钥封装机制提供,其前提是密钥本身已通过安全方式建立。
完整性(Integrity):保证数据在传输过程中未被篡改。攻击者可能修改指令、替换参数、翻转密文比特。完整性通过 MAC(如 CMAC、HMAC)或 AEAD 认证标签实现。需要特别强调:加密不等于完整性,CBC 加密若不带 MAC,仍可能被比特翻转攻击。
认证性(Authentication):确认通信对端的真实身份。包括实体认证(对方确实是合法主处理器或合法 HSM)与消息认证(消息确实来自持有密钥的一方)。在双向通信中,通常需要双向认证,避免单向信任被利用。
新鲜性(Freshness):保证收到的消息是当前会话产生的,而非旧消息的重放。攻击者可能录制合法报文并重复发送,诱使 HSM 重复执行敏感操作。新鲜性通过随机数(Nonce)、序列号、时间戳或挑战-应答机制实现。
不可否认性(Non-repudiation):保证一方无法否认其发送过某条消息或执行过某个操作。在 HSM 与主处理器之间,不可否认性通常依赖数字签名与审计日志,用于事后追责与合规取证。它比认证性更强,需要非对称密码学支撑。
二、威胁模型:攻击者能做什么
安全目标必须对应明确的威胁模型,否则容易陷入“防住了不存在的攻击,却漏掉了真实风险”。在 HSM 与主处理器通信场景中,典型威胁模型包括:
- 被动窃听:攻击者监听总线、SPI、I2C 或网络链路,获取明文密钥与敏感数据。对应机密性目标。
- 主动篡改:攻击者修改报文内容、长度、指令码或参数,诱导 HSM 执行非预期操作。对应完整性目标。
- 重放攻击:攻击者录制合法报文并重复发送,使 HSM 重复执行密钥导出、签名或 PIN 验证。对应新鲜性目标。
- 冒充攻击:攻击者伪装成主处理器或 HSM,建立虚假会话,骗取密钥或伪造响应。对应认证性目标。
- 事后抵赖:合法一方否认曾发送某条指令或执行某次操作,导致审计失效。对应不可否认性目标。
常见误区:很多工程师认为“链路已加密就安全了”。实际上,若加密模式不带认证(如 AES-CBC 无 MAC),攻击者仍可翻转密文比特,使明文产生可预测变化。机密性与完整性必须同时设计,不能互相替代。
三、安全目标与密码机制的对应关系
| 安全目标 | 典型密码机制 | 关键参数 | 失效后果 |
|---|---|---|---|
| 机密性 | AES-GCM、AES-CBC、RSA-OAEP | 密钥、IV、Nonce | 密钥泄露、PIN 明文暴露 |
| 完整性 | CMAC、HMAC-SHA256、AEAD Tag | MAC 密钥、标签长度 | 指令被篡改、参数被替换 |
| 认证性 | 挑战-应答、证书、预共享密钥 | 挑战值、证书链 | 伪造设备接入、中间人攻击 |
| 新鲜性 | Nonce、序列号、时间戳 | 计数器、随机源 | 重放旧指令、重复扣款 |
| 不可否认性 | ECDSA、RSA-PSS、审计日志 | 私钥、签名算法 | 操作无法追责、合规失败 |
四、案例场景:一次安全会话的建立与校验
假设主处理器需要向 HSM 发送一条“导出会话密钥”的指令。一个覆盖五个目标的安全流程如下:
- 认证阶段:主处理器与 HSM 通过预共享密钥或证书完成双向认证,确认双方身份合法。
- 新鲜性协商:双方交换随机数 Nonce,并约定本次会话的序列号起始值,防止旧报文重放。
- 密钥派生:基于共享密钥与 Nonce,派生出本次会话的加密密钥与 MAC 密钥,实现一次一密。
- 机密性保护:指令参数使用 AES-GCM 加密,密文在链路上传输,攻击者无法读取。
- 完整性保护:GCM 同时生成认证标签,HSM 收到后校验标签,确认数据未被篡改。
- 不可否认性:HSM 对关键操作生成审计记录,必要时使用私钥签名,确保操作可追溯。
会话建立伪代码:
1. Host -> HSM : ClientHello(Nonce_H, Cert_H)
2. HSM -> Host : ServerHello(Nonce_S, Cert_S)
3. 双方验证证书链,确认身份
4. 计算会话密钥:
K_enc = KDF(PSK, Nonce_H || Nonce_S || "enc")
K_mac = KDF(PSK, Nonce_H || Nonce_S || "mac")
5. Host -> HSM : AES-GCM(K_enc, seq=1, cmd="export_session_key")
6. HSM 校验 GCM Tag,检查 seq 是否大于上次值
7. HSM -> Host : AES-GCM(K_enc, seq=2, result=encrypted_key)
8. 双方更新序列号,记录审计日志
五、复盘:安全目标设计中的常见陷阱
- 只加密不认证:CBC 无 MAC,攻击者可翻转密文比特,导致明文被可控修改。
- 认证不绑新鲜性:仅验证 MAC 而不检查序列号,攻击者可重放旧报文。
- Nonce 复用:GCM 下 Nonce 重复使用会直接泄露认证密钥,必须保证全局唯一。
- 序列号回绕:32 位序列号在高频通信中可能回绕,需设计回绕策略或使用更大位宽。
- 审计日志不签名:日志可被本地篡改,不可否认性形同虚设。
工程建议:在设计 HSM 通信协议时,建议用一张“安全目标-机制-参数-验证方法”对照表逐项确认。每个目标都要有明确的密码机制、参数来源和测试用例,避免出现“看起来都有,实际缺一项”的假安全。
理解机密性、完整性、认证性、新鲜性与不可否认性这五个目标,并建立与之匹配的威胁模型,是后续设计安全会话、密钥管理、指令封装与异常检测的基础。只有目标清晰、威胁明确,才能在 HSM 与主处理器之间构建真正可信的通信通道。