可信启动Trusted Board Boot

TBB

Trusted Board Boot(TBB)对所有固件镜像(包括普通世界的bootloader)进行身份验证,以防止恶意固件在平台上运行。TBB使用公钥加密标准 (PKCS)来建立信任链(Chain of Trust)。

CoT

信任链 (CoT) 从一些可信组件开始,其以链式方式建立后续组件的信任,依此类推。CoT取决于几个因素:

  • 平台上运行的镜像固件,如通用镜像BL1,BL2,BL31以及BL33,以及平台需要的其他镜像
  • 密钥管理方案:设备密钥的全生命周期配置
  • 密钥所有权模型:谁拥有哪个密钥

下面这些可信组件提供了信任锚点:

  • 信任根公钥 (ROTPK) 或其哈希值
  • BL1镜像,假定其固化在ROM中,无法更改

其余的CoT组件是证书或者启动镜像。证书遵循X.509 v3标准,其允许向证书添加自定义扩展,用于存储建立CoT所需的基本信息。所有证书都是自签名的,无需证书颁发机构 (CA),因为CoT不是通过验证证书颁发者的有效性而建立的,而是通过证书扩展中的内容建立的。

证书分为“密钥”和“内容”证书。密钥证书用于验证签发内容证书的公钥;内容证书用于存储启动镜像的哈希值。在启动阶段,计算启动镜像的哈希值,并从内容证书中提取镜像的哈希值,通过比较以上两个哈希值是否相等来判断镜像是否可信。公钥和哈希值作为非标准扩展字段包含在X.509 v3证书中。

TBBR

在TF-A中实施了TBBR CoT,所有的固件和证书都(直接或者间接地)与信任根公钥(ROTPK)相关。通常设备的供应商拥有 ROTPK、Trusted key和Non-Trusted key。

组件说明
Root of trust key信任根密钥,私钥部分用于签发Trusted Boot Firmware Certifacate和Trusted Key Certificate两个证书,公钥部分就是ROTPK
Trusted world key安全世界密钥,私钥部分用于签发安全世界镜像(BL31和BL32)的密钥证书BL31/BL32 Key Certificate,公钥部分存放在Trusted Key Certificate的扩展域中
Non-Trusted world key非安全世界密钥,私钥部分用于签发非安全世界镜像(BL33)的密钥证书BL3 Key Certificate,公钥部分存放在Trusted Key Certificate的扩展域中
BL3X keysBL3X密钥,私钥部分用于签发BL3X镜像的内容证书BL31/BL32/BL33 Content Certificate,公钥部分存放在相应密钥证书BL31/BL32/BL33 Key Certificate的扩展域中
Trusted Boot Firmware Certificate使用信任根密钥ROT签发的自签名证书,其包括BL2镜像的哈希值
Trusted Key Certificate使用信任根密钥ROT签发的自签名证书,其包括密钥Trusted world key和Non-Trusted world key的公钥部分
BL31 Key Certificate使用Trusted world key签发的自签名证书,其包括BL31镜像的哈希值
BL32 Key Certificate使用Trusted world key签发的自签名证书,其包括BL32镜像的哈希值
BL33 Key Certificate使用Non-Trusted world key签发的自签名证书,其包括BL33镜像的哈希值

下图展示了按照TBBR实施的信任链CoT,TF-A实施的其他部分如调试证书,SCP镜像等没有列举出来。

TBBR CoT

X509

TF-A使用X509证书标准实现信任链的传递,证书的要求如下:

  • 每张证书都符合X.509v3标准,在其扩展域存放了安全参数,如NV counters,固件哈希值,公钥以及SoC其他安全参数
  • 每张证书需要包含:发行商名称,证书主体名称,序列号,算法,公钥信息(有些情况为了减小证书大小,不会传公钥值)
  • 每张证书都具备有效期
  • 在对可信固件证书进行任何身份验证之前,该证书必须存在于可信RAM中
  • 在可信启动过程中,如果还未对软件镜像执行完整性检查,必须将其先下载到可信RAM中

下面是采用X.509 v3标准的证书示例:

X509v3证书结构

可信启动流程

在TF-A中,上电复位后从信任锚点BL1开始运行,BL1加载和认证BL2,认证通过后,跳转到BL2执行,然后BL2再加载和认证BL3x,认证通过后,最后跳转到BL3x镜像继续执行。

BL1认证BL2

BL1加载和认证BL2镜像的流程如下:

  • 上电复位后BL1开始执行,从存储介质中读取证书BL2 Content Certficate到可信RAM中
  • 解析证书BL2 Content Certficate,获取信任根公钥ROTPK,并计算其哈希值
  • 从OTP/EFUSE中读取可信的根公钥哈希值,并与上一步计算的根公钥哈希值进行比较,如果二者相等,则表示ROTPK根公钥可信,否则进入异常处理
  • 解析证书BL2 Content Certficate,获取签名值,并使用ROTPK对该证书进行验签,如果验签通过,说明证书可信,从中解析出参考的镜像哈希值BL2 image hash,否则进入异常处理
  • 从存储介质中加载BL2镜像,计算其哈希值,并与上一步参考的BL2 image hash进行比较,如果二者相等,说明BL2镜像可信,跳转到BL2开始执行,否则进入异常处理

