持久内存 - 🔐 一、什么是 DH-HMAC-CHAP? (第389页)
NVME2.0协议解读 1 min read

持久内存 - 🔐 一、什么是 DH-HMAC-CHAP? (第389页)

Blog Author

这一部分是对 NVMe In-band Authentication 中 DH-HMAC-CHAP 协议的核心操作机制 进行详细说明,也是 NVMe 2.0b 带内认证部分的最关键内容之一。我们来逐条深入解析第 8.13.5.1 ~ 图 443 的内容。


🔐 一、什么是 DH-HMAC-CHAP?

DH-HMAC-CHAP 是一种增强型认证协议:

构成 说明
DH Diffie-Hellman 密钥协商机制,用于生成共享密钥,防窃听、防重放
HMAC 哈希消息认证码,提高安全性(比原始 CHAP 强)
CHAP Challenge-Handshake Authentication Protocol,一种挑战应答式认证协议

🧨 二、潜在风险与协议变种

⚠️ 风险点

  • 不启用 DH,仅使用 HMAC-CHAP,则可能遭遇离线字典攻击(off-line dictionary attack);
  • 主动攻击者可以尝试降级协议,使其仅使用 HMAC-CHAP,从而降低安全性。

✅ 安全建议

  • 必须支持 DH-HMAC-CHAP with NULL DH(即可以不启用 DH)
  • 应允许配置强制使用 DH(即禁止降级为 HMAC-CHAP)

🧾 三、密钥管理要求

DH-HMAC-CHAP 的密钥是 绑定 NQN(NVMe Qualified Name)实体的

实体 密钥作用
Host NQN 用于认证主机身份
Subsystem NQN 用于认证控制器身份

⚠️ 若多个实体使用同一个密钥,则会导致伪造攻击成为可能(Impersonation)
👉 安全配置必须保证每个实体(host/controller)有唯一绑定的密钥!


🔑 四、认证实体如何完成对彼此的认证?

有两个方式:

  1. 直接持有对方密钥(如 A 知道 B 的密钥)
  2. 由可信第三方完成认证验证

这意味着可以实现 对称认证(双向) 也可以实现 单向认证(主机或控制器认证对方)


🔁 五、认证消息交换流程(图 443)

这张图是整个 DH-HMAC-CHAP 认证流程的 最简抽象版通信序列

Host -----------------------------------> Controller
      AUTH_Negotiate(T_ID, SC_C, AuthID, HashIDList, DHgIDList)

Host <----------------------------------- Controller
      DH-HMAC-CHAP_Reply(T_ID, R1, gy mod p, [S2, C2])


Host -----------------------------------> Controller
      DH-HMAC-CHAP_Challenge(T_ID, HashID, DHgID, S1, C1, gx mod p)


Host <----------------------------------- Controller
      DH-HMAC-CHAP_Success1(T_ID, [R2])


(可选)
Host -----------------------------------> Controller
      DH-HMAC-CHAP_Success2(T_ID)

🔣 六、流程各字段说明(简化)

字段 含义
T_ID 当前认证事务的事务 ID
SC_C 是否启用安全通道协商
AuthID 使用的认证协议(固定为 01h)
HashIDList 支持的哈希函数列表(如 SHA-256)
DHgIDList 支持的 DH 组 ID 列表(如 MODP2048)
R1/R2 随机挑战值
gx mod p, gy mod p Diffie-Hellman 公钥参数
C1/C2 按 CHAP 生成的认证码
S1/S2 身份标识符(NQN,用户名等)

✅ 七、图示流程小结

步骤 行为
1️⃣ 主机发送 AUTH_Negotiate,告诉控制器它支持哪些认证协议和 DH 组
2️⃣ 控制器响应 Reply,给出其挑战值 R1 和 DH 公钥
3️⃣ 主机回应 Challenge,返回主机的 DH 公钥和对 R1 的响应
4️⃣ 控制器验证主机身份,并回复认证成功消息 Success1
5️⃣(可选) 若为双向认证,主机也发送 Success2 确认控制器身份

🧭 接下来建议解析章节

我们可以继续深入:

  1. 8.13.5.2 DH-HMAC-CHAP Negotiation & Hash/DH Group 协商机制
  2. 8.13.5.3 ~ 5.6 消息格式与字段计算公式(最关键实现细节)
  3. 配合图 444 解析关键公式与验证流程

需要我继续为你讲解下一节内容吗?如果你希望,我也可以画出一张完整的时序图来辅助记忆~