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

描述

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

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

收回安全

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

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

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

安全启动

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

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

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

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

微处理器

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

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

另一种方法是机械地防止访问安全芯片的引脚。对于 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 位密钥长度和与所有微处理器兼容的易于使用的单线接口。该设计包括覆盖整个电路的有源屏蔽、篡改检测器和加密的内部存储器。

审核编辑:郭婷

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

全部0条评论

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

×
20
完善资料,
赚取积分