前面介紹了幾種古典密碼演算法(凱撒密碼、仿射密碼、維吉尼亞密碼、希爾密碼、置換密碼),下面將對其中的幾種密碼演算法站在攻擊者的角度進行分析。
三、密碼破譯
密碼破譯的原則:遵循觀察和經驗
方法:採用歸納與演繹
步驟:分析、假設、推測和證實
三大要素:
① 語言頻率特徵:如E出現頻率最高;
② 連線特徵:q...u,Iex.
③ 重複特徵:th,tion,tious.
3.1 單表代換——密碼分析
利用統計資料獲得密碼分析。
例:假設從仿射密碼獲得的密文為:
FMXVEDKAPHFERBNDKRXRSREFMORUDSDKDVSHVUFEDKAPRKDLYEVLRHHRH.
通過上面的57個密文字母,就可以分析仿射密碼。
最高頻率的密文字母:
R——8次 D——7次 E、H、K——各5次 F、S、V——各4次
根據已知的26個英文字母的概率分佈表:
E——0.127 T——0.091 A——0.082 O——0.075
① 假定R是E的加密,D是T的加密
數值化後有:ek(4)=17 dk(19)=3
而加密函式 ek(x)=ax+b.
可以得到兩個包含兩個未知數的線性方程組:
4a+b=17
19a+b=3
解得 a=6,b=19 (mod 26)
這是一個非法金鑰,因為gcd(6,26)=2≠1,所以假設不成立。
② 假設R是e的加密,E是t的加密,解得 a=13,gcd(a,26)=13≠1,故此時假設不成立。
③ 假設R是e的加密,K是t的加密,此時解得 a=3,b=5.至少這是一個合法金鑰。
接著計算k=(3,5)時的解密函式,之後對密文進行解密,觀察的到的明文是否有意義。
容易驗證a=3,b=5是一個有效金鑰,解得明文為:
Algorithms are quite general definitions of arithmetic process.
3.2 多表代換——密碼分析
3.2.1 希爾密碼
對希爾密碼進行已知明文分析。
希爾密碼在唯密文攻擊下是很難破解的,但容易被已知明文攻擊所攻破。
假設確定了m的值,且得到至少m對不同的m元組:
xj=(x1j,x2j,...,xmj),
yj=(y1j,y2j,...,ymj).(1≤j≤m)
已知yj=ek(xj).
如果定義兩個m×m矩陣,X=(),Y=(),則有矩陣方程Y=Xk,k是未知金鑰。
例:
3.2.2 維吉尼亞密碼
分析維吉尼亞密碼的方法:
第一步:確定金鑰字的長度m:
① Kasiski測試法
② 重合指數法(Coincidence Index)
...
第二步:確定金鑰的具體內容
互動重合指數法、擬重合指數方法
第三步:用單表代換密碼的解密方法解密
統計分析方法
下面將對涉及到的各種方法進行簡單的介紹。
(1)Kasiski測試法
相同的字母序列可能出現在明文的不同地方,這些重複模式是有趣的。因為他們提供了文字里週期的資訊。
例子:
明文:REQUESTS ADDITIONAL TEST
金鑰:TELEXTEL EXTELEXTEL EXTE
密文:CAVKTBLT EUQWSQIGEA LTBL
反映了序列EST間隔的字母數(15)為金鑰長度(5)的倍數。
若用給定的m個金鑰表週期地對明文字母加密,則當明文中有兩個相同字母組在明文序列中間隔的字母數為m的倍數時,這兩個明文字母組對應的密文字母組必相同。
反過來,若密文中出現兩個相同的字母組,它們所對應的明文字母組未必相同,但相同的可能性很大。
如果將密文中相同的字母組找出來,並對其相同的字母數綜合研究,找出它們的相同字母數的最大公因子,就有可能提取出有關金鑰字的長度m的資訊。
尋找密文中相同的片段時,計算每對相同密文片段對之間的聚類,不妨記為d1,d2,...,di,若令金鑰字的長度為m,則m=gcd(d1,d2,...,di).
例子:
明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY
金鑰:ABCDEF AB CDEFA BCD EFABCDEFABCD
密文:CSASXT IT UKSWT GQU GWYQVRKWAQJB
此時,明文中重複的元素在密文中並不重複。
若將金鑰長度6變成4位(ABCDEF->ABCD),得到的密文有:
CSASTP KV SIQUT GQU CSASTPIUAQJB
此時,卡西斯基試驗就能產生效果,對於更長的段落基於此方法更為有效。因為密文中重複的片段很多(退出情況下)。如通過下面的密文就能破譯出金鑰長度:
密文:DYDUXRMHTVDVNQDQNWDYDUXRMHARTJGWNQD
其中,兩個DYDUXRMH的出現相隔了18個字母,因此可以假定金鑰的長度是18的約數,即長度為18、9、6、3或2.而兩個NQD則相距20個字母,意味著金鑰的長度應為20、10、5、4或2.取兩者的交集,則可以基本確定金鑰的長度為2.
(2)重合指數法 Coincidence Index
我們可以通過別的引數來描述猜測的金鑰長度m是否準確的。當計算某個密文的重合指數(重合概率 Index of Coincidence)時,即相當於求在某個密文中隨機無放回地抽取其中的兩位,這兩位的字母相同的概率。
定義一 設X=x1x2...xn是一個長度為n的英文字母串,則X中任意選取兩個字母相同的概率定義為重合指數,用IC(X)表示。
設y是一個長度為n的密文,即y=y1y2...yn,其中yi是密文字母,同樣來求從中抽取兩個字母相同的概率是多少?
設NA為字母A在這份密文中的頻數,NB為字母B在這份密文中的頻數,以此類推。
從n個密文字母中任意抽取兩個有:
NA個A組成的一對A有:
從y中抽到兩個字母都為A的概率有:
從y中抽到兩個相同字母的概率為:
這個資料稱為這份密文的重合指數,記為IC(Y).
假設X是英文文獻,根據字母A,B,...,Z出現的期望概率P0,P1,...,P25,這兩個字母都為A,B,...,Z的概率為P02,P12,...,P252.那麼,
若對隨機產生的英文字母序列進行討論,那麼此時每個英文字母出現的期望概率均為1/26,則在Y中任意抽取兩個字母相同的概率為
那麼,
假設我們使用維吉尼亞加密的密文串為Y,將串分割成m個長度相等的子串,分別為Y1,Y2,...,Ym.
這樣可以以列的形式寫出密文,構造出一個m×(n/m)的矩陣。矩陣的每一行對應於子串Yi,1≤i≤m.
如果按照上述方法構造,則m實際上就是金鑰字的長度,使得每行都是單表代換加密的,不同行是由不同的金鑰加密的。於是每一行的重合指數IC(Yi)=0.0687.
另一方面,如果m不是金鑰長度,那麼子串Yi看起來更隨機,因為它們是通過不同金鑰以移位加密方式獲得的。隨機串的重合指數為IC(Y)=0.0385.
0.0687和0.0385差距還是較大的,故可以按這種方法確定金鑰字長度。
下面來用一個具體的例子進行分析。
所以,若分組準則m為金鑰長度,那麼IC(Y)=0.0687,若不為金鑰長度,此時每行都是由多個不同字母得來的,重合指數為0.0385.
下面用一個經過維吉尼亞加密後的密文來舉例。(①Kasiski測試法 ②重合指數法)
總結:
1.確定金鑰字長度
Kasiski測試法 (估計)
重合指數法 (驗證)
2.確定金鑰字
互動重合指數
(1)Kasiski測試法
原理:
① 兩個相同的明文片段之間的距離如果是金鑰長度的倍數,則它們所對應的密文片段一定相同。
② 反之,若密文中出現兩個相同的密文片段(長度>3),則它們對應的明文片段極有可能相同,
應用步驟:
① 在密文中標出重複的三個或多個字元結構,記下起始位置。
② 計算相鄰起始點的距離。
③ 這些距離若存在某個公因子,則很有可能是金鑰字長度。
(2)確定金鑰字長度——重合指數法
原理:
① 通過比較字串與自然語言之間的相似性。
② 如果密文序列是使用單表加密得到的,那麼它的重合指數與自然語言的重合指數近似相等。
③ 否則,它的重合指數與隨機分佈的重合指數近似相等。
通過計算IC(Y)一般能確定金鑰長度,或驗證由Kasiski測試法得到的長度是否正確。