第3章:TF-M 架构 + SPM 调度
摘要CRA Article 13(2) 要求安全隔离PSA Certified Level 2 强制硬件隔离。本文用 TrustZone-M 两个世界 三类硬件单元 DEN0063 三级隔离 SPM 调度与 IPC 全链路讲清楚 TF-M 如何满足 CRA 与 PSA 双重要求。开篇一个 400 万美元的教训2015 年一颗 Cortex-M4 的智能门锁固件被攻破。攻击者通过 BLE 协议栈的一个缓冲区溢出直接读到了同一内存空间里的设备私钥——因为加密代码、协议栈、应用逻辑全跑在同一个特权级没有任何硬件隔离。厂商召回 8 万台门锁损失400 万美元。2018 年Arm 发布 PSA 架构给出了解法把 CPU 拆成两个世界。安全世界跑 TF-M 固件掌管密钥非安全世界跑应用。两个世界通过 TrustZone-M 硬件隔离哪怕应用全盘被黑攻击者也读不到安全世界的密钥。2024 年TF-M 已成为 PSA Certified Level 2 的事实标准——Nordic、ST、NXP、Silicon Labs、TI 全部采用。自研隔离方案的厂商在 PSA 评估中要额外证明隔离有效性成本反而更高。没有硬件隔离的系统安全只是侥幸。一、为什么需要固件隔离CRA 与 PSA 的双重强制CRA Article 13(2) 要求CRA 要求安全隔离——敏感安全功能密钥、认证、加密必须与普通功能应用、协议栈、驱动隔离。这是 CRA 的 13 项核心要求之一Class I Important 及以上需第三方评定。PSA Certified 强制要求标准隔离要求等级CRA Article 13(2)安全功能与普通功能隔离Class IEN 18031-2 要求 4.2安全隔离机制全部PSA Certified L1软件隔离即可L1PSA Certified L2硬件隔离TZ-ML2PSA Certified L3分区间硬件隔离SAU/MPUL3没有隔离的代价应用漏洞buffer overflow读取同一地址空间的密钥伪造设备身份冒充合法设备接入云平台横向移动攻击其他设备真实案例某厂商的 BLE SoC 没有 TrustZone-MBLE 协议栈与应用代码同地址空间。攻击者通过 BLE L2CAP 的一个溢出漏洞读取了 2KB 外的设备私钥。修复方案升级到 Cortex-M33 TZ-M密钥移入安全世界。二、TrustZone-M 硬件隔离机制两个世界TrustZone-MArmv8-M 架构Cortex-M23/M33/M55/M85把 CPU 拆成两个执行域执行域简称运行内容访问权限Secure Processing EnvironmentSPETF-M 固件、密钥、安全服务可访问安全 非安全区域Non-Secure Processing EnvironmentNSPE应用、RTOS、协议栈、驱动只能访问非安全区域配图提示双世界隔离示意图硬件拦截不可直接访问NSC SG 指令受控调用NSPE应用 RTOS 协议栈SPETF-M 密钥 安全服务三类硬件单元单元全称作用配置者IDAUImplementation-Defined Attribution Unit定义物理地址的安全属性芯片厂商硬件固化SAUSecurity Attribution Unit软件可配置的安全属性TF-M运行时AUAttribution Unit总线层面的访问控制SoC 总线硬件关键点IDAU 是硬件固化的——芯片设计阶段就定死了哪些地址是安全的。这保证了即使 SAU 被篡改安全区域也不会被非安全侧访问。NSC 区域与 SG 指令最小入口原则非安全世界不能直接跳转到安全世界的任意地址——直接跳转会触发 HardFault。唯一的入口是NSCNon-Secure Callable区域应用代码 → NSC 跳板 → SG 指令 → SPM 调度 → 安全分区 → 返回结果 → NSC → 应用代码应用调用 PSA API如psa_hash_compute()函数指针指向 NSC 区域的 stub 代码NSC 区域位于安全 Flash 最前面只含SGSecure Gateway指令执行 SG 指令后 CPU 自动切到安全模式进入 TF-M 的 SPM 调度到对应安全分区⚠️工程教训某厂商的 NSC stub 写了 50 个函数其中 3 个参数校验不完整攻击者通过缓冲区溢出在安全侧执行了任意代码。SG 接口应控制在 20 个函数以内每个函数参数白名单校验。内存映射示例0x1000_0000 - 0x1FFF_FFFF: Secure Flash ← TF-M 固件 密钥 0x2000_0000 - 0x2FFF_FFFF: Non-Secure Flash ← 应用固件 0x3000_0000 - 0x3000_FFFF: NSC Region ← 安全入口跳板 0x4000_0000 - 0x40FF_FFFF: Secure SRAM ← TF-M 运行时数据 0x4100_0000 - 0x41FF_FFFF: Non-Secure SRAM ← 应用运行时数据链接阶段就把 Flash/SRAM 物理地址分配到安全/非安全区域。CPU 上电默认在安全模式运行 TF-M初始化完成后跳转到非安全世界执行应用。三、PSA 固件框架 DEN0063规范与实现的关系项目DEN0063TF-M性质Arm 规范文档参考实现代码内容定义隔离模型、SPM、RoT Service、IPCC 代码可直接编译运行关系PSA Certified 认证依据满足 DEN0063 的开源实现类比POSIX 标准Linux/glibc规范引用做 PSA Certified 认证必须遵守 DEN0063可以直接用 TF-M也可以自研——但自研方案在评估时要额外证明符合 DEN0063成本极高。三级隔离隔离级别机制硬件要求PSA LevelLevel 1软件隔离同一特权级无 TrustZoneL1Level 2世界隔离TZ-M 两世界TrustZone-ML2Level 3分区间硬件隔离SAU/MPUTZ-M MPUL3配图提示三级隔离演进图Level 1软件隔离所有安全服务同地址空间Level 2世界隔离安全/非安全两世界Level 3分区间隔离每个分区独立 MPU 区域Level 1所有安全服务在同一个安全世界靠软件边界隔离。一个服务的 bug 可能影响其他服务Level 2安全世界 vs 非安全世界硬件隔离。应用被黑不影响安全服务但安全服务之间仍同地址空间Level 3每个安全分区有独立 MPU 区域分区间硬件隔离。一个分区的漏洞不会泄露另一个分区的密钥工程视角Level 2 是性价比拐点——Cortex-M33 TZ-M 的 IP 成本约 10-30 万美元满足 PSA Level 2。Level 3 需要 MPU 精细化配置 分区独立栈内存开销增加 20-40%但安全性显著提升。Nordic nRF5340 用 Level 2ST STM32WBA6x 用 Level 3。Secure Partition——最小隔离单元每个 Secure Partition 是 SPE 内部的最小隔离单元有独立的内存区域代码 数据 栈有唯一的 Partition ID单线程模型不能直接访问其他分区内存通过 SPM 中转的 IPC 通信配图提示SPM 管理多分区架构图IPC via SPMSPMSecure Partition ManagerCrypto 分区AES/SHA/ECCITS 分区片上安全存储PS 分区外部加密存储Attestation 分区设备证明App-RoT 分区厂商自定义PSA-RoT vs App-RoT层提供者内容认证方式PSA-RoT芯片厂商SPM、生命周期、不可变 RoT、Crypto、启动更新平台级认证App-RoT设备厂商厂商自定义认证协议、特定安全存储、第三方组件产品级认证分开之后芯片厂商可以独立认证 PSA-RoT设备厂商只需认证自己的 App-RoT不用重新认证整个安全栈——这是 PSA Certified 分级认证的基础。四、SPM 调度与 IPC 通信SPM 是什么SPMSecure Partition Manager是 TF-M 的核心负责分区管理创建、销毁、调度安全分区IPC 中转分区间通信必须经过 SPM访问控制校验分区对资源的访问权限中断路由安全中断分发到对应分区事件驱动 协作式调度SPM 是事件驱动 协作式调度器——分区不能被抢占必须主动调用psa_wait()让出 CPU// 安全分区的主循环伪代码voidpartition_main(void){psa_signal_tsignals;while(1){signalspsa_wait(PSA_WAIT_ANY,PSA_BLOCK);// 等待消息if(signalsMAILBOX_SIGNAL){handle_request();// 处理 IPC 请求psa_reply(handle,PSA_SUCCESS);// 回复}}}⚠️重要提醒协作式调度意味着分区不能有死循环——一个分区如果一直不调用psa_wait()整个安全世界会卡死。某厂商的加密分区在 RSA-3072 签名时阻塞了 200ms导致其他分区的看门狗超时。修复方案RSA 改用 ECDSA P-25610ms或拆分为异步操作。IPC 通信全链路Crypto 分区SPMNSC 跳板NS 应用Crypto 分区SPMNSC 跳板NS 应用1. psa_hash_compute()2. SG 指令切安全模式3. 查找 Crypto 分区 handle4. 投递消息到分区 mailbox5. 执行 SHA-256硬件加速6. psa_reply() 返回结果7. 返回结果到 NSC8. 返回哈希值配图提示IPC 通信时序图IPC 开销不是免费的操作耗时说明NS→S 切换SG 指令~100 cycles硬件自动SPM 调度~500 cycles查找分区、投递消息分区切换Level 3~200 cyclesMPU 重配置单次 IPC 总开销~800 cycles约 5-10μs 64MHz工程教训某厂商的应用每次加密 16 字节都要一次 IPC加密 1KB 数据要 64 次 IPCIPC 开销占 70%。修复方案用psa_hash_compute()一次性接口替代psa_hash_setup/update/finish多次调用IPC 次数从 64 降到 1。本期小结CRA Article 13(2) 要求安全隔离PSA Level 2 强制硬件隔离TrustZone-M 把 CPU 拆成两个世界IDAU 硬件固化安全属性NSC SG 指令是最小入口原则SG 函数应 ≤20 个DEN0063 定义三级隔离Level 2 是性价比拐点SPM 是事件驱动 协作式调度分区不能有死循环IPC 不是免费的用一次性 API 替代多步调用下期预告第 4 期PSA Crypto API 实战下一期进入工程实战——TF-M 的四大核心服务如何使用Crypto 分区密钥不离开安全世界ITS/PS 存储分区片上 vs 外部Attestation 分区设备证明TF-M Zephyr/FreeRTOS 集成自研隔离 vs TF-M 成本对比关注本系列从架构走向代码。互动话题你的项目用 TrustZone-M 了吗选 Level 2 还是 Level 3留言区分享你的选型经验转发给固件/安全团队对照三级隔离评估收藏本文随时查阅 TF-M 架构关注本账号每周更新 CRA × PSA 合规实战内容。话题标签#TF-M#TrustZone#PSA#固件隔离#Cortex-M33#IoT安全#芯片安全#CRA

