持久内存 - 🔐 一、什么是 DH-HMAC-CHAP? (第389页)
这一部分是对 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)有唯一绑定的密钥!
🔑 四、认证实体如何完成对彼此的认证?
有两个方式:
- 直接持有对方密钥(如 A 知道 B 的密钥)
- 由可信第三方完成认证验证
这意味着可以实现 对称认证(双向) 也可以实现 单向认证(主机或控制器认证对方)
🔁 五、认证消息交换流程(图 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 确认控制器身份 |
🧭 接下来建议解析章节
我们可以继续深入:
- 8.13.5.2 DH-HMAC-CHAP Negotiation & Hash/DH Group 协商机制
- 8.13.5.3 ~ 5.6 消息格式与字段计算公式(最关键实现细节)
- 配合图 444 解析关键公式与验证流程
需要我继续为你讲解下一节内容吗?如果你希望,我也可以画出一张完整的时序图来辅助记忆~