- 商用密碼應(yīng)用與安全性評估
- 霍煒
- 17255字
- 2020-06-08 18:01:00
1.4 密碼算法
現(xiàn)代密碼學(xué)理論中,算法是密碼技術(shù)的核心。常見的密碼算法包括對稱密碼算法、公鑰密碼算法和密碼雜湊算法三個類別,如圖1-5所示。習(xí)慣上,對稱密碼算法簡稱為“對稱密碼”,公鑰密碼算法簡稱為“公鑰密碼”,密碼雜湊算法簡稱為“雜湊算法”。
本節(jié)將結(jié)合上述三類密碼算法,主要介紹五種已經(jīng)以密碼行業(yè)標準或國家標準形式公布的商用密碼算法:ZUC、SM2、SM3、SM4和SM9,以及常見的國外密碼算法。

圖1-5 常用密碼算法
1.4.1 對稱密碼算法
對稱密碼算法加密過程與解密過程使用相同的或容易相互推導(dǎo)得出的密鑰,即加密和解密兩方的密鑰是“對稱”的。這如同往一個上了鎖的箱子里放物品,放入時需要用鑰匙打開;想要取出物品時,還需要用同樣的鑰匙開鎖。早期的密碼算法都是對稱形式的密碼算法。
對稱密碼加密和解密基本流程如圖1-6所示。用戶通過加密算法將明文變換為密文。密文的具體值由密鑰和加密算法共同決定。只有掌握了同一個密鑰和對應(yīng)解密算法的用戶才可以將密文逆變換為有意義的明文。

圖1-6 對稱密碼加密和解密基本流程
針對不同的數(shù)據(jù)類型和應(yīng)用環(huán)境,對稱密碼有兩種主要形式:一是序列密碼(也稱“流密碼”,stream cipher),二是分組密碼(也稱“塊密碼”,block cipher)。我國發(fā)布的商用密碼算法中的序列密碼算法和分組密碼算法分別是ZUC和SM4算法。常見的國外序列密碼算法有SNOW(如SNOW 2.0、SNOW 3G)、RC4等;分組密碼算法有數(shù)據(jù)加密標準(DES),三重數(shù)據(jù)加密算法(TDEA,也稱3DES),高級加密標準(AES)等。
1.序列密碼和分組密碼
1)序列密碼和分組密碼的區(qū)別
序列密碼和分組密碼都屬于對稱密碼,其加密流程對比如圖1-7所示。序列密碼和分組密碼的區(qū)別在于序列密碼是將密鑰和初始向量(Initial Vector,IV)作為輸入,通過密鑰流生成算法輸出密鑰流(也稱擴展密鑰序列),然后將明文序列和密鑰流進行異或,得到密文序列。分組密碼首先對明文消息根據(jù)分組大小進行分組,再將明文分組、密鑰和初始向量(如果有)一起作為輸入,通過分組加密算法直接輸出密文分組。

圖1-7 序列密碼和分組密碼的加密流程
通過圖1-7可以看出,序列密碼的特點在于密鑰流可以在明文序列到來之前生成。序列密碼對每個明文序列的加密操作僅僅是一次異或,因此序列密碼的執(zhí)行速度通常很快,對計算資源的占用也較少,常用于功耗或者計算能力受限的系統(tǒng)中,如嵌入式系統(tǒng)、移動終端等,也可用于實時性要求高的場景(如語音通信、視頻通信等)。
2)初始向量
如圖1-7所示,在對稱密碼的實際應(yīng)用場景中,初始向量是一個在加密過程中起到引入隨機性作用的隨機數(shù),即在加密一批明文數(shù)據(jù)之前,加密方先要隨機生成一個初始向量,并將它和密鑰一起輸入到加密算法中。每次加密初始向量都必須重新生成,初始向量的引入使得多次分別對同一明文數(shù)據(jù)使用相同的密鑰進行加密,得到的密文是不同的。初始向量在加密完成后可隨著密文一起通過非安全信道傳輸,即使攻擊者截獲了初始向量,也不會對保密性構(gòu)成威脅。在后續(xù)介紹的分組密碼的工作模式及ZUC序列密碼算法中均會用到初始向量。
2.分組密碼的工作模式
我國于2008年發(fā)布了規(guī)定分組密碼算法工作模式的國家標準GB/T 17964-2008《信息安全技術(shù) 分組密碼算法的工作模式》。在分組密碼算法中,根據(jù)分組數(shù)據(jù)塊鏈接的組合模式不同,可以分為以下七種工作模式:電碼本(Electronic Code Book,ECB)模式、密文分組鏈接(Cipher Block Chaining,CBC)模式、密文反饋(Cipher Feedback,CFB)模式、輸出反饋(Output Feedback,OFB)模式、計數(shù)器(Counter,CTR)模式、分組鏈接(Block Chaining,BC)模式、帶非線性函數(shù)的輸出反饋(Output Feedback with a Nonlinear Function,OFBNLF)模式。本節(jié)重點介紹常用的ECB、CBC、CTR模式。
注:分組密碼算法還有一種帶鑒別功能的加密模式,即可鑒別的加密模式(Authenticated Encryption Mode),可同時實現(xiàn)數(shù)據(jù)的保密性、完整性以及對數(shù)據(jù)源真實性的鑒別。相關(guān)國家標準GB/T 36624-2018《信息技術(shù)安全技術(shù) 可鑒別的加密機制》已經(jīng)發(fā)布,包括CCM(Counter with CBC-MAC)、GCM(Galois/Counter Mode)等模式。
ECB、CBC、CTR各模式的參數(shù)含義如下:P1,P2,P3,…,Pq為q個明文分組;IV為初始向量;EK表示以K為密鑰的加密算法;DK表示以K為密鑰的解密算法;C1,C2,C3,…,Cq為q個密文分組。
一般分組密碼加密分組大小為一固定長度,如128比特。如果消息長度超過固定分組長度時,在進行加密前,消息將被按照分組長度進行分塊;如果消息長度不是分組長度的整數(shù)倍,則在分塊后必須將其填充為分組長度的整數(shù)倍。
1)ECB模式
ECB模式是一種最直接的消息加密方法,ECB模式的加密和解密流程如圖1-8所示。

圖1-8 ECB模式的加密和解密流程
通過圖1-8的加密和解密流程,可以看出ECB模式具有如下性質(zhì):
①對某一個分組的加密或解密可獨立于其他分組進行;
②對密文分組的重排將導(dǎo)致明文分組的重排;
③不能隱蔽數(shù)據(jù)模式,即相同的明文分組會產(chǎn)生相同的密文分組;
④不能抵抗對分組的重放、嵌入和刪除等攻擊。
因此,不推薦在應(yīng)用中使用ECB模式。上述問題可以通過在加密處理中引入少量的“記憶”來克服,如下面要介紹的CBC模式。
2)CBC模式
CBC模式的加密和解密流程如圖1-9所示。在CBC模式下,每個明文分組在加密之前,先與反饋至輸入端的前一組密文分組按位異或后,再送至加密模塊進行加密。其中,IV是一個初始向量,無須保密,但須隨著消息的更換而更換,且收發(fā)雙方必須選用同一個IV。顯然,計算的密文分組不僅與當(dāng)前明文分組有關(guān),而且通過反饋作用還與以前的明文分組有關(guān)。在解密過程中,初始值IV用于產(chǎn)生第一個明文輸出;之后,前一個密文分組與當(dāng)前密文分組解密運算后的結(jié)果進行異或,得到對應(yīng)的明文分組。

