天天看點

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

寫在前面:

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

  解密算法:

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                  

  rki = 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的安全性

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

去更遠的地方 見更亮的光