國密SM4算法


與DES和AES算法相似,國密SM4算法是一種分組加密算法。SM4分組密碼算法是一種迭代分組密碼算法,由加解密算法和密鑰擴展算法組成。

SM4是一種Feistel結構的分組密碼算法,其分組長度和密鑰長度均為128bits。加密算法和密鑰擴展算法迭代輪數均為32輪。SM4加解密過程的算法相同但是輪密鑰的使用順序相反。

SM4密碼算法使用模2加和循環移位作為基本運算。

密鑰擴展算法:SM4算法使用128位的加密密鑰,並采用32輪迭代加密結構,每一輪加密使用一個32位的輪密鑰,總共使用32個輪密鑰。因此需要使用密鑰擴展算法,從加密密鑰中產生32個輪密鑰。

SM4加解密流程

SM4算法的加密大致流程如下:

密鑰:加密密鑰的長度為128比特,表示為MK = (MK0, MK1, MK2, MK3),其中MKi為32位,輪密鑰表示為(rk0, rk1, ……, rk31),其中rki為32位。

輪函數F:假設輸入為(X0, X1, X2, X3),X為32位,則輪函數F為:F=(X0, X1, X2, X3, rk) = X0 ⊕ T(X1 ⊕ X2 ⊕ X3 ⊕ rk)

合成置換:T函數是一個可逆變換,由一個非線性變換r和線性變換L復合而成的,即T( )=L(r( ))

非線性變換有四個並行的S盒構成的,設輸入為A=(a0, a1, a2, a3),輸出為B=(b0, b1, b2, b3),其中ai和bi為8位。每個S盒的輸入都是一個8位的字節,將這8位的前四位對應的16進制數作為行編號,后四位對應的16進制數作為列編號,然后用相應位置中的字節代替輸入的字節。下圖為S盒置換表:

 

線性變換L:線形變換的輸入就是S盒的輸出,即C=L(B)=B ⊕ (B<<<2) ⊕ (B<<<10) ⊕ (B<<<18) ⊕ (B<<<24),線性變換的輸入和輸出都是32位的。

經過了32輪的迭代運算后,最后再進行一次反序變換即可得到加密的密文,即密文C=(Y0, Y1, Y2, Y3)=R(X32. X33, X34, X35)=(X35, X34, X33, X32)。

SM4算法的解密流程和加密流程一致,只不過輪密鑰的使用順序變成了(rk31, rk30, ……, rk0)

密鑰擴展算法

密鑰參量:輪密鑰由加密密鑰生成。FK=(FK0, FK1, FK2, FK3)為系統參數,以及固定參數CK=(CK0, CK1, ……,  CK31),其中FKi和CKi均為32位並用於密鑰擴展算法。

系統參數FK的具體取值如下:

FK0=(A3B1BAC6), FK1=(56AA3350), FK2=(677D9197), FK3=(B27022DC)

固定參數CK的具體取值如下:

密鑰擴展方法:設(K0, K1, K2, K3)=(MK0⊕FK0, MK1⊕FK1, MK2⊕FK2, MK3⊕FK3)

則rki=Ki+4=Ki⊕T‘(Ki+1⊕Ki+2⊕Ki+3⊕CKi)

其中T’()是將原來的T()中的線形變換L()替換成L'(B)=B⊕(B<<<13)⊕(B<<<23)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM