Armv8的安全启动

目录

1. Trust Firmware

2. TF-A启动流程

3. TF-M启动流程

3.1 BL1

3.2 BL2

4.小结


在之前汽车信息安全 -- 再谈车规MCU的安全启动文章里,我们详细描述了TC3xx 、RH850、NXPS32K3的安全启动流程,而在车控类ECU中,我们也基本按照这个流程去设计代码,同时兼顾主机厂对启动时间和安全性的要求,

但是最近在移植某国产HSM IP的固件代码时,被其安全启动流程一些概念搞得云里雾里,例如OPTEE、TF-A、RMM,SPE等等;

在Cortex-R52逐渐在区域控制器大放异彩的今天,梳理下基于Armv8的安全启动,理清这些概念,是对自己的视野拓展。

1. Trust Firmware

在Armv8架构里,ARM为安全引入了Trust Firmware作为整体解决方案,开源库地址:Trusted Firmware - Open Source Secure Software

根据官网介绍,TF为Armv8-A和Armv8-M提供了安全软件的参考实现,为SoC开发人员和oem提供了符合相关Arm规范的参考可信代码库。

其中,

  • TF-A (Trusted Firmware-A,也叫ATF)是专门为Armv7\v8-A架构内核设计的参考安全固件;
  • TF-M则是为Armv8-M、Armv8.1-M架构(如Cortex-M33、M55等)提供了安全处理环境(SPE,Secure Processing Environment)的参考实现。

那么今天就从TF-A开始,先把最抽象的啃点,再看TF-M就容易理解很多。

2. TF-A启动流程

 TF-A(AArch64)的启动引导过程一共分为5个单独启动阶段,每个阶段运行在不同的内核异常等级,流程如下:

 每个阶段功能定义如下:

  • BL1(Boot Loader stage 1):BL1一般指运行存放在芯片内部BootROM的代码,这部分代码由SoC厂商在芯片流程时固化进去,不能再做修改;该阶段运行在Armv8的EL3等级,如果支持安全启动,BootROM在构建信任链的时候就显得尤为关键,主要用于校验BL2 Boot Firmware并完成加载和跳转,这也是和目前接触过的车规MCU安全启动流程最明显的区别;
  • BL2(Boot Loader stage 2:):Boot Firmware由BL1从引导介质中(例如NOR Flash、SD/eMMC)加载运行(例如DDR),它的主要作用是初始化平台所需要存储介质、配置MMU、校验BL31\32\33并完成加载等,值得注意,BL2依旧运行在EL3等级。
  • BL31(Boot Loader Stage 3-1):BL2加载BL31后,并把控制权交由BL31(此时仍旧运行在EL3等级),从上图可以看到BL31仍旧需要运行在可信RAM中,它主要为引导加载程序和操作系统提供初始化服务,例如GIC初始化、电源控制设备初始化、MMU使能和重定向等等;完成上述初始化后,如有BL32 trusted OS镜像,BL31加载BL32并跳转运行;
  • BL32:可信的操作系统,例如OP-TEE(Open source Project Trusted Execution Environment )、安卓Trusty TEE
  • BL33:常见的Bootloader(U-Boot/UEFI),运行在Armv8 EL2等级,完成启动后运行Kernel

在开源库中每个阶段都可以单独进行编译,因此很明显启动流程可以根据需求进行裁剪,

但值得一提的是,上述启动流程有个前提假设:那就是这些镜像文件存储的物理介质一般都不支持xip,所以需要在启动时将上述镜像加载到SRAM或者DDR上运行;这是与带有eFlash的MCU的安全启动流程的另一个明显区别。

既如此,我们就来看看TF-M的流程。

3. TF-M启动流程

 TF-M(Trusted Firmware-M)主要是为Armv8-M架构的内核提供了一个安全运行处理环境(SPE),如下图所示:

如上图所示,TF-M包含了上图深蓝色框的所有功能,其中蓝底背景的叫做PSA-RoT(Platform Security Architecture Root of Trust),主要功能模块包括:

  • Secure Boot:用于验证SPE和NSPE的镜像是否可信;
  •  TF-M Core:用于SPE和NSPE的安全通信(IPC)、中断处理、隔离等等;
  • 加解密服务、安全存储、受保护存储、安全升级等等

今天主要看看Secure Boot。

与TF-A,TF-M的安全启动只分为了BL1和BL2。

3.1 BL1

BL1 Immutable bootloader:翻译过来就是不可变的引导程序,它在安全启动时和公钥(ROTPK)共同构成信任根,因此这段bootloader代码必须存储在ROM或者支持写保护的Flash,ROTPK可以存放在OTP。

如果一些芯片本身ROM就有启动代码且没有安全Flash存储TF-M,那么TF-M的BL1就必须进行验证,以保证信任链的构建。

从这里突然就反应过来,之前英飞凌TC3xx提出的安全启动方案要求HSM BL存放在OTP中,很大部分原因就是HSM的BootROM并没有提供任何验证HSM BL的机制。

 3.2 BL2

在TF-M中,BL2默认使用MCUboot开源代码,链接https://github.com/mcu-tools/mcuboot。它是整个安全启动的核心所在,主要用于验证其他固件的身份和完整性,但由于这部分又是开源的,因此每家芯片厂在实现时又会有所差别。

以STM32U5为例,基于MCUboot框架设计了SBSFU(Secure Boot and Secure Firmware Update),主要用于安全启动和安全升级。它将这部分代码固定在Flash存储器某个位置,这时候从PSA架构和TFM secure boot程序映射可以满足要求,如下:

一旦从TFM_SBSFU_Boot (Secure Boot and Secure Firmware Update software)应用程序跳转到安全应用程序时,所有专用于执行TFM_SBSFU_Boot 的 Flash 存储器区域均被隐藏,安全和非安全主插槽区域允许执行。

 PS:HDP(secure hide-protection area)

SBSFU提供了多种验签和加密机制,如下:

同时也给出了安全启动的时间评估参数:

 

4.小结

随着ARM内核的MCU逐渐进入到汽车市场,必须要掌握TF-A\M的一些概念;同时我也很好奇,像Steller这种R52内核的芯片是如何设计其安全启动流程。毕竟在HSM普及的今天,信任根的变化会影响一个系统的架构设计,

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

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

相关文章

vue+django+neo4j航班智能问答知识图谱可视化系统

🔞 友友们,有需要找我,懂的都懂 🩵 基于NLP技术知识图谱的航班知识智能问答 🩵 技术架构:vue django mysql neo4j 🩵 数据:航班数据7万多条 🩵 vue知识图谱的模糊查询…

DICOM标准:核医学图像模块属性——核医学(Nuclear Medicine, NM)DICOM标准详解

目录 引言 1. NM 序列模块(NM Sequence Module) 1.1 NM序列模块属性 2. NM 设备模块(NM Equipment Module) 2.1 NM设备模块属性 3. NM 图像模块(NM Image Module) 3.1 NM图像模块属性 3.2 帧增量指针…

ViT面试知识点

文章目录 VITCLIPBlipSAMFast TransformerYOLO系列问题 BatchNorm是对一个batch-size样本内的每个特征做归一化,LayerNorm是对每个样本的所有特征做归一化。 Layer Normalization(层归一化,简称LayerNorm)是一种在深度学习中常用…

Linux云计算个人学习总结(一)

windows计算机基础 一、概述 1.计算机基本原则:计算机是执行输入、运算、输出的原则。软件是指命令和数据的结合,计算机中所有的内容皆为数字。 2.计算机的类型 计算器 手机 cps等都属于计算机。 3.计算机的发展 第一代计算机电子管时代&…

Linux中的apt update和apt upgrade区别

在Linux操作系统中,包管理是维护系统和软件更新的关键任务。apt(高级包装工具)是Debian及其衍生系统(如Ubuntu)中广泛使用的包管理器。本文将详细解释apt update和apt upgrade这两个常用命令的区别以及它们的实战案例。…

WPF使用Prism框架首页界面

1. 首先确保已经下载了NuGet包MaterialDesignThemes 2.我们通过包的项目URL可以跳转到Github上查看源码 3.找到首页所在的代码位置 4.将代码复制下来&#xff0c;删除掉自己不需要的东西&#xff0c;最终如下 <materialDesign:DialogHostDialogTheme"Inherit"Ide…

CTFshow之信息收集第1关到10关。详细讲解

得而不惜就该死&#xff01; --章总 开始新的篇章&#xff01; 零、目录 一、实验准备 1、ctf网站&#xff1a;ctf.show 2、工具&#xff1a;chrome浏览器、hackbar插件 3、burpsuite抓包工具 二、实验技巧 &#xff08;一&#xff09;F12摸奖 源码泄露 &#xff08;二…

C 语言标准库 - <assert.h>

C语言assert()函数: 断言一个表达式是否正确 函数名: assert 头文件&#xff1a;<assert.h> 函数原型: void assert( int expression ); 功能&#xff1a; 断言一个表达式是否正确 参数&#xff1a;expression如果其值为假&#xff08;即为0&#xff09;&#xff0…

