1、简介

先看一张软件架构图:

1.1、ARMV8-M Trustzone简介

TrustZone 技术的概念并不新鲜。该技术已在 Arm Cortex-A 系列处理器上使用多年,并且现在已扩展到涵盖 Armv8-M 处理器。

在较高层次上,Armv8-M 的 TrustZone 技术的概念类似于 Arm Cortex-A 处理器中的 TrustZone 技术。处理器具有安全和非安全状态,非安全软件只能访问非安全存储器。Armv8-M 的技术在设计时考虑了小型节能系统。与 Cortex-A 处理器中的 TrustZone 技术不同, Armv8-M 的Secure 和 Normal 世界是基于内存映射的,转换在异常处理代码中自动发生。

Armv8-M 和 Armv8-A所支持的Trustzone技术有以下方面的不同:

  • Armv8-M 的 TrustZone 技术支持 多个安全entry points,而在 Cortex-A 处理器的 TrustZone 技术中,Secure Monitor 处理程序是唯一的entry points。
  • 执行在安全状态时仍可处理非安全中断
    在许多具有实时处理功能的微控制器应用中,确定性行为和低中断延迟是重要的要求。在运行安全代码时处理中断请求的能力至关重要
  • 通过允许在安全和非安全状态之间共享寄存器组,Armv8-M 实现的功耗可以类似于 Armv6-M 或 Armv7-M
  • 状态切换的低开销允许安全和非安全软件频繁交互,这在以下情况下很常见。 安全固件包含软件库,例如 GUI 固件或通信协议栈

在具有 Armv8-M 架构安全扩展的设计中,对系统安全至关重要的组件可以放置在安全的世界。这些关键组件包括:

  • 安全引导加载程序。
  • 秘钥。
  • 闪存编程支持。
  • High value assets(高价值资产)。

    安全(Trusted)和非安全(Non-trusted)软件可以一起工作,但非安全应用程序不能直接访问安全资源。相反,任何对 Secure 资源的访问都可以通过 Secure 软件提供的 API,这些 API 可以实现身份验证来决定如果允许访问安全服务。通过这种安排,即使非安全应用程序中存在漏洞,黑客
    不能攻击掉整个芯片。

1.2、Armv8-M Trustzone背景下的安全需求

安全这个词在嵌入式系统设计中可以有很多不同的含义。在大多数嵌入式系统中,安全性可以包括但不限于到:

  • 通讯保护
    这种保护可以防止数据传输被未授权方看到或拦截,并且可能包括其他技术,例如密码学。
  • 数据保护
    这种保护可防止未经授权的各方访问存储在设备内的秘密数据。
  • 固件保护
    这种保护可防止片上固件被逆向工程。
  • 运行保护
    此保护可防止关键操作出现恶意故意故障。
  • 篡改保护
    在许多安全敏感产品中,需要防篡改功能来防止设备的操作或保护机制受到影响。被覆盖。
    TrustZone 技术可以直接解决嵌入式系统的以下一些安全要求:
  • 数据保护
    敏感数据可以存储在安全内存空间中,并且只能由安全软件访问。非安全软件只能访问安全 API 向非安全域提供服务,并且仅在安全检查或身份验证之后。
  • 固件保护
    预加载的固件可以存储在安全存储器中,以防止其被逆向工程和受到恶意攻击。Armv8-M 的 TrustZone 技术也可以与额外的保护技术一起使用。例如,设备级读出保护,一种技术当今业界常用,可配合Armv8-M的TrustZone技术,保护最终完成的固件产品。
  • 安全启动
    安全启动机制使您对平台充满信心,因为它始终从安全内存启动。

TrustZone 技术还可与面向下一代的高级微控制器中使用的附加保护功能一起使用物联网 (IoT) 产品。例如,为物联网应用开发的微控制器可以包含一系列安全功能。
TrustZone 技术的使用有助于确保所有这些功能只能使用具有有效entry point的 API 来访问,如下所示图显示:

通过使用 TrustZone 技术来保护这些安全功能,设计人员可以:

  • 防止不受信任的应用程序直接访问安全关键资源。
  • 确保仅在验证和检查后才重新编程 Flash 映像。
  • 防止固件被逆向工程。
  • 以软件级别的保护存储机密信息

