2. ARM TrustZone基础
ARM TrustZone 是 ARM 处理器中用于构建可信执行环境(TEE)的硬件安全扩展。它并不是一颗独立的安全芯片,而是通过 CPU 内部的安全状态位、总线扩展信号以及内存控制器配合,把同一颗 SoC 划分为两个相互隔离的世界:安全世界(Secure World)与非安全世界(Normal World)。OP-TEE 运行在安全世界中,而 Linux、Android 等富操作系统运行在非安全世界中。理解 TrustZone 的四个核心概念——安全状态、异常等级、世界切换、内存隔离——是后续移植 OP-TEE 的基础。
一、安全世界与非安全世界
TrustZone 在 CPU 中引入了一个名为 SCR.NS(Secure Configuration Register 的 Non-Secure 位)的状态位。当该位为 0 时,处理器处于安全状态;为 1 时处于非安全状态。这个位会随总线信号一起传播到整个 SoC,使外设、内存控制器、中断控制器都能识别当前访问来自哪个世界。
两个世界各自拥有独立的软件栈:安全世界通常包含安全监控器(Secure Monitor)、可信操作系统(如 OP-TEE OS)和可信应用(TA);非安全世界包含引导加载程序、Linux 内核、用户态应用和普通驱动。二者通过受控的入口进行通信,而不是随意互相访问。
二、异常等级 EL0~EL3
ARMv8-A 引入了异常等级(Exception Level,EL)概念,用于描述特权层级。EL 数字越大,特权越高:
- EL0:用户态,运行普通应用或可信应用(TA)的用户态部分。
- EL1:内核态,非安全侧运行 Linux 内核,安全侧运行 OP-TEE OS 内核。
- EL2:虚拟化层,通常由 Hypervisor 使用,OP-TEE 场景中一般不用。
- EL3:安全监控器,负责两个世界之间的切换,运行 ARM Trusted Firmware(ATF)等固件。
需要特别注意的是:异常等级与安全状态是两个正交的维度。同一个 EL1 既可能是非安全的 Linux 内核,也可能是安全的 OP-TEE 内核,区别在于当前 SCR.NS 的取值。EL3 是唯一可以自由访问两个世界的层级,因此它成为世界切换的“闸门”。
三、安全状态切换:SMC 与 Monitor
两个世界之间的切换通过 SMC(Secure Monitor Call)指令触发。非安全世界执行 SMC 后,处理器陷入 EL3,由安全监控器根据调用参数决定是转发给 OP-TEE,还是返回非安全世界。OP-TEE 处理完成后,再通过 ERET 返回。
非安全世界 (Linux, NS=1)
│ SMC #0 (OP-TEE 调用约定)
▼
EL3 安全监控器 (ATF, NS 可切换)
│ 保存 NS 上下文,切换到 Secure
▼
安全世界 (OP-TEE OS, NS=0)
│ 处理 TA 请求
▼
EL3 安全监控器
│ 恢复 NS 上下文,切回 Normal
▼
非安全世界 (Linux 继续执行)
整个切换过程涉及寄存器保存与恢复、栈切换、缓存与 TLB 处理。OP-TEE 与 ATF 之间通过一套固定的 SMC 调用号(如 OPTEE_SMC_FUNCID_CALL_WITH_ARG)约定接口,这也是移植时需要重点核对的部分。
四、内存隔离机制
TrustZone 的内存隔离依赖多个硬件组件协同完成:
- TZASC(TrustZone Address Space Controller):把 DRAM 划分为安全区与非安全区,控制非安全访问能否到达安全内存。
- TZPC(TrustZone Protection Controller):控制外设的安全属性,决定某外设能否被非安全世界访问。
- GIC 安全扩展:中断可被配置为 Group 0(安全)或 Group 1(非安全),实现中断隔离。
- MMU 与页表:安全世界使用独立页表,非安全世界无法映射安全内存。
下表总结了两个世界在关键资源上的差异:
| 维度 | 安全世界 | 非安全世界 |
|---|---|---|
| SCR.NS | 0 | 1 |
| 典型软件 | OP-TEE OS、TA、ATF | Linux、Android、普通 App |
| 内存访问 | 可访问安全与非安全内存 | 仅可访问非安全内存 |
| 中断分组 | Group 0(FIQ) | Group 1(IRQ) |
| 外设访问 | 可访问安全外设 | 受 TZPC 限制 |
五、典型应用场景
TrustZone 与 OP-TEE 的典型落地场景包括:
- 数字版权保护(DRM):解密密钥与解密流程放在安全世界,非安全侧只能拿到明文帧。
- 移动支付与生物识别:指纹模板、支付令牌由 TA 保管,Linux 侧无法直接读取。
- 安全启动与密钥存储:设备根密钥、证书链在安全世界校验与保存。
- 可信时间与安全计数:防止非安全系统被回滚或篡改。
optee_example_hello_world,观察 SMC 是否能正确进入安全世界并返回结果。若失败,优先检查 ATF 的 SMC 处理、TZASC 配置和 OP-TEE 的入口地址。
六、常见误区与复盘
初学者容易把 TrustZone 理解为“软件隔离”或“进程隔离”,实际上它是硬件级的状态隔离。另一个常见误区是认为 EL3 一定属于安全世界——EL3 本身是“世界无关”的,它通过 SCR.NS 决定当前代表哪个世界执行。移植时若忽略 TZASC 的地址划分,可能出现安全内存被非安全侧意外访问,导致启动失败或安全漏洞。