OP-TEE Secure Storage 与 Sign/Verify 实战总结
本文系统梳理了OP-TEE中Secure Storage与Sign/Verify两大核心功能,为构建安全系统提供基础支撑。Secure Storage本质是TEE内部可信持久状态,适合存储密钥、校验值等小型数据而非大文件,采用极简文件系统抽象。Sign/Verify功能确保"密钥不出TEE",通过签名验证保障数据来源可信。文章详细介绍了对象创建、读写操作以及密钥生成、签名验证等
📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
OP-TEE Secure Storage 与 Sign/Verify 实战总结
定位说明:
本文并不试图“直接解决模型加密或 IP 保护问题”,而是从工程基础角度,系统梳理 OP-TEE 中 Secure Storage 与 Sign / Verify 两个核心能力。它们的价值在于:
- 帮助你真正理解 CA / TA 架构
- 熟悉 TEE Core API 的使用方式与设计哲学
- 为后续「密钥保护 / 模型加密 / License / DRM」打下可复用的安全基础
一、整体视角:CA / TA / TEE 在干什么?
在进入 API 之前,必须先建立正确的心智模型。
1.1 CA / TA 的职责划分
REE (Normal World)
└── CA (Client Application)
- 文件系统
- 网络
- UI
- 不可信
TEE (Secure World)
└── TA (Trusted Application)
- 密钥
- 安全运算
- 安全存储
- 可信
核心原则只有一句话:
👉 REE 负责“搬数据”,TEE 负责“做决定 + 管密钥”
二、Secure Storage:不是“加密文件”,而是“可信状态”
2.1 Secure Storage 的真实定位
很多初学者会误解:
❌ Secure Storage = 安全 U 盘 / 加密磁盘
实际上:
✅ Secure Storage = TEE 内部的可信持久状态
它最适合存的是:
- 私钥
- 对称密钥
- Counter / Version
- Hash / 校验值
- License 状态
而不适合:
- 大文件
- 模型本体

2.2 Persistent Object 的文件模型
OP-TEE 把 Secure Storage 设计成了一个极简文件系统抽象:
| 概念 | 类比 | 说明 |
|---|---|---|
| Object ID | 文件名 | 你自己定义 |
| Object Data | 文件内容 | 原始 bytes |
| Object Handle | fd | 打开后的句柄 |
没有字段、没有成员、没有 schema ——
👉 一切结构,都由你自己定义。
2.3 创建对象(实战代码)
TEE_Result res;
TEE_ObjectHandle object;
res = TEE_CreatePersistentObject(
TEE_STORAGE_PRIVATE,
obj_id, obj_id_sz,
TEE_DATA_FLAG_ACCESS_READ |
TEE_DATA_FLAG_ACCESS_WRITE,
TEE_HANDLE_NULL,
NULL, 0,
&object);
这一步只做一件事:
👉 创建一个“空对象容器”
此时:
- 没有数据
- 没有结构
2.4 写入与读取(关键理解)
写入
TEE_WriteObjectData(object, &secure_data, sizeof(secure_data));
读取
TEE_ReadObjectData(object, &secure_data, sizeof(secure_data), &read_bytes);
⚠️ 关键认知点:
Secure Storage 只是一个 byte stream,
你必须自己保证:
- 结构一致
- 版本兼容
- 长度正确
2.5 一个“推荐结构模式”
struct secure_blob {
uint32_t version;
uint8_t key[32];
uint32_t counter;
};
实践经验:
- 永远带
version - 永远整体读写
- 不要拆成很多零散字段
三、Sign / Verify:理解“密钥不出 TEE”
如果说 Secure Storage 是 状态,
那么 Sign / Verify 是 能力。
3.1 为什么要做 Sign / Verify?
现实问题:
- REE 不可信
- 文件可能被替换
- 参数可能被篡改
TEE 能提供的保证:
👉 只要签名通过,数据一定来自“拥有私钥的一方”
3.2 密钥生成(TA 内部)
TEE_ObjectHandle key;
TEE_AllocateTransientObject(
TEE_TYPE_RSA_KEYPAIR,
2048,
&key);
TEE_GenerateKey(key, 2048, NULL, 0);
✔ 私钥永远不出 TEE
✔ CA 永远拿不到
3.3 签名流程(TA)
TEE_OperationHandle op;
TEE_AllocateOperation(
&op,
TEE_ALG_RSASSA_PKCS1_V1_5_SHA256,
TEE_MODE_SIGN,
2048);
TEE_SetOperationKey(op, key);
TEE_DigestDoFinal(op, data, data_len, hash, &hash_len);
TEE_AsymmetricSignDigest(op, NULL, 0, hash, hash_len, sig, &sig_len);
关键理解:
TA 并不是在“加密数据”,
而是在对“数据摘要”负责。
3.4 验证流程(TA)
TEE_AsymmetricVerifyDigest(
op,
NULL, 0,
hash, hash_len,
sig, sig_len);
✔ 成功:数据可信
✔ 失败:数据被篡改 / 来源不可信
四、把两者结合:一个完整实战场景
场景:可信配置加载
config.json (REE)
|
| hash + signature
v
CA ------------------> TA
- verify signature
- check version
- store hash in secure storage
Secure Storage 的作用
-
保存:
- 公钥
- 上一次 hash
- 版本号
Sign / Verify 的作用
-
保证:
- 配置未被篡改
- 来源可信
五、它们与“模型保护”的真实关系
你之前的判断是对的:
❌ 它们本身 不是模型加密方案
但它们是:
✅ 一切模型保护方案的“基础积木”
现实中的模型保护,几乎一定会用到:
- Secure Storage:存 key / hash / license
- Sign / Verify:校验模型合法性
六、总结:你真正锻炼了什么?
通过 Secure Storage + Sign / Verify,你已经实打实掌握了:
- ✔ CA / TA 的调用边界
- ✔ 数据如何在 REE / TEE 间流动
- ✔ 密钥如何“生成、使用、但不泄露”
- ✔ 为什么 TEE 是 Root of Trust
这些能力,直接可迁移到:
- 模型解密
- License 系统
- Anti-rollback
- Secure Update
📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。
更多推荐


所有评论(0)