基于Modbus協(xié)議的數(shù)據(jù)并行加密通信方法和系統(tǒng)的制作方法
【技術(shù)領域】
[0001]本發(fā)明屬于工業(yè)監(jiān)控領域,涉及數(shù)據(jù)加解密并行處理,特別涉及一種基于Modbus 協(xié)議的數(shù)據(jù)并行加密通信方法和系統(tǒng)。
【背景技術(shù)】
[0002] 隨著物聯(lián)網(wǎng)的發(fā)展,將不同廠商生產(chǎn)的設備連成工業(yè)網(wǎng)絡,進行集中數(shù)據(jù)監(jiān)控的 需求日益增長,并且對工業(yè)網(wǎng)絡傳輸?shù)膶崟r性要求也日益提升。
[0003] Modbus總線協(xié)議由于其協(xié)議開放、實施簡便、可靠性高的特點,已經(jīng)成為一種工業(yè) 標準,也得到了各設備廠商的產(chǎn)品支持。Modbus通信采用主從通信方式,主站發(fā)出數(shù)據(jù)請求 信息,從站接收到正確的消息后就可以發(fā)送數(shù)據(jù)到主站以響應請求;主站也可以直接發(fā)消 息修改從站的數(shù)據(jù),實現(xiàn)雙向讀寫。目前工業(yè)中常用的Modbus通信方式是通過以太網(wǎng)結(jié)合 TCP/IP協(xié)議組成Modbus TCP/IP網(wǎng)絡進行通信。然而,當設備數(shù)據(jù)監(jiān)控系統(tǒng)與互聯(lián)網(wǎng)相結(jié)合 時,由于互聯(lián)網(wǎng)的開放性,一旦監(jiān)控數(shù)據(jù)被截獲并被加以用進行破壞活動,其帶來的損失是 非常嚴重的。因而,對傳輸?shù)谋O(jiān)控信息進行加密,同時又保證監(jiān)控數(shù)據(jù)傳輸?shù)膶崟r性是非常 重要的。
[0004] SM4(原SMS4)是國家密碼局公布的分組密碼算法,其分組長度和密鑰長度均為 128bit。加解密算法都采用32輪非線性迭代結(jié)構(gòu)。算法的加密變換主要包含異或運算和合 成變換T( ·)運算。其中,T( ·)是由非線性變換τ和線性變換L復合而成,即T( · )=L(t (·))。非線性變換τ由4個并行的S盒變換構(gòu)成,S盒是固定8比特輸入8比特輸出的變換;線 性變換L主要包含異或運算和左移運算。解密算法與加密算法的結(jié)構(gòu)相同,只是輪密鑰的使 用順序相反,即解密算法使用的輪密鑰是加密算法使用的輪密鑰的逆序。加密算法中用到 的輪密鑰是由加密密鑰MK通過輪密鑰擴展算法生成。該擴展算法基本結(jié)構(gòu)與加解密算法相 同,同樣包含異或運算和合成置換運算。只是其中的線性變換的形式略有不同。由于SM4算 法在計算過程中增加非線性變換,理論上具有較高的安全性。
[0005] 雖然利用SM4加密算法可以確保Modbus數(shù)據(jù)一定的安全。但是,由于SM4加密算法 的公開性,輪密鑰生成算法與加密算法結(jié)構(gòu)相似,都導致其安全性降低。因此,如何提高 Modbus數(shù)據(jù)在用SM4加密時的安全性成為一個亟待解決的問題。另外,在數(shù)據(jù)量較大的情況 下,使用SM4串行加密的耗時成為了實時傳輸?shù)钠款i。而隨著機構(gòu)規(guī)模的擴大,設備的增加, 勢必會增加采集的數(shù)據(jù)量,如何高效便捷的對設備配置信息進行動態(tài)管理和提高工業(yè)數(shù)據(jù) 動態(tài)采集傳輸過程中的實時性也是需要解決的問題。最后,在采集數(shù)據(jù)的過程中,采集系統(tǒng) 與設備的連接有可能出現(xiàn)斷開現(xiàn)象,如何在連接斷開的時候進行斷線重連也是一個需要解 決的問題。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明所要解決的面向工業(yè)數(shù)據(jù)采集傳輸過程中所存在的安全性和實時性的問 題,提供一種基于Modbus協(xié)議的數(shù)據(jù)并行加密通信方法和系統(tǒng)。
[0007] 為解決上述問題,本發(fā)明是通過以下技術(shù)方案實現(xiàn)的:
[0008] 基于Modbus協(xié)議的數(shù)據(jù)并行加密通信方法,包括如下步驟:
[0009] 步驟1、配置應用程序,即根據(jù)數(shù)據(jù)采集站點的實際需求,產(chǎn)生配置信息表;
[0010]步驟2、根據(jù)配置信息表里的信息對數(shù)據(jù)采集站點的設備運行信息進行采集,所采 集到的數(shù)據(jù)為明文數(shù)據(jù);
[0011] 步驟3、利用基于GPU的動態(tài)選擇的改進SM4并行加密法對采集到的明文數(shù)據(jù)進行 加密;即
[0012] 步驟3.1、利用AES-128密鑰擴展法生成SM4加密法所需的32個擴展密鑰;
[0013]步驟3.2、隨機生成1個32位的隨機數(shù)G;
[0014]步驟3.3、利用GPU進行并行SM4加密,即將明文數(shù)據(jù)分成每塊128比特的數(shù)據(jù)分組, 一個數(shù)據(jù)分組的加密任務分配給一個的GHJ線程;每個GPU線程再進行32輪循環(huán)迭代加密處 理,在每輪循環(huán)迭代加密處理時,根據(jù)迭代的輪數(shù)確定隨機數(shù)G的對應位置,并根據(jù)隨機數(shù)G 的該位置上的取值選取加密輪函數(shù);
[0015] 步驟3.4、將各個GPU線程加密輸出的數(shù)據(jù)按分塊的前后順序進行組合后形成密文 數(shù)據(jù);
[0016] 步驟4、將數(shù)據(jù)采集站點的密文數(shù)據(jù)發(fā)送給中心監(jiān)控系統(tǒng);
[0017] 步驟5、中心監(jiān)控系統(tǒng)接收到數(shù)據(jù)采集站點發(fā)送的密文數(shù)據(jù);
[0018] 步驟6、利用基于GPU的動態(tài)選擇的改進SM4并行解密法對密文數(shù)據(jù)進行解密;即 [0019]步驟6.1、利用GPU進行并行SM4解密,即將密文數(shù)據(jù)分成每塊128比特的數(shù)據(jù)分組, 每個GPU線程解密一個數(shù)據(jù)分組;每個GPU線程再進行32輪循環(huán)迭代解密處理,在進行32輪 循環(huán)迭代解密處理時,根據(jù)隨機數(shù)G對應位置上的取值,動態(tài)選擇解密的輪函數(shù);
[0020]步驟6.2、將各個GPU線程解密輸出的數(shù)據(jù)按分塊的前后順序進行組合后獲得明文 數(shù)據(jù);
[0021 ]步驟7、將解密所得的明文數(shù)據(jù)進行顯示,以獲得數(shù)據(jù)采集站點的設備運行信息。
[0022] 步驟3.1中,擴展密鑰只需要產(chǎn)生一次,該擴展密鑰在各個GPU線程加密過程中循 環(huán)使用。
[0023] 步驟3.1中所述密鑰擴展的具體過程為:
[0024] 步驟3.1. 1、將128bit的初始密鑰按照列順序組成4個32bit的字,分別記為WQ-W3;
[0025] 步驟3.1.2、在初始密鑰的基礎上依次新增31個字Wj,每一個新增的字Wj的值依賴 于Wj-1 和Wj-4,即:
[0026] 當j除以4的余數(shù)不為0時,Wj=Wj-4 Wj-1;
[0027] 當 j除以4的余數(shù)為0時,Wj=Wj-4? g(wj-i);
[0028] 步驟3.1.3、利用上述產(chǎn)生的字生成SM4加密算法中用到的擴展密鑰,即擴展密鑰 rki=wj+4;
[0029] 上述j = 4,5,6......35; 4 = 0,1,".,31$〇是一個復雜函數(shù)。
[0030] 步驟3.1.2中,復雜函數(shù)g()的計算過程如下:
[0031]步驟3.1.2.1、將字%-1以字節(jié)為單位,排列表示成[80,81,8 2,83]的形式,并將[80, Bi,B2,B3 ]循環(huán)左移一個字節(jié),變換成[Bi,B2,B3,Bo];
[0032]步驟3.1.2.2、利用AES的S盒對輸入字的每個字節(jié)進行字節(jié)替換,變?yōu)閇B'^B'2, B,3,B,o];
[0033] 步驟3.1.2.3、將產(chǎn)生的結(jié)果[8'1,8'2,8'3,8'0]與輪常數(shù)進行異或輸出;
[0034] 上述j = 4,5,6……35。
[0035] 步驟3中,根據(jù)迭代的輪數(shù)確定隨機數(shù)G對應位置,該隨機數(shù)G的每一位作為每一輪 迭代時動態(tài)選擇的依據(jù),即:
[0036] 當隨機數(shù)G的對應的位置的數(shù)值為0時,選擇使用AiMzFUiXi+^Xi+^Xwkih Xi ? T(Xi+1 ? Xi+2 ? Xi+3 ? rki)作為輪函數(shù);
[0037] 當隨機數(shù)G的對應的位置的數(shù)值為1時,選擇使用:Χ?+4 = Ρ(Χ?,Χ?+1,Χ?+2,Χ?+3,Γ1α) = Xi ? T(Xi+1+Xi+2+Xi+3 ? rki)作為輪函數(shù);
[0038] 其中,Xi-Xm表示第i輪輸入的明文數(shù)據(jù),F(xiàn)〇表示輪函數(shù),T〇表示合成變換函數(shù), rki表示第i輪使用的擴展密鑰,i = 0,1,…,31。
[0039] 步驟3.3中,每個GPU線程進行加密處理的過程為:
[0040] 步驟3.3.1、根據(jù)本次迭代次數(shù),確定隨機數(shù)G的對應位置,并根據(jù)該位置上的明文 數(shù)據(jù)的數(shù)值選取輪函數(shù);即當隨機數(shù)G的對應的位置的明文數(shù)據(jù)的值為0時,計算X 1+1?X1+2 ? Xi+3 ? rki;當隨機數(shù)G的對應的位置的明文數(shù)據(jù)的值為1時,計算Xi+1+Xi+2+Xi+3 θ rki;并將 計算結(jié)果按照字節(jié)順序排列保存為數(shù)據(jù)塊Α=(&〇,&1, &2,&3);
[0041] 步驟3.3.2、利用AES的S盒對上一步的數(shù)據(jù)塊A=(a(),al,a2,a3)進行字節(jié)替換,輸 出按字節(jié)順序保存為數(shù)據(jù)塊B = (bo,bi,b2,b3),即(bo,bi,b2,b3) = τ(Α) = (Sbox(ao),Sbox (ai),Sbox(a2),Sbox(a3));
[0042] 步驟3.3.3、將上一步的B進行線性變換,輸出保存為數(shù)據(jù)塊C,則:C = L(B) = (B〈〈〈 0)? (B〈〈〈2)? (B〈〈〈10)? (B〈〈〈18)? (B〈〈〈24)
[0043] 步驟3.3.4、將上一步生成的數(shù)據(jù)塊C和本次的輸入明文數(shù)據(jù)進行異或運算,計算 Xi+4 = Xi ? (:4+1義+2義+3義+4作為下一次輪循環(huán)的輸入;
[0044] 步驟3.3.5、重復上述3.3.1~3.3.4的操作,將上一輪移位后數(shù)據(jù)作為新一輪輸 入,重復32次;經(jīng)過32循環(huán)迭代加密后,輸出密文數(shù)據(jù)為(Y〇,h,Y 2,Y3) = (X35,X34,X33,X32);
[0045] 式中,Xi-Xi+3表示第i輪輸入的明文數(shù)據(jù),τ ()表示置換變換函數(shù),Sbox ()為S盒變 換函數(shù),L〇表示線性變換函數(shù),riu表示第i輪使用的擴展密鑰。
[0046] 步驟3.3和步驟6.1中,當數(shù)據(jù)分組的組數(shù)達