圖1-9 CBC模式的加密和解密流程
CBC模式具有如下性質(zhì):
①鏈接操作使得密文分組依賴于當(dāng)前的和以前的明文分組,因此對密文分組的重新編排不會導(dǎo)致對相應(yīng)明文分組的重新編排。
②加密過程使用IV進行了隨機化,每次加密IV都必須重新生成,并且要保證IV的隨機性。使用不同的IV可以避免ECB模式下每次對相同的明文使用相同的密鑰加密生成相同的密文的弊端。
③加密過程是串行的,無法并行化;在解密過程中,通過兩個相鄰的密文分組執(zhí)行解密操作可以獲得明文分組,因此解密過程可以并行化。
此外,CBC模式還有一個重要用途:生成消息鑒別碼(Message Authentication Code,MAC),即使用最后一個分組的輸出結(jié)果作為MAC。MAC可以用于檢驗消息的完整性、驗證消息源的真實性等。需要注意的是,基于CBC模式的MAC有許多安全特性與CBC模式并不相同,包括不能使用初始向量(初始向量為全0),以及只能為約定好長度的消息產(chǎn)生鑒別碼等。
3)CTR模式
CTR模式通過將逐次累加的計數(shù)器值進行加密來生成密鑰流。CTR模式的加密和解密流程如圖1-10所示。每個明文分組P1,P2,P3,…,Pq對應(yīng)一個逐次累加的計數(shù)器值T1,T2,T3,…,Tq,并通過對計數(shù)器值進行加密來生成密鑰流。最終的密文分組C1,C2,C3,…,Cq是通過將計數(shù)器值加密得到的比特序列與明文分組進行異或得到的。需要注意的是,該模式下的消息長度可以不是分組長度的整數(shù)倍,即在加密前不需要進行填充操作。為保證每次每個分組的密鑰流都是不同的,每次加密用到的計數(shù)器值都互不相同,即用同一個密鑰加密不同消息,要保證一個計數(shù)器值只能用一次。

圖1-1 0CTR模式的加密和解密流程
此外,還有一種用法是將一個單獨的IV與計數(shù)器值拼接在一起作為生成密鑰流的輸入分組,此時計數(shù)器值一般從0或1開始。例如,對于分組長度是128比特的分組密碼算法,IV和計數(shù)器值各占用其中的64比特。需要注意的是,將IV與計數(shù)器值直接相加或異或后作為輸入是不安全的,這樣會導(dǎo)致選擇明文攻擊。
CTR模式具有如下性質(zhì):
①支持加密和解密并行計算,可事先生成密鑰流,進行加密和解密準備。
②只用到了分組密碼算法的分組加密操作。
③錯誤密文中的對應(yīng)比特只會影響解密后明文中的對應(yīng)比特,即錯誤不會傳播。
3.ZUC序列密碼算法
ZUC(祖沖之密碼算法)是我國發(fā)布的商用密碼算法中的序列密碼算法,該算法以中國古代數(shù)學(xué)家祖沖之的拼音(ZU Chongzhi)首字母命名,可用于數(shù)據(jù)保密性保護、完整性保護等。ZUC算法密鑰長度為128比特,由128比特種子密鑰和128比特初始向量共同作用產(chǎn)生32比特位寬的密鑰流。
ZUC算法標準包括三個部分,相對應(yīng)的國家和密碼行業(yè)標準分別為GB/T 33133.1-2016《信息安全技術(shù) 祖沖之序列密碼算法 第1部分:算法描述》、GM/T 0001.2-2012《祖沖之序列密碼算法 第2部分:基于祖沖之算法的機密性算法》、GM/T 0001.3-2012《祖沖之序列密碼算法 第3部分:基于祖沖之算法的完整性算法》。
2011年9月,在第53次第三代合作伙伴計劃(3GPP)系統(tǒng)架構(gòu)組會議上,我國以ZUC算法為核心的加密算法128-EEA3和完整性保護算法128-EIA3,與美國AES、歐洲SNOW 3G共同成為了4G移動通信密碼算法國際標準。這是我國商用密碼算法首次走出國門參與國際標準競爭,并取得重大突破。目前,我國正推動256比特版本的ZUC算法進入5G通信安全標準,這一版本算法采用256比特密鑰與184比特的初始向量,可產(chǎn)生32/64/128比特三種不同長度的認證標簽,從而保障后量子時代較長時期內(nèi)移動通信的保密性與完整性。
1)ZUC算法的結(jié)構(gòu)
ZUC算法由線性反饋移位寄存器(LFSR)、比特重組(BR)、非線性函數(shù)F三個基本部分組成,如圖1-11所示。ZUC算法結(jié)構(gòu)在邏輯上分為上、中、下三層,其中上層是16級LFSR,中間層是BR,下層是非線性函數(shù)F。

圖1-11 ZUC算法結(jié)構(gòu)
上層:LFSR以一個有限域GF(231-1)上的16次本原多項式為連接多項式,輸出具有良好的隨機統(tǒng)計特性。LFSR的輸出作為中層BR的輸入。
中間層:BR從LFSR的狀態(tài)中取出128比特,拼成4個字(X0,X1,X2,X3),供下層的非線性函數(shù)F和輸出密鑰序列使用。BR實現(xiàn)LFSR數(shù)據(jù)單元到非線性函數(shù)F和密鑰輸出的數(shù)據(jù)轉(zhuǎn)換,其主要目的是破壞LFSR在素域GF(231-1)上的線性結(jié)構(gòu)。結(jié)合下層的非線性函數(shù)F,BR可使得一些在素域GF(231-1)上的密碼攻擊方法變得非常困難。
下層:非線性函數(shù)F從中層的BR接收3個字(X0,X1,X2)作為輸入,經(jīng)過內(nèi)部的異或、循環(huán)移位和模232加法運算,以及兩個非線性S盒變換,最后輸出一個32比特W。由于非線性函數(shù)F是ZUC算法中唯一的非線性部件,所以非線性函數(shù)F就成為確保ZUC算法安全性的關(guān)鍵。S盒通常是對稱密碼算法唯一的非線性部件,它的非線性性質(zhì)與密碼算法整體強度有著直接關(guān)系,可以說一個好的算法都會有一個好的S盒。S盒一般實現(xiàn)一個小規(guī)模的非線性映射,例如,8比特到8比特的映射,或者輕量級算法中經(jīng)常用到的4比特到4比特的映射。在算法描述中,S盒通常用一個代換表表示,不同的對稱密碼算法S盒的數(shù)量、構(gòu)造方法也會不同。
最后,非線性函數(shù)F輸出的W與BR輸出的X3異或,形成ZUC算法的輸出密鑰字序列Z。
2)ZUC算法的使用
在生成密鑰流時,ZUC算法采用128比特的初始密鑰和128比特的IV作為輸入?yún)?shù),共同決定LFSR里寄存器的初始狀態(tài)。隨著電路時鐘的變化,LFSR的狀態(tài)被比特重組之后輸入非線性函數(shù)F,每一拍時鐘輸出一個32比特的密鑰流Z。隨后,密鑰流與明文按位異或生成密文。
3)基于ZUC的兩種算法
基于ZUC的兩種算法包括機密性算法128-EEA3和完整性算法128-EIA3。
(1)基于ZUC的機密性算法128-EEA3。主要用于4G移動通信中移動用戶設(shè)備和無線網(wǎng)絡(luò)控制設(shè)備之間的無線鏈路上通信信令和數(shù)據(jù)的加密和解密。
(2)基于ZUC的完整性算法128-EIA3。主要用于4G移動通信中移動用戶設(shè)備和無線網(wǎng)絡(luò)控制設(shè)備之間的無線鏈路上通信信令和數(shù)據(jù)的完整性校驗,并對信令源進行鑒別。其主要技術(shù)手段是利用完整性算法128-EIA3產(chǎn)生MAC,通過對MAC進行驗證,實現(xiàn)對消息的完整性校驗。
4)ZUC算法的安全性
ZUC算法在設(shè)計中引入了素數(shù)域運算、比特重組、最優(yōu)擴散的線性變換等先進理念和技術(shù),體現(xiàn)了序列密碼設(shè)計上的發(fā)展趨勢。通過對其三層結(jié)構(gòu)的綜合運用,ZUC算法具有很高的理論安全性,能夠有效抵抗目前已知的攻擊方法,具有較高的安全冗余,并且算法速度快,軟/硬件實現(xiàn)性能都比較好。
4.SM4分組密碼算法
SM4算法是我國發(fā)布的商用密碼算法中的分組密碼算法。為配合WAPI無線局域網(wǎng)標準的推廣應(yīng)用,SM4算法于2006年公開發(fā)布,并于2012年3月發(fā)布為密碼行業(yè)標準,2016年8月轉(zhuǎn)化為國家標準GB/T 32907-2016《信息安全技術(shù)SM4分組密碼算法》。
1)SM4算法描述
SM4分組密碼算法是一個迭代分組密碼算法,數(shù)據(jù)分組長度為128比特,密鑰長度為128比特。加密算法與密鑰擴展算法都采用32輪非線性迭代結(jié)構(gòu)(非平衡Feistel結(jié)構(gòu))。Feistel結(jié)構(gòu)的特色是加密和解密的算法結(jié)構(gòu)完全一致,在硬件實現(xiàn)上加密和解密使用完全相同的電路。解密過程只需要把加密過程中產(chǎn)生的輪密鑰逆序排列就能從密文分組中恢復(fù)出明文分組。
迭代加密算法的基本結(jié)構(gòu)如圖1-12所示。明文分組經(jīng)過迭代加密函數(shù)變換后的輸出又成為下一輪迭代加密函數(shù)的輸入,如此迭代32輪,最終得到密文分組。每一輪迭代的函數(shù)是相同的,不同的是輸入的輪密鑰。

