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

描述

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

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

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

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

建立信任根

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

非对称密钥算法。

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

对称密钥算法

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

mcu

图 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 闪存等安全存储器实现了安全功能,使外部存储能够支持快速安全的启动。

审核编辑:郭婷

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分