古典密碼的演化 (二)— 密碼學複習(三)

不愛學習的Shirley發表於2021-08-01

  前面介紹了幾種古典密碼演算法(凱撒密碼、仿射密碼、維吉尼亞密碼、希爾密碼、置換密碼),下面將對其中的幾種密碼演算法站在攻擊者的角度進行分析。

  三、密碼破譯

  密碼破譯的原則:遵循觀察和經驗

  方法:採用歸納與演繹

  步驟:分析、假設、推測和證實

  三大要素

  ① 語言頻率特徵:如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測試法得到的長度是否正確。

 

相關文章