2. TEE基础概念:TEE定义、GP TEE标准、TEE与REE隔离机制、TEE安全启动流程
好,我们正式开始聊TEE。很多刚接触这个领域的同学,一上来就被各种缩写搞晕了——TEE、REE、GP、TA、CA……别急,咱们一个一个拆开讲。这一章我带你把这些基础概念彻底吃透。
2.1 到底什么是TEE?
TEE,全称Trusted Execution Environment,中文叫可信执行环境。说白了,它就是在主处理器内部划出一块“安全飞地”。这块飞地跟普通的操作系统(也就是REE,Rich Execution Environment)是隔离的。
我习惯这么跟人解释:你的手机里其实住了两个“系统”。一个是你日常用的Android或iOS,跑应用、刷视频、聊,这叫REE。另一个是藏在里面的TEE,它只干一件事——处理敏感数据,比如指纹比对、支付密钥、人脸特征。
REE这边,就算被root了、被恶意软件搞了,也碰不到TEE里的数据。为什么?因为硬件层面就给你隔开了。
核心要点:TEE不是软件虚拟化出来的沙箱,而是基于硬件隔离的安全区域。它有自己的执行空间、内存、存储和外设访问权限。
我在项目中遇到过不少开发人员,以为TEE就是个“更安全的APP”。其实不是。TEE里跑的是Trusted Application(TA),它们跟REE里的普通应用完全不在一个世界。TA不能直接访问REE的内存,REE也不能直接调用TA的代码——必须通过专门的通信机制。
2.2 GP TEE标准——行业统一的“普通话”
早期各家TEE实现都是各玩各的。高通有QTEE,华为有iTrustee,Trustonic有Kinibi……每个厂商的接口都不一样。你写了一个TA,换颗芯片就得重写。这谁受得了?
GlobalPlatform(GP)组织站了出来,制定了一套TEE标准接口。现在,GP TEE基本成了行业事实标准。我建议你直接把它当作TEE开发的“普通话”来学。
GP标准主要定义了这么几层:
| 层次 | 说明 | 我关注的点 |
|---|---|---|
| TEE Core Framework | TA的加载、调度、内存管理 | 这部分决定了TA怎么跑起来 |
| TEE Internal API | TA内部调用的API(加解密、存储等) | 写TA代码时天天跟它打交道 |
| TEE Client API | REE侧CA调用TEE的接口 | CA和TA通信的桥梁 |
| TEE Sockets API | 网络通信扩展 | 有些场景TA需要联网,靠这个 |
嗯,这里要注意:GP标准只定义了接口规范,没规定你怎么实现。所以不同厂商的TEE虽然API长得一样,但底层的安全强度、性能表现可能差很多。选型的时候一定要实测。
我的经验:做国密算法适配时,GP TEE Internal API里的加密接口是核心。但GP标准里没有直接定义SM2/SM3/SM4,需要你自己实现或找厂商扩展。这个我们后面章节会详细讲。
2.3 TEE与REE的隔离机制——硬件说了算
隔离是TEE的命根子。没有隔离,TEE就是个笑话。那到底怎么隔离的?
我把它分成三个层面:
2.3.1 内存隔离
这是最基础的。ARM处理器用TrustZone技术,把物理内存分成安全世界(Secure World)和普通世界(Normal World)。TEE跑在安全世界,REE跑在普通世界。硬件总线层面就做了访问控制——REE的代码根本看不到安全世界的内存地址。
你想想看,就算REE被攻破了,攻击者拿到了所有内存的dump,也读不到TEE里的密钥。因为硬件直接拒绝了访问请求。
2.3.2 外设隔离
有些外设是敏感的,比如指纹传感器、安全键盘、eSE(嵌入式安全元件)。这些设备只能被TEE访问。REE想碰?门都没有。
我记得有一次做项目,客户问能不能让REE直接读取指纹数据做预处理。我说不行,指纹数据从传感器出来就必须直接进TEE,REE碰都不能碰。这是安全基线,没得商量。
2.3.3 中断和异常隔离
REE里的中断不能打断TEE的执行。TEE跑的时候,硬件会把某些中断屏蔽掉,或者路由到安全世界处理。这保证了TEE里的敏感操作不会被REE干扰。
避坑指南:我曾经遇到过一个案例,某厂商的TEE实现里,安全中断处理没做好,导致REE可以通过特定中断序列让TEE崩溃。这就是隔离没做到位。选TEE方案时,一定要确认中断隔离的完整性。
2.4 TEE安全启动流程——信任链的起点
安全启动,英文叫Secure Boot。它的目标很简单:确保你加载的TEE镜像是厂商签过名的、没被篡改过的。
流程大概是这样的:
- ROM Code启动:芯片上电后,最先执行的是固化在ROM里的代码。这段代码是只读的,改不了。它验证下一级Bootloader的签名。
- Bootloader验证:Bootloader验证通过后,加载TEE的镜像。TEE镜像必须携带厂商的数字签名。
- TEE内核加载:签名验证通过,TEE内核才被加载到安全内存里执行。
- TA加载:TEE启动后,加载Trusted Application时,同样要验签。
每一级都验签,形成一条信任链。只要有一级验签失败,系统就拒绝启动。
我画了一张图,帮你理解这个流程:
这个流程里,最关键的是第一级——ROM Code。它必须是真的不可篡改的。有些芯片的ROM Code有漏洞,可以被绕过,那整个信任链就崩塌了。
我的建议:做产品选型时,一定要确认芯片厂商是否提供了安全启动的完整方案。有些低端芯片为了省成本,把安全启动阉割了,或者只做了部分实现。这种芯片做TEE,基本等于裸奔。
2.5 小结一下
这一章我们聊了TEE的四个核心概念:
- TEE定义:硬件隔离的安全执行环境,跟REE完全隔开
- GP TEE标准:行业统一的接口规范,让TA和CA可以跨平台
- 隔离机制:内存、外设、中断三个层面的硬件隔离
- 安全启动:从ROM Code到TA的逐级签名验证,构建信任链
这些概念是后面所有内容的基础。尤其是隔离机制和安全启动,直接决定了TEE的安全强度。做国密算法适配时,你写的TA能不能安全地存储密钥、能不能安全地执行加解密,全靠这些底层机制撑着。