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 与主处理器通信:安全目标与威胁模型 主处理器 Host / AP 发起指令、传输数据 HSM 安全模块 密钥存储、密码运算 安全边界内执行 请求报文(指令 + 参数) 响应报文(结果 + 状态) 攻击者 窃听 / 篡改 / 重放 机密性 AES-GCM 加密 防窃听 完整性 CMAC / HMAC 防篡改 认证性 双向实体认证 防冒充 新鲜性 Nonce / 序列号 防重放 不可否认性 数字签名 审计日志 五个安全目标相互独立又彼此支撑:加密不提供完整性,认证不提供新鲜性,签名不自动提供机密性 设计时需逐项确认覆盖,避免“以为安全”的盲区

二、威胁模型:攻击者能做什么

安全目标必须对应明确的威胁模型,否则容易陷入“防住了不存在的攻击,却漏掉了真实风险”。在 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 发送一条“导出会话密钥”的指令。一个覆盖五个目标的安全流程如下:

  1. 认证阶段:主处理器与 HSM 通过预共享密钥或证书完成双向认证,确认双方身份合法。
  2. 新鲜性协商:双方交换随机数 Nonce,并约定本次会话的序列号起始值,防止旧报文重放。
  3. 密钥派生:基于共享密钥与 Nonce,派生出本次会话的加密密钥与 MAC 密钥,实现一次一密。
  4. 机密性保护:指令参数使用 AES-GCM 加密,密文在链路上传输,攻击者无法读取。
  5. 完整性保护:GCM 同时生成认证标签,HSM 收到后校验标签,确认数据未被篡改。
  6. 不可否认性: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 与主处理器之间构建真正可信的通信通道。