圖1-12 迭代加密算法的基本結(jié)構(gòu)
SM4算法中密鑰擴展算法和加密算法的結(jié)構(gòu)如圖1-13所示。

圖1-13 SM4算法結(jié)構(gòu)圖
詳細描述如下:
(1)密鑰擴展算法。
128比特的密鑰表示為。密鑰擴展算法迭代32輪,每輪產(chǎn)生一個輪密鑰,輪密鑰由加密密鑰生成。首先進行初始化:

式中,是規(guī)定的128比特常數(shù),⊕表示比特異或。對i=0,1,2,…,31執(zhí)行:

得到輪密鑰,其中,函數(shù)T的含義如圖1-13(a)所示,CKi是32個32比特的固定常數(shù)。
(2)加密算法。
設(shè)明文輸入為,密文輸出為
。加密時,對i=0,1,2,…,31執(zhí)行:

密文為:

式中,R為反序變換函數(shù)。函數(shù)T′的含義如圖1-13(b)所示。
2)SM4算法的性能和安全性
SM4算法具有安全高效的特點,在設(shè)計和實現(xiàn)方面具有以下優(yōu)勢:
①在設(shè)計上實現(xiàn)了資源重用,密鑰擴展過程和加密過程類似。
②加密過程與解密過程相同,只是輪密鑰使用順序正好相反,它不僅適用于軟件編程實現(xiàn),更適合硬件芯片實現(xiàn)。
③輪變換使用的模塊包括異或運算、8比特輸入8比特輸出的S盒,還有一個32比特輸入的線性置換,非常適合32位處理器的實現(xiàn)。
通過對SM4密碼算法的安全性分析結(jié)果表明:SM4算法的S盒設(shè)計具有較高的安全特性,線性置換的分支數(shù)達到了最優(yōu),可以抵抗差分分析、線性分析、代數(shù)攻擊等密碼分析方法。
在安全性上,SM4算法的密鑰長度是128比特,其安全性與AES-128是相當(dāng)?shù)模ˋES還支持更高的安全強度)。在實現(xiàn)效率方面,由于SM4密鑰擴展和加密算法基本相同,且解密時可以使用同樣的程序,只需將密鑰的順序倒置即可,因此SM4算法實現(xiàn)起來較為簡單;而AES算法的加密算法與解密算法不一致,實現(xiàn)起來更復(fù)雜一些。
5.國外對稱密碼算法AES介紹
常見的國外對稱密碼算法主要有DES、TDEA和AES。本節(jié)將重點對目前使用最廣泛的AES算法進行介紹。
AES算法又稱為Rijndael算法,是美國聯(lián)邦政府采用的一種分組密碼算法標準(據(jù)了解,美國聯(lián)邦政府使用的密碼算法標準與美國商用的基本一致,只是在密鑰管理策略上不一樣),用來替代DES并被廣泛使用。AES算法的分組長度是128比特,密鑰長度支持128比特、192比特或256比特。支持不同密鑰長度的AES算法分別用AES-128、AES-192、AES-256表示,三者密鑰的長度不同,加密的輪數(shù)也不同,如表1-3所示。AES-128、AES-192和AES-256的加/解密思路基本一樣,只是密鑰擴展算法的過程略有不同,加密和解密的輪數(shù)會適當(dāng)增加,但加/解密的操作是一樣的。
表1-3 AES基本特性

