持久内存与安全机制 - 第385页
我们继续深入讲解 NVMe Base Specification 2.0b 第 8.13 节 的最后一部分,聚焦于 NVMe In-band Authentication(带内认证) 的具体实现方式,特别是图 433 所示的实际认证事务过程与命令字段设置方式。
📘 图 433:NVMe/TCP 的认证事务示意(Authentication Transaction)
🔁 整体流程简析:
| 步骤 | 操作 | 主体 | 说明 |
|---|---|---|---|
| 1 | 建立 TCP 会话 | 主机与控制器 | 使用 TCP 完成三次握手,建立基本传输通道 |
| 2 | Connect 命令交换 | 主机发起,控制器响应 | 建立 NVMe queue,并将主机与控制器绑定 |
| 3 | 启动认证事务 | 主机 → 控制器 | 使用 Authentication Send / Receive 命令进行身份验证 |
| 4 | 认证成功后 | 双方 | Queue 准备就绪,可开始正式 I/O 操作 |
这个图的流程强调:
在 使用 NVMe over Fabrics(特别是 TCP 绑定)时,身份认证作为一个完整事务插入在 Connect 成功后,控制器才允许进行后续操作。
🔐 8.13.2.1:带内认证协议的协议字段要求解析
在该部分中,协议明确了认证命令如何通过 Authentication Send 和 Authentication Receive 命令格式传输认证报文。
🧾 安全协议标识符(SECP)
- 使用
SECP = E9h来标识“NVMe专用认证协议” E9h是由 SCSI SPC-5 标准专门分配给 NVMe 的认证协议 ID
🔁 报文字段说明
以下两张图表展示了认证命令中关键字段的设置方式:
📤 Authentication Send 命令字段设置(图 434)
| 字段名 | 值 | 说明 |
|---|---|---|
| SPSP0 | 01h |
子协议选择器字段(Subprotocol Selector),表示“NVMe认证协议” |
| SPSP1 | 01h |
子协议子选择器(通常为 01h) |
| SECP | E9h |
表示使用“NVMe 带内认证协议” |
| TL | 数据长度 | 表示要传输的认证数据的字节数 |
📌 TL(Transfer Length)即表示认证报文的长度(单位:字节),由主机决定每次传输多少数据。
📥 Authentication Receive 命令字段设置(图 435)
| 字段名 | 值 | 说明 |
|---|---|---|
| SPSP0 | 01h |
同样是子协议选择器 |
| SPSP1 | 01h |
子选择器 |
| SECP | E9h |
NVMe 认证协议 |
📌 注:虽然表格没有完全展开,但与 Send 命令类似,这些字段的含义保持一致。
🕑 控制器处理延迟说明
控制器处理 Authentication Receive 命令时,可能存在延迟,例如:
- 调用 TPM(受信平台模块)或外部安全引擎
- 执行复杂的加密计算或证书验证
因此:
主机应容忍并预期 Authentication Receive 命令响应时间可能较长,不要随意超时或中断。
✅ 小结:你该记住的核心要点
| 内容 | 解释 |
|---|---|
| 认证协议 ID(SECP) | E9h,专门用于 NVMe 认证 |
| 子协议选择器 SPSP0/SPSP1 | 通常均为 01h |
| Send vs. Receive | Send 用于主机发起认证报文,Receive 用于控制器返回认证报文 |
| 可组合认证协议 | 当前规范允许未来添加不同子协议,通过 SPSP 区分 |
| 认证延迟处理 | Receive 命令可能被控制器“阻塞处理”,主机要容忍时间 |
接下来,如果你想我继续讲解:
- 8.13.3 ~ 8.13.4:认证流程的各类消息定义(如 AUTH_Success、AUTH_Failure)
- 或者深入到 TLS/IPsec 与 NVMe 认证策略的结合使用场景
- 以及 认证失败、超时、断连等错误处理机制
只需要说一声“继续”或指定小节编号,我会立刻接上详细解析。