0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用安全元件进行固件验证的实现示例

星星科技指导员 来源:microchip 作者:microchip 2023-05-06 10:28 次阅读

Microchip微控制器与安全元件相结合如何提供帮助?

控制器中的不可变启动存储器是任何通过安全启动和安全固件升级实现固件验证的应用中非常重要的功能。最新PIC24F低功耗微控制器(MCU)和高性能dsPIC33数字信号控制器(DSC)具有ICSP™写禁止和CodeGuard™ Security的闪存OTP,可实现不可变的安全启动。ICSP 写禁止是一种访问限制功能,激活后,通过外部编程器和调试器以及读写保护功能限制对所有闪存的访问。激活后,ICSP 写禁止功能可防止 ICSP 闪存编程和擦除操作,并使闪存的行为类似于一次性可编程 (OTP) 存储器。CodeGuard 安全功能支持将闪存程序内存分段为两个具有不同权限的专用区域。第一个内存区域是引导段,它保存实现固件验证例程的引导加载程序代码。此引导段可以对自身和内存的应用程序区域的所有自写进行写保护。CodeGuard 安全性与 ICSP 写禁止功能的闪存 OTP 一起使引导加载程序不可变。正如我们之前提到的,我们必须记住,在当前的上下文中,不可变并不意味着无法访问或不可读,但无法通过远程数字攻击进行修改。第二个内存区域称为保存应用程序映像的常规段。

在 CodeGuard Flash 安全性的引导段中实现的固件验证码(不允许更改)向利用 CryptoAuthlib 库的安全元素发出 ECDSA 验证命令。来自加密身份验证系列信任平台TrustFLEX ATECC608 安全元件配备了安全密钥存储和基于硬件的加密加速器,能够在几毫秒内运行 ECDSA 验证操作,并且它还将安全地保护将用于在代码签名和/或代码摘要上执行此加密功能的公钥。公钥现在存储在安全元件的不可变安全内存区域中,利用防篡改和侧信道攻击保护进行物理保护。现在访问和更改密钥和代码要困难得多。查看我们的软件库,了解MPLAB代码配置器(MCC)支持的PIC24F MCU和dsPIC33 DSC,MPLAB®代码配置器(MCC)是一个免费的图形编程环境,可生成无缝、易于理解的C代码以插入到您的项目中。MCC 中的 CryptoAuthlib 库简化了 TrustFLEX ATECC608PIC24dsPIC33 器件的接口,并可实现各种安全功能。您可以通过 MCC 16 位引导加载程序库添加固件验证和安全固件升级功能。有关更多信息,请访问我们的嵌入式安全设计中心,了解如何实施安全启动和 OTA。您还可以参考 ShieldsUP 安全网络研讨会 #26:使用 dsPIC33 DSC、PIC24F MCU 和 ATECC608 器件简化安全应用设计

MCU 和 ATECC608 TrustFLEX 之间的交易图是怎样的?

信任平台设计套件(TPDS)软件工具是开始使用Microchip安全元件的起点。打开 TPDS 时,可以选择用例和开发平台。然后,该工具将详细说明所选用例的实际事务图。

例如,下面是经典微控制器和 TrustFLEX ATECC608 之间的固件验证事务图。它显示了主机MCU如何计算固件摘要,将该摘要作为质询发送到安全元素,安全元素尝试使用预先配置的公钥以加密方式验证摘要+签名,最后接收来自安全元素的响应。您可以看到主机MCU用于与安全元件通信的实际CryptoAuthLib API调用,例如“atcab_secureboot_MAC”,以及对MCU和安全元件之间实际发生的情况的简单描述。

pYYBAGRVuzeATEbEAAESZGM2DF4271.png


图 1:使用 TrustFLEX ATECC2 的固件验证用例的信任平台设计套件 V608 事务图

在此方案中,该工具将引导您完成以下期间需要发生的情况:

- 原型制作阶段:

非对称密钥对由工具生成用于原型设计

公钥由 TPDS 再次通过您的笔记本电脑进行配置,用于原型设计目的。对于生产,Microchip提供安全密钥配置服务

使用私钥对代码图像进行签名,以创建代码图像的签名

- 启动时:

主机MCU计算摘要

主机MCU将摘要和签名发送到安全元件

安全元件验证并响应有效/无效

主机 MCU 接收响应,指示固件的有效性

固件被授权在MCU中运行

如果您的微控制器没有 BootROM 功能,但您仍然想使用安全元件怎么办?

