摘要
TF-M 提供四大核心服务:Crypto(密钥不离开安全世界)、ITS/PS(安全存储)、Attestation(设备证明)。本文用代码示例 + Zephyr/FreeRTOS 集成 + 自研 vs TF-M 成本对比,给出芯片厂商可执行的选型决策。
开篇:密钥不离开安全世界
上一期我们讲了 TF-M 的架构——TrustZone-M 两个世界、DEN0063 三级隔离、SPM 调度与 IPC。
这一期进入工程实战——TF-M 的四大核心服务怎么用?代码怎么写?
PSA Crypto API 的核心价值是一句话:
密钥不离开安全世界。
应用调用psa_generate_key()生成密钥,拿到的是key_id(一个整数句柄),而非密钥本身。所有加密操作在安全世界执行,应用只拿到结果。即使应用被完全攻破,攻击者也拿不到私钥。
一、Crypto 分区:密钥不离开安全世界
支持的算法
| 算法类 | 支持 | 硬件加速 |
|---|---|---|
| 对称加密 | AES-128/256(CBC/CTR/GCM) | ✅ |
| 哈希 | SHA-1/256/384/512 | ✅ |
| HMAC | HMAC-SHA256/384 | ✅ |
| 非对称 | RSA-2048/3072、ECDSA P-256/P-384 | ✅ |
| 密钥派生 | HKDF、PBKDF2 | 软件 |
| 随机数 | TRNG + DRBG(NIST 800-90A) | ✅ |
PSA Crypto API 代码示例
#include"psa/crypto.h"// 1. 初始化psa_crypto_init();// 2. 生成 ECDSA P-256 密钥对(私钥留在安全世界,应用拿不到)psa_key_id_tkey_id;psa_key_attributes_tattrs=PSA_KEY_ATTRIBUTES_INIT;psa_set_key_type(&attrs,PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1));psa_set_key_bits(&attrs,256);psa_set_key_usage_flags(&attrs,PSA_KEY_USAGE_SIGN_HASH|PSA_KEY_USAGE_VERIFY_HASH);psa_set_key_algorithm(&attrs,PSA_ALG_ECDSA(PSA_ALG_SHA_256));psa_generate_key(&attrs,&key_id);// 3. 签名(私钥操作在安全世界执行,返回签名给应用)uint8_thash[32],sig[64];size_tsig_len;psa_sign_hash(key_id,PSA_ALG_ECDSA(PSA_ALG_SHA_256),hash,sizeof(hash),sig,sizeof(sig),&sig_len);// 4. 应用永远无法导出私钥——psa_export_key() 对不可导出密钥返回错误💡工程视角:PSA Crypto API 的核心价值是密钥不离开安全世界。应用调用
psa_generate_key()生成密钥,拿到的是key_id(一个整数句柄),而非密钥本身。所有加密操作在安全世界执行,应用只拿到结果。即使应用被完全攻破,攻击者也拿不到私钥。
📌配图提示:PSA Crypto API 密钥流示意图(应用 → key_id → 安全世界 → 结果返回)
二、ITS 分区:片上安全存储
- 存储位置:片上 Secure Flash
- 容量:典型 4-32 KB
- 用途:高价值小数据——设备私钥、证书、计数器
- 安全机制:加密 + 完整性校验 + 访问控制
#include"psa/protected_storage.h"// 写入设备证书(只有安全世界可读)psa_ps_set(uid=0x0001,data_len=1024,p_data=cert,create_flags=PSA_STORAGE_FLAG_NO_ROLLBACK);// 安全世界内读取psa_ps_get(uid=0x0001,offset=0,data_len=1024,p_data=cert,&p_data_len);三、PS 分区:外部加密存储
- 存储位置:外部 Flash(非安全区域)
- 容量:典型 64 KB - 1 MB
- 用途:较大数据——配置文件、日志、OTA 备份
- 安全机制:加密 + 完整性校验 + 反回滚,密钥存在安全世界,数据加密后存外部
| 对比 | ITS | PS |
|---|---|---|
| 存储位置 | 片上 Secure Flash | 外部 Flash |
| 容量 | 小(KB 级) | 大(MB 级) |
| 性能 | 快(直接访问) | 慢(加解密开销) |
| 抗物理攻击 | 强 | 中(密钥不在外存) |
💡选型建议:高价值小数据(私钥、证书)用 ITS;大文件(配置、日志、OTA 备份)用 PS。
四、Initial Attestation 分区:设备证明
设备证明服务——向第三方证明"我是这台设备,运行这个固件版本"。
#include"psa/initial_attestation.h";// 生成设备证明 token(COSE/CWT 格式)uint8_tchallenge[32]={...};// 验证方下发的随机挑战uint8_ttoken[512];size_ttoken_len;psa_initial_attest_get_token(challenge,sizeof(challenge),token,sizeof(token),&token_len);Token 包含
- 设备唯一 ID(由 OTP 中的设备密钥派生)
- 固件版本 + 哈希
- 生命周期状态(LCS)
- PSA-RoT 测量值
- 对 challenge 的签名
💡工程视角:设备证明是CRA Article 13(4)“设备身份”的关键实现。云平台通过验证 token 签名,确认设备身份 + 固件完整性,决定是否允许接入。某厂商的云平台要求所有设备首次接入时提交 attestation token,未通过验证的设备直接拒绝——这把"伪造设备"攻击的成本从"复制一台设备"提高到"破解 ECDSA P-256"。
五、TF-M + Zephyr/FreeRTOS 集成
双系统架构
TF-M 是安全世界的固件,非安全世界需要一个 RTOS 跑应用。主流组合:
| 组合 | 安全世界 | 非安全世界 | 适用场景 |
|---|---|---|---|
| TF-M + Zephyr | TF-M | Zephyr RTOS | Matter/Thread 设备 |
| TF-M + FreeRTOS | TF-M | FreeRTOS | 工业/消费电子 |
| TF-M + 裸机 | TF-M | 裸机 main 循环 | 极简设备 |
Zephyr + TF-M 集成(最简单)
Zephyr 原生支持 TF-M,配置最简单:
# West 构建命令(nRF5340 示例)west build-bnrf5340dk_nrf5340_cpuapp --\-DCONFIG_TFM=y-DCONFIG_TFM_PROFILE_TYPE=m# 关键配置CONFIG_TFM=y# 启用 TF-MCONFIG_TFM_PROFILE_TYPE=m# Medium profile(Crypto + ITS + PS + Attestation)CONFIG_TFM_BL2=y# 启用 MCUBoot BL2CONFIG_TFM_PARTITION_CRYPTO=y# Crypto 分区CONFIG_TFM_PARTITION_INITIAL_ATTESTATION=y# Attestation 分区Zephyr 应用通过 PSA API 调用 TF-M 服务,无需额外封装。
FreeRTOS + TF-M 集成
FreeRTOS 集成 TF-M 需要更多手工配置:
- TF-M 构建为静态库,链接到安全世界镜像
- FreeRTOS 跑在非安全世界
- 通过 NSC 接口调用 TF-M 服务
双核架构(nRF5340)
nRF5340 采用双核设计——核 0(应用核)跑 Zephyr/FreeRTOS + BLE 协议栈,核 1(网络核)跑 TF-M + 无线协议。两核通过 RPMsg(共享内存 + 中断)通信。
| 对比 | 单核 TZ-M | 双核隔离 |
|---|---|---|
| 隔离强度 | 硬件属性(TZ-M) | 物理隔离(独立核) |
| 通信开销 | SG 指令(μs 级) | RPMsg(10-100μs) |
| 成本 | 低(单核) | 高(双核) |
| PSA Level | L2 | L2-L3 |
📌配图提示:单核 TZ-M vs 双核隔离对比图
六、自研隔离 vs TF-M 成本对比
成本对比表
| 维度 | TF-M(开源) | 自研隔离 |
|---|---|---|
| 初始开发 | 0(直接用) | 6-12 个月,3-5 人 |
| PSA 认证适配 | 低(已预适配) | 高(需证明符合 DEN0063) |
| 长期维护 | 社区维护 | 自维护 |
| 漏洞响应 | 社区快速响应 | 自行排查 |
| 定制灵活性 | 中(需遵循 TF-M 架构) | 高(自由设计) |
| 生态支持 | Nordic/ST/NXP/Zephyr | 无 |
💡工程视角:除非有极强定制需求,否则用 TF-M。某厂商自研隔离方案花了 8 个月、4 人,PSA Level 2 评估时被要求额外提供 DEN0063 符合性证明,又花了 3 个月。总成本 11 个月,而用 TF-M 的厂商 1 个月就集成了。
TF-M 的"不够灵活"远比自研的"从零证明"便宜。
何时考虑自研
仅在以下场景考虑自研:
- 非 Arm 架构:RISC-V 需要用 PMP + OpenSBI 等效方案
- 极端资源约束:Flash < 64KB,TF-M 最小配置也要 ~40KB
- 已有成熟方案:公司已有通过认证的隔离框架
- 特殊安全需求:需要 TF-M 不支持的自定义隔离策略
📌配图提示:自研 vs TF-M 决策树
七、CRA/PSA 钩子速查
本章技术要点对应的 CRA 条款与 PSA Level 要求:
| 技术要点 | CRA Article 13 对应 | PSA Level 要求 |
|---|---|---|
| TrustZone-M 硬件隔离 | Art. 13(2) 安全隔离 | L2+ |
| NSC + SG 指令受控入口 | Art. 13(2) 攻击面最小化 | L2+ |
| DEN0063 分区化框架 | Art. 13(2) 安全架构 | L1+ |
| Level 3 分区间 MPU 隔离 | Art. 13(2) 故障隔离 | L3+ |
| PSA Crypto API 密钥不离开安全世界 | Art. 13(3) 密钥保护 | L2+ |
| ITS 片上安全存储 | Art. 13(3) 加密存储 | L2+ |
| PS 外部加密存储 + 反回滚 | Art. 13(3)(5) 加密存储 + 防降级 | L2+ |
| Initial Attestation 设备证明 | Art. 13(4) 设备身份 | L2+ |
📌合规映射提示:撰写"PSA → EN 18031 映射文档"时,本章内容直接对应 EN 18031-2 的要求 4.2(安全隔离)、4.3(密钥管理)、4.6(设备身份)。
八、Checklist
- 硬件选型:Cortex-M23/M33/M55/M85(带 TZ-M)
- TF-M 集成:选用 TF-M 而非自研
- 隔离级别:L2 用世界隔离,L3 用分区间隔离
- NSC 接口:SG 函数 ≤20 个,参数白名单校验
- PSA Crypto API:密钥不可导出(
PSA_KEY_USAGE_EXPORT不设) - ITS/PS 分区:高价值数据用 ITS,大文件用 PS
- Attestation:云平台首接入验证 token
- IPC 优化:用一次性 API 替代多步 API
- RTOS 适配:TF-M IPC 期间禁任务切换
- SAU/MPU 配置:安全区域最小化
九、给芯片厂商的行动建议
P0(2026-09-11 前)
- 选型 Cortex-M33 + TZ-M——PSA Level 2 的硬件基础
- 集成 TF-M——从 trustedfirmware.org 获取,按官方 quickstart 集成
P1(2027-Q1 前)
- 完成 TF-M + Zephyr/FreeRTOS 双系统验证
- PSA Crypto API 替换应用层加密调用——密钥移入安全世界
- 配置 Attestation 服务——对接云平台设备认证
P2(2027-Q3 前)
- 隔离级别升 Level 3——分区间 MPU 隔离,冲刺 PSA Level 3
- App-RoT 分区开发——厂商自定义安全服务
- IPC 性能优化——减少 IPC 次数,一次性 API
给管理者的一句话
TF-M 是 PSA Certified Level 2+ 的事实标准——Nordic/ST/NXP/Silicon Labs 全在用。自研隔离方案在 PSA 评估中要额外证明符合 DEN0063,成本远高于直接用 TF-M。对国产芯片厂商,2027-Q1 前必须完成 TF-M 集成与 PSA Crypto API 适配。
本期小结
- PSA Crypto API 核心价值:密钥不离开安全世界,应用只拿到 key_id
- TF-M 四大服务:Crypto + ITS(片上)+ PS(外部)+ Attestation(设备证明)
- Zephyr + TF-M 集成最简单:原生支持,CONFIG_TFM=y 即可
- 自研 vs TF-M:11 个月 vs 1 个月,除非非 Arm 架构否则用 TF-M
- P0 项:2026-09-11 前选型 Cortex-M33 + TZ-M 并集成 TF-M
下期预告
第 5 期:PSA Level 1-4 申请材料
从工程实现进入认证流程。PSA Certified 四级认证需要什么材料?加密算法选型有哪些坑?EN 18031 符合性评估怎么做?
下一期我们将讲清楚:
- PSA Certified Level 1-4 申请材料清单
- CRA 与 PSA 对加密算法的强制要求
- 推荐算法清单与禁用清单
- PSA → EN 18031-2 映射文档
关注本系列,从代码走向认证。
📣互动话题:
你的项目用 TF-M 还是自研?PSA Crypto API 替换过程中遇到什么坑?
- 留言区分享你的集成经验
- 转发给固件团队,对照 Checklist 检查
- 收藏本文,随时查阅 PSA Crypto API 示例
关注本账号,每周更新 CRA × PSA 合规实战内容。
话题标签
#PSA#CryptoAPI#TF-M#Zephyr#FreeRTOS#IoT安全#芯片安全#密钥保护