数控总线的消息安全通信方法

来源:互联网

点击:1131

A+ A-

所属频道:新闻中心

关键词:数控总线 消息安全

    前言

      工业通信网络在提高生产速度、管理生产过程、合理高效加工以及保证安全生产等方面起到关键性作用。然而,由于通信过程中一些难以避免的系统故障、电磁干扰等问题,导致消息在传输过程中可能出现重复、插入、延时及伪装等,消息破坏及丢包现象也时有发生,进一步导致通信系统错误,这给工业控制带来了巨大危险。因此,消息安全通信已成为工业通信安全研究的关键问题之一。如何保证消息安全通信,传统方法一般在通信协议的数据链路层进行循环冗余校验(Cyclical redundancy check,CRC),同时为提高校验能力,对CRC生成的多项式进行改进研究,但这些方法难以降低通信过程中所产生的剩余错误率。剩余错误率是指接收端在对所收到消息进行校验之后,没有被检测到的错误位的数量与所有传输位总数的比值。目前数控系统正朝着开放式、网络化及智能化等方向发展,数控总线作为工业通信网络的一种,用于连接数控系统装置间数字式、双向、多点的通信,其采用了同步和异步两种通信机制,在这两种机制下如何保证消息的安全通信是本文研究重点。

      基于此,本文提出一种用于数控总线的消息安全通信方法,消息发送前在应用层之上利用动态CRC进行校验,同时采用对消息进行连续编号等机制封装安全报文。通过该方法有效降低了剩余错误率,保障了消息的安全性。

    1 研究背景

      如何采取有效措施以保障消息安全是总线通信安全研究的关键。DZUNG针对消息传输、访问控制等问题,提出了一种基于网络分层的安全保护机制。RANMANI针对剩余错误率问题,提出了一种对数据包的包头编号和包尾CRC校验的机制进行消息保护。与总线通信安全研究相关的标准主要有欧洲EN 50159-2标准、IEC 61508.2标准以及最近的IEC 61784.3标准。在安全性设计上,用户希望新设计的安全总线具有现存总线向上兼容的能力,目的是方便使用现有总线的设备和相关知识。从这些需求出发,IEC 61784-3标准在现有总线协议上提出了安全通信层,用以处理通信过程中的消息错误。

      1.1现有安全总线

      基于上述标准,目前安全总线主流研究方向是将安全保护措施封装在安全通信层,现有安全总线协议主要有Profisafe、Interbus Safety、CANopenSafety、EtherCat Safety等。

      Profisafe安全协议是在Profibus总线协议基础上增加了安全通信层。安全通信层封装的安全报文由安全数据、状态/控制位、报文编号以及传统CRC.16/32校验方式等构成。

      但Profisafe安全机制存在以下问题。

      (1)Profisafe安全报文采用了传统CRC校验方式对安全数据进行校验,所以通信过程中如果存在连续多个相同的安全数据,则会产生连续多个相同的CRC校验值,这可能使接收端无法判断新接收到的数据包是有效数据包还是错误数据包。

      (2)Profisafe采用了报文编号在一定程度上可避免问题1的产生,但由于其为保证短帧传输,只使用了8位报文编号,所以如果通信过程中存在连续多个相同的安全数据,每255个循环重复一次,则也会产生连续多个完全相同的数据包。如果存在缓冲延迟,则也会导致接收端可能无法正确判断。

      Interbus Safety安全协议是在Interbus总线协议基础上增加一个SafeControl控制模块,该模块专门用于检测安全报文,安全报文的传输正确与否通过传输检测位CRC-LoopbackWord的测试来确定,其CRC校验采用传统的CRC-16检测机制。CANop%Safety安全协议是在CANopen总线协议CANopen Safety安全协议是在CANopen总线协议基础上定义了安全相关数据对象(Safety-relateddata object, SRDO)用于安全报文传输,但SRDO的CRC校验仍然采用了传统CRC检测机制。CC-Link Safety安全协议是在CC-Link总线协议基础上增加了安全功能层,用于安全报文的传输和传输错误的检测。在CC-Link Safety安全协议中,主站与一般从站传输的报文与CC-Link总线协议相同,而与安全从站传输的安全报文是在原有的数据域中储存安全功能层使用的信息,该信息包括确定信息顺序的序列号和检测信息位错乱的CRC-32校验码,采用双重CRC校验方。分析可知,以上三种总线安全机制生成的CRC校验码只同安全报文内容和生成多项式有关,因此仍然存在接收端可能无法正确判断连续多个相同数据包的问题。

      为此,EtherCat Safety安全协议提出了一种解决方法,也在安全通信层中为待发送的数据包提供CRC校验,不同之处在于:CRC校验值根据安全数据本身和一新加起始值一起计算产生,该起始值是接收到的上一个数据包的CRC校验值。这种机制能保证持续动态的生成CRC校验值,可解决传统CRC校验中由于连续多个相同数据包产生相同CRC校验值的问题。但是EtherCat Safety这种消息安全通信机制也存在一个问题,即发送端和接收端的CRC起始值存在依赖关系。每次发送端要发送新数据包时,必须等待上一个接收到的数据包的CRC值,经计算产生新的CRC值后方能发送该新数据包。这意味着需要等待接收到上一个数据包后方可发送下一个数据包,这会降低通信的实时性,特别是像基于总线的数控系统这种强实时通信的系统。

      1.2数控总线安全需求

      数控总线作为一种面向特殊领域应用的工业通信网络,要求总线满足周期性、实时性、同步性、可靠性及安全性等要求。总线通信协议由物理层、数据链路层、应用层与用户层行规组成。用户层行规里定义了两种命令,异步命令和同步命令。异步命令用于数控系统的定位及快移等操作,同步命令则用于数控系统的多轴联动插补操作。因此,两种不同的需求要求数控总线要同时支持异步及同步消息通信。异步通信是当发送端有控制需求时向接收端发送新消息,在发送新消息时发送端需确认所发送的上一条消息的反馈己经回来。同步通信则要求发送端在每个通信周期到来时,都要向接收端发送下一条新消息,不用考虑发送端所发送的上一条消息的反馈是否己经回来,不能等待,每个周期到来时都须发送新消息。

    2 数控总线消息安全方法

      针对数控总线通信的特殊需求,安全性需考虑如何保证数控总线在进行异步及同步通信时消息安全问题,主要是同步通信机制下消息的安全性。本文解决的思路主要基于两点:一是要求能够持续动态的生成CRC校验值以保证每条消息能使用新的CRC校验值:二是要求能使发送端和接收端校验方式互不相关以保证同步通信。

      基于上述考虑,针对消息通信过程中可能出现的重复、删除、插入、破坏及伪装等错误,在尽量降低算法复杂度的前提下,本文提出在应用层之上采取状态位控制、会话号、序列编号以及新的动态CRC安全校验等措施构建安全通信层,以保证消息的安全通信。

      (1)安全数据。来自用户行规的异步及同步命令,是接收端所需要的有用数据,发送端用其与CRC起始值一起动态计算产生新的CRC校验值用于安全校验。

      (2)状态位。用于标识数据包状态。

      (3)会话号。在每次建立连接进行数据发送期间保持使用同一个会话号,以保证即使在通信链路中断和重启后也不会出现重复的数据包。

      (4)序列号。用于发送端和接收端在产生新消息的同时产生序列顺序号。

      (5)动态CRC。由安全数据和CRC起始值共同计算动态产生,发送端和接收端所需要的动态CRC校验不相依赖。

      2.1消息安全通信机制

      图4所示为本文所设计的消息安全通信机制,其中:①CRC_ST_ADDR:每个站点地址编号:②安全数据Mi:发送端发送的第i条有用数据:③安全数据Si:接收端发送的第i条有用数据;④CRC M,:发送端发送第i条有用数据时所动态生成的CRC校验值,也是产生CRC_Mi+1所需要的起始值,同时也是接收端用于校验第i条数据所需要的起始值;⑤CRC_Si:接收端所产生的第i条消息的校验值,发送端通过计算S;与CRC_Mi一起产生的校验值与CRC_Si进行比较,判断是否有错。

      通信开始时,发送端采用与其通信的接收端站点的地址编号CRC_ST_ADDR值作为发送端和接收端进行动态CRC计算的起始值,因为每个站点的CRC_ST_ADDR值在整个通信系统中都是唯一的。通信过程中,发送端负责动态生成CRC_Mi校验值,接收端只需利用发送端所产生的CRC从值即可进行校验,同时发送端也只利用CRC_Mi值进行校验。 

      2.2算法描述

      消息安全通信算法分发送端算法与接收端算法两部分,发送端算法描述如下。

      (1)设置本次建立连接后通信的会话号,转步骤(2)。

      (2)如果在一段时间内未收到消息,则进行新消息的发送,转步骤(3)。否则,对接收到的消息进行处理,转步骤(7)。

      (3)判断发送端所要发送的安全数据Mi的类型,如果无法识别则报错,转步骤(2)。否则为可识别的类型,转步骤(4)。

      (4)对发送端所要发送的安全数据Mi进行封装操作。封装过程分为以下几步:①加载本次即将发送的安全数据Mi;②加载1字节的状态位,该状态位初始值为1,表示正常通信:③加载1字节的会话号;④加载1字节的序列号;⑤根据发送端上一个CRC校验值与当前安全数据城一起计算出新的CRC校验值,加载该新的CRC校验值,大小为2字节。封装完毕,发送封装后的消息给接收端,转步骤(5)。同时记录新的CRC校验值用于下一次发送校验。

      (5)如果发送端所发送的安全数据从的类型是同步消息,转步骤(2)。否则为异步消息,转步骤(6)。

      (6)中断发送端消息的发送,等待接收到安全数据Si后,转步骤(2)。

      (7)读取所接收消息的序列号,根据序列号提取相关CRC:校验值,进行校验,如果校验成功,转步骤(8)。否则校验不成功,转步骤(9)。

      (8)提取所接收消息中的状态位,如果是0,即为重发请求,则重发消息,然后转步骤(2).否则,不是重发请求,直接转步骤(2)。

      (9)要求从站重发,将状态位置为0,将重发消息发送给接收端,然后转步骤(2)。

      接收端算法描述如下。

      (1)等待发送端所发送的消息,根据其会话号和序列号提取相关CRC校验值,转步骤(2)。

      (2)使用提取的CRC校验值对所接收的消息进行校验,如果校验通过,则转步骤((3)。否则校验未通过,转步骤(5)。

      (3)提取所接收消息中的状态位,对其值进行判断,如果为1,是正常消息,转步骤(4)。否则为0,是重发消息,则进行重发,转步骤(1)。

      (4)提取所接收消息中的CRC校验值并储存,然后用储存的CRC校验值对欲发送给发送端的安全数据S;进行处理,得到的新的CRC校验值并不存储,但却跟安全数据Si、状态位、会话号以及序列号封装到一起,共同发送给发送端,然后转步骤(1)。

      (5)判断该消息发生错误的次数,如果大于某个设定界限,则向发送端发送上一消息的重发请求消息,然后转步骤(1)。否则,向发送端发送该消息的重发请求消息,然后转步骤(1)。

    3 性能分析

      剩余错误率为检验消息安全传输方法性能好坏的主要标准之一。首先定义性能分析中需要用到的各种函数及变量。

      (1)Sd:安全数据,即需要安全传输的原始数据,用Sa (x)表示其多项式。

      (2) Sc:校验值,由上一个CRC校验值与安全数据Sa共同求得,用Sc(x)表示其多项式。

      (3) G:生成多项式,用g(x)表示其多项式。

      (4) m:安全数据Sd所包含的位数。

      (5) r:生成多项式g(x)的度数,亦即Sc中所包含的位数。

      (6) n:在通信中传输的帧的位数。

      (7) Be:在通信中发生错误的位的总数。

      (8) Bude:在通信中没有被检测到的错误位的总数。

      (9) Ball:在通信中所有传输位的总数。

      3.1 CRC方法 

      3.3剩余错误率

      剩余错误率P1是指在解码校验之后仍然没有被检测到的已经被破坏的传输数据所占的比例,即没有被检测出的错误位的数量与所有传输位的总数的比值。

      通常来讲,剩余错误率尸1与消息长度n、生成多项式加)以及位错误率P有关。位错误率P表示通信过程中发生错误的位的数量与所有传输的位的数量比值。

      最坏情况下p=0.5,意味着每两位中有一位出现错误,实际应用中P的取值范围在。0

      剩余错误率P1的计算方法主要有直接代码分析法、Monte-Carlo模拟法以及代码转化分析法等几种,本文从降低算法复杂度的角度出发采用了直接代码分析法。

      对于传统的CRC校验,无法检测的错误主要分为两种情况,一种是只有安全数据发生错误,而CRC校验值却没有发生错误;第二种是安全数据和CRC校验值都发生了错误。因此,对于本文提出的方法,由于即将用于传输的校验值是由上一个校验值与即将用于传输的安全数据Sd,i共同产生的,而CRC的校验也是由上一个CRC和安全数据凡,共同完成的,所以当上一个CRC校验值发生传输错误时,一般都会造成当前CRC校验无法通过。根据本文所述方法,这种情况下是需要重传安全数据Sd,i-1与上一个CRC校验值,因此在很大程度上降低了剩余错误率。

    4 试验测试与评价

      4.1实时性

      本方法使用查表法计算CRC校验码,以字节为单位进行循环计算,循环次数为被校验字符串的字节长度n。每一次循环计算过程只涉及一次左移运算、一次查表运算和两次异或运算,时间复杂度为O(1),因此本方法时间复杂度为O(n)。由此可知,从理论上分析,本方法的时间复杂度不高。在此基础上,本文对增加安全通信层后该层对总线通信所增加的时延进行了测试。

      测试用工控机硬件环境为1.6 GHz x86 CPU、512 MB RAM, 40 GB硬盘,所用数控总线是基于之RS485、传输速率为16 MB/s的同步串行总线。试}验包括1个主站点和1个从站点。试验过程中,主站点发送10 000帧给从站点,每帧大小16 B。通过总线分析仪累加记录通信总时延和安全通信层所耗时间,取每帧平均耗时得:td=48.26μstms=1.23μs。

      测试结果表明,安全通信层时延开销占整个总线时延的3%左右,在可接受范围之内。因此,本方法在实时性方面可满足数控总线要求。

      4.2剩余错误率

      本方法和传统方法以剩余错误率Pre为评价标准,对比测试两种方法之间的消息安全通信性能。同时,对消息完整性等级IC级别也进行了测试。

      本文通过Matlab自带的Simulink建模与仿真工具构建试验环境,获取P1与P之间的关系。传统方法与本方法的建模与仿真结构图大体相似,在此以本方法为例,介绍试验过程。本方法试验过程如图6所示,二进制贝努利序列产生器周期性产生一个长度为128位的随机二进制序列Sd(x),该序列经通用CRC编码器模块进行CRC校验,产生校验码Sc(x),然后封装成报文t(x)。t(x)分两路进行处理,第一路经数据链路层(Data link layer, DLL)通用CRC编码器模块模拟数据链路层的CRC校验,产生相应校验码并进行封装,封装后的报文mt(x)通过误比特率统计模块统计总通信位数Ball,同时经二进制对称信道模块模拟位错误率为P的信道传输:第二路t(x)进入使能子系统1进行未被检测到的错误位数Bude的相关统计。

      其中,mt(x)所封装的t(x)经第一路模拟信道传输后变为t'(x),由Sd'(x)和Sc'(x)构成。DLL层通用CRC检测器模块对mt'(x)进行CRC校验,在校验结果显示为通过的情况下,启动使能子系统1,进行t'(x)与第二路t(x)的相关比较。图7为使能子系统的内部结构图,该子系统在t'(x)通过CRC校验且Sc(x)和Sc'(x)相同的前提下,累加统计Sd(x)和Sd'(x)中的不同位数,从而得到本方法中未被检测到的错误位数Bude。

      为保证试验具有可比性,传统方法和本方法均使用相同生成多项式g(x)=xt16+xt12+x5+x0。传统方法得出的总通信位数Ball、位错误率P、没有被检测到的错误位数Bude以及剩余错误率P1结果。 

      同时,试验对本方法的消息完整性等级IC进行了测试,本方法的完整性等级比IC3更高,这意味着本方法的消息完整性等级完全能满足数控总线的远程控制需要。

      为进一步获取实际对比试验结果,本文对两种方法的通信性能进行了实际应用测试。使用两种总线进行测试,一种为传统同步串行总线,其上没有安全通信层,另一种在传统总线基础上结合本方法,实现了安全通信层。

      测试过程中,由于位错误率P很小会导致试验时间过长,故为尽快得到有效数据,实际测试中,在站点供电电源端口接入电快速瞬变脉冲群发生器,其开路输出电压设置为4 kV,脉冲重复频率设置为2.5 kHz,同时特意不对传输线路进行任何抗干扰保护,以提高P值。主站对一个由同步和异步命令构成的工件程序进行反复循环空跑约200 h,统计总通信位数Ball。从站将已通过自身校验的接收报文同预先存储的应接收报文进行比较,统计错误位数,累加得到没有被检测到的错误位数Bude。

    5 结论

      (1)提出了一种适合数控总线同步及异步通信的消息安全通信方法。

      (2)通过建立基于动态CRC校验的安全通信机制,解决了现有总线安全机制中连续传输多个相同数据包所带来的问题,同时也克服了发送端与接收端之间消息安全校验的依赖性。

      (3)在满足数控总线实时性要求的情况下,安全通信方法明显降低了通信过程中所产生的剩余错误率,同时也满足了消息安全完整性等级要求。

    </p<0.5,一般认为p=10-4较合理。因此,本方法中也采用0

    (审核编辑: 智汇胡妮)

    声明:除特别说明之外,新闻内容及图片均来自网络及各大主流媒体。版权归原作者所有。如认为内容侵权,请联系我们删除。