Navicat 17 功能简介 | 转储SQL文件

Navicat 17 功能简介 | 转储SQL文件 随着 17 版本的发布&#xff0c;Navicat 也带来了众多的新特性&#xff0c;包括兼容更多数据库、全新的模型设计、可视化智能 BI、智能数据分析、可视化查询解释、高质量数据字典、增强用户体验、扩展MongoDB 功能、轻松固定查询结果、便捷U…

pdf文件预览和导出

抢先观看&#xff1a; window.URL.createObjectURL()&#xff1a; 用于根据传入的 Blob 对象或 File 对象生成一个临时的、可访问的 URL,仅在浏览器会话中有效&#xff0c;并且不会上传到服务器。 const url window.URL.createObjectURL(blob);Blob 对象&#xff1a; 是 …

欠定方程有多个真正解,超定方程可能无解所以有最小二乘解

Ax b x A\b ,但不是b/A,会报错矩阵维度不对应两个未知数&#xff0c;三个方程也可以是最小二乘解&#xff0c;因为无解满足三个方程&#xff0c;比如下面 A [0, 1; 1, 1;3,6]; % 一个接近奇异的矩阵 b [1; 2;3]; x A\b; % 求解线性方程组 % warning(off, MATLAB:…

大数据MapReduce最全面试题及参考答案

什么是 MapReduce?简述其核心概念和主要作用。 MapReduce 是一种用于大规模数据集处理的分布式计算模型和编程框架。它由 Google 提出,旨在能够在大量普通计算机组成的集群上对海量数据进行并行处理。 其核心概念主要包括以下几个方面:首先是数据划分,将大规模的数据集分割…

【折腾一上午】Java POI 导出 Excel 自适应列宽行高

主要方法&#xff1a; 调用 sheet.autoSizeColumn(f) // f是需要自适应的列的序号注&#xff1a; 1. 在设置自适应之前需要调用以下方法&#xff0c;否则会报跟踪列错误。 sheet.trackAllColumnsForAutoSizing() 2. 当你去调用上个方法的时候发现&#xff0c;sheet并没有…

企业CRM管理系统PHP源码/PHP客户关系CRM客户管理系统源码

系统功能实现 1、 公海管理:公海类型、客户公海。 2、 线索管理:我的线索、线索列表、线索状态、线索来源。 3、 客户管理:我的客户、客户列表、成交客户、行业类别、预查、地区列表、客户状态、客户级别。 4、 业绩订单:订单列表、我的订单。 5、 系统设置:系统设置…

40.第二阶段x86游戏实战2-初识lua

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

DAY17|二叉树Part03|LeetCode: 530.二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236.二叉树的最近公共祖先

目录 LeetCode: 530.二叉搜索树的最小绝对差 基本思路 有序数组法 C代码 双指针法 C代码 LeetCode: 501. 二叉搜索树中的众数 哈希法 C代码 双指针法 C代码 LeetCode: 236.二叉树的最近公共祖先 基本思路 C代码 LeetCode: 530.二叉搜索树的最小绝对差 力扣代码链…

「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用

本篇将带领你实现一个趣味十足的互动应用&#xff0c;用户点击按钮时猫会在一排灯之间移动&#xff0c;猫所在的位置灯会亮起&#xff08;on&#xff09;&#xff0c;其余灯会熄灭&#xff08;off&#xff09;。应用会根据用户的操作动态更新灯光状态和文本提示当前亮灯的位置&…

【网络】套接字编程——UDP通信

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;UDP网络服务器简单模拟实现。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1a;…

黑马官网2024最新前端就业课V8.5笔记---HTML篇

Html 定义 HTML 超文本标记语言——HyperText Markup Language。 标签语法 标签成对出现&#xff0c;中间包裹内容<>里面放英文字母&#xff08;标签名&#xff09;结束标签比开始标签多 /拓展 &#xff1a; 双标签&#xff1a;成对出现的标签 单标签&#xff1a;只有开…

openfoam中生成的3d案例提取得到slice后的2d案例

问题&#xff1a; 由于前期准备做3d的案例&#xff0c;并且模拟也比较费时间&#xff0c;现在生成了几十份3d的数据&#xff0c;但是现在只想要2d的数据来演示&#xff0c;该如何提取或者转换呢&#xff1f; 解决方法&#xff1a; 1.说明图片中的每个2d视图的points都是恒定不…