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

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

3天内不再提示

将引导代码存储在安全的NOR闪存中

星星科技指导员 来源:嵌入式计算设计 作者:Zhi Feng 2022-06-30 11:14 次阅读

电子系统在我们的生活中发挥着至关重要的作用。无论是通过智能手机进行通信,还是驾驶配备高级驾驶员辅助系统 (ADAS) 的汽车,我们都依靠电子设备来简化甚至执行我们的日常任务。这些系统很容易被黑客入侵,而且它们相互连接的事实放大了威胁。随着可信情报承担关键活动(例如,个人医疗监控),网络攻击和破坏的后果会增长到包括人身伤害甚至死亡。在这个新的现实中,构建能够抵御此类攻击的电子系统势在必行。

安全启动是构建安全电子系统的基础。随着微控制器的工艺尺寸不断缩小,板载嵌入式闪存正逐渐被外部 NOR 闪存所取代。这种架构演变通过暴露的总线接口、克隆可能性等创造了更大的攻击面。解决这一日益严重的漏洞的一种方法是使用安全 NOR 闪存进行设计以保护存储并帮助 MCU 在启动时建立安全的信任链。

安全启动——安全系统的基础

通电时,每个电子系统都会启动。对于嵌入式系统,这通常通过运行存储在非易失性存储器中的引导代码来实现。要启用安全启动,系统需要建立信任根,从原始硬件存储启动,并使用原始受信任启动代码启动(参见图 1)。

建立信任根

当 MCU 开始启动时,它必须从受信任的位置运行。这通常通过小型内部 ROM 或受信任的嵌入式闪存来实现。此代码必须是不可变的,以便系统可以从本质上信任它。它作为信任根层次结构的基础。从这里系统可以通过验证硬件和验证存储内容将信任扩展到外部存储。

非对称密钥算法

为了建立信任根,ROM 代码通常依赖于预先存储的密钥。如果使用非对称密钥算法,该密钥通常是公钥。MCU 使用此公钥来验证第二阶段引导加载程序的签名,该引导加载程序驻留在外部闪存设备上。与实际引导加载程序一起存储的签名是引导加载程序的摘要值,并使用与公钥加密配对的私钥进行签名。如果 MCU 使用公钥成功验证了引导加载程序签名并从当前引导加载程序计算出相同的摘要值,则可以确定引导加载程序代码没有被更改。这样,信任根就建立起来了。现在可以安全地执行这个经过验证的第二阶段引导加载程序。

对称密钥算法

通常,对称密钥算法的执行速度比对称算法慢。出于这个原因,在启动时间很关键的应用程序中,用户经常选择对称密钥算法。使用对称密钥,主机 MCU 和外部闪存共享相同的密钥。可以在现场部署之前(即在制造期间)在安全环境中提前建立此共享秘密。随后,共享密钥可用于通过在软件上使用基于密钥的哈希来快速验证第二阶段引导加载程序。

poYBAGK9FTeAG9LIAAEzWYLrIx4860.png

图 1:建立信任根

从原始硬件存储启动

如果整个启动代码都存储在 MCU 内的嵌入式闪存中,那么从原始硬件存储启动可能不是主要问题。这是因为在不损坏 MCU 主机的情况下更换嵌入式闪存可能是不可能的。然而,随着行业向 22-nm MCU 发展,在 MCU 中嵌入闪存变得越来越困难。超过 28nm 的技术可能会被迫将引导代码存储在外部闪存中。因此,为了安全启动,主机必须考虑是否更换了外部闪存。

为了防止黑客使用原始内存内容克隆硬件,主机MCU可以在制造过程中与引导存储设备执行配对过程。之后,只有这个配对的存储设备才能提供启动代码进行启动。因此,必须在设备上使用安全的硬件标识符来提供这种配对能力。标识符可以是非常强的设备 ID,不能被篡改或克隆。因此,配对后的认证过程可以基于这样的标识符。

使用原始的、受信任的引导代码进行引导

在识别出原始硬件存储之后,下一步是验证启动代码,以确保它没有被篡改或修改。有多种方法可以做到这一点,每种方法都需要不同的处理能力并提供相应的安全级别。

简单保护

