TEE 全架构世界划分、切换节点与软件组件清单
TEE 全架构世界划分、切换节点与软件组件清单
整个 OP-TEE 体系基于 ARM TrustZone 硬件隔离技术构建,分为2 个硬件隔离世界 + 1 个中间监控层,对应 3 套独立软件系统;所有跨世界交互必须经过 EL3 监控层中转,由 CPU 硬件强制保证隔离性,不存在直接跨世界跳转的路径。
一、核心世界与对应软件系统划分
基于 ARMv8-A 特权级架构,三个执行环境的安全属性、运行层级与软件系统严格对应:
执行环境 | 安全属性 | 运行特权级 | 对应软件系统 | 核心定位 |
非安全世界(REE,富执行环境) | 非安全态 | EL0(用户态)、EL1(内核态) | Android/Linux 操作系统 | 普通业务、系统服务、应用进程的主要运行环境 |
EL3 监控层 | 安全态(最高特权) | EL3 | ATF(ARM Trusted Firmware-A)固件 | 世界切换的唯一硬件枢纽,负责 SMC 分发、上下文保存、安全状态切换 |
安全世界(TEE,可信执行环境) | 安全态 | S-EL0(用户态)、S-EL1(内核态) | OP-TEE OS 可信操作系统 | 敏感逻辑、密钥、机密数据的安全运行环境,硬件级隔离防护 |
关键说明:EL3 不属于任何一个世界,是独立的最高特权监控环境;两个世界的所有切换、状态变更都必须由 EL3 固件完成,这是 TrustZone 安全隔离的硬件根基。
二、全流程中的世界切换节点
以「TA 动态加载 + 会话建立」完整流程为例,全程共发生 4 次 SMC 触发、4 次世界状态切换,所有跳转均经过 EL3 中转:
1. 初始状态
运行于非安全世界,软件系统为 Linux 内核(EL1),正在处理应用发起的 TEEC_OpenSession 请求。
2. 第一次切换:REE → TEE(业务请求下发)
- 触发点:Linux 内核 OP-TEE 驱动执行 SMC #0 汇编指令
- 中转层:CPU 自动陷入 EL3,运行 ATF BL31 固件
- 终点:切换到安全世界,软件系统为 OP-TEE OS(S-EL1)
- ATF 行为:保存非安全世界寄存器上下文 → 修改 SCR_EL3.NS 切换为安全态 → 恢复安全世界上下文 → 跳转至 OP-TEE 的 SMC 处理入口
3. 第二次切换:TEE → REE(RPC 反向请求)
- 触发点:OP-TEE OS 发现目标 TA 未加载,构造 RPC 请求后执行 SMC 返回指令
- 中转层:再次陷入 EL3,运行 ATF 固件
- 终点:切回非安全世界,回到 Linux 内核的 SMC 调用返回点
- ATF 行为:保存安全世界上下文 → 切换为非安全态 → 恢复非安全世界上下文 → 返回 Linux 内核驱动逻辑
4. 第三次切换:REE → TEE(RPC 结果回传)
- 触发点:Linux 内核完成 RPC 处理(tee-supplicant 读取 TA 文件到共享内存),再次执行 SMC 指令
- 中转层:EL3 ATF 固件
- 终点:切回安全世界,OP-TEE OS 继续执行 TA 校验与加载逻辑
5. 第四次切换:TEE → REE(业务最终返回)
- 触发点:OP-TEE OS 完成 TA 校验加载、会话创建,执行 SMC 返回指令
- 中转层:EL3 ATF 固件
- 终点:最终回到非安全世界,Linux 内核将会话建立结果逐层返回用户态应用
三、各世界的软件组件明细
1. 非安全世界(REE):Android/Linux 软件系统
(1)用户态组件(EL0 特权级)
组件名称 | 核心职责 | 对应源码路径(Android 生态) |
CA(客户端应用) | TEE 服务的调用方,通过标准 API 发起加密、密钥存储等安全请求 | 第三方应用、系统应用(如 Keystore 客户端) |
libteec 库 | GlobalPlatform TEE Client API 标准实现,封装 ioctl 系统调用,对接内核驱动 | external/optee_client/libteec/ |
tee-supplicant 守护进程 | 特权守护进程,独占/dev/teepriv0 设备,处理安全世界反向 RPC,代理 TA 加载、文件访问、RPMB 操作 | external/optee_client/tee-supplicant/ |
(2)内核态组件(EL1 特权级)
组件名称 | 核心职责 | 对应源码路径(Linux 5.10) |
TEE 核心子系统 | 通用抽象层,注册 /dev/tee0 字符设备,统一管理上下文、会话、共享内存 | drivers/tee/tee_core.c tee_shm.c tee_bus.c |
OP-TEE 驱动 | OP-TEE 硬件适配层,封装消息协议、SMC 调用、中断处理、RPC 分发逻辑 | drivers/tee/optee/core.c call.c shm.c supp.c |
SMCCC 架构层 | ARM SMC 调用标准封装,底层汇编触发 SMC #0 指令,处理寄存器参数 | arch/arm64/kernel/smccc-call.S include/linux/arm-smccc.h |
2. EL3 监控层:ATF 固件系统
该层为纯固件代码,运行在 CPU 最高特权级,随系统启动固化执行:
组件名称 | 核心职责 | 对应源码路径 |
ATF BL31 核心固件 | EL3 运行时主体,实现异常向量表、SMC 通用处理、电源管理、安全状态切换 | arm-trusted-firmware/bl31/ |
OP-TEE SPD(安全负载分发器) | ATF 内置的 OP-TEE 专属分发模块,负责 TEE 类 SMC 请求路由、OP-TEE 生命周期管理 | arm-trusted-firmware/services/spd/opteed/ |
3. 安全世界(TEE):OP-TEE OS 软件系统
(1)内核态组件(S-EL1 特权级)
组件名称 | 核心职责 | 对应源码路径 |
OP-TEE OS 内核 | 安全世界操作系统主体,提供任务调度、内存管理、中断处理、驱动框架 | optee_os/core/ |
TA 加载管理模块 | 负责 TA 镜像的签名校验、内存加载、会话创建、资源隔离 | optee_os/core/tee/ta_load.c |
加密服务框架 | 硬件加密引擎驱动、密码算法实现,为上层 TA 提供标准加密接口 | optee_os/core/crypto/ |
RPC 框架 | 反向调用封装,向 REE 侧发起文件、RPMB 等服务请求 | optee_os/core/arch/arm/kernel/ |
(2)用户态组件(S-EL0 特权级)
组件名称 | 核心职责 | 说明 |
TA(可信应用) | 安全业务逻辑的载体,每个 TA 运行在独立沙箱中,对应唯一 UUID | 例如指纹校验 TA、支付签名 TA、密钥管理 TA、安全存储 TA 等 |
四、架构安全边界总结
- 硬件强制隔离:两个世界的内存、外设、寄存器完全隔离,非安全世界无法直接访问安全世界的任何资源。
- 唯一入口管控:所有跨世界交互只能通过 SMC 指令发起,必须经过 EL3 ATF 的校验与分发,不存在旁路。
- 分层权限收敛:从 REE 应用 → 内核驱动 → ATF → TEE OS → TA,权限逐层收敛,每一层都做参数与边界校验。
- 单向可信传递:安全世界可以访问非安全共享内存,但会做严格地址校验;非安全世界绝对无法访问安全内存。
