楊元原博士國密課堂 · 第二期 | 商用密碼應(yīng)用安全性評估:Part2. 商用密碼算法
本期主講人
楊元原 博士 國家網(wǎng)絡(luò)與信息系統(tǒng)安全產(chǎn)品質(zhì)量監(jiān)督檢驗中心(公安部第三研究所)商用密碼應(yīng)用安全性評估負責(zé)人
對稱密碼算法
(1)分組密碼算法及工作模式
(1.1)分組密碼算法
SM1密碼算法:SM1算法是國家密碼管理局認可的一種分組密碼算法,分組長度、密鑰長度都是128bit,但是算法不公開,僅以IP核的形式存在于芯片中,需要通過加密芯片的接口進行調(diào)用。
采用該算法的密碼產(chǎn)品包括安全芯片、智能IC卡、智能密碼鑰匙、加密卡、加密機等,該算法廣泛應(yīng)用于電子政務(wù)、電子商務(wù)及國民經(jīng)濟的各個領(lǐng)域。
SM4密碼算法:算法采用32輪非線性迭代結(jié)構(gòu)。解密算法與加密算法的結(jié)構(gòu)相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。
SM4密碼算法于2012年3月21日發(fā)布,相關(guān)的標(biāo)準(zhǔn)包括:《GM/T 0002-2012 SM4分組密碼算法》、《GB/T 32907-2016 信息安全技術(shù) SM4分組密碼算法》。該算法的基本原理如下圖所示(圖1):

