基於 FF-A 的 TPM CRB 驅動

TPM 命令響應緩衝區 (CRB) 介面是一個標準的 TPM 介面,定義在 TCG PC 客戶端平臺 TPM 配置檔案 (PTP) 規範中 [1]。CRB 提供了一組結構化的控制暫存器,客戶端在與 TPM 互動時使用,以及一個用於儲存 TPM 命令和響應的資料緩衝區。CRB 介面可以實現為

  • 獨立 TPM 晶片中的硬體暫存器

  • 在隔離環境中執行的 TPM 的記憶體中,其中共享記憶體允許客戶端與 TPM 互動

適用於 Arm A-profile 的韌體框架 (FF-A) [2] 是一個定義了以下目的介面和協議的規範

  • 將韌體劃分為在 Arm 安全世界環境(也稱為 TrustZone)中執行的軟體分割槽

  • 為非安全狀態下的軟體元件(例如作業系統和虛擬機器管理器)提供一個標準介面,以與該韌體通訊。

TPM 可以作為 FF-A 安全服務實現。這可以是一個韌體 TPM,也可能是一個充當獨立 TPM 晶片代理的 TPM 服務。基於 FF-A 的 TPM 將硬體細節(例如匯流排控制器和晶片選擇)從作業系統中抽象出來,並且可以保護區域性性 4 不受作業系統訪問。TCG 定義的 CRB 介面用於客戶端與 TPM 服務互動。

基於 FF-A 的 Arm TPM 服務命令響應緩衝區介面 [3] 規範定義了 FF-A 訊息,客戶端可以使用這些訊息來通知 CRB 何時進行了更新。

Linux CRB 驅動與 FF-A 的互動方式總結如下

  • tpm_crb_ffa 驅動程式在核心中向 FF-A 子系統註冊,使用基於 FF-A 規範中定義的架構化 TPM 服務 UUID。

  • 如果 FF-A 發現 TPM 服務,tpm_crb_ffa 驅動程式中的 probe() 函式會執行,並且驅動程式會初始化。

  • Linux CRB 驅動程式的探測和初始化是透過 ACPI 宣告的 TPM 的發現來觸發的。CRB 驅動程式可以透過 ACPI 的 'start' 方法檢測 TPM 的型別。Arm FF-A 的 start 方法定義在 TCG ACPI v1.4 中 [4]

  • 當 CRB 驅動程式執行其正常功能時,例如發出 'start' 訊號和請求/放棄區域性性,它會呼叫 tpm_crb_ffa 驅動程式中的 tpm_crb_ffa_start() 函式,該函式處理向 TPM 傳送的 FF-A 訊息。

參考文獻