BL1认证BL2

BL2认证BL3x

BL2加载和认证BL3x镜像的流程如下:

  • BL1跳转到BL2开始执行后,从存储介质中读取密钥证书Trust Key Certficate到可信RAM中
  • 解析密钥证书Trust Key Certficate,获取信任根公钥ROTPK,并计算其哈希值
  • 从OTP/EFUSE中读取可信的根公钥哈希值,并与上一步计算的根公钥哈希值进行比较,如果二者相等,则表示ROTPK根公钥可信,否则进入异常处理
  • 解析密钥证书Trust Key Certficate,获取签名值,并使用ROTPK对该证书进行验签,如果验签通过,说明证书可信,从中解析出Trusted World Public Key和Non-Trusted World Public Key,否则进入异常处理
  • 接下来就是安全世界和非安全世界每个镜像的认证过程。先从存储介质中读取密钥证书Trust Key Certficate到可信RAM中,解析获取签名值,并使用上一步的Trusted World Public Key对该证书进行验签,如果验签通过,说明证书可信,从中解析出BL31或BL32 Public Key,否则进入异常处理
  • 从存储介质中加载内容证书BL31或BL32 Content Certficate,解析获取签名值,并使用上一步的BL31或BL32 Public Key对该证书进行验签,如果验签通过,说明证书可信,从中解析出参考的BL31或BL32 image hash,否则进入异常处理
  • 从存储介质中加载BL31或BL32 image,计算其哈希值,并与上一步参考的BL31或BL32 image hash进行比较,如果二者相等,说明BL31或者BL32镜像可信,否则进入异常处理
  • 接着是非安全世界镜像的认证过程,与上面安全世界的镜像类似,只是改成使用Non-Trusted World Public Key对密钥证书BL33 Key Certficate进行验签,认证通过再使用BL33 Public Key对BL33 Content Cerificate验签
  • 当所有镜像都认证通过后,说明安全世界镜像和非安全世界镜像均可信,可以跳转后续镜像继续启动执行

BL2认证BL3x

镜像解密

为了保证镜像的机密性,防止被复制克隆,TF-A认证框架也支持镜像加密功能。在启动流程中,如果镜像被加密,首先需要对其进行解密,然后才执行认证流程。

参考

  1. Trusted Board Boot Requirements Client (TBBR-CLIENT) Armv8-A
  2. Trusted Firmware-A Documentation

欢迎关注“安全有理”微信公众号。

安全有理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/730317.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Log4j2异步打印可变对象的问题

现象 应用代码如下: Test test new Test();test.setA(1);test.setB("1");log.info("before modification: {} \t ",test);test.setA(2);test.setB("2");log.info("after modification: {} \t ",test);问题应用的日志控制…

怎么添加网页到桌面快捷方式?

推荐用过最棒的学习网站!https://offernow.cn 添加网页到桌面快捷方式? 很简单,仅需要两步,接下来以chrome浏览器为例。 第一步 在想要保存的网页右上角点击设置。 第二步 保存并分享-创建快捷方式,保存到桌面即可…

使用VisualBox+Vagrant搭建Centos虚拟机环境

1.下载并安装VisualBox; 2.下载并安装Vagrant; 3.打开cmd窗口,执行命令vagrant init centos/7,初始化centos环境,该步骤受网络带宽影响,可能挂级30分钟到1个小时; 4.启动虚拟机:vagrant up&…

C# yolov8 OpenVINO 同步、异步接口视频推理

C# yolov8 OpenVINO 同步、异步接口视频推理 目录 效果 项目 代码 下载 效果 同步推理效果 异步推理效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Windows.Form…

慢阻肺患者为何容易营养不良?朗格力教你轻松改善

#肺科营养#朗格力#班古营养#复合营养素#肺部营养#肺部健康# 慢阻肺是我国常见的、高患病率的慢性呼吸系统疾病,会对肺结构和功能产生影响,从而引起各种不良反应,其中营养不良是常见并发症之一。慢阻肺为什么会发生营养不良?营养不良又是怎么伤害慢阻肺的呢?为什么像班古精准…

鸿蒙 登录界面示例

1.b站登录界面 我的b站教学视频:https://www.bilibili.com/video/BV1LQgQexEGm/?spm_id_from333.999.0.0&vd_sourced0ea58f1127eed138a4ba5421c577eb1 最终实现效果: 需要准备2张图片,分别是向下和向右边的图标 代码: En…

