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 的 IPC 与权限检查;而安全分区之间的调用同样受 SPM 管控。
三、一次安全服务调用的完整流程
以非安全应用调用 PSA Crypto 为例,请求路径如下:
- 非安全应用调用
psa_crypto_init()或psa_hash_compute()等 PSA API。 - 该调用进入 TF-M 提供的客户端桩(Client Stub),将参数封装为 IPC 消息。
- 通过 SVC 或 PSA 门铃机制陷入安全域,由 SPM 接管。
- SPM 检查客户端身份、分区句柄与访问权限,确认是否允许调用 Crypto 服务。
- SPM 将消息路由到 Crypto 分区,唤醒对应服务线程。
- Crypto 分区执行密钥操作或哈希计算,将结果写回共享内存或消息缓冲区。
- SPM 完成返回路径,客户端获得状态码与输出数据。
整个过程对客户端是透明的,但 SPM 在每一步都执行了隔离与授权检查。这也是 TF-M 与普通库函数调用的本质区别:调用不是直接跳转,而是受管控的跨域消息传递。
四、关键角色对照表
| 角色 | 运行域 | 核心职责 | 典型对象 |
|---|---|---|---|
| 安全启动 | 启动阶段 | 镜像校验、度量、回滚保护 | BL1、BL2、MCUboot |
| SPM | 安全域 | IPC 路由、权限检查、分区调度 | TF-M SPM 核心 |
| 安全分区 | 安全域 | 隔离执行、资源独占 | Crypto、ITS、Attestation |
| 服务 | 安全域 | 定义接口、封装能力 | PSA Crypto API、PSA ITS API |
| 客户端 | 安全域 / 非安全域 | 发起调用、消费服务 | NSPE 应用、安全分区 |
五、常见误区与复盘
理解这五个角色的关系,是后续开发安全分区、注册服务、编写客户端调用代码的基础。TF-M 的架构设计始终围绕一个目标:让安全能力可被使用,但不可被滥用。安全启动保证“谁可以运行”,SPM 保证“谁可以调用谁”,安全分区保证“能力被隔离封装”,服务与客户端则完成“能力的安全交付”。