2. TEE与REE架构:TEE(可信执行环境)与REE(富执行环境)的软件栈划分、OP-TEE与Trusty简介

2.1 REE与TEE:两种执行世界的划分

在ARM TrustZone技术中,整个系统被物理划分为两个独立的执行世界:REE(Rich Execution Environment,富执行环境)和TEE(Trusted Execution Environment,可信执行环境)。这种划分通过硬件总线级别的安全属性位(NS位)实现,确保两个世界之间的内存、外设和中断资源严格隔离。

核心原则:REE运行通用操作系统(如Linux、Android),功能丰富但安全性较低;TEE运行安全操作系统(如OP-TEE、Trusty),功能精简但安全性高。TEE无法直接访问REE的内存,反之亦然。
REE与TEE双世界架构图 REE 富执行环境 (Normal World) 用户空间应用(App) Linux / Android 内核 TEE驱动(OP-TEE/Trusty驱动) ARM TrustZone 硬件(NS位=1) 硬件隔离边界(NS位) TEE 可信执行环境 (Secure World) 可信应用(TA) TEE内核(OP-TEE OS / Trusty) 安全监控模式(Monitor Mode) ARM TrustZone 硬件(NS位=0) SMC调用

2.2 软件栈划分:从硬件到应用

REE和TEE各自拥有完整的软件栈,从底层硬件到上层应用形成独立体系。下表对比了两个世界的软件栈层次:

层次 REE(Normal World) TEE(Secure World)
应用层 普通App(Android APK、Linux应用) 可信应用(TA,如指纹比对、DRM解密)
框架/API层 Android Framework / Linux用户空间库 TEE内部API(GlobalPlatform TEE API)
内核层 Linux内核(含TEE驱动) TEE OS内核(OP-TEE OS / Trusty内核)
安全监控层 Monitor Mode(仅用于世界切换) Monitor Mode(处理SMC/中断路由)
硬件层 ARM Core(NS位=1)、非安全外设 ARM Core(NS位=0)、安全外设
关键理解:REE和TEE共享同一个物理CPU核心,但通过TrustZone扩展在硬件层面实现时间片和地址空间的完全隔离。Monitor Mode是唯一能访问两个世界配置寄存器的特权软件层。

2.3 世界切换机制:SMC与Monitor Mode

REE与TEE之间的通信通过SMC(Secure Monitor Call)指令触发。当REE需要调用TEE服务时,执行SMC指令,CPU陷入Monitor Mode,由Monitor软件保存当前世界上下文,恢复目标世界上下文,然后返回目标世界继续执行。

REE与TEE世界切换流程图 REE 执行 Monitor Mode TEE 执行 SMC 恢复TEE 返回REE(ERET)

2.4 OP-TEE与Trusty:主流TEE OS对比

目前业界最主流的两个开源TEE操作系统是OP-TEE和Trusty。它们都基于ARM TrustZone技术,但在设计哲学、社区生态和代码结构上存在显著差异。

2.4.1 OP-TEE(Open Portable Trusted Execution Environment)

OP-TEE由Linaro主导开发,是GlobalPlatform TEE标准规范的开源参考实现。其特点包括:

  • 开源友好:采用BSD许可证,社区活跃,支持多种ARM平台(Cortex-A系列)。
  • 标准化API:完整实现GlobalPlatform TEE Internal Core API和Client API,便于TA移植。
  • 模块化架构:支持动态加载TA、安全存储、加密加速器驱动框架。
  • 广泛使用:被大量嵌入式设备、IoT网关和移动设备采用。

2.4.2 Trusty(Trusty TEE)

Trusty由Google开发并开源,主要用于Android生态系统。其特点包括:

  • Android原生集成:与Android框架深度绑定,提供标准化的Keymaster、Gatekeeper等服务。
  • 轻量级内核:基于Little Kernel(LK)微内核,代码量小,适合资源受限场景。
  • 安全服务优先:内置指纹认证、DRM、支付等安全服务,通过Android的TEE API暴露。
  • 闭源驱动依赖:部分硬件适配层需要芯片厂商提供闭源二进制。
对比维度 OP-TEE Trusty
维护方 Linaro / 社区 Google
许可证 BSD Apache 2.0
内核基础 自有TEE内核(基于OP-TEE OS) Little Kernel(LK)
API标准 GlobalPlatform TEE标准 Google自定义TEE API
主要应用场景 嵌入式、IoT、通用安全 Android手机、平板
TA加载方式 动态加载(从REE文件系统或安全存储) 预编译集成到TEE镜像
社区活跃度 高(邮件列表、GitHub、Linaro Connect) 中(AOSP主线、Google Issue Tracker)
OP-TEE与Trusty架构对比图 OP-TEE 架构 TA(可信应用) OP-TEE OS 内核 GlobalPlatform TEE API 硬件抽象层(HAL) ARM TrustZone 硬件 Trusty 架构 TA(可信应用) Trusty 内核(基于LK) Google TEE API 硬件抽象层(HAL) ARM TrustZone 硬件

2.5 中断在双世界中的路由策略

TrustZone中断处理是TEE安全性的关键环节。ARM架构定义了三种中断类型,分别对应不同的路由策略:

  • FIQ(快速中断请求):通常路由到TEE(Secure World),用于处理安全关键事件(如安全定时器、加密引擎完成)。
  • IRQ(普通中断请求):通常路由到REE(Normal World),由Linux内核处理。
  • 安全中断(Secure Interrupt):由GIC(通用中断控制器)配置为安全组,始终路由到TEE。
安全注意事项:中断路由配置错误可能导致安全漏洞。例如,将安全中断错误地路由到REE,可能使恶意App劫持安全服务。生产环境中必须通过GIC安全配置寄存器(GICD_IGROUPn)严格区分中断归属。

2.6 实践要点:选择TEE OS的决策因素

在实际项目中,选择OP-TEE还是Trusty需要综合考虑以下因素:

  1. 目标平台:OP-TEE支持更广泛的ARM SoC(如NXP i.MX、TI AM65x、Rockchip);Trusty主要针对高通、联发科等移动芯片。
  2. 生态需求:如果产品需要接入Android生态(如手机、平板),Trusty是更直接的选择;如果是通用嵌入式设备,OP-TEE的社区支持和文档更丰富。
  3. 安全认证:OP-TEE已有GlobalPlatform认证的商用版本,适合需要金融级安全认证的场景。
  4. 开发资源:OP-TEE的TA开发使用标准C语言和GlobalPlatform API,学习曲线平缓;Trusty的TA开发需要熟悉LK内核编程模型。