赵 鹏
(中车青岛四方车辆研究所有限公司 信号项目组,青岛 266031)
城市轨道交通的快速发展极大地促进了基于通信的列车运行控制(CBTC)信号系统的发展,并对网络通信安全提出更高要求。为了实现网络化运营,减少重复投资,提高运营效率,互联互通已经成为城市轨道交通新的发展方向。然而,信号系统设备供应商较多,不同供应商的设备之间没有统一接口标准。为实现互联互通,迫切需要统一设备间的通信接口和协议[1-3]。
《 城市轨道交通基于通信的列车运行控制系统(CBTC)互联互通系统规范》对设备间接口给出了统一规定。其中,安全设备之间的安全通信采用铁路信号安全协议(RSSP),并规定联锁设备之间及轨旁设备之间采用适用于封闭式网络环境的RSSP-I 铁路专用安全通信协议[4]。
结合互联互通联锁系统的开发,对RSSP-I 铁路信号安全协议进行研究,重点分析安全通信协议所采用的安全措施及软件设计方法;基于Visual Studio 2012 开发工具,采用C++语言实现RSSP-I 测试软件,以验证协议设计方法的实用性和有效性。
RSSP-I 安全协议定义了安全层之间的通信规范;安全层与应用层、安全层与传输层之间的接口为软件内部接口[5]。基于以太网的RSSP-I 安全通信系统协议层次结构如图1 所示,传输层基于UDP 协议,可以确保较高的实时性;安全层采用RSSP-I 安全协议。
RSSP-I 安全报文(即安全功能层对应的报文)由用户数据包、安全校验域、报文头和报文尾CRC16 构成,报文结构如图2 所示。
RSSP-I 安全通信系统发送方设备对用户数据包进行安全编码,添加安全校验域以及报文头;同时,根据报文头、安全校验域、用户数据包生成CRC16,添加到报文尾。RSSP-I 报文经过通信功能层的处理后,传输给接收端设备,接收端设备对RSSP-I 报文进行安全校验;安全校验通过后,将报文解码,以获取应用数据。
图1 RSSP-I安全通信系统协议层次结构
图2 RSSP-I报文结构
GB/T24339.2 将封闭式网络中的通信威胁定义为6 个类别:重复、丢失、插入、错序、错码、延迟。
RSSP-I 采取6 种具体的安全防护技术应对这些威胁,威胁类别与安全防护技术的对应关系见表1。其中,序列号与时间戳是关键的安全防护技术,同时采用反馈报文、双重冗余校验两种安全防护技术;源标识用以确保数据来源的真实;利用序列号,可实现对报文超时的检测;双重冗余校验中包含32 bit循环冗余校验(CRC32)。
线性反馈移位寄存器(LFSR)是RSSP-I 安全协议编码的数学工具,是RSSP-I 安全协议的理论基础之一[6]。RSSP-I 安全协议使用两种线性反馈移位寄存器算法:左移位运算(<~)和右移位运算(~>)。
LFSR 左移位算法描述如下:设定A=B<~C,32 bit 寄存器为Val,多项式为常量Cons;将寄存器Val 初始值设定为B;将寄存器l 的值更新为B^C;将寄存器值左移1 bit,寄存器值溢出前最高比特位为1 时,将寄存器当前值与多项式常量Cons 进行异或操作,并更新寄存器当前值;当前操作执行32 次后,寄存器当前值即为A。
右移位运算可同理得出。
表1 威胁类别与对应的安全防护技术
序列号采用系统软件内部周期序号,为32 bit 长的顺序编号,既作为系统发送报文时的序号,也用于超时检测的时间判定。
RSSP-I 中时间戳随序列号的递增循环生成,是与序列号相关联的伪随机数。依据通信周期,利用LFSR 生成时间戳,双通道的时间戳相互独立。时间戳的计算公式为:
其中,N为通信周期,T(N) 为本次时间戳,T(N-1) 为上次时间戳,T(0) 为预先设定常量值。RSSP-I 通信系统的接收方需要同时校验序列号和时间戳的有效性;任一校验不通过,则安全校验不通过。
RSSP-I 安全报文中的安全校验域包含序列号和双通道安全校验码(SVC),两个通道SVC 相互独立。
SVC 包含标识发送方对象的源标识(SID)、发送方时间戳T(N)、安全数据的CRC32 校验码,以及用以确保安全层协议正确性的系统校验字(SCW)。双通道校验独立进行,且校验必须全部正确[7]。
通过序列号与时间戳的相互关联,以及双通道的冗余校验,可以确保数据传输的真实性、完整性、实时性和有序性。
RSSP-I 安全协议采用接收端的安全保护算法,即接收端要对所接收的安全数据进行实时安全校验,若校验不通过则进行时序校正。RSSP-I 安全通信报文分为周期性传输报文和事件传输报文[8],报文交互过程如图3 所示。实时安全数据(RSD)报文按周期发送,通信设备可以相互发送RSD 报文,也可以单方设备发送。当发生时序接收错误时,接收端向发送端发送时序校正请求(SSE)报文;发送端对来自接收端的时序校正请求报文进行答复,发送时序校正答复(SSR)报文。
图3 RSSP-I安全通信系统报文交互过程
安全数据单向传输时,只在接收端进行安全校验及时序校正;安全数据双向传输时,两个通信端分别独立进行安全校验及时序校正[9]。
在RSSP-I 安全通信系统中,安全数据发送端设备需要对安全数据进行安全编码。RSD 报文安全编码的重点是生成安全校验域,计算流程如图4 所示。
图4 RSD报文安全校验域的计算流程
(1)要计算RSD 报文中安全应用数据的CRC32校验码;(2)计算当前的时间戳T(N);(3)利用式(2)计算SVC,其中,SID 和SCW 均为预先设置的32 bit 常量参数;(4)添加序列号以及安全数据的长度,完成RSD 安全报文中安全校验域的编码。
RSD 安全报文的报文头包含协议类别标识及报文类型,报文类型用于区分主从系报文;最后生成CRC16 校验码,添加至报文尾部,完成RSD 安全报文的编码。
RSSP-I 安全通信系统的接收端设备接收到RSD报文时,先对报文进行校验;若校验失败,则丢弃该报文。只有校验通过,才可以使用安全应用数据。校验流程见图5 所示。
图5 安全数据报文校验流程
进行CRC16 校验,若校验成功则进行报文头校验;报文头校验主要对报文头的内容进行一致性检查,确定数据与规定值相符。序列号校验与SVC 校验均为安全校验,任一校验不通过都要进行时序校正。
3.3.1 序列号校验
序列号不仅用于安全报文的顺序校验,以消除乱序的威胁,还可以用于判断数据延迟、重复或者数据丢失。
RSD 序列号校验流程如图6 所示。其中,Nseq为序列预容忍差值,需提前设置好,该值与安全通信系统中安全应用数据发送方设备的系统通信周期有关;M 为最近一次有效的序列号;N 为当前报文的序列号。
当最近一次有效序列号大于本次接收序列号,或本次接收的序列号与最近一次有效序列号的差值大于预容忍差值时,序列号校验不通过,丢弃本报文的安全数据。当校验通过时,将当前报文的序列号作为最近一次有效接收序列号,用于校验下一个通信周期的数据序列号。
图6 序列号校验流程
3.3.2 SVC校验
SVC 校验是RSSP-I 安全通信系统中最重要的安全校验,主要利用时间戳进行连续的校验,但校验结果值与时间戳无关,仅与节点参数相关;同时,源标示符隐藏在时间戳中,通过SVC 校验可确保数据的安全传输。接收端设备对RSD 报文的SVC 校验流程见图7 所示。
(1)计算安全应用数据的CRC32 校验码,使用报文安全校验域中SVC 值计算SID^T(N),时序更新检查值为本地保存、实时更新的变量,其中,序列初始值(SINIT)为预先设置的32 bit 位常量值,按每个通道分别独立设置;(2)计算安全校验判定值Last<~[SID^T(N)];(3)判定式(3)是否成立,双通道的校验分别独立进行[10]。
算式右边T(N)依赖于T(N-1),以确保验证过程的连续性;时间戳初始值T(0)一般设定为SID;算式左边结果值是一个仅与节点参数相关的常量。
若双通道判定式(3)均成立,则安全校验通过,可以将安全应用数据传输至应用层供其使用,同时更新安全校验判定Last 值;若任一通道的判定不成立,则校验失败,需要进行时序校正。
式(3)还可以用于检测传输延迟、报文丢失。若数据延迟M个周期,式(3)左边执行(M-1)个“<~SID”运算,右边Last 值先需要执行(M-1)个“<~0”运算,然后再执行相关计算判定。
图7 SVC校验流程
3.4.1 时序校正报文的交互及校验
RSD 报文时序校验及任一SVC 校验未通过,或者通信刚建立时,均需要进行时序校正。时序校正请求方发送SSE 报文,通信对端设备收到SSE 报文后,作为时序应答方回复SSR 报文;请求方收到SSR 报文后,需要进行安全校验,其校验流程见图8 所示。
SSE 等待有效时间的检测通过序列号实现,时间参数预先设置好。若收到SSR 报文时,已超出SSE 报文等待有效时间,则本次收到的SSR 报文无效,丢弃该数据;若本次校正失败,重新进行下一次时序校正。
图8 SSR校验流程
3.4.2 时序校正的判定
时序请求方收到SSR 报文且校验通过后,需判定时序是否正确,通过式(4)确定;其中,Res 为常量SINITr<~SIDr<~SIDr, SINITr、SIDr 为时序请求方的参数,DATAVERer 是预先设置的常量参数;时序校正参数precSinit 需要离线计算,与请求方和应答方的节点参数有关。
若等式(4)成立,时序校正完成,更新安全校验判定Last 值。
RSSP-I 安全协议测试软件基于Visual Studio 2012 开发平台,采用C++语言实现,软件功能框图见图9 所示。
图9 RSSP-I测试软件功能
软件功能主要包括通信、数据显示与存储及安全服务。通信功能基于Windows Socket,实现报文的发送和接收,其中,传输层采用UDP 协议,报文发送和接收采用多线程实现机制[9]。数据显示与存储功能主要包括通信状态显示、报文通信状态的实时显示,以及通信数据和日志的保存。安全服务功能是测试软件的主体部分;其中,通用算法模块包含CRC16、CRC32 和时间戳的生成,可供其它程序模块随时调用;安全解码/编码主要针对RSD 报文;时序校正包括对SSE 和SSR 报文的编码、验证、解码及时序判定。
RSSP-I 安全协议配置参数及网络配置参数均采用配置文件的形式,便于修改和测试。
程序主界面见图10 所示。其中,发送数据窗口显示用户数据,可通过配置文件读取;数据接收窗口用于显示接收到的报文及通过安全校验的报文数据,数据可实时保存;日志信息窗口实时显示当前RSSP-I 安全通信系统的通信状态。
图10 测试软件主界面
所开发的RSSP-I 测试软件实用性较好,易于调试协议,满足互联互通联锁设备安全通信的要求,验证了协议设计的有效性,有助于提高嵌入式平台上RSSP-I 安全协议开发和测试的效率。