可信执行环境(TEE, Trusted Execution Environment)能够在普通操作系统(Normal World)之外提供一个隔离执行环境(Secure World),用于保护密钥、敏感计算逻辑和可信服务接口。本实验要求基于 OP-TEE 环境,设计并实现一个 安全 HMAC 服务:
- 在 TA(Trusted Application) 中安全生成/保存 HMAC 密钥,并在 TA 内完成 HMAC-SHA256 运算;
- 在 CA(Client Application) 中调用 TA 提供的命令接口,实现密钥管理、消息认证码生成、认证码校验等功能;
- 在 OP-TEE QEMU(Buildroot)环境中完成部署、运行与测试,记录实验现象与问题分析。
- 理解 Normal World / Secure World 的基本职责划分;
- 理解 OP-TEE 中 CA ↔ tee-supplicant ↔ TEE Core ↔ TA 的调用路径;
- 掌握 TA 的基本结构与生命周期(Create/OpenSession/InvokeCommand/CloseSession);
- 掌握 CA 通过
libteec调用 TA 的方法(Context / Session / Operation); - 实现一个具备实际安全意义的 TEE 服务(密钥在 TA 内生成与使用);
- 在 QEMU + Buildroot 环境中完成部署、测试和问题定位。
-
Ubuntu 22.04/24.04
-
OP-TEE QEMU 环境(配置说明见
env/README.md) -
GCC / Make / Git
-
OP-TEE 相关组件:
optee_osoptee_clienttrusted-firmware-au-bootlinuxbuildrootqemu
任务:成功编译全栈镜像并启动 QEMU,需同时展示 Normal World 和 Secure World 两个控制台 。
要求:在 Normal World 运行 xtest 进行基准测试,并截取 Secure World 窗口输出的初始化日志。
实现一个最小可用的 OP-TEE 应用工程,完成 TA 与 CA 的基础调用闭环。
要求:
-
正确划分工程目录(
host/、ta/、include/等); -
定义 TA UUID,并在 CA 与 TA 中保持一致;
-
CA 能成功:
- 初始化
TEEC_Context - 打开
TEEC_Session - 调用至少一个 TA 命令(如
CMD_PING/CMD_INFO)
- 初始化
-
TA 返回成功状态码,CA 正确打印结果。
验收点:
- 能展示 TA 被成功加载(放置于
/lib/optee_armtz/); - 能展示 CA 在 Buildroot 中执行成功;
- 能说明一次调用链条的关键步骤。
在 TA 内生成并保存 HMAC 密钥(建议 32 字节,用于 HMAC-SHA256),并提供状态查询接口。
要求:
-
TA 提供命令接口,例如:
CMD_GEN_KEY:生成新密钥(覆盖或首次生成)CMD_INFO:返回密钥状态(是否存在、长度等)
-
密钥必须在 TA 内部管理(禁止在 CA 端保存明文密钥)
-
CA 提供 CLI 命令调用(如
genkey、info)
验收点:
info在genkey前后状态变化正确;genkey成功后可用于后续 HMAC 运算。
实现 TA 内部的 HMAC 运算能力,CA 提供消息输入并输出十六进制 HMAC 值。
要求:
-
TA 提供
CMD_HMAC命令:- 输入:消息(字符串或字节数组)
- 输出:HMAC-SHA256(32字节)
-
CA 命令示例:
./secure_hmac_ca hmac "hello-optee"
-
输出格式规范:
- 以十六进制打印完整 32 字节结果
验收点:
- 对同一消息和同一密钥,输出稳定一致;
- 重新生成密钥后,同一消息输出变化;
- 正确处理缓冲区长度与参数类型。
在 TA 内部实现 HMAC 校验逻辑,CA 提供“消息 + 十六进制 MAC”输入进行验证。
要求:
-
TA 提供
CMD_VERIFY命令:- 输入:消息、待校验 MAC
- 输出:成功/失败状态
-
CA 命令示例:
./secure_hmac_ca verify "hello-optee" <hex_mac>
-
要求给出明确返回信息:
verify: OKverify: FAIL (MAC mismatch)
验收点:
- 正确 MAC 校验通过;
- 篡改消息或 MAC 后校验失败;
- 错误输入(长度不对、非 hex 字符)有基本处理。
实现的 CA 至少支持以下命令(可自行扩展):
./secure_hmac_ca info
./secure_hmac_ca genkey
./secure_hmac_ca hmac "hello-optee"
./secure_hmac_ca verify "hello-optee" <hex_mac>info:输出密钥是否存在、长度genkey:生成或覆盖密钥hmac:输出十六进制 HMACverify:输出验证结果(OK/FAIL)
tee_lab/
├── include/
│ └── secure_hmac_ta.h # CA/TA共享头文件(UUID、CMD定义)
├── host/
│ ├── main.c # CA实现(CLI + libteec 调用)
│ └── Makefile
├── ta/
│ ├── secure_hmac_ta.c # TA命令逻辑
│ ├── user_ta_header_defines.h # TA头定义(UUID、堆栈、标志)
│ ├── sub.mk
│ └── Makefile
└── README.md
-
设置
TA_DEV_KIT_DIR(指向optee_os/out/.../export-ta_arm64) -
编译 TA(在
tee_lab/ta/) -
编译 CA(在
tee_lab/host/) -
确认生成:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.tasecure_hmac_ca
- 启动
optee-qemu(进入 Secure/Normal World 窗口) - 在 QEMU Monitor 输入
c继续执行(如果启动停在(qemu)) - 等待 Buildroot 启动完成,登录
root
-
将 TA 拷贝到
/lib/optee_armtz/ -
将 CA 拷贝到
/root/ -
chmod +x /root/secure_hmac_ca -
运行测试:
infogenkeyhmacverify
- 正确性测试:同一输入同一密钥结果一致
- 失败测试:修改消息/MAC 后验证失败
- 记录日志与截图
- TA/CA 基础连通与命令调用(20分)
- 密钥生成与状态查询(15分)
- HMAC 计算(15分)
- HMAC 校验(10分)
- 工程结构清晰、文件组织合理(8分)
- 代码风格统一、注释清晰(6分)
- 错误处理与返回值判断较完整(6分)
- 环境/版本/步骤记录完整(8分)
- 关键现象截图与解释(6分)
- 问题定位与解决方案分析(6分)
- 使用 OP-TEE Persistent Object API 将 HMAC 密钥持久化到安全存储;
- 重启后仍能
info显示存在,并继续hmac/verify。
- 支持多 session 调用;
- 区分管理命令(
genkey)与普通命令(hmac/verify)的访问策略(可简化为 session 标志或口令)。
- 支持超过单次缓冲区上限的消息;
- 在 TA 内实现分块 HMAC 更新流程(或在 CA 层切分并设计接口)。
-
提供脚本自动执行:
genkey- 多组
hmac verify正反例测试
-
自动输出测试结果汇总。
- 对比密钥在 CA 中计算 HMAC与密钥在 TA 中计算 HMAC的攻击面差异;
- 分析 TEE 方案的边界。