1.一种基于多路的CAN总线和以太网通信的安全网关的通信方法,包括以下步骤:
1)在上位机控制终端通过以太网连接CAN总线与车内控制器和车内检测设备通信时,使用双方约定的静态口令通过安全网关的身份认证,上位机控制终端获取与车内控制器与车内检测设备的通信权限;
2)上位机控制终端获取通信权限后,使用安全网关定义的嵌套伪随机数算法,生成一个固定随机数序列,当伪随机数算法嵌套次序和随机数种子确定时,每次生成的随机数序列中元素值确定;
嵌套伪随机数算法如下:
其中:
r表示嵌套随机数;
表示一种伪随机数生成器;
θ表示另一种伪随机数生成器;
T表示为当前系统时间;
g表示随机数集合A到伪随机数算法集合B和伪随机数算法集合C的一种映射,即A→B,A→C;
f表示输出[0,1]区间上分布的随机数函数;
n表示自然数;
Xn表示随机数种子;
m表示为模数;
表示向下取整符;
首先使用上述线性同余法(1.2)产生一个均匀分布在[0,1]之间的随机实数,映射选取嵌套伪随机数算法中包含的任意两种伪随机数算法,映射方法如下:
公式(1.1)中的函数g是随机数集合A到伪随机数算法集合B和伪随机数算法集合C的一种映射,即A→B,A→C;由公式(1.2)产生的均匀分布在[0,1]的随机实数 在集合B中,如果则 α表示线性同余法;如果 则 β表示移位寄存器序
列; 则 γ表示超素数法;在集合C中,如果 则 如果
则 如果 则
经过上述映射方法,由公式(1.1)将得到一种伪随机数生成器 使用系统时间T作为随机数种子生成范围在[1,100]之间的随机实数r1作为基数,得到的另一种伪随机数生成器θ,将系统时间的二倍2T作为随机数种子生成范围在[1,100]之间的随机实数r2作为偏移量,将r1与r2相加后向下取整,得到一个嵌套随机整数r;每生成一个随机数r,都与之前生成的每一个随机数比较,生成的第一个随机数除外,如果与之前生成的随机数相等,则舍弃,否则填入随机数生成序列;最终得到一个元素数值不重复的嵌套随机数序列;
3)拆分待发送的TCP协议数据,多路通信协议中定义的数据块长度字节范围在[10,20]之间;取出步骤2)生成的随机序列中的第一个元素r,经过自定义DataLen函数,该函数定义为:
得到的数值ω(r)∈[10,20],将该数值作为拆分数据块的长度,从TCP协议数据的第一字节开始,取出长度为ω(r)字节的数据作为拆分得到数据块,把拆分得到的数据块填充到中通信数据帧的data数据域,此通信数据帧为第一个通信数据帧;使用取出随机序列中的第一个元素r作为拆分得到数据块的编号,将该编号填充在第一个通信数据帧的headNum数据域;以此类推,取出随机序列中第二个、第三个……元素使用上述方式将通信数据拆分为数据块并编号,直到取出的随机数r′经过DataLen函数得到的ω(r′)大于或等于所剩的TCP协议数据块长度,则TCP协议数据不能再次被拆分,此时将所剩的TCP协议数据块填充到最后一帧数据的data数据域,将取出的随机数r′作为该数据块的编号填充到最后一帧数据的headNum数据域,完成对TCP协议数据的拆分和编号;拆分TCP协议数据的过程中使用计数器记录拆分得到的数据块个数Q;
4)将步骤3)通信数据帧中的data数据域和headNum数据域输入到MD5算法生成MD5数字指纹,将生成的MD5数字指纹填充到通信数据帧中的md5Check数据域;其中MD5算法是一种Hash算法;MD5算法定义为:
以512位为分组来处理输入的数据,且每一分组又被划分为16个32位子分组,经过一系列的处理后,MD5算法的输出由四个32位分组组成,将这四个32位分组级联后生成一个128位的散列值,该值即为数字指纹;
最后将数据类型和通信数据帧长度分别加入通信数据帧的dataType数据域和length数据域,得到完整通信数据帧,完成封装;最终将封装完毕数据帧送入待发送数据队列;
5)首先将步骤2)生成的随机序列中的前Q个元素依次放入大小为Q的动态数组中,Q为拆分得到的数据块个数;然后使用线性同余法产生范围在[0,Q-1]内的随机整数,查找与该随机数相同的数组下标值,把查找到的数组下标值所指的数组元素所对应的数据帧送入待发送数据子队列;第一次随机选取Q/N,N为以太网接口数个数据帧组成数据包送入第一个待发送数据子队列,第一个队列中的数据包由第一路以太网传输;以此类推,反复执行N次,共选取N组数据包送入N个待发送数据子队列,由N路以太网传输N个待发送数据子队列中的数据包;完成对所有通信数据帧的随机分组,且所有组均和以太网接口绑定;最终通过N路以太网同时并行将N个待发送数据子队列中的数据包发送给通信对端;
6)将步骤3)中使用的两种伪随机数算法randomType1、randomType2及随机数种子seedValue和拆分数据块个数dataNum组成密令数据帧,将密令数据帧中的randomType1、randomType2及seedValue和dataNum数据域输入到MD5算法生成MD5数字指纹加入到密令数据帧的md5Check数据域,将数据类型加入密令数据帧的dataType数据域,密令数据帧数据长度加入密令数据帧的length数据域,完成对密令数据的封装;通过一路以太网发送至安全网关;
7)安全网关接收到数据包后,由多路通信协议解析数据包中的数据帧,提取数据长度length与接收到的数据帧长度校验;对校验完毕的数据帧进一步解析,提取数据类型,如果为通信数据帧,则使用MD5算法计算接收到数据帧的data数据域和headNum数据域的MD5数字指纹与接收到MD5数字指纹比对,从而校验数据完整性;如果数据被篡改或丢失,则向上位机控制终端发送包含通信数据帧类型和该数据帧编号的重发指令数据帧;如果校验完整,则将数据域编号headNum作为编号字段,并作为索引,数据域data作为内容字段,进行建表;如果为密令数据,则使用MD5算法计算接收到数据帧的randomType1、randomType2及seedValue和dataNum数据域的MD5数字指纹与接收到的MD5数字指纹比对,校验数据完整性;如果数据被篡改或丢失,则向上位机控制终端发送包含密令数据帧类型的重发指令数据帧,此时headNum数据域由0填充;如果校验完整,使用自定义密令算法Secret,该算法定义:
解析密令数据帧,获取接收到密令数据帧中的伪随机数算法randomType1、randomType2及随机数种子seedValue和拆分数据块个数dataNum,使用公式(1.1)的嵌套伪随机数算法生成随机序列,对随机数序列中的前dataNum个元素进行遍历查表,每遍历到一个元素,查找表中是否存在该元素,如果存在,则检索该元素对应的data数据域,按遍历顺序对检索到的data数据域在队尾入队到重组数据队列中;如果不存在,则该随机数对应编号的数据块丢失,向上位机控制终端发送包含该数据块编号的重发指令,直到安全网关接收到含有该编号的数据帧,将该数据帧的data数据域在队尾入队到重组数据队列;最终完成对TCP协议数据的重组;
8)将重组的TCP协议数据协议转换为CAN总线数据,通过多路CAN总线发送至车内控制器和车内检测设备,并等待回复CAN报文;
9)安全网关在接收到车内控制器和车内检测设备回复的CAN报文后,将CAN报文由CAN协议转换为TCP协议数据,由安全网关使用与步骤2)、3)、4)相同的方法对TCP协议数据进行拆分、编号后加入MD5数字指纹,完成数据块的协议封装;使用步骤5)方法随机选取Q/N个数据帧为一组,组成N组数据包,通过N路以太网并行发送至上位机控制终端;
10)由上位机控制终端使用与步骤7)相同方式对数据进行校验、组包,得到完整的TCP协议数据;从而完成一次完整的上位机控制终端通过多路以太网连接多路CAN总线与车内控制器和车内检测设备安全通信的过程。
基于多路CAN总线和以太网通信的安全网关的通信方法\n技术领域\n[0001] 本发明提供一种基于多路CAN总线和多路以太网通信的安全网关及通信方法,用于实现上位机控制终端通过以太网与车内CAN总线连接的控制器和车内检测设备进行安全通信,属于通信安全技术领域。\n背景技术\n[0002] 控制器局域网络(Controller Area Network,CAN)作为一种现场总线技术,由于其可靠性高、稳定性好、抗干扰能力强、通讯速率高和维护成本低等特点,被普遍应用于工业控制领域。鉴于其良好的性能及独特的设计,汽车领域也广泛地使用CAN总线来实现汽车内部控制器、执行器和各检测设备间的数据通信。\n[0003] 以太网是互联网的基本组网技术,TCP/IP协议是互联网最基本的协议簇,随着万物互联概念的推广和物联网的发展,以太网作为一种通信数据量大、实时性高和可靠性强的技术,被广泛的应用于各个网络通信的领域中。\n[0004] 伴随车联网技术和自动驾驶技术的发展,对汽车网络通信技术提出了新的要求。\n车载网络也由动力系统,逐渐发展到信息娱乐、汽车辅助驾驶和安全系统等多种系统。同时,车载网络和与之相连的设备都需要通过外部接口进行诊断和维护,而这需要基于共享的高带宽网络通信技术支持。由于以太网具有技术成熟、高带宽和高性价比等特点,其在汽车中的使用率正在不断攀升。随之而来的是网络通信协议和网关的安全问题,黑客可以针对协议和网关发起一系列攻击,并有可能将这样的攻击蔓延到汽车内部的 ECU(电控单元)。不法分子可以通过截获车联网通信中的加密数据,解密后获取车辆行驶状态数据,也可以入侵到汽车内部ECU,发送非法指令,远程操控汽车。例如,特斯拉汽车已经频频爆出漏洞,黑客可以远程操控汽车,进行解锁、开窗、打开后备箱,甚至在低速行驶状态下将汽车熄火。美国DARPA研究中心也发现美国通用公司安吉星 OnStart系统存在漏洞,导致黑客可以利用它来远程操控汽车。因此在车联网和自动驾驶领域,如何通过网关实现车内各种数据间的快速转换和安全通信,国内外已有众多学者对这一课题进行了深入研究。\n[0005] 在CAN总线和以太网网关的协议转换和通信技术上,主要采用的技术方法有:车内多路CAN和车内单路以太网的协议网关,主要使用车内单路双绞线作为以太网通信总线与车内CAN收发模块通信;车内多路CAN和车外单路以太网的协议网关,主要用于汽车故障诊断和刷写车内电子控制单元;车内多路CAN和车外多路以太网协议网关,主要将数据进行双网双主冗余传输,以保证数据传输的稳定性和可靠性;上述通信网关应用于 CAN和以太网通信,以达到协议转换的目的。\n[0006] 在CAN总线和以太网网关的安全技术上,主要采用的技术方法有:数据加密技术、防火墙技术和网络认证技术等。但是简单的加密算法安全度低,容易被攻破,复杂的加密算法复杂度高,计算量大,与车载嵌入式芯片的计算能力不匹配,也不适合于数据的实时加密传输。面临频繁多样的攻击方式,密钥生成的复杂性和难于管理,以及窃听者在链路层或者其他节点使用的各种抓包技术,现有的安全技术无法很好的应用于车联网通信,不能完全实现安全通信的目的。\n发明内容\n[0007] 本发明提供一种基于多路CAN总线和多路以太网通信的安全网关及通信方法,用于实现上位机控制终端通过以太网与车内CAN总线连接的控制器和车内检测设备进行通信。\n[0008] 在协议转换阶段,安全网关通过车内CAN总线将接收到的CAN报文由CAN协议数据转换为TCP协议数据。\n[0009] 在多路通信协议数据帧的封装阶段,首先使用本发明定义的嵌套伪随机数算法生成一个固定的随机数序列,当伪随机数算法嵌套次序和随机数种子确定时,每次生成的随机数序列中元素值确定。\n[0010] 然后根据随机数序列中元素的生成顺序,先将随机数序列中的第一个元素输入到本发明自定义的DataLen函数,将DataLen函数输出的自然数N作为拆分后数据块的长度,从TCP协议数据的第一字节开始,取出长度为N字节的数据作为拆分后数据块,填充到附图3中通信数据帧的data数据域;将随机数序列中的第一个元素作为拆分数据块的编号,填充到附图3中通信数据帧的headNum数据域;将附图3中通信数据帧的data数据域和headNum数据域输入到MD5算法生成MD5数字指纹,将生成的MD5 数字指纹填充到附图3中通信数据帧的md5Check数据域。至此完成本发明定义的多路通信协议对第一个数据帧的封装。\n[0011] 根据随机数序列中元素的生成顺序,接着将随机数序列中的第二个元素输入到本发明自定义的DataLen函数,将DataLen函数输出的自然数J作为拆分后数据块的长度,从TCP协议数据的第N+1字节开始,取出长度为J字节的数据作为拆分后数据块,填充到附图3中通信数据帧的data数据域;将随机数序列中的第二个元素作为拆分数据块的编号,填充到附图3中通信数据帧的headNum数据域;将附图3中通信数据帧的data数据域和headNum数据域输入到MD5算法生成MD5数字指纹,将生成的MD5 数字指纹填充到附图3中通信数据帧的md5Check数据域。至此完成本发明定义的多路通信协议对第二个数据帧的封装。\n[0012] 以此类推,直至将随机数序列中的第K个元素输入到本发明自定义的DataLen函数,DataLen函数输出的自然数M大于或等于所剩未拆分的TCP协议数据块字节数时,将所剩未拆分的TCP协议数据填充到通信数据帧的data数据域;将第K个元素作为所剩TCP协议数据块的编号填充到通信数据帧的headNum数据域;然后将通信数据帧的 data数据域和headNum数据域输入到MD5算法生成MD5数字指纹,将生成的MD5数字指纹填充到通信数据帧的md5Check数据域;至此,完成对TCP协议数据的拆分,以及将拆分得到数据块封装成数据帧。\n[0013] 在信息发送阶段,首先,计算出每组内通信数据帧个数N,N=拆分数据块个数/以太网接口数;使用线性同余法随机选取N个数据帧作为一组数据包,将该组数据包与一个以太网接口绑定,以此类推,直至所有通信数据帧均已分组,所有组均和以太网接口绑定;然后多路以太网同时并行传输通信数据包至上位机控制终端,直至所有通信数据包发送完毕。\n[0014] 在信息接收阶段,首先由上位机控制终端对接收到的每个数据帧使用MD5指纹校验数据完整性,然后根据多路通信协议解析通信数据帧的data数据域得到拆分数据块,解析通信数据帧的headNum数据域得到拆分数据块的编号;根据自定义密令算法 Secret得到与安全网关相同的嵌套伪随机数算法,使用与安全网关相同的嵌套伪随机数算法,生成一个随机数序列;首先取出序列中的第一个元素,找到通信数据帧 headNum数据域的值与第一个元素相同的通信数据帧,取出该通信数据帧的data数据域入队到重组数据队列中;然后取出序列中的第二个元素,找到通信数据帧headNum 数据域的值与第二个元素相同的通信数据帧,取出该通信数据帧的data数据域在队尾入队到重组数据队列中;以此类推,直到接收到的所有data数据域入队到重组数据队列中,组合为完整TCP协议数据;从而完成安全高效的通信过程,应用于远程控制终端与车内控制器和车内检测设备的安全通信。\n[0015] 本发明提供一种基于多路CAN总线和多路以太网通信的安全网关,其上位机控制终端与车内控制器和车内检测设备的通信方法步骤如下:\n[0016] 1)在上位机控制终端通过以太网连接CAN总线与车内控制器和车内检测设备通信时,使用双方约定的静态口令通过安全网关的身份认证,上位机控制终端获取与车内控制器与车内检测设备的通信权限;\n[0017] 2)上位机控制终端获取通信权限后,使用安全网关定义的嵌套伪随机数算法,生成一个固定随机数序列,当伪随机数算法嵌套次序和随机数种子确定时,每次生成的随机数序列中元素值确定;该嵌套伪随机数算法中包含三种伪随机数生成算法:线性同余法、移位寄存器序列法和超素数法。\n[0018] 下面依次介绍三种算法定义。\n[0019] 第一随机算法:线性同余法\n[0020] Xn+1=(aXn+c)mod m,n≥0 (1.1)\n[0021] 其中:\n[0022] n为自然数;\n[0023] Xn+1为随机数;\n[0024] n=0时,初始值X0称为种子;\n[0025] 常数a称为乘子;\n[0026] 常数c称为常量;\n[0027] 常数m称为模数;\n[0028] mod为求余操作;\n[0029] 为了得到[0,1]区间上分布的随机数,可以令\n[0030]\n[0031] 其中Rn为满足要求的随机数;\n[0032] 对于(1.1)式,当c=0时,该算法称为乘同余法;当c≠0时,该算法称为混合同余法;\n[0033] 第二随机算法:移位寄存器序列法\n[0034] 移位寄存器序列法是随机产生0,1二进制位的方法。它基于本原多项式与模2运算。如本原三项式为xp+xq+1对应的移位寄存器发生器为:\n[0035] Xi=[Xi-p+Xi-(i-q)]mod 2,i=p,p+1……(1.3)\n[0036] 对寄存器中的二进制数码Xi作递推运算,其中:\n[0037] p、q是给定的正整数;\n[0038] Xi(i=1,2,…,p-1)为给定常数;\n[0039] 给定初值Xi(X-p,X-p+1,…,X-1),由公式产生的0或1值组成二进制数列 {an}。截取数列{an}中连续的L位构成一个L位二进制数;接着截取L位又形成一个二进制数,以此类推;\n[0040] 第三随机算法:超素数法\n[0041] 如果M是素数,Zi在集合{1,2,…,M-1},如果存在既约真分数(分子与分母互质的真分数)Zi/M可表示为纯循环小数(表示形式如0.a1a2...a1a1a2...a1),且循环节T=M-1,则称素数M为超素数;\n[0042] 根据数论中的纯循环小数存在条件定理,结合超素数的定义,给出了生成伪随机序列的一般超素数法,其递推公式为:\n[0043] Zi+1=(10*Zi)mod M,i=1,2,3…(1.4)\n[0044] 其中:\n[0045] M为超素数;\n[0046] Z是自然数集{Zi|0<Zi<M},Zi∈Z;\n[0047] i表示为自然数;\n[0048] mod为求余操作;\n[0049] 该方法生成的伪随机数列为一个整数循环序列,最小循环周期为M-1,在每个最小周期中从1到M-1之间的每个整数仅会出现一次。\n[0050] 本发明的嵌套伪随机数算法定义如下:\n[0051]\n[0052]\n[0053] 其中:\n[0054] r表示嵌套随机数;\n[0055] 表示一种伪随机数生成器;\n[0056] θ表示另一种伪随机数生成器;\n[0057] T表示为当前系统时间;\n[0058] g表示随机数集合A到伪随机数算法集合B和伪随机数算法集合C的一种映射,即 A→B,A→C;\n[0059] f表示输出[0,1]区间上分布的随机数函数;\n[0060] n表示自然数;\n[0061] Xn表示随机数种子;\n[0062] m表示为模数;\n[0063] 表示向下取整符;\n[0064] 首先使用上述线性同余法(1.6)产生一个均匀分布在[0,1]之间的随机实数,映射选取嵌套伪随机数算法中包含的任意两种伪随机数算法,映射方法如下:\n[0065] 公式(1.5)中的函数g是集合A(随机数集合)到B(伪随机数算法集合)和C(伪随机数算法集合)的一种映射,即A→B,A→C;由公式(1.6)产生的均匀分布在[0,1]的随机实数在集合B中,如果 则 (α表示线性同余法);如果 则\n(β表示移位寄存器序列); 则 (γ表示超素数法);在集合C中,如果\n则 如果 则 如果 则\n[0066] 经过上述映射方法,由公式(1.5)将得到一种伪随机数生成器 使用系统时间 T作为随机数种子生成范围在[1,100]之间的随机实数r1作为基数,得到的另一种伪随机数生成器θ,将系统时间的二倍2T作为随机数种子生成范围在[1,100]之间的随机实数r2作为偏移量,将r1与r2相加后向下取整,得到一个嵌套随机整数r;每生成一个随机数r,都与之前生成的每一个随机数比较,生成的第一个随机数除外,如果与之前生成的随机数相等,则舍弃,否则填入随机数生成序列;最终得到一个元素数值不重复的嵌套随机数序列。\n[0067] 3)拆分待发送的TCP协议数据,多路通信协议中定义的数据块长度字节范围在 [10,20]之间;取出步骤2生成的随机序列中的第一个元素r,经过本发明自定义 DataLen函数,该函数定义为:\n[0068]\n[0069] 得到的数值ω(r)∈[10,20],将该数值作为拆分数据块的长度,从TCP协议数据的第一字节开始,取出长度为ω(r)字节的数据作为拆分得到数据块,把拆分得到的数据块填充到附图3中通信数据帧的data数据域,此通信数据帧为第一个通信数据帧;使用取出随机序列中的第一个元素r作为拆分得到数据块的编号,将该编号填充在第一个通信数据帧的headNum数据域;以此类推,取出随机序列中第二个、第三个……元素使用上述方式将通信数据拆分为数据块并编号,直到取出的随机数r′经过DataLen 函数得到的ω(r′)大于或等于所剩的TCP协议数据块长度,则TCP协议数据不能再次被拆分,此时将所剩的TCP协议数据块填充到最后一帧数据的data数据域,将取出的随机数r′作为该数据块的编号填充到最后一帧数据的headNum数据域,完成对TCP协议数据的拆分和编号;拆分TCP协议数据的过程中使用计数器记录拆分得到的数据块个数Q;\n[0070] 4)将步骤3通信数据帧中的data数据域和headNum数据域输入到MD5算法生成MD5数字指纹,将生成的MD5数字指纹填充到通信数据帧中的md5Check数据域;其中 MD5(Message Digest 5)算法是一种Hash算法;MD5算法定义为:\n[0071] 以512位为分组来处理输入的数据,且每一分组又被划分为16个32位子分组,经过一系列的处理后,MD5算法的输出由四个32位分组组成,将这四个32位分组级联后生成一个\n128位的散列值,该值即为数字指纹;\n[0072] 最后将数据类型(如通信数据帧)和通信数据帧长度分别加入通信数据帧的 dataType数据域和length数据域,得到完整通信数据帧,完成封装;其数据结构如附图3中通信数据帧结构;最终将封装完毕数据帧送入待发送数据队列;\n[0073] 5)首先将步骤2生成的随机序列中的前Q(拆分得到的数据块个数)个元素依次放入大小为Q的动态数组中;然后使用线性同余法产生范围在[0,Q-1]内的随机整数,查找与该随机数相同的数组下标值,把查找到的数组下标值所指的数组元素(即数据块编号)所对应的数据帧送入待发送数据子队列;第一次随机选取Q/N(N为以太网接口数) 个数据帧组成数据包送入第一个待发送数据子队列,第一个队列中的数据包由第一路以太网传输;以此类推,反复执行N次,共选取N组数据包送入N个待发送数据子队列,由N路以太网传输N个待发送数据子队列中的数据包;完成对所有通信数据帧的随机分组,且所有组均和以太网接口绑定;最终通过N路以太网同时并行将N个待发送数据子队列中的数据包发送给通信对端;\n[0074] 6)将步骤3中使用的两种伪随机数算法randomType1、randomType2及随机数种子seedValue和拆分数据块个数dataNum组成密令数据帧,将密令数据帧中的 randomType1、randomType2及seedValue和dataNum数据域输入到MD5算法生成MD5 数字指纹加入到密令数据帧的md5Check数据域,将数据类型加入密令数据帧的 dataType数据域,密令数据帧数据长度加入密令数据帧的length数据域,完成对密令数据的封装,其数据结构如附图3种密令数据帧结构;通过一路以太网发送至安全网关;\n[0075] 7)安全网关接收到数据包后,由多路通信协议解析数据包中的数据帧,提取数据长度length与接收到的数据帧长度校验;对校验完毕的数据帧进一步解析,提取数据类型,如果为通信数据帧,则使用MD5算法计算接收到数据帧的data数据域和headNum 数据域的MD5数字指纹与接收到MD5数字指纹比对,从而校验数据完整性;如果数据被篡改或丢失,则向上位机控制终端发送包含通信数据帧类型和该数据帧编号的重发指令数据帧,其数据结构如附图3中重发指令数据帧结构;如果校验完整,则将数据域编号headNum作为编号字段,并作为索引,数据域data作为内容字段,进行建表;如果为密令数据,则使用MD5算法计算接收到数据帧的randomType1、randomType2 及seedValue和dataNum数据域的MD5数字指纹与接收到的MD5数字指纹比对,校验数据完整性;如果数据被篡改或丢失,则向上位机控制终端发送包含密令数据帧类型的重发指令数据帧,其数据结构如附图3中重发指令数据帧结构,此时headNum数据域由0填充;如果校验完整,使用自定义密令算法Secret,该算法定义:\n[0076] 解析密令数据帧,获取接收到密令数据帧中的伪随机数算法randomType1、 randomType2及随机数种子seedValue和拆分数据块个数dataNum,使用公式(1.5)的嵌套伪随机数算法生成随机序列,对随机数序列中的前dataNum个元素进行遍历查表,每遍历到一个元素,查找表中是否存在该元素,如果存在,则检索该元素对应的data 数据域,按遍历顺序对检索到的data数据域在队尾入队到重组数据队列中;如果不存在,则该随机数对应编号的数据块丢失,向上位机控制终端发送包含该数据块编号的重发指令,直到安全网关接收到含有该编号的数据帧,将该数据帧的data数据域在队尾入队到重组数据队列;最终完成对TCP协议数据的重组;\n[0077] 8)将重组的TCP协议数据协议转换为CAN总线数据,通过多路CAN总线发送至车内控制器和车内检测设备,并等待回复CAN报文;\n[0078] 9)安全网关在接收到车内控制器和车内检测设备回复的CAN报文后,将CAN报文由CAN协议转换为TCP协议数据,由安全网关使用与步骤2、3、4相同的方法对TCP 协议数据进行拆分、编号后加入MD5数字指纹,完成数据块的协议封装;使用步骤5 方法随机选取Q/N个数据帧为一组,组成N组数据包,通过N路以太网并行发送至上位机控制终端;\n[0079] 10)由上位机控制终端使用与步骤7相同方式对数据进行校验、组包,得到完整的TCP协议数据;从而完成一次完整的上位机控制终端通过多路以太网连接多路CAN 总线与车内控制器和车内检测设备安全通信的过程;\n[0080] 用上述步骤可实现车内控制器和车内检测设备与上位机控制终端的通信。\n[0081] 本发明提供一种基于多路的CAN总线和以太网通信的安全网关的方法的设备,包括:ARM为核心处理器的嵌入式平台;CAN总线模块和以太网模块;\n[0082] 所述的ARM为核心处理器的嵌入式平台搭载了Linux操作系统;\n[0083] 所述的CAN总线模块内含CAN控制器和CAN收发器;\n[0084] 所述的以太网模块包括以太网收发器;\n[0085] 其中,安全网关基于以ARM为核心处理器的嵌入式平台,该平台搭载了Linux操作系统;ARM核心处理器的CAN通道与多路CAN控制器和收发器相连,CAN收发器的另一端接入CAN总线与车内控制器与车内检测设备相连,用于收发CAN报文;ARM核心处理器的以太网接口与多路以太网收发器相连,以太网的另一端连接上位机控制终端,用于收发以太网通信协议数据;该嵌入式平台经过上述扩展后包含多路CAN总线模块,多路以太网模块;具体CAN总线链路数量取决于车内控制器和车内检测设备的数量以及对通信效率的需求,以太网链路数量取决于具体的安全等级,链路数越多安全等级越高;\n[0086] 所提供的基于多路CAN总线和以太网通信的安全网关,由于使用ARM为核心处理器的嵌入式平台,并且移植了Linux下CAN总线驱动;在以太网模块与上位机控制终端通信时使用Socket API,在CAN总线模块与车内控制和检测设备通信时使用Socket Can API;使用多路CAN总线和以太网链路通信时,可以利用网络通信API检测链路是否空闲或故障,如果有链路故障或繁忙则选用空闲链路,并通知上位机控制终端对故障链路备份和修复。\n[0087] 本发明采用多路以太网作为信息传输的主干网,连接多路CAN总线直接与车内控制器和车内检测设备通信的安全网关及其通信方法,可以实现安全、高效的实时数据通信。\n由于该安全网关使用多路CAN总线以及以太网链路,大大减少了通信时间,提高了通信效率。\n[0088] 安全网关一端连接CAN总线与多个车内控制器和多个车内检测设备通信,另一端连接以太网与上位机控制终端通信;本发明实现了CAN总线数据和TCP数据之间的协议转换,同时使用本发明定义的嵌套伪随机数算法将数据拆分为长度随机的数据块;将数据块封装到编号随机的由本发明定义的多路通信协议通信数据帧中;最后安全网关根据以太网接口数,多次随机选取N个数据帧组成多个数据包,每个数据包与一个以太网接口绑定,多个以太网链路同时并行发送数据包至通信对端,由通信对端将接收到数据包按本发明定义的多路通信协议解析、重组为完整TCP数据,从而使得上位机控制终端通过安全网关连接车内控制器与车内检测设备,实现基于多路CAN总线和多路以太网协议转换和通信的安全网关。\n[0089] 本发明的积极效果在于:使用多路CAN总线和以太网通信的安全网关,实现了车联网中车内CAN总线协议和以太网的通信协议之间的转换,同时使用伪随机数算法将数据拆分为数据块后,将数据块放入编号随机的数据帧,再随机选取N个数据帧作为数据包,系统将根据以太网接口数生成多个数据包,每个数据包与一个以太网接口绑定,多个以太网链路同时发送数据包。其随机算法运算速度快,在保证实时性的同时,由于数据帧编号、数据帧组包方式和通信所使用以太网链路编号都是通过本发明定义的嵌套伪随机数算法生成,入侵者无法将通信中的数据块组合成有意的完整数据,也不能在通信系统内发送有意义的数据,有效地避免了通信系统被非法入侵,保证了通信系统的安全性及抗破坏性。同时使用了多个以太网链路并行传输数据,使用了多路CAN 总线链路连接多个车内控制设备与车内检测设备,可以保证上位机控制终端与多个车内控制设备、多个车内检测设备并行通信,显著地提高了通信效率。\n附图说明\n[0090] 图1为本发明的结构图;\n[0091] 图2为本发明的系统流程图;\n[0092] 图3为本发明的数据结构图;\n[0093] 图3中:dataType表示数据类型,如通信数据帧、密令数据帧、重发指令数据帧,位于各数据帧第1字节的高4位;length表示数据帧长度,位于各数据帧第1字节低4位;\nheadNum 表示数据域编码,位于通信数据帧和重发指令数据帧第2字节;data表示数据域,位于通信数据帧第19字节至第38字节;randomType1表示第一种伪随机数算法,位于密令数据帧第2 字节高4位;randomType2表示第二种伪随机数算法,位于密令数据帧第2字节低4位; seedValue表示随机数种子,位于密令数据帧第3字节;dataNum表示拆分数据域个数,位于密令数据帧第4字节;md5Check表示MD5数字指纹,在通信数据帧和重发指令数据帧中位于第3字节至18字节,在密令数据帧中位于第5字节至第20字节。\n具体实施方式\n[0094] 结合图1以及图2和图3,通过以下实施例对本发明做进一步描述。并不以任何方式限制本发明,在不背离本发明的技术解决方案的前提下,对本发明所作的本领域普通技术人员容易实现的任何改动或改变都将落入本发明的权利要求范围之内。\n[0095] 实施例1\n[0096] 参照图1、图2和图3,本发明的装置有ARM为核心处理器的嵌入式平台、八路CAN总线模块和两路以太网模块;\n[0097] 所述的ARM为核心处理器的嵌入式平台搭载了Linux操作系统;\n[0098] 所述的CAN总线模块内含CAN控制器和CAN收发器;\n[0099] 所述的以太网模块包括以太网收发器;\n[0100] 其中,ARM核心处理器的CAN通道与八路CAN控制器和收发器相连,CAN收发器的另一端接入CAN总线与车内控制和检测设备相连,用于收发CAN报文;ARM核心处理器的以太网接口与两路以太网收发器相连,以太网的另一端连接上位机控制终端,用于收发以太网数据;\n[0101] 上位机控制终端通过两路以太网连接八路CAN总线链路与车内控制和检测设备通信的过程如下:\n[0102] 1.在上位机控制终端通过以太网连接CAN总线与车内控制器和车内检测设备通信时,使用双方约定的静态口令通过安全网关的身份认证,上位机控制终端获取与车内控制器和车内检测设备的通信权限;\n[0103] 2.上位机控制终端在获取通信权限后,按多路通信协议中的公式(1.5)和(1.6):\n[0104]\n[0105]\n[0106] 产生一个随机序列,取出随机序列中的第一个随机数r使用DataLen函数(1.7):\n[0107]\n[0108] 将得到的数值ω(r)作为拆分数据块的长度,从TCP协议数据的第一字节开始,取出长度为ω(r)字节的数据作为拆分得到数据块,把拆分得到的数据块填充到附图3中通信数据帧的data数据域,此通信数据帧为第一个通信数据帧;使用取出随机序列中的第一个元素r作为拆分得到数据块的编号,将该编号填充在第一个通信数据帧的 headNum数据域;\n以此类推,取出随机序列中第二个、第三个……元素使用上述方式将TCP协议数据拆分为数据块并编号,直到取出的随机数r′经过DataLen函数得到的ω(r′)大于或等于所剩的TCP协议数据块长度,则TCP协议数据不能再次被拆分,此时将所剩的TCP协议数据块填充到最后一帧数据的data数据域,将取出的随机数r′作为该数据块的编号填充到最后一帧数据的headNum数据域,完成对TCP协议数据的拆分和编号;拆分TCP协议数据的过程中使用计数器记录拆分得到的数据块个数Q;\n[0109] 3.将步骤2通信数据帧中的data数据域和headNum数据域输入到MD5算法生成 MD5数字指纹,将生成的MD5数字指纹填充到通信数据帧中的md5Check数据域;最后将数据类型(通信数据帧)和通信数据帧长度分别加入通信数据帧的dataType数据域和length数据域,得到完整通信数据帧,完成封装;其数据结构如附图3中通信数据帧结构;最终将封装完毕数据帧送入待发送数据队列;\n[0110] 4.将步骤2生成的随机序列中的前Q(拆分得到的数据块个数)个元素依次放入大小为Q的动态数组中;使用线性同余法产生范围在[0,Q-1]内的随机整数,查找与该随机数相同的数组下标值,把查找到的数组下标值所指的数组元素(即数据块编号)所对应的数据帧送入待发送数据子队列;第一次随机选取Q/2(2为以太网接口数)个数据帧组成数据包送入第一个待发送数据子队列,第一个队列中的数据包由第一路以太网传输;第二次随机选取Q/2个数据帧组成数据包送入第二个待发送数据子队列,第二个队列中的数据包由第二路以太网传输;将所有通信数据帧随机分为两组,且两组数据包均和两路以太网接口绑定;\n通过两路以太网将两个待发送数据子队列中的数据包并行发送给通信对端;\n[0111] 5.将步骤2中使用的两种伪随机数算法randomType1、randomType2及随机数种子seedValue和拆分数据块个数dataNum组成密令数据帧,将密令数据帧中的 randomType1、randomType2及seedValue和dataNum数据域输入到MD5算法生成MD5 数字指纹加入到密令数据帧的md5Check数据域,将数据类型加入密令数据帧的 dataType数据域,密令数据帧数据长度加入密令数据帧的length数据域,完成对密令数据的封装,通过一路以太网发送至安全网关;\n[0112] 6.安全网关接收到数据包后,由多路通信协议解析数据包中的数据帧,提取数据长度length与接收到的数据帧长度校验;对校验完毕的数据帧进一步解析,提取数据类型,如果为通信数据帧,则使用MD5算法计算接收到数据帧的data数据域和headNum 数据域的MD5数字指纹与接收到MD5数字指纹比对,从而校验数据完整性;如果数据被篡改或丢失,则向上位机控制终端发送包含通信数据帧类型和该数据帧编号的重发指令;如果校验完整,则将数据域编号headNum作为编号字段,并作为索引,数据域 data作为内容字段,进行建表;如果为密令数据,则使用MD5算法计算接收到数据帧的randomType1、randomType2及seedValue和dataNum数据域的MD5数字指纹与接收到的MD5数字指纹比对,校验数据完整性;如果数据被篡改或丢失,则向上位机控制终端发送包含密令数据帧类型的重发指令,其中重发指令数据帧的headNum数据域由 0填充;如果校验完整,由自定义密令算法Secret使用接收到密令数据帧中的伪随机数算法randomType1、randomType2以及随机数种子seedValue,使用公式(1.5)的嵌套伪随机数算法生成随机序列,对随机数序列中的前dataNum个元素进行遍历查表,每遍历到一个元素,查找表中是否存在该元素,如果存在,则检索该元素对应的data 数据域,按遍历顺序对检索到的数据域在队尾入队到重组数据队列中;如果不存在,则该随机数对应编号的数据帧丢失,向上位机控制终端发送包含该数据帧编号的重发指令,直到安全网关接收到含有该编号的数据帧,将该数据帧的data数据域在队尾入队到重组数据队列;最终完成对TCP协议数据的重组;\n[0113] 7.将得到的TCP协议数据协议转换为CAN总线数据,通过八路CAN总线发送至车内控制器和车内检测设备,并等待回复数据;\n[0114] 8.安全网关在接收到车内控制器和车内检测设备回复的CAN报文后,将CAN报文数据由CAN协议转换为TCP协议数据,由安全网关使用与步骤2、3、4相同的方法对 TCP协议数据进行拆分、编号后加入MD5数字指纹,完成数据块的协议封装;使用步骤4方法随机选取Q/\n2个数据帧为一组,组成两组数据包,通过两路以太网并行发送至上位机控制终端;\n[0115] 9.由上位机控制终端使用与步骤6相同方式对数据进行校验、组包,得到完整的 TCP协议数据;从而完成一次完整的上位机控制终端通过两路以太网连接八路CAN总线与车内控制器和车内检测设备安全通信的过程。\n[0116] 测试例\n[0117] 对实施例1所提供的八路CAN总线和两路以太网通信的安全网关及方法进行以下实验:\n[0118] 1.按实施例1所述方法对上位机控制终端通过两路以太网连接八路CAN总线与车内控制器和车内检测设备进行通信,设置CAN通信波特率为250K,理论上每秒可接收到2500帧CAN 扩展帧数据,将CAN数据帧协议转换为TCP协议数据,最多可得到20000字节有效数据,将每2000字节的数据拆分为100个数据块封装成数据帧后分为两组数据包,通过两路以太网传输到上位机控制终端;\n[0119] 2.在数据通过两路以太网传输至上位机控制终端的过程中,如果使用抓包技术在一路以太网数据链路层截取数据包,则被截取到数据包中的数据不完整,重组为有效完整数据的概率为0;如果使用抓包技术在两路以太网链路层截取数据包,则大大增加了监听难度;如果截获两路以太网链路中的两组数据包,由于数据包中数据经过多路通信协议封装,无法得知截取数据包中的data数据域位置;即使得到所有截取数据包中的100个data数据域,那么组合所有100个data数据域的可能是100!=9.33262154439400e+157种,使用中国国防科技大学研制的天河二号超级计算机,以每秒33.86千万亿次的浮点运算速度用暴力破解法计算 100!种可能,需要(9.33262154439400e+157)/(3.3860e+018)=2.75623e+139秒=8.73997e+131年,几乎不可能完成破解。\n[0120] 通过上述实验能够证明本发明所使用的多路CAN总线和多路以太网通信的安全网关可以有效的防止通信数据被窃取从而导致的信息泄露以及对通信数据的篡改,进而入侵通信系统做非法操控,极大的保证了通信的安全性及抗破坏性。\n[0121] 结论:\n[0122] 本发明采用的基于多路CAN总线和以太网通信的安全网关及其通信方法,即使数据在以太网链路层被抓包技术所截获,也是不完整、无规律和不可重组的无效碎片式数据。\n同时,入侵者也不能在通信系统内发送有意义数据,有效的避免了通信系统被非法入侵。而通信双端却可以使用本发明采用的方法对数据完成重组,得到完整有效的数据,确保了通信系统的安全性以及抗破坏性。
法律信息
- 2018-05-08
- 2017-12-26
实质审查的生效
IPC(主分类): H04L 12/40
专利申请号: 201710789108.7
申请日: 2017.09.05
- 2017-12-01
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2005-09-21
|
2004-03-17
| | |
2
| |
2008-04-02
|
2006-09-29
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |