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

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

3天内不再提示

保护和控制存储在闪存中的软件

星星科技指导员 来源:嵌入式计算设计 作者:Kerry Maletsky 2022-08-17 10:30 次阅读

许多系统使用外部标准闪存芯片来存储不包括嵌入式非易失性程序存储的处理器的操作程序。这非常棒,因为它可以轻松进行闪存扩展和软件修改,可能在生产线上作为客户下载或在维护操作期间进行。缺点是 OEM 失去了对闪存内容的控制,可能会允许未经授权的复制或修改。

然而,要担心的不仅仅是收入损失。如果恶意软件被下载到系统中,OEM 的声誉可能会受到影响。对于医疗设备等系统,OEM 甚至可能面临责任问题。

收回安全

硬件安全芯片可以帮助将控制权交还给 OEM。可编程的、高度安全的智能卡处理器已经面世一段时间了,但需要编写额外的固件,并且会增加系统的不可接受的成本。另一方面,硬件认证芯片是交钥匙设备,不需要内部编程或密码算法的详细知识,而且价格适中。

这些芯片的工作方式非常简单。系统微处理器向芯片发送质询,然后芯片使用加密算法将质询与安全存储在非易失性存储器中的秘密结合起来。然后将响应发送回系统。芯片内部实现的算法的选择方式是,观察总线的观察者可以看到挑战和响应,但无法确定密钥的值。根据芯片存储秘密的安全程度,复制这样的个性化芯片可能非常困难。

虽然这些芯片可以以各种方式用于为系统增加安全性,但有两个软件保护功能特别令人感兴趣。第一个是安全启动,它提供了一种方法来确保只执行真实的程序,同时仍然允许进行升级。第二,反克隆,防止未经授权的系统构建或设计的完全复制。

安全启动

片上系统 (SoC) 设备通常包含一个小型引导 ROM,其中包含用于在执行外部闪存内容之前初始化芯片操作的程序。该引导 ROM 可以很容易地重新编程以与外部验证芯片一起工作。

在系统发货之前,OEM 将验证值与程序一起存储在闪存中。这是通过将程序的摘要与秘密相结合来计算的,其副本存储在认证芯片中。使用诸如安全散列算法 1 (SHA-1) 或 SHA-2 之类的散列算法来生成程序摘要。黑客可能能够更改闪存的内容,但在不知道秘密的情况下,无法生成新的验证值。

在执行引导 ROM 中的代码期间,微处理器实时生成存储在闪存中的可执行程序的摘要(参见图 1)。然后将该摘要作为质询发送到认证芯片。芯片会将摘要与其内部存储的秘密结合起来,并且可以将响应视为一种程序签名。如果响应与闪存中存储的验证值匹配,则允许继续执行闪存内容;如果不是,微处理器可以循环到下载器以等待加载有效的闪存映像。

图 1:引导 ROM 可以与微处理器一起工作,该微处理器生成存储在闪存中的可执行程序的摘要,并将其作为质询发送到身份验证芯片。

poYBAGL8UvSAHDT6AAKZlAV-lU0956.png

如果黑客可以将修改后的软件发送到身份验证芯片,使用逻辑分析仪读取响应,然后将此验证值与修改后的代码一起存储在闪存中,则此方案可能存在安全漏洞。但是,有几种方法可以解决此问题。

最好的解决方案是使用不返回预期验证值而是将其作为输入并返回真/假以指示匹配的身份验证芯片。摘要通常太大,而且芯片太慢,攻击者无法猜测修改代码的正确验证值。为了获得更高的安全性,安全芯片可以将随机挑战(或者可能是当前时间或处理器序列号)与真/假加密组合,并将其返回给处理器。这样,就不能使用简单的开关类电路修改来欺骗处理器。

另一种方法是机械地防止访问安全芯片的引脚。对于 ASIC SoC,可以以裸片形式购买安全芯片,并以多裸片封装的形式集成到主封装中。另一种方法是购买类似于 BGA 封装的安全芯片,由于焊盘完全隐藏,因此不允许探测。或者板上的安全芯片可以用环氧树脂进行保形涂层以防止访问。

在某些情况下,系统可能能够使用引导 ROM 中的软件计算闪存程序的摘要。但是,在启动时验证整个内存阵列可能过于耗时,尤其是对于具有较大闪存的系统。有两种方法可以解决这个问题:增量验证或硬件加速。

使用增量验证方案,仅使用引导 ROM 代码验证存储在闪存中的模块加载程序。在加载每个新模块以供执行之前,模块加载器使用认证芯片对该模块执行相同的验证过程。这些模块也可以在空闲时间提前验证,以提高事件响应性能。

