吳克河,陳鴻祥,李 為
(華北電力大學(xué)控制與計算機工程學(xué)院,北京 102206)
北斗衛(wèi)星導(dǎo)航系統(tǒng)是中國正在研究與完善的繼GPS和格洛納斯之后的精準的全球衛(wèi)星定位系統(tǒng)[1]。截止到目前已成功發(fā)射46顆北斗衛(wèi)星,預(yù)計至2020年底全面完成北斗三號系統(tǒng)建設(shè),全面建成后,北斗三號系統(tǒng)將實現(xiàn)全球短報文通信、國際搜救,以及覆蓋中國和周邊地區(qū)的星基增強和精密單點定位服務(wù)能力,空間信號精度將優(yōu)于0.5 m。北斗系統(tǒng)已廣泛應(yīng)用于車輛運輸、電力安全、農(nóng)林漁業(yè)、水文監(jiān)測等領(lǐng)域。我國已經(jīng)建成包括620萬輛營運車輛、3萬輛郵政和快遞車輛、2900余座海上導(dǎo)航設(shè)施在內(nèi)的車輛監(jiān)測管理系統(tǒng)[2]。對于北斗的廣泛應(yīng)用,在通信導(dǎo)航中通信安全極為重要,為此需要設(shè)計一種確保北斗數(shù)據(jù)安全傳輸?shù)陌踩珔f(xié)議。
此次采用的是SM9標識密碼非對稱加密算法,非對稱加密算法使用時通信雙方的密鑰都不一樣,密鑰便于管理,數(shù)據(jù)的保密性和數(shù)據(jù)的完整性得以保障。
國密算法因為其安全性和難以破解性,應(yīng)用于各個涉密行業(yè),其中SM1應(yīng)用于硬件級對稱加解密,SM2和SM9主要用于身份認證與密鑰協(xié)商認證和非對稱數(shù)據(jù)加密,2種算法中均用到了SM3雜湊算法。
1.1.1 SM2橢圓曲線非對稱算法
SM2為非對稱加密,基于ECC。該算法已公開。由于該算法基于ECC,故其簽名速度與密鑰生成速度都快于RSA[3-6]。
1.1.2 SM3雜湊算法
SM3是一種哈希算法,其算法本質(zhì)是給數(shù)據(jù)加一個固定長度的指紋,這個固定指紋長度為256 bit,用于密碼應(yīng)用中的數(shù)字簽名和驗證、消息認證碼的生成與驗證以及隨機數(shù)的生成[7-8]。
1.1.3 SM9標識密碼算法
SM9標識密碼將設(shè)備的標識作為公鑰,省略了交換數(shù)字證書和公鑰過程,使得安全系統(tǒng)變得易于部署和管理[9]。
北斗通信容量大小有限制,民用通信報文長度控制在78.5 Byte以內(nèi),即較長的數(shù)據(jù)包傳輸需要分包[10]。
北斗傳輸頻率為單卡每分鐘傳輸一次,在業(yè)務(wù)頻繁的情況下,一般采用多卡。
北斗系統(tǒng)最大的特色在于有源定位和全覆蓋通信服務(wù),有利于偏遠地區(qū)無4G信號地區(qū)的數(shù)據(jù)傳輸[11]。
密鑰協(xié)商和數(shù)據(jù)加密等過程的數(shù)據(jù)幀通用結(jié)構(gòu)如表1所示。
表1 數(shù)據(jù)幀通用格式
名稱長度/Byte說明報文類型1表示數(shù)據(jù)通信子類型1表示具體設(shè)備發(fā)送報文總長度1報文內(nèi)容總長度設(shè)備ID4設(shè)備的唯一標識校驗字節(jié)11對數(shù)據(jù)進行逐個字節(jié)異或操作結(jié)果,用于檢測解密后數(shù)據(jù)的驗證校驗字節(jié)21對加密數(shù)據(jù)進行逐個字節(jié)異或操作結(jié)果,用于檢測解密前數(shù)據(jù)的驗證數(shù)據(jù)長度1實際報文真實長度數(shù)據(jù)包類型1數(shù)據(jù)包類型(0:單包;1:分包1;2:分包2…)報文內(nèi)容n加密數(shù)據(jù)
由于北斗傳輸一幀有最大長度78 Byte限制[12],而加密算法用到的SM1報文最大長度要控制在64 Byte以內(nèi),且長度要為16的倍數(shù),不足部分就要進行填充,在業(yè)務(wù)報文傳輸過程中,發(fā)送方業(yè)務(wù)報文長度大于64 Byte時,就需要將業(yè)務(wù)報文進行分包處理,分包序號按分包1、分包2以此類推。由于北斗短報文通信缺少通信回執(zhí),發(fā)送頻率1分鐘一次,若采用TCP/IP傳輸模式設(shè)定重傳機制,必定會占用業(yè)務(wù)發(fā)送頻道導(dǎo)致業(yè)務(wù)發(fā)送出錯,所以本文采用北斗多卡機傳輸,每個數(shù)據(jù)包發(fā)送2次,最大程度保證數(shù)據(jù)的完整性,接收方根據(jù)報文總長度計算數(shù)據(jù)包的數(shù)量,只有接收到數(shù)據(jù)包類型從1到總數(shù)量的數(shù)據(jù)包才可進行組包并解密上傳解析,如圖1所示。
圖1 發(fā)送流程圖
安全通信協(xié)議主要有2個通信流程,分別是身份認證密鑰協(xié)商和加密通信流程。首先要確認北斗通信信號是否滿足正常使用強度,若滿足,雙方就進行相應(yīng)的身份識別和密鑰傳輸對換,雙方通過驗證簽名成功和密鑰對換得到通信的加密密鑰。如果在身份認證密鑰交換協(xié)商流程中出現(xiàn)不滿足條件的情況,此次協(xié)商流程應(yīng)該退出,整個安全通信協(xié)議的通信流程如圖2所示。
圖2 安全通信協(xié)議的通信流程
2.3.1 身份認證密鑰交換協(xié)商
該安全通信協(xié)議可以選擇雙方唯一設(shè)備標識密碼和由KGC產(chǎn)生的私鑰進行多次信息傳輸,生成一個雙方承認的安全密鑰。該安全密鑰可作為協(xié)商通過后的加密通信的加密密鑰[13-15]。以下步驟中圖和文字中出現(xiàn)的符號說明見表2。
表2 安全通信協(xié)議符號說明
符號說明KDF(Z,klen)生成會話密鑰Ks簽名主私鑰Ppub-s簽名主公鑰dsX設(shè)備X簽名私鑰Ke加密主私鑰Ppub-e加密主公鑰deX設(shè)備X加密私鑰IDX設(shè)備X的IDRx加法循環(huán)群中的元素SX(Y)用X對Y進行SM9算法的簽名運算EX(Y)9用X對Y進行SM9算法的加密運算EX(Y)1用X對Y進行SM1算法的加密運算
身份識別與密鑰交換協(xié)商的傳輸流程如圖3所示。
圖3 身份認證與密鑰協(xié)商
設(shè)設(shè)備A和B協(xié)商獲得密鑰數(shù)據(jù)的長度為klen比特,主動(發(fā)起)方為設(shè)備A,從動(響應(yīng))方為設(shè)備B[16]。要使設(shè)備A和設(shè)備B同步產(chǎn)生相同的會話密鑰。
密鑰交換協(xié)商步驟:
Step1對RA進行SM3算法的雜湊值計算,并將結(jié)果使用dsA作為簽名私鑰進行SM9算法的簽名運算,生成A=SdsA(H(RA)),將A發(fā)送到設(shè)備B。
Step2使用deA作為加密密鑰,通過SM9算法加密隨機數(shù)RA,生成B=EdeA(RA)9,將B發(fā)送到設(shè)備B。
Step3設(shè)備B對接收的數(shù)據(jù)A使用IDA進行SM9算法非對稱解密操作得到明文的隨機數(shù)RA并用B通過SM9算法的驗簽操作驗證設(shè)備A產(chǎn)生的隨機數(shù)RA和設(shè)備A的身份。之后設(shè)備B產(chǎn)生隨機數(shù)RB,對RB進行SM3算法的雜湊值計算[18],并將結(jié)果進行SM9算法的簽名運算,生成C=SdsB(H(RB)),將C發(fā)送到設(shè)備A。
Step4使用deB作為加密密鑰,通過SM9算法加密隨機數(shù)RB,生成D=EdeB(RB),將D發(fā)送到設(shè)備A。
Step5驗證RA屬于G1是否成立,若不成立則協(xié)商失?。蝗舫闪?,計算SKB=KDF(IDA‖IDB‖RA‖RB‖e(RA, deB)‖e(Ppub_e,P2)RA‖e(RA, deB)RA, klen),并將SKB發(fā)送給設(shè)備A。
Step6設(shè)備A對接收的數(shù)據(jù)B使用IDB進行SM9算法非對稱解密操作得到明文的隨機數(shù)RB并用D通過SM9算法的驗簽操作驗證設(shè)備B產(chǎn)生的隨機數(shù)RB和設(shè)備B的身份[19]。同時計算SKA=KDF(IDA‖IDB‖RA‖RB‖e(Ppub_e,P2)RB‖e(RB, deA)‖e(RB, deA)RB, klen),判斷SKA是否與SKB相同,如果相同,則發(fā)送SKA到設(shè)備B,否則協(xié)商失敗。
Step7設(shè)備B判斷SKB是否與SKA相同,若相同,則身份認證與密鑰協(xié)商完成。
密鑰協(xié)商過程完成后,設(shè)備A和設(shè)備B都識別了對方身份,并擁有相同的會話密鑰,后續(xù)的業(yè)務(wù)通信的加密密鑰就可以使用上述所得到的會話密鑰,相比于使用SM2完成協(xié)商認證,SM9不需要在通信中使用雙方證書的傳遞,減少非業(yè)務(wù)報文對北斗發(fā)送頻率的影響,大大提高北斗協(xié)商認證效率。
2.3.2 加密通信
由2.3.1節(jié)身份認證與密鑰協(xié)商得到會話密鑰SKA(SKB),之后業(yè)務(wù)通信使用SM1對稱加密算法,通過硬件級芯片對數(shù)據(jù)進行加密,加密流程如圖4所示。
圖4 加密流程
身份認證與密鑰協(xié)商生成會話密鑰后,加密流程分為3步:
Step1設(shè)備A將要發(fā)送的DATA_A檢查數(shù)據(jù)長度是否為16的倍數(shù),若不是將它的數(shù)據(jù)長度填充為16的倍數(shù),DATA_A使用SKA作為加密密鑰使用SM1加密,生成ESKA(DATA_A)1,加密成功后檢查數(shù)據(jù)長度是否大于64 Byte,如果是,則進行分包處理,并發(fā)送。如果不是,直接發(fā)送。
Step2設(shè)備B接收到設(shè)備A發(fā)來的數(shù)據(jù),先根據(jù)包類型判斷是否有分包,如果有分包,則等待所有包到達并組成原始數(shù)據(jù)幀格式,使用SM1進行解密,如果沒有,直接進行解密,并進行數(shù)據(jù)完整性校驗,如果失敗,則舍棄該數(shù)據(jù)并消除會話密鑰,要求重新協(xié)商。如果成功,設(shè)備B將要發(fā)送的DATA_B檢查數(shù)據(jù)長度是否為16的倍數(shù),若不是將它的數(shù)據(jù)長度填充為16的倍數(shù),DATA_B使用SKB作為加密密鑰使用SM1加密,生成ESKB(DATA_B)1,加密成功后檢查數(shù)據(jù)長度是否大于64 Byte,如果是,則進行分包處理,并發(fā)送。如果不是,直接發(fā)送。
Step3設(shè)備A接收到設(shè)備B發(fā)來的數(shù)據(jù),先根據(jù)包類型判斷是否有分包,如果有分包,則等待所有包到達并組成原始數(shù)據(jù)幀格式,使用SM1進行解密,如果沒有,直接進行解密,并進行數(shù)據(jù)完整性校驗,如果失敗,則舍棄該數(shù)據(jù)并消除會話密鑰,要求重新協(xié)商。如果成功,則整個加密流程成功。
在整個業(yè)務(wù)報文傳輸過程中一直重復(fù)以上3個步驟,保證設(shè)備A與設(shè)備B的北斗數(shù)據(jù)安全傳輸。
本文設(shè)計的為一種采用無證書型密鑰協(xié)商方式的安全通信協(xié)議,使用SM9標識密碼通過雙方唯一標識ID來實現(xiàn)通信雙方的雙向身份認證。
1)相比于用SM2完成協(xié)商認證,SM9不需要在通信中使用雙方證書的傳遞,減少非業(yè)務(wù)報文對北斗發(fā)送頻率的影響,大大提高北斗多模塊與網(wǎng)關(guān)之間協(xié)商認證效率。
2)擁有基于SM9標志密碼提供的強身份認證以及對等鑒別功能[20-25]。
3)利用SM3雜湊算法對數(shù)據(jù)進行處理,保證了數(shù)據(jù)的完整性。
4)數(shù)據(jù)通信采用SM1對稱加密算法在加密芯片上實現(xiàn)硬件級加密,保證數(shù)據(jù)的保密性。
5)采用分包機制保證傳輸數(shù)據(jù)的長度符合北斗傳輸?shù)囊?guī)定,最大程度地保證數(shù)據(jù)傳輸過程中的安全性。
本實驗應(yīng)用層的仿真在Linux 64位操作系統(tǒng)的CLion開發(fā)平臺下,采用C語言實現(xiàn)本文提出的基于SM9標識密碼的北斗安全傳輸協(xié)議。
該測試由于有分包以及身份認證和密鑰協(xié)商,對北斗頻率要求比較高,所以設(shè)備2側(cè)都采用北斗多卡機(4卡)來保證業(yè)務(wù)通信的正常。測試拓撲如圖5所示。
圖5 測試拓撲
模擬設(shè)備A與設(shè)備B通信協(xié)商分別如圖6和圖7所示。
圖6 設(shè)備A通信結(jié)果
圖7 設(shè)備B通信結(jié)果
設(shè)備A生成:
RA:(0x7C 0xBA 0x5B 0x19 0x06 0x9E 0xE6 0x6A 0xA7 0x9D 0x49 0x04 0x13 0xD1 0x18 0x46 0xB9 0xBA 0x76 0xDD 0x22 0x56 0x7F 0x80 0x9C 0xF2 0x3B 0x6D 0x96 0x4B 0xB2 0x65, 0xA9 0x76 0x0C 0x99 0xCB 0x6F 0x70 0x63 0x43 0xFE 0xD0 0x56 0x37 0x08 0x58 0x64 0x95 0x8D 0x6C 0x90 0x90 0x2A 0xBA 0x7D 0x40 0x5F 0xBE 0xDF 0x7B 0x78 0x15 0x99)
設(shè)備B生成:
RB:(0x86 0x1E 0x91 0x48 0x5F 0xB7 0x62 0x3D 0x27 0x94 0xF4 0x95 0x03 0x1A 0x35 0x59 0x8B 0x49 0x3B 0xD4 0x5B 0xE3 0x78 0x13 0xAB 0xC7 0x10 0xFC 0xC1 0xF3 0x44 0x820x32 0xD9 0x06 0xA4 0x69 0xEB 0xC1 0x21 0x6A 0x80 0x2A 0x70 0x52 0xD5 0x61 0x7C 0xD4 0x30 0xFB 0x56 0xFB 0xA7 0x29 0xD4 0x1D 0x9B 0xD6 0x68 0xE9 0xEB 0x96 0x00)
然后進行身份認證和密鑰協(xié)商,得到會話密鑰:
SKA=SKB=0xC5 0xC1 0x3A 0x8F 0x59 0xA9 0x7C 0xDE 0xAE 0x64 0xF1 0x6A 0x22 0x72 0xA9 0xE7
得到會話密鑰后,設(shè)備A的DATA_A,長度為126,進行分包(包1長度為64,包2長度為62),由于包2長度不滿64,在后面進行0x08 0x00的報文填充,并用SKA進行SM1加密發(fā)送。
設(shè)備B得到密文且得到分組的2個包,進行包重組并用SKB進行SM1解密,得到原始數(shù)據(jù)DATA_A。設(shè)備B的DATA_B長度為36,長度不滿64,進行報文填充,并用SKB進行SM1加密發(fā)送。
設(shè)備A得到密文,用SKA進行SM1解密,得到原始數(shù)據(jù)DATA_B。
北斗通信中通信頻次的考慮極為重要,此次采用北斗4卡機,頻次應(yīng)為15 s/次,在多終端應(yīng)用中,網(wǎng)關(guān)頻次占用過多,會導(dǎo)致一些終端長時間處于協(xié)商過程中,發(fā)生業(yè)務(wù)故障,該協(xié)議采用SM9標識密碼算法相較于采用SM2協(xié)商認證的北斗通信,每次協(xié)商過程中會減少2次各自證書的傳遞,大大減少了未認證終端的數(shù)量,在提高業(yè)務(wù)通信成功率的同時保證了數(shù)據(jù)安全完整。
本文主要介紹了國密算法,針對北斗通信的特點設(shè)計了一種安全可靠的加密通信協(xié)議,論述了SM9標識密碼算法在北斗安全通信中的優(yōu)勢,為北斗通信中多個設(shè)備協(xié)商認證、加密傳輸提供了安全可靠的思路,同時保證了業(yè)務(wù)報文信息的真實性和不可抵賴性。