现在想象一下,您的设计基于经典的32位微控制器,例如SAMD21 ARM® Cortex® M0+,并且没有BootROM功能。这是当今绝大多数设计的情况,更换为新的微控制器涉及重新认证成本和时间,而这些成本和时间并不总是负担得起的。

在这种情况下,您需要假设您的微控制器代码可以更改。如果从微控制器到安全元件的ECDSA验证命令可以更改,后果是什么?如果代码仍然已签名,并且您的微控制器内没有用于验证的密钥,则可能会受到影响,但不会影响您的整个设备群(假设您使用的是公钥基础设施)。这是由于安全元件使您的公钥保持隔离,它将保护队列的其余部分。需要考虑的几个问题可能包括:

是否值得花时间对代码进行逆向工程,以简单地关闭您必须物理访问的设备?在大多数情况下,可能不会。这会影响设备队列吗?每个设备都必须物理访问,这是不切实际的。从远程攻击的角度来看,如果我们假设需要 OTA 更新来验证真正签名的代码并且代码中没有密钥,则可能不会。

此外,您能否信任您的合同制造商,提供将验证您的代码的加密密钥?如果答案是否定的,则安全元件的价值将翻倍,因为Microchip提供安全的密钥配置服务,可以在我们的安全工厂内秘密加载密钥,以消除合同制造商的密钥暴露并绕过中间人。计划您想要更改CM的那一天,如果密钥位于安全元件中,则只需使用Microchip更改送货地址即可。

最后,损益(P&L)与财务风险水平的成本影响是一个巨大的考虑因素。我们已经看到客户使用我们的安全元件,因为它是一种非常经济高效的密钥解决方案。一旦您在嵌入式系统中加载密钥,您就可以自定义该微控制器或微处理器。想象一下,您的处理器大约是 3-5 美元,现在您已经定制了您的控制器,这些控制器是不可取消、不可退回的多美元硅片,放在您的货架上。安全元件大大降低了财务风险。

物流供应链障碍和在MCU中安全配置“验证”密钥的成本增加

微处理器通常比微控制器具有更丰富的安全功能,但这两种解决方案都需要有一个安全的物理边界,密钥和加密算法都将位于该边界。不幸的是,这种设计很难以经济高效的方式实现,因为安全边界会对处理器或控制器的芯片成本产生重大影响。单体解决方案的成本并不是唯一需要增加的成本,但完全支持此类架构的技术支持、处理多用户权限的各种工具以及安全处理密钥配置的供应链物流继续增加复杂性和风险。让我们从损益的角度来看这个问题。让我们想象一下 100,000 个微处理器单元,它们都装有密钥,这使得所有这些处理器都是自定义的。现在想想你货架上的库存成本,无论你是分销商,还是一个OEM,这个成本都会打击你的损益,并随着时间的推移增加你的项目风险,因为项目不断被自然地推迟。

更具可扩展性的架构是使用Microchip CryptoAuthentication™配套设备,如ATECC608 TrustFLEX。密钥被隔离在经济高效的安全密钥存储中,几乎可以运送到世界任何地方(根据 EAR99 出口法规)。安全密钥配置服务消除了密钥暴露给供应链中间商,减少了攻击面。

总之,您需要考虑安全启动的固件验证、运行时代码验证和 OTA 更新后的安全基础,以及在处理加密密钥时的各种供应链风险和成本。将安全元件(如 ATECC608)与微控制器(如 dsPIC33 DSC 或 PIC24F MCU)与具有不可变启动功能的组合是设计的绝佳基础选择。如果微控制器没有 bootROM 功能,但依赖于安全元件来物理隔离公钥,则您的威胁模型和风险评估可能会在大多数应用程序中验证此类架构。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6813

    浏览量

    147673
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16024

    浏览量

    343724
  • DSC
    DSC
    +关注

    关注

    3

    文章

    234

    浏览量

    33342
