持久内存 - 🔐 一、AUTH_Failure 认证失败消息详解(图 440~442) (第388页)
我们继续深入讲解 NVMe Base Specification 2.0b 第 8.13.4.2 ~ 8.13.5.1 节 的内容,这部分是 认证失败消息(AUTH_Failure)机制 与 DH-HMAC-CHAP 协议概览,是整个 NVMe In-band Authentication(带内认证)机制的核心组成。
🔐 一、AUTH_Failure 认证失败消息详解(图 440~442)
认证过程中,如果认证失败,主机或控制器会主动发送 AUTH_Failure 消息中止事务,并提供失败原因。
🧾 消息格式(图 440):
| 字节范围 | 字段 | 说明 |
|---|---|---|
| Byte 0 | AUTH_TYPE = 00h |
通用认证消息 |
| Byte 1 | AUTH_ID = F1h(控制器发送)F0h(主机发送) |
区分方向 |
| Byte 3:2 | Reserved | 保留字段 |
| Byte 5:4 | T_ID |
与认证事务关联的事务 ID |
| Byte 6 | Reason Code |
认证失败主因(见下图 441) |
| Byte 7 | Reason Code Explanation |
补充解释(见下图 442) |
❗ 失败主因(图 441):
| 值 | 描述 |
|---|---|
| 01h | Authentication Failure:认证失败 |
| 其他 | 保留 |
📚 失败解释(图 442):
| 值 | 解释说明 |
|---|---|
| 01h | 主机或控制器身份验证失败 |
| 02h | 协议不被接受(控制器不支持或拒绝主机提供的认证协议) |
| 03h | 安全通道连接策略不匹配(主机未请求但控制器强制要求) |
| 04h | 哈希函数不被接受(见 8.13.5.2) |
| 05h | DH 组不被接受(见 8.13.5.2) |
| 06h | 接收到的 Payload 不正确 |
| 07h | 协议消息顺序不正确 |
🔄 AUTH 消息与命令的映射(8.13.4.3)
| 消息类型 | 方向 | 使用的命令 |
|---|---|---|
AUTH_Negotiate |
主机 → 控制器 | Authentication Send |
AUTH_Failure2 |
主机 → 控制器 | Authentication Send |
AUTH_Failure1 |
控制器 → 主机 | Authentication Receive |
🔑 二、DH-HMAC-CHAP 协议概览(8.13.5.1)
DH-HMAC-CHAP 是 NVMe In-band Authentication 当前唯一已定义的认证协议(Protocol ID = 01h)。
✳️ 名称组成解析:
| 名称部分 | 含义 |
|---|---|
| DH | Diffie-Hellman 密钥协商机制(可选) |
| HMAC | 哈希消息认证码(比传统 CHAP 更强) |
| CHAP | 挑战-响应认证机制(Challenge-Handshake Authentication Protocol) |
⚙️ 协议特性:
- 基于密钥(Keyed) 的双向或单向认证机制
- 增强的哈希强度(使用 HMAC 替代原始 MD5)
- 可选择是否使用 Diffie-Hellman 密钥交换,增强密钥协商安全性
⚠️ 安全注意事项:
若使用 HMAC-CHAP(不带 DH)时使用了弱随机密钥,则存在被被动监听者通过离线暴力破解方式推导出共享密钥的风险(具体见 §8.13.5.7)。
🧠 适用场景总结:
| 场景 | 推荐方案 |
|---|---|
| 高安全性要求 | 使用 DH-HMAC-CHAP(含 DH) |
| 主机性能受限,连接仅做基本认证 | 使用 HMAC-CHAP(无 DH) |
| 对带内认证无需求 | 可忽略整个机制(由 AUTHREQ = 0 控制) |
如果你需要下一步我们可以继续深入分析:
- §8.13.5.2:DH-HMAC-CHAP 协议协商过程(包含哈希函数、DH 组 ID 选择)
- 或我可为你绘制一张完整的 AUTH 消息时序图(从 AUTH_Negotiate 到 AUTH_Success)
告诉我你接下来想要深入哪一段 😊