1.4.2 公鑰密碼算法
公鑰密碼算法又稱非對稱密碼算法,既可用于加密和解密,也可用于數(shù)字簽名,打破了對稱密碼算法加密和解密必須使用相同密鑰的限制,很好地解決了對稱密碼算法中存在的密鑰管理難題。公鑰密碼算法包括公鑰加密和私鑰簽名(數(shù)字簽名)兩種主要用途。SM2、SM9算法是我國頒布的商用密碼標準算法中的公鑰密碼算法,其中,基于SM2算法的數(shù)字簽名技術(shù)已在我國電子認證領(lǐng)域廣泛應(yīng)用。
1.公鑰密碼模型
公鑰加密算法加密和解密使用不同的密鑰。其中加密的密鑰可以公開,稱為公鑰;解密的密鑰需要保密,稱為私鑰。公鑰、私鑰是密切關(guān)聯(lián)的,從私鑰可推導(dǎo)出公鑰,但從公鑰推導(dǎo)出私鑰在計算上是不可行的。
公鑰密碼算法一般建立在公認的計算困難問題之上。這樣的公鑰密碼具有可證明安全性,即如果所依賴的問題是困難的,那么所設(shè)計的算法就可證明是安全的。目前,公鑰密碼體制包括基于大整數(shù)因子分解困難性的RSA密碼算法,基于離散對數(shù)問題困難性的密碼算法(包括有限域上的離散對數(shù)問題,如ElGamal;橢圓曲線上的離散對數(shù)問題,如SM2),以及目前正在開展研究的后量子密碼(如基于格的密碼)。
1)公鑰加密算法
由于公鑰密碼運算操作(如模冪、橢圓曲線點乘)計算復(fù)雜度較高,公鑰加密算法的加密速度一般比對稱加密算法的加密速度慢很多,因此公鑰加密算法主要用于短數(shù)據(jù)的加密,如建立共享密鑰。在執(zhí)行公鑰加密操作前,需要先查找接收者的公鑰,然后用該公鑰加密要保護的消息。當(dāng)接收方接收到消息后,用自己的私鑰解密出原消息。
2)數(shù)字簽名算法
數(shù)字簽名算法主要用于確認數(shù)據(jù)的完整性、簽名者身份的真實性和簽名行為的不可否認性等。與公鑰加密算法使用公鑰、私鑰的順序不同,數(shù)字簽名使用私鑰對消息進行簽名,使用公鑰對簽名進行驗證。
需要注意的是,為提升效率和安全性,數(shù)字簽名算法中一般都需要先使用密碼雜湊算法對原始消息進行雜湊運算,再對得到的消息摘要進行數(shù)字簽名。
2.SM2橢圓曲線公鑰密碼算法
SM2橢圓曲線公鑰密碼算法(簡稱SM2算法)是基于橢圓曲線離散對數(shù)問題。由于基于橢圓曲線上離散對數(shù)問題的困難性要高于一般乘法群上的離散對數(shù)問題的困難性,且橢圓曲線所基于的域的運算位數(shù)要遠小于傳統(tǒng)離散對數(shù)的運算位數(shù),因此,橢圓曲線密碼體制比原有的密碼體制(如RSA)更具優(yōu)越性。
SM2算法于2010年年底由國家密碼管理局發(fā)布,于2012年成為密碼行業(yè)標準,于2016年轉(zhuǎn)化為國家標準。SM2數(shù)字簽名算法于2017年被ISO采納,成為國際標準ISO/IEC 14888-3的一部分。SM2算法的國家標準包括以下五個部分:
? GB/T 32918.1-2016《信息安全技術(shù)SM2橢圓曲線公鑰密碼算法第1部分:總則》;
? GB/T 32918.2-2016《信息安全技術(shù)SM2橢圓曲線公鑰密碼算法第2部分:數(shù)字簽名算法》;
? GB/T 32918.3-2016《信息安全技術(shù)SM2橢圓曲線公鑰密碼算法第3部分:密鑰交換協(xié)議》;
? GB/T 32918.4-2016《信息安全技術(shù)SM2橢圓曲線公鑰密碼算法第4部分:公鑰加密算法》;
? GB/T 32918.5-2017《信息安全技術(shù)SM2橢圓曲線公鑰密碼算法第5部分:參數(shù)定義》。
1)橢圓曲線密碼基礎(chǔ)知識
密碼學(xué)家Neal Koblitz和Victor Miller在1985年分別提出了橢圓曲線密碼學(xué)(Elliptic Curve Cryptography,ECC)的思想,使其成為構(gòu)造公鑰密碼體制的一個有力工具。
橢圓曲線并不是橢圓,之所以稱為橢圓曲線是因為它們是用三次方程來表示的,且該方程與計算橢圓周長的方程相似。橢圓曲線可以定義在不同的有限域上,常用的是定義在素域GF(p)上的橢圓曲線和定義在擴域或二元擴域GF(2m)(m是一個正整數(shù))上的橢圓曲線,我國的公鑰密碼算法標準SM2算法的推薦參數(shù)是定義在256比特素域上的。
橢圓曲線上的兩個基本運算是點加和倍點,它們用來構(gòu)造點乘(標量乘)算法。點乘運算是橢圓曲線機制最核心,也是最耗時的運算。ECC的數(shù)字簽名、加密、密鑰交換算法都要求計算橢圓曲線點乘運算,其計算效率直接決定著簽名/驗證、加/解密運算的速度。
2)SM2算法介紹
SM2算法主要包括數(shù)字簽名算法、密鑰交換協(xié)議和公鑰加密算法三個部分。在使用SM2算法之前,各通信方先設(shè)定相同的公開參數(shù),包括p、n、E和G,其中p是大素數(shù),E是定義在有限域GF(p)上的橢圓曲線,G=(xG,yG)是E上n階的基點。下面主要對SM2的數(shù)字簽名算法、密鑰交換協(xié)議和公鑰加密算法進行介紹。
(1)SM2數(shù)字簽名算法。
在執(zhí)行簽名的生成過程之前,要用密碼雜湊函數(shù)對用戶的可辨別標識、部分橢圓曲線系統(tǒng)參數(shù)和用戶的公鑰雜湊值以及待簽名消息進行壓縮;在驗證過程之前,要用密碼雜湊函數(shù)對用戶的可辨別標識、部分橢圓曲線系統(tǒng)參數(shù)和用戶的公鑰雜湊值及待驗證消息進行壓縮。
GB/T 32918.2-2016規(guī)定了SM2數(shù)字簽名算法,包括數(shù)字簽名生成算法和驗證算法,并給出了數(shù)字簽名與驗證示例及相應(yīng)的流程,可以滿足多種密碼應(yīng)用中的身份鑒別和數(shù)據(jù)完整性、信息來源真實性的安全需求。密鑰生成、簽名生成及驗證過程簡述如下:
①密鑰生成。
a)隨機產(chǎn)生一個秘密變量d,。
b)計算P=dG,并將P作為公鑰公開,d作為私鑰保存。
②簽名生成。
a)簽名者選取隨機數(shù),計算kG=(x1,y1)。
b)計算r=(H(M)+x1)mod n,其中M=ZA||m,ZA是關(guān)于用戶的可辨別標識、部分橢圓曲線系統(tǒng)參數(shù)和用戶的公鑰雜湊值,m是待簽名消息;H為國家密碼管理局核準的雜湊函數(shù),如SM3;若r=0或r+k=n,則重新選取隨機數(shù)k。
c)計算s=(1+d)-1(k-rd)mod n;若s=0,則重新選取隨機數(shù)k,否則,將(r,s)作為簽名結(jié)果。
③簽名驗證。
a)驗證者接收到M和(r,s)后,先檢查且
;然后計算
。
b)計算;判斷r′與r是否相等,若相等則簽名驗證通過,否則,驗證失敗。
(2)SM2密鑰交換協(xié)議。
密鑰交換,又稱密鑰協(xié)商,是兩個用戶A和B通過交互的信息傳遞,用各自的私鑰和對方的公鑰來商定一個只有他們知道的秘密密鑰。這個共享的秘密密鑰通常用在對稱密碼算法中。
GB/T 32918.4-2016規(guī)定了SM2密鑰交換協(xié)議,并給出了密鑰交換與驗證示例及相應(yīng)的流程,可滿足通信雙方經(jīng)過兩次或可選三次信息傳遞過程,計算獲取一個由雙方共同決定的共享秘密密鑰(會話密鑰)。
P A、PB和dA、dB分別表示用戶A、B的公鑰、私鑰,ZA和ZB分別表示A、B的唯一標識,||表示數(shù)據(jù)拼接,&表示兩個整數(shù)的按比特與運算,KDF(ks,klen)是密鑰派生函數(shù):以ks為種子、產(chǎn)生klen比特的偽隨機序列,記w為大于或等于(log2n+1)/2的最小整數(shù)。
用戶A:
(A.1)選取隨機數(shù),計算RA=rAG=(x2,y2)并發(fā)送給用戶B。
用戶B:
(B. 1)選取隨機數(shù),計算RB=rBG=(x3,y3)并發(fā)送給用戶A。
(B. 2)計算xB=2w+(x3&(2w-1))和tB=(dB+xBrB)mod n。
(B.3)驗證接收到的RA是橢圓曲線E上的點,驗證通過后計算xA=2w+(x2&(2w-1))。
(B. 4)計算V=tB(PA+xARA)=(xV,yV);若V是橢圓曲線E上的無窮遠點,則重新選取rB、重新協(xié)商。
(B. 5)計算KB=KDF(xV||yV||ZA||ZB,klen)。
用戶A:
(A.2)計算xA=2w+(x2&(2w-1))和tA=(dA+xArA)mod n。
(A.3)驗證接收到的RB是橢圓曲線上的點,驗證通過后計算xB=2w+(x3&(2w-1))。
(A.4)計算U=tA(PB+xBRB)=(xU,yU);若U是橢圓曲線E上的無窮遠點,則重新選取rA、重新協(xié)商。
(A.5)計算KA=KDF(xU||yU||ZA||ZB,klen)。
通過以上協(xié)商,A、B雙方協(xié)商出共享密鑰KA=KB。作為一個可選項,雙方在密鑰協(xié)商完畢后還可以進行密鑰確認,即確認二者協(xié)商到的密鑰是一致的。
(3)SM2公鑰加密算法。
GB/T 32918.3-2016規(guī)定了SM2公鑰加密算法,并給出了消息加密和解密示例以及相應(yīng)的流程。
下述SM2公鑰加密算法中,M是比特長度為mlen的明文。
①加密算法。
? 選取隨機數(shù),分別計算C1=lG=(x4,y4)和lP=(x5,y5);
? 計算e=KDF(x5||y5,mlen);
? 計算C2=M⊕e和C3=H(x5||M||y5);
? 輸出密文C=C1||C3||C2。
②解密算法。
? 驗證C1是否在橢圓曲線上,計算dC1=(x5,y5);
? 計算e=KDF(x5||y5,mlen);
? 計算M=C2⊕e;
? 計算,并驗證
是否成立,若不成立則報錯退出;
? 輸出明文M。
3)SM2算法的安全性和效率
以SM2公鑰加密算法為例,它的安全性主要體現(xiàn)在三個方面:①算法具備單向性,即未授權(quán)的第三方在未得到私鑰的情況下,從密文計算出明文在計算上是不可行的;②算法產(chǎn)生的明文和密文具備不可區(qū)分性,即惡意第三方對于給定的密文無法區(qū)分出其是由給定的兩個明文中的哪一個加密而來;③密文具備不可延展性,即第三方無法在不解密密文的前提下,通過簡單擴展密文來構(gòu)造出新的合法密文。
與RSA算法相比,SM2算法具有以下優(yōu)勢:
①安全性高。256比特的SM2算法密碼強度已超過RSA-2048(私鑰長度為2048比特的RSA算法),與RSA-3072相當(dāng)。
②密鑰短。SM2算法使用的私鑰長度為256比特,而RSA算法通常至少需要2048比特,甚至更長(如3072比特)。
③私鑰產(chǎn)生簡單。RSA私鑰產(chǎn)生時需要用到兩個隨機產(chǎn)生的大素數(shù),除了需要保證隨機性外,還需要用到素數(shù)判定算法,產(chǎn)生過程復(fù)雜且速度較慢;而SM2私鑰的產(chǎn)生只需要生成一個一定范圍內(nèi)的256比特的隨機數(shù)即可,因此產(chǎn)生過程簡單,存在的安全風(fēng)險也相對較小。
④簽名速度快。同等安全強度下,SM2算法在用私鑰簽名時,速度遠超RSA算法。
4)SM2算法的使用
為規(guī)范SM2算法的使用,2012年我國發(fā)布了GM/T 0009-2012《SM2密碼算法使用規(guī)范》和GM/T 0010-2012《SM2密碼算法加密簽名消息語法規(guī)范》,2017年發(fā)布更新版本國家標準GB/T 35276-2017《信息安全技術(shù)SM2密碼算法使用規(guī)范》和國家標準GB/T 35275-2017《信息安全技術(shù)SM2密碼算法加密簽名消息語法規(guī)范》。這些標準為SM2密碼算法的使用制定了統(tǒng)一的數(shù)據(jù)格式和使用方法。
GM/T 0009-2012定義了SM2算法的密鑰數(shù)據(jù)格式、加密數(shù)據(jù)格式、簽名數(shù)據(jù)格式和密鑰對保護數(shù)據(jù)格式,并對生成密鑰、加密、解密、數(shù)字簽名、簽名驗證、密鑰協(xié)商等計算過程進行了規(guī)范。GM/T 0010-2012定義了使用SM2密碼算法的加密簽名消息語法。
3.SM9標識密碼算法
標識密碼(Identity-Based Cryptography,IBC)是在傳統(tǒng)的公鑰基礎(chǔ)設(shè)施(Public Key Infrastructure,PKI)基礎(chǔ)上發(fā)展而來的,除了具有PKI的技術(shù)優(yōu)點外,主要解決了在具體安全應(yīng)用中PKI需要大量交換數(shù)字證書的問題,使安全應(yīng)用更加易于部署和使用。IBC使用的是公鑰密碼體制,加密與解密使用兩套不同的密鑰,每個人的公鑰就是他的身份標識,如E-mail地址,因此IBC中的密鑰管理相對簡單。
密碼學(xué)家Shamir在1984年提出了IBC的概念。在標識密碼系統(tǒng)中,用戶的私鑰由密鑰生成中心根據(jù)主密鑰和用戶標識計算得出,用戶的公鑰由用戶標識唯一確定,用戶不需要通過第三方保證其公鑰來源的真實性。與基于證書的公鑰密碼系統(tǒng)相比,標識密碼系統(tǒng)中的密鑰管理環(huán)節(jié)可以得到適當(dāng)簡化。由于標識密碼系統(tǒng)的密鑰生成中心可計算出用戶私鑰,因此需要保證密鑰生成中心是完全值得信任的。
1999年,Negishi、Sakai和Kasahara等人提出了用橢圓曲線對構(gòu)造基于標識的密鑰共享方案。2001年,Boneh和Franklin及Sakai、Ohgishi和Kasahara等人獨立提出了用橢圓曲線對構(gòu)造的標識公鑰加密算法。這些工作引發(fā)了標識密碼的新發(fā)展,出現(xiàn)了一批用橢圓曲線對實現(xiàn)的標識密碼算法,其中包括數(shù)字簽名算法、密鑰交換協(xié)議、密鑰封裝機制和公鑰加密算法等。
2016年,我國發(fā)布了標識密碼算法標準GM/T 0044-2016《SM9標識密碼算法》。同SM2數(shù)字簽名算法一起,SM9數(shù)字簽名算法也在2017年被ISO采納,成為國際標準ISO/IEC 14888-3的一部分。
1)SM9算法介紹
SM9密碼算法標準共分為5個部分,分別為:
? GM/T 0044.1-2016《SM9標識密碼算法第1部分:總則》;
? GM/T 0044.2-2016《SM9標識密碼算法第2部分:數(shù)字簽名算法》;
? GM/T 0044.3-2016《SM9標識密碼算法第3部分:密鑰交換協(xié)議》;
? GM/T 0044.4-2016《SM9標識密碼算法第4部分:密鑰封裝機制和公鑰加密算法》;
? GM/T 0044.5-2016《SM9標識密碼算法第5部分:參數(shù)定義》。
(1)SM9算法采用的基本技術(shù)。
SM9密碼算法涉及有限域和橢圓曲線、雙線性對及安全曲線、橢圓曲線上雙線性對的運算等基本知識和技術(shù)。SM9密碼算法的應(yīng)用與管理不需要數(shù)字證書、證書庫或密鑰庫。
(2)SM9數(shù)字簽名算法。
用橢圓曲線對實現(xiàn)的基于標識的數(shù)字簽名算法包括數(shù)字簽名生成算法和驗證算法。簽名者持有一個標識和一個相應(yīng)的私鑰,該私鑰由密鑰生成中心通過主私鑰和簽名者的標識結(jié)合產(chǎn)生。簽名者用自身私鑰對數(shù)據(jù)產(chǎn)生數(shù)字簽名,驗證者用簽名者的標識生成其公鑰,驗證簽名的可靠性,即驗證發(fā)送數(shù)據(jù)的完整性、來源的真實性和數(shù)據(jù)發(fā)送者的身份。
(3)SM9密鑰交換協(xié)議。
該協(xié)議可以使通信雙方通過對方的標識和自身的私鑰經(jīng)兩次或可選三次信息傳遞過程,計算獲取一個由雙方共同決定的共享秘密密鑰。該秘密密鑰可作為對稱密碼算法的會話密鑰,協(xié)議中可以實現(xiàn)密鑰確認。
參與密鑰交換的發(fā)起方用戶A和響應(yīng)方用戶B各自持有一個標識和一個相應(yīng)的私鑰,私鑰均由密鑰生成中心通過主私鑰和用戶的標識結(jié)合產(chǎn)生。用戶A和用戶B通過交互的信息傳遞,用標識和各自的私鑰來商定一個只有他們知道的秘密密鑰,用戶雙方可以通過可選項實現(xiàn)密鑰確認。這個共享的秘密密鑰通常用在某個對稱密碼算法中。
(4)SM9密碼密鑰封裝機制和加密算法。
密鑰封裝機制使得封裝者可以產(chǎn)生和加密一個秘密密鑰給目標用戶,而唯有目標用戶可以解封裝該秘密密鑰,并把它作為進一步的會話密鑰。用橢圓曲線對實現(xiàn)基于標識的密鑰封裝機制,封裝者利用解封裝用戶的標識產(chǎn)生并加密一個秘密密鑰給對方,解封裝用戶則用相應(yīng)的私鑰解封裝該秘密密鑰。用橢圓曲線對實現(xiàn)的基于標識的加密與解密算法,使消息發(fā)送者可以利用接收者的標識對消息進行加密,唯有接收者可以用相應(yīng)的私鑰對該密文進行解密,從而獲取消息。
(5)SM9密碼算法參數(shù)定義。
SM9密碼算法使用256比特的Barreto-Naehrig(BN)曲線。該算法標準的第5部分定義了曲線參數(shù),并給出了數(shù)字簽名算法、密鑰交換協(xié)議、密鑰封裝機制、公鑰加密算法示例。
2)SM9算法的安全性和效率
目前,沒有發(fā)現(xiàn)明顯影響雙線性對密碼系統(tǒng)應(yīng)用的安全性風(fēng)險。SM9密碼算法能夠避免弱橢圓曲線的選取問題,并抵抗常見的針對橢圓曲線的攻擊方式,安全性遠遠高于同類算法。例如,SM9采用256比特素域上的橢圓曲線時,離散對數(shù)的復(fù)雜性約為2128次基本運算,理論上是同類橢圓曲線算法的272倍,破解難度大大增加,即安全性大幅提高。
SM9的安全性也和嵌入次數(shù)有關(guān),即嵌入次數(shù)越多安全性越高,雙線性對的計算越困難。目前SM9采用了嵌入次數(shù)適中且達到安全性標準的橢圓曲線。
4.國外公鑰密碼算法RSA介紹
常見的國外公鑰密碼算法有RSA、橢圓曲線數(shù)字簽名算法(Elliptic Curve Digital Signature Algorithm,ECDSA)等。下面重點對RSA進行介紹。
1)RSA算法簡介
RSA算法基于大整數(shù)因子分解難題設(shè)計,因其原理清晰、結(jié)構(gòu)簡單,是第一個投入使用,也是迄今為止應(yīng)用最廣泛的公鑰密碼算法,可用于數(shù)字簽名、安全認證等。1992年,RSA算法納入了國際電信聯(lián)盟制定的X.509系列標準。RSA算法的公鑰相當(dāng)于兩個素數(shù)的乘積,而私鑰則相當(dāng)于兩個獨立的素數(shù)。
RSA算法加解密過程如下:
(1)密鑰生成。
選取兩個隨機的大素數(shù)p和q,計算n=pq和φ(n)=(p-1)(q-1);
選擇隨機數(shù)e,滿足:e與φ(n)互素;
計算d=e-1mod φ(n);
公開(n,e)作為公鑰,保留(d,p,q)作為私鑰。
(2)加密過程。
對于明文P,計算密文C=Pemod n。
(3)解密過程。
對于密文C,計算明文P=Cdmod n。
在實際使用中e的取值很小,有效長度不超過32比特,甚至在很多時候,e的值為65537(十六進制表示為0x10001)。而d的有效長度接近于n的有效長度。所以,RSA算法的加密(或簽名驗證)計算速度要比解密(或簽名)計算速度快許多倍。
在實際應(yīng)用RSA算法時,應(yīng)確保兩個素數(shù)是隨機產(chǎn)生的,否則會導(dǎo)致安全風(fēng)險。例如,如果計算兩個不同的乘積n時用到了相同的素數(shù),則通過計算公因子的方法就可以將n進行因子分解,從而破解算法。2013年2月,研究人員發(fā)現(xiàn)在700萬個實驗樣本中有2.7萬個公鑰并不是按隨機理論產(chǎn)生的,每1000個公鑰中可能會有兩個公鑰存在安全隱患。
2)算法安全性和效率
需要注意的是,1024比特及以下密鑰長度(n的長度)的RSA算法目前已經(jīng)不推薦使用。在當(dāng)前應(yīng)用中,為保證安全,n應(yīng)該至少選用2048比特,即選用RSA-2048算法。在效率方面,由于達到相當(dāng)安全強度時,RSA密鑰長度要遠長于ECC算法(如SM2),因此私鑰計算的執(zhí)行效率(如計算數(shù)字簽名)要比ECC算法慢數(shù)倍。
1.4.3 密碼雜湊算法
密碼雜湊算法也稱作“散列算法”或“哈希算法”,現(xiàn)在的密碼行業(yè)標準統(tǒng)稱其為密碼雜湊算法,簡稱“雜湊算法”或“雜湊函數(shù)”。密碼雜湊算法對任意長度的消息進行壓縮,輸出定長的消息摘要或雜湊值,該過程表示為:
h=H(M)
式中,M是輸入消息;h是經(jīng)過雜湊算法H處理后的雜湊值,其長度通常是固定的,取決于所使用的雜湊算法。
一般來說,雜湊算法具有如下性質(zhì):
①抗原像攻擊(單向性)。為一個給定的輸出找出能映射到該輸出的一個輸入在計算上是困難的,即給定雜湊值h,找到消息M使得h=H(M)是困難的。雜湊函數(shù)是單向的,從消息計算雜湊值很容易,但從雜湊值推出消息是困難的。
②抗第二原像攻擊(弱抗碰撞性)。為一個給定的輸入找出能映射到同一個輸出的另一個輸入在計算上是困難的,即給定消息M1,找到另外一個消息M2使得H(M2)=H(M1)是困難的。輸入的任何微小變化都會使雜湊結(jié)果有很大不同。
③強抗碰撞性。要發(fā)現(xiàn)不同的輸入映射到同一輸出在計算上是困難的,即找到兩個消息M1,M2(M1不同于M2)使得H(M1)=H(M2)是困難的。
1.密碼雜湊算法的結(jié)構(gòu)
雜湊算法有多種構(gòu)造方式,常用的是Merkle-Damg?rd結(jié)構(gòu)(簡稱M-D結(jié)構(gòu))、海綿結(jié)構(gòu)。MD5、SHA-1、SHA-2和我國的SM3都采用了M-D結(jié)構(gòu),SHA-3采用的是海綿結(jié)構(gòu)。下面主要對M-D結(jié)構(gòu)進行簡要介紹。
M-D結(jié)構(gòu),先對經(jīng)過填充后的消息進行均勻的分組,而后消息分組順序進入壓縮函數(shù)F,如圖1-14所示。壓縮函數(shù)F先由初始向量進行初始化,結(jié)合上一組消息的結(jié)果和本組消息產(chǎn)生一個中間值,最后一個壓縮函數(shù)的結(jié)果即是最終的雜湊值。這樣,很長的消息也很容易被壓縮到一個固定的比特長度。它的安全性取決于壓縮函數(shù)的安全性。研究表明,如果壓縮函數(shù)具有抗碰撞能力,那么雜湊算法也具有抗碰撞能力(其逆不一定為真)。因此,要設(shè)計安全雜湊函數(shù),最重要的是設(shè)計具有抗碰撞能力的壓縮函數(shù)。

