艾心 吳鳴旦 武旭東 李小衛(wèi) 羅群
摘 要:SM4算法的優(yōu)點是軟件和硬件容易實現(xiàn)、運算速度快,但是由于其加密算法與解密算法均使用相同的密鑰,并且加密過程和解密過程互逆,SM4算法的適用范圍受到了很大限制。SM4算法的缺點是信息安全取決于對密鑰的保護,密鑰泄漏則意味著任何人都能通過解密密文獲得明文。論文在SM4算法的基礎(chǔ)上,提出一種“一次一密”的加密機制,對其密鑰的安全性進行提高,從而提高整個加密算法的安全性。
關(guān)鍵詞:SM4算法;一次一密;安全性
中圖分類號: TP312 文獻標識碼:A
Design of one-time pad SM4 algorithm
Abstract: The advantage of SM4 algorithm is that the software and hardware are easy to implement and computing speed is fast, but becausethe keys inthe encryption algorithm and decryption algorithm are same, and the encryption process and decryption process are mutually inverse, the application range of SM4 algorithm is greatly restricted.The disadvantage of SM4 algorithm is that the information security depends on the protection of the key, and the leakage of key means that anyone can get plaintext by decrypting the ciphertext.On the basis of SM4 algorithm, this paper proposes a "one-time pad" encryption mechanism to improve the security of its key, so as to improve the security of the entire encryption algorithm.
Key words: SM4 algorithm; one-time pad; security
1 引言
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,無線局域網(wǎng)正在日益普及,但是其傳輸信息的安全性也正面臨著嚴峻的挑戰(zhàn)。采用數(shù)據(jù)加密技術(shù)是保證用戶信息在傳輸過程中不被暴露和篡改的有效方式。國家密碼管理局于2012年發(fā)布了一套密碼行業(yè)標準[1],即SM4算法。SM4算法屬于對稱密碼體制中的分組加密算法,加密過程和解密過程中采用的密鑰一致,其中明文分組、密文分組、密鑰的長度均為128位。解密過程與加密過程的結(jié)構(gòu)相似,不同的是輪密鑰的使用順序相反[2]。加密算法與密鑰擴展算法均使用32輪非線性迭代結(jié)構(gòu)。
SM4算法的優(yōu)點是軟件和硬件容易實現(xiàn)、運算速度快[3],但是由于其加密算法與解密算法均使用相同的密鑰,并且加密過程和解密過程互逆,SM4算法的適用范圍受到了很大限制。SM4算法的缺點是信息安全取決于對密鑰的保護,若攻擊者獲取了密鑰,那么就能通過解密密文獲得明文。
“一次一密”算法要求每次均采用不同的密鑰來完成對明文的加密,即密鑰是隨機產(chǎn)生的并且明文和密鑰是等長的。實現(xiàn)了“一次一密”加密機制的密鑰才是理論上安全的密鑰[4]。采用這種方案時除非攻擊者知道完整的密鑰信息,否則須經(jīng)過2n(n為明文的長度)次破解嘗試才能獲得密鑰,在現(xiàn)有的計算能力下是不可能實現(xiàn)的。本文在SM4算法的基礎(chǔ)上,提出一種“一次一密”的加密機制,對其密鑰的安全性進行提高,從而提高整個加密算法的安全性。
2 SM4算法原理
SM4算法屬于對稱密碼體制中的分組加密算法,加密過程和解密過程中采用的密鑰一致,其中明文分組、密文分組、密鑰的長度均為128位。解密過程與加密過程的結(jié)構(gòu)相似,不同的是輪密鑰的使用順序相反。加密算法與密鑰擴展算法均使用32輪非線性迭代結(jié)構(gòu)。
SM4算法將每個明文分組和密文分組均分成128位,然后將每個分組分為4部分,即明文(P0,P1,P2,P3)∈(Z322)4,密 文(Q0,Q1,Q2,Q3)∈(Z322)4。輪密鑰為ghi∈∈Z322,i=0,1,2,…,31。反序變換R為R(B0,B1,B2,B3)=(B3,B2,B1,B0),Bi∈∈Z322,i=0,1,2,3。
本算法的加密變換為:Pi+4=F(Pi,P(i+1),P(i+2),P(i+3),ghi)=Pi?⊕T(Pi,P(i+1),P(i+2),P(i+3),ghi), i=0,1,2,…,31,(Q0,Q1,Q2,Q3)=R(P32,P33,P34,P35)=(P35,P34,P33,P32)。
在SM4算法中,解密與加密過程的輪密鑰使用順序不同:
加密時輪密鑰的使用順序:(gh0,…,gh31);
解密時輪密鑰的使用順序:(gh31,…,gh0)。
輪密鑰由加密密鑰生成,加密密鑰長度為128比特,表示為NH=(NH0,NH1,NH2,NH3),其中NHi∈∈Z322(i=0,1,2,3)。
3 密鑰產(chǎn)生的協(xié)議及算法
為了描述方便,本文僅討論兩人通信模式。
(1)密鑰分配中心KDC是目前公認的最有效的密鑰分配方法,是Kerberos協(xié)議[5]的重要組成部分。KDC的可信性、安全性是無需質(zhì)疑的。因此,通信雙方首先通過密鑰分配中心KDC獲得對方的公鑰。
(2)通信雙方各自生成128位隨機數(shù),分別用U、V表示,并利用對方的公鑰加密并進行交換;雙方各自計算J=U?V,J稱為基本密鑰。
(3)首先對基本密鑰J做左循環(huán)運算,結(jié)果記為JR。即JR=R<< (4)按照二進制數(shù)字串的順序?qū)?28位的JR分為4組,每32位為一組,并用D0,D1,D2,D3為每組命名。 (5)對D0,D1,D2,D3依照算法分別作左循環(huán)、右循環(huán)運算,運算結(jié)果為新的128位數(shù)字串。即: JR ET=((T+1)<< 之所以從T+1開始循環(huán)運算,是為了提高數(shù)字串的混亂程度,進而優(yōu)化密鑰生成的效果。 (6)將JR ET作為單向散列函數(shù)的輸入值,生成的128位輸出值作為SM4算法的工作密鑰。 單向散列函數(shù)是指將任意長度的數(shù)據(jù)轉(zhuǎn)換為不可逆轉(zhuǎn)的、定長的數(shù)字串[6]。即:l)散列函數(shù)是單向的,因此不同輸入數(shù)據(jù)的散列值是獨立的;2)給予相同的輸入數(shù)據(jù),散列值相同。 本文還要求所選的單向散列函數(shù)具有強抗碰撞性。即對于任意的兩組輸入x和y,使得輸出H(x)=H(y)在計算上是不可行的[7]。目前廣泛使用的散列函數(shù)有SHA-1和MD5。SHA-1作為散列數(shù)據(jù)的標準,輸出160位的散列值。與SHA-1不同,MD5的輸出為128位的散列值。 工作密鑰HRT=HASH(JR ET),R的最大值為127,T的最大值為15,工作密鑰個數(shù)最多為128×16=2048。 (7)加密/解密時,偏移量是一個非常重要的參數(shù)。首先應該根據(jù)偏移量求得工作密鑰。設(shè)偏移量為W(假定W<2048),則首先根據(jù)取整運算求得R,即R=[W/16],根據(jù)模運算求得T,即T=Wmod16。然后根據(jù)R和T的值計算JR ET,最后得到工作密鑰HRT=HASH(JR ET)。 (8)當需要加密/解密的信息量比較大時(假定W大于2048),須產(chǎn)生更多的工作密鑰,可以考慮增加基本密鑰長度。例如當基本密鑰為256位時,R和T的最大值分別為255和31,工作密鑰個數(shù)最多為256×32=8192,工作密鑰HRT=HASH(JR ET)的長度依然為128位。 (9)當需要加密/解密的信息量非常大時(假定W遠遠大于2048),可采用增加基本密鑰長度和個數(shù)的方法來產(chǎn)生更多的工作密鑰。例如通信雙方各自產(chǎn)生K組128位二進制串。在產(chǎn)生基本密鑰時,按照順序號相同的原則將每位二進制數(shù)進行異或運算,即:JS=US⊕VS,S∈[0,K]。JSR ET為單向散列函數(shù)的輸入值。當加密/解密時首先求得S=[W/2048],再按照步驟7計算相應的R和T,最終求得JSR ET和工作密鑰HSRT=HASH(JSR ET)。 產(chǎn)生更多的工作密鑰的算法有很多,可以通過不同的移位、組合等方式實現(xiàn),本文僅闡述算法的可行性。從理論上講, 128位二進制數(shù)按照一定順序排列產(chǎn)生工作密鑰,所以工作密鑰最多有2128種可能。 4 算法分析 4.1 算法可行性分析 本文提出的算法由偏移量可以獨立計算出一致的單向散列函數(shù)的輸入值JR ET,并且該輸入值具有強抗碰撞性。通信雙方可獨立產(chǎn)生完全一致的對應明文/密文的SM4算法的工作密鑰,并且在設(shè)計時考慮到SM4算法的對稱加密算法特性。另外,加密/解密過程均使用SM4算法,符合算法一致的要求,因此算法是可行的。本文的設(shè)計采用了“一次一密”加密機制,可以極大地增強SM4算法的安全性。 4.2 弱密鑰分析 本文雖然在算法復雜度上進行了提升,但由于密鑰均由二進制數(shù)字組成,在工作密鑰產(chǎn)生時,不可避免會出現(xiàn)某些比較簡單的工作密鑰(即弱密鑰),這種簡單的工作密鑰會對算法的安全性產(chǎn)生一定影響。因此在生成128位密鑰時,對于連續(xù)16位二進制數(shù)全為0或全為1的特殊數(shù)字串[8]須適當去除,當產(chǎn)生這種特殊字符串時,通信雙方須進行協(xié)商,重新生成密鑰,以確保安全性。在產(chǎn)生隨機二進制數(shù)時,要求通信雙方應盡量做到0、1均勻分布。雖然弱密鑰的產(chǎn)生是不可避免的,但本算法在加密/解密時采用“一次一密”的加密/解密方式,各個密鑰間不具備相關(guān)性,攻擊者無法得知哪些加密/解密過程中存在弱密鑰,所以極少數(shù)弱密鑰的存在并不影響算法的安全性。 4.3 窮舉法攻擊分析 基于隨機數(shù)字串通過單向散列函數(shù)進行的散列運算,本文設(shè)計的算法能夠產(chǎn)生“一次一密”的工作密鑰,可以保證在一定范圍內(nèi),SM4算法在每次加密/解密過程中使用的密鑰均為相互獨立的,從而提高了算法安全性。該算法不會因為攻擊者偶然破譯的一個密鑰而影響其他密鑰的安全性,因為不同輸入數(shù)據(jù)的散列值的產(chǎn)生是互不影響的。攻擊者若要破譯一組128位的密文,則需要分析2128個工作密鑰,破譯成本非常高,在現(xiàn)有的計算條件下破解是不現(xiàn)實的,因此攻擊者使用窮舉法破譯本算法是并不可行的。 基金項目: 國家科技支撐計劃課題資助(項目編號:2016YFF0204001)。 參考文獻 [1] 國家密碼管理局.國家密碼管理局公告第23號[EB/OL].(2012-03-21).http://www.oscca.gov.cn/News/201204/News_1227.htm. [2] 張遠洋,李錚,徐建,張少武.面積優(yōu)先的分組密碼算法SMS4 IP核設(shè)計[J].電子技術(shù)應用,2007,(1):127-129. [3] 國家密鑰管理局.SM4分組密碼算法[S].GM/T 0002-2012. [4] D.E.R.丹寧.密碼學與數(shù)據(jù)安全(美)[M].北京:科學出版社, 1991.11. [5] Floyd S,Jacobson V. Random Early Detection Gateways for Congestion Avoidance[J]. IEEE/ACM Trans on Networking,1993,1(4):397-413. [6] 施榮華.一種基于單向函數(shù)的雙重認證存取控制方案[J].電子科學學刊,1997,19(2):278-281. [7] 盧開澄.計算機密碼學——計算機網(wǎng)絡(luò)中的數(shù)據(jù)保密與安全(第2版)[M].北京:清華大學出版社,1998. [8] 王偉,郭錫泉.一次一密DES算法的設(shè)計[J].計算機安全,2006,(5):17-18.