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.rhkb.cn/news/464390.html

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

相关文章

CAN总线学习笔记(1、CAN总线定义)

CAN总线学习笔记(1、CAN总线定义) 江协科技CAN总线入门教程视频学习笔记 CAN特性 两根通信线(CAN_H\CAN_L),两根线,无需工地 差分信号,抗干扰能力强 高速CAN(ISO11898)&#xff…

【算法】【优选算法】双指针(下)

目录 一、611.有效三⻆形的个数1.1 左右指针解法1.2 暴力解法 二、LCR 179.查找总价格为目标值的两个商品2.1 左右指针解法2.2 暴力解法 三、15.三数之和3.1 左右指针解法3.2 暴力解法 四、18.四数之和4.1 左右指针解法4.2 暴力解法 一、611.有效三⻆形的个数 题目链接&#x…

Docker 镜像体积优化实践:从基础镜像重建到层压缩的全流程指南

​ 由于最近在发布的时候发现docker镜像体积变得越来越大,导致整个打包发布流程变得非常耗时了。所以又接到一个差事,优化最终镜像体积。顺便也记录一下docker镜像体积优化的一些步骤。 大概步骤可以分为以下几个步骤: 重做基础镜像&#x…

路径规划 | ROS中多个路径规划算法可视化与性能对比分析

目录 0 专栏介绍1 引言2 禁用局部规划器3 路径规划定性对比实验3.1 加载路径规划器和可视化插件3.2 设置起点和终点3.3 选择规划器规划3.4 不同规划器对比3.5 路径保存和加载 4 路径规划定量对比实验4.1 计算规划耗时4.2 计算规划长度4.3 计算拓展节点数4.4 计算路径曲率4.5 计…

十四届蓝桥杯STEMA考试Python真题试卷第二套第五题

来源:十四届蓝桥杯STEMA考试Python真题试卷第二套编程第五题 本题属于迷宫类问题,适合用DFS算法解决,解析中给出了Python中 map() 和列表推导式的应用技巧。最后介绍了DFS算法的两种常见实现方式——递归实现、栈实现,应用场景——迷宫类问题、图的连通性、树的遍历、拓朴排…

【CSS】——基础入门常见操作

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:CSS引入 二:CSS对元素进行美化 1:style修饰 2:选…

RV1126-SDK学习之OSD实现原理

RV1126-SDK学习之OSD实现原理 前言 本文简单记录一下我在学习RV1126的SDK当中OSD绘制的原理的过程。 在学习OSD的过程当中,可能需要补充的基础知识: OSD是什么? BMP图像文件格式大致组成? 图像调色(Palette&#…

Vehicle OS软件平台解决方案

在智能汽车快速迭代的趋势之下,广义操作系统Vehicle OS应运而生,针对应用软件开发周期缩短和底层硬件迭代速度加快的背景,Vehicle OS将应用软件开发和底层硬件迭代解耦。它降低了迭代工作量并节约成本,用标准化的接口来助力软件定…

Chromium Mojo(IPC)进程通信演示 c++(1)

网上搜索关于mojo教程 多数都是理论 加上翻译谷歌mojo文档的,但是如何自定义两个进程使用mojo通信呢?看下面的完整例子介绍:(本人也是参考谷歌代码例子改编而成) 本文演示了client.exe和service.exe 通过mojo::Incomin…

sparkSQL面试题

一、查询所有数学课程成绩大于语文课程成绩的学生学号 数据 1,yuwen,43 1,shuxue,55 2,yuwen,77 2,shuxue,88 3,yuwen,98 3,shuxue,65 3,yingyu,88 基本步骤: 进行行转列比较语文与数学的成绩 SQL代码: with t1 as(SELECT id,sum(if(name yuwen,sc…

算法|牛客网华为机试21-30C++

牛客网华为机试 上篇:算法|牛客网华为机试10-20C 文章目录 HJ21 简单密码HJ22 汽水瓶HJ23 删除字符串中出现次数最少的字符HJ24 合唱队HJ25 数据分类处理HJ26 字符串排序HJ27 查找兄弟单词HJ28 素数伴侣HJ29 字符串加解密HJ30 字符串合并处理 HJ21 简单密码 题目描…

浅谈QT中Tab键的切换逻辑

浅谈QT中Tab键的切换逻辑 无意中发现在输入界面中按下Tab键时,没有按照预想的顺序切换焦点事件,如下图所示 这个现象还是很有趣,仔细观察了下,默认的切换顺序是按照控件拖入顺序,那么知道了这个问题想要解决起来就很简…

科研绘图系列:R语言组合连线图和箱线图(linechart+boxplot)

文章目录 介绍加载R包数据数据预处理画图1画图2系统信息介绍 连线图(Line Chart)是一种常用的数据可视化图表,它通过将一系列数据点用直线段连接起来来展示数据随时间或有序类别变化的趋势。以下是连线图可以表示的一些内容: 时间序列数据:展示数据随时间变化的趋势,例如…

PKG_CHECK_MODULES(FUSE,fuse)

运行 ./configure 命令报错如下: ./configure: line 13934: syntax error near unexpected token FUSE,fuse ./configure: line 13934: PKG_CHECK_MODULES(FUSE,fuse)解决方案: 命令窗口运行如下命令,安装 pkg-config: sudo …

react18中redux-promise搭配redux-thunk完美简化异步数据操作

用过redux-thunk的应该知道,操作相对繁琐一点,dispatch本只可以出发plain object。redux-thunk让dispatch可以返回一个函数。而redux-promise在此基础上大大简化了操作。 实现效果 关键逻辑代码 store/index.js import { createStore, applyMiddlewar…

Lucene分析器的详细使用(5)

文章目录 第5章 分析器5.1 分析器的组成5.1.1 字符过滤器1)HTMLStripCharFilter2)PatternReplaceCharFilter3)MappingCharFilter4)Luke使用字符过滤器 5.1.2 分词器1)StandardTokenzier2)keywordTokenizer3…

selinux和防火墙

SElinux 1、selinux代表的什么? SELinux是Security-Enhanced Linux的缩写,意思是安全强化的linux。 SELinux 主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用。 SELinux是对程序、文件等权限设置依…

CentOS 7 安装 ntp,自动校准系统时间

1、安装 ntp yum install ntp 安装好后,ntp 会自动注册成为服务,服务名称为 ntpd 2、查看当前 ntpd 服务的状态 systemctl status ntpd 3、启动 ntpd 服务、查看 ntpd 服务的状态 systemctl start ntpdsystemctl status ntpd 4、设置 ntpd 服务开机启…

Oracle OCP认证考试考点详解082系列11

题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 51. 第51题: 题目 51.View the Exhibit and examine the description of the tables You execute this SQL statement Whi…

C#属性 Property

属性Property不是变量。 它们是由名为访问器方法来实现的一种方法。 实例属性表示的是实例的某个数据,通过这个数据反映实例当前的状态 静态属性表示的是类型的某个数据,通过这个数据反映类型当前的状态 意义: 防止恶意赋值(通过属性间接访问…