1. 引言
在智能网联汽车技术迅猛发展的当下,汽车软件系统已经成为现代汽车不可或缺的核心组成部分,海量的数据交互情景普遍存在,如果车辆运行数据被篡改,那将带来一系列严重安全风险[1]。
汽车行业的数字化转型对软件的安全部署提出了更高的要求,一方面,汽车制造商需要通过快速迭代软件来提升产品竞争力[2];另一方面,法规和标准的不断完善也要求汽车软件升级必须符合严格的安全和合规性要求[3]。这项技术不仅仅是简单的软件版本更新,更是一种深层次的安全加固过程[4]。近年来,汽车网络安全事件频发,数据泄露、恶意攻击等风险日益增加,因此,车载软件的安全部署技术必须能够有效抵御这些威胁。
Kim等[5]设计了一种新型身份验证系统,该系统采用基于哈希的消息验证码技术,实现数据帧的身份验证功能。该系统能够为ECU提供向后兼容的数据帧身份验证支持,无需对现有的CAN数据帧定义进行更新。Sanjay Kumar等[6]提出了一种基于遗传算法(GA)的椭圆曲线加密(ECC)密钥生成方法,旨在通过优化密钥生成过程提升加密系统的安全性和效率。Chenzhe Mu [7]针对车载CAN总线通信安全问题,提出了一种基于优化高级加密标准(AES)算法的安全通信方案。研究结果表明,该安全通信系统能够有效满足车载CAN总线的安全需求。罗禹[8]利用AES加密算法与CAN消息的通信需求进行结合,在AES密钥中生成了通信密钥,再通过设计的异或运算逻辑来实现对数据的加密。针对不同场景的关键性功能制定了几种级别的安全等级,每种安全等级有不同级别的加密算法。肖波[9]提出了一种利用通信设备控制器软件来进行远程升级的技术方案,它需要在管理员授权的情况下,才能对某些ECU控制器的本地软件进行远程升级。它的软件部署过程大致分为开启会话、获取软件部署的权限、软件的部署步骤和最终的文件校验,结果证明了新的控制器提升了软件部署过程中的安全性和降低了部署错误的风险性。李一[10]深入研究整车CAN总线通信网络信息安全的身份认证、证书与密钥管理等方面,结合数字签名算法等关键的密钥技术,解决了信息安全问题,最终通过实验证明了安全协议的强安全性。宋昊江[11]针对固件空中升级(FOTA)时篡改ECU固件的恶意攻击,提出了一种车载ECU可信固件更新安全策略。通过数字签名算法对固件进行认证,从而使车辆在启动时只能加载通过验证的可信任固件,确保了固件启动前的完整性和真实性。许小伟等[12]针对车联网在传输时的大数据量、数据频繁加密解密等问题,提出了一种使用RC4加密算法生成一种伪随机密钥去替换AES加密算法的密钥。最终结果表明,此方案不仅验证了其加密效率,同时提升了安全性。
本文为解决汽车软件在部署到本地时,软件被恶意篡改的风险,提出了一种基于CAN总线的车载软件安全部署到内存的方法。该方法能保证汽车软件部署时的安全性和稳定性。为此,设计了一种以CAN网络为基础的一种安全部署的规范流程用于软件包的下载与上传,选择椭圆曲线公钥密码算法与Hash256的算法组合来实现软件包的加密与解密,从而达到安全部署的目的。
2. ECU引导下载部署流程设计
Bootloader (引导下载)是一段可运行的程序,同时也是ECU启动文件中的一环,主要作用是上电或ECU复位时自检、引导升级文件包下载到固件分区和读取固件状态。
Figure 1. Jump state diagram of working mode
图1. 工作模式的跳转状态图
BootLoader在复位时,复位电路会将所有寄存器和内存重置为已知的初始状态,确保系统从一个干净的状态开始启动。在上电时,Bootloader自检完成后会跳转到应用程序模式,跳转成功后便可运行应用程序,若应用程序已损坏,则会停留在引导程序模式。如果在应用程序模式时,有软件升级的需求,也可以根据一系列的诊断服务进入引导程序模式进行ECU软件升级包的更新。图1为引导程序模式和应用程序模式的跳转状态图。
预编程是为要下载的ECU做重编程前的准备,在此步骤中诊断报文请求报文采用功能寻址或物理寻址两种方式。预编程的主要逻辑是进入扩展会话后,关闭故障上报和通信禁止。
主编程步骤是对单个ECU下载应用程序的过程,此步骤中的诊断请求报文均采用物理寻址。主编程的主要逻辑是在编程会话后过安全访问进入引导程序下载模式,然后使用诊断服务进行例程控制擦除数据存储区,通过Flash Driver将软件包下载到Flash存储区中,最后通过例程控制检查下载软件的完整性和依赖性。
后编程步骤是将预编程步骤禁止的ECU通信重新唤醒,使网络恢复正常。此步骤中诊断报文采用物理寻址和功能寻址,但后编程步骤用ECU复位进行等价替换,重编程时序的具体步骤如图2所示。
Figure 2. Programming flowchart
图2. 重编程流程图
3. 安全访问算法设计
27服务利用种子与密钥构建了一种ECU保护机制,通过子功能定义了不同的安全级别。当诊断仪请求进入特定安全级别时,采用种子与密钥进行安全验证。验证成功后,系统将切换至相应的权限状态,从而实现权限的有效管理。具体访问实现逻辑如图3所示。
主要使用的参数包括种子和密钥,种子用于计算验证码,密钥用于验证服务。
安全验证服务的主要流程按请求 + 响应的为一组的方式分为如下两个阶段:
第一阶段:先是客户端请求种子,随后服务器应答种子。
第二阶段:客户端先发送密钥,服务器应答密钥的验算结果,根据比较结果决定自身是否解锁,并返回肯定/否定响应信息。
Figure 3. Diagnosis 27 service security access flow chart
图3. 诊断27服务安全访问流程图
4. ECU安全部署算法设计
4.1. 椭圆曲线算法设计
Figure 4. Flow chart of elliptic curve digital signature
图4. 椭圆曲线数字签名流程图
椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm, ECDSA)是一种非对称的数字签名算法,广泛应用于信息安全和加密通信中。与传统的数字签名算法(如RSA)相比,ECDSA在相同的安全级别下,能够使用更小的密钥,从而提高了计算效率和存储效率。它广泛应用于区块链技术(如比特币)、数字证书、SSL/TLS协议等领域,确保数据传输的完整性和身份验证[13]。由于其高效性和安全性,ECDSA在现代密码学中已成为一种标准的数字签名方案,受到广泛认可和使用。
ECDSA的密钥生成过程包括选择一个适当的椭圆曲线和基点,然后随机生成一个私钥,并计算相应的公钥。私钥是一个随机数,而公钥是通过将基点乘以私钥得到的椭圆曲线上的点。椭圆曲线数字签名具体流程如图4所示。
4.2. 哈希算法设计
哈希函数是一种能将输入的随机长度数据转换为规定长度的哈希值或摘要的函数,它在计算机科学和密码学中起着至关重要的作用[14]。SHA-256算法的实现,可以划分为几个单独的模块:数据预处理、扩散、初始哈希值、混淆常量。哈希函数一般需要满足固定长度输出、不可逆性、高度抗碰撞性、困难的碰撞攻击几个性质。根据上述哈希函数所拥有的性质,哈希函数被广泛应用于生成消息摘要和数据完整性验证两个方面。
(a) 预处理
预处理主要包括以下两个方面:
① 对消息m进行补位,最终的补位长度是512bit的倍数。
② 以512bit为单位对消息进行分块。
SHA-256能够接受的消息输入为m且
,它出路数据块的形式为逐块处理。先通过数据填充将输入数据m的长度填充到16字节的整数倍,填充的结果为M。数据填充公式如下所示:
(1)
其中m为消息m的二进制表达;k表示消息长度满足对512取模后余数是448,即表示为
;l是
的二进制表示,且长度为2个字节;
的长度为16字节。
即填充原则为:在消息的二进制后先补第一个bit为1,接着补0,直到消息长度满足对512取模后余数是448,最后再附加上一个64bit的数据,用来表示原始报文的长度信息。
(b) 扩散
得到上述预处理后的消息分组信息后,将其拆分成512bit的块,前16个字直接由原消息组成,记为W[0]、…W[15]。
剩下的48字节根据迭代公式计算得出:
(2)
(3)
(4)
其中,
:右移n位;
:左移m位且;
:按位异或位运算,上述操作符下文不在赘述。
(c) 初始哈希值
在SHA-256哈希函数中,初始哈希值是由特定的常数构成的,这些常数实际上是源自于平方根的常数,并经过处理以确保它们具有良好的随机性和分散性,初始哈希值的选取有非随机性、安全性特点,其选取值如表1所示。
Table 1. Initial hash value
表1. 初始哈希值
表示符号 |
形式 |
十六进制表示 |
|
|
0x6a09e667 |
|
|
0xbb67ae85 |
|
|
0x3c6ef372 |
|
|
0xa54ff53a |
|
|
0x510e527f |
|
|
0x9b05688c |
|
|
0x1f83d9ab |
|
|
0x5be0cd19 |
(d) 混淆常量
哈希混淆常量主要用于增强哈希值的随机性和安全性。其核心功能是确保不同输入数据能够生成唯一且均匀分布的哈希值,从而降低碰撞的风险。通过引入混淆常量,可以有效地打乱输入数据的结构,这样能够增加生成哈希值的复杂性。在此选取取自自然数中前面64个素数的立方根的小数部分的前32位,作为混淆常量,如表2所示。
Table 2. Selection of confusion constants
表2. 混淆常量的选取
名称 |
形式 |
十六进制表示 |
|
|
0x428a2f98 |
|
|
0x71374491 |
|
|
0xb5c0fbcf |
… |
… |
… |
|
|
0xbef9a3f7 |
|
|
0xc67178f2 |
(e) 混淆
在SHA-256哈希算法中,Ch (选择函数)和Maj (多数函数)是两个关键的逻辑函数,它们在哈希计算的每一轮中起着重要作用。这两个函数的设计不仅影响哈希值的计算过程,还在提升算法的安全性方面发挥了重要作用。
Ch函数的定义如下:
(5)
Maj函数的定义如下:
(6)
综上所述,目前已经拥有哈希初始值、混淆常量和64组消息信息,现在进行三组数据的混淆。在每一轮的迭代中,使用以下公式进行哈希值的更新:
(7)
(8)
(9)
(10)
其中,
和
在SHA-256中作为重要的变换函数,通过位移和按位异或操作增强了哈希算法的复杂性和安全性。经过64次迭代,可以得到第一个512块函数的摘要,把最后一轮A-H的值和初始哈希值相加作为下一组的初始哈希值,即下组哈希初值 = 本组哈希初值 + 本组最后一轮哈希值。
(11)
最后一次计算的哈希值即为我们最终需要的哈希值,所以在最后一次合并H0-H7的值即可。
4.3. 密码学算法在安全部署方案中的融合应用分析
在阐述了椭圆曲线密码学(ECC)与SHA-256哈希算法的基本原理后,本节将深入分析其在车载ECU安全软件部署这一具体场景中的关键作用与实现机理。
与传统的RSA方案相比,ECDSA更契合资源受限的嵌入式环境:256位ECC密钥即可提供相当于3072位RSA密钥的安全强度,从而显著降低计算开销、存储占用和执行延迟,满足车载系统对实时性与高效性的严格要求。
在UDS 0x27 (安全访问)服务中,ECDSA既用于身份认证,也用于会话密钥建立。
认证阶段中,ECU生成随机椭圆曲线公钥作为挑战值;诊断服务器利用其私钥对该挑战签名并返回,ECU则通过预置的服务器公钥完成验证,从而实现通信合法性确认并有效抵御重放攻击。
在认证成功后,双方通过椭圆曲线密钥交换生成共享的对称会话密钥,并在Bootloader数据传输阶段结合AES加密使用,实现了非对称加密在密钥分发上的优势与对称加密在运算效率上的优势互补。
与此同时,SHA-256贯穿于升级过程的数据完整性保障。服务器在传输前对固件计算哈希值,ECU在解密并写入Flash前再次计算并比对,二者一致方可接受固件,从而有效防止篡改、损坏或恶意代码注入等风险。
综上,ECDSA与SHA-256的深度融合构建了覆盖认证、密钥协商、数据保密性与完整性保护的全链条安全框架,为ECU软件升级提供了系统性的安全保障。
5. 实验与结果
实验中所使用到的硬件环境主要有24V可调电源、继电器、电阻、VN1640、CAN H、CANL和英飞凌的某款车载芯片。软件部分基于CAPL语言在CANoe中进行测试用例编写并搭建仿真模型执行自动化测试,最终实验数据流呈现至Trace窗口中。通过观察报文数据流可进行实验结果验证。
5.1. 数据验签验证
软件下载签名认证流程如图5所示。
基于ISO-14229对诊断报文进行解析描述如下:
① 7F 36 78代表请求正在响应中,此时正在解析验证这个数据块的签名是否正确。
② 76代表36数据传输服务的正响应。01代表第一个数据块通过验签被接收。
③ 36 02代表第二个数据块正在传输,依次类推直至最后一个数据块验签通过。
Figure 5. Software download signature authentication
图5. 软件下载签名认证
5.2. 完整性、兼容性及工作模式跳转验证
软件下载的完整性、兼容性及工作模式跳转验证如图6所示。
① 数据帧中的77代表请求退出下载正响应。
② 数据帧中的31代表31例程服务;01代表子服务,用于执行例程的控制操作;02 02代表程序的一致性和完整性校验,后续正响应71代表验证通过。
③ FF 01代表程序的依赖性校验,后续正响应71代表验证通过。
④ 数据帧中的11 01代表程序复位指令。正向回复51 01代表预编程所有的禁止服务,全部被打开,ECU进入正常工作状态。
Figure 6. Integrity, compatibility, and work mode transition verification
图6. 完整性、兼容性及工作模式跳转验证
5.3. 签名失败异常刷写验证
下面对签名失败异常刷写验证的测试,对签名值进行修改,模拟签名异常的实验场景,如图7和图8所示。
① 36 01传输我们已经修改的异常签名值。
② 7F 36 78代表请求正在响应中,此时正在解析验证这个数据块的签名是否正确。
③ 7F 36 70代表ECU判断该数据块的签名异常从而验签未能通过,NRC70代表上传/下载受限。
根据正反向实验验证的结果表明,本论文设计的车载软件安全部署方案符合CAN总线通信协议架构,在安全算法的保证下,将车载软件包按照预设的部署流程到规定的地址中,对于签名异常等工况的软件包,则不被接收和部署。
Figure 7. Signature exception failed verification
图7. 签名异常失败验证
Figure 8. Signature exception failed verification
图8. 签名异常失败验证
6. 结束语
本文对ECU的软件安全部署重编程流程进行设计,并针对27安全访问服务算法和安全部署算法进行设计。其中安全部署算法包括椭圆曲线算法及哈希算法的设计。选用某乘用车的控制器,通过搭建台架实验环境,基于CAPL脚本进行测试用例的设计与编写,对Bootloader安全部署进行了正向验证和反向验证。最终实验结果表明,车载软件最终通过预设的部署流程和安全算法,成功地被部署到相应的内存地址中,异常部署工况则不被部署和接收。
在本方案的设计与实现过程中,仍然面临若干技术性挑战。首先,车载ECU的硬件资源受限,其处理器性能与存储空间难以与通用计算平台相提并论,而ECDSA的实现涉及大整数运算和椭圆曲线点乘,计算复杂度较高,若直接移植标准算法库将导致运算延迟过大,难以满足车载系统对实时性的严格要求。针对这一问题,本文通过优化大整数运算库、减少冗余的参数调用,并在支持的硬件平台上利用加密加速模块,有效降低了算法执行开销,从而保证了在资源受限环境下的可行性与高效性。
其次,在Bootloader固件升级过程中,需要在安全性与实时性之间取得平衡。若仅依赖整体文件校验,势必增加升级耗时,影响车辆电子控制单元的快速恢复与使用。本文提出了基于分块校验与流水线处理的优化方案:在固件数据逐段传输的同时,ECU实时进行SHA-256计算与缓存验证,在写入Flash前完成完整性比对。该方法显著提升了处理效率,并保证了传输数据的完整性与一致性,有效防范了因传输错误或篡改所引发的潜在风险。
此外,如何在实际通信链路中实现安全可靠的身份认证与密钥协商,也是本研究关注的重点问题。传统的静态口令验证方式存在被重放或伪造的风险,难以满足车载安全需求。本文通过引入随机挑战值生成机制与一次性会话密钥派生流程,确保了认证过程的唯一性与随机性,并实现了基于ECDSA的安全身份认证与对称会话密钥的动态协商。该机制在抵御重放攻击的同时,进一步增强了后续AES加密传输的机密性与抗攻击性。
综上所述,本文针对计算资源受限、实时性与安全性的矛盾,以及认证与密钥协商的安全风险,提出并验证了一套可行的优化策略。研究结果表明,该方案能够在保证安全性的同时兼顾效率,为车载ECU安全升级提供了系统性的技术路径,也为后续相关研究和工程实现提供了具有参考价值的实践经验。