分組密碼(二) — 密碼學複習(五)
寫在前面:
最近好久沒更了,因為前面複習的時候覺得自己之前的手寫筆記實在太難看了,然後就趁着複習重新寫了一本密碼學筆記。把密碼學引論過了一遍之後,去複習了一遍謝希仁的計網,複習完之後現在有着四本新筆記(密碼學一本,計網三本)。學習路還長,慢點沒關係,要一步步走得踏實。讓我秀一下我的四本筆記哈哈哈哈 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
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的安全性
① 國家專業機構設計,算法簡潔,以字和位元組為處理單位,對合運算,符合當今分組密碼主流;
② 專業機構進行了充分的密碼分析,因此是安全的;
③ 民間學者對21輪SM4進行了差分密碼分析;
④ 尚需經過更進一步的應用實踐檢驗。