(圖1)
算法采用了典型的Feistel密碼結(jié)構(gòu),采用32輪非線性迭代結(jié)構(gòu),以字(32位)為單位進行加密運算,每一次迭代運算均為一輪變換函數(shù)F。
算法原理如下圖所示(圖2):
(圖2)
SM7對稱密碼:SM7算法是一種分組密碼算法,分組長度為128比特,密鑰長度為128比特。SM7的算法目前沒有公開發(fā)布。SM7適用于非接IC卡應(yīng)用,包括身份識別類應(yīng)用(門禁卡、工作證、參賽證),票務(wù)類應(yīng)用(大型賽事門票、展會門票),支付與通卡類應(yīng)用(積分消費卡、校園一卡通、企業(yè)一卡通、公交一卡通)。
(1.2)分組密碼工作模式
即使有了安全的分組密碼算法,也需要采用適當(dāng)?shù)墓ぷ髂J絹黼[蔽明文的統(tǒng)計特性、數(shù)據(jù)的格式等,以提高整體的安全性,降低刪除、重放、插入和偽造成功的機會。因此,分組密碼有不同的工作模式,包括電碼本(ECB)模式、分組鏈接(CBC)模式、密碼反饋(CFB)模式、輸出反饋(OFB)模式、計數(shù)器(CTR)模式、分組連接(BC)模式等工作模式。分組密碼的工作模式依據(jù)的標(biāo)準(zhǔn)為:《GB/T 17964-2008 信息安全技術(shù) 分組密碼算法的工作模式》。其中比較常見的是電碼本模式和分組鏈接模式。
電碼本模式:電碼本模式直接利用加密算法分別對分組數(shù)據(jù)組加密。在給定的密鑰下同一明文組總產(chǎn)生同樣的密文組。這種方式會暴露明文數(shù)據(jù)的格式和統(tǒng)計特征,由于重要的數(shù)據(jù)常常在同一位置上出現(xiàn),使密碼分析者可以對其進行統(tǒng)計分析、重傳和代換攻擊(圖3)。
(圖3)
分組鏈接模式:在CBC模式中,首先將明文分組與前一個密文分組進行XOR運算,然后再進行加密。密文分組像鏈條一樣相互連接在一起(圖4)。
(圖4)
各種工作模式的比較如下表所示(圖5):

(圖5)
(1.2)SM4密碼算法示例
SM4密碼算法的分組長度為128比特,密鑰長度為128比特。但是由于密鑰需要保密,因此SM4密碼算法無法從正向進行驗證,只能通過特征比對(如加密數(shù)據(jù)長度)的方式進行算法驗證,并結(jié)合其他證據(jù),如密碼機的算法調(diào)用日志、密碼機Wireshark數(shù)據(jù)包抓包等,來驗證算法的合規(guī)性。由于SM4密碼算法的分組長度為128比特,因此SM4密文長度必然是128比特的倍數(shù),如下圖所示(圖6)。
(圖6)
(2)流密碼算法
(2.1)祖沖之算法(ZUG)
祖沖之密碼算法主要用于下一代移動通信中,可用來對語音或視頻數(shù)據(jù)加密。祖沖之密碼算法(ZUC)的名字源于我國古代數(shù)學(xué)家祖沖之,能夠?qū)崿F(xiàn)加密和完整性保護。ZUC算法由3個基本部分組成,依次為:1、比特重組;2、非線性函數(shù)F;3、線性反饋移位寄存器(LFSR)。具體算法可查看《GM/T 0001.1-2012 祖沖之序列密碼算法:第1部分:算法描述》、《GM/T 0001.2-2012 祖沖之序列密碼算法:第2部分:基于祖沖之算法的機密性算法》、《GM/T 0001.3-2012 祖沖之序列密碼算法:第3部分:基于祖沖之算法的完整性算法》等標(biāo)準(zhǔn)。
非對稱密碼算法
(1)SM2密碼算法
(1.1)SM2密碼算法原理
SM2算法采用ECC橢圓曲線密碼機制,但在簽名、密鑰交換方面不同于ECDSA、ECDH等國際標(biāo)準(zhǔn),而是采取了更為安全的機制。國密SM2算法標(biāo)準(zhǔn)《GB/T 32918 信息安全技術(shù) SM2橢圓曲線公鑰密碼算法》共包括5個部分,第1部分為總則,主要介紹了ECC基本的算法描述,包括素數(shù)域和二元擴域兩種算法描述;第2部分為數(shù)字簽名算法,包括數(shù)字簽名生成算法和驗證算法;第3部分為密鑰交換協(xié)議,可滿足通信雙方經(jīng)過兩次或三次信息傳遞,計算獲取一個共享秘密密鑰;第4部分為公鑰加密算法,包括加密算法和解密算法;第5部分為參數(shù)定義,主要規(guī)定了SM2橢圓曲線公鑰密碼算法的曲線參數(shù)。
SM2加密算法:根據(jù)《GB/T 32918.4-2016信息安全技術(shù) SM2橢圓曲線公鑰密碼算法 第4部分:公鑰加密算法》的要求,SM2加密算法流程如下。
設(shè)需要發(fā)送的消息為比特串,為的比特長度。為了對明文進行加密,加密方應(yīng)實現(xiàn)以下運算步驟:(圖7)。
(圖7)
SM2簽名算法:根據(jù)《GB/T 32918.2-2016信息安全技術(shù) SM2橢圓曲線公鑰密碼算法 第2部分:數(shù)字簽名算法》的要求,SM2簽名算法流程如下。
設(shè)待簽名的消息為,為了獲取消息M的數(shù)字簽名,簽名方A應(yīng)實現(xiàn)以下運算步驟(圖8):
(圖8)
(1.2)SM2密碼算法示例
SM2公鑰加密算法驗證:根據(jù)SM2加密算法的工作原理,SM2加密算法每次加密數(shù)據(jù)時都會產(chǎn)生隨機數(shù)k,而k的值外部無法獲知,因此無法對算法進行正向驗證。因此,只能通過特征比對(加密數(shù)據(jù)長度)的方式進行算法驗證,并結(jié)合其他證據(jù),如密碼機的算法調(diào)用日志、密碼機Wireshark數(shù)據(jù)包抓包等,來驗證算法的合規(guī)性。