现代处理器并不总是包含硬件哈希引擎,但高级加密标准 (AES) 或三重数据加密标准 (3DES) 引擎非常常见。通过将加密引擎配置为在基于密码的消息验证码 (CMAC) 模式下运行,可以轻松使用这些加密算法以硬件速度生成程序摘要。

反克隆

大多数原始设备制造商现在使用分包商来制造他们的设备。因此,系统有时会过度构建以供本地销售或可能在灰色市场上销售。或者,竞争对手或黑客可能会克隆系统并以较低的成本出售,因为他们不必投资于软件开发。如果系统仅使用现成的组件,则可以降低制造成本,但这会使未经授权的系统更容易构建。

使用硬件安全芯片可以结束这些克隆,而不会显着增加系统的大小或成本。编译到嵌入式软件中的是许多测试,以检查是否存在正确编程的硬件安全芯片。OEM 控制着被编程到芯片中的秘密,并控制着将被编程的芯片分发给分包商。作为另一种选择,芯片供应商可以为 OEM 管理芯片的个性化。

有几种方法可以实现这些软件测试。一种简单的方法是在软件中编译挑战和预期响应。如果安全芯片丢失或密码错误,响应不匹配,系统可以被禁用或返回下载模式以获取更正的文件。在程序的许多地方添加这些检查,黑客很难删除它们,尤其是当代码在初始加载时由 ROM 验证时。

这些软件测试的其他选项包括在程序的各个部分分配挑战生成和响应检查。来自安全芯片的响应可以用作即时软件模块解密的密钥。响应可以与一个单独的常数进行异或运算,然后用作跳转向量。如果安全芯片支持它,那么可以从不同的代码部分发送多个质询并组合生成单个响应。

在典型的实现中,芯片中包含许多不同类型的测试,因此即使一种机制被击败,其他机制仍能发挥作用。理想情况下,这些测试依赖于存储在安全芯片中的多个秘密,以确保即使一个秘密值被泄露,也能维持整个系统的安全性。

秘密安全

如果很容易从身份验证芯片中获取秘密,那么所有这些都无关紧要。在这种情况下,黑客可以创建正确的软件验证值,或者系统克隆者可以使用简单的微处理器对安全芯片进行建模。认证芯片至少以两种方式保护秘密:使用强大的密码算法和使用特殊的硬件芯片设计技术来防止对硅的直接或间接攻击。

过去,某种形式的线性反馈移位寄存器 (LFSR),也称为循环冗余校验 (CRC),被用作哈希算法。由于实施成本低,这些算法很常见,但对于现代高速 PC,这些算法通常可以在短时间内被分析和破解。

如果秘密大小太小,LFSR/CRC 算法尤其薄弱,因为使用相对简单的软件可以进行蛮力攻击。没有关于什么大小足够大的通用规则,但大多数现代系统使用 128 位或更长的密钥。

目前,SHA 算法是安全启动和反克隆的最佳选择。SHA-1 在今天已经足够安全了,但是它有一些已知的弱点并且已经被 SHA-2 系列(包括 SHA-256 和 SHA-512 等)所取代。由于大多数嵌入式系统的生命周期是以年为单位来衡量的,因此即使在其使用寿命结束时,使用最新的算法也能确保系统的安全性。

也可以购买使用公钥(非对称)算法的身份验证芯片,这些算法通常更慢且更复杂。系统端的软件也可以复杂得多。与使用散列算法的身份验证芯片相比,它们可以提高安全启动方案的安全性,同时对软件克隆几乎没有或没有额外的好处。

但是一个强大的算法是不够的。如今,微探针很容易在 eBay 上购买,因此芯片必须防止攻击者蚀刻掉封装并微探针一些内部节点以获取这些秘密。现代芯片通过整个芯片上的有源内部屏蔽、超过三层的窄宽度金属、内部块的额外加密以及没有暴露的测试焊盘来防止这种情况。

黑客还可能会尝试使用高电压或低电压或过高的时钟频率来让身份验证芯片泄露其秘密。如果试图在正常操作范围之外进行操作,则可以使用内部篡改检测器来防御这些攻击,该检测器会关闭芯片。这些是常见的安全块,大多数芯片制造商在通常的篡改块之外添加了其他专有安全组件。

嵌入式实现

嵌入式系统中的认证芯片可以检测存储在闪存中的系统软件的未经授权的修改或复制。此外,它们可以以多种其他方式用于交换会话加密密钥、向远程服务器提供节点身份验证、验证序列号存储、安全存储制造和/或维护历史,以及各种其他与安全相关的功能。