(2024,Vision-RWKV,线性复杂度双向注意力,四向标记移位)通过类似 RWKV 的架构实现高效且可扩展的视觉感知

Vision-RWKV: Efficient and Scalable Visual Perception with RWKV-Like Architectures 公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2. 特征聚合机制 3. Vision-RWKV 3.…

一问搞懂Linux信号【上】

Linux信号在Linux系统中的地位仅此于进程间通信,其重要程度不言而喻。本文我们将从信号产生,信号保存,信号处理三个方面来讲解信号。 🚩结合现实认识信号 在讲解信号产生之前,我们先做些预备的工作。 现实生活中信号…

2024.6最最新版MySQL数据库安装(保姆级教程,不懂你捶我)

1.MySQL数据库下载 1.打开MySQL官网 如下页面 2.下翻网页到最底部,找到Download,点击第一个MySQL Community Server 3.选择自己需要的版本以及系统的MySQL: 4.跳转页面会有一个登录/注册页面,这里我们不鸟他,直接开始下载 2.MySQL数据库安装 1.双击我们刚刚下载的安装包 2.勾…

音乐管理系统

摘 要 现如今,在信息快速发展的时代,互联网已经成了人们在日常生活中进行信息交流的重要平台。看起来,听歌只是一种消遣和消遣,其实,只要你选对了曲子,就会产生许多不同的作用。音乐能舒缓身心&#xff0c…

上海交大阿里巴巴推出虚拟试衣新里程碑式工作——AnyFit:任意场景、任意组合!

文章链接:https://arxiv.org/pdf/2405.18172 工程链接:https://colorful-liyu.github.io/anyfit-page/ 今天和大家一起学习的是一种名为AnyFit的新型虚拟试穿系统,旨在解决现有技术在处理不同场景和服饰组合时出现的衣物风格不匹配和质量下…

量化系统--开源强大的qmt交易系统,提供源代码

经过的3天终于写完了qmt_trader的文档了开源直接使用我开源了全部源代码 文档地址 https://gitee.com/li-xingguo11111/qmt_trader 源代码from qmt_trader.qmt_trader import qmt_trader from qmt_trader.xtquant.xttype import StockAccountfrom qmt_trader.xtquant import …

opencascade AIS_InteractiveContext源码学习2

AIS_InteractiveContext 前言 交互上下文(Interactive Context)允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是,对于已经被交互上下文识别的交互对象,必须使用上下文方法进行…

C语言练习03-字符串

一、遍历字符 #include<stdio.h>int main() {char str[100];//录入字符串printf("请输入一串字符&#xff1a;\n");scanf("%s",str);//遍历字符串char* p str;while(1){char c *p;if(c \0){//如果遍历到结束标记&#xff0c;则循环结束break;}//…

雷池社区版自动SSL

正常安装雷池&#xff0c;并配置站点&#xff0c;暂时不配置ssl 不使用雷池自带的证书申请。 安装&#xff08;acme.sh&#xff09;&#xff0c;使用域名验证方式生成证书 先安装git yum install git 或者 apt-get install git 安装完成后使用 git clone https://gitee.com/n…

应用案例 | 冷藏集装箱基于云的WiFi无线温度监测系统COMET Cloud

一、集装箱的作用和分类 集装箱运输是国际贸易货物多式联运过程中的重要运输方式。由于集装箱运输具有标准化高、密封性好&#xff0c;破损率低、集约化、规模化、班轮化、成本低、质量好等优点&#xff0c;大大提高了货物运输的安全和效率。 集装箱种类很多&#xff0c;按所…

C++类基本常识

文章目录 一、类的默认方法二、类的成员变量初始化1 类的成员变量有三种初始化方法&#xff1a;2 成员变量初始化顺序3 const和static的初始化 三、C内存区域四、const和static 一、类的默认方法 C的类都会有8个默认方法 默认构造函数默认拷贝构造函数默认析构函数默认重载赋…

mongodb嵌套聚合

db.order.aggregate([{$match: {// 下单时间"createTime": {$gte: ISODate("2024-05-01T00:00:00Z"),$lte: ISODate("2024-05-31T23:59:59Z")}// 商品名称,"goods.productName": /美国皓齿/,//订单状态 2:待发货 3:已发货 4:交易成功…

最火AI角色扮演流量已达谷歌搜索20%!每秒处理2万推理请求,Transformer作者公开优化秘诀

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内容…

springboot3 连接 oceanbase + logproxy数据同步到redis

我这用的是 社区版的 单机&#xff0c; rocky liunx 安装oceanbase 注意事项&#xff1a; logproxy 是 CDC 模式 &#xff0c; springboot 可以直接订阅 canal 是 binlog模式&#xff0c; canal 订阅 logproxy&#xff0c; springboot 订阅 canal logproxy 也可以转 bi…