2. TrustZone基础

TrustZone 是 ARM 架构中用于构建可信执行环境的核心安全扩展。它并不是一个独立的安全芯片,而是通过硬件逻辑把同一颗处理器划分为两个相互隔离的世界:安全世界(Secure World)与非安全世界(Non-secure World)。理解这两个世界的边界、切换机制、异常级别以及典型应用场景,是后续学习中断安全与内存安全工程的基础。

一、核心原理:两个世界与一条安全总线

在 TrustZone 架构中,CPU 的每一条取指、访存和总线事务都会携带一个安全状态位,通常称为 NS 位(Non-secure bit)。当 NS=0 时,处理器处于安全状态;当 NS=1 时,处理器处于非安全状态。这个位不仅影响 CPU 自身,还会沿着总线传播到内存控制器、外设和中断控制器,从而在整个 SoC 层面形成两条逻辑通道:安全通道与非安全通道。

内存和外设被划分为安全资源与非安全资源。安全资源只能由安全世界访问,非安全世界即使知道物理地址也无法直接读写。这种隔离不是靠软件 MMU 配置实现的,而是由硬件总线过滤和 TZASC、TZPC 等组件强制执行。因此,即使非安全世界的操作系统被攻破,也无法直接篡改安全世界中的密钥、可信应用或安全固件。

关键点:TrustZone 的安全隔离是“硬件强制”的,不是“软件约定”的。安全世界与非安全世界共享同一套 CPU 核心、缓存和内存物理介质,但通过 NS 位和总线过滤实现逻辑隔离。

二、安全状态切换:从非安全到安全的受控入口

两个世界不能随意互相跳转。非安全世界进入安全世界必须经过一个受控入口,通常由 SMC(Secure Monitor Call)指令触发。SMC 会陷入到安全监控器(Secure Monitor),由它根据预定义的调用约定决定是否切换到安全世界。反过来,安全世界返回非安全世界时,通过 ERET 或监控器返回路径完成。

切换过程中,处理器会保存和恢复上下文,包括通用寄存器、部分系统寄存器和安全状态位。为了减少切换开销,TrustZone 还提供了 安全监视器 作为两个世界之间的“中间层”,它运行在最高的异常级别 EL3 上,负责调度和隔离。

非安全世界(Normal World)
    |
    |  SMC 指令
    v
安全监控器(Secure Monitor, EL3)
    |
    |  根据调用号分发
    v
安全世界(Secure World)
    |
    |  ERET 返回
    v
非安全世界(Normal World)

需要注意的是,SMC 并不是唯一入口。中断也可以触发世界切换,例如安全中断可以抢占非安全世界的执行流,进入安全世界处理后再返回。这种机制是 TrustZone 中断安全的关键。

三、异常级别:EL0 到 EL3 的权限分层

ARMv8-A 引入了异常级别(Exception Level, EL)的概念,TrustZone 的安全状态与异常级别共同构成权限模型。EL0 是用户态,EL1 是操作系统内核态,EL2 是虚拟化层,EL3 是安全监控器。安全世界和非安全世界都可以有自己的 EL0 和 EL1,但 EL3 始终属于安全世界。

异常级别 典型运行内容 安全状态归属
EL0 用户应用、可信应用 安全或非安全
EL1 操作系统内核、安全 OS 安全或非安全
EL2 Hypervisor 虚拟化层 通常非安全
EL3 安全监控器、固件 仅安全

EL3 是安全状态切换的“闸门”。它拥有最高的权限,可以访问安全和非安全资源,并负责配置 SCR_EL3 等寄存器来控制世界切换行为。EL2 则主要用于虚拟化场景,在非安全世界中管理多个虚拟机。

四、系统架构:从 CPU 到外设的安全扩展

一个典型的 TrustZone 系统架构包含以下关键组件:

  • CPU 核心:支持安全与非安全两种状态,通过 NS 位标记每次访问。
  • 安全监控器:运行在 EL3,负责世界切换和中断路由。
  • TZASC:TrustZone Address Space Controller,把 DRAM 划分为安全和非安全区域。
  • TZPC:TrustZone Protection Controller,控制外设的安全属性。
  • GIC:中断控制器支持安全中断和非安全中断的分组与路由。
  • 安全存储:如 eFuse、OTP、安全 SRAM,用于保存密钥和可信根。

这些组件共同构成一个“安全边界”。非安全世界只能看到非安全资源,安全世界则可以通过监控器访问两者。中断控制器尤其重要,因为它决定了中断是进入安全世界还是非安全世界处理,直接影响系统的实时性和安全性。

TrustZone 系统架构与安全状态切换 非安全世界(Normal World) 非安全应用(EL0) 非安全 OS / Hypervisor(EL1/EL2) NS=1,只能访问非安全资源 安全世界(Secure World) 可信应用(EL0) 安全 OS / 安全固件(EL1) NS=0,可访问安全与非安全资源 安全监控器(Secure Monitor, EL3) SMC 入口 / 世界切换 / 中断路由 SMC 调用 ERET 返回 中断/异常 硬件资源与安全扩展 TZASC TZPC GIC 中断控制器 安全存储 DRAM

五、典型应用场景与常见误区

TrustZone 的典型应用场景包括:移动支付中的密钥保护、数字版权管理(DRM)、安全启动、生物特征识别、车联网安全通信以及工业控制中的可信执行环境。在这些场景中,安全世界负责处理敏感数据和密钥,非安全世界负责运行通用操作系统和普通应用。

场景示例:手机指纹支付时,指纹图像采集和比对在安全世界完成,支付应用运行在非安全世界。非安全世界只能拿到“验证通过/失败”的结果,无法获取原始指纹数据或密钥。

常见误区:认为“有了 TrustZone 就绝对安全”。实际上,TrustZone 只提供隔离机制,安全世界自身的代码质量、安全监控器的实现、中断路由配置以及共享内存的通信协议,都可能成为攻击面。如果安全世界存在漏洞,攻击者仍可能通过合法入口提权。

另一个误区是忽略缓存和共享内存的一致性。安全世界与非安全世界共享缓存时,必须通过严格的内存屏障和缓存维护操作,防止数据残留或侧信道泄露。在工程实践中,通常要求安全世界与非安全世界之间的共享内存区域使用非缓存或严格同步的访问方式。

总结来说,TrustZone 通过 NS 位、安全监控器、异常级别和总线过滤,构建了一个硬件强制的双世界隔离模型。掌握安全状态切换路径、EL3 的枢纽作用以及 TZASC/TZPC/GIC 的协同关系,是后续设计安全中断处理和内存隔离方案的前提。