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