圖1-14 M-D結(jié)構(gòu)
2.密碼雜湊算法的應(yīng)用
密碼雜湊算法的直接應(yīng)用就是產(chǎn)生消息摘要,進一步可以檢驗數(shù)據(jù)的完整性,被廣泛應(yīng)用于各種不同的安全應(yīng)用和網(wǎng)絡(luò)協(xié)議中。例如,用戶收到消息后,計算其雜湊值,并與發(fā)送方提供的結(jié)果做比對,如果二者一致,則基本認為消息在傳送過程中沒有遭到篡改(由于“抗第二原像攻擊”的性質(zhì))。需要注意的是,單獨使用雜湊算法并不能保證數(shù)據(jù)的完整性,因為在傳輸信道不安全的情況下,攻擊者可以將消息和雜湊值一同篡改,即在修改或替換消息后重新計算一個雜湊值。因此,用于完整性保護時,雜湊算法常常與密鑰一同使用,生成的雜湊值稱為MAC,這樣的雜湊算法稱為帶密鑰的雜湊算法(Keyed-hash Message Authentication Code,HMAC)。此外,雜湊算法也與公鑰密碼算法一同使用來產(chǎn)生數(shù)字簽名。
3.SM3密碼雜湊算法
我國商用密碼標準中的密碼雜湊算法是SM3算法。SM3于2012年發(fā)布為密碼行業(yè)標準GM/T 0004-2012《SM3密碼雜湊算法》,并于2016年轉(zhuǎn)化為國家標準GB/T 32905-2016《信息安全技術(shù)SM3密碼雜湊算法》。2018年10月,SM3算法正式成為國際標準。
1)SM3算法介紹
SM3算法采用M-D結(jié)構(gòu),輸入消息(長度L<264)經(jīng)過填充、擴展、迭代壓縮后,生成長度為256比特的雜湊值。SM3算法的實現(xiàn)過程主要包括填充分組和迭代壓縮等步驟。
(1)填充分組。
填充分組是將任意長度的輸入消息在尾部按一定規(guī)則填補至512比特的整數(shù)倍長度,再將填充好的輸入串按512比特長度分為若干組的過程。
對于輸入長度為L的消息,首先在消息末尾填充比特“1”,然后填充k個“0”,k是使得L+k+1=448mod 512的最小非負整數(shù),最后填充64比特的二進制串,該二進制串為長度L的二進制表示。
例如,對于長度L=24的輸入01100001 01100010 01100011,填充結(jié)果如圖1-15所示。

