ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

一颗MCU拿下PSA L2与SESIP L2双认证,安全底座如何落地?

一颗MCU拿下PSA L2与SESIP L2双认证,安全底座如何落地? 1. 为什么一颗MCU的“安全证书”值得被单独拿出来说我这两年评测过的MCU少说也有几十款但真正敢把PSA L2和SESIP L2这两个认证同时摆上台面的还真不多。看到这个标题的第一反应是这颗MCU不是来凑数的是来给整个生态立规矩的。先解释一下这两个认证到底意味着什么。PSAPlatform Security Architecture是Arm主导推出的安全框架分Level 1到Level 3三个等级Level 2意味着这颗芯片不仅“声明”自己有安全能力而是经过了独立实验室的安全测试证明它的安全方案在硬件和软件层面都能有效抵抗常见的软件攻击具备可审计、可信任的安全基础。SESIPSecurity Evaluation Standard for IoT Platforms则是面向物联网平台的安全评估标准Level 2对应的是“具备针对特定攻击方法的抵抗能力”同样需要第三方独立评估。说白了这两张证放一块儿等于告诉所有做产品的工程师这颗MCU的安全不是PPT安全是拿到检测报告的安全。过去聊MCU安全大家说的都是“支持安全启动”“支持TFM”“有加密引擎”这些功能词但功能列表再长也只是“我声称我能”而认证是“我证明我确实能”。这两者之间的差距才是工程实践里最要命的东西。这篇文章我想从拿到这颗MCU之后怎么把它用起来的角度把安全认证底层到底认证了什么、这些能力在日常开发里怎么真正落地、以及如果你想做一颗通过同类认证的芯片需要准备哪些硬功夫一次性讲透。2. 先拆清楚PSA L2到底在审查什么2.1 PSA的等级体系从“自我声明”到“独立审计”很多刚接触PSA的工程师会有一个误区以为PSA就是TrustZone 安全启动。其实PSA是一个完整的安全设计方法论TrustZone只是一部分。PSA里定义了十个安全目标包括身份识别、安全启动、安全升级、安全存储、安全通信、安全日志、安全恢复、防克隆等等然后要求厂商基于这些目标去设计安全模型。Level 1只是评估安全模型文档是否完整、是否符合PSA的要求它不测试实际实现所以很多低成本芯片也能拿到L1。Level 2就完全不同了它要求基于PSA信任根PSA Root of Trust和信任根服务Crypto、Attestation、Secure Storage的参考实现认证进行实验室测试测试内容包括安全启动链的验证、加密接口的正确性、安全存储的防篡改性、防回滚机制、状态抽象层一致性等等。再往上还有Level 3需要抵抗更高强度的物理攻击环境温度、电压扰动、激光注入这些都要过。2.2 实验室到底怎么测一颗MCU我自己和朋友交流过也去了解过第三方实验室做这类评估的流程。实验室拿到芯片之后不会只看你SDK里的API好不好用而是按照PSA的威胁模型和安全目标去设计攻击与验证场景。比如验证安全启动链是否真的从ROM开始每一级都要校验签名中间是否有可能被跳过或回滚到旧版本。对安全存储做攻击测试尝试通过越权访问、错误注入等方式读取或篡改安全资源。对加密引擎进行验证确认随机数质量、密钥隔离机制、AES/RSA/ECC接口是否存在时间侧信道之类的可利用泄漏。用自动化测试工具对TFMTrusted Firmware-M即Arm的Cortex-M可信固件的隔离边界做Fuzz测试试图找出非安全世界穿透到安全世界的路径。一个设计不严谨的MCU哪怕是知名大厂的在这些测试里也会露出马脚。所以PSA L2不是“送分题”而是“送命题”级别的考验。2.3 为什么PSA L2对开发者是“放心签”我们做产品方案选型的时候最怕的不是芯片性能不够而是安全功能“看着有用起来没”。有些芯片说支持安全启动结果固件加密密钥直接烧在Flash里有些说支持安全存储结果调用接口就能任意读写。这些问题在现场测试才暴露那就是灾难。而一颗过了PSA L2的MCU至少意味着它内部的Arm TrustZone隔离、安全启动、安全存储、加密加速器、随机数生成器、防回滚、生命周期管理这些模块已经被一套统一的方法论验证过。你应用层可以放心调用Crypto接口做密钥管理可以放心把根密钥放到安全侧可以放心使用它的Attestation能力去做设备身份认证。不是说它绝对不可能被攻破而是攻击成本已经高到绝大多数攻击者不愿意再碰。3. SESIP L2物联网平台安全的另一种“全球通用语言”3.1 SESIP和PSA到底什么关系有什么区别刚开始关注到这颗MCU同时拿到PSA L2和SESIP L2的时候我也愣了一下因为这俩认证覆盖的范围和认证思路是有差异的但针对IoT芯片而言它们刚好形成互补。PSA是Arm生态的原生安全框架把重点放在“符合Arm定义的安全模型和实现验证”。SESIP则是由GlobalPlatform推动的标准化方法它更注重“供应商声明的安全声称”是否可以被评估验证而且它天然支持多种不同技术栈、不同架构的平台不绑定某个特定的内核。用大白话讲PSA L2回答的是“你是否达到了Arm定义的安全标准”SESIP L2回答的是“你是否达到了国际通用的物联网安全评估标准”。一颗MCU两者都拿到意味着它在安全上的投入不是针对某个单一生态做的定制表演而是经得起两套不同维度、不同看法的审视。3.2 SESIP的评估逻辑以“声称”为中心SESIP评估里有个核心概念Security Claim也就是安全声称。厂商必须先定义“我这颗芯片能保护什么资产、抵御什么样的攻击者、达到什么样的保证级别”然后评估机构再针对这些声称去设计验证方案。这种“你说你行但你得证明你行”的逻辑对厂商来说其实是比PSA更灵活也更严格。灵活在于你可以只声称“保护调试接口不被未授权访问”而不必声称“能抵御物理攻击”严格在于你一旦声称了就必须拿出可复现的测试结果来支撑。对开发者而言SESIP认证的真正价值是提供了一个“可比较”的安全标尺。你选型的时候不需要读懂每颗芯片几百页的安全特性手册只需要看它SESIP认证里声明的保护级别和覆盖范围就能大致判断它适不适合你的产品场景。比如说你做个智能门锁需要抵抗调试接口攻击、固件提取攻击一颗SESIP L2的MCU就比一颗没有任何认证的MCU可信得多。3.3 L2的“含金量”到底卡在了哪里SESIP从Level 1到Level 4级别越高对自研安全组件、物理防护、攻击缓解的要求越高。L2这个档位比较微妙很多芯片停留在L1只做基本的安全文档审查或者直接冲刺L3/L4投入极大愿意扎扎实实做L2的反而说明它在“性价比安全”上做了认真思考。L2需要评估的能力覆盖了漏洞扫描、安全启动、安全更新、加密操作、随机数生成、安全存储、调试接口管控、生命周期状态转换等。这些恰恰是IoT设备最容易被攻击的切入点。做一颗L2认证芯片比做一颗单纯的“技术支持安全启动”芯片要多做至少两到三个月的安全测试和反复修改。4. 拿到这颗MCU之后开发者的安全基础该怎么搭4.1 先确认一把“信任根”放在哪儿我们开发的时候第一步不是写业务代码而是确认这颗MCU的信任根到底落在哪。一般MCU的信任根在ROM里芯片出厂时烧录了不可更改的启动代码后续所有启动链都要从这段ROM代码验证起。过了PSA L2和SESIP L2的芯片ROM代码本身已经是经过安全审计的你不需要去改它你需要做的是把应用固件和固件签名流程纳入这条安全链。我的经验是先在SDK里找到Secure Boot相关配置打开强制验签然后生成一对签名密钥。私钥留在生产环境服务器公钥烧进芯片的eFuse或者一次性可编程区域。生成密钥的时候牢记一点私钥一旦泄露整个安全链路就白做了所以做好密钥管理比做好代码更重要。4.2 TFM组件怎么分配别把安全侧当成“大杂烩”TFMTrusted Firmware-M架构下非安全核运行应用程序安全核运行安全服务。很多人拿到SDK后图省事把一堆库都塞进安全侧结果安全侧镜像越来越大启动时间越来越长隔离意义也逐渐被稀释。正确的做法是严格控制安全侧的服务范围仅保留密钥管理、安全存储、认证服务、安全日志这类核心功能。其他非敏感功能比如协议栈、UI、业务逻辑全部放在非安全侧。这样既保证安全攻击面最小也方便后续做TFM固件更新不用每次改需求都重新审计一遍安全侧。我还建议把安全侧和非安全侧的通信接口通常通过IPC机制封装成统一API让应用层开发者不需要理解TFM的底层实现。否则团队里每个人各写一套后面维护成本极高。4.3 安全存储的“正确打开方式”别直接把密钥存Flash明文MSPManifest Service Provider之类工具会帮你生成安全存储分区但关键还是开发者的使用习惯。很多踩坑案例都是由于直接调用NSPENon-Secure Processing Environment非安全处理环境侧的Flash驱动保存密钥结果密钥被调试接口读出来。在安全认证MCU上正确做法是使用TFM提供的Secure Storage服务把密钥对象通过固件保护机制写入安全存储区。应用层只拿到句柄或引用永远不接触明文密钥。我在自己的项目里签名私钥只在产线注入时出现过一次之后所有固件签名都走HSM或独立签名服务。5. 原理解析一颗MCU是如何同时拿下这两个认证的5.1 从芯片架构的“隔离设计”说起能同时过PSA L2和SESIP L2的MCU底层架构通常做了“多级隔离”设计而不是靠简单加一个加密引擎蒙混过关。这类MCU普遍具备TrustZone隔离、安全调试认证、生命周期管理、硬件防回滚、密钥隔离存储等单元。TrustZone技术把处理器状态分为安全世界和非安全世界硬件层面确保非安全侧无法直接访问安全侧内存和外设。SESIP认证里特别关注的“调试接口管控”也是通过芯片生命周期状态机实现的当芯片处于OPEN状态时允许调试一旦转成SECURE_CLOSED状态后调试端口就需要带认证的解锁流程才能重新打开否则只能通过全擦除恢复。这项机制对物联网设备尤其关键。很多产品被盗后攻击者第一反应就是通过调试接口读取Flash、提取固件。如果芯片出厂时就被配置为SECURE_CLOSED攻击者就必须先“擦掉”整个芯片才能重新调试取固件这条路基本断掉只能去搞物理破解或者旁路攻击门槛完全不同。5.2 安全启动、安全升级、防回滚三个环节怎么配合安全启动解决的是“在没有被篡改的状态下启动”安全升级解决的是“升级包是可信的”防回滚解决的是“你不能把新固件退回到有漏洞的旧版本”。三者缺一不可。具体实现上这颗MCU的ROM里烧录了信任锚公钥校验第一级Bootloader第一级Bootloader再校验第二级Bootloader或者直接校验应用固件。每一级校验都使用ECC或RSA签名验证。升级时新固件包含版本号芯片会对比当前版本号与升级包版本号一旦探测到降级尝试就拒绝写入并记录安全事件。这里有个容易低估的细节开发阶段的防回滚配置一定要留好余地。如果开发环境把防回滚设成“最低版本号99”而你后面想刷回V1.0调试就只能清空整个芯片重新烧写。我建议开发板和生产板用不同的生命周期配置开发板保留回滚能力生产板启用严格防回滚。5.3 为什么“安全功能”要靠“测试”说话安全认证的核心不是设计文档写得多漂亮而是实际测试数据能不能支撑。PSA L2和SESIP L2都需要第三方实验室出具报告测试周期通常三个月起步。这期间芯片厂商要在实验室里反复验证“声称的安全能力”并修补被发现的问题。所以从开发者视角看一个拿到双认证的MCU代表它已被第三方“暴力测试”过一段时间其安全功能不是刻意给客户演示的演示模式而是经得起攻击验证的真实能力。选型时看认证可以帮你规避很多潜在的“厂商自嗨”省下后面自己的安全评估成本。6. 实操记录我把这颗MCU跑通一次安全启动安全存储的完整流程6.1 开发环境准备与烧录前配置我用的工具链是Arm Compiler CMSIS调试器是J-Link。首次上电后第一件事不是下载代码而是读取芯片生命周期状态确认它处于“开发友好”状态。如果拿到的是生产配置芯片可能连调试口都被封了那就得先走解锁流程。配置锁定位和eFuse时务必想清楚有些eFuse是一次性的烧了就不能回头。我见过同事为了调试方便直接烧了一个不允许回退的eFuse导致后续无法改配置只能换芯片。正确做法先不烧任何保险丝把安全启动验证的代码跑通确认签名流程正确最后再一次性配置生产生命周期。6.2 签名工具链的搭建imagetool与密钥管理官方SDK通常提供镜像签名工具比如imagetool.py。你只需要在编译完成后调用它把生成的固件用私钥签名然后烧录带签名的固件即可。签名命令大致长这样伪代码/示意# 生成密钥对仅示例实际工具以SDK为准 openssl ecparam -name prime256v1 -genkey -noout -out device_private.pem openssl ec -in device_private.pem -pubout -out device_public.pem # 对固件签名并打包 python3 imgtool.py sign --key device_private.pem \ --align 8 --version 1.0.0 --header-size 0x1000 \ --pad-header --slot-size 0x10000 \ --output app_signed.bin app_unsigned.bin注意这里有个关键点签名密钥的生成、存储、使用必须放在独立安全环境比如HSM或离线机器不要把私钥直接放在CI服务器上。如果CI服务器被攻破攻击者可以签名任意固件你的安全启动就变成摆设。6.3 安全存储接口测试一个简单的“密钥存取”Demo初始化TFM后我写了一个简单示例安全侧生成AES密钥存储到安全存储区然后非安全侧应用请求该密钥对一段数据进行加密。应用层永远只拿到密文不接触明文密钥。关键是验证非安全侧即使想直接读取Flash内容也拿不到密钥。我在测试里故意在非安全侧遍历地址空间读到的只是加载后的密文数据而密钥对象始终停在安全存储区。这说明硬件隔离有效软件API也没有越权通道。6.4 生命周期切换与现场返工教训完成所有测试后我把芯片切换到“生产锁定”状态再上电时调试口已经不再响应。这时候我才意识到之前忘了导出调试解锁证书。结果板子只能通过全擦除恢复。虽然不影响正常固件运行但后续想复现某个非安全侧bug就变得很麻烦。这里给所有同行一个硬建议进入生产生命周期前先把调试解锁证书和恢复流程完整测试一遍并把私钥交给专属负责人。不要等到板子产线铺开了再研究怎么解锁那会儿每块板子多花的时间都是钱。7. 常见问题与排查技巧实录7.1 安全启动总是校验失败先看公钥是否烧进eFuse最常见的现象是代码在RAM里调试没问题一旦烧进Flash并启用安全启动就卡在启动阶段。排查时发现公钥根本没有烧进eFuseROM代码默认使用厂商测试公钥而你的固件是用自己的密钥签的。解决办法是在产线烧写步骤里明确加入公钥烧录步骤这一步绝不能省。7.2 TFMDebug和Release构建差异导致的问题TFM分为Debug和Release构建Debug会保留更多日志和断言Release会裁剪调试信息。某些安全服务在Debug下表现正常Release下因为超时时间或缓冲区设置不同而异常。我建议在切换Release之前先跑一遍整套安全API的单元测试不要直接改构建类型然后上板。7.3 安全存储写入失败检查NV计数器是否耗尽SESIP/PSA都要求支持防回滚但这依赖NV计数器Non-Volatile Counter。如果安全存储对应的NV计数区域写满了新数据会写入失败。排查方法查看TFM日志里的NV计数错误码然后检查Flash磨损均衡策略。7.4 常见问题速查表现象原因解法安全启动失败公钥未烧录/固件签名错误核对eFuse公钥、重新签名并烧录安全存储写入失败NV计数满/Flash区域已损坏擦除对应区域或提升磨损均衡策略调试口无法连接生命周期已锁定使用调试解锁证书或全擦除应用层无法调用安全服务TFM未初始化或IPC未触发检查TFM初始化代码和非安全侧工程配置升级后无法回滚防回滚版本号被抬高联系安全管理员走例外流程或重新烧录8. 关于选型与应用场景的几点务实建议8.1 一定要PSA L2SESIP L2吗先看产品定位如果你做的是智能门锁、工业网关、医疗边缘设备、车联网终端这类安全敏感场景那这两个认证会是很好的加分项甚至可能是招投标硬门槛。但如果只是做一盏台灯或一颗温度传感器那用一颗带基础安全启动的普通MCU也完全够用。别为了认证而认证安全能力是要为产品风险服务的。8.2 开发团队需要具备的安全能力面对这类芯片团队最好有人能同时理解TFM架构、密钥管理、安全启动流程和生命周期管理。只是按普通MCU的开发流程硬写代码很可能把芯片提供的安全能力全部绕过去。比如有些人图方便直接全部跑在非安全态把TrustZone隔离白瞎了这不怪芯片怪没会用。8.3 从长期看认证是生态入场券现在物联网安全标准越来越受重视欧盟的《网络弹性法案》、各国对关键基础设施的安全要求都在逐步提高。一颗MCU如果已经拿到PSA L2和SESIP L2意味着后续产品认证时很多事情会顺很多。所以说这不是一颗MCU的“独奏”而是在给整个设备供应链做安全铺垫。9. 最后再分享一个我踩过坑之后养成的习惯我现在拿到任何号称有安全认证的MCU都先做三件事第一把安全功能相关的状态打开强制走安全启动第二把安全侧和非安全侧的代码边界画清楚不允许应用层随便调用安全API第三给团队成员做一个安全开发要点清单防止有人用调试模式“图方便”。另外强烈建议你在做量产固件时把签名过程的日志和哈希值留档。将来一旦有固件安全事件你有完整的追溯链能快速定位是密钥泄露还是镜像被替换。安全不是芯片单方面的事芯片只是给你一套已经验证过的安全底座真正能不能守住阵地还得看你这个开发者怎么用。我在项目中体会最深的一点是安全认证不是终点而是起点。拿到PSA L2和SESIP L2的MCU等于你拿到一套“经过第三方验证的安全地基”但你在这块地基上盖什么样的房子用什么样的设计规范依然决定最终产品到底有多安全。踩过几次坑之后我现在选型最看重的不是规格表参数多高而是这颗芯片的安全能力我能不能真正用起来并且能长期维护下去。
返回列表