Trusted Firmware-M Introduction


文章参考:
https://aijishu.com/a/1060000000004572
https://www.freertos.org/2020/07/security-for-arm-cortex-m-devices-with-freertos.html

Trusted Firmware-M (TF-M) 为 ARMv8-M 实现了安全处理环境(SPE),包括 ARMv8.1-M 架构或者一些双核架构平台。它是符合PSA认证准则的平台安全体系结构参考实现,可使芯片,实时操作系统和设备成为PSA认证。

TF-M 依赖于非安全处理环境(NSPE)和安全处理环境(SPE)之间的边界隔离。在 ARMv8-M 以及ARMv8.1-M 的架构下,它不局限于使用 ARM-TrustZone 技术,在ARMv8-M之前的架构下,它需要物理核的隔离。

TF-M 包括以下几个部分:

  • 利用安全启动认证 NSPE 和 SPE 镜像的完整性
  • TF-M 核负责控制 SPE 和 NSPE 运行期间的隔离与通信
  • 提供加密,内部可信存储(Internal Trusted Storage),受保护存储(Protected Storage) 以及安全证明服务(Attestation secure services)


在 NSPC 中的应用程序或者库可以调用 PSA 标准的API。在 Cortex-M 设备上运行的应用程序可以利用 TF-M 的服务,并通过边缘网关(edge gateways)和 IoT 云服务来保证安全的连接。它还可以保护铭感数据,密钥以及证书。除此之外,它还支持 RTOS 系统。

TF-M采用开源软件的方式,免费供所有用户阅览和使用。目前主分支主要是基于Arm v8 M-Profile(缩写Armv8m)的安全扩展特性TrustZone来实现。让我们从模块的角度看一下TFM的组成。在具有安全特性的系统中,安全启动和它所保证的信任链是安全系统的基石。在安全的IoT设备
设计中,这些功能也是必须的。那么根据功能来分类,系统一般可以由这几类模块组成:

  • 一个支持安全启动并且是固化在硬件内的ROMCODE
  • 一个或者多个比ROMCODE具有更丰富功能的安全模块,由ROMCODE安全加载并执行
  • 一个或者多个比ROMCODE具有更丰富功能的安全模块,由ROMCODE安全加载并执行

安全启动加载器BL2

一个名为BL2的组件可以用作ROMCODE或者安全加载器(Secure Bootloader)。根据系统的具体设计,BL2对应于上面列出的第一类或者第二类模块。作为第一类模块的情况下,BL2可以作为ROMCODE固化在硬件内部。如果硬件已经固化了支持安全启动的ROMCODE,BL2可以作为安全加载器被ROMCODE加载作为第二个运行组件(第一个为ROMCODE),对应于上面的第二类模块。因为BL2通常提供比ROMCODE更为丰富的功能,除了安全启动,这些也是BL2的主要功能:

  • 镜像更新
  • 启动镜像互为备份
  • 初始设备证书(提供设备身份用)

如果系统设计上对第二个运行组件的功能需求并不多,并且已有支持安全启动的ROMCODE,那么BL2可以在实际使用中被省略,由ROMCODE直接安全加载其余的安全模块。

备注:TFM中的BL2组件引用并强化自另一个开源项目MCUBOOT。

安全固件

用于提供安全服务的安全固件(Secure Firmware)模块。这个模块是运行在隔离的安全执行环境的模块,是安全服务唯一的的提供者,对应于上面列出的三类模块中的第二类模块。它是必不可少的一个模块,它的设计遵从PSA FF的定义。这个隔离的安全执行环境目前主要指的是Armv8m TrustZone,另一种是使用多核的方式来实现安全隔离。安全服务仅仅暴露出有限的接口,这样可以减少攻击界面。提供服务的接口被称为PSA Client API。


在安全固件内部,安全服务按类别被分组在一个个安全分区(Secure Partition)中。安全分区是安全固件内部的运行单元,拥有自己的资源和唯一的执行线程。安全分区是安全分区调度和隔离的基本单元。以下是一些常见的安全分区:

  • 提供安全存储服务(Protected Storage和Internal Trusted Storage)的分区
  • 提供加解密服务(Crypto Service)的分区
  • 提供初始化证明服务(Initial Attestation)的分区

现有的TFM代码中还含有其他的一些分区比如测试服务分区。
备注: 由于安全固件是TFM的主要组成部分,在讨论PSA FF相关实现并且不注明当前讨论的模块明的情况下,名词TFM一般指代安全固件部分。

非安全模块

TFM代码中还包含了一个用作示范的非安全模块,里面含有一些测试案例用以示范非安全环境的软件如何访问安全服务。


Author: x-codingman
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source x-codingman !
  TOC