圖1-15 SM3雜湊算法填充范例
將填充完成后的消息輸入消息分成n個長度為512比特的分組:B0,B1,…,Bn-1,其中n=(L+k+65)/512。
(2)消息擴展。
每個512比特的輸入消息分組在迭代壓縮輸入壓縮函數(shù)前,需先進行消息擴展,生成的132個消息字W0,W1,…,W67和作為壓縮函數(shù)的輸入。其中W0,W1,…,W15就是輸入的消息分組,其余擴展的消息字表達式為:


式中,<<<表示循環(huán)左移;P1是消息擴展中的置換函數(shù),表達式為:

(3)迭代過程。
令壓縮函數(shù)為CF,每一次迭代過程的輸入由一個512比特的輸入消息分組和上一次迭代過程的256比特輸出組成,每一次迭代過程的輸出長度為256比特。執(zhí)行一次SM3算法,需要進行n次迭代,迭代過程為Vi+1=CF(Bi,Vi),0≤i≤n-1,其中,初始迭代值V0是規(guī)定的256比特的常量IV。當(dāng)全部n個消息輸入分組都經(jīng)過迭代壓縮后,所得到的Vn就是SM3雜湊算法輸出的256比特雜湊值。
(4)壓縮函數(shù)。
SM3算法中的單次迭代壓縮過程如圖1-16所示,令A、B、C、D、E、F、G、H為32比特變量寄存器,SS1、SS2、TT1、TT2為中間變量。單次迭代過程包含64輪迭代的壓縮,函數(shù)CF執(zhí)行過程如下:


