國密SM4的分組長度128bit,密鑰長度:128bit。
是一種滑動視窗結構;
加密算法解密算法相同;
經過32輪輪函數;
(1) 非線性變換部件S盒
8比特出入--->S盒--->8比特輸出
b=S_box(a);其中a為8比特的輸入,b為8比特的輸出;
S盒的置換規則:
把一個位元組轉換成十六進制的xy,x為S盒第x行,y為S盒的第y列;
(2) 32位字的非線性變換t
4個S盒并行輸出,其中a0、a1、a2、a3為輸入,b0、b1、b2、b3為輸出
b0=S_box(a0)
b1=S_box(a1)
b2=S_box(a2)
b3=S_box(a3)
記B=(b0,b1,b2,b3)
(3) 字線性變換,循環向左移動
C=L(B)
=B⊕(B<<<2)⊕(B<<<10)⊕(B<<<18)⊕(B<<<24);
(4)字合成變換T
T(X)=L(t(X))
輸入4個32位字,X0,X1,X2,X3;
輸入輪密鑰rk,32位;
輸出32位;
F(X0,X1,X2,X3,rK)=X0⊕T(X1⊕X2⊕X3⊕rK)
把128bit明文分為4個32位字(X0,X1,X2,X3)
X1,X2,X3,rK互相異或得到32位字
将這32位字并行輸入5*4個S盒,輸出的結果再進行循環左移;
最後與X0進行異或。
128bit(X0,X1,X2,X3)的明文經過一次輪函數輸出32位字(X4),并将輸出結果添加到明文的最後一個字後,進入第二次輪函數……直到第32輪函數執行完畢。最後四次經過輪函數得到的(X35X34X333X32)4個32位字即為密文。
用到4個常數
用到32個參數
輸入加密密鑰MK=(MK0,MK1,MK2,MK3)
(K0,K1,K2,K3)=(MK0⊕FK0,MK1⊕FK1,MK2⊕FK2,MK3⊕FK3)
For i=0,1…,30,31
Do
iki=Ki+4=Ki⊕T’(Ki+1⊕Ki+2⊕Ki+3⊕CKi)
說明:T’變換與加密算法輪函數中的T基本相同,隻将其中的線性變換L修改為以下:L’(B)=B⊕(B<<<13)⊕(B<<<23)