相关新闻

【Bug已解决】Different results for PPDocLayoutV3 on CPU and CUDA 解决方案

【Bug已解决】Different results for PPDocLayoutV3 on CPU and CUDA 解决方案

【Bug已解决】Different results for PPDocLayoutV3 on CPU and CUDA 解决方案 一、现象长什么样 用 PPDocLayoutV3(PaddlePaddle 文档版面分析模型,常经 transformers 桥接或在 GPU 机器上推理)做文档版面检测,发现同一张图&…

2026/10/11 19:47:32 阅读更多 →
AI情侣头像如何通过平台审核?2024微信/小红书/抖音最新审核规则实测解读

AI情侣头像如何通过平台审核?2024微信/小红书/抖音最新审核规则实测解读

更多请点击: https://codechina.net 第一章:AI情侣头像如何通过平台审核?2024微信/小红书/抖音最新审核规则实测解读 三平台核心审核维度对比 2024年实测表明,微信、小红书与抖音对AI生成情侣头像的审核逻辑已从“一刀切”转向“…

2026/10/11 2:21:38 阅读更多 →
用AI写电子书到底靠不靠谱?——资深数字出版人实测12款工具,准确率/版权风险/平台拒收率全曝光(2024Q2权威报告)

用AI写电子书到底靠不靠谱?——资深数字出版人实测12款工具,准确率/版权风险/平台拒收率全曝光(2024Q2权威报告)

