基于gpu的改進sm4并行加解密通信方法
【技術領域】
[0001] 本發(fā)明信息安全技術領域,具體設及一種基于GPU的改進SM4并行加解密通信方 法。
【背景技術】
[0002] 隨著物聯(lián)網的發(fā)展,越來越多的企業(yè)需要將生產及運營的設備接入網絡并對其進 行遠程實時監(jiān)控,大量的設備監(jiān)控數(shù)據(jù)往往需要通過互聯(lián)網傳輸?shù)竭h處的監(jiān)控中屯、。但是, 由于互聯(lián)網的開放性,一旦監(jiān)控數(shù)據(jù)被截獲并被加 W用進行破壞活動,其帶來的損失是非 常嚴重的。因而,對傳輸?shù)谋O(jiān)控信息進行加密,同時又保證監(jiān)控數(shù)據(jù)傳輸?shù)膶崟r性是非常重 要的。
[0003] SM4(原SMS4)是國家密碼局公布的分組密碼算法,其分組長度和密鑰長度均為 128bit。加解密算法都采用32輪非線性迭代結構。算法的加密變換主要包含異或運算和合 成變換Τ(.)運算。其中,Τ(.)是由非線性變換τ和線性變換L復合而成,即Τ( . )=L(T (·))。非線性變換τ由4個并行的S盒變換構成,S盒是固定8比特輸入8比特輸出的變換;線 性變換L主要包含異或運算和左移運算。解密算法與加密算法的結構相同,只是輪密鑰的使 用順序相反,即解密算法使用的輪密鑰是加密算法使用的輪密鑰的逆序。加密算法中用到 的輪密鑰是由加密密鑰MK通過輪密鑰擴展算法生成。該擴展算法基本結構與加解密算法相 同,同樣包含異或運算和合成置換運算。只是其中的線性變換的形式略有不同。由于SM4算 法在計算過程中增加非線性變換,理論上具有較高的安全性。
[0004] GPU(Gra地ics Processing Unit,圖形處理單元)可W理解為可編程的顯卡,最早 在計算機中用于圖形圖像的處理,最近幾年GPU還應用到大規(guī)模的并行計算領域。由于單塊 GPU通常具有上百的核屯、運算單元,相比同價位的CPU而言,GPU所擁有的數(shù)百倍于CPU的核 屯、運算單元的數(shù)量。GPU非常適合于執(zhí)行可高度并行化的密集型計算任務,使用GPU執(zhí)行運 些任務,往往能提升數(shù)倍的性能。
[0005] 雖然利用SM4加密算法可W增加數(shù)據(jù)傳輸?shù)陌踩?。但是,由于SM4加密算法的公 開性,輪密鑰生成算法與加密算法結構類似,都導致其安全性降低。因此,如何提高數(shù)據(jù)在 用SM4加密時的安全性成為一個亟待解決的問題。另外,在數(shù)據(jù)量較大的情況下,使用SM4串 行加密的耗時成為了實時傳輸?shù)钠款i。如何利用GPU編程提高SM4算法的加密速度也遠程監(jiān) 控數(shù)據(jù)傳輸過程中是需要解決的問題。
【發(fā)明內容】
[0006] 本發(fā)明針對SM4串行加密算法在面向監(jiān)控數(shù)據(jù)動態(tài)采集傳輸過程中所存在的安全 性和實時性的問題,提供一種基于GPU的改進SM4并行加解密通信方法。
[0007] -種基于GPU的改進SM4并行加解密通信方法,包括發(fā)送方的加密過程和接收方的 解密過程,其中
[000引所述發(fā)送方的加密過程為:
[0009] 步驟1、利用AES-128密鑰擴展法生成SM4加密法所需的32個擴展密鑰;
[0010] 步驟2、隨機生成1個32位的隨機數(shù)G;
[0011] 步驟3、利用GPU進行并行SM4加密,即將明文數(shù)據(jù)分成每塊12化k特的數(shù)據(jù)分組,一 個數(shù)據(jù)分組的加密任務分配給一個的GPU線程;每個GPU線程再進行32輪循環(huán)迭代加密處 理,在每輪循環(huán)迭代加密處理時,根據(jù)迭代的輪數(shù)確定隨機數(shù)G的對應位置,并根據(jù)該位置 上的隨機數(shù)G的數(shù)值選取加密輪函數(shù);
[0012] 步驟4、將各個GPU線程加密輸出的數(shù)據(jù)按分塊的前后順序進行組合后形成密文數(shù) 據(jù);
[OOU]步驟5、密文數(shù)據(jù)從GPU的全局設備存儲器內傳到內存中,整個力幡過程完成;
[0014]所述接收方的解密過程為:
[001引步驟6、利用GPU進行并行SM4解密,即將密文數(shù)據(jù)分成每塊128比特的數(shù)據(jù)分組,每 個GPU線程解密一個數(shù)據(jù)分組;每個GPU線程再進行32輪循環(huán)迭代解密處理,在進行32輪循 環(huán)迭代解密處理時,根據(jù)隨機數(shù)G對應位置上的取值,動態(tài)選擇解密的輪函數(shù);
[0016] 步驟7、將各個GPU線程解密輸出的數(shù)據(jù)按分塊的前后順序進行組合后獲得明文數(shù) 據(jù);
[0017] 步驟8、明文數(shù)據(jù)從GPU的全局設備存儲器內傳到內存中,整個解密過程完成。
[0018] 步驟1中,擴展密鑰只需要產生一次,該擴展密鑰在各個GPU線程加密過程中循環(huán) 使用。
[0019] 步驟1中所述密鑰擴展的具體過程為:
[0020] 步驟1. 1、將128bit的初始密鑰按照列順序組成4個32bit的字,分別記為W0-W3;
[0021] 步驟1.2、在初始密鑰的基礎上依次新增31個字wj,每一個新增的字wj的值依賴于 Wj-l和Wj-4,即:
[0022] 當j除W4的余數(shù)不為0時,Wj=Wj-4? wj-i;
[0023] 當 j除 W4的余數(shù)為0時,Wj=Wj-4? g(wj-i);
[0024] 步驟1.3、利用上述產生的字生成SM4加密算法中用到的擴展密鑰,即擴展密鑰rki = Wj+4。
[00巧]上述j = 4,5,6......35;i = 0,l,...,31 ;g〇是一個復雜函數(shù)。
[0026] 步驟1.2中,復雜函數(shù)g()的計算過程如下:
[0027] 步驟1.2.1、將字*"從字節(jié)為單位,排列表示成曲,81瓜,83]的形式,并將化〇,81, B2,B3]循環(huán)左移一個字節(jié),變換成化,B2,B3,B0];
[0028] 步驟1.2.2、利用465的5盒對輸入字的每個字節(jié)進行字節(jié)替換,變?yōu)閇8'1,8'2,8'3, B'o];
[0029] 步驟1.2.3、將產生的結果[8'1,8'2,8'3,8'0]與輪常數(shù)進行異或輸出;
[0030] 上述j = 4,5,6……35。
[0031 ]步驟3中,根據(jù)迭代的輪數(shù)確定隨機數(shù)G對應位置,該隨機數(shù)G的每一位作為每一輪 迭代時動態(tài)選擇的依據(jù),即:
[0032] 當隨機數(shù)G的對應的位置的數(shù)值為加寸,選擇使用:Xi+4 = F(Xi,Xi+i,Xi+2,Xi+3,rki) = Xi ? T(Xi+i ? Xi+2 ? Xi+3 ? rki)作為輪函數(shù);
[0033] 當隨機數(shù)G的對應的位置的數(shù)值為1時,選擇使用:Xi+4 = F(Xi,Xi+i,Xi+2,Xi+3,rki) = Xi ? T(Xi+i巧i+2巧i+日? rki)作為輪函數(shù);
[0034] 其中,Xi-Xi+3表示第i輪輸入的明文數(shù)據(jù),F(xiàn)〇表示輪函數(shù),TO表示合成變換函數(shù), rk康示第i輪使用的擴展密鑰,i = 0,1,…,31。
[0035] 步驟3中,每個GPU線程進行加密處理的過程為:
[0036] 步驟3.1、根據(jù)本次迭代次數(shù),確定隨機數(shù)G的對應位置,并根據(jù)該位置上的明文數(shù) 據(jù)的數(shù)值選取輪函數(shù);即當隨機數(shù)G的對應的位置的明文數(shù)據(jù)的值為0時,計算Xi + l ? Xi+2 ? Xi+3 ?地;當隨機數(shù)G的對應的位置的明文數(shù)據(jù)的值為1時,計算Xi+i+Xi卻Xi+3 ? rki;并將計 算結果按照字節(jié)順序排列保存為數(shù)據(jù)塊A=(ao,ai,a2,a3);
[0037] 步驟3.2、利用AES的S盒對上一步的數(shù)據(jù)塊A=(曰日,ai,曰2,曰3)進行字節(jié)替換,輸出 按字節(jié)順序保存為數(shù)據(jù)塊B = (bo,bi,b2,b3),即(bo,bi,b2,b3) = τ(Α) = (Sbox(ao),Sbox (ai),訊ox(a2),Sbox(a3));
[003引步驟3.3、將上一步的B進行線性變換,輸出保存為數(shù)據(jù)塊C,則:C = L(B) = (B<?0) ? (B?<2) ? (B?<10) ? (B?<18) ? (B?<24)
[0039] 步驟3.4、將上一步生成的數(shù)據(jù)塊C和本次的輸入明文數(shù)據(jù)進行異或運算,計算Xi+4 =Xi Θ C ; Xi+l,Xi+2,Xi+3,Xi+4作為下一次輪循環(huán)的輸入;
[0040] 步驟3.5、重復上述3.3.1~3.3.4的操作,將上一輪移位后數(shù)據(jù)作為新一輪輸入, 重復32次;經過32循環(huán)迭代加密后,輸出密文數(shù)據(jù)為(Yq,Yl,Y2,Y3 ) = (X35,X34,X33,X32 );
[0041] 式中,Xi-Xi+3表示第i輪輸入的明文數(shù)據(jù),rki表示第i輪使用的擴展密鑰,τ()表示 置換變換函數(shù),SboxO為S盒變換函數(shù),L0表示線性變換函數(shù)。
[0042] 步驟6中,進行并行SM4解密時,根據(jù)迭代的輪數(shù)確定隨機數(shù)G對應位置,該隨機數(shù)G 的每一位作為每一輪迭代時動態(tài)選擇的依據(jù),即:
[00創(chuàng)當隨機數(shù)G的對應的位置的數(shù)值為加寸,選擇使用:Xi+4 = F(Xi,Xi+i,Xi+2,Xi+3,rk3i-i) =Xi ? T(Xi+i ? Xi+2 ? Xi+3 ? rk3i-i)作為輪函數(shù);
[0044] 當隨機數(shù)G的對應的位置的數(shù)值為1時,選擇使用:Xi+4 = F(Xi,Xi+i,Xi+2,Xi+3,rk3i-i) =Xi ? T(Xi+i巧i+2巧i+3 ? rk3i-i)作為輪函數(shù);
[0045] 其中,Xi-Xi+3表示第i輪輸入的密文數(shù)據(jù),F(xiàn)〇表示輪函數(shù),TO表示合成變換函數(shù), 地1-康示第i輪使用的擴展密鑰,i = 0,1,…,31。
[0046] 與現(xiàn)有技術相比,本發(fā)明的改進SM4算法比原算法主要改進之處有W下幾點:
[0047] (1)利用AES-128密鑰擴展算法生成SM4加密算法需要的32個輪密鑰;新的密鑰擴 展算法,具有透明、簡潔、實現(xiàn)速度快等優(yōu)勢。
[0048] (2)替換SM4加密算法中的S盒,使用高強度的AES-128的S盒;有助于抵抗傳統(tǒng)的線 性密碼分析、差分密碼分析、代數(shù)攻擊及最新的中間相遇攻擊等,提高了加密算法的安全 性。
[0049] (3)將加解密函數(shù)中32迭代所用輪函數(shù)由"固定函數(shù)"改為"動態(tài)選擇",隨機數(shù)G的 每一位作為每一輪迭代時動態(tài)選擇的依據(jù);
[0050] (4)在SM4加密時采用電碼本模式巧CB),具有簡單實用、便于并行計算和誤差不會 被傳遞等優(yōu)點;
[0051] (5)結合AES-128密鑰擴展算法與SM4加密算法的新算法,其實現(xiàn)速度更快、安全性 得到提高。
[0052] (6)利用GPU的并行計算能力,將串行SM4加密算法改進成并行加密的形式,對實時 數(shù)據(jù)進行并行加密;采用GPU并行加密方案實現(xiàn)對大數(shù)據(jù)環(huán)境下動態(tài)數(shù)據(jù)流的加解密,提高 了加密速度,從而保證數(shù)據(jù)流正常的傳輸,降低處理延遲。
【附圖說明】
[0053] 圖1為基于GPU的改進SM4并行加密通信系統(tǒng)加解密示意圖;
[0054] 圖2為基于GPU的改進SM4并行加密方法流程圖;
[0055] 圖3為AES密鑰擴展算法示意圖;
[0056] 圖4為g()函數(shù)示意圖;
[0057] 圖5為基于動態(tài)選擇的SM4輪函數(shù)流程圖。
【具體實施方式】
[0058] -種基于GPU的改進SM4并行加密通信系統(tǒng),如圖1所示,系統(tǒng)包括位于發(fā)送方的并 行加密模塊與位于接收方的并行解密模塊。其中加密模塊負責將發(fā)送方提交的動態(tài)明文數(shù) 據(jù)流,利用基于GPU的改進SM4并行加密算法進行加密;解密模塊負責將接收方接收的密文 數(shù)據(jù),利用基于GPU的改進SM4并行解密算法進行解密。
[0059] 基于GPU的改進SM4并行加解密通信方法,包括發(fā)送方的加密過程和接收方的解密 過程。
[0060] 所述發(fā)送方的加密過程,如圖2所示,包括如下步驟:
[0061] 步驟1、利用基于AES-128密鑰擴展算法進行SM4輪密鑰擴展,如圖3