无线通信接口的安全性
在其他一些应用场景中,例如带有经过认证的内置无线电堆栈的无线 SoC,TrustZone 技术可以保护标准化操作,例如无线通信行为。
TrustZone 技术可以确保客户定义的应用程序不会使认证失效,如下图所示。

2、Trustzone扩展的两种安全状态

Trustzone技术下的两个安全状态(Security State): Non-Secure State 和 Secure State.
在TF-M中也称之为: NSPE(NON-Secure Processing Environment)和SPE(Secure Processing Environment)

关于reset

  • 如果实施了安全扩展,则标记为安全的内存区域和其他关键资源只有在 PE 以安全状态执行时才能访问
  • 如果实施了安全扩展, 则在 Cold reset 和 Warm reset时,PE将进入Secure状态
  • 如果实施了安全扩展, 则在 Cold reset 和 Warm reset时,PE将进入NON-Secure状态

关于banked
实施了安全扩展后,下列寄存器都是banked by security:

  • 通用寄存器中的R13(SP)
  • 特殊寄存器中的 : MASK寄存器(PRIMASK, BASEPRI, FAULTMASK)、CONTROL 寄存器、栈指针限制寄存器(MSPLIM ,PSPLIM)
  • System Control Space (SCS)

msr/mrs指令编码

MRSMSR指令编码中的bit[7]表示操作的是哪组寄存器(Secure or NON-Secure)

补充术语
RAZ:Read-As-Zero 读到的总是0
WI :Writes Ignoredx 写无效
RAO:Read-As-Oned读到的总是1
SBZP:Should-Be-Zero-or-Preserved on writes 写总是0
SBOP : Should-Be-One-or-Preserved on writes. 写总是1
UNK:unknown 读写时返回值未知
详见:ARM Glossary

cortex-A Trustzone 和 cortex-M Trustzone的对比:

在cortex-M上,双系统的切换,使用的是 Secure Gateway (SG) 指令,但只允许在特殊的memory上调用SG,即使 NSC(non-secure callable)

安全状态的切换

切换安全状态的方式有以下两种:

  • 直接函数调用和返回(non-secure callable)
  • 异常/中断的进入和退出

3、 内存的划分

如果实施了安全扩展,则 4GB 内存空间将划分为安全非安全内存区域。
安全内存空间进一步分为两种类型:安全(S)和非安全可调用(NSC : Non-secure Callable)

NSC 是一种特殊类型的安全内存。这种类型的内存是 Armv8-M 处理器允许保存 SG 指令的一种内存,使软件能够从非安全状态转换为安全状态。

通过将 SG 指令的功能限制在 NSC 内存中,安全软件创建者无需在正常安全内存中意外包含 SG 指令或数据共享编码值,包含 NSC 内存位置。

通常 NSC 内存区域包含小型分支跳转(entry points)的表。 为了防止非安全应用程序分支到无效入口点,这里有Secure Gateway (SG) 指令。

当非安全程序调用安全端的函数时:

  • API 中的第一条指令必须是 SG 指令。
  • SG 指令必须位于由 安全属性单元 (SAU :Security Attribution Unit) 或实施定义的属性单元 ( IDAU : Implementation Defined Attribution Unit) 定义的 NSC 区域中。

引入NSC内存的原因是为了防止其他二进制数据,例如查找表,其值与SG指令的操作码相同,作为进入安全状态的入口函数。 通过分离 NSC 和 Secure 内存类型,包含二进制数据的 Secure 程序代码可以安全地放置在 Secure 区域中,而无需直接暴露于 Normal 世界,并且只能使用 NSC 内存中的有效入口点进行访问。

4、Attribution units (SAU and IDAU)

  • SAU :Security Attribution Unit
  • IDAU : Implementation Defined Attribution Unit

复位的时候SAU是disabled的
如果SAU是disabled的,且系统中也没有包含IDAU,又由于reset时默认的状态是Secure Security State,那么系统将无法切换到Non-secure状态,所有切换non-secure Security状态的操作都会产生Fault错误

SAU寄存器的总结

SAU开启之后:

  • 没有在 SAU region 范围内的,都视为安全内存
  • SAU_RLAR.NSC=0 表示非安全内存
  • SAU_RLAR.NSC=1 表示NSC内存

5、Secure和Non-secure的状态切换