高安全性认证芯片不需要设计人员具备任何特殊的密码知识,并且可以集成到嵌入式系统中而不影响上市时间。通常以小包装形式出现,它们甚至适用于对空间最敏感的应用。Atmel AT88SA102S 就是这样一种芯片。它结合了 SHA-256 算法与 256 位密钥长度和与所有微处理器兼容的易于使用的单线接口。该设计包括覆盖整个电路的有源屏蔽、篡改检测器和加密的内部存储器。

审核编辑:郭婷

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

    关注

    38

    文章

    7484

    浏览量

    163779
  • 服务器
    +关注

    关注

    12

    文章

    9133

    浏览量

    85351
  • 微处理器
    +关注

    关注

    11

    文章

    2259

    浏览量

    82414
收藏 人收藏

    评论

    相关推荐

    闪存的哪些扇区可用于用户数据存储

    界面(通过 AP 获得),然后闪存存储数据,以便设备自动以 ST 模式连接,并保存用户密码以保护配置。变化。 我已经准备了这样的
    发表于 07-12 08:13

    闪存技术基础-1-1 #存储技术

    闪存IC设计存储技术闪存技术
    EE_Voky
    发布于 :2022年06月28日 17:31:14

    闪存技术基础-1-2 #存储技术

    闪存IC设计存储技术闪存技术
    EE_Voky
    发布于 :2022年06月28日 17:31:41

    闪存技术基础-1-3 #存储技术

    闪存IC设计存储技术闪存技术
    EE_Voky
    发布于 :2022年06月28日 17:32:08

    闪存存储的VDI场景应用

    行业向闪存时代平滑演进。    以PC 为办公工具的传统办公模式不但耗时,而且成本高昂,随着成熟VDI系统企业IT系统中广泛应用,不仅可以本地或云中交付、保护和管理 Windows
    发表于 11-29 11:41

    如何在闪存而不是RAM存储大型常量数组

    如何在闪存而不是RAM存储大型常量数组以上来自于谷歌翻译以下为原文 How to store large constant arra
    发表于 02-20 15:30

    什么是基于闪存平台的存储管理策略?

    作者:李建勋 樊晓光 禚真福来源:什么是基于闪存平台的存储管理策略?嵌入式系统,由于闪存成本低、容量大、非易失、访问速度高和机械故障少的
    发表于 07-31 08:17

    启动时清除闪存存储的数据

    嗨,我做了一些函数闪存读和存储。代码可以工作,当我存储数据时,我可以读回去,但是启动时,当
    发表于 03-13 10:27

    DLP4500将图像存储闪存

    新手入门DLP4500用户手册说如果要创建序列,首先要将图像存储闪存Image/Fireware下的Fireware Bulid
    发表于 04-09 18:46

    STM32F103C8如何编程以断电时将计数器值存储闪存

    STM32F103C8,带MXCUBE,MDK-ARM V5。我想知道如何编程以断电时将计数器值存储闪存。当电源上升时自动调用计数器值
    发表于 01-30 07:34

    使用PE微型调试器控制闪存程序时,无法控制闪存程序怎么解决?

    当我使用 PE 微型调试器控制闪存程序时,我们 216 处收到以下错误 ieruntime 错误并且 GDB 已终止,因此我们无法
    发表于 04-17 06:03

    闪存储控制器选择技巧

    现代快闪存储控制的磨损平衡技术已经有显著进步,能够克服快闪存储器储存介质固有的弱点,并帮助发挥出快闪存储器的优势。对于现代快
    发表于 03-07 09:45 1413次阅读

    闪存存储企业为何如此受到欢迎?

    时至今日,貌似整个存储行业都在谈论全闪存存储,无论是厂商还是用户,但凡提到有关存储的相关话题,必须离不开全闪存,貌似
    的头像 发表于 06-17 15:34 2883次阅读

    浪潮存储闪存储领域的产品及技术布局

    存储作为新存储引领者,以“云存智用 运筹新数据”理念,加快布局闪存存储步伐,针对用户不同的应用场景和需求,创新研发了浪潮新一代全闪存储平台
    的头像 发表于 08-10 14:32 2447次阅读

    保护控制存储闪存软件

      许多系统使用外部标准闪存芯片来存储不包括嵌入式非易失性程序存储的处理器的操作程序。这很棒,因为它允许轻松的闪存扩展和软件修改,也许在生产
    的头像 发表于 10-24 11:38 622次阅读