圖1-16 SM3算法中的單次迭代壓縮過程
其中,FFj、GGj是布爾函數(shù),Tj表示每輪的常數(shù),P0是壓縮函數(shù)中的置換函數(shù),這些函數(shù)的表達式分別為:



式中,∧、∨、分別表示按位的與、或、非運算。
2)SM3算法的安全性和效率
SM3算法在M-D結(jié)構(gòu)的基礎(chǔ)上,新增了16步全異或操作、消息雙字介入、加速雪崩效應(yīng)的P置換等多種設(shè)計技術(shù),能夠有效避免高概率的局部碰撞,有效抵抗強碰撞性的差分分析、弱碰撞性的線性分析和比特追蹤等密碼分析方法。公開文獻表明,SM3算法能夠抵抗目前已知的攻擊方法,具有較高的安全冗余。在實現(xiàn)上,SM3算法運算速率高,靈活易用,支持跨平臺的高效實現(xiàn),具有較好的實現(xiàn)效能。
SM3算法在結(jié)構(gòu)上和SHA-256相似,消息分組大小、迭代輪數(shù)、輸出長度均與SHA-256相同。但相比于SHA-256,SM3算法增加了多種新的設(shè)計技術(shù),從而在安全性和效率上具有優(yōu)勢。在保障安全性的前提下,SM3算法的綜合性能指標與SHA-256在同等條件下相當(dāng)。
3)HMAC
HMAC是利用雜湊算法,將一個密鑰和一個消息作為輸入,生成一個消息摘要作為輸出。HMAC可用作數(shù)據(jù)完整性檢驗,檢驗數(shù)據(jù)是否被非授權(quán)修改;也可用作消息鑒別,保證消息源的真實性。例如,IPSec和SSL協(xié)議中均用到了HMAC,將其用于完整性校驗和數(shù)據(jù)源身份鑒別。我國國家標準GB/T 15852.2-2012《信息技術(shù)安全技術(shù)消息鑒別碼第2部分:采用專用雜湊函數(shù)的機制》對HMAC算法進行了規(guī)范。關(guān)于采用分組密碼和泛雜湊函數(shù)的MAC產(chǎn)生機制分別見GB/T 15852.1-2008和GB/T 15852.3-2019。
HMAC計算時調(diào)用了兩次完整的雜湊函數(shù)H,對于密鑰K、消息D,計算公式如下:

