2. TEE架构概览:从规范到硬件隔离
这一章,我们来聊聊TEE的整体架构。说实话,很多刚入行的朋友容易把TEE想得太神秘。其实说白了,它就是一套在安全世界里运行的迷你操作系统,有自己的内核、驱动和应用。我最早接触TEE时也犯过迷糊,以为它就是个黑盒子。后来踩过几次坑才明白——搞清楚架构,后面做启动适配才能少走弯路。
2.1 GlobalPlatform TEE规范——TEE界的“宪法”
GlobalPlatform(简称GP)是一个国际标准组织,它定义了TEE应该长什么样。你可以把它理解成TEE行业的“宪法”——各家芯片厂商(ARM、高通、MTK等)都得按这个规矩来。
GP规范主要规定了三件事:
- TEE内部架构:组件怎么划分,谁管谁
- 安全通信协议:REE(普通世界)和TEE怎么说话
- API标准:TA(可信应用)怎么调用TEE服务
我个人习惯把GP规范分成两个层面来看:
| 层面 | 内容 | 我的理解 |
|---|---|---|
| TEE内部架构 | OS、Trusted Kernel、TA的职责划分 | 相当于TEE的“三权分立” |
| REE-TEE通信 | Client API、共享内存、SMC调用 | 两个世界之间的“外交渠道” |
2.2 TEE内部组件——拆开看看里面都有啥
一个典型的TEE系统,内部有三个核心组件。嗯,咱们一个一个来看。
2.2.1 TEE OS(可信操作系统)
TEE OS是整个安全世界的“大管家”。它负责:
- 管理安全内存和中断
- 调度TA的执行
- 提供密码学服务
- 处理来自REE的SMC请求
常见的TEE OS有:OP-TEE(开源)、Trusty(Google)、QSEE(高通)、Kinibi(Trustonic)。我在项目中用过OP-TEE和QSEE,说实话,OP-TEE的代码结构更清晰,适合学习;QSEE的闭源部分比较多,调试起来有点头疼。
2.2.2 Trusted Kernel(可信内核)
这里要注意一个容易混淆的点:有些文档把TEE OS直接叫“Trusted Kernel”,但严格来说,Trusted Kernel是TEE OS内部最核心的那一层——它负责:
- 内存管理(MMU配置、页表管理)
- 中断处理(安全中断路由)
- 上下文切换(TA之间的切换、REE与TEE的切换)
说白了,Trusted Kernel就是TEE的“微内核”。它比Linux内核小得多,但实时性要求更高。我曾经在调试一个中断响应超时的问题时,发现是Trusted Kernel里的中断优先级配置错了——那一次让我深刻理解了“微内核不是小内核,而是精内核”。
2.2.3 Trusted Applications(可信应用,TA)
TA是运行在TEE里的安全应用。比如:
- 指纹比对TA
- 支付密钥管理TA
- DRM解密TA
TA和普通App最大的区别是:TA不能直接访问外设,所有I/O都得通过TEE OS代理。你想想看,这其实是一种“最小权限”的设计——TA就算被攻破,也搞不坏硬件。
2.3 硬件隔离基础——TrustZone与TrustZone-M
软件架构再牛,没有硬件隔离也是白搭。ARM的TrustZone技术就是TEE的“地基”。
2.3.1 TrustZone(Cortex-A系列)
TrustZone把CPU核心分成两个“世界”:
- Normal World(普通世界):跑Linux/Android
- Secure World(安全世界):跑TEE OS
切换靠一条指令——SMC(Secure Monitor Call)。硬件上,TrustZone通过:
- NS位(Non-Secure bit):标记内存和外设属于哪个世界
- Monitor Mode:负责世界切换的“海关”
- TZASC(TrustZone Address Space Controller):控制DDR内存区域的访问权限
来实现隔离。我刚开始做TEE时,一直搞不懂为什么SMC调用那么慢——后来测了一下,一次世界切换大概要几百个CPU周期。所以,别频繁切来切去,能批量处理就批量处理。
2.3.2 TrustZone-M(Cortex-M系列)
TrustZone-M是ARM针对MCU(微控制器)推出的简化版TrustZone。它和Cortex-A版的主要区别:
| 特性 | TrustZone(Cortex-A) | TrustZone-M(Cortex-M) |
|---|---|---|
| 切换方式 | SMC指令 + Monitor Mode | SG指令 + SAU/IDAU |
| 内存隔离 | TZASC + MMU页表 | SAU(Security Attribution Unit) |
| 中断处理 | GIC路由安全中断 | NVIC + 安全中断号 |
| 典型场景 | 手机、平板、服务器 | IoT设备、传感器、汽车ECU |
TrustZone-M没有MMU,所以内存隔离靠SAU的“区域属性”来实现。说白了,就是给每块内存打个标签——是安全的还是非安全的。我在一个IoT项目里用过TrustZone-M,当时最头疼的是中断隔离:一个非安全中断如果误闯了安全内存,系统直接HardFault。嗯,调试这种问题,得有耐心。
2.4 架构总览图——一张图看懂TEE
下面这张图,是我自己画的一个TEE架构总览。它把上面讲的内容串在了一起。你盯着看两分钟,应该就能建立起整体印象。
这张图里,你重点关注两个地方:
- 中间的SMC箭头:这是两个世界唯一的“官方通道”。所有数据交换都得经过它。
- 底部的硬件隔离层:TrustZone/TrustZone-M是TEE存在的物理基础。没有它,TEE OS就是个纸老虎。
好了,这一章的内容就这些。你先把架构图记在脑子里,后面讲启动流程时,我们会反复提到这些组件和它们之间的交互关系。