汽车控制器ECU安全校验算法实现

随着技术的不断发展,汽车中搭载的ECU(电子控制器)越来越多,如人们所熟知的EMS(发动机控制器)、BCM(车身控制器)、ICM(仪表)、MP5等等。

1、控制器的算法是什么?

出于安全的考虑,ECU中的某些数据或者请求会被限制访问。控制器不正确的例程执行(如:钥匙学习、胎压标定等等)或数据下载(控制器程序刷新等)会损坏当前控制器或其它的车辆部件,可能会导致车辆无法正常行驶、车检不达标、车辆安全性降低等。

当然这些访问限制并不是不能解除,否则汽车怎么维修?其访问限制的主要措施在于算法(类似于钥匙)的实现,种子(seed)和密钥(key)。其实现思路如下图所示:

上位机(手机、电脑等)向控制器请求seed种子,控制器随机产生一个随机数作为seed(例如:1122334455667788-长度不定,内容不定)。控制器将该种子返回给上位机。上位机利用控制器给定的算法(不同控制器可能存在不同算法)和种子生成密钥,并将密钥发送给控制器。控制器将自己生成的密钥(生成算法一致)和上位机发送的密钥进行对比,若一致则打开上位机的访问限制,否则上位机仍不能进行限制性的访问(如:刷新、标定学习等)。

由于seed是随机产生的,即控制器每次生成的均不同。因此上位机必须实现控制器的指定算法,否则访问限制不会解除。

2、控制器ECU的算法实现

不同汽车厂家的算法也不尽相同,当然同一汽车厂家的不同控制器ECU算法也可能会不相同,算法的实现逻辑多种多样,不尽相同。

控制器ECU主要由零部件商供应。主机厂(即汽车厂)可以对零部件厂商进行算法实现的约束。某些零部件供应商也不会按照主机厂的约束进行实现,而是按照供应商自有的算法实现。

控制器ECU的算法主要是通过C语言进行实现并集成到控制器中,一般零部件供应商会提供算法说明文件(算法实现逻辑)或者封装的dll文件。

控制器ECU算法

3、上位机的算法实现

前面已经介绍了控制器ECU的算法实现方式,那么上位机怎么实现呢?

上位机软件目前主要是电脑和手机较为普遍,电脑的软件开发多为C#、C、C++、capl等语言,而手机的开发主要分为Android系统(java、koltin等开发语言)和IOS系统(C、C++、Objective-C、Swift等开发语言)。

上位机语言的不同决定了算法的实现方式也是各不相同的。例如Android需要使用so文件或者java文件,而不能使用dll文件。

大家在算法实现的时候可能会遇到不同的情况,若零部件供应商使用主机厂规定的算法或者提供自有算法的说明文件(实现逻辑说明),那么上位机开发可以写出相应的代码,从而实现算法。当然某些零部件供应商是不会提供算法说明文件的,仅提供dll文件,这时候是没有办法实现上位机相应语言算法的。这个问题怎么解决?

android算法

此文章提供一种新的实现思路,由于仅有dll文件,无法实现其它语言的算法,那么我们借助BS来进行实现。通过C#语言开发WEB服务器集成dll文件,让上位机联网进行调用,服务器算出密钥后返回给上位机,此方法时间上主要依靠网络延迟,但是可以满足需求。

web服务

web的代码

若您有不同意见欢迎在下方留言!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190924A0IN7T00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励