ARM Trusted Firmware - Trusted Board Boot Design Guide

Term

TBB    Trusted Board Boot

TBBR  Trusted Board Boot Requirement

FIP     Firmware Image Package


1. Introduction

Trusted Board Boot(TBB)可以防止惡意Firmware在平臺上運行,方法是通過一級級的認證所有的firmware鏡像,直到normal bootloader。 這個可信斂的建立過程使用公鑰加密標準(PKCS)

這個文檔描述ARM Trusted Firmware的TBB, ARM Trusted Firmware TBB是Trusted Board Boot Requirement(TBBR)標準的實現。


2. Chain of Trust

可信鏈(CoT)始於一組隱含的可信部件。在ARM開發平臺,這些起始可信部件是:

  • 一個根可信公鑰的 SHA-256哈希。存儲在可信根密鑰寄存器中
  • BL1鏡像,一般存放在ROM中,所以不能被篡改。

CoT的其餘不見或者是證書或者是bootloader鏡像。證書都符合X.509 v3表準。這個標準允許在證書中增加定製的擴展,可以用來存儲建立CoT的必要信息。

在TBB CoT上的所有證書都是自簽名的。 並不需要一個證書授權中心(CA),因爲CoT的建立,並不是通過驗證證書頒發者有效性,而是通過證書擴展內容實現的

。簽名一個證書,使用PKCS#1 SHA-256,RSA加密簽名模式, RSA密鑰長度爲2048bits。未來的Trusted Firmware將支持額外的加密算法。

憑證分爲key和content憑證。key憑證用來驗證簽名使用的公鑰。內容證書用來存儲bootloader鏡像的hash值。通過比對內容證書中的hash值和計算鏡像內容得到的hash值,相等則說明鏡像通過認證。SHA-256函數用來計算所有的hashes。包含在證書中的公鑰和hashes是X.509 v3的非標準擴展。

用來建立CoT的keys包括:

  • Root of the trust key

該密鑰對的私鑰用來簽名BL2內容證書和trusted key證書。公鑰則爲ROTPK

  • Trusted world key

該密鑰對的私鑰用來簽名secure world鏡像(比如SCP_BL2, BL31 BL32)對應的公鑰證書。公鑰部分則保存在trusted world證書的擴展域。

  • Non-trusted world key

該密鑰對的私鑰用來簽名non-secure world 鏡像(BL33)對應的密鑰證書。公鑰部分則保存在trusted world證書的一個擴展域。

  • BL3-X keys

對於SCP_BL2, BL31, BL32和BL33,這些keys被用來簽名內容證書,對應的公鑰則存儲在密鑰證書的擴展域中


CoT中包括下列鏡像:

  • BL1
  • BL2
  • SCP_BL2(可選)
  • BL31
  • BL33
  • BL32(可選)

下列證書用來認證鏡像

  • BL2內容證書

這個自簽名證書使用ROT 私鑰。它包含BL2鏡像的hash值

  • Trusted key證書

使用ROT私鑰自簽名。包括trusted world公鑰以及non-trusted world公鑰

  • SCP_BL2 key證書

使用trusted world密鑰自簽名,它包含SCP_BL2公鑰

  • SCP_BL2內容證書

使用SCP_BL2密鑰自簽名,它包含SCP_BL2鏡像的hash值

  • BL31 key證書

使用trusted world密鑰自簽名,它包含BL31公鑰

  • BL31 content證書

使用BL31密鑰自簽名,包含BL31鏡像的hash值

  • BL32 key證書

使用trusted world密鑰自簽名,包含BL32公鑰

  • BL32 內容證書

使用BL32密鑰自簽名,包含BL32鏡像的hash值

  • BL33 key證書

使用non-trusted world密鑰自簽名,包含BL33的公鑰

  • BL33內容證書

使用BL33密鑰自簽名,包含BL33鏡像的hash值


3. Trusted board Boot Sequence

CoT通過以下步驟驗證

  • BL1加載並且驗證BL2內容證書。頒發者的公鑰從已驗證過的證書中獲得。首先比較頒發者公鑰hash是否等於從root-key storage寄存器讀到的ROTPK的hash。 如果相等,那麼BL2內容證書應該包含兩部分(我猜測的):內容hash本身,以及使用 頒發者私鑰加密的hash內容。
  • BL1加載BL2鏡像,計算鏡像的hash並且和BL2內容證書中的hash做比較,如果比較成功,則跳轉到BL2執行。
  • BL2加載並且驗證Trusted key證書(這個/這些?證書應該包含在BL2鏡像中),頒發者的公鑰從已經驗證的證書中獲得。首先比較頒發者公鑰hash是否等於root-key storage寄存器中讀到的ROTPK的hash值。如果比較成功,BL2從驗證的證書中讀取並且保存trusted和non-trusted world公鑰。

接下來,對於SCP_BL2 BL1和BL32鏡像執行類似的操作。對SCP_BL2和BL32鏡像的操作是可選的,取決於鏡像是夠存在。

  • BL2加載並且驗證BL3x的key證書。證書籤名使用trusted world public key驗證,如果簽名相同,那麼BL2讀取並保存證書中的BL3X公鑰。
  • BL2加載和驗證BL3x內容證書。證書籤名使用BL3x公鑰驗證。如果簽名驗證成功,BL2讀取並且保存BL3x鏡像hash

接下來的兩步僅僅針對BL33鏡像。

  • BL2加載並且驗證BL33的key證書。如果簽名驗證成功,BL2讀取並保存BL33公鑰
  • BL2加載並且驗證BL33內容鏡像。如果簽名驗證成功, BL2讀取並且保存BL33鏡像hash

下面步驟是針對BL2加載的所有bootloader鏡像

  • BL2計算每個鏡像的hash,然後和之前從內容證書獲得的hash比較,如果相同,鏡像認證成功。

TBB實現散佈在通用的和平臺特定的BL1 BL2 code中,以及build主機的tool代碼中。通過特定的build標記使能TBB,具體細節參見user-guide.md

在build 主機,包含工具生成證書,這些證書和bootloader鏡像一起包含到FIP(Firmware Images Package), 這些證書通過IO storage framework加載到Trusted SRAM。然後被Trusted Firmware中的認真模塊驗證。

4. Authentication Framework

Trusted Firmware 中的認證框架爲實現TBB提供了支持, ARM平臺通過Authentication Framework實現了TBBR文檔中描述的啓動需求

關於Authentication Framework的更多描述,參看Auth Framework文檔


5. Certificate Generation Tool

在Trusted Firmware build過程,如果指定了GENERATE_COT=1, cert_create主機端工具會被編譯運行。這個工具使用bootloader images和密鑰作爲輸入(密鑰必須是PEM格式),生成建立CoT所需的證書(DER格式)。如果密鑰沒有提供,那麼會使用這個工具生成新的密鑰。證書隨後會被做爲fiptool工具的輸入,生成FIP。

證書也會單獨存放在build輸出目錄。

工具存放在tools/cert_create目錄下。使用OpenSSL SSL庫1.01 或之後的版本,生成X.509證書。編譯和使用這個工具參見user-guide.md







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章