分組密碼(二) — 密碼學複習(五)

寫在前面:

  最近好久沒更了,因為前面複習的時候覺得自己之前的手寫筆記實在太難看了,然後就趁着複習重新寫了一本密碼學筆記。把密碼學引論過了一遍之後,去複習了一遍謝希仁的計網,複習完之後現在有着四本新筆記(密碼學一本,計網三本)。學習路還長,慢點沒關係,要一步步走得踏實。讓我秀一下我的四本筆記哈哈哈哈 O(∩_∩)O~

 

  廢話說多了,下面回歸正題。開始密碼學複習之旅。前面分組密碼講到了S-P網絡結構和Feistel結構,不記得的點這回顧。我們都知道DES是Feistel結構,AES是S-P網絡結構。但下面先不講這兩個具體的算法。先把還剩的兩個結構講完。

  這篇主要講滑動窗口結構Lai-Massey結構。滑動窗口結構的應用實例是SM4國密算法,而Lai-Massey結構的應用實例是IDEA算法。在簡單介紹完後,會對SM4國密算法進行簡單介紹,至於IDEA將不展開來講,會在最後附上一些鏈接。

  5.1 滑動窗口結構

  滑動窗口的結構特點:

  仍然是輪函數迭代結構但是,具有密文鏈接的特點,每輪加密產生的最後一個密文字加入到下一輪的加密過程中,第一個密文字退出加密,相當於一個窗口在移動。因此形象地稱為滑動窗口型。

  優點:

容易得到對合的密碼算法。

  缺點:

迭代輪數多;

目前實例較少。

 

  5.2 Lai-Massey結構

  結構特點:

  採用三個代數群:

⊕,16位按位異或群;

⊙,16位mod 216+1乘法群(216+1為素數)

   16位mod 216乘法群

  這三種運算的任意兩種都不滿足分配律和結合律,不構成群。(註:不構成群有利於增強密碼的安全性)

  混合運用這三種運算,獲得了很好的非線性和混淆的特性,確保密碼的安全性。

  優點:

容易得到對合的密碼算法。

  缺點:

結構擴展不方便,因為216+1為素數,mod 216+1構成乘法群,所以可構成IDEA,但232+1不為素數,mod 232+1不構成乘法群,所以不能構成32位的IDEA。

  應用實例:

目前只有IDEA採用這種結構。

 

  5.3 中國商用密碼算法SM4

  2006年2月公布了分組密碼SM4.

  2011年2月公布了橢圓曲線密碼SM2和雜湊函數SM3.

  5.3.1 SM4的概況

  ① 分組密碼

  數據分組(明文、密文)長度 = 128位  密鑰長度 = 128位

  數據處理單位: 位元組(8位)、字(32位)

  ② 密碼算法特點

  對合運算:解密算法和加密算法相同

  子密鑰生成算法和加密算法結構類似

  ③ 密碼結構

  不是SP結構,也不是Feistel結構,是一種新的結構——滑動窗口結構

  5.3.2 基本運算

  ① 模2加,⊕,32比特異或運算;

  ② 循環移位,<<<i,把32位字循環左移i位。

  5.3.3 基本密碼部件

  ① 非線性位元組變換部件 S盒

  •   8位輸入,8為輸出
  •   本質上是8位的非線性置換

  輸入8位可用2個16進制數表示,前面表示行,後面表示列。

  說明:在主要密碼學指標達到最佳,與AES的S盒相當。

  ② 非線性字變換τ :32位字的非線性變換

  •   4個S盒並行置換
  •   設輸入字A=(a0,a1,a2,a3),輸出字B=(b0,b1,b2,b3)

  B = τ(A) = (S_box(a0),S_box(a1),S_box(a2),S_box(a3))

  ③ 字線性部件L變換

  •   32位輸入,32為輸出
  •   設輸入為B,輸出為C,表示為:C=L(B)

  運算規則:

  C = L(B) = B ⊕ (B<<<2) ⊕ (B<<<10) ⊕ (B<<<18) ⊕ (B<<<24)

  ④ 字合成變換 T 

  •   由非線性變換τ線性變換L複合而成的:

  T(X) = L(τ(X))

  先S盒變換,後L變換。

 5.3.4 輪函數 F

  輸入數據:(X0,X1,X2,X3),128位,四個32位字

  輸入輪密鑰:rk,32位字

  輸出數據:32位字

  輪函數 F :

F(X0,X1,X2,X3,rk) = X0⊕ T(X1⊕X2⊕X3⊕rk)

 5.3.5 加密算法

  輸入明文:(X0,X1,X2,X3),128位,四個32位字

  輸入輪密鑰:rki,i=0,1,…,31,共32個輪密鑰

  輸出密文:(Y0,Y1,Y2,Y3),128位,四個32位字

  算法結構:輪函數32輪迭代,每一輪使用一個輪密鑰

  加密算法:

Xi+4 = F(Xi,Xi+1,Xi+2,Xi+3,rki) = Xi⊕ T(Xi+1⊕Xi+2⊕Xi+3⊕rki) , i=0,1,…,30,31.

(Y0,Y1,Y2,Y3) = (X35,X34,X33,X32)

  5.3.6 解密算法

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

  輸入密文:(Y0,Y1,Y2,Y3),128位,四個32位字

  輸入輪密鑰:rki,i=31,30,…,1,0,共32個輪密鑰

  輸出明文:(X0,X1,X2,X3),128位,四個32位字

  算法結構:輪函數32輪迭代,每一輪使用一個輪密鑰

  解密算法:

Yi+4 = F(Yi,Yi+1,Yi+2,Yi+3,rki) = Yi⊕ T(Yi+1⊕Yi+2⊕Yi+3⊕rki) , i=31,30,…,1,0.

(X0,X1,X2,X3) = (Y35,Y34,Y33,Y32)

  5.3.7 密鑰擴展算法

  ① 常數 FK

    在密鑰擴展中使用一些常數:

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

  ② 固定參數 CK

    32個固定參數 CKi,i=0,1,…,30,31.

    產生規則:CKij = (4i+j)×7 mod 256, i=0,1,…,30,31, j=0,1,…,30,31.

  輸入加密密鑰:MK = (MK0,MK1,MK2,MK3)

  輸出輪密鑰:rki,i=0,1,…,30,31.

  中間數據:Ki,i=0,1,…,34,35.

  密鑰擴展算法:

① (K0,K1,K2,K3) = (MK0⊕FK0,MK1⊕FK1,MK2⊕FK2,MK3⊕FK3)

② for i = 0,1,…,31,32 do                  

  rk= Ki+4 = Ki⊕T'(Ki+1⊕Ki+2⊕Ki+3⊕CKi)

  說明:T’變換與加密算法輪函數中的T基本相同,只將其中的線性變換L修改為以下L’:

L'(B) = B ⊕ (B<<<13) ⊕ (B<<<23)

  5.3.8 SM4的安全性

  ① 國家專業機構設計,算法簡潔,以字和位元組為處理單位,對合運算,符合當今分組密碼主流;

  ② 專業機構進行了充分的密碼分析,因此是安全的;

  ③ 民間學者對21輪SM4進行了差分密碼分析;

  ④ 尚需經過更進一步的應用實踐檢驗。