在我们的现代世界中,越来越多的设备伴随着各种各样的嵌入式系统。这一趋势的一个明显例子就是如今的汽车,它们拥有数十个电子控制单元(ecu),控制从空调、电动车窗到发动机和刹车系统的一切。几个ecu允许通过引导加载程序下载更新的程序和数据代码。这类软件可能是一个控制单元固件更新,用于修复bug、改进功能或下载数据(如附加的多媒体文件)。第一种情况也称为软件下载或简单闪烁(因为闪存更新)。下载可以通过诊断通道或其他可用的通信通道(如蓝牙和GSM)直接执行。

图1.嵌入式系统制造商的数字签名的产生。

这样的车辆通信通道一旦对外开放下载软件,就必须保证其完整性。恶意软件下载的一个例子是由未经授权的一方替换固件,例如,在汽车上下文中为芯片调优所做的。主要安全目标如下:

  1. 嵌入式系统只接受原始软件。不允许任何恶意软件下载到嵌入式系统中。特别是,软件不能成功下载到改变其定义行为的嵌入式系统中。
  2. 只有经过身份验证的一方可以更改存储在嵌入式系统中的数据,例如参数。

此外,对于实际的安全设计来说,单个嵌入式系统的危害不影响同一产品线的其他嵌入式系统的安全也是理想的(即,成功的攻击不具有伸缩性)。

嵌入式系统侧所需的计算性能应最小。

数字签名

提出了一种基于数字签名的安全软件闪烁方案。数字签名提供了完整性和真实性的安全目标;正在进行数字签名的数据不能被恶意的第三方更改而不被接收方检测到。此外,接收方可以验证数据确实是由声明的签名者签署的。此外,签名者不能否认他是该签名的合法创建者(不可否认性)。数字签名是通过非对称密码算法生成和验证的,如RSA (Rivest Shamir Adleman)算法或椭圆密钥密码(Elliptic Key Cryptography, ECC)算法。

数字签名的计算结果如图1所示。密钥对由私钥SK和公钥PK组成。只有签名者可以访问SK,而PK可以公开发布。在我们的设置中,SK只为嵌入式系统的制造商所知,而PK被嵌入到每个嵌入式系统中。程序代码x首先被哈希为一个固定长度的短值y。通常,y是通过应用SHA族的哈希函数来计算的,结果是20到32字节的输出。最后,在y上使用私钥SK计算数字签名,然后使用公钥PK验证签名。请注意私钥SK绝不能离开制造商的安全环境。因此,签名通常是在高安全模块(High Security module, hms)中计算的,例如智能卡安全控制器,这些模块用于银行应用程序,并根据公共标准(Common Criteria, CC)安全标准提供抗篡改特性。

证书

图2.安全软件下载。

每个嵌入式系统都使用公钥,固件程序使用相应的私钥进行签名。可以为每个嵌入式系统、车型年份、每个ECU类型等使用单独的公钥/私钥对,然而,这增加了整个系统的物流工作。对于单个公钥/私钥对,使用证书是合理的。证书相当于护照;它验证公钥,如果需要,还验证身份。在汽车的情况下,证书只是一个由OEM的私钥签名的公钥,以及公钥和一些附加信息:SigSK(PKA) | PKA |数据。然后由PKA验证flash程序,并使用相应的私钥进行签名。当闪烁过程开始时,首先需要使用OEM的根公钥PK下载证书并进行验证,然后使用PKA下载flash程序并进行验证。

安全软件闪烁

解决这个问题的方法通常很简单。基于数字签名,软件的发行者对程序代码进行签名,嵌入式系统(如车辆中的控制单元)对程序代码进行验证。因此,颁发者持有用于签名程序代码的私钥,控制单元持有用于验证程序代码的相应公钥。图2更详细地显示了这一点。首先,软件开发。一旦完成(步骤1),程序目标代码被传递到信任中心(步骤2),该信任中心使用其私钥对目标代码进行签名。然后签名被传回并附加到程序目标代码中(步骤3)。代码和签名包现在存储在一个数据库中(步骤4),该数据库可能包含不同嵌入式系统的版本。最后,将相应的程序代码下载到嵌入式系统中(步骤5),并通过其公钥进行验证(步骤6)。

人们可以看到安全目标#1显然是明确的;只有合法的权限可以发出适当的签名,该计划代码将被车辆接受,即嵌入式系统只接受真实的软件。今天的大多数汽车已经提供了一种下载软件的机制。因此,在车辆中另外只需要用于验证签名的机制。RSA是适合签名验证的适合,因为它允许非常快速的签名验证,并且可以在无侵权专利的情况下以软件实现。

图3。Challenge-and-Response识别。

在服务器端,必须彻底组织密钥管理和组织安全。组织安全包括有权访问签名程序代码的组织,以及签名过程是如何执行和记录的。然而,不需要完全规模的公钥基础设施(PKI)。基本上,只要发出一个单独的私钥/公钥对就足够了,这样私钥就存储在信任中心中,公钥存储在嵌入式系统中。信任中心可能仅仅是一台与任何计算机网络断开连接的PC机和一张持有秘密密钥的安全智能卡。

如果需要更细粒度的方法,那么可以为每个嵌入式系统类型、每个生产年度或每个生产地点应用密钥对。但是,不需要引起开销的证书。嵌入式系统只需要存储一个公钥,这样就不会存储任何秘密信息。然而,这个公钥必须被保护起来防止被操作,也就是说,它必须存储在安全内存中,可以读取但不能重写。例如,许多现代微控制器提供内部闪存ROM存储器和安全功能,防止修改这一存储器。否则,敌人可能会替换这把钥匙然后激活任何被操纵的软件。

