教學 1 · 先指定安全協定,才談鎖定狀態
NVMe 定義如何送收安全資料,但不替所有外部協定定義相同的 session、金鑰與解鎖規則。若問題沒有指定協定,就不能可靠回答 Power Cycle 後一定解鎖或一定保留認證。教材會明確區分 NVMe 能證明的傳輸結果,以及仍需所選協定才能解讀的狀態。
NVMe · Q1–328
Q237–Q245
Security Send/Receive 承載協定資料;Lockdown 限制命令或 Feature。先分清資料交換結果與禁止範圍,再討論 reset 及斷電持續性。
每個問題都接著完整解說,依內容帶讀欄位、比較機制或追蹤流程。先看本冊總覽,再沿問題閱讀;必要條件與正常路徑直接顯示。所有數字案例均為教學假設;Status 以 SCT/SC 表示,代碼後的 h 代表十六進位。
NVMe Success 不自動等於認證成功;被鎖定 Feature 的 Get 也不自動被禁止。
| 問題 | 需要的資訊 | 結果所在位置 |
|---|---|---|
| 資料有沒有交換 | Security CQE | NVMe 命令結果 |
| 安全操作是否成功 | SECP、SPSP、payload | 所選協定定義 |
| 命令是否被禁止 | IFC、CSEL、SCP、清單 | Lockdown 及目標 CQE |
| 斷電後是否保留 | CSEL 與 LDPE | 範圍專屬規則 |
舉例看懂:CSEL=0、LDPE=1 的禁止可跨 Power Cycle 保留;CSEL=1/2 不能只因 LDPE=1 就取得同樣持續性。
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1
NVMe 定義如何送收安全資料,但不替所有外部協定定義相同的 session、金鑰與解鎖規則。若問題沒有指定協定,就不能可靠回答 Power Cycle 後一定解鎖或一定保留認證。教材會明確區分 NVMe 能證明的傳輸結果,以及仍需所選協定才能解讀的狀態。
想禁止某操作,必須同時選對介面、controller 範圍、opcode 或 FID 與 UUID。若只禁止 Admin 介面,另一個未被涵蓋的介面可能仍允許;若鎖的是 Set Features 的 FID,Get 仍可能正常。驗證前先寫出完整選擇條件,才知道哪個成功案例是真正漏鎖。
一般全體視角與增強 FFFFh 視角的集合意義不同。增強清單裡 ACNTL=0 表示不是所有 controller 都受該項限制,並不表示完全沒有禁止。先確認查詢格式,再看是哪幾台受影響,避免將部分限制看成空清單。
NVMe 命令支援與特定安全協定支援是兩層能力,先確認前者,才能安全解讀後者的回覆。
OACS 描述 controller 的命令能力;協定探索回覆才說明它能處理哪些 SECP。
查 Identify.OACS 的 Security Send/Receive 支援,並核對 Commands Supported and Effects。
Security Receive 使用 SECP=00h 探索支援協定;這次查詢不需要先送 Security Send。
先探索,再依所選協定配置 SPSP、NSSF 與資料長度,後續 Send/Receive 配對依協定定義。
NVMe 成功表示命令完成;協定清單指出可繼續使用的安全協定,不表示已完成認證。
Security Receive 指定不支援 SECP 必須 Invalid Field in Command;完全不支援 Opcode 則是另一層命令支援問題。
Identify、效果 Log 與探索結果應一致,但不能因 Opcode 受支援就要求每個 SECP 都成功。
先檢查失敗出在 NVMe 命令層,還是選到未支援的安全協定。
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
必須分清外層 NVMe 欄位與內層安全資料,否則容易期待錯的 Status。
SECP、SPSP、NSSF 與 DPTR/長度都屬查證範圍,但 payload 格式由協定定義。
Receive 的 AL 與 Send 的 TL 依 Security Protocol In/Out、INC_512=0 的定義使用;不能當成 NVMe 一般 zero-based Dword 數。
Receive 不支援 SECP、Send 使用保留 SECP 須 Invalid Field。內層認證失敗可能以協定 payload 表示,不能全部改寫成 Invalid Field 或 Access Denied CQE。
先查 SECP 探索結果與 NVMe 命令支援,再選具體協定。
先核對 NVMe 欄位與 buffer 長度,再解析協定內容;NSSF 只在 EAh 的指定用途下有定義。
合法傳輸取得對應資料或協定回覆;應按協定結果決定認證或安全操作是否成功。
對同一測試記錄外層 CQE 與內層 result,避免把兩者混為一個錯誤碼。
先按 AL/TL 的單位核對傳輸長度與 buffer 容量,確認資料已完整送達後,再依安全協定的回覆檢查認證資料。
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
資料根本沒有正確傳送,與資料送到後協定拒絕,是不同故障階段。
先看 NVMe 命令,再看所選安全協定;同一個安全動作可能涉及多筆 Send/Receive。
Data Transfer Error 表示命令資料傳輸問題;安全結果可能另外以協定欄位回報,不能只靠字面上的「Security」決定 Status。
未支援欄位、傳輸錯誤、內部錯誤與認證拒絕各有不同前提;沒有「所有安全失敗都回同一 Status」的規則。
保存完整 SQE、DPTR、長度、CQE 與有效的 Receive payload。
先檢查 CQE 是否允許信任回傳資料,再依協定解碼;失敗傳輸的舊 buffer 內容不能當新回覆。
成功 CQE 只證明該 NVMe 命令成功完成,還需讀協定結果才知道操作是否獲准。
將兩層結果與先後順序對回原始 request,避免讀到上一個 exchange 的結果。
先檢查是不是把成功傳輸的「協定拒絕」誤認成 DMA 失敗。
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
安全協定可能限制其他操作,但不能用一個抽象的「Locked」推論所有 Admin 都被禁止。
影響範圍由協定、保護對象與 NVMe 明定互動共同決定。
Security Send/Receive 傳送協定;Lockdown 是另一个命令禁止機制;Namespace Write Protection 又控制另一種存取狀態。
確認實際 SECP/安全狀態、Lockdown Log,以及適用的 Security Personality 設定。
先判斷被拒命令與範圍,再確認哪一項機制要求拒絕,最後對照該機制指定的 Status。
被允許的查詢仍可能正常運作;解除一種限制不保證其他限制一起解除。
不能把所有拒絕都要求回 Command Prohibited by Lockdown;只有符合 Lockdown 條件才使用該通用 SC23h。
原始協定回覆、Lockdown 清單與命令行為要分層吻合,不能混用安全狀態名稱。
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
原問題必須指定「哪個安全協定的哪個狀態」,才會有可驗證的保留答案。
長期金鑰、持久鎖定設定、暫時 session 與待取的 Receive 資料,不是同一種狀態。
記錄 SECP、協定版本、操作前狀態與 Reset 來源;三份 NVMe 規格只提供其明定的傳輸邊界。
Base 明定失聯或 CLR 可能不保留 Security Receive 資料;這不等於永久設定被擦除。
恢復後重新建立需要的交換並查詢狀態,再依協定確認是否需重新認證。
正確結果是符合已指定協定的保留規則,而不是所有狀態一律保留或一律清空。
| 觸發方式 | 這項操作或狀態會如何變化 |
|---|---|
| Controller Reset 後是否保留或繼續? | CLR 後 Security Receive 待取的結果可能不保留。安全鎖定、認證 session 與金鑰的持續性由所選協定決定,不能把失去傳輸結果解讀成自動解鎖或清除金鑰。 |
| NVM Subsystem Reset 後是否保留或繼續? | Subsystem Reset 後重新確認通訊及協定狀態。NVMe Base 不給所有 Security Protocol 一個共同的認證或鎖定保留答案,因此測試須先指定協定與狀態。 |
| Power Cycle 後是否保留或繼續? | Power Cycle 後不能只因 NVMe queues 已重建,就推論安全狀態回到未鎖定。以協定的持久設定、session 規則與查詢結果判斷;未指定協定時,結論只能是 NVMe 三份來源未定義。 |
協定未指定時,不得捏造固定 Status、解鎖結果或金鑰處理;應明確標示來源未定義的部分。
把傳輸重新初始化、session 重建與持久設定驗證拆成三項,比單看命令成功更可靠。
先檢查題目中的「Security 狀態」究竟指哪個欄位或協定物件。
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
Lockdown 限制命令在選定介面與 controller 執行,用來控制管理入口;它不是加密資料或設定 namespace 唯讀。
CSEL=0 選 subsystem,1 選指定 controller,2 選指定 primary 的 secondary 群組;IFC 另選收命令的介面。
查 OACS.CFLS/CCFLS 與 LID14h 的可禁止清單;哪些 Opcode/FID 可禁止由實作宣告。
CDW10.SCP 選 Admin Opcode 或 Set Features FID,OFI 指目標,PRHBT=1 禁止、0 允許;CDW14.CSS 選 controller,必要時 UIDX 選定義。
先查能力與清單,再送 Lockdown,等成功後讀目前禁止清單,最後以相同介面驗證目標命令。
成功後選定目標受限制;重複禁止已禁止項目,或允許已允許項目,都不是錯誤。
不可禁止項目必須回命令特定 Prohibition of Command Execution Not Supported;不支援 CCFLS 卻指定非零 CSEL 須 Invalid Field。
一個 FID 被禁止是阻止 Set,不是同時禁止 Get;也不等於 Set Features 全部 Opcode 被禁止。
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
成功設下禁止後,還要驗證目標操作真的被阻擋,不能只看到設定命令成功就結束。
條件包含目標 controller、收到命令的介面、Opcode 或 Set FID,以及適用 UUID。
Admin SQ 上收到符合禁止條件的命令,必須中止並回 Command Prohibited by Command and Feature Lockdown,SCT=0、SC=23h。
Lockdown 命令自己不被支援或參數非法,與已禁止的目標命令被拒絕,是不同 Status。Personality 的 CDP Authentication 明定例外也要保留。
讀目前禁止清單,並確認原 Lockdown 的 CQE 與所選範圍。
先成功建立禁止,再送一筆其餘參數合法的目標命令,最後查 CQE 及操作是否未執行。
驗證中的預期成功,是禁止生效而目標命令被拒絕;不是要求目標也回 Successful Completion。
LDPE 啟用且符合 authenticated unfreeze 支援條件時,指定 CDP Authentication 的 Security Send/Receive 必須允許,即使先前被禁止。
先檢查是否測到錯誤介面、錯誤 controller,或規範明定的允許例外。
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
Log 分開回報「可以禁止」與「目前禁止」,這兩份清單不能互換。
一般格式的部分清單描述全體 controller;增強格式可指定單台或以 FFFFh 彙整至少一台回報的項目。
查 CFLS、CCFLS;ELPF=1 需要 controller-scoped 支援,LSI.CNTLID 只在增強格式使用。
LSP.CNTTS=0 可禁止、1 Admin 已禁止、2 帶外已禁止;SCP 選 Opcode/FID。一般 LNGTH 是 bytes 數;增強依 SZE、NCFID、CFIDS 解析 descriptors。
先確定查詢條件,再檢查 Header 回報的 CS/SS。增強 FFFFh 清單中 ACNTL=1 表示全體,0 表示至少一台但非全體。
例如兩台中只有 controller1 禁止 FID12h,增強彙整可列它且 ACNTL=0;不能因此說「沒有禁止」。
不支援 CCFLS 卻要求增強格式須 Invalid Field;不能把每份增強 Log 固定當成 512 bytes。
以特定 controller 查詢驗證彙整清單,再比較實際命令,避免把聯集誤看成交集。
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
持續性取決於 CSEL 與 Lockdown Persistence,不能只用「Lockdown 已啟用」一個布林值判斷。
先區分 subsystem 禁止與指定 controller/secondary 群組禁止。
保存原 Lockdown 的 CSEL、PRHBT、IFC 與目標,並讀 Personality 的實際 LDPS。
LDPE 是設定輸入,LDPS 是回覆狀態;前者寫入不等於後者必然已成功生效。
重設前讀清單,執行指定種類的 Reset 或 Power Cycle,再以相同 selector 讀回並驗證目標命令。
一般 Reset 保留禁止;Power Cycle 後 CSEL0 依 LDPS 保留或解除,CSEL1/2 不取得跨斷電持續性。
| 觸發方式 | 這項操作或狀態會如何變化 |
|---|---|
| Controller Reset 後是否保留或繼續? | 成功建立的禁止狀態不因一般 CLR 解除;要允許命令,需合法的後續 Lockdown 操作,或符合指定的 power-cycle 解除條件。 |
| NVM Subsystem Reset 後是否保留或繼續? | Subsystem Reset 不等於 Power Cycle,不能用它自動解除禁止。仍要保留相同 scope 的狀態,並考慮 personality 明定的例外。 |
| Power Cycle 後是否保留或繼續? | CSEL=0 的 subsystem 禁止,LDPE=1 時跨 Power Cycle 保留,直到後續操作解除;LDPE=0 則在 Power Cycle 解除。CSEL=1/2 的禁止到 Power Cycle 為止,不因 LDPE=1 就取得跨斷電持續性。 |
不能因 Subsystem Reset 沒解除就當作失敗,也不能因 LDPE=1 就要求所有 controller-scoped 禁止跨斷電存在。
同時核對範圍、實際 personality 狀態與重設種類,才能得出唯一預期。
先檢查是否把 Controller Reset、Subsystem Reset 與真的斷電混稱為 Reset。
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
來源:Base 2.4 §5.2.28–5.2.29 · Base 2.4 §5.2.16, 8.1.5 · Base 2.4 §5.2.13.1.20 · Base 2.4 §5.2.30.1.25.4–5.2.30.1.25.4.1 · Base 2.4 §5.2.14.2.1 · Base 2.4 §3.7.1–3.7.4 · Base 2.4 §4.2.3 · Base 2.4 §5.2.13.1.2 · Base 2.4 §5.2.2 · Base 2.4 §5.2.13.1.14 (header, reset, hardware, Set Feature events)
Base 的文件頁碼等於 PDF 頁碼減 26;NVM 與 PCIe 兩份規格的文件頁碼則與 PDF 頁碼相同。以下依提供的 PDF 本文列出章節、頁碼及 Figure 編號。若同一頁包含其他主題,只引用本題需要的定義,不納入 Fabrics 或 PCIe Link、封包內容。
以下連結可開啟對應的圖表教學,查閱欄位及判讀方式。每張圖保留固定的教學位置,方便之後反覆查詢。
NVM-Express-Base-Specification-Revision-2.4-Ratified-2026.07.31.pdfNVM-Express-NVM-Command-Set-Specification-Revision-1.3-Ratified-2026.07.31.pdfNVM-Express-NVMe-over-PCIe-Transport-Specification-Revision-1.4-Ratified-2026.07.31.pdf