作者:ANDR WEIMERSKIRCH, PH.D.,KAI SCHRAMM, PH.D.
当今的嵌入式航空电子设备和其他安全关键型系统越来越面临着提高安全性的要求。因此,利用数字签名和Rivest Shamir Adleman(RSA)和椭圆曲线加密(ECC)算法的软件下载/刷新方案有助于防止未经授权的访问和伪造。
现代世界中越来越多的设备配备了多种嵌入式系统。这一趋势的一个明显例子是航空业,它使用大量电子控制单元 (ECU) 来控制几乎所有东西,例如空调、发动机甚至制动系统[1]。ECU通常允许通过引导加载程序下载更新的程序和数据代码。必须确保软件的真实性和安全启动过程,因为越来越多的嵌入式设备用于安全敏感应用,例如飞机的发动机控制。因此,必须防止对这些设备的任何本地或远程篡改[1]。
为了防止伪造或未经授权的访问,必须安全地更新软件(通常存储在可重新编程的闪存中)。在引导过程中(软件通常在安全的后端服务器上签名,然后使用引导加载程序安装),系统必须通过检查数字签名来验证新固件的真实性。仅当此验证成功时,设备才能执行新固件。讨论了一种基于数字签名的安全软件下载/烧录方案,集成了Rivest Shamir Adleman(RSA)算法和椭圆曲线加密(ECC)签名算法,作为授予这种保证的一种手段[3]。
通过数字签名实现真实性
数字签名提供完整性和真实性;经过数字签名的数据不能被恶意第三方更改,否则接收方不会检测到。此外,接收方可以验证数据是否确实由声明的签名者签名。此外,签名者不能否认他是签名的合法创建者(不可否认性)。此外,数字签名是使用非对称加密算法(如 RSA 算法或 ECC)生成和验证的。
数字签名的计算如图 1 所示。有一对密钥由私钥SK和公钥PK组成。只有签名者可以访问 SK,而 PK 可以公开分发。一般来说,SK只为嵌入式系统的制造商所知,例如航空业的OEM,而PK内置于每个嵌入式系统中。程序代码 x 首先被哈希为一个短的固定长度值 y。通常,y 是通过应用安全哈希算法 (SHA)1 系列的哈希函数来计算的。然后使用私钥SK在y上计算数字签名。此后可以使用公钥PK验证签名。
图1:在嵌入式系统制造商处生成数字签名
因此,软件颁发者(即嵌入式系统的制造商)持有用于对软件进行签名的私钥SK,ECU持有相应的公钥PK用于验证它(再次参见图1)。
安全软件下载
利用安全的软件下载过程是在现代嵌入式系统中维护这些所需信息安全级别的关键。安全软件下载过程包括几个独特但至关重要的步骤(参见图 2):
第 1 步:软件开发完成。
步骤 2:将程序目标代码传递到软件颁发者安全环境中的信任中心,该信任中心使用其私钥 SK 对目标代码进行签名。
第 3 步:然后将签名传回并附加到程序目标代码。
第 4 步:代码包和签名包现在存储在数据库中,该数据库可能包含不同嵌入式系统的版本。
步骤5:将适当的程序代码下载到嵌入式系统。
第 6 步:然后使用相应的公共验证密钥 PK 验证相应的程序代码。
图2:安全软件下载过程
在此安全软件下载的上下文中,RSA 适合进行签名验证。这是因为它允许非常快速的签名验证,并且可以在不侵犯专利的情况下在软件中实现。表 1 中显示了此实现的一些性能值。
表 1:与各种加密算法相比,在 ARM MPCore @ 400 MHz 上测量的 RSA 签名验证的运行时间
颁发单个私钥/公钥对就足够了,这样私钥 SK 存储在信任中心,公钥 PK 存储在嵌入式系统中。信任中心可能是与任何计算机网络断开连接的电脑和保存密钥的安全智能卡。嵌入式系统只需要存储公钥,这样系统本身就不会存储任何机密信息。但是,必须保护此公钥免受操纵(也就是说,它必须存储在可以读取但不能覆盖的安全内存中[3])。因此,安全存储插座包括只读存储器(ROM)或一次写入多次读取(WORM)存储器,必须在生产过程中由制造商初始化[1]。
安全软件刷机
在闪存过程中,每个软件块都可选加密,并事先计算签名。接下来,外部编程设备对引导加载程序进行身份验证(例如,通过使用质询-响应机制)。然后,外部设备逐块传递到嵌入式系统的引导加载程序。引导加载程序解密并存储每个块,并在其上计算哈希[2]。最后,在引导加载程序计算出新闪存程序文件的哈希值后,它会执行数字签名验证。如果签名验证成功,则接受并激活下载的文件。否则,将激活安全程序,引导加载程序将等待下载正确的闪存文件。
数字签名确保安心
通常,固件中内置了引导加载程序以更新程序。但是,在大多数情况下,没有实施任何机制来避免下载以未经制造商授权的方式更改设备行为的操纵程序。所提出的机制是操纵攻击的有效对策。这种机制已经在各种应用中成功实施,例如汽车领域[3]、航空领域,甚至手机行业。我们强烈建议实施所述的基于数字签名的非对称加密方法。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !