PCIe Chapter 32:IDE 的保護範圍、Stream 與金鑰生命週期

IDE(Integrity and Data Encryption,完整性與資料加密)保護兩個Partner Ports之間的交易,提供機密性、完整性與重播防護。先畫出保護終點,再看Stream的配置與狀態;元件內部的資料、金鑰與隔離仍有另外的責任。

本章角色與事件IDE保護兩個終端Port之間的交易;元件內部另有隔離責任。Partner Port A保護中的 StreamPartner Port BInsecure:未建立/保護失效Secure:依配置保護交易完成必要建立條件停用或偵測安全失效
作者依 Base 6.0 繪製的教學示意;省略與本章無關的交換。

同一筆交易,保護的兩端在哪裡?

先打開 Figure 6-48,找 Stream 的兩個 Partner Ports。Link IDE 保護單一 Link 上對應 Traffic Class(TC,流量類別)的交易;Selective IDE 保護選出的交易,可穿過支援該路徑的 Switch。兩種 Stream 可以在直接相連的 Port 間同時使用:符合 Selective Stream 的 TLP 使用該 Stream 的金鑰,其餘適用流量可使用 Link IDE。

IDE
Integrity and Data Encryption,完整性與資料加密
TLP
Transaction Layer Packet,交易層封包

【模擬資料】以下資料為教學用途建立,不代表特定硬體或平台。拓樸為 Root Port → Switch Upstream Port → Switch Downstream Port → Endpoint Upstream Port。假設一條 Selective IDE Stream 的終點是 Root Port 與 Endpoint Port;Switch 兩個 Port 均支援並啟用 Flow-Through,且路徑已配置。若改用逐段 Link IDE,Switch 的終端 Port 之後所需的元件內部保護仍要另行確認。

Figure 6-48 說明保護範圍,不提供平台信任政策或元件內部隔離的實作。實際系統如何保護金鑰、記憶體和 Port 之後的資料,仍須平台與裝置文件。

PCIe Base 6.0 §6.33,Figure 6-48 IDE Secures TLPs Between Ports,印刷/PDF pp.862–866。

Capability、Stream 設定與金鑰各從哪裡查?

先在兩個終端 Port 的管理 Function 查 IDE Extended Capability:Figure 7-371 的 ID=0030h、Version=1。Endpoint Upstream Port 由 Function 0 管理,Downstream Port 由其 Bridge Function 管理;Root Port 的金鑰管理介面可能不同。金鑰建立另查 IDE_KM,不會因 Configuration Register 可讀就自動完成。

接續模擬情境,假設 Root Port 和 Endpoint Port 的 IDE Capability 均為 00000063h:Link IDE Supported、Selective IDE Supported、PCRC Supported 和 IDE_KM Protocol Supported 為一,支援演算法編碼為 0,兩個數量欄位皆為 0,分別表示一個 Link IDE TC 與一個 Selective Stream。支援欄位表示硬體能力,還要查控制、協定和目前狀態。

TC
Traffic Class,流量類別

令 Root Port 的 IDE Capability 起點為 R。依 Figure 7-370,Header、Capability、Control 後有一組 Link IDE Control/Status,因此第一組 Selective Stream Capability、Control、Status 分別從 R+14h、R+18h、R+1Ch 開始。這個位移依本例的 Link Stream 數量推得,不能把它當所有裝置的固定 offset。

Root Port 位置模擬讀值解讀
R+14h:Selective Stream Capability00000001h一組 Address Association Register
R+18h:Selective Stream Control05000001hStream ID=05h、TC=0、Selected Algorithm=0、Enable=1
R+1Ch:Selective Stream Status00000002hState=0010b(Secure)

另一端 Endpoint Port 也使用 Stream ID=05h、TC=0 與相同演算法;假設它的 Enable=1、State=0010b。這是案例給定的兩端快照。Enable 的作用是允許在 IDE_KM 觸發後開始操作,不能單靠 Enable=1 判定已進入 Secure。若 State 為保留編碼,軟體應視為未知狀態。

PCIe Base 6.0 §6.33.2–6.33.3,印刷/PDF pp.868–869;§7.9.26–7.9.26.5.3,Figures 7-370–7-378、Tables 7-323–7-330,pp.1303–1313。

哪一筆 Memory Request 可以進入這條 Stream?

先用 Table 6-33 檢查 TLP 類型:Memory Read/Write 可以使用 Selective IDE,I/O Read/Write 不可以。再依 §6.33.4 檢查 Stream Enable、TC、對應範圍及其他適用條件;只有地址相符還不足以完成所有檢查。

TLP
Transaction Layer Packet,交易層封包