此外,由于每次加密都會生成不同的隨機數(shù)k,因此,即使相同的明文,每次生成的密文也不相同。
根據(jù)《GB/T 36322-2018 信息安全技術(shù) 密碼設(shè)備應(yīng)用接口規(guī)范》要求,ECC加密數(shù)據(jù)的結(jié)構(gòu)為(圖9):
(圖9)
在示例中,待加密的明文數(shù)據(jù)為:123。
在密文中,X分量和Y分量的值為:
000000000000000000000000000000000000000000000000000000000000000016B929CCC3A2C98C688784A89CF85B8DEA40EA5227D81C6118ED22C0789D88C30000000000000000000000000000000000000000000000000000000000000000180B26547035F156C28921E7AFBB32AF5975DEC56B485E26879B680116E92F4A,長度為1024字節(jié)。
明文的雜湊值為:
34D08BB25CA811482A4B3B51B491DFDA0569A9D6A7C50651313ED5F134BC6A4B,長度為256字節(jié)。
密文數(shù)據(jù)長度為:
03000000
密文數(shù)據(jù)為:
96E7E200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000。
SM2簽名算法驗證:由于待簽名數(shù)據(jù)、SM2公鑰和簽名數(shù)據(jù)都能夠獲取,因此可以使用合規(guī)的工具,對SM2簽名算法進行正向驗證。
根據(jù)《GB/T 36322-2018 信息安全技術(shù) 密碼設(shè)備應(yīng)用接口規(guī)范》要求,ECC簽名數(shù)據(jù)的結(jié)構(gòu)為(圖10):
(圖10)
(2)SM9密碼算法
SM9是基于標(biāo)識密碼算法,標(biāo)準(zhǔn)為《GM/T 0044 SM9 標(biāo)識密碼算法》,共包含5個部分,包括總則、數(shù)字簽名算法、密鑰交換協(xié)議、密鑰封裝機制和公鑰加密算法、參數(shù)定義。SM9不同于傳統(tǒng)意義上的SM2算法,它利用橢圓曲線對的雙線性性質(zhì),構(gòu)造出安全性和實現(xiàn)效率兼顧的標(biāo)識密碼,也就是公鑰與用戶的身份標(biāo)識相關(guān),省去了證書管理。
SM9數(shù)字簽名算法適用于接收者通過簽名者的標(biāo)識驗證數(shù)據(jù)的完整性和數(shù)據(jù)發(fā)送者的身份,也適用于第三方確定簽名及所簽數(shù)據(jù)的真實性。密鑰交換協(xié)議可以使用通信雙方通過雙方的標(biāo)識和自身的私鑰經(jīng)過兩次或者可選三次信息傳遞過程,計算獲取一個由雙方共同決定的共享秘密密鑰。公鑰加密和解密算法基于標(biāo)識的非對稱秘密算法,該算法使消息發(fā)送者可以利用接收者的標(biāo)識對消息進行加密,唯有接收者可以用相應(yīng)的私鑰對該密文進行解密。
(3)雜湊算法
(3.1)SM3密碼算法原理
SM3密碼算法能夠產(chǎn)生256比特的雜湊值。該算法為不可逆的算法?!禛B/T 32905-2016 信息安全技術(shù) SM3密碼雜湊算法》給出了雜湊函數(shù)算法的計算方法和計算步驟,并給出了運算示例。該算法適用于數(shù)字簽名和驗證、消息認證碼的生成與驗證等,可滿足多種密碼應(yīng)用的安全需求。SM3算法對輸入長度小于2的64次方的比特消息,經(jīng)過填充和迭代壓縮,生成長度為256比特的雜湊值,其中使用了異或、模、模加、移位、與、或、非運算,由填充,迭代過程,消息擴展和壓縮函數(shù)所構(gòu)成。
SM3算法包括預(yù)處理、消息擴展和計算Hash值三部分。預(yù)處理部分由消息填充和消息分組兩部分組成。首先將接收到的消息末尾填充一個“1”, 再添加若干個“0”,使得填充后的數(shù)據(jù)成為滿足length = 448mod512bit的數(shù)據(jù)長度,再在末尾附上64bit消息長度的二進制表示數(shù), 然后將消息分成512bit的子塊,最后將每個512bit的消息子塊擴展成132個字用于Hash值的計算。SM3算法計算流程圖如圖所示(圖11)。
(圖11)
SM3算法的Hash運算主要是在壓縮函數(shù)部分,壓縮函數(shù)共包含64輪,每輪包括12步運算,64輪循環(huán)計算結(jié)束后,再將計算結(jié)果與輸入到本輪計算的初始數(shù)據(jù)進行異或運算,即上一次Hash運算的Hash值輸出與輸入到本輪計算的初始數(shù)據(jù)異或得到本次Hash值輸出。
(3.2)SM3密碼算法示例
對于任意長度的輸入,SM3雜湊算法將產(chǎn)生256比特的雜湊值。因此,可以進行正向的比對驗證,確認是否使用了SM3算法進行保護(圖12)。
(圖12)
但是,如果僅僅使用SM3算法,無法防止數(shù)據(jù)被篡改,因此通常使用HMAC-SM3對數(shù)據(jù)進行完整性保護。由于HMAC算法需要使用密鑰,因此,無法通過正向進行驗證,只能通過特征比對(雜湊數(shù)據(jù)長度)的方式進行算法驗證,并結(jié)合其他證據(jù),如密碼機的算法調(diào)用日志、密碼機wireshark數(shù)據(jù)包抓包等,來驗證算法的合規(guī)性。由于SM3密碼算法的雜湊數(shù)據(jù)長度為256比特,因此HMAC-SM3雜湊數(shù)據(jù)的長度也是256比特。
(來源:國家網(wǎng)安檢測中心)


