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 / TrustyLinux / Android
特权层EL3 + S-EL1EL0 / 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    : 使能系统寄存器访问接口
常见误区:认为“安全中断一定优先于普通中断”。实际上优先级由 GIC 的优先级字段决定,若配置不当,普通世界的高优先级中断可能长时间占用 CPU,导致安全世界响应延迟,影响指纹解锁、支付等实时安全业务。

四、典型应用场景

TrustZone 的价值在于为高敏感操作提供一个“即使普通系统被攻破也依然可信”的执行环境。典型场景包括:

  • 移动支付与数字版权:密钥、证书保存在安全世界,支付签名在 TEE 内完成,普通系统只能拿到签名结果。
  • 生物特征识别:指纹、人脸模板存于安全内存,比对在 TEE 内执行,防止模板被窃取。
  • DRM 内容保护:解密密钥与解密流程位于安全世界,明文音视频不进入普通内存。
  • 安全启动与固件校验:由安全世界逐级校验普通世界镜像签名,构建信任链。
  • 车规与工业控制:安全世界承载功能安全监控逻辑,与普通世界的应用逻辑隔离。
判断一个业务是否适合放入 TrustZone,可以问三个问题:它是否涉及密钥或隐私数据?它是否要求即使普通系统被攻破也不能泄露?它的实时性是否在 TEE 可承受范围内?三者都满足时,TrustZone 才是合适选择。

五、架构总览与复盘

下图给出 TrustZone 基础架构的整体关系:CPU 通过 NS 位区分两个世界,安全监控器负责切换,TZASC/TZPC 负责地址与外设隔离,GIC 负责中断路由,两个世界各自运行独立操作系统并承载不同业务。

TrustZone 基础架构总览 CPU Core NS 位:0=安全世界 / 1=普通世界 安全世界 Secure World 可信 OS:OP-TEE / Trusty 安全 DRAM · 密钥 · 生物模板 加解密引擎 · OTP · 安全定时器 特权层:EL3 + S-EL1 普通世界 Normal World 富 OS:Linux / Android 普通 DRAM · 应用数据 显示 · USB · 普通存储 特权层:EL0 / EL1 / EL2 安全监控器 Secure Monitor SMC 切换 · 上下文保存 · EL3 TZASC / TZPC 地址与外设隔离 GIC 中断控制器 Group0=FIQ / Group1=IRQ SMC 指令触发世界切换 · 硬件状态位贯穿总线事务 · 隔离由 TZASC/TZPC/GIC 共同保证

复盘来看,TrustZone 基础架构可以归纳为四句话:NS 位划分世界,SMC 完成切换,TZASC/TZPC 守住内存与外设,GIC 分流中断。掌握这四点,就掌握了后续性能优化与安全加固的出发点。实际工程中,绝大多数 TrustZone 安全问题并非来自架构本身,而是来自配置疏漏——例如 TZASC 区域未覆盖全部安全内存、GIC 分组配置错误、或安全世界与普通世界共享了未受保护的缓冲区。