zl程序教程

您现在的位置是:首页 >  后端

当前栏目

8-Trusted Board Boot

2023-09-27 14:26:31 时间

引流关键词: 中断、同步异常、异步异常、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 或更高版本来执行经过身份验证的加密操作。构建和使用该工具的说明可以在 构建固件加密工具中找到。