楊元原博士國(guó)密課堂 · 第二期 | 商(shāng)用(yòng)密碼應用(yòng)安(ān)全性評估:Part2. 商(shāng)用(yòng)密碼算法
本期主講人
楊元原 博士 國(guó)家網絡與信息系統安(ān)全産(chǎn)品質(zhì)量監督檢驗中(zhōng)心(公(gōng)安(ān)部第三研究所)商(shāng)用(yòng)密碼應用(yòng)安(ān)全性評估負責人
對稱密碼算法
(1)分(fēn)組密碼算法及工(gōng)作(zuò)模式
(1.1)分(fēn)組密碼算法
SM1密碼算法:SM1算法是國(guó)家密碼管理(lǐ)局認可(kě)的一種分(fēn)組密碼算法,分(fēn)組長(cháng)度、密鑰長(cháng)度都是128bit,但是算法不公(gōng)開,僅以IP核的形式存在于芯片中(zhōng),需要通過加密芯片的接口進行調用(yòng)。
采用(yòng)該算法的密碼産(chǎn)品包括安(ān)全芯片、智能(néng)IC卡、智能(néng)密碼鑰匙、加密卡、加密機等,該算法廣泛應用(yòng)于電(diàn)子政務(wù)、電(diàn)子商(shāng)務(wù)及國(guó)民(mín)經濟的各個領域。
SM4密碼算法:算法采用(yòng)32輪非線(xiàn)性叠代結構。解密算法與加密算法的結構相同,隻是輪密鑰的使用(yòng)順序相反,解密輪密鑰是加密輪密鑰的逆序。
SM4密碼算法于2012年3月21日發布,相關的标準包括:《GM/T 0002-2012 SM4分(fēn)組密碼算法》、《GB/T 32907-2016 信息安(ān)全技(jì )術 SM4分(fēn)組密碼算法》。該算法的基本原理(lǐ)如下圖所示(圖1):
(圖1)
算法采用(yòng)了典型的Feistel密碼結構,采用(yòng)32輪非線(xiàn)性叠代結構,以字(32位)為(wèi)單位進行加密運算,每一次叠代運算均為(wèi)一輪變換函數F。
算法原理(lǐ)如下圖所示(圖2):
(圖2)
SM7對稱密碼:SM7算法是一種分(fēn)組密碼算法,分(fēn)組長(cháng)度為(wèi)128比特,密鑰長(cháng)度為(wèi)128比特。SM7的算法目前沒有(yǒu)公(gōng)開發布。SM7适用(yòng)于非接IC卡應用(yòng),包括身份識别類應用(yòng)(門禁卡、工(gōng)作(zuò)證、參賽證),票務(wù)類應用(yòng)(大型賽事門票、展會門票),支付與通卡類應用(yòng)(積分(fēn)消費卡、校園一卡通、企業一卡通、公(gōng)交一卡通)。
(1.2)分(fēn)組密碼工(gōng)作(zuò)模式
即使有(yǒu)了安(ān)全的分(fēn)組密碼算法,也需要采用(yòng)适當的工(gōng)作(zuò)模式來隐蔽明文(wén)的統計特性、數據的格式等,以提高整體(tǐ)的安(ān)全性,降低删除、重放、插入和僞造成功的機會。因此,分(fēn)組密碼有(yǒu)不同的工(gōng)作(zuò)模式,包括電(diàn)碼本(ECB)模式、分(fēn)組鏈接(CBC)模式、密碼反饋(CFB)模式、輸出反饋(OFB)模式、計數器(CTR)模式、分(fēn)組連接(BC)模式等工(gōng)作(zuò)模式。分(fēn)組密碼的工(gōng)作(zuò)模式依據的标準為(wèi):《GB/T 17964-2008 信息安(ān)全技(jì )術 分(fēn)組密碼算法的工(gōng)作(zuò)模式》。其中(zhōng)比較常見的是電(diàn)碼本模式和分(fēn)組鏈接模式。
電(diàn)碼本模式:電(diàn)碼本模式直接利用(yòng)加密算法分(fēn)别對分(fēn)組數據組加密。在給定的密鑰下同一明文(wén)組總産(chǎn)生同樣的密文(wén)組。這種方式會暴露明文(wén)數據的格式和統計特征,由于重要的數據常常在同一位置上出現,使密碼分(fēn)析者可(kě)以對其進行統計分(fēn)析、重傳和代換攻擊(圖3)。
(圖3)
分(fēn)組鏈接模式:在CBC模式中(zhōng),首先将明文(wén)分(fēn)組與前一個密文(wén)分(fēn)組進行XOR運算,然後再進行加密。密文(wén)分(fēn)組像鏈條一樣相互連接在一起(圖4)。
(圖4)
各種工(gōng)作(zuò)模式的比較如下表所示(圖5):
(圖5)
(1.2)SM4密碼算法示例
SM4密碼算法的分(fēn)組長(cháng)度為(wèi)128比特,密鑰長(cháng)度為(wèi)128比特。但是由于密鑰需要保密,因此SM4密碼算法無法從正向進行驗證,隻能(néng)通過特征比對(如加密數據長(cháng)度)的方式進行算法驗證,并結合其他(tā)證據,如密碼機的算法調用(yòng)日志(zhì)、密碼機Wireshark數據包抓包等,來驗證算法的合規性。由于SM4密碼算法的分(fēn)組長(cháng)度為(wèi)128比特,因此SM4密文(wén)長(cháng)度必然是128比特的倍數,如下圖所示(圖6)。
(圖6)
(2)流密碼算法
(2.1)祖沖之算法(ZUG)
祖沖之密碼算法主要用(yòng)于下一代移動通信中(zhōng),可(kě)用(yòng)來對語音或視頻數據加密。祖沖之密碼算法(ZUC)的名(míng)字源于我國(guó)古代數學(xué)家祖沖之,能(néng)夠實現加密和完整性保護。ZUC算法由3個基本部分(fēn)組成,依次為(wèi):1、比特重組;2、非線(xiàn)性函數F;3、線(xiàn)性反饋移位寄存器(LFSR)。具(jù)體(tǐ)算法可(kě)查看《GM/T 0001.1-2012 祖沖之序列密碼算法:第1部分(fēn):算法描述》、《GM/T 0001.2-2012 祖沖之序列密碼算法:第2部分(fēn):基于祖沖之算法的機密性算法》、《GM/T 0001.3-2012 祖沖之序列密碼算法:第3部分(fēn):基于祖沖之算法的完整性算法》等标準。
非對稱密碼算法
(1)SM2密碼算法
(1.1)SM2密碼算法原理(lǐ)
SM2算法采用(yòng)ECC橢圓曲線(xiàn)密碼機制,但在簽名(míng)、密鑰交換方面不同于ECDSA、ECDH等國(guó)際标準,而是采取了更為(wèi)安(ān)全的機制。國(guó)密SM2算法标準《GB/T 32918 信息安(ān)全技(jì )術 SM2橢圓曲線(xiàn)公(gōng)鑰密碼算法》共包括5個部分(fēn),第1部分(fēn)為(wèi)總則,主要介紹了ECC基本的算法描述,包括素數域和二元擴域兩種算法描述;第2部分(fēn)為(wèi)數字簽名(míng)算法,包括數字簽名(míng)生成算法和驗證算法;第3部分(fēn)為(wèi)密鑰交換協議,可(kě)滿足通信雙方經過兩次或三次信息傳遞,計算獲取一個共享秘密密鑰;第4部分(fēn)為(wèi)公(gōng)鑰加密算法,包括加密算法和解密算法;第5部分(fēn)為(wèi)參數定義,主要規定了SM2橢圓曲線(xiàn)公(gōng)鑰密碼算法的曲線(xiàn)參數。
SM2加密算法:根據《GB/T 32918.4-2016信息安(ān)全技(jì )術 SM2橢圓曲線(xiàn)公(gōng)鑰密碼算法 第4部分(fēn):公(gōng)鑰加密算法》的要求,SM2加密算法流程如下。
設需要發送的消息為(wèi)比特串,為(wèi)的比特長(cháng)度。為(wèi)了對明文(wén)進行加密,加密方應實現以下運算步驟:(圖7)。
(圖7)
SM2簽名(míng)算法:根據《GB/T 32918.2-2016信息安(ān)全技(jì )術 SM2橢圓曲線(xiàn)公(gōng)鑰密碼算法 第2部分(fēn):數字簽名(míng)算法》的要求,SM2簽名(míng)算法流程如下。
設待簽名(míng)的消息為(wèi),為(wèi)了獲取消息M的數字簽名(míng),簽名(míng)方A應實現以下運算步驟(圖8):
(圖8)
(1.2)SM2密碼算法示例
SM2公(gōng)鑰加密算法驗證:根據SM2加密算法的工(gōng)作(zuò)原理(lǐ),SM2加密算法每次加密數據時都會産(chǎn)生随機數k,而k的值外部無法獲知,因此無法對算法進行正向驗證。因此,隻能(néng)通過特征比對(加密數據長(cháng)度)的方式進行算法驗證,并結合其他(tā)證據,如密碼機的算法調用(yòng)日志(zhì)、密碼機Wireshark數據包抓包等,來驗證算法的合規性。
此外,由于每次加密都會生成不同的随機數k,因此,即使相同的明文(wén),每次生成的密文(wén)也不相同。
根據《GB/T 36322-2018 信息安(ān)全技(jì )術 密碼設備應用(yòng)接口規範》要求,ECC加密數據的結構為(wèi)(圖9):
(圖9)
在示例中(zhōng),待加密的明文(wén)數據為(wèi):123。
在密文(wén)中(zhōng),X分(fēn)量和Y分(fēn)量的值為(wèi):
000000000000000000000000000000000000000000000000000000000000000016B929CCC3A2C98C688784A89CF85B8DEA40EA5227D81C6118ED22C0789D88C30000000000000000000000000000000000000000000000000000000000000000180B26547035F156C28921E7AFBB32AF5975DEC56B485E26879B680116E92F4A,長(cháng)度為(wèi)1024字節。
明文(wén)的雜湊值為(wèi):
34D08BB25CA811482A4B3B51B491DFDA0569A9D6A7C50651313ED5F134BC6A4B,長(cháng)度為(wèi)256字節。
密文(wén)數據長(cháng)度為(wèi):
03000000
密文(wén)數據為(wèi):
96E7E200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000。
SM2簽名(míng)算法驗證:由于待簽名(míng)數據、SM2公(gōng)鑰和簽名(míng)數據都能(néng)夠獲取,因此可(kě)以使用(yòng)合規的工(gōng)具(jù),對SM2簽名(míng)算法進行正向驗證。
根據《GB/T 36322-2018 信息安(ān)全技(jì )術 密碼設備應用(yòng)接口規範》要求,ECC簽名(míng)數據的結構為(wèi)(圖10):
(圖10)
(2)SM9密碼算法
SM9是基于标識密碼算法,标準為(wèi)《GM/T 0044 SM9 标識密碼算法》,共包含5個部分(fēn),包括總則、數字簽名(míng)算法、密鑰交換協議、密鑰封裝(zhuāng)機制和公(gōng)鑰加密算法、參數定義。SM9不同于傳統意義上的SM2算法,它利用(yòng)橢圓曲線(xiàn)對的雙線(xiàn)性性質(zhì),構造出安(ān)全性和實現效率兼顧的标識密碼,也就是公(gōng)鑰與用(yòng)戶的身份标識相關,省去了證書管理(lǐ)。
SM9數字簽名(míng)算法适用(yòng)于接收者通過簽名(míng)者的标識驗證數據的完整性和數據發送者的身份,也适用(yòng)于第三方确定簽名(míng)及所簽數據的真實性。密鑰交換協議可(kě)以使用(yòng)通信雙方通過雙方的标識和自身的私鑰經過兩次或者可(kě)選三次信息傳遞過程,計算獲取一個由雙方共同決定的共享秘密密鑰。公(gōng)鑰加密和解密算法基于标識的非對稱秘密算法,該算法使消息發送者可(kě)以利用(yòng)接收者的标識對消息進行加密,唯有(yǒu)接收者可(kě)以用(yòng)相應的私鑰對該密文(wén)進行解密。
(3)雜湊算法
(3.1)SM3密碼算法原理(lǐ)
SM3密碼算法能(néng)夠産(chǎn)生256比特的雜湊值。該算法為(wèi)不可(kě)逆的算法。《GB/T 32905-2016 信息安(ān)全技(jì )術 SM3密碼雜湊算法》給出了雜湊函數算法的計算方法和計算步驟,并給出了運算示例。該算法适用(yòng)于數字簽名(míng)和驗證、消息認證碼的生成與驗證等,可(kě)滿足多(duō)種密碼應用(yòng)的安(ān)全需求。SM3算法對輸入長(cháng)度小(xiǎo)于2的64次方的比特消息,經過填充和叠代壓縮,生成長(cháng)度為(wèi)256比特的雜湊值,其中(zhōng)使用(yòng)了異或、模、模加、移位、與、或、非運算,由填充,叠代過程,消息擴展和壓縮函數所構成。
SM3算法包括預處理(lǐ)、消息擴展和計算Hash值三部分(fēn)。預處理(lǐ)部分(fēn)由消息填充和消息分(fēn)組兩部分(fēn)組成。首先将接收到的消息末尾填充一個“1”, 再添加若幹個“0”,使得填充後的數據成為(wèi)滿足length = 448mod512bit的數據長(cháng)度,再在末尾附上64bit消息長(cháng)度的二進制表示數, 然後将消息分(fēn)成512bit的子塊,最後将每個512bit的消息子塊擴展成132個字用(yòng)于Hash值的計算。SM3算法計算流程圖如圖所示(圖11)。
(圖11)
SM3算法的Hash運算主要是在壓縮函數部分(fēn),壓縮函數共包含64輪,每輪包括12步運算,64輪循環計算結束後,再将計算結果與輸入到本輪計算的初始數據進行異或運算,即上一次Hash運算的Hash值輸出與輸入到本輪計算的初始數據異或得到本次Hash值輸出。
(3.2)SM3密碼算法示例
對于任意長(cháng)度的輸入,SM3雜湊算法将産(chǎn)生256比特的雜湊值。因此,可(kě)以進行正向的比對驗證,确認是否使用(yòng)了SM3算法進行保護(圖12)。
(圖12)
但是,如果僅僅使用(yòng)SM3算法,無法防止數據被篡改,因此通常使用(yòng)HMAC-SM3對數據進行完整性保護。由于HMAC算法需要使用(yòng)密鑰,因此,無法通過正向進行驗證,隻能(néng)通過特征比對(雜湊數據長(cháng)度)的方式進行算法驗證,并結合其他(tā)證據,如密碼機的算法調用(yòng)日志(zhì)、密碼機wireshark數據包抓包等,來驗證算法的合規性。由于SM3密碼算法的雜湊數據長(cháng)度為(wèi)256比特,因此HMAC-SM3雜湊數據的長(cháng)度也是256比特。
(來源:國(guó)家網安(ān)檢測中(zhōng)心)