收藏 人收藏

    评论

    相关推荐

    固件漏洞安全问题的解决办法

    如何解决?  据莱迪思半导体亚太区应用工程(AE)总监谢征帆介绍,Sentry方案在启动之前就会加密验证每个IC的固件以保证平台安全,并且在整个过程中都将进行实时检测攻击。当检测到攻击
    发表于 09-07 17:16

    如何重用Bootloader固件验证签名并解密数据呢

    程序代码比重新发明轮子(在这种情况下是加密)要小得多,也更安全。附件项目是经过修改的Z-Wave门锁示例应用程序,该示例应用程序演示了如何对Z-Wave固件以外的OTA代码/数据
    发表于 02-14 07:54

    可以使用ECCDSA去验证FW固件的真实性吗

    程序无法验证固件的真实性。我该如何调试这个问题?如果我从 STM32CubeIDE 单独调试 SBSFU.elf,安全启动会告诉我活动插槽中没有固件(很明显)所以不
    发表于 12-12 07:54

    如何使用ECDSA进行固件真实性验证

    我使用带有 KMS 的 X-CUBE-SBSFU 包在我的 ST MCU 上执行固件更新。为了验证固件的真实性,我使用了 ECDSA。但是,我不明白为什么我只需要提供私钥而不需要提供公钥。如果我理解
    发表于 12-15 08:21

    为什么STSAFE上没有存储密钥1和2的示例项目?那是安全问题吗?

    我正在为需要能够安全更新的 IoT 设计固件。我决定使用 X-CUBE-SBSFU 包。从加密的角度来看,要求是:固件更新需要 保密固件更新需要
    发表于 12-19 07:38

    如何安全实现车载网络通信?

    现场应用的固件漏洞补丁。此外,这些固件更新还需要加密安全实现,它们通常需要使用对称(AES)密钥对传入固件有效负载
    发表于 02-28 13:42

    Arm平台安全架构固件框架1.0

    )的标准化,以确保安全跨一系列安全硬件实现的服务允许并鼓励固件的重用组件。这种重复使用对于可持续地降低安全开发和集成的成本至关重要设备。 本
    发表于 08-08 07:14

    如何使用Xilinx AXI进行验证和调试

    了解如何使用Xilinx AXI验证IP有效验证和调试AXI接口。 该视频回顾了使用的好处,以及如何使用示例设计进行模拟。
    的头像 发表于 11-20 06:38 3632次阅读

    AN4062_STM32F0DISCOVERY外设固件示例

    AN4062_STM32F0DISCOVERY外设固件示例
    发表于 11-21 08:11 2次下载
    AN4062_STM32F0DISCOVERY外设<b class='flag-5'>固件</b><b class='flag-5'>示例</b>

    使用MAX32520的安全USB加密狗应用示例

    安全加密狗的第一个要求是固件映像身份验证和加密。MAX32520包含一个安全引导加载程序,用于验证并执行闪存中的
    的头像 发表于 01-16 15:24 710次阅读
    使用MAX32520的<b class='flag-5'>安全</b>USB加密狗应用<b class='flag-5'>示例</b>

    使用安全元件的3大固件验证用例

    法规和指南,在当地消费市场销售物联网产品。UL2900 最初非常注重软件安全实践,现在正被大公司视为消费者市场。在所有主要标准或法规中,您会发现建议验证代码是否真实的常见要求。
    的头像 发表于 05-06 09:34 520次阅读
    使用<b class='flag-5'>安全</b><b class='flag-5'>元件</b>的3大<b class='flag-5'>固件</b><b class='flag-5'>验证</b>用例

    STM32F4DISCOVERY外设固件示例

    电子发烧友网站提供《STM32F4DISCOVERY外设固件示例.pdf》资料免费下载
    发表于 09-21 11:13 0次下载
    STM32F4DISCOVERY外设<b class='flag-5'>固件</b><b class='flag-5'>示例</b>

    STM32F0DISCOVERY外设固件示例

    电子发烧友网站提供《STM32F0DISCOVERY外设固件示例.pdf》资料免费下载
    发表于 09-21 14:52 5次下载
    STM32F0DISCOVERY外设<b class='flag-5'>固件</b><b class='flag-5'>示例</b>

    车规MCU的安全启动固件

    。其主要功能包括以下几个方面: 启动验证安全启动固件通过验证启动代码的完整性和真实性来确保系统启动过程的安全性。它会对启动代码
    的头像 发表于 10-27 17:20 1511次阅读
    车规MCU的<b class='flag-5'>安全</b>启动<b class='flag-5'>固件</b>

    安全驱动示例代码和实现

    的mk文件)和common.mk文件,同时也需要将安全驱动集成到OP-TEE的内核中。 然后编译整体OP-TEE后就能够使用该份示例代码来验证本书提供的安全驱动
    的头像 发表于 10-30 16:07 392次阅读
    <b class='flag-5'>安全</b>驱动<b class='flag-5'>示例</b>代码和<b class='flag-5'>实现</b>