armv8-M(cortex-m) Trustzone总结和介绍相关推荐

  1. CMSIS(Cortex微控制器软件接口标准) 介绍链接

    https://github.com/ARM-software/CMSIS_5/releases/tag/5.4.0 http://arm-software.github.io/CMSIS_5/Cor ...

  2. [architecture]-ARMV8的The current Program Counter (PC)介绍

    快速链接: .

  3. ARMv8/ARMv9视频课程-Trustzone/TEE/安全视频课程

    快速链接: .

  4. 模型web迁移延时太长,机器学习神器Cortex 能一键解决吗?

    2020-02-06 17:54 导语:各种改进,提高用户体验. 机器学习算法部署平台Cortex宣布推出 Cortex V0.13 . 据介绍,这次的Cortex v0.13支持了所有的主要机器学习 ...

  5. 专题目录20211013-ongoing

    密码学基础系列 密码学基础(1)-前言 密码学基础(2)-基础知识介绍 密码学基础(3)-数字摘要hash的介绍 密码学基础(4)-aes和分组密码的介绍 密码学基础(5)-RSA的介绍 密码学基础( ...

  6. 【瑞萨RA4系列】开发环境搭建和点灯指南

    [瑞萨RA4系列开发板体验]开发环境搭建和新手点灯指南 文章目录 [瑞萨RA4系列开发板体验]开发环境搭建和新手点灯指南 一.简单开箱 二.芯片简介 三.开发环境搭建 2.1 安装FSP(RASC) ...

  7. 嵌入式Linux--ARM架构

    目录 产品分类 ARM 自己设计的内核 ARM内核发布时间 由具有ARM架构许可证的公司独立开发的内核 经典ARM系列和Cortex系列 Classic处理器介绍 Cortex系列介绍 一.ARM架构 ...

  8. linux gic驱动

    转自:https://blog.csdn.net/rikeyone/article/details/51538414 参考:https://blog.csdn.net/tangtang_yue/art ...

  9. 基础篇. ARM架构和处理器(3)

    ARMv8\ARMv9架构部分特性总结 todo... 1.Armv9-A 架构 Armv9-A 架构建立在 Armv8-A 架构的基础上并向前兼容. Armv9-A 架构构成了 Arm 基础系统架构 ...

最新文章

  1. Ubuntu apt-get install、apt-get -f install、apt-get --purge remove、apt-get update、apt-get upgrade、
  2. mysql 8.0数据备份恢复_第7章 备份和恢复
  3. 环境微生物期刊—Applied and Environmental Microbiology
  4. [转]Ubantu vmware tools 安装
  5. Rectangle Area
  6. Sentinel-Go 集成 Nacos 实现外部动态数据源
  7. 1032:大象喝水查
  8. JavaScript DOM 编程艺术 公用方法
  9. linux安装vmwareTools
  10. mysql10---索引优化
  11. ubuntu 升级python_如何将 Ubuntu 16 和 18 上的 python 升级到最新 3.8 版
  12. 一网打尽Mac上的高效工具 - 日常软件篇(附演示视频)
  13. 人工智能万亿市场待挖掘
  14. BP神经网络之BP算法手写推导
  15. 雅虎被收购后,Tumblr 前途未卜,准备在所有博客中引入广告
  16. 石家庄12重点项目开工,滹沱新区更名为正定新区
  17. 程序员的“我爱你”表达方式
  18. SpiffWorkflow定制工作流
  19. C# Unicode 转换
  20. 游戏数据逆向分析系列课程之封包和线程发包

热门文章

  1. 西门子fifo_查缺补漏必备 |三菱西门子学员知识问答汇总(技成周报134期)
  2. 用python计算贷款_Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例...
  3. 成功解决SyntaxError: encoding problem: utf8 with BOM
  4. ML之FE:基于LiR/Ridge/Lasso/ElasticNet/AvgModels/RF算法(GSCV) 利用某市房价数据集(特征工程处理)进行房价回归预测
  5. 成功解决TypeError: map() got an unexpected keyword argument 'num_threads'
  6. phpcms黄页,不能选择行业。解决办法
  7. Sublime Text 2报“Decode error - output not utf-8”错误的解决办法
  8. uva 10047 the monocyle (四维bfs)
  9. WPF 用户控件的使用
  10. csu 1019 Simple Line Editor