可信启动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

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

安全有理

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EtherCAT扫盲,都是知识点

1. 什么是EtherCAT EtherCAT,全称Ethernet for Control Automation Technology,字面意思就是用于控制自动化技术的以太网。它是一种基于以太网的实时工业通信协议,简单说,就是让机器们通过网线互相聊天的高级方式。 EtherCAT 是最…

项目训练营第三天

项目训练营第三天 注册登录测试 前面我们编写了用户注册、登录的逻辑代码,每编写完一个功能模块之后,我们都要对该模块进行单元测试,来确保该功能模块的正确性。一般情况下使用快捷键Ctrl Shift Insert,鼠标左击类名可以自动生…

全新的会声会影2024最新官方免费永久破解版本下载

大家好!🌟 今天要跟大家分享一个超级棒的视频编辑软件,它就是全新的会声会影2024最新永久破解版本。作为视频创作爱好者的我,真的被这款软件的强大功能和便利性彻底征服了!🎉🎉🎬 【…

Aidlux 1.4 部署Nextcloud 2024.6实录 没成功

Aidux阉割版Debain10,坑很多,比如找不到实际的系统日志,有知道的大神吗? 1 Apache2安装 # 测试Apache2 sudo apt update && sudo apt upgrade sudo apt install apache2 -y80端口疑似被禁止只能换端口 rootlocalhost:/…

RK3568技术笔记十六 QT5开发

背景知识 在阅读本章前,如果对下面所列举的知识点有一定的了解,将有助于更好的理解本章内容。 C基础知识,了解简单的类,继承,重载等面向对象概念;Linux基础知识,了解基本的Shell命令&#xff…

普通变频器位置闭环控制(S7-1200PLC工艺对象模拟量轴)

1、S7-1200PLC控制V90总线伺服通过工艺对象实现定位控制 S7-1200PLC和V90总线伺服通过工艺对象实现定位控制(标准报文3应用)_1200报文3控制v90-CSDN博客文章浏览阅读182次。V90伺服驱动器调试软件SINAMICS V-ASSISTANT Commissioning tool下载地址如下:西门子官网选型|资料CS…

开启文物保护新篇章——智能RFID文物藏品库房管理系统

在历史的长河中,文物不仅是见证文明的瑰宝,更是文化传承的重要载体。这些承载着丰富历史和文化价值的珍贵文物,需要得到科学、精细的保护和管理。为了更好地守护和传承我们的文化遗产,我们荣幸地推出智能RFID文物藏品库房管理系统…

【自动驾驶】运动底盘状态数据:里程计、IMU、运动学分析、串口通信协议

文章目录 控制器与运动底盘状态数据:里程计、IMU运动学分析与轮子运动学分析公式串口通信控制与反馈通讯协议串口通信反馈上行数据帧解析串口通信控制下行数据帧解析代码实现IMU、里程计数据的获取、解析、计算控制器与运动底盘状态数据:里程计、IMU 控制器需要负责外发底盘…

Matplotlib绘制一个X轴2个Y轴的图表

import matplotlib matplotlib.use(Agg) # 使用Agg后端,这个后端适用于生成图像文件但不显示它们 import matplotlib.pyplot as plt fig plt.figure(figsize(15, 8))# 字体使用楷体 matplotlib.rc("font", family"Microsoft YaHei") ax1 fig…

整合第三方技术-整合JUnit

黑马程序员Spring Boot2 文章目录 名称:SpringBootTest类型:测试类注解位置:测试类定义上方作用:设置JUnit加载的SpringBoot启动类范例:

短视频外卖服务商怎么做?快速通道及申请条件解析

近日,某音官方于某音电商学习中心发布了关于新增《【到家外卖】内容服务商开放准入公告》的意见征集通知(以下简称“通知”),宣布了某音外卖即将正式开放的消息。随后,以某音外卖服务商怎么做为代表的相关问题也在多个…

定义和反射Annotation类(注解)

文章目录 前言一、定义Annotation类二、反射Anootation类 1.元注解2.反射注解总结 前言 在写代码的过程中,我们经常会写到注释,以此来提醒代码中的点。但是,这些注释不会被查看,也不在整个代码之中,只能在源代码中进行…

Mistral AI最新力作——Mistral Large媲美GPT-4

Mistral AI自豪地宣布,他们的最新力作——Mistral Large,已经正式面世。这款尖端的文本生成模型不仅在多语言理解上表现出色,更在推理能力上达到了顶级水平。Mistral Large能够处理包括文本理解、转换和代码生成在内的复杂多语言推理任务。 M…

36 - shell之sed

sed grep就是查找文本当中的内容,扩展正则表达式。 一、sed 1.1、sed的定义 sed是一种流编辑器,一次处理一行内容。 如果只是展示,会放在缓冲区(模式空间),展示结束,会从模式空间把结果删除…

【LeetCode刷题】6. Z 字形变换

1. 题目链接2. 题目描述3. 解题方法4. 代码 1. 题目链接 6. Z 字形变换 2. 题目描述 3. 解题方法 假设一串字符串"abcdefghijklmnopqrstuvwx", 会有如下排列: 我们再以下标来看看排列 从下标来看,每个下标是有规律的 每一行的下标之间的差…

Java基础 - 练习(五)根据今天日期获取一周内的日期(基姆拉尔森公式)

基姆拉尔森计算公式用于计算一周内的日期。比如给你年月日&#xff0c;从而计算今天是星期几。 基姆拉尔森公式 Week (d2*m3*(m1)/5yy/4-y/100y/4001) mod 7&#xff0c; 3<m<14Week的取值范围是0 ~ 6&#xff0c;其中0代表星期日&#xff0c;1 ~ 6分别代表星期一到星期…

【ai】tx2-nx 开通samba

ubutn服务器加入了samba给jetson也加入一个samba 添加root用户 密码与nvidia一样 添加nvidia 到suoders中并添加samba账号 nvidia@tx2-nx:~$ nvidia@tx2-nx:~$ nvidia@tx2-nx:~$ nvidia@tx2-nx:~$ sudo vi /etc/sudoers nvidia@tx2-nx:~$ sudo chm

【第24章】Vue实战篇之用户信息展示

文章目录 前言一、准备1. 获取用户信息2. 存储用户信息3. 加载用户信息 二、用户信息1.昵称2.头像 三、展示总结 前言 这里我们来展示用户昵称和头像。 一、准备 1. 获取用户信息 export const userInfoService ()>{return request.get(/user/info) }2. 存储用户信息 i…

使用Python selenium爬虫领英数据,并进行AI岗位数据挖掘

随着OpenAI大火&#xff0c;从事AI开发的人趋之若鹜&#xff0c;这次使用Python selenium抓取了领英上几万条岗位薪资数据&#xff0c;并使用Pandas、matplotlib、seaborn等库进行可视化探索分析。 但领英设置了一些反爬措施&#xff0c;对IP进行限制封禁&#xff0c;因此会用到…

每月 GitHub 探索|10 款引领科技趋势的开源项目

1.IT-Tools 仓库名称&#xff1a; CorentinTh/it-tools 截止发稿星数: 16842 (近一个月新增:5744) 仓库语言: Vue 仓库开源协议&#xff1a; GNU General Public License v3.0 引言 CorentinTh/it-tools 是一个开源项目&#xff0c;提供各种对开发者友好的在线工具&#xff0…