与大多数传统的 NOR 闪存一样,用户可以在引导代码所在的内存范围内启用基于块或扇区的保护。这种保护也可以防止意外写入并从受保护区域中擦除。简单保护中没有安全元素,因此这种保护对于更改代码的故意攻击很弱。黑客可以轻松发出命令来取消对该区域的保护并修改启动代码。即使保护方案包括密码,由于密码本质上是静态的,它也可能被复杂的攻击破解。

校验和验证

如果已从原始引导代码计算出校验和,则可以在后续引导中使用它来验证代码未被修改。这个过程必须由宿主完成;因此,它要求主机从引导设备读取整个引导代码并计算校验和,然后才能开始运行它。请注意,主机不能依赖存储设备来提供校验和值,因为这可能会在攻击期间被修改。

使用加密存储引导代码

加密的引导代码可以使用密钥存储在 NOR 闪存中。MCU 内部可能有硬件在启动时透明地解密数据。由于引导代码纯文本不会暴露在总线上,因此无法窃听。只要用于加密的密钥不被泄露,这种方法就是安全的。但是,如果加密密钥被泄露,则必须重新刷新外部闪存上的引导代码内容。这个过程可能很乏味,甚至不可能在已经在现场的设备上实施。

闪存设备辅助验证

如果设备提供此类功能,则可以将验证任务卸载到 NOR 闪存,而不是 MCU 将整个引导加载程序读取到 RAM 以进行验证。在对引导时间敏感的系统中,卸载验证任务可以帮助 MCU 更快地开始执行引导加载程序。看门狗定时器可用于在验证失败的情况下重置系统。使用这种方法,MCU 可以在闪存设备验证代码时开始处理一些紧急任务。当然,在验证完成之前,只能运行非安全功能。这意味着主机必须实现一个安全的中断处理程序,该处理程序可以通过中断事件从 NOR 闪存获取验证结果。

安全 NOR 闪存

传统的 NOR 闪存能够提供简单的数据保护,无论是否有密码。这使得使用传统 NOR 闪存实现安全启动功能变得困难。赛普拉斯公司提供的下一代安全 NOR 闪存集成了安全功能,可实现更高级别的安全启动。

设备识别复合引擎 (DICE)

由可信计算组 (TCG) 指定的 DICE 提供了一种方法,用于根据每个设备的唯一设备机密来获取强大且安全的设备 ID。使用存储引导代码的设备上的 DICE,系统可以在引导时建立信任根基础。

DICE 建立在唯一设备密钥 (UDS) 之上。UDS 是每个设备上的真正随机数,没有任何关联。UDS 在客户的设施中生成并存储在设备上的一个秘密位置,一旦写入,就无法读取 UDS。由证书提供的设备标识源自 UDS。因此,一旦 MCU 与特定的闪存设备配对,就不可能克隆包含相同 UDS 的设备。

安全存储区域

可以将安全 NOR 闪存配置为在设备内具有多个独立的安全区域。具有不同访问级别的区域可用于存储可能需要不同安全级别的固件或软件。个别区域也可以配置为一般数据的非安全存储。随着安全级别的提高,设备的读取吞吐量会因加密措施而降低。通过提供各种访问级别,用户可以决定系统每个部分的性能和安全性之间的权衡。

如果固件引导加载程序存储在配置为需要身份验证的区域中,则用户可以确定固件未被任何未经授权的方修改。如果固件包含用户不想暴露在 SPI 总线上的敏感数据,则可以将其存储在需要加密的区域中,这样只有加密的数据才会传输到总线上。

快速安全启动

某些应用程序(例如汽车系统)需要及时安全地启动。在现代复杂系统中,引导代码或应用软件可能非常庞大,以至于 MCU 需要大量时间来读取和验证整个软件。在这种情况下,安全 NOR 闪存可以在启动期间卸载 MCU,以验证存储在设备上的软件。这是通过提前在 MCU 和设备之间存储共享秘密信息来实现的。在启动过程中,可以快速验证此共享密钥,以确保设备和存储软件的原创性。该设备还可以在 MCU 开始处理一些基本任务时验证软件应用程序代码。因此,可以缩短整个启动时间,以满足汽车应用的严格要求。

汽车、工业和通信领域的现代电子系统需要高度安全的闪存存储。设计人员面临着构建能够抵御网络攻击的安全系统的挑战。赛普拉斯串行和并行NOR 闪存等安全存储器实现了安全功能,使外部存储能够支持快速安全的启动。

审核编辑:郭婷

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

    关注

    146

    文章

    16011

    浏览量

    343536
  • 存储器
    +关注

    关注

    38

    文章

    7144

    浏览量

    161975
