3. TF-M 架构总览

Trusted Firmware-M(TF-M)并不是一个“把安全功能堆在一起”的固件集合,而是一套围绕隔离、授权与可信启动构建的分层运行时。理解 TF-M,关键是看清五个角色之间的协作关系:安全启动负责建立信任起点,SPM负责运行时的隔离与调度,安全分区承载具体的安全逻辑,服务对外暴露受控能力,客户端则通过标准接口发起请求。它们共同构成一条从“启动可信”到“调用可控”的完整链路。

一、五个角色的定位与边界

在 TF-M 中,安全启动(Secure Boot)通常由 BL1、BL2 等阶段组成,负责校验镜像签名、度量与回滚保护,确保只有通过验证的固件才能进入运行态。SPM(Secure Partition Manager)是运行时的核心管理者,它运行在安全域,负责安全分区生命周期、IPC 消息路由、资源访问控制以及异常处理。安全分区(Secure Partition)是隔离的执行单元,每个分区拥有独立的栈、堆和权限边界,常见的有 PSA Crypto、PSA Attestation、Internal Trusted Storage 等。服务(Service)是分区对外提供的功能集合,通过 PSA Client API 暴露给调用方。客户端(Client)可以是安全域内的其他分区,也可以是非安全域(NSPE)中的应用,它们通过统一的 PSA 接口发起请求,由 SPM 完成转发与权限校验。

核心关系可以概括为:安全启动建立“可信根”,SPM 建立“隔离与路由”,安全分区提供“能力”,服务定义“接口”,客户端发起“调用”。五者缺一不可,且边界清晰。

二、架构关系图解

下图展示了从启动阶段到运行阶段的整体关系。左侧为启动信任链,右侧为运行时的请求路径。可以看到,非安全客户端无法直接访问安全分区,必须经过 SPM 的 IPC 与权限检查;而安全分区之间的调用同样受 SPM 管控。

TF-M 启动信任链与运行时调用关系 BL1(不可变引导) 建立初始信任根 BL2(安全启动) 签名校验 / 度量 / 回滚保护 安全镜像加载 SPM + 安全分区 运行时(Runtime) SPM(安全分区管理器) IPC 路由 · 权限检查 · 分区调度 · 异常处理 Crypto 分区 PSA Crypto 密钥 / 加解密 ITS 分区 Internal Trusted Storage Attestation 分区 PSA Attestation 令牌 / 证据 服务接口层(PSA Client API / IPC) 统一调用约定 · 句柄管理 · 消息封装 安全域客户端(分区间调用) 非安全域客户端(NSPE 应用) 非安全处理环境(NSPE) 安全处理环境(SPE)

三、一次安全服务调用的完整流程

以非安全应用调用 PSA Crypto 为例,请求路径如下:

  1. 非安全应用调用 psa_crypto_init() 或 psa_hash_compute() 等 PSA API。
  2. 该调用进入 TF-M 提供的客户端桩(Client Stub),将参数封装为 IPC 消息。
  3. 通过 SVC 或 PSA 门铃机制陷入安全域,由 SPM 接管。
  4. SPM 检查客户端身份、分区句柄与访问权限,确认是否允许调用 Crypto 服务。
  5. SPM 将消息路由到 Crypto 分区,唤醒对应服务线程。
  6. Crypto 分区执行密钥操作或哈希计算,将结果写回共享内存或消息缓冲区。
  7. SPM 完成返回路径,客户端获得状态码与输出数据。

整个过程对客户端是透明的,但 SPM 在每一步都执行了隔离与授权检查。这也是 TF-M 与普通库函数调用的本质区别:调用不是直接跳转,而是受管控的跨域消息传递。

四、关键角色对照表

角色 运行域 核心职责 典型对象
安全启动 启动阶段 镜像校验、度量、回滚保护 BL1、BL2、MCUboot
SPM 安全域 IPC 路由、权限检查、分区调度 TF-M SPM 核心
安全分区 安全域 隔离执行、资源独占 Crypto、ITS、Attestation
服务 安全域 定义接口、封装能力 PSA Crypto API、PSA ITS API
客户端 安全域 / 非安全域 发起调用、消费服务 NSPE 应用、安全分区

五、常见误区与复盘

误区一:把 SPM 当成普通调度器。 SPM 不只是切换线程,它还承担安全边界 enforcement。任何绕过 SPM 的直接访问都应被视为设计缺陷。
误区二:认为安全分区之间可以随意调用。 分区之间同样需要声明依赖关系,并通过 SPM 路由。未声明的跨分区调用会被拒绝。
复盘建议: 在调试 TF-M 时,先确认启动阶段是否通过校验,再检查 SPM 日志中的 IPC 路由记录,最后定位具体分区服务是否正常响应。按“启动 → SPM → 分区 → 服务 → 客户端”的顺序排查,通常能快速缩小问题范围。

理解这五个角色的关系,是后续开发安全分区、注册服务、编写客户端调用代码的基础。TF-M 的架构设计始终围绕一个目标:让安全能力可被使用,但不可被滥用。安全启动保证“谁可以运行”,SPM 保证“谁可以调用谁”,安全分区保证“能力被隔离封装”,服务与客户端则完成“能力的安全交付”。