謝宗曉 董坤祥 甄杰
1 對(duì)稱密碼算法
對(duì)稱密碼(symmetric cryptography)也稱為共享密鑰密碼,是指用相同的密鑰進(jìn)行加密解密,其中的“對(duì)稱”指的是加密密鑰和解密密鑰是相同的,或者用簡(jiǎn)單的運(yùn)算就可以推導(dǎo)兩個(gè)密鑰。對(duì)稱密碼算法在邏輯上非常容易理解,因此出現(xiàn)的比較早,有時(shí)候也叫傳統(tǒng)密碼算法,以區(qū)別于公鑰密碼算法。
對(duì)稱密碼算法有兩種主要形式:序列密碼(stream cipher)和分組密碼(block cipher)。已經(jīng)發(fā)布國(guó)產(chǎn)商用密碼算法中屬于對(duì)稱密碼算法的有ZUC(祖沖之密碼算法)和SM4。其中,ZUC屬于序列密碼,與之類似的國(guó)外密碼算法如RC41)。SM4屬于分組密碼,與之類似的國(guó)外密碼算法如DES(Data Encryption Standard,數(shù)據(jù)加密標(biāo)準(zhǔn))、TDEA/3DES(Triple Data Encryption Algorithm/3DES、三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn))以及AES(Advanced Encryption Standard,高級(jí)加密標(biāo)準(zhǔn))等。
2 對(duì)稱密碼算法標(biāo)準(zhǔn)
為了配合WAPI2)無線局域網(wǎng)標(biāo)準(zhǔn)的推廣應(yīng)用,國(guó)家密碼管理局在2006年公布了SMS43)算法。2012年,該算法更名為SM4,成為行業(yè)標(biāo)準(zhǔn)。2016年上升為國(guó)家標(biāo)準(zhǔn)。SM4對(duì)應(yīng)的國(guó)家/行業(yè)標(biāo)準(zhǔn),如表1所示。
ZUC可以保護(hù)數(shù)據(jù)的機(jī)密性和完整性等,具體見GM/T 0001.2—2012和GM/T 0001.3—2012。值得特別指出的是,2020年4月,ZUC已經(jīng)成為國(guó)際標(biāo)準(zhǔn)ISO/IEC 18033-4:2011/Amd 1:2020 Information technology—Security techniques—Encryption algorithms—Part 4: Stream ciphers—Amendment 1: ZUC《信息技術(shù) 安全技術(shù) 加密算法 第4部分:序列算法 補(bǔ)篇1:ZUC》。
ZUC對(duì)應(yīng)的國(guó)家/行業(yè)標(biāo)準(zhǔn),如表2所示。
3 祖沖之序列密碼算法
序列密碼,也稱為“流密碼”,序列密碼算法將明文消息逐位轉(zhuǎn)換成密文。序列密碼中由于按位異或的計(jì)算特性,可知式(1)和式(2)。
Ci = Pi⊕Ki? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(1)
Pi? = Ci⊕Ki? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)
因此,其加密解密大致過程如圖1所示。
密鑰序列的安全性對(duì)上述體系安全性的重要度不言而喻,如果密鑰是真隨機(jī)序列,那么輸出的密文也是真隨機(jī)序列,這樣解釋了為什么“一次一密”是完美安全的。圖1中是最簡(jiǎn)單的序列密碼工作模式,在實(shí)踐中的設(shè)計(jì)一般要復(fù)雜得多。在ZUC中,密鑰產(chǎn)生首先要輸入一個(gè)128位的初始密鑰和一個(gè)128位的初始向量。
ZUC是運(yùn)用于4G網(wǎng)絡(luò)中的標(biāo)準(zhǔn)密碼算法,包括祖沖之密碼算法,機(jī)密性算法和完整性算法,分別對(duì)應(yīng)表2中的GB/T 33133.1—2016、GM/T 0001.2—2012和GM/T 0001.3—2012。
4 SM4分組密碼算法
4.1 分組及工作模式
分組密碼,也稱為“塊密碼”。分組指的是將明文劃分成固定長(zhǎng)度的“塊”,然后進(jìn)行加密,因?yàn)樗^的分組密碼算法實(shí)際只能加密這個(gè)固定長(zhǎng)度的“塊”。這其中就涉及一個(gè)問題,絕大部分的明文長(zhǎng)度都會(huì)超過這個(gè)“塊”的長(zhǎng)度,這也是明文為什么要分組的原因。
分組之后的明文,需要鏈接,需要反復(fù)的迭代輸入。一般情況下,將分組數(shù)據(jù)塊鏈接的組合模式或其迭代的方法,稱為“分組密碼算法工作模式4)”。
在GB/T 17964—2008《信息安全技術(shù) 分組密碼算法的工作模式》中,定義了常見的工作模式:電碼本(ECB,Electronic Code Book)模式、密碼分組鏈接(CBC,Cipher Block Chaining)模式、密碼反饋(CFB,Cipher Feedback)模式、輸出反饋(OFB,Output Feedback)模式、計(jì)數(shù)器(CTR,Counter)模式、分組鏈接模式(BC,Block Chaining)和帶非線性函數(shù)的輸出反饋(OFNLF,Output Feedback with a Nonlinear Function)模式。
最簡(jiǎn)單也最直觀的方式是ECB模式,即明文分組,然后順序加密,得到相應(yīng)的密文分組。這其中存在一個(gè)很大的漏洞,密文分組之間沒有相互聯(lián)系,這導(dǎo)致了攻擊者可以改變密文的順序,或者刪除、復(fù)制密文分組,從而達(dá)到操縱明文的目的,所以ECB模式目前一般不會(huì)再被用于實(shí)踐。
4.2 基本工作原理
分組密碼算法一般會(huì)根據(jù)上述工作模式首先對(duì)明文消息進(jìn)行分組,然后將明文分組和密鑰作為輸入(有時(shí)候會(huì)有初始向量),也就是說,分組密碼是對(duì)明文分組和密鑰分組的運(yùn)算。其基本過程如圖2所示。
具體到SM4分組密碼算法,SM4的分組長(zhǎng)度為128比特,密鑰長(zhǎng)度也是128比特,加密算法與密鑰擴(kuò)展算法均采用32輪非平衡Feistel結(jié)構(gòu)。非平衡Feistel結(jié)構(gòu)也被稱為Feistel網(wǎng)絡(luò)或Feistel密碼(cipher),以德國(guó)密碼學(xué)家Horst Feistel命名,專門用于構(gòu)造分組密碼的對(duì)稱結(jié)構(gòu)。由于是對(duì)稱結(jié)構(gòu),F(xiàn)eistel結(jié)構(gòu)中加密和解密算法結(jié)構(gòu)完全一致,因此在實(shí)現(xiàn)過程中,所需要的代碼或者電路都可以減半。由于采用Feistel結(jié)構(gòu),SM4解密與加密的算法結(jié)構(gòu)相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。
注意區(qū)別兩個(gè)詞匯“擴(kuò)展”和“填充”。填充(padding)指的是當(dāng)明文分組小于分組長(zhǎng)度的時(shí)候,需要一些數(shù)據(jù)填充至128比特。這種情況在SM3中也存在,在SM3中,經(jīng)過填充后的消息長(zhǎng)度是512比特。擴(kuò)展(expansion)是指密鑰擴(kuò)展,例如,在SM4中,密鑰擴(kuò)展是通過算法實(shí)現(xiàn)的,128比特的密鑰表示為:
MK = (MK0, MK1, MK2, MK3) MKi (i=0,1,2,3) 為字。
在GB/T 32907—2016的定義2.6中,“字”是長(zhǎng)度為32比特的組(串)。密鑰長(zhǎng)度,32×4。密鑰擴(kuò)展算法要迭代32輪,每輪產(chǎn)生一個(gè)輪密鑰,輪密鑰通過加密密鑰生成。由于輪密鑰是32輪,所以rKi (i=0,1,2,…,31)共32個(gè)。如果用(X0, X1, X2, X3)表示明文,加密過程表示為:
Xi+4 = Xi⊕T'(Xi+1⊕Xi+2⊕rKi)? i=0,1,2, …31
T'是指合成置換過程。
SM4除了32次迭代運(yùn)算,最后還需要一次反序變換,用(Y0, Y1, Y2, Y3)表示密文:
(Y0, Y1, Y2, Y3) = R(X32, X33, X34, X35) = (X35, X34, X33, X32)
R為反序變換函數(shù)。
特別詳細(xì)的過程,本文中不再贅述,通過ZUC和SM4基本原理的分析可以看出,無論是序列密碼算法還是分組密碼算法,對(duì)于對(duì)稱密碼算法而言,計(jì)算不一定很復(fù)雜,但過程設(shè)計(jì)非常重要。這與公鑰密碼算法不同,公鑰密碼算法大多都建立在某類數(shù)學(xué)難題基礎(chǔ)之上,本質(zhì)是計(jì)算復(fù)雜的問題?;诖?,對(duì)稱密碼算法中由初始向量IV引入的隨機(jī)性非常重要,每次加密的初始向量都需要重新生成。
5 小結(jié)
如上文所述,ZUC和SM4最初都是應(yīng)用于通信領(lǐng)域,其中,ZUC是4G移動(dòng)通信的國(guó)際標(biāo)準(zhǔn),SM4最早是應(yīng)用于WAPI的無線局域網(wǎng)加密標(biāo)準(zhǔn)。ZUC能夠有效地抵抗目前已知的攻擊方法,具有較高的安全性,并且效率比較高。SM4安全性與AES-128相當(dāng),但是實(shí)現(xiàn)效率比AES要好,因?yàn)镾M4和DES等采用的都是對(duì)稱的Feistel結(jié)構(gòu),AES加密和解密算法不一致,實(shí)現(xiàn)起來就更復(fù)雜一些,效率也更低一些。
(注:本文僅做學(xué)術(shù)探討,與作者所在單位觀點(diǎn)無關(guān))
參考文獻(xiàn)
[1] Merkle R C. One Way Hash Functions and DES [C]. In: Brassard G. (eds) Advances in Cryptology — CRYPTO 89 Proceedings. CRYPTO 1989.
[2] Damgard I B. A Design Principle for Hash Functions[C]. In: Brassard G. (eds) Advances in Cryptology — CRYPTO 89 Proceedings. CRYPTO 1989.
[3] 霍煒,郭啟全,馬原.商用密碼應(yīng)用與安全性評(píng)估[M]. 北京:中國(guó)工信出版社/電子工業(yè)出版社,2020.
[4] Tiwari, Harshvardhan. Merkle—Damgard Construction Method and Alternatives: A Review [J]. Journal of Information and Organizational Sciences. 2017 (41): 283-304.
[5] Bruce Schneier. 應(yīng)用密碼學(xué):協(xié)議、算法與C源程序[M]. 北京:機(jī)械工業(yè)出版社,2013.