更多请点击: https://codechina.net 第一章:AI写电子书的可行性边界与行业真相 AI生成电子书已从概念验证进入商业化落地阶段,但其能力边界远非“一键成书”所能概括。当前主流大语言模型(如GPT-4、Claude 3、Qwen2.5&#xff09…

2026/10/4 23:42:41 阅读更多 →

最新新闻

400万像素+小封装:智能家居摄像头画质升级的关键技术解析

400万像素+小封装:智能家居摄像头画质升级的关键技术解析

1. 为什么是400万像素:智能家居摄像头画质升级的甜点位智能家居安防摄像头这几年卷得厉害,但仔细看下来,大部分产品其实还在200万像素(也就是我们常说的1080p清晰度)档位上打转。200万像素不是不能用,但随着…

2026/10/11 21:32:25 阅读更多 →
Python康复评估系统源码解析:从数据清洗到评估算法落地

Python康复评估系统源码解析:从数据清洗到评估算法落地

简介:一份基于Python实现的康复评估系统源码与配套数据集,面向计算机、人工智能、通信工程、自动化等专业的在校生和开发者,可用于毕业设计、课程设计、项目初期立项及演示。系统聚焦人体动作数据采集与分析,利用bvh动作捕捉数据和…

2026/10/11 21:32:25 阅读更多 →
内核paging request崩溃排查:从日志证据链区分内存故障与驱动bug

