卡斯柯信號有限公司 寧麗敏 季志均 許明旺
在一個安全系統(tǒng)中,系統(tǒng)對外通信的最大寬恕周期往往是通過配置文件配置的,而如果參數(shù)配置出錯,或者軟件在初始化時讀取配置文件出錯,或者運行過程中寬恕出錯,系統(tǒng)又缺乏檢測機制的話,有可能導致系統(tǒng)使用過時數(shù)據(jù),進而影響系統(tǒng)的安全性。因此本文提出了一種基于VSN的,對系統(tǒng)寬恕進行周期性檢測的方案。
對于一個安全系統(tǒng),通信是其重要的組成部分,而所有的通信系統(tǒng)都需要考慮寬恕周期的設(shè)定,一般系統(tǒng)的寬恕周期會在系統(tǒng)初始化階段通過配置文件進行配置,或者通信任務運行前系統(tǒng)通過默認值讀取,而系統(tǒng)運行過程中不會再對寬恕周期進行檢測。如果配置文件讀取錯誤或者系統(tǒng)軟件出現(xiàn)異常,可能導致系統(tǒng)使用過時數(shù)據(jù)。本文提出了一種基于VSN的實時寬恕周期檢測方案,能夠及時發(fā)現(xiàn)系統(tǒng)的寬恕處理異常,避免系統(tǒng)使用過時數(shù)據(jù)。
VSN為LFSR(線性反饋移位寄存器)生成的一系列偽隨機數(shù)。由n個觸發(fā)器構(gòu)成的LFSR可以產(chǎn)生2n-1個偽隨機數(shù)。以反饋多項式f(x)=x4+x+1為例,其對應的反饋移位寄存器如圖1所示:
圖1 反饋移位寄存器
假設(shè)a3,a2,a1,a0的初始值各自為1 0 0 0,那么得到的偽隨機序列如表1所示:
表1 偽隨機序列
可以看到經(jīng)過15個周期,a3,a2,a1,a0又回到了1 0 0 0,在這15個周期里,涵蓋了(0,24)內(nèi)的全部整數(shù),且非按順序出現(xiàn),具有很好的隨機性。
因系統(tǒng)需要兩個通道的32位偽隨機數(shù),故選取反饋多項式:
f1(x)每周期生成一個偽隨機數(shù)VSN1,f2(x)每周期生成一個偽隨機數(shù)VSN2,VSN1和VSN2是獨立且隨機的,VSN1和VSN2均需要經(jīng)過232-1個周期才能完成(0,232-1)內(nèi)所有整數(shù)的循環(huán)。故能滿足系統(tǒng)對于VSN隨機性的需求。
該方案的基本思路為,每個通信通道維護一個如表2所示的數(shù)組VSNARRAY[20][2](數(shù)組的行數(shù)為20的話,那么可以支持的最大寬恕周期為18)。
表1 用于填充VSN1和VSN2的二維數(shù)組VSNARRAY[20][2]
如果T0周期正常收到數(shù)據(jù),則將本周期的VSN1和VSN2分別存入VSNARRAY[0][0]和VSNARRAY[0][1](VSN1和VSN2為周期性更新的隨機數(shù)),同時將當前周期數(shù)據(jù)備份,備份數(shù)據(jù)的兩個CRC值亦或上VSN,CRC1亦或上VSN1,即LastData.CRC1=CurrentData.CRC1^VSN1(T0),CRC2亦或上VSN2,即LastData.CRC2=CurrentData.CRC2^VSN2(T0)。如果T1周期正常接收數(shù)據(jù),VSNARRAY[0][0]和VSNARRAY[0][1]會被清掉,重新存入T1周期的VSN值,同時按照T0周期備份數(shù)據(jù)的方法進行數(shù)據(jù)備份。如果T1周期沒有正常收到數(shù)據(jù)而是使用寬恕的數(shù)據(jù),在使用寬恕數(shù)據(jù)前,需要對數(shù)據(jù)的CRC做處理,即Data.CRC1=Data.CRC1^VSNARRAY[0][0],Data.CRC2=Data.CRC2^VSNARRAY[0][1],這樣便將T0周期亦或上的CRC消掉了,Data可以用于后續(xù)T1周期的運算。因T1周期未收到數(shù)據(jù),故將VSNARRAY[0][0],VSNARRAY[0][1]保留,同時將T1周期的VSN1和VSN2分別存入VSNARRAY[1][0],VSNARRAY[1][1],備份數(shù)據(jù)的CRC再亦或上T1周期的VSN,即LastData.CRC1=LastData.CRC1^VSN1(T1),LastData.CRC2=LastData.CRC2^VSN2(T1)。這樣在使用備份的數(shù)據(jù)做寬恕處理的時候,如果備份數(shù)據(jù)是過時數(shù)據(jù),用當前VSNARRAY數(shù)組中的VSN去消的話,則VSN消不掉導致數(shù)據(jù)的CRC錯誤,超時數(shù)據(jù)便不會被使用。如設(shè)置該通信接口的最大寬恕周期為5,則T0周期正常接收數(shù)據(jù),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被填充,因設(shè)定的最大寬恕周期為5,VSN1_7/VSN2_7應該為常量,不會被修改。超過最大寬恕周期則備份數(shù)據(jù)清0,VSNARRAY[0][0]~VSNARRAY[5][0],VSNARRAY[0][1]~VSNARRAY[5][1]清0。通過周期性檢查VSN1_7/VSN2_7的值,便可以檢測寬恕是否超過了最大寬恕周期。連續(xù)寬恕5個周期的處理情況如圖2所示:
圖2 連續(xù)寬恕5個周期的處理情況
如果由于某種錯誤,導致寬恕超過了預先設(shè)定的5個周期,如圖3所示,常數(shù)C被Tx周期的VSN改寫。系統(tǒng)軟件通過周期性檢查常數(shù)C,可以發(fā)現(xiàn)寬恕出錯的情況。
圖3 常數(shù)C被Tx周期的VSN改寫
以一個通信連接為例,其具體步驟描述如下:
●步驟一
選定一些常量值如下用于初始化VSNARRAY:
以及三個修正值常數(shù):
●步驟二
●步驟三
選定一個校驗值常數(shù)F為0xF949818,取預先設(shè)定的torlerate_M3,加上步驟二運算后的VSNARRAY[6][0],VSNARRAY[6][1],PD運算后得到變量M,常數(shù)F 0xF949818和中間變量M做PD逆運算,得到修正值R。
●步驟四
系統(tǒng)運行時周期性檢查VSNARRAY[6][0],VSNARRAY[6][1]的值。與步驟三相同方法,取torlerate_M3和VSNARRAY[6][0],VSNARRAY[6][1]的值,PD運算后得到變量M,M和步驟三中的修正值R做PD運算,如果系統(tǒng)正確寬恕VSNARRAY[6][0],VSNARRAY[6][1]不會被改寫,根據(jù)PD運算的有限狀態(tài)機原理,則PD運算后的值應為常數(shù)F 0xF949818,如果系統(tǒng)寬恕過程出錯,超過了預先設(shè)定的最大寬恕周期5,則VSNARRAY[6][0],VSNARRAY[6][1]會被改寫,PD運算出的值便不會是常數(shù)F。這樣將每周期檢查的結(jié)果與系統(tǒng)的安全檢測機制關(guān)聯(lián),便能在寬恕出錯時將系統(tǒng)導向安全側(cè)。
結(jié)束語:該方案通過軟件易于實現(xiàn)的方式,對于數(shù)據(jù)的寬恕處理做了安全改進,有效防護系統(tǒng)運行過程中的寬恕出錯。目前已在安全系統(tǒng)上實現(xiàn),通過實時監(jiān)測系統(tǒng)的寬恕處理,降低了系統(tǒng)使用過時的數(shù)據(jù)的風險,有效提高了系統(tǒng)的安全性。