可信启动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 keys | BL3X密钥,私钥部分用于签发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镜像等没有列举出来。
X509
TF-A使用X509证书标准实现信任链的传递,证书的要求如下:
- 每张证书都符合X.509v3标准,在其扩展域存放了安全参数,如NV counters,固件哈希值,公钥以及SoC其他安全参数
- 每张证书需要包含:发行商名称,证书主体名称,序列号,算法,公钥信息(有些情况为了减小证书大小,不会传公钥值)
- 每张证书都具备有效期
- 在对可信固件证书进行任何身份验证之前,该证书必须存在于可信RAM中
- 在可信启动过程中,如果还未对软件镜像执行完整性检查,必须将其先下载到可信RAM中
下面是采用X.509 v3标准的证书示例:
可信启动流程
在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开始执行,否则进入异常处理
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验签
- 当所有镜像都认证通过后,说明安全世界镜像和非安全世界镜像均可信,可以跳转后续镜像继续启动执行
镜像解密
为了保证镜像的机密性,防止被复制克隆,TF-A认证框架也支持镜像加密功能。在启动流程中,如果镜像被加密,首先需要对其进行解密,然后才执行认证流程。
参考
- Trusted Board Boot Requirements Client (TBBR-CLIENT) Armv8-A
- Trusted Firmware-A Documentation
欢迎关注“安全有理”微信公众号。
相关文章:
![](https://img-blog.csdnimg.cn/c8320ffa587140b7a3f3b1deca83115b.png)
可信启动Trusted Board Boot
TBB Trusted Board Boot(TBB)对所有固件镜像(包括普通世界的bootloader)进行身份验证,以防止恶意固件在平台上运行。TBB使用公钥加密标准 (PKCS)来建立信任链(Chain of Trust&#…...
![](https://img-blog.csdnimg.cn/direct/08078f1925134ab6a2d6687f23a9fdd8.png)
JVM的类加载机制
Java中类的加载阶段 类加载 Java中的类加载机制是Java运行时环境的一部分,确保Java类可以被JVM(Java虚拟机)正确地加载和执行。类加载机制主要分为以下几个阶段: 加载(Loading):这个阶段&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
C++中的八大设计原则
目录 摘要 C中的8大设计原则 1. 单一职责原则 (Single Responsibility Principle, SRP) 2. 开放封闭原则 (Open/Closed Principle, OCP) 3. 里氏替换原则 (Liskov Substitution Principle, LSP) 4. 依赖倒置原则 (Dependency Inversion Principle, DIP) 5. 接口隔离原则…...
![](https://img-blog.csdnimg.cn/direct/1878ce4ab62f4214bd79224a4cbafffd.png)
2024广东省职业技能大赛云计算赛项实战——Minio服务搭建
Minio服务搭建 前言 这道题是比赛时考到的,没找到具体题目,但在公布的样题中找到了,虽然很短~ 使用提供的 OpenStack 云平台,申请一台云主机,使用提供的软件包安装部署 MINIO 服务并使用 systemctl 管理 Minio是一个…...
![](https://img-blog.csdnimg.cn/direct/abf86cfc3f04453897e0ac6715bbd324.png)
【考研408计算机组成原理】数值表示和运算之快速数值转换
苏泽 “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家 另外,利用了工作之余的一点点时间,整理了一套考研408的知识图谱, 我根据这一套知识图谱打造了这样一个408知识图谱问答系统 里面的每一…...
![](https://img-blog.csdnimg.cn/direct/d327b2112c604ab590e4b6b30175cf8c.png)
理解 JTBD 框架和EJ 理念:深挖以用户为中心的设计
在与用户的交流中,我们发现对用户需求的精准洞察普遍困扰着产品经理、设计、企划人员,因为当今消费者行为已经由单品消费转向场景消费,千人千面的个性化需求出现,消费者数据维度极大丰富,这对把握用户体验造成了很大挑…...
![](https://www.ngui.cc/images/no-images.jpg)
数据提取与治理:企业实现数据驱动决策的必经之路
数据提取与治理:企业实现数据驱动决策的必经之路 随着信息技术的迅猛发展,数据已经成为企业最宝贵的资产之一。然而,数据并非天生就具有价值,只有通过有效的提取和治理,才能转化为企业决策的有力支撑。本文将探讨数据…...
![](https://img-blog.csdnimg.cn/img_convert/08666499d67586b9643f7438682c532e.png)
Avalonia:一个.NET跨平台UI框架
概述 Avalonia是一个强大的框架,使开发人员能够使用. NET创建跨平台应用程序。它使用自己的渲染引擎来绘制UI控件,确保在各种平台上保持一致的外观和行为,包括Windows,macOS,Linux,Android,iOS…...
![](https://img-blog.csdnimg.cn/direct/4e05cb36de4b4f3782a852b16baf732b.png)
海量数据处理——bitMap/BloomFilter、hash + 统计 + 堆/归并/快排
前言:海量数据处理是面试中一道常考的问题, 生活中也容易遇到这种问题。 通常就是有一个大文件, 让我们对这个文件进行一系列操作——找出现次数最多的数据、求交集、是否重复出现等等。 因为文件的内容太多, 我们的内存通常是放不…...
![](https://www.ngui.cc/images/no-images.jpg)
TrainingArguments、ModelArguments、DataArguments参数使用(@dataclass)
文章目录 前言一、@dataclass装饰器说明二、transformers.HfArgumentParser参数使用Demo三、field函数四、llava模型参数1、模型参数设置2、数据参数设置3、训练参数设置4、参数解析5、参数传递6、参数添加前言 理解llava相关参数传递方法,有利于我们对模型修改模块使用参数来…...
![](https://img-blog.csdnimg.cn/direct/f84bb5cc43474e79b139a0acd9bb747b.png)
基于jeecgboot-vue3的Flowable流程-自定义业务表单处理(一)支持同一个业务多个关联流程的选择支持
因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 这部分先讲讲支持自定义业务表单一个业务服务表单多个流程的支持处理 1、后端mapper部分 如下,修改selectSysCustomFormByServiceName为list对象,以便支持多个 &…...
![](https://img-blog.csdnimg.cn/direct/b77fd87e042a4016acbd4ca4a7980ecc.png)
解决数据丢失问题的MacOS 数据恢复方法
每个人都经历过 Mac 硬盘或 USB 驱动器、数码相机、SD/存储卡等数据丢失的情况。我们中的一些人可能认为已删除或格式化的数据将永远丢失,因此就此作罢。对于 macOS 用户来说,当文件被删除时,垃圾箱已被清空,他们可能不知道如何恢…...
![](https://img-blog.csdnimg.cn/direct/20834e02c7a042aa9e5735c0e37deb9f.png#pic_center)
[ARM-2D 专题]3. ##运算符
C语言的宏系统相当强大,它允许使用##符号来处理预处理期的文本替换。这种用法被称为标记连接(token pasting)操作,其结果是将两个标记紧紧地连接在一起,而省略掉它们之间的所有空格。在复杂的宏定义中,运用…...
![](https://img-blog.csdnimg.cn/direct/a4654b0428264e49bd758c4e134ac1c1.png)
基于语音识别的智能电子病历(五)电子病历编辑器
前言 首先我们要明确一个概念:很多电子病历的编辑器,在输入文字的地方,有个麦克风按钮,点击一下,可以进行录音,然后识别的文字会自动输入到电子病历中,这种方式其实不能称为“基于语音识别的智…...
![](https://img-blog.csdnimg.cn/direct/72c8d6b2c725494c890c07de0bd92f0a.png)
云计算技术高速发展,优势凸显
云计算是一种分布式计算技术,其特点是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,并通过多部服务器组成的系统进行处理和分析这些小程序,最后将结果返回给用户。它融合了分布式计算、效用计算、负载均衡、并行计算、网络存储…...
![](https://img-blog.csdnimg.cn/direct/91aa1a2d1d4544fea0b38afe6bb25820.png)
文本三剑客其二
文本三剑客其二 sed和awk grep就是查找文本当中的内容,扩展正则表达式。 sed 对文本内容进行增删改查 sed是一种流编辑器,一次处理一行内容。 如果只是展示,会放在缓冲区(模式空间),展示结束之后&…...
![](https://img-blog.csdnimg.cn/direct/3d5f949b8cf24b5d86b92a705ff91828.png)
【达梦数据库】typeorm+node.js+达梦数据库返回自增列值
1.配置环境,下载依赖包 typeorm init --name test22 --database mysql typeorm-dm,uuid,typeorm2,修改连接信息 修改src/ data-source.ts 文件 连接dm,可参考刚刚安装typeorm-dm 模块中的 README.md 3.修改自增信息 /* 修改前*/PrimaryGen…...
![](https://www.ngui.cc/images/no-images.jpg)
【ARMv8/ARMv9 硬件加速系列 2.1 -- ARM NEON 向量寄存器单个元素赋值】
文章目录 NEON 向量寄存器单个元素赋值对 v0.4s中的一个元素赋值对 v1.16b 中的一个元素赋值MOVI (Move Immediate)NEON 向量寄存器单个元素赋值 在ARMv8架构中,你可以使用特定的指令来对v0.4s和v1.16b中的单个元素赋值。这通常通过使用MOV(Move)指令的变种实现,具体取决于…...
![](https://img-blog.csdnimg.cn/direct/54000e3b2e6249028820770f10cda260.png)
GD32学习
参考视频13.立创开发板GD32教程:串口配置_哔哩哔哩_bilibili 固件库跟用户手册基本上差不多,只不过用用户手册编写程序的话会更加的底层,固件库的话就是把一些函数封装起来,用的时候拿过来即可,目前我还没有找到固件库…...
![](https://img-blog.csdnimg.cn/img_convert/a0e21660e36969911a0178ee4ca84065.png)
LangChain:如何高效管理 LLM 聊天历史记录?
LangChain 团队发布了一篇关于使用 Dragonfly DB 来有效管理 LangChain 应用程序聊天历史记录的教程。 该教程旨在解决用户在使用 LangChain 应用程序时普遍遇到的一个问题:如何高效地管理聊天历史记录。 LangChain 团队在推文中强调了 Dragonfly DB 在管理聊天历…...
![](https://www.ngui.cc/images/no-images.jpg)
【React】useState 更新延迟的原因是什么,怎么解决?
useState 更新延迟的原因 异步更新:React 中的 useState 更新是异步的,这意味着当你调用更新函数(如 setData)时,React 并不立即同步更新状态,而是将其放入一个待处理的队列中,稍后在适当的时候(如在下一次渲染之前)进行处理。因此,如果你尝试在调用更新函数后立即读…...
![](https://img-blog.csdnimg.cn/direct/1a76927dd5634491a02c49223c0c4032.png)
非关系型数据库NoSQL数据层解决方案 之 redis springboot整合与读写操作 2024详解以及window版redis5.0.14下载百度网盘
redis下载安装以及基本使用 下载地址 链接:百度网盘 请输入提取码 提取码:0410 一个名对应一个数值 内存级 在内存里进行操作 准备启动 我们现在就有一个redis客户端的服务器了 我们再启动一个cmd 操作redis数据库 redis里面的基本数据类型有五种 …...
![](https://www.ngui.cc/images/no-images.jpg)
jigdo无法下载的文件
问题描述 用jigdo下载Debian的iso镜像,剩下最后一个文件下载不了,提示信息: Found 0 of the 1 files required by the template Copied input files to temporary file debian-12.5.0-amd64-DLBD-2.iso.tmp - repeat command and supply mo…...
![](https://www.ngui.cc/images/no-images.jpg)
C#面:C# 类的执行顺序?
C# 类的执行顺序可以分为以下几个步骤: 静态字段初始化:在类的第一次使用之前,静态字段会被初始化。静态字段的初始化顺序是按照它们在代码中的声明顺序进行的。静态构造函数:如果类中定义了静态构造函数,它会在类的第…...
![](https://img-blog.csdnimg.cn/direct/2be530e62a4b45919830e9a0676dc7b1.png)
昇思25天学习打卡营第3天|数据集Dataset
一、简介: 数据是深度学习的基础,高质量的数据输入将在整个深度神经网络中起到积极作用。有一种说法是模型最终训练的结果,10%受到算法影响,剩下的90%都是由训练的数据质量决定。(doge) MindSpore提供基于…...
![](https://www.ngui.cc/images/no-images.jpg)
SpringCloud 服务调用 spring-cloud-starter-openfeign
在Spring Cloud中,spring-cloud-starter-openfeign 是一个用于声明式Web服务客户端(例如REST客户端)的启动器。它使得在Spring Cloud应用中调用其他HTTP服务变得非常简单,只需创建一个接口并使用注解来定义服务调用的细节。 以下…...
![](https://img-blog.csdnimg.cn/direct/7a53263962a2409d9416372dd2519b59.png)
基于Elementui组件,在vue中实现多种省市区前端静态JSON数据展示并支持与后端交互功能,提供后端名称label和id
基于Elementui组件,在vue中实现多种省市区前端静态数据(本地JSON数据)展示并支持与后端交互功能,提供后端名称label和id 话不多说,先上图 1.支持传递给后端选中省市区的id和名称,示例非常完整,…...
![](https://img-blog.csdnimg.cn/img_convert/17e65d3f2e97c078c0a874e9eac2c648.png)
基于DPU的云原生裸金属网络解决方案
1. 方案背景和挑战 裸金属服务器是云上资源的重要部分,其网络需要与云上的虚拟机和容器互在同一个VPC下,并且能够像容器和虚拟机一样使用云的网络功能和能力。 传统的裸金属服务器使用开源的 OpenStack Ironic 组件,配合 OpenStack Neutron…...
![](https://www.ngui.cc/images/no-images.jpg)
pip install镜像源(更新和换源)
pip install镜像源(更新和换源) 1.pip安装依赖包默认访问的源: 因为服务器架设在国外的缘故,很多时候不好用网速不行,这时候就需要选择国内的一些安装源安装相应的包 https://pypi.Python.org/simple/2.设置默认源 …...
![](https://www.ngui.cc/images/no-images.jpg)
基础语法——组合与继承
继承 定义派生类,即继承的一般语法结构如下 class 派生类名 : [继承方式] 基类名 { }; 例如 class Point{int x, y; public:Point(int a0, int b0): x(a), y(b){}virtual double area() {return 0.0; };virtual double volume() { return 0.0; } }; class Circl…...
![](/images/no-images.jpg)
建设工程资料网站/网站seo优化免费
可参考: https://www.zhihu.com/question/28592239 杨立华老师是本科期间最喜欢也是最敬佩的老师之一了。除了楼上说的长得帅、讲课好之外,最喜欢的就是杨立华老师的气质了。 杨立华老师身上有一种气质,有一种看透本质的目光和洞见…...
WordPress用AFC制作主题/广州网站优化价格
WindowBuilder是可视化Java GUI编程的eclipse插件。有了它的帮助,我们可以通过拖拽来编辑Java程序界面。在最新版的Eclipse中安装最新版插件WindowBuilder,可以有两种方式: 一、直接安装方式: 1.启动Eclipse4.21。选择“帮助”-…...
![](https://s1.51cto.com/images/20171216/1513432225735428.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
自己做的网站发布详细步骤/南昌seo搜索排名
目前,Python有两个主要版本: 2.7、3.6,两个版本不兼容。2.7是工业版本,目前大量的生产环境都是这个版本,因为已经在线上运行,很多都没法再改。新的创业公司,一般都会有3.0。据Python官方宣布,20…...
![](https://img-blog.csdnimg.cn/img_convert/57e7726ccc88ab1cf3c2c85b84aa82cb.png)
温室大棚建设 网站及排名转卖/做网站用什么软件
文章目录1. 项目结构2. 页面组成3. json配置文件4. 认识页面5. WXML6. WXSS7. js文件8. 宿主环境9. 组件10. API11. 协同工作与发布跟公众号平台不共用一个账号,需要用其它邮箱另行注册,填写身份证信息(姓名、身份证号码)…...
![](/images/no-images.jpg)
做a短视频网站/淄博网站优化
//这么写才能被正确渲染 <textarea></textarea> //这样就会有空格 <textarea> </textarea> 不能换行,涨姿势转载于:https://www.cnblogs.com/liyinSakura/p/5755560.html...
![](http://imgs.ebrun.com/resources/ebonno/storage/photos/201905/18/1558150920817409.png)
如何用vs的c 做网站/google浏览器官网
文 | 魏启扬 来源 | 智能相对论(ID:aixdlun) 在自动驾驶赛道中,虽然每个玩家的发展策略都有所求,专长方向也各有不同,但随着越来越多自动驾驶商业落地的消息传出,其中的头部玩家们似乎已经逐渐…...