?
博客主頁:christine-rr-CSDN博客
?
????專欄主頁:密碼學?
📌 【今日更新】📌
對稱密碼算法——SM4
目錄
一、國密SM系列算法概述
二、SM4算法
2.1算法背景
2.2算法特點
2.3?基本部件
2.3.1 S盒
2.3.2??非線性變換 ??編輯?
2.3.3 線性變換部件L
2.3.4合成變換 T
2.3.5輪函數
2.3.6 加密算法
2.3.7 解密算法
2.3.8 密鑰擴展算法
2.4算法流程
?2.4.1 密鑰擴展:
?2.4.2 輪函數(F函數):
2.4.3 加密過程:
?2.4.4 解密過程:
2.5 算法模式
2.6 安全性分析
2.7 應用場景
一、國密SM系列算法概述
????????國密算法(SM系列)是由中國國家密碼管理局制定的一系列密碼算法標準,旨在保障信息安全,推動密碼技術的自主可控。涵蓋對稱加密、非對稱加密、哈希算法及身份認證等領域,廣泛應用于金融、政務、通信等關鍵領域。以下是主要SM算法的分類及簡介:
- SM1、SM4、SM5、SM6、SM7、SM8、ZUC祖沖之密碼:對稱密碼,
- SM2、SM9:公鑰密碼 (非對稱加密)
- SM3:屬于單向散列函數。
- SM9:基于身份基加密(IBE)或叫標識密碼的算法
目前我國主要使用公開的SM2、SM3、SM4作為商用密碼算法。
其中SM1、SM7算法不公開,調用該算法時,需要通過加密芯片的接口進行調用
二、SM4算法
2.1算法背景
????????SM4算法是用于WAPI的分組密碼算法,是2006年我國國家密碼管理局公布的國內第一個商用密碼算法,原名SMS4,2012年正式成為國家標準(GB/T 32907-2016),2021年成為國際標準(ISO/IEC 18033-3:2021/AMD1:2021)。
????????SM4算法的設計目標是替代國際通用的AES算法,適用于無線局域網、金融支付、物聯網等場景的數據加密。
2.2算法特點
- 分組長度和密鑰長度:SM4算法的分組長度和密鑰長度均為128位(16字節)。
- 迭代輪數:加密算法與密鑰擴展算法都采用32輪非線性迭代結構,每輪使用一個輪密鑰。
- 算法結構:基于Feistel網絡結構,但采用了非平衡的Feistel變體,結合了S盒替換、線性變換和密鑰混合等操作。
- 單位:以字節(8位)和字(32位)為單位進行數據處理。
- 安全性:SM4算法的安全性經過嚴格評估,能夠抵御差分攻擊、線性攻擊等常見密碼分析方法。
2.3?基本部件
SM4密碼算法的基本運算有模2加和循環移位。
? ① 模2加:記為,為32位逐比特異或運算。
? ② 循環移位:i,把32位字循環左移i位。
2.3.1 S盒
????????S盒是以字節為單位的非線性替換,其密碼學作用是混淆,它的輸入和輸出都是8位的字節。設輸入字節為 ?,輸出字節為, 則S盒的運算可表示為:?? ? ? ?
????????S盒的替換規則如下,例如輸入為EF,則輸出為第E行與第F列交叉處的值84,即?S(EF)=84? ?。
??
SM4密碼算法的S盒
2.3.2??非線性變換 ?
?
????????非線性變換 ??是以字為單位的非線性替換,它由4個S盒并置構成。設輸入為 ??
?(4個32位的字),輸出為 ?
?(4個32位的字),則
???(3-1)
2.3.3 線性變換部件L
????????線性變換部件L是以字為處理單位的線性變換,其輸入輸出都是32位的字,它的密碼學作用是擴散。 設 L的輸入為字B,輸出為字C,則
(3-2)
2.3.4合成變換 T
????????合成變換T由非線性變換和線性變換L復合而成,數據處理的單位是字。設輸入為字 X,則先對 X進行非線性
變換,再進行線性L變換。記為
?(3-3)
????????由于合成變換 是非線性變換 和線性變換 的復合,所以它綜合起到混淆和擴散的作用,從而可提高密碼的安全性。
2.3.5輪函數
輪函數由上述基本密碼部件構成。設輪函數 ?的輸入為4個32位字共128位,輪密鑰為一個32位的字?? 。輸出也是一個32位的字,由下式給出:
根據式(3-3),有
記?,根據式(3-1)和式(3-2),有
?
輪函數的結構如圖所示
?SM4算法的加密算法和輪函數結構圖
2.3.6 加密算法
????????加密算法采用32輪迭代結構,每輪使用一個輪密鑰。
????????設輸入的明文為四個字(128比特長),輸入的輪密鑰為
,共32個字。輸出的密文為四個字
(128比特長)。加密算法可描述如下:
? ?
???????
??? 為了與解密算法需要的順序一致,同時也與人們的習慣順序一致,在加密算法之后還需要一個反序處理:
(3-4)????
2.3.7 解密算法
??? 解密算法與加密算法相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。
??? 算法的輸入為密文 和輪密鑰
,輸出為明文
。根據式
。為了便于與加密算法對照,解密算法中仍然用
表示密文。于是可得到如下的解密算法。
解密算法:
? ?
???? ?
??? 與加密算法之后需要一個反序處理同樣的道理,在解密算法之后也需要一個反序處理?? :
2.3.8 密鑰擴展算法
????????SM4算法加密時輸入128位的密鑰,采用32輪迭代結構,每一輪使用一個32位的輪密鑰,共使用32個輪密鑰。使用密鑰擴展算法,從加密密鑰產生出32個輪密鑰。
(1)常數FK
???? 在密鑰擴展中使用如下的常數:
(2)固定參數
?? 共使用32個固定參數,每個
是一個字,其產生規則如下:
?? 設為
的第
字節
,即
,則? ?
這32個固定參數如下(16進制):
??? 設輸入的加密密鑰為? ,輸出輪密鑰為?
,密鑰擴展算法可描述如下,其中
為中間數據:
??? 其中的變換與加密算法輪函數中的
基本相同,只將其中的線性變化? 修改為以下的? :
??? 密鑰擴展算法的結構與加密算法的結構類似,也是采用了32輪的迭代處理。
2.4算法流程
SM4算法的加密過程主要包括以下幾個步驟:
?2.4.1 密鑰擴展:
- 將128位的初始密鑰通過密鑰擴展算法生成32個32位的輪密鑰。
- 密鑰擴展過程中使用了固定參數(CK)和系統參數(FK),確保密鑰與輪函數之間的強關聯性。
?2.4.2 輪函數(F函數):
- 每輪迭代使用一個輪密鑰,通過非線性變換(S盒)和線性變換(L函數)對數據進行處理。
- S盒替換:將8位輸入通過復合域S盒進行非線性替換,增強抗差分攻擊能力。?
- 線性變換:包括循環左移和異或操作,實現數據的高分支數擴散
2.4.3 加密過程:
- 將128位的明文分組分為4個32位的字(X?, X?, X?, X?)。
- 通過32輪迭代,每輪使用一個輪密鑰,生成新的中間狀態。
- 最后一輪后,將4個字逆序拼接,得到128位的密文。
?2.4.4 解密過程:
- 解密過程與加密過程相同,只是輪密鑰的使用順序相反。
2.5 算法模式
SM4算法支持多種工作模式,常見的有:
- ECB(電子密碼本模式):每個分組獨立加密,安全性較低,不推薦用于加密大量數據。
- CBC(密碼分組鏈接模式):使用初始化向量(IV),每個分組的加密依賴于前一個分組的密文,安全性較高。
- CTR(計數器模式):將塊加密算法轉換為流加密算法,適合并行加密,安全性高。
2.6 安全性分析
- 密鑰空間:128位的密鑰長度提供了足夠大的密鑰空間,理論上可抵御暴力破解。
- 抗攻擊能力:SM4算法的S盒設計和線性變換結構能夠有效抵御差分攻擊、線性攻擊等常見密碼分析方法。
- 國際認可:SM4算法已成為國際標準,表明其設計通過了國際密碼學界的審查。
2.7 應用場景
- 無線局域網(WLAN):SM4算法是中國無線局域網標準(WAPI)中推薦的加密算法。
- 金融支付:在移動支付、網上銀行等場景中,SM4算法用于保護敏感數據。
- 物聯網(IoT):SM4算法適用于資源受限的物聯網設備,提供高效的數據加密。
- 政務和電信:在政府機密數據傳輸、電信通信加密等領域廣泛應用。