3. TF-M架构概览

要理解 TF-M 的安全存储与密钥管理,必须先看清它所在的“地基”——TF-M 整体架构。TF-M(Trusted Firmware-M)是 Arm 为 Cortex-M 系列处理器提供的开源安全固件参考实现,它把一颗 MCU 划分为两个世界:安全处理环境(SPE,Secure Processing Environment)与非安全处理环境(NSPE,Non-secure Processing Environment)。安全存储服务正是 SPE 内部的一项核心安全服务,理解它在架构中的位置,才能理解密钥为什么“拿不出来”、数据为什么“改不了”。

一、整体架构:两层世界 + 一组安全服务

TF-M 的架构可以自上而下分为三层视角:应用层、服务层与硬件隔离层。NSPE 侧运行非安全应用与 RTOS,通过 PSA Client API 发起服务请求;SPE 侧运行 TF-M 内核(TF-M Core)、安全分区(Secure Partition)以及各类安全服务。两者之间不是直接函数调用,而是通过 PSA FF-M(Firmware Framework for M)定义的 IPC 或函数调用机制跨越安全边界。

SPE 内部由 TF-M Core 统一调度,它负责安全分区管理、IPC 消息路由、中断处理与资源隔离。安全服务以“安全分区”的形式存在,每个分区是一个独立的执行单元,拥有自己的栈、堆和权限。常见的安全服务分区包括:加密服务(Crypto)、内部可信存储(ITS,Internal Trusted Storage)、受保护存储(PS,Protected Storage)、认证服务(Attestation)、固件更新(FWU)等。安全存储服务(ITS/PS)就位于这一层,向上对 NSPE 暴露 PSA Storage API,向下依赖 Crypto 与硬件隔离机制。

NSPE 非安全处理环境 非安全应用 / RTOS Non-secure App PSA Client API psa_its_set / psa_ps_get … 非安全存储驱动 Flash / RTC / 外设 安全边界(TrustZone / MPU 隔离) SPE 安全处理环境 TF-M Core(安全内核) 分区调度 · IPC 路由 · 中断管理 · 资源隔离 · 权限控制 Crypto 分区 加解密 / 哈希 密钥派生 ITS 分区 内部可信存储 小数据 / 密钥句柄 PS 分区 受保护存储 大容量加密数据 Attestation / FWU 认证服务 / 固件更新 其他安全服务 硬件隔离与安全资源 TrustZone-M · MPU · SAU · 安全 Flash · 安全 SRAM · 加密加速器 · TRNG

二、SPE 与 NSPE 的划分原则

划分的核心依据是“信任级别”与“数据敏感度”。凡是涉及密钥、证书、身份凭证、安全启动状态、可信计数的代码与数据,都必须放在 SPE;凡是普通业务逻辑、网络协议栈、UI 渲染等,放在 NSPE。两者通过 PSA FF-M 定义的接口通信,NSPE 只能“请求服务”,不能直接访问 SPE 的内存或外设。

这种划分带来三个直接结果:第一,NSPE 被攻破时,攻击者仍无法直接读取 SPE 中的密钥;第二,SPE 的代码量被刻意控制得很小,便于形式化验证与安全审计;第三,所有跨边界调用都必须经过 TF-M Core 的检查,形成统一的“安全网关”。

三、隔离机制:TrustZone-M 与 MPU 的协同

在 Cortex-M23/M33/M55 等支持 TrustZone-M 的处理器上,隔离由硬件直接完成。SAU(Security Attribution Unit)与 IDAU(Implementation Defined Attribution Unit)共同定义每一段地址属于安全还是非安全。安全代码只能访问安全资源,非安全代码访问安全资源会触发 SecureFault。

在没有 TrustZone-M 的平台上,TF-M 退化为“仅 SPE”模式,依靠 MPU 在 SPE 内部划分分区边界。此时隔离强度下降,但服务接口与上层 API 保持一致,便于代码移植。无论哪种模式,安全存储服务都运行在受保护的分区内,其数据区对其他分区不可见。

隔离不是“一个开关”,而是地址属性、外设归属、中断优先级、DMA 通道等多维资源的统一编排。安全存储服务依赖这些机制,才能保证密钥“只进不出”。

四、安全存储服务在架构中的位置

安全存储服务由 ITS 与 PS 两个分区组成,位于 TF-M Core 之上、Crypto 分区之侧。ITS 面向小数据(通常 ≤ 4KB),适合存放密钥句柄、设备身份、可信计数;PS 面向大容量数据,适合存放加密后的配置文件、证书链、固件元数据。两者都通过 PSA Storage API 对 NSPE 暴露能力。

以一次密钥写入为例,调用链如下:

NSPE 应用
  └─ psa_its_set(uid, data, len, flags)
       └─ PSA Client API(跨安全边界)
            └─ TF-M Core IPC 路由
                 └─ ITS 分区
                      ├─ 调用 Crypto 分区派生/加密
                      └─ 写入安全 Flash(经硬件隔离保护)

可以看到,密钥明文只在 SPE 内部流转,NSPE 拿到的只是操作结果(成功/失败)或句柄。这正是安全存储服务在架构中的价值定位:它是 NSPE 与安全硬件之间唯一的、受控的数据通道。

五、常见误区与复盘

  • 误区一:把 ITS 当普通文件系统。ITS 容量有限、写入有寿命约束,不适合高频大块写入,应优先用于密钥与元数据。
  • 误区二:认为 NSPE 可以绕过 API 直接读 Flash。安全 Flash 区域由 SAU/MPU 保护,非安全访问会触发异常,无法绕过。
  • 误区三:忽略分区权限配置。若分区清单(manifest)中权限过大,隔离形同虚设,必须遵循最小权限原则。
  • 误区四:在 NSPE 缓存密钥明文。一旦 NSPE 被攻破,缓存即泄露,密钥应始终以句柄形式在 SPE 内使用。
架构层次 典型组件 与安全存储的关系
NSPE 应用层 业务应用、RTOS 通过 PSA Storage API 发起请求
安全边界 PSA FF-M、IPC 跨世界调用的唯一通道
TF-M Core 调度、路由、隔离 校验请求并分发到 ITS/PS 分区
安全服务分区 ITS、PS、Crypto 安全存储的实际执行者
硬件隔离层 TrustZone-M、MPU、安全 Flash 提供物理级访问控制
一句话总结:TF-M 用 SPE/NSPE 划分建立信任边界,用 TrustZone-M 与 MPU 落实隔离,用安全分区承载服务,而安全存储服务(ITS/PS)正是这条信任链上离密钥最近的一环。