2. TF-M基础与架构

Trusted Firmware-M(TF-M)是Arm主导的开源安全固件实现,目标是在Cortex-M类MCU上提供符合PSA Certified要求的安全基础。它并不是一个“加密库合集”,而是一套把安全启动、安全存储、密钥管理、密码服务、认证服务与安全分区调度整合在一起的运行时框架。理解TF-M,关键要抓住四个词:定位、分区、SPM、隔离与执行模型。

一、TF-M在PSA Certified中的定位

PSA Certified是Arm提出的安全认证体系,分为Level 1、Level 2、Level 3三个层级。Level 1偏重安全原则与文档审查;Level 2要求对PSA Root of Trust(RoT)进行实验室评估;Level 3进一步要求抗物理与侧信道攻击。TF-M主要覆盖的是PSA Level 2的RoT实现,即提供可信启动、可信存储、可信密码、可信认证等基础安全服务。

在系统栈中,TF-M位于应用与硬件之间,向下依赖MCU的TrustZone、MPU、SAU、Flash/RAM隔离等硬件能力,向上通过PSA Functional API向应用提供统一安全接口。因此,TF-M的定位可以概括为:PSA Certified在MCU侧的参考安全固件实现,而不是完整操作系统,也不是单一安全芯片方案。

核心理解:TF-M = PSA RoT的MCU实现 + 安全服务运行时 + 安全分区调度框架。

二、安全分区:把安全能力拆成可组合的组件

TF-M内部采用“安全分区”思想,把不同安全职责拆分为独立分区。常见分区包括:

  • SPE:Secure Processing Environment,安全处理环境,运行安全分区与SPM。
  • NSPE:Non-Secure Processing Environment,非安全处理环境,运行应用与普通RTOS。
  • PSA RoT分区:如Crypto、Internal Trusted Storage(ITS)、Protected Storage(PS)、Attestation、Platform等。
  • SPM:Secure Partition Manager,负责安全分区生命周期、通信与资源仲裁。

每个安全分区拥有独立的栈、堆、数据区和清单(manifest)。清单定义该分区的服务、权限、依赖、MMIO区域和中断。构建时,TF-M根据清单生成分区元数据、IPC消息绑定和隔离配置。这样做的价值是:安全能力可裁剪、可组合、可验证,而不是把所有安全代码塞进一个巨大二进制。

三、SPM:安全分区的“内核”

SPM是TF-M的核心调度器。它不负责通用任务调度,而是负责安全分区的初始化、调用、切换、资源访问控制和异常处理。SPM主要包含以下职责:

  1. 解析分区清单,建立分区表与句柄。
  2. 管理安全分区状态:未初始化、就绪、运行、阻塞、终止。
  3. 处理来自NSPE的PSA Client API请求,并路由到对应安全分区。
  4. 执行IPC(进程间通信)消息传递与同步。
  5. 在分区切换时保存/恢复上下文,并配置MPU/SAU。

TF-M支持两种执行模型:IPC模型与函数调用模型。IPC模型下,每个分区有独立线程和栈,通过消息队列通信,隔离更强;函数调用模型下,分区以库形式链接,调用开销小,但隔离弱。量产项目通常优先选择IPC模型,以满足PSA Level 2的隔离要求。

四、隔离机制与执行模型

TF-M的隔离依赖硬件与软件协同。硬件侧使用TrustZone-M的SAU/IDAU划分安全与非安全地址空间,使用MPU保护分区私有数据,使用NVIC与异常优先级实现安全中断路由。软件侧通过SPM配置分区权限、栈保护、系统调用门和IPC消息校验。

执行模型上,系统启动后先运行BL2(可选)进行安全启动,然后进入TF-M SPM初始化,依次启动安全分区,最后跳转到NSPE应用。NSPE通过PSA API发起服务请求,SPM切换到对应安全分区执行,完成后返回结果。整个过程对应用透明,但底层发生了安全状态切换、栈切换和权限重配置。

TF-M 安全分区与执行模型总览 NSPE 非安全处理环境 应用 / RTOS PSA Client API 非安全中断 / 外设 SPE 安全处理环境 SPM 分区调度 IPC 路由 权限仲裁 上下文切换 Crypto 密码服务 密钥管理 随机数 ITS / PS 内部可信存储 受保护存储 回滚保护 Attestation 初始证明 令牌签发 身份声明 Platform 生命周期 系统控制 电源管理 硬件隔离与安全基础 TrustZone-M SAU / IDAU MPU 分区数据保护 NVIC 安全中断路由 Flash / RAM 安全属性配置 RoT 信任根 NSPE 通过 PSA API 请求服务,SPM 调度安全分区,硬件隔离提供最终边界

五、典型场景:安全存储调用链

以应用调用PSA Protected Storage写入密钥为例,执行路径如下:

NSPE App
  → psa_ps_set(key_id, data, len, flags)
  → SPM 接收 PSA Client 请求
  → SPM 校验句柄与权限
  → 切换到 PS 安全分区
  → PS 分区调用 ITS 或外部 Flash 驱动
  → 写入加密数据并更新元数据
  → 返回 psa_status_t
  → SPM 切回 NSPE

这条链路中,应用看不到安全分区内部实现,也无法直接访问安全Flash区域。SPM负责把一次API调用转换为一次受控的跨域服务请求。若分区清单未授予PS访问权限,SPM会在路由前直接拒绝,避免越权访问。

六、常见误区与复盘要点

误区一:认为用了TF-M就自动通过PSA Level 2。实际上,认证还要求安全启动链、调试保护、生命周期管理、随机数质量、侧信道评估等完整证据。
误区二:把SPM当成通用RTOS调度器。SPM只调度安全分区,不负责应用任务;NSPE的RTOS与SPM是协作关系,不是替代关系。
误区三:忽略分区清单与链接脚本的一致性。清单声明了MMIO、中断和栈大小,若链接脚本未对齐,可能导致分区加载失败或运行时越界。
维度 IPC模型 函数调用模型
隔离强度 强,独立栈与MPU 弱,共享地址空间
调用开销 较高,需上下文切换 低,近似函数调用
适用场景 量产安全认证 资源极度受限或原型
PSA Level 2 推荐 通常不满足

总结来看,TF-M在PSA Certified中承担的是MCU侧RoT落地角色;安全分区把安全能力模块化;SPM负责调度与仲裁;隔离机制依赖TrustZone-M、MPU与清单配置;执行模型决定隔离强度与性能取舍。量产项目中,应优先采用IPC模型,严格校验分区清单,并把安全启动、调试保护与生命周期管理纳入同一套交付证据链。