IoT高速发展的今天,大量的IoT设备使用了Arm M-profile为核心的芯片。我们会接触到越来越多的IoT设备,一个问题油然而生:数量如此巨大的IoT设备的安全性如何?目前针对IoT安全的技术和标准可谓千姿百态,除了必要的硬件安全技术,与之配套的安全软件也是必不可少的一部分。今天我们要介绍的是基于Arm M-profile的可信固件Trusted Firmware - M,简称TFM。它是一个开源软件,运行在一个硬件隔离的安全环境中并提供安全服务。TFM是Arm发布的Platform Security Architecture(简称PSA)框架中的固件环节。接下来的章节里我们会总体性介绍一下TFM和它所遵循的PSA框架。
平台安全架构(Platform Security Architecture)
Platform Security Architecture (PSA)是Arm最新提出的一种从设备设计初始就开始引入安全要素的框架。这个框架由四个关键的阶段组成:
- 分析 (Analyze)
- 架构 (Architect)
- 实现 (Implement)
- 认证 (Certify)
在其中的架构阶段需要定义设备的安全需求,以及为满足这些安全需求所需要的安全技术。Arm提供了一系列的文档对硬件,软件和模型等方面做出了定义。软件方面,以PSA Firmware Framework(简称PSA FF)这个文档作为可信固件设计的指导框架。TFM就是一个遵从PSA FF的可信固件实现。
TFM实现与特性
TF-M采用开源软件的方式,免费供所有用户阅览和使用。目前主分支主要是基于Arm v8 M-Profile(缩写Armv8m)的安全扩展特性TrustZone来实现。让我们从模块的角度看一下TFM的组成。在具有安全特性的系统中,安全启动和它所保证的信任链是安全系统的基石。在安全的IoT设备
设计中,这些功能也是必须的。那么根据功能来分类,系统一般可以由这几类模块组成:
- 一个支持安全启动并且是固化在硬件内的ROMCODE
- 一个或者多个比ROMCODE具有更丰富功能的安全模块,由ROMCODE安全加载并执行
- 一个或者多个对安全性要求较弱或无要求的非安全模块,可以由ROMCODE或者安全模块加载并执行
TFM中也提供了三个模块,分别对应于以上列出的三类模块,在下面的小节中进行介绍。
安全启动加载器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代码中还包含了一个用作示范的非安全模块,里面含有一些测试案例用以示范非安全环境的软件如何访问安全服务。
结束!