近10年,汽车电子的发展突飞猛进,车上搭载的电子控制器数量,从寥寥几个迅速飞升至规模庞大的一两百个。在这个过程中,车内电子控制器的通信网络也应运而生。根据史料记载,经过短暂而惨烈的角逐后,来自德国的一家名叫博世(Bosch)的公司的CAN通信协议,在自家多款核心车辆控制器的保驾护航之下"问鼎中原",成为车内网中最主要的总线系统。同时CAN通信相关的产品也成了博世公司下金蛋的神鸡,为其带来源源不断的授权费。

一个典型的汽车CAN网络(图片来自Renesas)
CAN通信协议在诞生之初,核心设计理念就是低成本和高稳定性。虽然它也有提及高通信速率的需求,但是在当时技术人员眼里的高速率,也不过是125Kbps~1Mbps,这保守的速度区间放在今天,实在有些不够看。便宜和简洁,也就是低成本和高稳定,是CAN协议的灵魂,把握这一点就能理解一切基于CAN的应用,和CAN的衍生协议。
正因如此,CAN本身是没有考虑过信息安全问题的。明文传输、报文广播传输、极少网络分段、无内容校验等特性,让进入车内网的黑客如同进了游乐场,轻松便可以伪造报文对车辆进行控制。
这也是为什么2015年Charlie Miller和Chris Valasek通过某种远程方法连上JEEP大切诺基的车内网后,能够随意地控制车辆运行。当然两位大C哥做到这一步,还要以大量长时间的勤恳研究为基础的,可是这也暴露出CAN总线的安全性非常的脆弱。

野生JEEP正在路边吃草(图片来自网络)
为了提升CAN协议的安全性,换句话说也就是给CAN续命,博世在AutoSAR中补充了全称为Secure Onboard Communication(SecOC)的组件,为传统的CAN总线引入了一套通信认证的方法。
在SecOC被还没有被大家所熟知的漫长岁月中,(即使现在也还在应用的初期阶段),勤劳的车厂技术人员为了提升通信的稳定性,尝试在标准CAN报文的负载中做文章,却间接地提升了一点点的安全性。
比如拿出负载中的部分Bit为做CRC校验,或者做一个报文顺序计数器,前者能够防住伪造报文,后者通常用来防御重放攻击。
但是说到底CRC校验和计数器,是用于校验报文正确性,以及判断是否存在丢包的。他们在恶意入侵面前太过于脆弱。

标准的CAN数据帧,车厂在Data字段做文章(图片来自Renesas)
举个来说,一个标准CAN报文的负载最多有8个字节,本身需要装载大量车辆运行的功能业务数据,从中拿出任何一个字节都会对总线的繁忙程度产生负面影响。
因此,当前主流方案中的CRC校验和计数器都尽可能用更少的Bit位,结果黑客很容易就用逆向出CRC算法,或者很大概率被随机CRC猜出正确值。
更不用说那个计数器,通常对控制器来说只是参考信息,它们爱怎么处理都行。我们在很多品牌的车辆上都发现,控制器对乱序的报文也会非常迅速而精准地做出响应。
所以,可以说SecOC是目前为止车内CAN网络上,唯一有效的信息安全方案。

AutoSAR文档中描述的SecOC模块(图片来自AutoSAR)
SecOC是在AutoSAR软件包中添加的信息安全组件,增加了加解密运算、秘钥管理、新鲜值管理和分发等一系列的功能和新要求。SecOC占用CAN报文的负载中的若干字节,在其中填入身份认证和新鲜值字段。
于是,假如搭载SecOC后,一次CAN通信就变成了如下过程:
(1) 报文的原始数据切片,加上秘钥,加上新鲜值,通过算法128bit生成身份认证信息。
(2) 然后再将身份认证信息的切片和新鲜值切片,插入CAN报文负载的指定字节中。其中新鲜值切片可以长度为0,但是身份认证信息的切片必须要存在。
(3) 接收方就是个逆过程了,校验失败就扔掉。

SecOC流程示意图(图片来自AutoSAR)
注意,图中的MAC是Message Authentication Code的缩写,并不是我们所熟知的MAC(介质访问控制,或者苹果牌计算机)。偏个题,汽车行业真的是一个喜欢创造头字母缩写的行业,导致有时候和汽车行业从业人员说话,很容易被"专业术语"绕得不知所云。所以我们可以说汽车行业是一个TSX行业(Tou Suo Xie,头缩写)。
看了上面的方案介绍,想必大家已经明白,SecOC的核心思想在于通信认证,但是不涉及报文加密。这一套通信认证的方案,一定要说也并不是全新的东西,在互联网通信的应用场景中已经很常见,比如PKI体系、IPSec架构等等,只是认证的流程存在一些差异。
在得到SecOC大法加持后,虽然CAN总线通信依然还是明文通信,但是黑客伪造报文的难度已经被大大地提升了。但是实施SecOC后,老问题又一次浮出了水面:大量占用CAN报文负载,从而导致总线负载率提升、通信实时性下降,甚至正常功能受到影响,这又该如何应对和解决呢?
虽然博世尽力为CAN总线提供了SecOC来补强通信安全性,期望它能够再下几年金蛋,可是SecOC的软肋依然在CAN本身的特性上。说到底SecOC是配合CANFD协议使用的,传统的CAN通信可能是无福消受了。
我们知道认证信息的强度和信息长度强相关,可是满打满算传统CAN报文的负载只有可怜巴巴的8个字节,真要搭载SecOC,可以说是既得不到预想的信息安全强度,又牺牲了相当大的CAN通信能力。
所以,据说现在国内车厂在CAN总线上进行的SecOC尝试,都是POC项目(Proof of Concept,验证性项目),如果哪家供应商说自己已经给国内车厂做了SecOC量产,那八成是有吹牛的。
不过这个估计的比较保守,因为还有两成可能是POC上量产。
其实,SecOC存在一种变体方案,能够达到即使出问题也不影响CAN通信的效果。这个变体方案就不详细讨论了,还请感兴趣的朋友自行思索。
当然欧洲车厂依然走在了前面,比如奥迪(Audi)一向注重车辆的信息安全,我相信它的新车就搭载了SecOC或者同等水平的车内网信息安全方案。
简而言之,我们其实可以得出一个结论,在不远的将来,即使车辆搭载了SecOC的量产方案,SecOC也主要是搭载在CANFD网络上,CAN网络还是会处与不设防状态,还请各位黑客大佬们尽情玩耍,一同为车辆信息安全添砖加瓦。
从这个角度也可以看出,车内网的信息安全仍需要更多的信息安全技术,以及具有前瞻性的网络架构设计来共同守护。绝非一朝一夕就能一蹴而就。