天天看點

國密SM4

國密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)