1. 课程导入
在移动终端、车机、支付终端与物联网设备中,敏感数据(生物特征模板、支付令牌、DRM 密钥、设备身份私钥)一旦以明文形式落在普通文件系统里,就等于把保险柜钥匙挂在门把手上。OP-TEE 作为 ARM TrustZone 上最主流的开源可信执行环境,提供了从安全世界隔离、可信应用(TA)加载,到安全存储与密钥派生的一整套基础设施。本课程的目标,是让你从"会用 OP-TEE"进阶到"能设计并验证一套可信的密钥与数据保护方案"。
一、课程目标:三个层次的能力跃迁
本课程围绕三个层次组织能力目标。第一层是机制理解:能说清 OP-TEE 的启动链路、世界切换(SMC)、TA 与 CA 的会话模型,以及安全存储的底层对象组织方式。第二层是工程实现:能独立编写 TA/CA、调用 GP TEE Internal Core API 完成密钥生成、加解密、持久化与访问控制。第三层是安全验证:能识别常见误用(如密钥明文导出、IV 复用、回滚攻击),并用测试与日志手段定位问题。
核心判断标准:一个合格的 OP-TEE 安全存储方案,必须同时满足"密钥不出安全世界""数据具备机密性与完整性""版本可回滚检测"三条底线。
二、知识体系:四层结构
整个知识体系可以拆成四层,从硬件到应用逐层收敛。下图展示了这四层结构及其关键组成,也是本课程后续章节的骨架。
三、学习路径:从环境到方案
建议按"环境 → 机制 → 编码 → 验证"的顺序推进,避免一上来就啃源码。具体路径如下:
- 搭建可运行环境:优先使用 QEMU 版 OP-TEE(optee-qemu),无需真实开发板即可跑通 TA/CA。
- 跑通第一个 TA:编译 hello_world TA,理解 TA 的 UUID、入口函数与 CA 调用流程。
- 掌握安全存储 API:用
TEE_OpenPersistentObject、TEE_WriteObjectData完成一次持久化读写。 - 实现密钥服务:基于 HUK 派生密钥,完成 AES-GCM 加解密并落盘。
- 做安全复盘:检查密钥是否出安全世界、IV 是否唯一、是否启用 RPMB 防回滚。
四、实战环境搭建
推荐在 Ubuntu 22.04 上使用官方构建脚本,依赖包括 Python3、make、gcc、device-tree-compiler 等。核心步骤如下:
# 1. 安装依赖
sudo apt-get install -y android-tools-adb android-tools-fastboot \
autoconf automake bc bison build-essential ccache cscope \
curl device-tree-compiler flex gawk gettext git libfdt-dev \
libglib2.0-dev libgmp3-dev libmpc-dev libmpfr-dev libncurses5-dev \
libpixman-1-dev libssl-dev libtool mtools ninja-build \
pkg-config python3-pip python3-pyelftools rsync uuid-dev zlib1g-dev
# 2. 获取源码
mkdir -p ~/optee && cd ~/optee
repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml
repo sync -j4
# 3. 编译并启动 QEMU
cd build
make toolchains
make run
首次编译耗时较长(约 30~60 分钟)。若网络受限,可先只编译
make optee-os 验证工具链,再逐步补齐 TA 与 QEMU。
五、关键参数与工具清单
| 对象 | 作用 | 典型值/命令 |
|---|---|---|
| TA UUID | 可信应用唯一标识 | 5b9b3f8a-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
| HUK | 硬件唯一密钥,派生 FEK 的根 | 由 OTP/eFuse 提供,不可读出 |
| FEK | 文件加密密钥,保护安全文件 | 由 HUK + TA UUID 派生 |
| RPMB | 防回滚计数器存储 | 需设备支持 eMMC RPMB 分区 |
| xtest | OP-TEE 官方测试套件 | xtest / xtest 4001 |
六、常见误区与复盘
- 误区一:把密钥当普通数据存。密钥必须留在安全世界,CA 只能拿到句柄或密文结果。
- 误区二:忽略回滚保护。没有 RPMB 时,攻击者可替换旧版本安全文件,需在设计中明确风险。
- 误区三:IV 复用。AES-GCM 下 IV 复用会直接破坏机密性与完整性,必须每次随机或单调递增。
- 误区四:只测功能不测异常。应覆盖对象不存在、权限不足、存储满、签名校验失败等分支。
安全存储不是"加密文件系统"的同义词。OP-TEE 的安全存储强调"密钥与数据均受安全世界管控",若把明文密钥交给普通世界再加密,隔离价值将大幅削弱。