簡述SM4加密算法

國密算法我們已經(jīng)介紹了SM1、SM2、SM3,那么今天我們就來了解一下SM4分組加密算法。

什么是SM4?

SM4 為無線局域網(wǎng)標準的分組加密算法,用于替代 DES/AES 等國際算法,是繼SM2、SM3、SM9、祖沖之密碼算法之后,又一個商用密碼算法被納入ISO/IEC國際標準。

SM4加密過程

SM4是一種分組密碼算法,其分組長度為128位(即16字節(jié),4字),密鑰長度也為128位。其加解密過程采用了32輪迭代機制,每一輪需要一個輪密鑰,這些均與DES、AES類似。

設(shè)輸入的明文為( X0 , X1 , X2 , X3 ),輸入輪密鑰為rki,i = 0 , 1 , . . , 31,共32個字。輸出的密文為( Y0 , Y1 , Y2 , Y3 ) 。

加密算法為:Xi+4=F(Xi,X i+1,Xi+2,X i+3,rki)=Xi?T(X i+1?Xi+2?Xi+3?rki)

SM4

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

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

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

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

SM4

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

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

SM4解密過程

SM4密碼算法是對合運算,因此加解密算法相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。

設(shè)輸入密文為( Y0 , Y1 , Y2 , Y3 ),輸入輪密鑰為rki,i =31,30,...,1,0,輸出明文為(M0,M1,M2,M3)。由( Y0 , Y1 , Y2 , Y3 )=(X35,X34,X33,X32),得解密算法為:

Xi=F(Xi+4,Xi+3,Xi+2,Xi+1,rki)=Xi+4?T(Xi+3?Xi+2?Xi+1?rki)

i=31,30,..,1,0

與加密算法之后需要一個反序處理同樣的道理,在解密算法之后也需要有一個反序處理R:

R(M0.M1,M2,M3)=(X3,X2,X1,X0)

SM4

SM4的應(yīng)用場景

  • 無需進行密鑰交換的場景,如內(nèi)部系統(tǒng),事先就可以直接確定密鑰;
  • 防止明文傳輸數(shù)據(jù)被竊取的場景;
  • 加解密速度快,適合數(shù)據(jù)內(nèi)容比較大的加密場景。

免責(zé)聲明:素材源于網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系刪稿。