2. 安全基础
在嵌入式安全领域,ARM TrustZone 是构建可信执行环境最核心的硬件基础。它并不是一个独立的芯片或外设,而是集成在 Cortex-M 处理器内部的一套系统级安全机制。理解 TrustZone 的隔离原理,是掌握 Trusted Firmware-M(TF-M)运行机制的前提。本节从硬件隔离、世界切换、内存与外设分区,以及 PSA 安全框架的核心概念四个层面展开。
一、TrustZone 的核心原理:两个世界,一套硬件
TrustZone 的核心思想是在同一颗处理器上划分出两个相互隔离的执行环境:安全世界(Secure World)与非安全世界(Non-secure World)。两者共享 CPU 内核、总线和部分存储资源,但通过硬件强制隔离,非安全世界的代码无法直接访问安全世界的资源。
在 Cortex-M 上,TrustZone 引入了几个关键硬件特性:
- 安全状态位(Security State):CPU 当前处于安全态还是非安全态,由硬件状态位决定,普通指令无法篡改。
- SAU(Security Attribution Unit):CPU 内部的安全属性单元,用于定义哪些地址区域属于安全区。
- IDAU(Implementation Defined Attribution Unit):由芯片厂商实现,用于定义外设和存储的安全属性。
- SG 指令(Secure Gateway):非安全世界进入安全世界的唯一合法入口,用于调用安全服务。
- BNS/BFX 信号:总线上的安全标识,确保非安全访问无法触达安全外设。
这些机制共同构成了“硬件级隔离墙”。与纯软件隔离相比,TrustZone 的隔离不依赖操作系统,即使非安全世界的系统被攻破,也无法绕过硬件规则读取安全密钥。
二、安全与非安全世界的隔离机制
隔离体现在三个维度:执行隔离、存储隔离、外设隔离。
执行隔离通过安全状态位实现。CPU 在任一时刻只能处于一个世界,切换必须经过受控入口。存储隔离由 SAU 和 IDAU 共同决定:每个地址区间被标记为安全(S)、非安全(NS)或非安全可调用(NSC)。NSC 区域是专门为 SG 指令设计的跳板,允许非安全代码发起安全调用,但不能读取安全数据。
外设隔离则通过总线上的安全信号实现。安全外设只响应安全访问,非安全世界即使知道寄存器地址,访问也会被总线拒绝并触发安全异常。
下面是一个典型的 SAU 区域配置示例,用于划分安全与非安全存储:
/* SAU 区域配置示例 */
SAU->RBAR = 0x10000000 | SAU_RBAR_ENABLE; /* 安全代码区起始 */
SAU->RLAR = 0x1001FFFF | SAU_RLAR_ENABLE; /* 安全代码区结束 */
SAU->RBAR = 0x10020000 | SAU_RBAR_ENABLE; /* NSC 跳板区 */
SAU->RLAR = 0x10020FFF | SAU_RLAR_ENABLE | SAU_RLAR_NSC;
SAU->RBAR = 0x08000000; /* 非安全 Flash */
SAU->RLAR = 0x0807FFFF;
三、PSA 安全框架核心概念
PSA(Platform Security Architecture)是 ARM 提出的物联网安全框架,TrustZone 是其硬件根基,而 TF-M 是 PSA 在 Cortex-M 上的参考实现。PSA 的核心概念包括:
- 安全分区(Secure Partition):将安全服务拆分为独立分区,每个分区有独立的栈、堆和权限,互不干扰。
- PSA RoT(Root of Trust):可信根,包括不可变可信根、可更新可信根和测量可信根。
- PSA API:统一的安全服务接口,如加密、存储、 attestation,屏蔽底层实现差异。
- 隔离级别:PSA 定义了 L1/L2/L3 隔离等级,L3 要求分区之间也相互隔离。
- 安全生命周期:设备从制造、部署到退役的状态管理,如 SD、BL2、SP 等阶段。
PSA 框架将安全能力抽象为“服务”,非安全应用通过 PSA API 发起请求,请求经 IPC 转发到对应安全分区处理,整个过程对应用透明。
四、典型场景:一次安全调用的完整路径
假设非安全应用需要调用加密服务生成一个随机数,其路径如下:
- 非安全应用调用
psa_crypto_init()和psa_generate_random()。 - PSA API 层将请求封装为 IPC 消息,写入非安全共享内存。
- 通过 NSC 区域的 SG 指令触发安全世界入口。
- TF-M 的 SPM(安全分区管理器)解析请求,路由到 Crypto 安全分区。
- Crypto 分区调用硬件 TRNG 或软件算法生成随机数。
- 结果写回共享内存,通过 SG 指令返回非安全世界。
整个过程非安全应用无法看到密钥、无法访问 Crypto 分区的私有内存,也无法篡改分区代码。
五、常见误区与复盘
| 误区 | 正确理解 |
|---|---|
| TrustZone 等于安全 | TrustZone 只提供隔离机制,安全与否取决于安全世界内部实现是否正确。 |
| 非安全代码可以随意调用安全函数 | 只能通过 NSC 区域的 SG 指令进入,且入口地址受 SAU 限制。 |
| 安全分区之间天然隔离 | 需要 PSA L3 隔离和 MPU 配置才能实现分区间隔离。 |
| 配置了 SAU 就万事大吉 | 还需配置 MPU、栈保护、外设安全属性,并验证启动链可信。 |
理解 TrustZone 的硬件隔离边界,以及 PSA 框架如何在其上构建服务化安全模型,是后续学习 TF-M 启动流程、安全分区管理和 IPC 机制的基础。只有先看清“墙”在哪里,才能理解“门”如何开。