複習完密碼學的基本概念後,下面對古典密碼進行簡單的複習。下圖列出的是經典密碼體制的框圖。(由於比較懶就直接放筆記的照片了⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄)
古典密碼學大體上可以分為 代換密碼 和 置換密碼。
(1)代換密碼
構造一個或多個密文字母表,然後用密文字母表中的字母或字母組來代替明文字母或字母組。各字母或字母組的相對位置不變,但其本身改變了。
(2)置換密碼
又稱換位密碼。把明文中的字母重新排序,字母本身不變,但其位置改變了。
2.1 移位密碼演算法 Shift Cipher
設 M = C = Z26,對任意的 key∈Z26, x∈M, y∈C.
定義ekey(x) = x + key (mod 26)
同時dkey(y) = y - key (mod 26)
注:26個英文字母與模26剩餘類集合{0,1,...,25}建立一一對應。
移位密碼很容易受到唯密文的攻擊。
例子:凱撒密碼(key = 3)
若此時明文為venividivici.則密文為:yhqlylglylfl.若解密只需將密文左移三位即可。
2.2 仿射密碼演算法
加密函式取形式為:e(x) = ax + b (mod 26), a,b∈Z26.
要求唯一解的充要條件是gcd(a,26)=1.
注:之所以要求a與26互素。目的是為了保證逆元存在。同時,因為a與26互素,所以a可取φ(26)個。φ(26)=φ(2)φ(13)=1×12=12.故a可取12個。
該演算法描述為:
設 M = C = Z26
K = {(a,b)∈Z26×Z26; gcd(a,26)=1}
對 key=(a,b)∈K, x∈M, y∈C,
定義 ekey(x) = ax + b (mod 26) 和 dkey(y) = a-1(y-b) (mod 26).
在Z26中,滿足gcd(a,26)=1的a只有12個值(1,3,5,7,9,11,15,17,19,21,23,25),因此仿射密碼的金鑰空間大小為12×26=312個。
對於Z26中與26互素的元素,相應的乘法逆元為:
1-1 mod 26 = 1 3-1 mod 26 = 9 5-1 mod 26 = 21 7-1 mod 26 = 15
9-1 mod 26 = 3 11-1 mod 26 = 19 15-1 mod 26 = 7 17-1 mod 26 = 23
19-1 mod 26 = 11 21-1 mod 26 = 5 23-1 mod 26 = 17 25-1 mod 26 = 25
求逆元過程(以9-1 mod 26 = 3為例)
9·9-1≡1 (mod 26)
9x≡1 (mod 26) 其中x≡9-1 (mod 26)
x = x-1+9-1·26 (mod 26)
= 9-1(1+26) (mod 26)
= 3 (mod 26)
∴ 9-1≡3 (mod 26)
仿射密碼演算法例子
設 k=(7,3),注意到7-1 mod 26 = 15,
加密函式:ek(x) = 7x + 3 (mod 26)
解密函式:dk(y) = 15(y-3) (mod 26) = 15x-19 (mod 26)
易見 dk(ek(x)) = dk(7x + 3) = 15(7x + 3)-19 = x+45-19 = x (mod 26)
若加密明文為hot,則有如下步驟:
① 轉換字母h、o、t為數字7、14、19
② 然後加密:
③ 解密有:
2.3 單表代換密碼 —— 分析
(1)金鑰量一般比較小,難以抵抗窮盡搜尋攻擊。
(2)即使金鑰量很大,但因為沒有將明文字母的頻率隱藏起來,所以也很容易受到頻數分析法的攻擊。
2.4 單表代換的優缺點
優點:
明文字元的形態一般將面目全非。
缺點:
a.明文的位置不變
b.明文字元相同,則密文字元也相同。從而導致:
① 若明文字元被加密成密文字元a,則明文中e的出現次數就是密文中字元a的出現次數;
② 明文的更隨關係反映在密文之中。因此,明文字元的統計規律就完全暴露在密文字元的統計規律之中,形態變但位置不變。
2.5 單表代換密碼的統計分析舉例
密文為:YIFQFMZR...CFWDJNZDIR(共168個字母)
分析:∵Z出現20次,出現的頻率約為0.12
∴猜測D(Z)=e
∵出現至少10次的密文字母為C、D、F、J、M、R、Y,出現頻率約在0.06到0.095之間
∴猜測{D(C),D(D),D(F),D(J),D(M),D(R),D(Y)}={t,z,o,i,n,s,h,r}...
以此類推
不太明白的話可以參考[2.3_單表代替密碼的分析]
2.6 多表代換密碼
多表代換密碼是一系列(兩個以上)代換表依次對明文訊息的字母進行代換的方法。可以分為:非週期多表代換密碼 和 週期多表代換密碼。
非週期多表代換密碼:代換表是非週期的無限序列。
週期多表代換密碼:代換表個數有限,重複使用。
2.6.1 維吉尼亞密碼 Vigenére cipher
設 m 是某固定的正整數,定義P=C=K=(Z26)m,對一個金鑰 k=(k1,k2,...,km),定義
ek(x1,x2,...,xm) = (x1+k1,x2+k2,...,xm+km)
dk(y1,y2,...,ym) = (y1-k1,y2-k2,...,ym-km)
且所有的運算都在Z26中。
簡單地說,可以將其描述為如下形式:
金鑰 K=(k1,k2,...,kn),
明文 P=(p1,p2,...,pn),
密文 C=(c1,c2,...,cn).
加密:ci=pi+ki (mod 26)
解密:pi=ci-ki (mod 26)
金鑰一般是一個單詞或一句話去除後面的重複字母后構成。
本質:多個移位密碼
金鑰量:對於n為金鑰,金鑰量有
例子:
2.6.2 希爾密碼 Hill cipher
設m是某個固定的正整數,P=C=(Z26)m,又設K={m×m可逆陣,Z26};對任意k∈K,定義
ek(x) = xk
則dk(y) = yk-1
其中所有的運算都是在Z26中進行。
其中明文、密文和金鑰可以寫成如下形式:
注意:
k必須滿足條件:
1.非奇異矩陣,即|k|≠0,
2.gcd(|k|,26)=1 (mod 26)
加密:
解密:
例子1:
例子2:
介紹完希爾密碼後,接下來對希爾密碼的特點進行介紹:
(1)完全隱藏了單字母的頻數;
(2)字母和數字的對應可以改成其他方案,使得更不容易被攻擊成功;
(3)能比較好地抵抗頻數法的分析,對抗唯密文攻擊強度較高。
2.7 置換密碼 Permutation Cipher 或 Transposition Cipher
設m是某個固定的正整數,P=C=(Z26)m,且K由所有{1,2,...,m}的置換組成,對一個金鑰(即一個置換∏),定義
e∏(x1,x2,...,xm) = (x∏(1),x∏(2),...,x∏(m))
d∏(y1,y2,...,ym) = (y∏-1(1),y∏-1(2),...,y∏-1(m))
其中∏-1是∏的逆置換。
例子:
在簡單對幾種古典密碼演算法進行介紹後,下一篇將介紹密碼破譯。