一种can总线安全保护方法、装置和存储介质
技术领域
1.本发明属于汽车can总线通信领域,尤其涉及一种can总线安全保护方法、装置和存储介质。
背景技术:2.控制器区域网络(can)开发于20世纪80年代初,由于具有鲁棒性和低成本等优点,自2008年以来,can成为车载网络的通信标准。但是can的设计主要是为了确保可靠的通信,在总线广播的数据包没有源/目的地址,缺乏任何本地加密、认证或其他网络中常用的安全保护。因此,攻击者可以很容易地窃听can消息以获取所需的数据,或注入具有欺骗性id或内容的假can消息。这可能会导致对保密性、完整性和可用性的侵犯。
3.can总线帧id匿名和基于传统密码学的加密方法是保护can总线的两种常见方案。id匿名用于实现对总线广播帧的保护,使总线上的窃听者无法通过监听原始id来获得其想要得到的帧内容,过去提出id匿名的一项工作是利用哈希链来改变can消息的id。该工作在整个会话过程中使用相同的密钥来实现id哈希链的变化,存在以下漏洞。一旦当前的id和会话密钥被捕获,后续的id监听攻击就可以轻易实现。同时目前还不清楚其在有多个接收者的情况下如何实现错误的自我恢复。
4.同时现有研究有一些基于轻量级的加密机制来保护can总线数据,然而加密可能会在资源有限的ecu上引起大的延迟,这对于安全关键的车辆实时系统来说是不可接受的。另一方面,太轻的加密容易受到暴力攻击的破解。确保can总线安全的另一种加密方法是增加认证,如使用消息认证码(mac)。然而,由于can报文中的数据字段被限制在8个字节内,所以只能使用截断的mac,而较小的mac会增加通过碰撞进行伪造的概率。除此之外,鉴于数据字段内的信号值相同,传统的加密方式可能会产生相同的密码信息。虽然一次性密码(otp)方案进行异或可以引入足够的随机性,但需要使用不短于正在发送的信息的一次性密钥。如果这样的密钥被用于一个以上的信息,那么攻击者可以对连续的密码信息进行异或,从而轻松推断出明文。此外,如果攻击者以某种方式知道明文,他可能有机会破解密钥。因此,现有的解决方案还不足以保护can。如果不增加匿名性和随机性,即使是牢不可破的密码机制也不能防止所有的攻击,如重放攻击。
技术实现要素:5.发明目的:本发明要解决的技术问题主要有实现控制局域网(control area netw,can)总线上的标识符(identifier,id)动态匿名以及数据字段的混淆保护。
6.本发明旨在通过利用具有动态密钥的id哈希链来解决id匿名问题,实现id的变化不仅与之前的id密切相关,也与密钥链的变化密切相关。并实现接收方的错误恢复机制,包括在当前会话中出现错误时的自我恢复以及在多个接收方的情况下某一接收方错过多次会话时的错误恢复。
7.同时为了解决传统加密和洗牌在can总线上的缺陷,提出对总线数据采用洗牌方
案来增加通信过程的随机性,而传统的洗牌方案中对于本发明的数据比特串而言存在较多无效交换,因此本发明第二点提出了改进的洗牌方案来实现高效的数据混淆。
8.本发明具体提供了一种基于移动目标防御技术的can总线安全保护方法,包括以下步骤:
9.步骤1,发送方电子控制单元(electronic control unit,ecu)生成随机数并在can总线中发送会话初始帧以表明会话启动;
10.接收方接收会话初始帧并验证发送方身份,发送方和接收方协商沟通会话密钥并在各自ecu中计算由通信密钥组成的哈希密钥链;
11.步骤2,发送方和接收方使用由通信密钥组成的哈希密钥链进行会话通信过程中数据帧的id匿名连续更新,发送方使用计算完成的匿名id发送帧至总线,接收方提前计算期望的匿名id并在接受后更新为下一个匿名id;
12.步骤3,发送方首先使用循环冗余校验(cyclic redundancy check,crc)计算原始数据校验和并置于数据帧crc字段中,并使用哈希密钥链和组合编解码方案对原始数据字段进行洗牌置换后发送;
13.步骤4,接收方使用与发送方实现数据置换时对应的哈希密钥链和逆向组合编解码方案获取原始数据,进行完整性检查。
14.进一步的,在步骤1中,
15.所述会话初始帧所携带的随机数由发送方电子控制单元ecu使用随机数生成函数结合发送时间戳在本地生成,并在初始帧中共享其他参数,所述其他参数包括会话的最大帧数和随机化的粒度(每帧或每多帧实现后续的哈希密钥链更新)。会话初始帧中的哈希输出由随机数、会话最大帧数和随机化粒度等会话参数结合与原始id绑定的密钥计算得到,其中原始id是发送方电子控制单元ecu和接收方电子控制单元ecu在不进行匿名id通信时所使用的通信id,会话参数由发送方自行指定,密钥只由通信的发送方电子控制单元ecu和接收方电子控制单元ecu事前进行协商并存储,不在总线中发送;
16.当发送方决定刷新会话时,在总线上再次发送会话初始帧以实现新会话的开启,此时携带上一个会话的匿名id来防止重放攻击。
17.进一步的,在步骤1中,
18.当接收方收到会话初始帧时,结合接收方存储的与原始id绑定的密钥及会话初始帧中所携带的参数进行相同的哈希输出计算,如果计算结果与会话初始帧中的哈希输出字段数据相同,则接收方成功实现发送方身份认证,否则将在总线中发出主动错误标志,通知总线认证失败;
19.认证成功后发送方和接收方将共同计算当前会话的会话密钥,会话密钥是结合随机数、会话数和发送方和接收方保存的与原始id绑定的密钥进行哈希计算。
20.进一步的,在步骤2中,
21.通信密钥与数据帧一一对应,由会话密钥进行链式哈希计算得到。在此基础上发送方和接收方从原始id出发,结合链式前进的通信密钥实现匿名动态id链的哈希变化。
22.如果接收方未收到期望的帧的时间超过阈值(一般以周期性消息的五倍时间为基础),开始本发明设计的错误恢复方法,帧过滤器被配置为接收所有总线上的帧,在接收方电子控制单元ecu中使用链式向后计算后续期望收到的id,并将后续期望收到的id存储为
集合;如果捕获的id在集合中则更新帧过滤器;如果会话内恢复失败,等到下一次发送方发送会话初始帧时,如果其余接收方未发出错误标志则接收方直接计算会话密钥进行后续通信。
23.进一步的,在步骤3中,
24.发送方对准备发送的原始数据进行crc校验并放入数据帧中。随后对原始数据比特串进行位置数组编码并利用组合数求和公式得到位置数组对应的数值索引;基于当前帧对应的通信密钥实现索引的正向偏移;利用逆向方案解码索引得到洗牌后的比特串,放入数据帧的数据字段中发送。
25.进一步的,在步骤4中,
26.接受方在总线中监听到id为其所期望接收的期望帧后,选择接受所述期望帧并对接收到的数据帧中数据比特串进行逆向洗牌操作,先对原始数据比特串进行位置编码得到洗牌后的数值索引,逆向偏移与所述期望帧对应的通信密钥获得原始索引并再次位置解码得到原始数据比特串;
27.对逆向洗牌得到的原始数据计算crc校验和,并与数据帧中crc字段所携带的校验和比较以得到数据的真实性,如果真实则进行后续的数据内容解析并执行,否则在总线中发出错误信号让发送方重新发送数据信息。
28.本发明还提供了一种can总线安全保护装置,包括:
29.会话初始化模块,用于,控制发送方电子控制单元ecu生成随机数并在can总线中发送会话初始帧以表明会话启动;接收方接收会话初始帧并验证发送方身份,发送方和接收方协商沟通会话密钥并在各自ecu中计算由通信密钥组成的哈希密钥链
30.数据更新模块,用于,控制发送方和接收方使用由通信密钥组成的哈希密钥链进行会话通信过程中数据帧的id匿名连续更新,发送方使用计算完成的匿名id发送帧至总线,接收方提前计算期望的匿名id并在接受后更新为下一个匿名id;
31.冗余校验计算模块,用于,控制发送方使用循环冗余校验crc计算原始数据校验和并置于数据帧crc字段中,并使用哈希密钥链和组合编解码方案对原始数据字段进行洗牌置换后发送;
32.完整性检查模块,用于,控制接收方使用与发送方实现数据置换时对应的哈希密钥链和逆向组合编解码方案获取原始数据,进行完整性检查。
33.本发明还提供了一种存储介质,存储有计算机程序或指令,当所述计算机程序或指令被运行时,实现所述的方法。
34.有益效果:本发明实现can总线上的帧id匿名,在总线中的帧只能被发送方和接收方所识别,可以抵御总线上的窃听攻击,同时提供发送方的身份认证以及在匿名过程中出错时的错误恢复效果。
35.本发明同时实现数据字段的混淆功能,通过基于组合数学的洗牌方案保证总线上数据的保密性,并通过证明表示洗牌方案的无偏差性,同时给接收方提供完整性检查。
附图说明
36.下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
37.图1是本发明架构图。
38.图2是id匿名的具体方法示意图。
39.图3是本发明流程图。
具体实施方式
40.本发明涉及总线通信的认证和数据安全方法,属于一种利用移动目标防御的思想来对总线上的数据帧实现安全保护的方案,具体涉及一种基于哈希链和组合数学方案来实现数据帧的匿名以及数据字段的洗牌功能以保护总线传输。
41.本发明采用的技术方案是一种基于移动目标防御技术的can总线安全保护方法,具体是基于id匿名和数据洗牌的can总线保护协议,如图1、图3所示,包括以下步骤:
42.步骤1,会话初始化:包括发送方和接收方之间协商此次会话开始的会话密钥,并共享此次会话相关参数。
43.步骤2,id匿名:使用动态变化的通信密钥实现连续的id变化,使得总线上的帧id对除了发送方和接收方而言都是不可识别的,达到匿名效果。
44.步骤3,数据洗牌:使用基于组合数学的洗牌方案以及变化的通信密钥对总线帧的原始数据进行变化来达到数据洗牌的混淆效果。
45.步骤4,完整性检查及错误恢复:接收方对从总线上接受的数据进行完整性检查判断其是否被更改,若接收方在一定时间范围内未收到期望的帧时自动进行错误恢复。
46.进一步的,所述步骤1包括以下步骤:
47.(1.1)首先是发送方和接收方需要事先在ecu的防篡改存储器中存储id以及密钥k(即key),每个帧idi都和一个密钥ki相绑定,并且只有ecu本身能够对密钥进行读取。只有知道帧id和其密钥的ecu才能发送或接收这种类型的帧。一个ecu能够发送和接收两个以上id的帧,例如ecu一号,即ecu1想要接收ecu二号,即ecu2发送的标识符id为id2和id3的帧,以及ecu3发送的id4的帧,要实现这一点,ecu1和ecu2需要保存id2,id3和与之对应的密钥k2,k3,同时ecu1和ecu3需要保存id4和k4。
48.(1.2)当需要开始一个会话进行通信时,发送方ecu会广播一个会话初始帧,帧格式如图1上方所示,主要携带的内容包括id0,id
pre
,flag,n,mac。其中id0代表存储在发送ecu中的原始id,id
pre
记录的是前一个会话中最后使用的匿名id(在第一次会话中id
pre
=id0),flag表示会话初始帧是一个新会话的开始,n是由发送方ecu在会话开始时产生的随机数,mac是使用哈希函数f1对以下参数生成的散列输出:
49.mac=f1(id
pre
,n,flag,ki)
50.(1.3)接受方在总线上监听到id0的帧并接收,使用帧所携带的flag,n和id
pre
,结合自身存储的ki,使用上述相同的等式计算散列输出,一旦两个散列输出相同,接收方就确认此会话初始帧时有效的,否则接收方将发出主动错误标志,通知认证失败。这种方法的成功是基于ki不会在总线上被共享,对攻击者来说是未知的。认证成功后发送方和接收方将在ecu中自行计算此次的会话密钥k
δ
,其中δ表示本次会话的计数值,即是从会话初始化开始的第几次会话更新,初始值为1,会话密钥k
δ
的计算公式如下:
51.k
δ
=f1(n,ki,δ)
52.通过以上步骤发送方和接收方即可完成会话密钥的协商,后续的通信密钥依赖于
此会话密钥进行动态更新。
53.(1.4)当一个会话结束时(例如达到帧计数器最大值),发送方将发送一个新的会话初始帧来开始新的会话。同时在达到帧计数器最大数量前(一般为24小时的帧计数值,不同id对应着不同的数值),发送方能够随时终止当前会话以开启新会话。
54.进一步的,所述步骤2的id匿名的具体方法如图2所示,包括以下步骤:
55.(2.1)在密钥协商完成后的第一次通信时,发送方对会话密钥k
δ
进行一次哈希得到作为第一个通信密钥。再针对即将发送的原始数据帧进行原始id0的分割,分成表示即将发送的数据帧在总线优先级的pid(priority-id,即优先级id)和表示匿名变化部分的did(dynamic-id,即动态id)。在后续的通信中pid保持不变,只对did进行动态链式变化。使用对第一条即将发送的数据帧的原始id,即id0做哈希得到动态匿名后的did1′
,将其截断成帧did字段的长度did1并与pid进行拼接得aid1,即第一个匿名id(anonymous-id)。会话协商完成后的第一次通信id使用aid1,结合后续步骤3洗牌后的data1(即第一条即将发送帧洗牌后的数据)发送到总线中。
56.(2.2)在后续通信中使用上述步骤(2.1)相同方案对上一个发送到总线上数据帧的匿名id,即aid
n-1
进行链式匿名变化,如下述公式所示:
[0057][0058]
其中是对上一次的通信密钥进行一次哈希所得结果,f2是与f1相同的哈希函数,计算得到新的动态匿名结果didn′
,并将didn′
进行长度截断,使其满足did所要求长度并与pid拼接完成后产生新的匿名id结果aidn,aidn作为匿名id与后续步骤3洗牌后的数据datan组合后发送至总线中。
[0059]
(2.3)在接收方的去匿名化过程是决定总线上监听到的帧是否被ecu需要。接收方使用与发送方相同的匿名化过程(即步骤(2.1)和(2.2))来计算当前所期望的匿名帧id,此后接收方的帧过滤器更新成当前期望的id,一旦在总线中监听到该期望id所表示的帧,接收方ecu接受该帧并立刻进行上述步骤(2.2)的计算来更新帧过滤器。
[0060]
进一步的,所述步骤3包括以下步骤:
[0061]
(3.1)发送方首先需对原始数据字段进行编码。设定原始数据是长为n的比特串s。将该比特串表示成位置数组is:
[0062]is
=[is(1),is(2)...is(k)]
[0063]
其中k表示比特串中
‘1’
的个数,数组中的值is(i)代表该比特串第i个
‘1’
所在的位置,i∈[1,k],is(i)∈[0,n-1]。
[0064]
发送方得到表述数据字段的位置数组后使用下述组合数的求和公式将数据字段编码成索引indexs,根据公式可得
[0065][0066]
(3.2)对indexs进行基于当前帧的通信密钥的偏移,的计算方式在上文(2.2)中所提及,同时为了防止数据越界使用取模mod操作来得到新索引值index
′s:
[0067][0068]
(3.3)对偏移后的新索引值index
′s进行解码,恢复成比特串形式。解码过程与编码过程相反,是将新索引值计算得新位置数组i
′s再恢复成比特串的过程。从当前可选的最大二项式系数出发,如果当前索引值index
′s大于等于所述二项式系数将当前位置k加入到新位置数组i
′s中,表示当前位置k被比特串选定为
‘1’
,并将索引值减去此二项式系数并更新,同时递减二项式系数的上下值;否则只递减n去比较下一个二项式系数值;直至当前索引值index
′s被减为0时停止计算,并将该新位置数组i
′s转化成比特串。由于此技术方案编解码能实现即使索引值不相同,编码和解码时对应的比特串中
‘0’
和
‘1’
个数相同但位置不同,从而实现数据的洗牌功能。随后发送方将解码所得的比特串填充到发送的can帧数据字段中并将该帧协同匿名id广播到总线中。
[0069]
(3.4)接收方通过匿名id识别接收到期望的帧后,采用(3.1)~(3.3)的逆向思路,即将can帧数据字段的值编码成索引,逆向偏移当前帧对应的通信密钥得到原始索引值,再对原始索引值进行解码实现数据字段的逆向洗牌,还原数据内容。
[0070]
进一步的,所述步骤4包括以下步骤:
[0071]
(4.1)接收方逆向洗牌成功后对数据字段进行基于crc的完整性检查。根据设计,crc字段包含原始数据的校验和,而不是洗牌后的数据。因此,can控制器被修改为在恢复数据后立即检查crc。发送方对原始数据进行crc校验后放入crc字段中,后再对数据字段进行洗牌并发送。接收方得到逆向洗牌的数据后再计算crc校验和并比较,验证帧的完整性和真实性。
[0072]
(4.2)接收方同时在通信时维护着一个特殊的计时器(或计数器),记录没有收到预期id帧的持续时间,如果当持续时间超过预先定义的阈值,一般为错过五次周期性消息为基准,会话内的错误恢复过程开始,此时接收方的帧过滤器被配置为接受所有帧,设定期望的id为aidi,而当前收到的帧集合为{aid
x
,aid
x+1
...aid
x+j
},接收方通过递归计算aidi的哈希值来匹配帧集合中的id,如果有期望的值正好出现在帧集合中,接收方将帧过滤器更新为链中的下一个有效哈希值,错误恢复成功。
[0073]
(4.3)如果会话内错误恢复失败,或者接收方从总线关闭故障中复位,在复位时当前会话已经结束并在新的会话中,在这种情况下错误恢复需要等到发送方ecu进行下一次会话初始化时。当接收方收到会话收到来自期望id的会话初始帧时,接收方不参与会话帧的发送身份认证,因为接收方不能验证id
pre
。如果当前总线中的其他接收方未对会话初始帧发出异议,则默认接受会话初始帧,计算新的会话密钥后进行新的一轮会话通信。
[0074]
本发明还提供了一种can总线安全保护装置,包括:
[0075]
会话初始化模块,用于,控制发送方电子控制单元ecu生成随机数并在can总线中发送会话初始帧以表明会话启动;接收方接收会话初始帧并验证发送方身份,发送方和接收方协商沟通会话密钥并在各自ecu中计算由通信密钥组成的哈希密钥链
[0076]
数据更新模块,用于,控制发送方和接收方使用由通信密钥组成的哈希密钥链进行会话通信过程中数据帧的id匿名连续更新,发送方使用计算完成的匿名id发送帧至总线,接收方提前计算期望的匿名id并在接受后更新为下一个匿名id;
[0077]
冗余校验计算模块,用于,控制发送方使用循环冗余校验crc计算原始数据校验和
并置于数据帧crc字段中,并使用哈希密钥链和组合编解码方案对原始数据字段进行洗牌置换后发送;
[0078]
完整性检查模块,用于,控制接收方使用与发送方实现数据置换时对应的哈希密钥链和逆向组合编解码方案获取原始数据,进行完整性检查。
[0079]
本发明还提供了一种存储介质,存储有计算机程序或指令,当所述计算机程序或指令被运行时,实现所述的方法。
[0080]
如上所述,根据本技术实施例的装置,可以实现在各种终端设备中,例如分布式计算系统的服务器。在一个示例中,根据本技术实施例的装置可以作为一个软件模块和/或硬件模块而集成到所述终端设备中。例如,该装置可以是该终端设备的操作系统中的一个软件模块,或者可以是针对于该终端设备所开发的一个应用程序;当然,该装置同样可以是该终端设备的众多硬件模块之一。
[0081]
替换地,在另一示例中,该装置与终端设备也可以是分立的终端设备,并且该装置可以通过有线和/或无线网络连接到该终端设备,并且按照约定的数据格式来传输交互信息。
[0082]
实验效果:本发明在can总线上进行测试,主要的性能指标是运行时的洗牌时间开销以及所达到的匿名和混淆程度。发送方和接收方的各自平均洗牌时间分别为3.1μs和3.06μs,其中发送方编码、偏移、解码时间分别为1.21μs、0,6μs和1.28μs,接收方分别为1.19μs、5.99μs、1.27μs,可以满足总线数据帧毫秒级的周期性消息对时效的要求。匿名id可以通过nist随机套件的全部16个测试,同时代表混淆程度的数据熵值从原始的0.6993提升至洗牌后的0.8286。
[0083]
本发明提供了一种can总线安全保护方法、装置和存储介质,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。