8-Trusted Board Boot
引流關鍵詞: 中斷、同步異常、異步異常、irq、fiq、BL1,BL2,BL3,BL31,BL32,BL33,AP_BL1,AP_BL2,AP_BL3,AP_BL31,AP_BL32,AP_BL33,SCP_BL1,SCP_BL2,BL0,BL30, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、內存管理、頁表…
快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈
[專欄目錄]-ATF/FF-A/specification學習
8.受信任的板引導
受信任的板引導 (TBB) 功能通過驗證所有固件映像(包括普通世界引導加載程序)來防止惡意固件在平臺上運行。它通過使用公鑰密碼標準 (PKCS) 建立信任鏈來做到這一點。
本文檔描述了受信任固件 A (TF-A) TBB 的設計,它是受信任的板引導要求 (TBBR)規范 Arm DEN0006D 的實現。它應該與 固件更新 (FWU)設計文檔一起使用,該文檔實現了 TBBR 的特定方面。
8.1。信任鏈
信任鏈 (CoT) 從一組隱式可信組件開始。在 Arm 開發平臺上,這些組件是:
-
信任根公鑰 (ROTPK) 的 SHA-256 哈希。它存儲在受信任的根密鑰存儲寄存器中。或者,可以使用開發 ROTPK 并將其哈希嵌入到 BL1 和 BL2 映像中(僅用于開發目的)。
-
BL1 映像,假設它駐留在 ROM 中,因此不能被篡改。
CoT 中的其余組件是證書或引導加載程序映像。證書遵循X.509 v3標準。該標準允許向證書添加自定義擴展,這些擴展用于存儲建立 CoT 的基本信息。
在 TBB CoT 中,所有證書都是自簽名的。不需要證書頒發機構 (CA),因為 CoT 不是通過驗證證書頒發者的有效性而是通過證書擴展的內容來建立的。要對證書進行簽名,可以使用不同的簽名方案,請參閱構建選項了解更多詳細信息。
證書分為“密鑰”和“內容”證書。密鑰證書用于驗證已用于簽署內容證書的公鑰。內容證書用于存儲引導加載程序映像的哈希值。圖像可以通過計算其哈希值并將其與從內容證書中提取的哈希值進行匹配來進行身份驗證。支持各種哈希算法來計算所有哈希,請參閱構建選項 了解更多詳細信息。公鑰和哈希作為非標準擴展字段包含在X.509 v3證書中。
用于建立 CoT 的密鑰是:
-
信任根密鑰
此密鑰的私有部分用于簽署 BL2 內容證書和可信密鑰證書。公共部分是ROTPK。 -
可信世界密鑰
私有部分用于簽署與安全世界映像(SCP_BL2、BL31 和 BL32)對應的密鑰證書。公共部分存儲在可信世界證書的擴展字段之一中。 -
不可信的世界密鑰
私有部分用于簽署非安全世界鏡像(BL33)對應的密鑰證書。公共部分存儲在可信世界證書的擴展字段之一中。 -
BL3X 按鍵
對于 SCP_BL2、BL31、BL32 和 BL33 中的每一個,私有部分用于簽署 BL3X 圖像的內容證書。公共部分存儲在相應密鑰證書的擴展字段之一中。
CoT 中包含以下鏡像:
-
BL1
-
BL2
-
SCP_BL2(可選)
-
BL31
-
BL33
-
BL32(可選)
以下證書用于對鏡像進行身份驗證。
-
BL2內容證書
它使用 ROT 密鑰的私有部分進行自簽名。它包含 BL2 圖像的散列。 -
可信密鑰證書
它使用 ROT 密鑰的私有部分進行自簽名。它包含可信世界密鑰的公共部分和非可信世界密鑰的公共部分。 -
SCP_BL2 密鑰證書
它使用受信任的世界密鑰進行自簽名。它包含 SCP_BL2 密鑰的公共部分。 -
SCP_BL2 內容證書
它使用 SCP_BL2 密鑰自簽名。它包含 SCP_BL2 圖像的散列。 -
BL31密鑰證書
它使用受信任的世界密鑰進行自簽名。它包含 BL31 密鑰的公共部分。 -
BL31內容證書
它是使用 BL31 密鑰自簽名的。它包含 BL31 圖像的散列。 -
BL32密鑰證書
它使用受信任的世界密鑰進行自簽名。它包含 BL32 密鑰的公共部分。 -
BL32內容證書
它是使用 BL32 密鑰自簽名的。它包含 BL32 圖像的哈希。 -
BL33密鑰證書
它使用不受信任的世界密鑰自簽名。它包含 BL33 密鑰的公共部分。 -
BL33內容證書
它是使用 BL33 密鑰自簽名的。它包含 BL33 圖像的散列。
SCP_BL2 和 BL32 證書是可選的,但如果存在相應的 SCP_BL2 或 BL32 映像,則它們必須存在。
8.2. 受信任的板引導序列
CoT 通過以下一系列步驟進行驗證。如果任何步驟失敗,系統就會出現緊急情況。
-
BL1 加載并驗證 BL2 內容證書。從已驗證的證書中讀取頒發者公鑰。計算該密鑰的哈希值,并將其與從可信根密鑰存儲寄存器讀取的 ROTPK 哈希值進行比較。如果它們匹配,則從證書中讀取 BL2 哈希。
注意:匹配操作是特定于平臺的,目前未在 Arm 開發平臺上實現。 -
BL1 加載 BL2 圖像。計算其哈希值并與從證書中讀取的哈希值進行比較。如果所有比較都成功,則控制轉移到 BL2 圖像。
-
BL2 加載并驗證可信密鑰證書。從已驗證的證書中讀取頒發者公鑰。計算該密鑰的哈希值,并將其與從可信根密鑰存儲寄存器讀取的 ROTPK 哈希值進行比較。如果比對成功,BL2 從已驗證的證書中讀取并保存可信和不可信的世界公鑰。
為每個 SCP_BL2、BL31 和 BL32 圖像執行接下來的兩個步驟。如果這些圖像不存在,則跳過可選 SCP_BL2 和 BL32 圖像的步驟。
-
BL2 加載并驗證 BL3x 密鑰證書。證書簽名使用可信世界公鑰進行驗證。如果簽名驗證成功,BL2 從證書中讀取并保存 BL3x 公鑰。
-
BL2 加載并驗證 BL3x 內容證書。使用 BL3x 公鑰驗證簽名。如果簽名驗證成功,BL2 從證書中讀取并保存 BL3x 圖像哈希。
接下來的兩個步驟僅針對 BL33 圖像執行。
-
BL2 加載并驗證 BL33 密鑰證書。如果簽名驗證成功,BL2 從證書中讀取并保存 BL33 公鑰。
-
BL2 加載并驗證 BL33 內容證書。如果簽名驗證成功,BL2 從證書中讀取并保存 BL33 圖像哈希。
對所有引導加載程序映像執行下一步。
- BL2 計算每個圖像的哈希值。它將它與從相應的內容證書中獲得的散列進行比較。如果哈希匹配,則圖像身份驗證成功。
Trusted Board Boot 實現涵蓋通用和特定平臺的 BL1 和 BL2 代碼,以及主機構建機器上的工具代碼。該功能通過使用特定的構建標志來啟用,如 構建選項中所述。
在主機上,一個工具會生成證書,這些證書與引導加載程序映像一起包含在 FIP 中。這些證書使用 IO 存儲框架加載到 Trusted SRAM 中。然后它們由 TF-A 中包含的身份驗證模塊進行驗證。
用于生成 FIP 和身份驗證模塊的機制將在以下部分中描述。
8.3. 身份驗證框架
TF-A 中包含的身份驗證框架為實現所需的受信任啟動序列提供了支持。Arm 平臺使用此框架來實現 受信任的板引導要求 (TBBR)文檔中指定的引導要求。
有關身份驗證框架的更多信息,請參閱身份 驗證框架和信任鏈文檔。
8.4. 證書生成工具
當. cert_create_ GENERATE_COT=1它將引導加載程序映像和密鑰作為輸入(密鑰必須為 PEM 格式)并生成建立 CoT 所需的證書(DER 格式)。如果未提供新密鑰,則該工具可以生成新密鑰。然后將證書作為輸入傳遞給fiptool用于創建 FIP 的實用程序。
證書也單獨存儲在輸出構建目錄中。
該工具位于tools/cert_create目錄中。它使用 OpenSSL SSL 庫版本來生成 X.509 證書。所需的庫的特定版本在先決條件文檔中給出。
構建和使用該工具的說明可以在 構建證書生成工具中找到。
8.5。認證加密框架
TF-A 中包含的經過身份驗證的加密框架支持實現可選的固件加密功能。可以選擇在平臺上啟用此功能以實現可選要求:R060_TBBR_FUNCTION,如受信任的板引導要求 (TBBR) 文檔中指定的那樣。
8.6. 固件加密工具
當. encrypt_fw_ 它將普通固件映像作為輸入并生成加密固件映像,然后可以將其作為輸入傳遞給實用程序以創建 FIP。DECRYPTION_SUPPORT != nonefiptool
加密的固件也單獨存儲在輸出構建目錄中。
該工具位于tools/encrypt_fw目錄中。它使用 OpenSSL SSL 庫版本 1.0.1 或更高版本來執行經過身份驗證的加密操作。構建和使用該工具的說明可以在 構建固件加密工具中找到。
總結
以上是生活随笔為你收集整理的8-Trusted Board Boot的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7-CPU Reset
- 下一篇: 9-Building FIP image