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

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

3天内不再提示

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

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

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

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

夺回安全性

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

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

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

安全启动

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

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

在引导ROM中执行代码期间,微处理器实时生成存储在闪存中的可执行程序的摘要。然后,此摘要作为质询发送到身份验证芯片。芯片将摘要与其内部存储的机密相结合,响应可以被视为一种程序签名。如果响应与闪存中存储的验证值匹配,则允许继续执行闪存内容;如果没有,微处理器可以循环到下载器,等待加载有效的闪存映像。

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

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

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

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

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

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

反克隆

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

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

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

这些软件测试的其他选项包括将质询生成和响应检查分布在程序的各个部分。来自安全芯片的响应可用作动态软件模块解密的密钥。响应可以使用单独的常量进行 XOR‘d,然后用作跳转向量。如果安全芯片支持它,则可以从代码的不同部分发送多个质询并组合以生成单个响应。

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

秘密安全

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

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

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

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

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

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

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

嵌入式实施

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

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

审核编辑:郭婷

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

    关注

    68

    文章

    18927

    浏览量

    227230
  • 芯片
    +关注

    关注

    450

    文章

    49636

    浏览量

    417162
  • 微处理器
    +关注

    关注

    11

    文章

    2221

    浏览量

    81982
收藏 人收藏

    评论

    相关推荐

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

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

    XMC1302T028X0016ABXUMA1如何在闪存存储数据?

    你好,我想在 MCU 存储一些配置参数。 如何在闪存存储这些数据? 我只需要在发货前写一次这些数据。 我指的是这份文件https://w
    发表于 07-04 07:32

    铁电存储器SF25C20(MB85RS2MT)电机控制应用

    铁电存储器SF25C20(MB85RS2MT)电机控制应用
    的头像 发表于 07-01 10:00 337次阅读
    铁电<b class='flag-5'>存储</b>器SF25C20(MB85RS2MT)<b class='flag-5'>在</b>电机<b class='flag-5'>控制</b><b class='flag-5'>中</b>应用

    TC375如何将变量值保存到非易失性存储

    我有一台 TC375,正在开发工作室进行编程。 我的软件有一个控制系统,它使用一组我可以调整的参数。 这些参数设置为全局变量。 一旦我对它们进行了调整,控制器复位后就无法保持它们的值。 是否有办法使用
    发表于 05-31 06:40

    华为高端全闪存荣获DCIG年度存储数据安全首位推荐

    全球知名技术评估机构DCIG近日发布的《DCIG 2024-25高端全闪存存储安全TOP5》报告,华为OceanStor Dorado 18000高端全闪存凭借其卓越的数据安全能力,
    的头像 发表于 05-24 10:04 398次阅读

    如何在启动软件时将信息存储非易失性存储,以便在COLD PORST之后恢复?

    如何在启动软件时将信息存储非易失性存储,以便在 COLD PORST 之后恢复?
    发表于 05-21 07:55

    请问如何编写.bin程序使用IAR或GreenHill将文件存储到外部存储

    你好, 我们使用带有 CYT4DN 和 S25HS 外部存储器的自定义COOLDIM_PRG_BOARD 。 我们正在尝试闪存 .bin 图像 文件到外部存储。 因此,我想知道 I
    发表于 05-15 07:22

    如何让CYUSBlinux上闪存固件?

    你好, 我想通过控制中心 linux 刷新固件。 Windows ,我们有支持 EZUSB 的
    发表于 02-22 06:23

    Pflash和Dflash都有闪存ECC保护,ECC内存在哪里?

    在用户手册,Pflash 和 Dflash 都有闪存 ECC 保护,我想知道 ECC 内存在哪里? 它会占用 pflash 空间还是存储在用户无法访问的地方? 在此先谢谢!
    发表于 01-26 08:12

    stm32变量能存进flash

    当涉及到将变量存储Flash时,我们通常指的是将变量存储STM32微控制器的
    的头像 发表于 12-28 15:33 1864次阅读

    STM32F10xxx微控制器的闪存存储器烧写手册

    本编程手册介绍了如何烧写STM32F101xx、STM32F102xx和STM32F103xx微控制器的闪存存储器。为方便起见,本文中除特别说明外,统称它们为STM32F10xxx。
    发表于 11-28 15:16 2次下载

    OptiFlash存储器技术如何利用外部闪存应对软件定义系统的挑战

    写字楼、工厂车间和汽车软件正逐步取代机械部件和固定电路。例如,使用智能锁取代机械锁后,用户可以通过手机应用程序对智能锁进行控制,同时制造商可通过
    的头像 发表于 11-24 10:53 251次阅读
    OptiFlash<b class='flag-5'>存储</b>器技术如何利用外部<b class='flag-5'>闪存</b>应对<b class='flag-5'>软件</b>定义系统<b class='flag-5'>中</b>的挑战

    性能超群的含闪存存储器、8引脚PIC微控制

    电子发烧友网站提供《性能超群的含闪存存储器、8引脚PIC微控制器.pdf》资料免费下载
    发表于 11-17 11:02 0次下载
    性能超群的含<b class='flag-5'>闪存</b><b class='flag-5'>存储</b>器、8引脚PIC微<b class='flag-5'>控制</b>器

    长江存储232层闪存揭秘

    长江存储1Tb TLC芯片的存储密度已达15.47Gb每平方毫米,1Tb QLC更是高达19.8Gb每平方毫米,两种闪存类型中都无出其右者。
    发表于 11-02 11:11 2117次阅读
    长江<b class='flag-5'>存储</b>232层<b class='flag-5'>闪存</b>揭秘

    STM32F10xxx闪存编程手册

    的内容。然而,IAP要求至少有一部分程序已经使用ICP烧到闪存存储闪存接口是AHB协议上实现了对指令和数据的访问,它通过对
    发表于 09-26 06:18