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的内存,反之亦然。
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软件保存当前世界上下文,恢复目标世界上下文,然后返回目标世界继续执行。
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 / 社区 | |
| 许可证 | 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) |
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需要综合考虑以下因素:
- 目标平台:OP-TEE支持更广泛的ARM SoC(如NXP i.MX、TI AM65x、Rockchip);Trusty主要针对高通、联发科等移动芯片。
- 生态需求:如果产品需要接入Android生态(如手机、平板),Trusty是更直接的选择;如果是通用嵌入式设备,OP-TEE的社区支持和文档更丰富。
- 安全认证:OP-TEE已有GlobalPlatform认证的商用版本,适合需要金融级安全认证的场景。
- 开发资源:OP-TEE的TA开发使用标准C语言和GlobalPlatform API,学习曲线平缓;Trusty的TA开发需要熟悉LK内核编程模型。