安全目标#2可以通过图3所示的简单的挑战和响应机制来实现。嵌入式系统和外部方(例如标准PC)共享一个密钥。然后各方运行一个挑战-响应方案,以证明外部方知道秘钥。运行成功后,外部可以访问嵌入式系统进行参数调整。然而,重要的是要指定一个定义良好的接口。例如,在日志文件中记录所有更改并只允许访问非安全的关键数据是合理的。使用对称密钥管理是合理的——每个嵌入式系统都知道一个与第三方共享的独立对称密钥。该第三方可能是将所有密钥存储在受保护数据库中的系统制造商。安全性可以通过使用安全令牌来进一步提高,安全令牌持有访问嵌入式系统的秘密密钥。这种方法甚至允许实现多个授权级别。 For instance, in the automotive context there might be a basic level for workshops to adjust typical parameters of an ECU, and another level for testing that allows all parameters to be changed.

保护嵌入嵌入式系统的密钥是至关重要的。如果对手能够读出对称密钥或替换公钥,他可能就能够操作程序或数据代码。因此,虚拟软件保护只能通过使用安全内存或应用使用安全锚的硬件辅助方法来实现,如参考文献4所述。

图4。Flash的过程。

然而,也有一些机制试图使使用复杂化,或者至少试图帮助识别来源,以防软件可能被攻击者成功读出。为了使程序二进制文件的反编译和重新设计更加困难,被称为“模糊处理程序”的程序将源代码、目标代码或两者都转换为模糊代码,使结果过于复杂,因而可读性差得多,几乎不可能被人类理解。然而,混淆3只会增加逆向工程的难度,限制可移植性,并被认为是“通过模糊实现安全性”。数字水印和指纹技术是将可见或不可见的信息嵌入到数字内容(软件或数据)中,而这些数字内容(软件或数据)无法删除或修改,或只能很困难地删除或修改。原始所有者可以使用工具提取嵌入的信息来检测,例如,非法复制或篡改的来源。然而,已经有技术可以使这两种机制废除各自的限制。因此,这种机制不能取代适当的基于硬件的软件保护。

确保Flash的过程

Flash程序文件有几个部分。每个块可选地加密,事先计算文件的签名。在第一步中,触发闪烁过程的外部设备可选地可选地验证引导加载程序(例如,通过如上所述的挑战 - 重呼吸机制)。在下一步中,可以将证书传递给引导加载程序,验证它的存储公钥。然后,外部设备通过块通过块到嵌入式系统的引导加载程序。引导加载程序首先解密块,然后将其存储在闪存中。同时,引导加载程序逐步计算每个块上的哈希值。一旦所有块通过,引导加载程序会在新的闪存程序文件上最终确定散列值的计算,并使用所确定的散列值执行数字签名验证。如果签名验证成功,则接受并激活下载的文件。否则,激活安全过程,并向引导加载程序等待下载适当的闪存文件。 This is shown in Figure 4.

结论

几乎所有的现代嵌入式系统都配备了内部闪存。通常,在固件中内置一个引导加载程序来更新程序。然而,在大多数情况下,没有实现机制来避免下载一个操纵程序,以一种未经制造商授权的方式改变设备的行为。在本文中,我们介绍了保护软件更新过程的机制。这些机制是应对操纵攻击的有效对策,特别是如果内部Flash ROM中的引导加载程序可以用安全(所谓的“锁”)位来保护的话。这些机制已经在各种应用中成功实现,从汽车领域到赌博和移动电话行业。德国汽车厂商甚至标准化了bootloader机制。虽然该标准只允许通过所谓的消息认证代码(MAC)来使用对称加密,但我们强烈建议实现基于数字签名的非对称加密方法;否则,要么我们原始的安全需求无法满足,要么组织的工作是巨大的。

虽然加密机制通常很容易实现,但需要在所有级别上提供安全性,从组织安全性到为固件签名到包括供应商的适当机制。特别是,需要小心地将安全机制纳入现有的开发过程中。

本文由密歇根州安阿伯市escrypt Inc.的首席执行官André Weimerskirch和CTO Kai Schramm撰写。欲了解更多信息,请联系Weimerskirch先生此电子邮件地址正在受到垃圾邮件程序的保护。您需要启用JavaScript来查看它。,Schramm先生此电子邮件地址正在受到垃圾邮件程序的保护。您需要启用JavaScript来查看它。或者访问http://info.hotims.com/22920-402。

参考

  1. Christian S. Collberg和Clark D. Thommorson,“软件保护的水印,防篡改和混淆工具”,IEEE在软件工程中的交易,Vol。28,NR。8,2002年。
  2. 赫斯特勒倡议软件(HIS),“HIS安全模块规范,版本1.1”,可用这里, 2006年7月。
  3. “基于可执行代码模糊化的抗静态拆卸性能研究”,计算机科学与技术,2003。
  4. Marko Wolf,AndréWeimerskirch,以及Thomas Wollinger,“最先进的:嵌入车辆中的安全性”,EuraSip在嵌入式系统中的欧洲兴奋剂,2007年智能车辆嵌入式系统的特刊。

嵌入式技术杂志

本文首次发表于2009年7月号嵌入式技术杂志。

请阅读本期更多文章这里

阅读档案中的更多文章这里