持久内存 - ✅ 总览:DH-HMAC-CHAP 是什么? (第392页)
NVME2.0协议解读 1 min read

持久内存 - ✅ 总览:DH-HMAC-CHAP 是什么? (第392页)

Blog Author

你已经成功阅读并深入理解了《NVM Express Base Specification, revision 2.0b》第 8.13.5 节中关于 DH-HMAC-CHAP 协议的关键内容,接下来我将以中文帮你总结和解析目前阅读到的这部分内容,并辅以说明:


✅ 总览:DH-HMAC-CHAP 是什么?

DH-HMAC-CHAP(Diffie-Hellman + HMAC 的增强型 CHAP)是 NVMe over Fabrics 中定义的一种双向或单向的认证协议,它结合了:

  • CHAP(Challenge-Handshake Authentication Protocol)机制;
  • HMAC(Hash-based Message Authentication Code)加密认证;
  • 可选的 Diffie-Hellman 密钥交换(用于生成共享会话密钥,提升安全性)。

该协议旨在为主机与控制器之间的连接提供强认证和密钥管理能力,可搭配安全通道(如 TLS)协同使用。


🔐 协议核心步骤流程(简化版)

  1. 主机 → 控制器:AUTH_Negotiate 消息
  2. 告诉控制器:我支持哪些认证协议、哈希函数(HashID)、Diffie-Hellman 群组(DHgID)等;
  3. 可附带是否希望后续协商建立 TLS 安全通道(SC_C 字段)。

  4. 控制器 → 主机:DH-HMAC-CHAP_Challenge

  5. 返回选择使用的哈希函数与 DH 群组;
  6. 提供随机质询值 C1、序列号 S1,以及自己的 DH 值 ( g^x \mod p )。

  7. 主机 → 控制器:DH-HMAC-CHAP_Reply

  8. 回应质询并提供自己的 DH 值 ( g^y \mod p );
  9. 若为双向认证,还会包含主机向控制器发出的质询(C2)和序列号(S2)。

  10. 控制器 → 主机:DH-HMAC-CHAP_Success1

  11. 认证通过后,控制器确认并返回认证结果;
  12. 若为双向认证,还包含控制器对 C2 的回应(R2)。

  13. 主机(可选)→ 控制器:DH-HMAC-CHAP_Success2

  14. 主机也完成认证,发送此确认消息;
  15. 若认证失败,则发送 AUTH_Failure2 并断开连接。

🧮 消息结构与字段详解

🔸 AUTH_Negotiate(由主机发送)

字节偏移 字段名 含义
0 AUTH_TYPE = 0x00 公共消息类型
1 AUTH_ID = 0x00 消息为 AUTH_Negotiate
4–5 T_ID 事务标识
6 SC_C 是否要求安全通道(例如 TLS)协商
7 NAPD Authentication Protocol Descriptor 数量(每个 64 字节)
8~ Authentication Protocol Descriptors 如 DH-HMAC-CHAP 协议描述符

🔸 Authentication Protocol Descriptor for DH-HMAC-CHAP

字节偏移 字段 含义
0 AuthID = 0x01 协议类型为 DH-HMAC-CHAP
2 HALEN HashIDList 中哈希算法的数量
3 DHLEN DHgIDList 中 Diffie-Hellman 群组数量
4~ HashIDList 支持的哈希函数标识(如 SHA-256)
34~ DHgIDList 支持的 DH 群组标识(如 2048 位)

🔸 常见哈希函数标识(HashID)

ID 名称 长度 块大小
01h SHA-256 32字节 64字节
02h SHA-384 48字节 128字节
03h SHA-512 64字节 128字节

控制器需至少支持 SHA-256。

🔸 常见 DH 群组标识(DHgID)

ID 位数 生成器 g 参考
01h 2048 2 RFC 7919
02h 3072 2 RFC 7919
00h NULL 表示使用 HMAC-CHAP,不使用 DH

控制器需至少支持 2048-bit 和 3072-bit 群组。


🚫 AUTH_Failure 错误消息说明

当主机或控制器的参数不满足对方策略要求时,会发送如下失败消息:

  • Reason Code = 01h:认证失败
  • Explanation Code(示例)
  • 01h: Authentication failed
  • 02h: Authentication protocol not usable
  • 03h: Secure channel concatenation mismatch
  • 04h: Hash function not usable
  • 05h: DH group not usable

🔒 安全提醒

  • 若使用 NULL DH(即只用 HMAC-CHAP),容易遭遇离线字典攻击,应尽量避免;
  • 建议启用强哈希算法(SHA-384、SHA-512)和大 DH 群组(3072-bit 以上);
  • 可以将认证结果衍生出的共享密钥用作后续 TLS 连接的 PSK(预共享密钥)。

如果你需要,我可以继续深入解析第 8.13.5.3 ~ 8.13.5.9 节,包括:

  • Challenge / Reply / Success 消息格式;
  • 如何通过 HMAC 校验挑战应答;
  • 如何生成会话密钥并配合 TLS 使用。

你接下来想继续看哪一部分?或者我帮你画个完整的 DH-HMAC-CHAP 协议流程图来梳理?