现如今,汽车上集成了越来越多的电子控制单元(ECU),一辆高端轿车上可能就集成有多达300个电子控制单元,它们分别完成空调、车灯以及引擎等模块的控制。
这些电子控制单元通过以太网、CAN或者LIN等总线进行连接,汽车生产厂商在研发、生产以及售后维护等阶段都需要将新的应用程序下载到ECU中,相比通过调试端口进行下载,CAN、LIN等总线提供了这样一种比较容易接入的通讯接口,使得下载更新应用程序更为便捷。
面对日益严峻的安全挑战,为了确保数据在传输和存储过程中的安全性,汽车生产厂商以及模块供应商需要能够将应用程序加密和解密从而提升传输过程中的安全性。本文着重讨论一种将SREC文件进行加密和解密并且能过通过LIN总线下载到目标ECU的方案,该方案同时支持从应用程序进行跳转的握手协议的定制。
AES算法也被称为Rijndael算法,是由NIST(美国国家标准技术研究所)于2001年发布的电子数据加密规范。
AES算法采用128位的明文分组,密钥长度支持128,192和256位。AES算法目前被世界范围内广泛使用以代替在1977年发布DES算法,AES算法是对称算法,也就是说加密和解密数据的过程使用同样的密钥。
AES算法加密过程可以划分为以下四个步骤:
- 密钥扩展(Key Expansions)。
- 初始轮(Initial Round),其中包含了AddRoundKey步骤。
- 重复轮(Rounds),其中每一轮包括SubBytes, ShiftRows, MixColumns和AddRoundKey步骤。
SubBytes步骤
如图1所示,该步骤根据原矩阵中的字节,将查找表(S-box)中对应的字节替换原字节。
ShiftRows步骤
如图2所示,该步骤将原矩阵的第二、第三以及第四行字节分别向左平移一个、两个和三个字节,得到新的矩阵。
MixColumns步骤
如图3所示,该步骤将固定矩阵与原矩阵相乘,得到新的矩阵。
AddRoundKey步骤
如图4所示,该步骤将原矩阵与轮密钥进行位异或操作,得到新的矩阵。
- 最终轮(Final Round),其中包含了SubBytes, ShiftRows以及AddRoundKey步骤,但不包含MixColumns步骤。
AES算法解密过程可以理解为将上述加密过程逆向进行,其中SubBytes, ShiftRows, MixColumns和AddRoundKey步骤都替换为其逆变换。
SREC文件的加密
根据用户输入的的密钥或者选择使用系统密钥,AES加密引擎使用用户密钥将输入的SREC进行加密生成加密的SREC文件,与此同时加密引擎使用系统密钥将用户密钥进行加密生成加密的密钥文件。在此过程中,系统密钥对于用户来说是不可见的,如图5灰色部分所示。也就是说,如果SREC文件是用系统密钥加密的,用户无法解密该文件得到原始的SREC文件。3
图5:SREC文件加密流程。
SREC文件的解密
如果希望解密SREC文件,用户必须要知道用于加密的密钥,也就是说该SREC文件不能是用系统密钥加密的,否则就无法解密得到原始的SREC文件。AES解密引擎使用用户密钥将SREC解密生成解密的SREC文件。在Bootloader下载过程中,AES解密引擎会使用系统密钥对密钥文件进行解密得到实际的密钥,这一密钥将会被用于解密SREC文件。在此过程中,系统密钥和解密的密钥对于用户来说是不可见的,如图6所示。
图6:SREC文件的解密流程。
Bootloader流程
初始化过程包括通道、波特率、模式等配置。根据是否配置了自定义通讯协议,如果没有配置自定义通讯协议,默认ECU已经处于Bootloader模式因而无需从应用程序跳转,直接进入应用程序下载部分。如果配置了自定义通讯协议,上位机则会依次发送最多三个自定义数据帧,握手成功后ECU从应用程序跳转到Bootloader进入应用程序下载部分。
在ECU进入Bootloader模式之后,上位机如果检测到SREC文件没有被加密则开始建立跟ECU的Bootloader握手连接。如果检测到SREC文件被加密,上位机首先解密密钥文件得到原始密钥,然后使用该原始密钥解密SREC文件得到原始SREC文件,之后开始建立跟ECU的Bootloader握手连接。握手成功之后,上位机会依次发送SREC文件的一行,直到整个SREC文件发送结束。
Bootloader下载完成之后,ECU跳转到应用程序执行,整个流程如图7所示。
图7:Bootloader流程图。
上位机界面
加密过程需要输入原始的SREC文件,在图8所示界面输入密钥或者使用默认的系统密钥,加密之后用户会得到加密的SREC文件以及加密的密钥文件。
如果希望解密SREC文件,用户需要在图9所示界面输入SREC文件以及密钥,解密之后用户会得到原始的SREC文件。
应用程序跳转协议定制
如图10所示,用户可以根据需要定制应用程序跳转协议,通过使能三条LIN数据帧,用户可以对数据帧的ID段、数据段等部分进行配置。
图11所示为应用程序主界面,在该界面上用户可以完成LIN的基本配置,包括通道的初始化,全局帧列表的配置,接收帧滤波的配置,当前发送帧的ID、方向、长度等配置等。以及LIN Bootloader相关配置,包括密钥文件输入,SREC文件输入等。在完成LIN的基本配置以及Bootloader相关配置之后,用户就可以启动Bootloader了。
本文介绍了一种支持AES加密的LIN协议Bootloader参考设计,其中包含了AES加密引擎将SREC文件以及密钥加密,AES解密引擎将SREC文件已经密钥解密,Bootloader上位机升级ECU的流程设计,以及Bootloader界面设计。通过采用支持AES加密的LIN协议Bootloader,汽车生产厂商以及模块供应商可以使得整个SREC文件的传输过程更为安全,从而更好的保护相关的知识产权。
关注最前沿的电子设计资讯,请关注“电子工程专辑微信公众号”。