持久内存与安全机制 - 第396页
NVME2.0协议解读 1 min read

持久内存与安全机制 - 第396页

Blog Author

我们继续深入讲解 NVMe 2.0b 规范第 8.13.5.5 节控制器对主机认证成功后的回复机制,也就是:


DH-HMAC-CHAP_Success1 消息解析与响应机制

该消息由 控制器发送给主机,表示对主机的认证已通过,并可能包含 对主机提出挑战 C2 的响应值 R2,实现双向认证


🔹1. 消息格式简要(Figure 450)

字节范围 字段名 说明
0 AUTH_TYPE = 01h 使用 DH-HMAC-CHAP 协议
1 AUTH_ID = 03h 代表这是 Success1 消息
2–3 Reserved
4–5 T_ID 事务 ID,与之前一致
6 HL 哈希长度,需与选定的哈希函数一致(如 SHA-256 是 32)
7 Reserved
8 RVALID 响应值是否有效(是否包含 R2)
9–15 Reserved
16+ RVAL RVALID = 01h,则是控制器对主机挑战 C2 的响应 R2

🔸2. 字段说明及作用

📌 RVALID – 响应是否有效

含义
00h 控制器未进行认证(主机未请求)
01h 控制器进行了认证(主机请求了双向认证)

📌 RVAL – 控制器计算出的回应值(对 C2)

若主机在 Reply 阶段发起了挑战(CVALID = 01h),控制器将用以下方式计算 R2:

▶️ 计算过程:

// Augmented Challenge
Ca2 = (DHgID == 00h) ? C2 : HMAC(H((gy mod p)^x mod p), C2)


// Response
R2 = HMAC(Kc, Ca2 || S2 || T_ID || SC_C || "Controller" || NQNc || 00h || NQNh)
  • gy mod p:主机发来的 DH 指数
  • x:控制器生成的 DH 随机数
  • Kc:控制器所持的共享密钥
  • SC_C:是否启用安全信道的标志
  • "Controller":ASCII 字符串用于身份标识
  • NQNc / NQNh:控制器和主机的 NVMe Qualified Name

🔸3. 主机接收控制器的认证成功消息后,应该:

✅ 验证以下内容:

检查项 错误处理方式
HL 是否与协商一致 AUTH_Failure2, 解释为 Incorrect payload,断开连接
RVALID = 01h 时:R2 是否验证成功 AUTH_Failure2, 解释为 Authentication failed,断开连接

🔹4. 如果验证成功,主机发 Success2 完成双向认证

如果主机请求了双向认证且 R2 验证成功,则主机需要继续发送 DH-HMAC-CHAP_Success2 消息。


✅ 总结流程图(双向认证路径)

主机                控制器
 ┃                     ┃
 ┃ --AUTH_Negotiate--> ┃ (协商认证协议)
 ┃ <-- Challenge ------┃ (发送 S1, C1, g^x mod p)
 ┃ -- Reply ---------->┃ (发送 S2, R1, C2, g^y mod p)
 ┃ <-- Success1 -------┃ (认证 R1 成功,附带 R2)
 ┃ -- Success2 ------->┃ (认证 R2 成功,完成双向认证)

✅ 认证完成后,后续可以:

  • 正常收发 Fabrics、Admin、IO 命令
  • 利用 DH 会话密钥 KS 建立 安全信道(TLS)
  • 实现 端到端认证、加密与完整性保护

如果你需要,我可以继续为你解释下一节:Success2 消息格式(8.13.5.6),或为整个 DH-HMAC-CHAP 认证做一个中文总结版图解。你想继续看哪一部分?