寫在前面:
最近好久沒更了,因為前面複習的時候覺得自己之前的手寫筆記實在太難看了,然後就趁着複習重新寫了一本密碼學筆記。把密碼學引論過了一遍之後,去複習了一遍謝希仁的計網,複習完之後現在有着四本新筆記(密碼學一本,計網三本)。學習路還長,慢點沒關系,要一步步走得踏實。讓我秀一下我的四本筆記哈哈哈哈 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的安全性
① 國家專業機構設計,算法簡潔,以字和位元組為處理機關,對合運算,符合當今分組密碼主流;
去更遠的地方 見更亮的光