1. 课程导入

在嵌入式与物联网设备中,安全不再只是软件层面的加密算法问题。攻击者可以通过调试接口、DMA、外设寄存器、共享内存等路径绕过操作系统权限,直接读取密钥或篡改控制流。ARM TrustZone 技术通过在处理器、总线、内存与外设之间建立硬件级的安全隔离边界,把系统划分为安全世界(Secure World)与非安全世界(Normal World),为可信执行环境提供基础。本课程的目标,是让学习者不仅理解 TrustZone 的架构概念,更能完成安全世界搭建、外设隔离配置与工程化验证。

一、学习目标:从概念到可运行工程

本课程围绕“能看懂、能配置、能调试、能验证”四个层次展开。完成学习后,你应当能够:

  • 解释 TrustZone 的地址空间划分、安全状态切换与异常级别关系;
  • 使用 TF-A、OP-TEE 或厂商安全固件搭建最小安全世界;
  • 通过 TZASC、TZPC、SAU/IDAU 等组件完成内存与外设隔离;
  • 编写安全服务与非安全客户端之间的通信接口;
  • 定位隔离失效、外设访问异常与启动链断裂等典型问题。
核心判断:TrustZone 不是“加一个安全核”,而是在同一颗芯片内建立两套可切换的执行环境,并用硬件过滤器约束谁能访问哪些资源。

二、核心概念:安全边界如何形成

TrustZone 的安全边界由多个硬件组件共同构成。处理器侧的 SCR.NS 位决定当前处于安全还是非安全状态;SAU(Secure Attribution Unit)与 IDAU(Implementation Defined Attribution Unit)负责定义地址的安全属性;总线侧的 TZASC 控制内存区域访问权限,TZPC 控制外设端口安全属性。安全世界通常运行可信固件与安全服务,非安全世界运行 Linux、RTOS 或裸机应用。

安全世界与非安全世界之间的切换通过 SMC 指令触发,进入 EL3 监控器后由安全固件决定是否转发到可信 OS。共享内存是两世界通信的常用载体,但必须配合缓存一致性维护与访问权限检查,否则会形成数据泄露或篡改通道。

TrustZone 安全世界与外设隔离整体框架 安全世界 Secure World 可信固件 / BL31 OP-TEE / 安全OS 可信应用 TA:密钥管理、安全存储、加解密 非安全世界 Normal World Linux / RTOS 普通应用 / 驱动 REE 客户端:调用安全服务、共享内存交互 EL3 监控器 / SMC 切换 SCR.NS 控制安全状态,异常向量完成世界切换 硬件隔离与资源过滤层 SAU / IDAU 地址安全属性划分 TZASC 内存区域访问控制 TZPC 外设端口安全属性 DMA / 外设 受控访问与隔离 禁止直接访问 禁止直接访问

三、整体框架:启动链与隔离层次

典型 TrustZone 系统的启动链从 BootROM 开始,依次加载 BL1、BL2、BL31(EL3 运行时)、BL32(可信 OS)与 BL33(非安全引导)。BL31 负责建立安全世界运行环境并常驻 EL3,处理来自两个世界的 SMC 调用。BL32 通常是 OP-TEE,提供可信应用加载与安全服务。BL33 进入非安全世界,运行 U-Boot 与操作系统。

外设隔离工程的关键在于:在启动早期就完成 TZASC/TZPC 配置,避免非安全世界抢先访问敏感外设;同时为安全世界保留独立的中断、时钟、复位与 DMA 通道。若隔离配置晚于非安全驱动初始化,攻击者可能利用时间窗口完成数据窃取。

隔离对象 典型硬件组件 配置时机 常见风险
内存区域 TZASC / MPU / SAU BL2 或 BL31 早期 安全内存被非安全世界读写
外设端口 TZPC / 外设防火墙 BL2 阶段 调试串口、加密引擎被非法访问
中断与异常 GIC 安全分组 BL31 初始化 安全中断被非安全世界劫持
DMA 通道 DMA 控制器安全属性 驱动加载前 DMA 绕过 CPU 权限读取密钥

四、实战路线图与常见误区

课程后续将按照“环境搭建 → 安全启动 → 内存隔离 → 外设隔离 → 安全服务 → 调试与验证”的路线推进。建议先使用 QEMU 或开发板运行 TF-A + OP-TEE 最小系统,再逐步加入 TZASC/TZPC 配置,最后编写自定义 TA 与 CA 完成端到端验证。

# 典型构建与启动观察点
make PLAT=qemu \
     BL32=optee.bin \
     BL33=u-boot.bin \
     all

# 启动日志中应关注
NOTICE:  BL31: TrustZone enabled
NOTICE:  BL32: OP-TEE initialized
NOTICE:  TZASC region 0: secure
NOTICE:  TZPC peripheral 3: secure
常见误区一:认为只要启用 TrustZone,所有外设就自动安全。实际上 TZASC/TZPC 必须显式配置,未配置区域通常默认归非安全世界。误区二:忽略共享内存的缓存一致性,导致安全世界读到旧数据。误区三:在非安全世界加载完成后再配置隔离,留下攻击窗口。
学习建议:每完成一个隔离模块,都用非安全世界尝试非法访问并观察是否触发总线错误或异常。能复现失败,才说明隔离真正生效。

TrustZone 安全世界与外设隔离工程的核心,是把“信任”从软件假设转化为硬件可验证的访问规则。掌握启动链、隔离组件与调试方法后,你就能在真实芯片上构建可度量、可验证的安全边界。