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 或更高版本来执行经过身份验证的加密操作。构建和使用该工具的说明可以在 构建固件加密工具中找到。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在PyCharm中使用pip时,可以通过添加`--trusted-host`参数来指定信任的主机。这个参数用于在使用pip下载Python包时,提供一个额外的安全层。当不信任某个主机时,可以使用`--trusted-host`参数来告诉pip该主机是可信任的。 当使用pip下载安装包时,通常会从Python包索引或其他网络源下载。在某些情况下,如果下载源或Python包索引的主机没有受信任的安全证书,那么pip会发出警告或拒绝下载。这是一种安全措施,以防止从不可信的主机下载可能包含恶意代码的软件包。 使用`--trusted-host`参数可以解决这个问题。例如,如果要信任主机`example.com`,可以在命令行中使用以下命令:`pip install package --trusted-host example.com`。这将告诉pip在下载`package`时,该主机是受信任的,可以下载包含在该主机上的软件包。 在PyCharm中,如果需要在项目中使用pip并指定信任的主机,可以在PyCharm的Terminal中使用相应的命令和参数。通过设置`--trusted-host`参数,可以确保从指定的主机下载软件包时不会遇到任何问题。这是一种增加安全性的好方法,可以防止从不受信任的源安装可能存在风险的软件包。 总之,通过在pip命令中使用`--trusted-host`参数,可以指定信任的主机,以确保从可信源下载软件包,并提高项目的安全性。 ### 回答2: 在PyCharm中使用pip命令时,可以通过添加"--trusted-host"选项来指定信任的主机。当使用 pip 安装包时,通常会从Python官方的镜像服务器或其他第三方镜像服务器下载包,但有时由于网络原因,连接到这些服务器可能会遇到问题。为了解决这个问题,可以使用"--trusted-host"选项来指定可以信任的主机。 当使用此选项时,我们需要提供一个或多个主机的名称或IP地址,以使pip能够连接到这些主机下载所需的包。在命令行中,我们可以这样使用: pip install 包名 --trusted-host 主机名或IP地址 例如,我们可以使用以下命令指定信任主机为"pypi.org": pip install 包名 --trusted-host pypi.org 这将告诉pip命令,我们信任pypi.org主机,并且可以安全地从该主机下载所需的包。 在PyCharm中,我们可以使用内置的终端或命令行工具来执行类似的命令。在安装包时,我们可以在PyCharm的终端中输入类似的命令: pip install 包名 --trusted-host 主机名或IP地址 通过指定可信任的主机,我们可以确保pip可以正常连接和下载所需的包,以便在项目中使用它们。同时,它还提供了一种防范网络问题的措施,确保我们能够顺利进行开发工作。 ### 回答3: PyCharm是一款非常流行的Python集成开发环境(IDE),pip是Python的包管理工具。当我们使用pip命令安装或升级软件包时,有时会遇到“未受信任的主机”错误。 在使用pip时,如果我们连接到一个不受信任或非标准的源(比如内网、代理服务器等),pip会提醒我们存在潜在的风险。为了避免这个问题,我们可以使用 `--trusted-host` 参数来告诉pip,该主机是可信任的。 例如,假设我们要使用pip安装一个软件包,但连接到该软件包的源被认为是不受信任的。我们可以这样使用 `--trusted-host` 参数: ``` pip install SomePackage --trusted-host example.com ``` 在这个例子中,我们将`example.com`作为一个可信任的主机来安装`SomePackage`软件包。 此外,我们还可以指定多个可信任的主机,只需要用逗号分隔即可。例如: ``` pip install SomePackage --trusted-host example.com,another-host.com ``` 这样一来,pip就会信任这两个主机,并允许我们从中安装或升级软件包。 综上所述,`--trusted-host` 参数是为了解决pip安装或升级软件包时遇到的“未受信任的主机”错误而存在的。我们可以使用该参数告诉pip哪些主机是可信任的,从而成功安装或升级我们所需的软件包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码改变世界ctw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值