2. TrustZone基础架构
TrustZone 是 ARM 处理器中用于构建可信执行环境(TEE)的硬件安全扩展。它并不是一颗独立的安全芯片,而是通过 CPU 内部的一组硬件信号与状态位,把同一颗处理器划分为两个相互隔离的执行环境:安全世界(Secure World)与普通世界(Normal World)。理解 TrustZone 的基础架构,核心就是理解“两个世界如何划分、地址空间如何隔离、中断如何切换、以及它适合承载哪些业务”。
一、安全世界与普通世界的划分
TrustZone 在 CPU 层面引入了一个关键状态位——NS 位(Non-Secure bit)。NS=0 表示当前处于安全世界,NS=1 表示处于普通世界。这个位会随总线事务一起传播,成为整个 SoC 判断“这次访问是否可信”的硬件依据。两个世界可以运行各自独立的操作系统:普通世界通常运行 Linux、Android 等富操作系统;安全世界运行体积小、攻击面小的可信操作系统(如 OP-TEE、Trusty)。
两个世界之间的切换通过一条专用指令 SMC(Secure Monitor Call)触发,进入安全监控器(Secure Monitor)完成上下文保存与状态切换。安全监控器运行在最高特权层 EL3,是唯一能同时看到两个世界的软件层。其典型切换流程如下:
普通世界 (NS=1) --SMC指令--> 安全监控器 EL3
├─ 保存普通世界上下文
├─ 配置 SCR.NS = 0
└─ 跳转安全世界 (NS=0)
安全世界 (NS=0) --SMC指令--> 安全监控器 EL3
├─ 保存安全世界上下文
├─ 配置 SCR.NS = 1
└─ 返回普通世界 (NS=1)
需要强调的是,两个世界共享同一套 CPU 流水线、缓存和内存控制器,隔离依靠的是硬件状态位与总线过滤,而不是物理分离。因此“隔离是否彻底”取决于配置是否正确,这也是后续安全加固的重点。
二、地址空间隔离机制
TrustZone 的地址隔离依赖三个关键组件协同工作:TZASC(TrustZone Address Space Controller)、TZPC(TrustZone Protection Controller)以及 MMU 中的 NS 属性。TZASC 负责把 DRAM 划分为安全区与普通区,并检查每一次访问的 NS 位是否与目标区域属性匹配;TZPC 则用于保护片上外设与 SRAM,控制哪些外设只能被安全世界访问。
当普通世界试图访问安全内存时,TZASC 会直接拒绝该事务并返回错误,而不是让数据泄露。这种“硬件级拒绝”是 TrustZone 相比纯软件隔离的最大优势。下表对比了两个世界的典型资源归属:
| 资源类型 | 安全世界 | 普通世界 |
|---|---|---|
| DRAM 区域 | 安全 DRAM(TZASC 保护) | 普通 DRAM |
| 外设 | 加解密引擎、OTP、安全定时器 | 显示、USB、普通存储 |
| 中断 | 安全中断(FIQ 路由) | 普通中断(IRQ 路由) |
| 操作系统 | OP-TEE / Trusty | Linux / Android |
| 特权层 | EL3 + S-EL1 | EL0 / EL1 / EL2 |
三、中断处理与路由
中断是 TrustZone 架构中最容易被忽视、却最容易出问题的部分。ARM 通过 GIC(通用中断控制器) 的 Group 0 / Group 1 分组机制实现中断隔离:Group 0 中断被路由到安全世界,通常以 FIQ 形式触发;Group 1 中断路由到普通世界,以 IRQ 形式触发。这样,安全世界的中断不会被普通世界的操作系统屏蔽或篡改。
当普通世界正在运行、而一个安全中断到来时,CPU 会通过安全监控器切换到安全世界处理该中断,处理完毕后再返回普通世界。整个过程对普通操作系统是透明的。典型的中断路由配置如下:
GICD_IGROUPRn : 设置每个中断属于 Group0 还是 Group1
GICD_ISENABLERn: 使能中断
SCR.IRQ = 1 : 普通世界 IRQ 路由到 EL3 或直接到 EL1
SCR.FIQ = 1 : 安全中断 FIQ 路由到安全世界
ICC_SRE_EL3 : 使能系统寄存器访问接口
四、典型应用场景
TrustZone 的价值在于为高敏感操作提供一个“即使普通系统被攻破也依然可信”的执行环境。典型场景包括:
- 移动支付与数字版权:密钥、证书保存在安全世界,支付签名在 TEE 内完成,普通系统只能拿到签名结果。
- 生物特征识别:指纹、人脸模板存于安全内存,比对在 TEE 内执行,防止模板被窃取。
- DRM 内容保护:解密密钥与解密流程位于安全世界,明文音视频不进入普通内存。
- 安全启动与固件校验:由安全世界逐级校验普通世界镜像签名,构建信任链。
- 车规与工业控制:安全世界承载功能安全监控逻辑,与普通世界的应用逻辑隔离。
五、架构总览与复盘
下图给出 TrustZone 基础架构的整体关系:CPU 通过 NS 位区分两个世界,安全监控器负责切换,TZASC/TZPC 负责地址与外设隔离,GIC 负责中断路由,两个世界各自运行独立操作系统并承载不同业务。
复盘来看,TrustZone 基础架构可以归纳为四句话:NS 位划分世界,SMC 完成切换,TZASC/TZPC 守住内存与外设,GIC 分流中断。掌握这四点,就掌握了后续性能优化与安全加固的出发点。实际工程中,绝大多数 TrustZone 安全问题并非来自架构本身,而是来自配置疏漏——例如 TZASC 区域未覆盖全部安全内存、GIC 分组配置错误、或安全世界与普通世界共享了未受保护的缓冲区。