收藏 人收藏

    评论

    相关推荐

    Flash存储芯片:NOR Flash、NAND Flash、UFS和eMMC的比较与解析

    NOR Flash的制造工艺相对落后,密度较低,无法存储大量的数据。   用途 NOR Flash被广泛用于嵌入式系统的引导存储器,可以
    发表于 04-03 12:05

    CYUSB3KIT-003如何集成一个NOR闪存

    我有一个 CYUSB3KIT-003。 我需要集成一个 NOR 闪存,我可以从中将固件读取到 RAM,然后 NOR 闪存的一部分内存应该EVAL_2K4W_ACT_BRD_S7作为大容
    发表于 03-05 07:23

    请问如何激活Traveo II (TVIIBH4M) 引导加载程序?

    问题? 此外,是否有编写引导加载程序固件的参考/示例? 备注:我代码存储 CM0+ 上,我正在使用 Flash API 的屏蔽模式
    发表于 02-01 07:56

    2024年1月,预计NOR Flash价格将上涨5%

     NOR Flash是一种基于NOR门结构的闪存NOR是逻辑门电路中的“或非”门。NOR Flash具有并行访问结构,这意味着每个
    发表于 12-27 14:37 355次阅读

    嵌入式系统Nor Flash引导存储器和固件存储有何关系?

    嵌入式系统需要可靠且快速的引导存储器来在系统启动期间加载初始引导代码和操作系统。
    的头像 发表于 12-05 14:08 337次阅读

    Nor Flash的基本概念 Nor Flash的内部结构解析

    Nor Flash是一种非易失性存储技术,用于存储数据和代码。它是一种闪存存储器,类似于NAND
    的头像 发表于 12-05 13:57 1042次阅读

    NOR FLASH对计算机存储有何作用?

    NOR FLASH是一种非易失性存储技术,对计算机存储具有重大影响,闪存其独特的特性和功能影响着计算机存储系统的各个方面
    的头像 发表于 12-05 10:32 401次阅读

    i.MX RT ROM bootloader应用程序映像从闪存或其他存储设备复制到SDRAM并在那里运行的方法

    介绍 i.MX RT ROM bootloader 提供了丰富的选项,使用户程序能够以各种方式启动。某些情况下,人们希望应用程序映像从闪存或其他存储设备复制到 SDRAM 并在
    发表于 06-09 08:31

    收到错误“FlexSPI NOR的无效文件格式,写入支持仅nopadding可启动映像”怎么解决?

    ),这会将启动信息添加到存储 QSPI 闪存的应用程序映像。 我想要实现的是使用
    发表于 06-07 08:14

    MCP5674F如何读取或携带闪存存储的内容?

    如上图所示,这是程序试图擦除内部闪存代码,但问题是它已被正确擦除,无法证明它是可以正确编程的代码。 或者,如何读取或携带闪存
    发表于 05-19 06:01

    xspi图像升级到NOR Flash时的疑问求解

    xspi 图像升级到 NOR Flash 时遇到了一个问题 (我知道,我应该先从 sdcard 开始) 我遵循了说明但是由于一些物流问题而 不是通过 tftp 上传(预构建)xspi 图像
    发表于 05-16 07:43

    求分享串行NOR引导实用程序

    BOOT_MODE[1:0]= x00 从保险丝启动后,尝试通过 FLEXSPI NOR(次级引脚,见图 2)连接到引导实用程序,但出现图 1 的错误。 设备类型:试过 QuadSPI SDR
    发表于 05-10 08:53

    为什么无法更大的闪存上安装LittleFS?

    我正在为我们的原型使用 IMXRT1172xx 微控制器。因为我们计划 LittleFS 与 Ext 运行的应用程序代码一起使用。64MB的
    发表于 05-08 06:44

    iMX8QXP擦除NOR闪存的“boot0”分区时,没有任何反应是为啥?

    我有一个iMX8X iMX8QXP,我正在尝试 NOR 闪存(最终是 eMMC)上设置辅助引导容器集。我试图烧掉任何 OTP 保险丝之前
    发表于 05-05 10:40

    NOR闪存启动时,Core0如何获取启动代码

    NOR 闪存启动时,Core0 如何获取启动代码? 电路板设置 (T1024RDB) 是: 开关 RCW_SRC 设置为 NOR
    发表于 05-04 07:16