为此,EtherCat Safety安全协议提出了一种解决方法,也在安全通信层中为待发送的数据包提供CRC校验,不同之处在于:CRC校验值根据安全数据本身和一新加起始值一起计算产生,该起始值是接收到的上一个数据包的CRC校验值。这种机制能保证持续动态的生成CRC校验值,可解决传统CRC校验中由于连续多个相同数据包产生相同CRC校验值的问题。但是EtherCat Safety这种消息安全通信机制也存在一个问题,即发送端和接收端的CRC起始值存在依赖关系。每次发送端要发送新数据包时,必须等待上一个接收到的数据包的CRC值,经计算产生新的CRC值后方能发送该新数据包。这意味着需要等待接收到上一个数据包后方可发送下一个数据包,这会降低通信的实时性,特别是像基于总线的数控系统这种强实时通信的系统。
1.2数控总线安全需求
数控总线作为一种面向特殊领域应用的工业通信网络,要求总线满足周期性、实时性、同步性、可靠性及安全性等要求。总线通信协议由物理层、数据链路层、应用层与用户层行规组成。用户层行规里定义了两种命令,异步命令和同步命令。异步命令用于数控系统的定位及快移等操作,同步命令则用于数控系统的多轴联动插补操作。因此,两种不同的需求要求数控总线要同时支持异步及同步消息通信。异步通信是当发送端有控制需求时向接收端发送新消息,在发送新消息时发送端需确认所发送的上一条消息的反馈己经回来。同步通信则要求发送端在每个通信周期到来时,都要向接收端发送下一条新消息,不用考虑发送端所发送的上一条消息的反馈是否己经回来,不能等待,每个周期到来时都须发送新消息。
2 数控总线消息安全方法
针对数控总线通信的特殊需求,安全性需考虑如何保证数控总线在进行异步及同步通信时消息安全问题,主要是同步通信机制下消息的安全性。本文解决的思路主要基于两点:一是要求能够持续动态的生成CRC校验值以保证每条消息能使用新的CRC校验值:二是要求能使发送端和接收端校验方式互不相关以保证同步通信。
基于上述考虑,针对消息通信过程中可能出现的重复、删除、插入、破坏及伪装等错误,在尽量降低算法复杂度的前提下,本文提出在应用层之上采取状态位控制、会话号、序列编号以及新的动态CRC安全校验等措施构建安全通信层,以保证消息的安全通信。表2所示为本文所设计的消息安全保护措施。
表2 数控总线消息安全保护措施
图3所示为本文所设计的数控总线安全报文,其中,安全数据属于数据域,状态位、会话号、序列号以及动态CRC属于控制域。
图3 数控总线安全报文
(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值进行校验,图4详细描述了利用动态CRC进行消息安全通信的整个过程。
图4 数控总线消息安全通信机制