内核paging request崩溃排查:从日志证据链区分内存故障与驱动bug

凌晨一点四十,手机连续三条告警弹出来:核心业务服务器宕机重启。登录进系统翻看内核日志,第一眼就是那句几乎每个运维都见过的报错:BUG: unable to handle kernel paging request at ffff9f...。这时候绝大多数人的第一反应&#…

2026/10/11 21:32:25 阅读更多 →
花3万买来的教训:Bing优化服务商怎么挑,看完这篇少走2年弯路

花3万买来的教训:Bing优化服务商怎么挑,看完这篇少走2年弯路

做外贸的刘总去年花了2.8万签了一家Bing优化服务商,承诺"3个月上首页"。结果半年过去,核心词排名还在第5页徘徊,对方给出的解释是"Bing算法调整"。这不是个例。据公开资料显示,在B2B出海领域,超过…

2026/10/11 21:32:25 阅读更多 →
Python人脸识别签到系统源码解析:特征向量、SQLite考勤与避坑指南

Python人脸识别签到系统源码解析:特征向量、SQLite考勤与避坑指南

简介:基于Python的人脸识别签到系统源码,面向计算机专业毕业生、课程设计学生以及需要快速落地人脸识别应用的开发者,既可作为毕业设计直接使用,也适合参考二次开发。资源共27个文件,以8个Python脚本、7个HTML页面、SQ…

2026/10/11 21:32:25 阅读更多 →
中间层架构设计实战:事件驱动模型与模块解耦方案

中间层架构设计实战:事件驱动模型与模块解耦方案

1. 从“rea”这个标题说起:一个被低估的缩写背后藏着什么第一次看到“rea”这个标题的时候,我脑子里蹦出来的第一反应是——这大概率又是一个被缩写玩坏了的项目代号。做技术的人都有这个毛病,喜欢把长名字砍成三四个字母,方便在命…

2026/10/11 21:31:24 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →