持久内存 - ✅ 总览:DH-HMAC-CHAP 是什么? (第392页)
你已经成功阅读并深入理解了《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)协同使用。
🔐 协议核心步骤流程(简化版)
- 主机 → 控制器:AUTH_Negotiate 消息
- 告诉控制器:我支持哪些认证协议、哈希函数(HashID)、Diffie-Hellman 群组(DHgID)等;
-
可附带是否希望后续协商建立 TLS 安全通道(SC_C 字段)。
-
控制器 → 主机:DH-HMAC-CHAP_Challenge
- 返回选择使用的哈希函数与 DH 群组;
-
提供随机质询值 C1、序列号 S1,以及自己的 DH 值 ( g^x \mod p )。
-
主机 → 控制器:DH-HMAC-CHAP_Reply
- 回应质询并提供自己的 DH 值 ( g^y \mod p );
-
若为双向认证,还会包含主机向控制器发出的质询(C2)和序列号(S2)。
-
控制器 → 主机:DH-HMAC-CHAP_Success1
- 认证通过后,控制器确认并返回认证结果;
-
若为双向认证,还包含控制器对 C2 的回应(R2)。
-
主机(可选)→ 控制器:DH-HMAC-CHAP_Success2
- 主机也完成认证,发送此确认消息;
- 若认证失败,则发送 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 failed02h: Authentication protocol not usable03h: Secure channel concatenation mismatch04h: Hash function not usable05h: 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 协议流程图来梳理?