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