其中,m表示MAC長度,應(yīng)是一個正整數(shù)且不大于雜湊值的比特長度;函數(shù)MSBm(X)表示取比特串X最左邊m比特。密鑰K的長度為k:為消息分組比特長度,L2為雜湊值的比特長度。對于SM3,L1=512,L2=256。
在HMAC計算過程中,首先對密鑰進行填充,在密鑰K的右側(cè)填充L1-k個0,所得的長度為L1的比特串為。將十六進制的值“36”(二進制表示為“00110110”)重復(fù)L1/8次連接起來,所得的比特串記作IPAD,然后將
和比特串IPAD相異或,將異或值和待雜湊的消息D相連接,并將連接后的值進行第一次雜湊運算。將十六進制的值“5C”(二進制表示為“01011100”)重復(fù)L1/8次連接起來,所得比特串記作OPAD,然后將
和比特串OPAD相異或,將異或值與第一次雜湊值相連接,并將連接后的值作為第二次雜湊運算的輸入。取第二次雜湊運算輸出的最左邊m比特,作為HMAC的輸出。
4.國外雜湊算法介紹
常見的國外雜湊算法有MD5密碼雜湊算法和安全雜湊算法(Secure Hash Algorithm,SHA)系列算法。SHA系列算法主要包括SHA-0、SHA-1、SHA-2和SHA-3。
MD5算法:MD5是由麻省理工學(xué)院計算機科學(xué)實驗室的Rivest提出的,其前身有MD2、MD4等密碼算法。MD5算法可用于數(shù)字簽名、完整性保護、安全認證、口令保護等。MD5算法首先將輸入的信息劃分成若干個512比特的分組,再將每個分組劃分成16個32比特的子分組,經(jīng)一系列變換后,最終輸出128比特的消息摘要。根據(jù)王小云教授提出的分析方法,2005年國際密碼學(xué)家給出了MD5算法的碰撞實例,后來又成功偽造了SSL數(shù)字證書。目前,一部智能手機僅用30秒就可以找到MD5算法的碰撞。這些研究成果的碰撞案例表明MD5算法已不再適合實際應(yīng)用。
SHA-1算法:SHA-1算法是1995年由美國國家安全局(NSA)和NIST提出的標準算法。SHA-1設(shè)計思想基于MD4算法,在很多方面也與MD5算法有相似之處,其輸入長度應(yīng)小于264比特,消息摘要長度為160比特。2005年,我國王小云教授首次給出了SHA-1的碰撞攻擊,復(fù)雜度為269次運算。2017年2月,荷蘭計算機科學(xué)與數(shù)學(xué)研究中心和谷歌研究人員合作找到了世界首例針對SHA-1算法的碰撞實例,生成了兩個SHA-1算法消息摘要完全相同但內(nèi)容截然不同的文件,針對SHA-1算法的攻擊從理論變?yōu)楝F(xiàn)實,繼續(xù)使用SHA-1算法存在重大安全風(fēng)險,這標志著SHA-1算法繼MD5算法后也將退出歷史舞臺。2017年4月,國家密碼管理局發(fā)布了使用SHA-1密碼算法的風(fēng)險警示,要求相關(guān)單位遵循密碼國家標準和行業(yè)標準,全面支持和應(yīng)用SM3等密碼算法。
SHA-2算法:SHA-2算法是由NSA和NIST于2001年提出的標準算法。SHA-2算法雖然也是基于M-D結(jié)構(gòu),但是增加了很多重大變化以提升安全性。SHA-2算法支持224、256、384和512比特四種長度的輸出,包含6個算法:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。其 中,SHA-256和SHA-512是主要算法,其他算法都是在這兩者基礎(chǔ)上輸入不同初始值,并對輸出進行截斷。目前沒有發(fā)現(xiàn)對SHA-2算法的有效攻擊。
SHA-3算法:與MD5、SHA-1、SHA-2算法等采用經(jīng)典M-D結(jié)構(gòu)不同,SHA-3算法在設(shè)計上采用了新的結(jié)構(gòu)——“海綿”結(jié)構(gòu)。與SHA-2算法類似,SHA-3算法也包含多個算法:SHA3-224、SHA3-256、SHA3-384、SHA3-512、SHAKE128、SHAKE256。
1.4.4 密碼算法分析概要
現(xiàn)代密碼學(xué)有一個著名的假設(shè),稱為柯克霍夫斯(Kerckhoffs)原則:評估一個密碼算法安全性時,必須假定攻擊者不知道密鑰,但知道密碼算法的所有細節(jié)。基于此準則,密碼算法的安全性應(yīng)該基于密鑰的保密(即密鑰不被攻擊者所知),而不是所用算法的隱蔽性。
密碼算法分析的目的是通過各種攻擊方式,找到密碼算法的弱點或者不完美的地方。密碼分析和密碼編碼是對立統(tǒng)一、互不可缺的兩個方面。密碼編碼為密碼分析提供對象,并且以抵抗現(xiàn)有的分析方法為設(shè)計目標;密碼分析為密碼編碼提供表示安全強度的具體數(shù)據(jù),同時促進密碼編碼不斷發(fā)展。
1.基本概念
以加密算法為例,按照攻擊者獲取信息的能力,可以將密碼分析劃分為唯密文攻擊、已知明文攻擊、選擇明文攻擊和選擇密文攻擊四種方式。
(1)唯密文攻擊。攻擊者只能獲得密文的信息。這是在公開的網(wǎng)絡(luò)中能獲得的最現(xiàn)實的能力。
(2)已知明文攻擊。攻擊者擁有某些密文以及相應(yīng)的明文。例如,假設(shè)攻擊者截獲了一份加密的通信稿,并在第二天看到了解密后的通信稿。對許多弱密碼系統(tǒng)來說,知道一些明密文對就足以找到密鑰了。即使是對于第二次世界大戰(zhàn)中使用的恩尼格瑪密碼機這樣比較強的密碼系統(tǒng),這種信息對破譯恩尼格瑪密碼機也起到了很大的作用。
(3)選擇明文攻擊。攻擊者有接觸加密機器的機會,不能打開機器找到密鑰,但可以加密大量經(jīng)過精心挑選的明文,然后利用所得的密文推斷密鑰的信息或試圖對其他密文進行解密。
(4)選擇密文攻擊。攻擊者有接觸解密機器的機會,對選擇的密文進行解密操作,然后試著用所得結(jié)果推斷密鑰或試圖對其他密文進行解密。
2.對稱密碼的分析
自20世紀80年代差分攻擊技術(shù)提出以來,差分類攻擊和線性類攻擊便成為分析對稱密碼最有效的分析方法。基于差分攻擊演化出一系列密碼分析方法,包括相關(guān)密鑰差分攻擊、截斷差分攻擊、統(tǒng)計飽和攻擊、不可能差分攻擊、高階差分攻擊、飛去來器攻擊、多差分分析和線性差分分析、多線性分析和線性區(qū)分攻擊等。以分組密碼分析為例,攻擊者一般是先構(gòu)造一個區(qū)分器,將分組密碼和隨機置換區(qū)分開,然后利用這一區(qū)分器,進行密鑰恢復(fù)攻擊。通常對于全輪的分組密碼算法,有效的攻擊方法是幾乎不可能的,一般從分析低輪的算法入手,一步步向全輪算法逼近。針對流密碼的攻擊包括相關(guān)攻擊、猜測確定攻擊等。
3.公鑰密碼的分析
公鑰密碼的設(shè)計一般依賴于計算困難的數(shù)學(xué)問題。這些問題包括大整數(shù)因子分解、離散對數(shù)、格中向量問題、子集和問題、線性糾錯碼譯碼、多變量多項式方程組求解、組合群論及橢圓曲線上的雙線性Di?e-Hellman問題等。在現(xiàn)實世界中,這些問題被證明或公認是實際難解的,它們可以提供正確設(shè)計的公鑰密碼系統(tǒng)理論上的安全性。公鑰密碼的設(shè)計一般都可以做到可證明安全,即證明了如果底層的數(shù)學(xué)問題是困難的,上層的公鑰密碼方案也是安全的。因此,對公鑰密碼分析多集中于對底層困難問題的分析,以及上層方案實際安全性的分析。
格理論和算法在密碼學(xué)領(lǐng)域有著廣泛的應(yīng)用,在公鑰密碼分析領(lǐng)域也是一種很強大的工具。LLL算法等格基約化算法的提出,極大推動了對公鑰密碼算法的分析,特別是對RSA、DSA/ECDSA等算法的分析。
4.雜湊函數(shù)的分析
雜湊函數(shù)和分組密碼的分析方法在很多時候都是相通的,分析雜湊函數(shù)經(jīng)常用到的攻擊方法主要包括差分攻擊、模差分攻擊、中間相遇攻擊等,都是圍繞雜湊函數(shù)的三個性質(zhì)開展的。
5.側(cè)信道分析
上述對密碼算法的分析都是基于數(shù)學(xué)理論的分析方法,其特點是假定密碼算法在一個封閉、可信的計算環(huán)境里運行,攻擊者既不能觀察運算過程中的內(nèi)部狀態(tài)也不能修改或干擾它。除此之外,有針對密碼的實現(xiàn)方式和應(yīng)用方式提出的側(cè)信道分析,這種分析是基于物理實現(xiàn)的分析方法。在實際應(yīng)用中,密碼系統(tǒng)會通過物理裝置泄露一些信息,如能量消耗、電磁輻射、運行時間等。由于無須實施入侵或破解密碼算法就可以分析獲得密鑰等敏感數(shù)據(jù),側(cè)信道分析對密碼算法實現(xiàn)的實際安全構(gòu)成了巨大威脅,密碼實現(xiàn)的抵抗側(cè)信道分析能力也成為密碼產(chǎn)品檢測中重要的考量指標。
- 信息安全導(dǎo)論(在線實驗+在線自測)
- Web漏洞分析與防范實戰(zhàn):卷1
- INSTANT Netcat Starter
- 黑客攻防與電腦安全從新手到高手(微視頻+火力升級版)
- 網(wǎng)絡(luò)安全意識導(dǎo)論
- 計算機病毒分析與防范大全(第3版)
- 等級保護測評理論及應(yīng)用
- 計算機病毒原理與防范(第2版)
- 工業(yè)控制網(wǎng)絡(luò)安全技術(shù)
- Testing and Securing Android Studio Applications
- Spring Security(Third Edition)
- CTF競賽權(quán)威指南(Pwn篇)
- API安全技術(shù)與實戰(zhàn)
- 數(shù)據(jù)安全與流通:技術(shù)、架構(gòu)與實踐
- Mastering Python for Networking and Security