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