汽车信息安全--如何理解TrustZone(1)

news/2024/10/20 19:01:09/

目录

TrustZone-toc" style="margin-left:0px;">1.车规MCU少见TrustZone

TrustZone-toc" style="margin-left:0px;">2. 什么是TrustZone

TrustZone%E9%9A%94%E7%A6%BB%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F-toc" style="margin-left:40px;">2.1 TrustZone隔离了什么?

2.2 处理器寄存器和异常处理

3.小结


TrustZone">1.车规MCU少见TrustZone

在车规MCU里,谈到信息安全大家想到的大多可能都是御三家的HSM方案:英飞凌的HSM\SHE+、瑞萨的ICU、恩智浦的HSE/CSE,这些都被称为HTA(Hardware Trust Anchors)。

这三家的MCU架构里,Host和HSM分别有自己独立的CPU、密码算法硬件加速器、独占Flash等,如下图:

而当我Review Vector培训材料时,发现了以前经常听到但没有深入研究过的TrustZone也被当做了HTA:

 那么什么是TrustZone?它与HSM区别在哪里?今天就通过Cortex-M33来分析一下。

TrustZone">2. 什么是TrustZone

根据Arm官方介绍,TrustZone最先是Arm A核的一种安全架构的统称,它在SOC系统级别提供硬件隔离机制将系统分成了两个运行环境:TEE(Trusted Execution Environment)和REE( Rich Execution Environment):

在REE中,通常执行复杂且功能丰富的应用软件,意味着其攻击面广,更易遭受网络攻击;在TEE中通常为REE提供授信服务,例如加解密、密钥管理等等,这与HSM/SHE的理念比较相似。

后来随着IoT的发展,M核的处理器也提出了相应的信息安全需求,所以TrustZone在ARM V8-M中作为Security Extension被引入。

TrustZone%E9%9A%94%E7%A6%BB%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F">2.1 TrustZone隔离了什么?

在Armv8-M架构下引入安全扩展后,从CPU、到系统外设资源再到访问方式上都做了隔离和新的设计。

从内核角度来看,与安全扩展相关的组件包括Processor Core、SAU、SMPU和NSMPU、BusMatrix,总结如下图:

对于Processor Core的运行状态,引入了Non-Secure和Secure状态:

SAU用于定义和识别存储器地址的安全区域和非安全区域,在Secure和Non-Secure状态下分别有各自的MPU

通常情况下,CPU进行数据访问时,根据当前内核运行处于安全或非安全,从而索引到SMPU或者NSMPU的配置,如下图:

当CPU取指时,通过SAU中配置的目标地址安全属性,从而索引到SMPU或者NSMPU,如下:

既然内核、SAU和MPU有Secure和Non-Secure之分,那么在存储器、外设等属性上也应该有该分类。在M33里使用了AMBA5 AHB5,该总线携带安全、非安全访问标记,可实现安全和为安全的访问,因此,在芯片设计之初,从内核到芯片级别的完整硬件隔离机制可按如下示例实现:

2.2 处理器寄存器和异常处理

当安全扩展引入后,处理器分为了Secure和Non-Secure两种状态,因此对应状态的寄存器相应也有变化。如下图所示:

  • R0-R12:Secure和Non-Secure状态共用一套;
  • SP:包含MSP(Main)和PSP(Process)(针对Handler和Thread Mode),在不同状态下有两组Banked寄存器,后缀为S、NS;
  • PSPLIM、MSPLIM:新增寄存器,用于限制MSP和PSP堆栈,在不同状态各有一套;

同样的,在异常也可以被指定为Secure和Non-Secure。那么从软件角度来看,中断向量表也需要分为安全和非安全两个,如下图:

可以看到,Secure和Non-Secure都有各自的Handler,有些中断是Banked,但也有些异常是只有Secure才有,如SecureFault。

需要注意的是,所有外设中断上电默认都指向Secure 向量表,但是我们可以在Secure状态运行的代码里修改权限,将外设指向Non-Secure向量表。

3.小结

本文讲解了什么是Trustzone,下文我们继续讲解与HSM的区别、


http://www.ppmy.cn/news/1442656.html

相关文章

Babylon.js 读取GLB模型元数据

如果你熟悉将 3D 资源导出到游戏引擎的过程,那么无疑也会熟悉 3D 资源的 PBR 和 GLB 导出过程。 这是我们之前概述的内容,也是我们交互式工作的所有资产准备的基石。 然而,从传统的管道意义上来说,能够用元数据标记网格有很多逻辑…

硬件解码后显存数据直接推理

网络摄像头为何可能比mipi速度快 网络摄像头解码的时候传输到内存中后数据比原始的rgb 图像要小很多,这时候直接传输到显卡以后解码,速度很快,而mipi摄像头如果不使用dma技术,结果会直接用rgb传输到显存中,可想而知&a…

本地wsl的Ubuntu安装docker,不使用docker桌面版

第一步:安装docker引擎 建议大家去docker官网那边看 Install Docker Engine on Ubuntu | Docker Docs 第二步:使用以下命令 sudo update-alternatives --config iptables 选1就对了 第三步:启动docker service docker start

嵌入式全栈开发学习笔记---Linux基本命令4

目录 压缩和解压缩 tar -zcf 压缩包的名字 需要压缩的文件 tar -xzf 压缩包的名字 查找命令 Find 路径 -name “文件名” grep “搜索的关键字” 路径 -R 我们最后学习几个命令: 我们有的时候下载一些文件、软件、库,它会以压缩包的形式出现&am…

Qt 把.exe打包成安装文件形式

目录 1.下载工具 Qt Installer Framework2.将bin文件添加到环境变量3.拷贝startmenu示例-备用4.准备Qt Release打包好的程序5.把Release打包好的程序放到packages\org.qtproject.ifw.example\data文件夹下6.生成安装包7.修改安装包图标8.修改主程序程序安装引导-创建快捷键9.添…

Linux中文件描述符与重定向的深入探索

目录 1. 理解C语言的文件操作函数 2. 操作系统的文件操作接口 3. 文件描述符详解和其内核本质 4. 如何理解Linux下一切皆文件 5. Linux中的重定向 5.1 输出重定向 5.2 追加重定向 5.3 输入重定向 6. 结合文件描述符理解重定向 7.重定向的系统调用 在Linux操作系统中&a…

docker下载镜像到指定目录

要将Docker镜像下载到指定目录,您可以按照以下步骤操作: 下载镜像: 使用docker pull命令从Docker Hub或其他镜像仓库拉取所需的镜像。例如,要下载名为nginx、标签为latest的镜像,可以运行docker pull nginx:latest。 保…

HarmonyOS:Preferences每次启动都会清除

使用现象: 在第一次启动应用时,手动存储了一些测试数据,并利用Preferences将相关信息持久化地存储到设备中。 第二次在该设备上运行同一应用时会判断是否存在该文件。但调试时发现:每次重新启动应用后相关文件都被删除了&#xf…