安全和通信
设计权衡:软件与协议
OTA更新解决方案还必须解决安全和通信问题。如图1所示,许多系统会在硬件和软件中实现通信协议,以支持系统的普通(非OTA更新相关)操作,例如交换传感器数据。这意味着服务器和客户端之间已经建立了(可能是安全的)无线通信的方法。类似图1所示的嵌入式系统可以使用的通信协议有低功耗蓝牙? (BLE)或6LoWPAN等。有时候,这些协议支持安全性和数据交换,OTA更新软件在OTA更新过程中可以利用。
OTA更新软件中必须构建的通信功能量最终将取决于现有通信协议提供的抽象程度。现有通信协议具有用于在服务器和客户端之间发送和接收文件的工具,OTA更新软件可以简单地将该工具用于下载过程。但是,如果通信协议较为原始,只有发送原始数据的工具,那么OTA更新软件可能需要执行分包处理,并提供元数据和新应用程序二进制文件。这也适用于安全挑战。如果通信协议不支持,OTA更新软件可能要负责对无线保密发送的字节进行解密。
总之,在OTA更新软件中实施哪些功能,例如自定义数据包结构、服务器/客户端同步、加密和密钥交换等,将取决于系统的通信协议提供了什么内容以及对安全性和稳健性的要求。下一节将提出一个完整的安全解决方案,其解决了之前介绍的所有挑战,我们将展示如何在此解决方案中利用微控制器的加密硬件外设。
解决安全挑战
我们的安全解决方案需要让新应用程序以无线方式保密发送,检测新应用程序中的任何损坏,并验证新应用程序是从受信任的服务器而不是恶意方发送的。这些挑战可通过加密操作来解决。具体而言,该安全解决方案可以使用两种加密操作:加密和哈希处理。加密使用客户端和服务器共享的密钥(密码)来对无线发送的数据进行模糊处理。微控制器的加密硬件加速器可能支持的特定加密类型是AES-128或AES-256,具体取决于密钥大小。除了加密数据,服务器还可以发送一个摘要以确保没有损坏。摘要通过对数据包进行哈希处理来生成,这是一种用于生成唯一代码的不可逆数学函数。在服务器产生消息或摘要之后,如果其任何部分遭到修改,比如在无线通信期间有一位发生翻转,则客户端在对数据包执行相同的哈希函数处理并比较摘要时,会注意到此修改。微控制器的加密硬件加速器可能支持的特定哈希处理类型是SHA-256。图6显示了微控制器中的加密硬件外设的框图,OTA更新软件驻留在Cortex-M4应用层中。此图还显示了其支持将受保护密钥存储在外设中,OTA更新软件解决方案可以利用这一点来安全存储客户端密钥。
图6.ADuCM4050上的加密加速器的硬件框图
解决身份验证这一最终挑战的常见技术是使用非对称加密。对于此操作,服务器会生成一个公钥-私钥对。私钥只有服务器知道,客户端知道公钥。服务器使用私钥可以生成给定数据块的签名,例如要无线发送的数据包的摘要。签名被发送给客户端,后者可以使用公钥验证签名。这样,客户端就能确认消息是从服务器而不是恶意第三方发送的。此序列如图7所示,实线箭头表示函数输入/输出,虚线箭头表示无线发送的信息。
图7.使用非对称加密验证消息
多数微控制器没有用于执行这些非对称加密操作的硬件加速器,但可以使用Micro-ECC等专门针对资源受限器件的软件库来实现。该库需要一个用户定义的随机数生成功能,这可以利用微控制器上的真随机数发生器硬件外设来实现。虽然这些非对称加密操作解决了OTA更新期间的信任挑战,但是会消耗大量处理时间,并且需要将签名与数据一同发送,这会增加数据包大小。我们可以在下载结束时使用最后数据包的摘要或整个新软件应用程序的摘要执行一次此检查,但如此的话,第三方将能把不受信任的软件下载到客户端,这不太理想。理想情况下,我们希望验证所收到的每个数据包都来自我们信任的服务器,而且没有每次都需要签名的开销。这可以利用哈希链来实现。
哈希链将本节讨论的加密概念整合到一系列数据包中,以便在数学上将它们联系在一起。如图8所示,第一个数据包(编号0)包含下一个数据包的摘要。第一个数据包的有效载荷不是实际的软件应用程序数据,而是签名。第二个数据包(编号1)的有效载荷包含二进制文件的一部分和第三个数据包(编号2)的摘要。客户端验证第一个数据包中的签名并缓存摘要H0以供以后使用。当第二个数据包到达时,客户端对有效载荷进行哈希处理并将其与H0进行比较。如果它们匹配,客户端便可确定该后续数据包来自可信服务器,而无需费力进行签名检查。生成此链的高开销任务留给服务器完成,客户端只需在每个数据包到达时进行缓存和哈希处理,确保到达的数据包完整无损并验明正身。
图8.将哈希链应用于数据包序列
实验设置
解决本文所述存储器、通信和安全设计挑战的超低功耗微控制器是ADuCM3029和ADuCM4050.这些微控制器包含本文讨论的用于OTA更新的硬件外设,例如闪存、SRAM、加密加速器和真随机数发生器。这些微控制器的器件系列包(DFP)为在这些器件上构建OTA更新解决方案提供了软件支持。DFP包含外设驱动,以便为使用硬件提供简单灵活的接口。