持久内存与安全机制 - 第387页
非常好,我们继续深入分析 NVMe Base Specification 2.0b 第 8.13.4 节,本节主要讲解:
📌 NVMe 带内认证(In-band Authentication)协议:AUTH_Negotiate 与 AUTH_Failure 消息结构
✅ 一、AUTH_Negotiate 消息结构详解
这是主机发出的第一条认证消息,用来告诉控制器主机支持哪些认证协议,并是否希望将安全通道(Secure Channel)与认证绑定。
🔷 格式解析(图 437):
| 字节范围 | 字段名 | 含义 |
|---|---|---|
| Byte 0 | AUTH_TYPE = 00h |
表示“通用消息”(Common message) |
| Byte 1 | AUTH_ID = 00h |
表示“AUTH_Negotiate” 消息 |
| Byte 3:2 | Reserved | 保留 |
| Byte 5:4 | T_ID |
16 位事务标识符,用于跟踪整个认证流程 |
| Byte 6 | SC_C |
Secure Channel Concatenation 值,指示是否需要同时协商加密通道 |
| Byte 7 | NAPD |
Authentication Protocol Descriptors 数量(每个 64 字节) |
| Byte 8~ | 认证协议描述符 | 每个 64 字节(例如:DH-HMAC-CHAP) |
🔶 SC_C 字段的定义(图 438):
| 值 | 含义 | 适用传输层 |
|---|---|---|
| 00h | 不使用安全通道 | 无限制 |
| 01h | 使用 TLS 协议安全通道 | TCP |
| 其他 | 保留值 | - |
🔶 认证协议标识(图 439):
| 值 | 协议 |
|---|---|
| 01h | DH-HMAC-CHAP(详见 §8.13.5) |
| 其他 | 保留 |
✅ 二、控制器处理 AUTH_Negotiate 的策略:
控制器收到 AUTH_Negotiate 后,有两种可能的拒绝情况:
❌ 不满足安全通道策略:
- 主机未请求
SC_C=01h(即 TLS),但控制器要求必须绑定 TLS。 - 响应动作:
- 发送
AUTH_Failure1消息,说明:Secure channel concatenation mismatch - 断开连接。
❌ 不满足认证协议要求:
- 主机未提供控制器认可的认证协议(例如没有
01h: DH-HMAC-CHAP)。 - 响应动作:
- 发送
AUTH_Failure1消息,说明:Authentication protocol not usable - 断开连接。
✅ 三、AUTH_Failure 消息结构(图 440)预告:
接下来的 §8.13.4.2 将介绍:
| 消息类型 | 发送方 | 用途 |
|---|---|---|
AUTH_Failure1 |
控制器 → 主机 | 表示认证失败或安全策略不匹配 |
AUTH_Failure2 |
主机 → 控制器 | 主动终止认证事务 |
🧠 总结知识点串联:
AUTH_Negotiate是认证事务的起点,用于传达意图与能力;T_ID是事务唯一标识,全程跟踪使用;- 控制器的安全策略若不满足,则会拒绝连接,反馈
AUTH_Failure1; - 当前规范支持的唯一认证协议是
DH-HMAC-CHAP,未来可扩展。
如果你希望我整理一张: - 完整认证消息时序图 - 或者一个 AUTH_Negotiate 报文结构表格 + 字节对照说明
我可以立即为你生成。你还想继续深入 §8.13.5 的 DH-HMAC-CHAP 协议解析吗?那部分是这套认证机制的核心协议细节。