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

描述

安全启动是构建安全电子系统的基础。随着微控制器的工艺几何形状不断缩小,板载嵌入式闪存正逐渐被取代。

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

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

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

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

建立信任根

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

非对称密钥算法。

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

对称密钥算法

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

微控制器

图 1:建立信任根

从原始硬件存储启动

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

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

使用受信任的原始启动代码启动

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

简单保护

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

校验和验证

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

使用加密存储引导代码

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

闪存设备辅助验证

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

安全非闪存

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

设备识别复合引擎

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

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

安全存储区域

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

如果固件引导加载程序存储在配置为需要身份验证的区域中,则用户可以确保固件未被任何未经授权的各方修改。如果固件包含用户不希望在SPI总线上公开的敏感数据,则可以将其存储在需要加密的区域,以便仅将加密数据传输到总线上。

快速安全启动

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

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

审核编辑:郭婷

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

全部0条评论

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

×
20
完善资料,
赚取积分