本例假設 Root Port 的 Partner Endpoint RID=0300h。依 Figure 7-370 接著讀 RID Association Register 1/2:R+20h=00030000h 表示 RID Limit=0300h,R+24h=00030001h 表示 RID Base=0300h、Valid=1。Valid 表示範圍已配置,不等同 Stream Secure。Endpoint 端要描述自己的 Partner Port,應讀取並核對 Endpoint 端的相應設定,不能把 Root Port 的值照搬過去。

RID
Routing ID,封包使用的路由識別碼

Root Port 的第一組 Address Association 假設為 R+28h=90090001h、R+2Ch=00000000h、R+30h=00000000h。依 Figure 7-381 與 Tables 7-333–7-335,Valid=1,Base 的低 20 bits 隱含為零,Limit 的低 20 bits 隱含為一,因此範圍是 90000000h–900FFFFFh。Root Port 發出的 TC0 Memory Read 若目標為 90010000h,地址落在此範圍;假設其餘路由、選擇及保護條件均成立,可與這條 Stream 關聯。

超出範圍或 TC 不同的 TLP 不符合本例這條 Selective Stream 的相關條件;還須依其他 Stream、Link IDE 與平台設定處理。Memory Read 的 Completion 則須與原 Non-Posted Request 的 Stream ID 和 T bit 相符。即使兩端 State=Secure,也不能只用這個快照證明目標裝置已完成讀取。

PCIe Base 6.0 §6.33.4,Table 6-33 TLP Types for Selective IDE Streams,印刷/PDF pp.889–890;§§7.9.26.5.4–7.9.26.5.5,Figures 7-379–7-383、Tables 7-331–7-335,pp.1313–1315。

Enable 已設為一,為什麼仍可能是 Insecure?

Figure 6-49 把 Ready 畫在 Insecure 之內。Ready 表示必要配置已完成,是系統軟體/韌體需要追蹤的概念子狀態;規格不要求硬體直接回報這個轉換。兩端還需完成適用的金鑰、設定和觸發流程,才能各自進入 Secure。

以本例為例,若兩端 Enable 均為一,但 Root Port 的 State=0000b、Endpoint 的 State=0010b,目前只能說 Root Port 尚未處於 Secure;兩份資料的時間也要對齊。Selective Stream Enable=1 時若 RID Association 的 Valid=0,該 Stream 必須轉為 Insecure。Selected Algorithm、PCRC Enable、RID Base/Limit 與 Valid 必須在 Enable 前配置;啟用中修改這些指定欄位,結果為 undefined。

Stream Enable 被清除,或 Port 偵測到安全遭破壞時,Stream 必須轉為 Insecure。若 TEE(Trusted Execution Environment,可信執行環境)要求這條 Stream,Figure 6-50 的條件是所有必要 Stream 均為 Secure 才能進入 Locked;任何必要 Stream 為 Insecure 時須回到 Not Locked。原本要求安全保護的傳送不可默默改用未受保護的 TLP。

收到 Integrity Check Fail Message 的狀態是另一個 RW1C 事件欄位;清除事件記錄不等於重新建立 Stream,也不能由單一快照還原完整失效原因。

PCIe Base 6.0 §6.33.1,Figures 6-49–6-50,印刷/PDF pp.866–868;§7.9.26.5.2–7.9.26.5.3,Tables 7-329–7-330,pp.1310–1313。

Appendix L 的輸入與輸出怎麼對照?

Figure L-1 先給一個 Memory Write,Table L-1 再列出演算法的 A(附加驗證資料)、P(明文)以及 C(密文)和 MAC(Message Authentication Code,訊息驗證碼)。最後看 Figure L-2,辨認 IDE Prefix、加密後資料、PCRC 與 MAC 在封包中的位置。範例位於 Non-Flit 格式;Flit Mode 的欄位位置需回到對應格式。

這組值是規格中的測試範例,用來理解欄位如何連接,不代表已驗證本機實作。本文不提供實機金鑰或私密設定。

PCIe Base 6.0 Appendix L Example IDE TLP,Figures L-1–L-2、Table L-1 Inputs and Outputs for Example IDE TLP,印刷/PDF pp.1903–1904;§6.33.4,p.882。

版本與來源

本章以 PCI Express Base Specification Revision 6.0(6.0-1.0-PUB)為準,文件頁與 PDF 頁相同。案例的配置與讀值均為作者假設,並非實機測量。

本章以 6.0-1.0-PUB 的規則教學。實際安全部署還應查閱 PCI-SIG 後續發布的 IDE 安全公告(2025-12-09)及適用修正,並核對平台與元件版本;不能單憑本章範例或 Secure 狀態認定系統不受影響。

完整來源定位
  • §6.33; pp.862,863,865,866; Figures 6-48
  • §6.33.1; pp.866,867,868; Figures 6-49, 6-50
  • §6.33.2; §6.33.3; §7.9.26; pp.868,869,1303; Figures 7-370
  • §L; pp.1903–1904; Figures L-1–L-2; Tables L-1
Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...