TPM 事件日誌

本文件簡要介紹了 TPM 日誌是什麼以及它如何從預啟動韌體移交給作業系統。

引言

預啟動韌體維護一個事件日誌,每次有內容被雜湊到任何 PCR 暫存器時,都會生成新的條目。這些事件按型別分類,幷包含雜湊後的 PCR 暫存器值。通常,預啟動韌體會雜湊那些將移交執行權的元件或與啟動過程相關的操作。

其主要應用是遠端認證,其有用之處在 [1] 的第一節中得到了很好的闡述

“認證用於向挑戰者提供有關平臺狀態的資訊。然而,PCR 內容難以解釋;因此,當 PCR 內容附帶測量日誌時,認證通常更有用。雖然測量日誌本身不可信,但它包含比 PCR 內容更豐富的資訊集。PCR 內容用於提供測量日誌的驗證。”

UEFI 事件日誌

UEFI 提供的事件日誌有一些奇怪的特性。

在呼叫 ExitBootServices() 之前,Linux EFI 樁程式會將事件日誌複製到由樁程式自身定義的自定義配置表中。不幸的是,由 ExitBootServices() 生成的事件不會出現在該表中。

韌體提供了所謂的“最終事件配置表”來解決這個問題。事件在第一次呼叫 EFI_TCG2_PROTOCOL.GetEventLog() 後會被映象到此表中。

這帶來了另一個問題:無法保證在 Linux EFI 樁程式執行之前不呼叫它。因此,在樁程式仍在執行時,它需要計算並儲存最終事件表的大小到自定義配置表中,以便 TPM 驅動程式在將事件日誌的兩個部分(來自自定義配置表和最終事件表)連線起來時,可以跳過這些事件。

參考文獻