卡斯柯信號有限公司 寧麗敏 季志均 許明旺
在一個安全系統中,系統對外通信的最大寬恕周期往往是通過配置文件配置的,而如果參數配置出錯,或者軟件在初始化時讀取配置文件出錯,或者運行過程中寬恕出錯,系統又缺乏檢測機制的話,有可能導致系統使用過時數據,進而影響系統的安全性。因此本文提出了一種基于VSN的,對系統寬恕進行周期性檢測的方案。
對于一個安全系統,通信是其重要的組成部分,而所有的通信系統都需要考慮寬恕周期的設定,一般系統的寬恕周期會在系統初始化階段通過配置文件進行配置,或者通信任務運行前系統通過默認值讀取,而系統運行過程中不會再對寬恕周期進行檢測。如果配置文件讀取錯誤或者系統軟件出現異常,可能導致系統使用過時數據。本文提出了一種基于VSN的實時寬恕周期檢測方案,能夠及時發現系統的寬恕處理異常,避免系統使用過時數據。
VSN為LFSR(線性反饋移位寄存器)生成的一系列偽隨機數。由n個觸發器構成的LFSR可以產生2n-1個偽隨機數。以反饋多項式f(x)=x4+x+1為例,其對應的反饋移位寄存器如圖1所示:

圖1 反饋移位寄存器
假設a3,a2,a1,a0的初始值各自為1 0 0 0,那么得到的偽隨機序列如表1所示:

表1 偽隨機序列
可以看到經過15個周期,a3,a2,a1,a0又回到了1 0 0 0,在這15個周期里,涵蓋了(0,24)內的全部整數,且非按順序出現,具有很好的隨機性。
因系統需要兩個通道的32位偽隨機數,故選取反饋多項式:

f1(x)每周期生成一個偽隨機數VSN1,f2(x)每周期生成一個偽隨機數VSN2,VSN1和VSN2是獨立且隨機的,VSN1和VSN2均需要經過232-1個周期才能完成(0,232-1)內所有整數的循環。故能滿足系統對于VSN隨機性的需求。
該方案的基本思路為,每個通信通道維護一個如表2所示的數組VSNARRAY[20][2](數組的行數為20的話,那么可以支持的最大寬恕周期為18)。

表1 用于填充VSN1和VSN2的二維數組VSNARRAY[20][2]
如果T0周期正常收到數據,則將本周期的VSN1和VSN2分別存入VSNARRAY[0][0]和VSNARRAY[0][1](VSN1和VSN2為周期性更新的隨機數),同時將當前周期數據備份,備份數據的兩個CRC值亦或上VSN,CRC1亦或上VSN1,即LastData.CRC1=CurrentData.CRC1^VSN1(T0),CRC2亦或上VSN2,即LastData.CRC2=CurrentData.CRC2^VSN2(T0)。如果T1周期正常接收數據,VSNARRAY[0][0]和VSNARRAY[0][1]會被清掉,重新存入T1周期的VSN值,同時按照T0周期備份數據的方法進行數據備份。如果T1周期沒有正常收到數據而是使用寬恕的數據,在使用寬恕數據前,需要對數據的CRC做處理,即Data.CRC1=Data.CRC1^VSNARRAY[0][0],Data.CRC2=Data.CRC2^VSNARRAY[0][1],這樣便將T0周期亦或上的CRC消掉了,Data可以用于后續T1周期的運算。因T1周期未收到數據,故將VSNARRAY[0][0],VSNARRAY[0][1]保留,同時將T1周期的VSN1和VSN2分別存入VSNARRAY[1][0],VSNARRAY[1][1],備份數據的CRC再亦或上T1周期的VSN,即LastData.CRC1=LastData.CRC1^VSN1(T1),LastData.CRC2=LastData.CRC2^VSN2(T1)。這樣在使用備份的數據做寬恕處理的時候,如果備份數據是過時數據,用當前VSNARRAY數組中的VSN去消的話,則VSN消不掉導致數據的CRC錯誤,超時數據便不會被使用。如設置該通信接口的最大寬恕周期為5,則T0周期正常接收數據,VSN1_1/VSN2_1被填充,如T1周期寬恕,VSN1_2/VSN2_2被填充,T2周期寬恕VSN1_3/VSN2_3被填充,T3周期寬恕VSN1_4/VSN2_4被填充,T4周期寬恕VSN1_5/VSN2_5被填充,T5周期寬恕VSN1_6/VSN2_6被填充,因設定的最大寬恕周期為5,VSN1_7/VSN2_7應該為常量,不會被修改。超過最大寬恕周期則備份數據清0,VSNARRAY[0][0]~VSNARRAY[5][0],VSNARRAY[0][1]~VSNARRAY[5][1]清0。通過周期性檢查VSN1_7/VSN2_7的值,便可以檢測寬恕是否超過了最大寬恕周期。連續寬恕5個周期的處理情況如圖2所示:

圖2 連續寬恕5個周期的處理情況
如果由于某種錯誤,導致寬恕超過了預先設定的5個周期,如圖3所示,常數C被Tx周期的VSN改寫。系統軟件通過周期性檢查常數C,可以發現寬恕出錯的情況。

圖3 常數C被Tx周期的VSN改寫
以一個通信連接為例,其具體步驟描述如下:
●步驟一
選定一些常量值如下用于初始化VSNARRAY:


以及三個修正值常數:

●步驟二

●步驟三
選定一個校驗值常數F為0xF949818,取預先設定的torlerate_M3,加上步驟二運算后的VSNARRAY[6][0],VSNARRAY[6][1],PD運算后得到變量M,常數F 0xF949818和中間變量M做PD逆運算,得到修正值R。
●步驟四
系統運行時周期性檢查VSNARRAY[6][0],VSNARRAY[6][1]的值。與步驟三相同方法,取torlerate_M3和VSNARRAY[6][0],VSNARRAY[6][1]的值,PD運算后得到變量M,M和步驟三中的修正值R做PD運算,如果系統正確寬恕VSNARRAY[6][0],VSNARRAY[6][1]不會被改寫,根據PD運算的有限狀態機原理,則PD運算后的值應為常數F 0xF949818,如果系統寬恕過程出錯,超過了預先設定的最大寬恕周期5,則VSNARRAY[6][0],VSNARRAY[6][1]會被改寫,PD運算出的值便不會是常數F。這樣將每周期檢查的結果與系統的安全檢測機制關聯,便能在寬恕出錯時將系統導向安全側。
結束語:該方案通過軟件易于實現的方式,對于數據的寬恕處理做了安全改進,有效防護系統運行過程中的寬恕出錯。目前已在安全系統上實現,通過實時監測系統的寬恕處理,降低了系統使用過時的數據的風險,有效提高了系統的安全性。