古典密碼學之所以被稱為古典,是因為區別于現代密碼學,這些密碼理論雖然很有價值,但是現在很少使用。因此,學習古典密碼學,主要是學習前人設計密碼的思路,和他們成功或失敗的歷史。
多表替換密碼(Poly-alphabetic Shift Cipher,Vigenère Cipher)
為了較好地為信息加密,古人發明了加密算法:維吉尼亞密碼(Vigenère Cipher)。其特點就是選用某一段字符串作為其密鑰,并將密鑰重復若干次直到長度與明文相同。
例如,用密鑰“THINK”加密明文"ATTACKATONCE",就要將密鑰重復并得到密鑰排列"THINKTHINKTH"。密鑰排列得到的一串字符,每個字符都代表將該位置的明文字母向后移動某位,從而得到密文。對于上述的"THINKTHINKTH"而言,用所需移位的數字表示就是“19,7,8,13,10,19,7,8,13,10,19,7”。
明文第一位(A)對應密鑰排列的第一位(T),而T在字母表中排第19位(A是第0位),就將明文的第一位字母(A)向字母表排序的后面移動19位,由于A在字母表中排第0位,移動完是第19位T,因此得到密文第一位字母(T);
明文的第二位(T)對應密鑰排列的第二位(H),而H在字母表中排第7位,就將明文的第二位字母(T)向字母表排序的后面移動7位,由于T是第19位,19向后7位是第26位,而字母表中最后一位字母Z是第25位,因此得到新的循環中的字母表第0位,于是得到密文的第二位字母(A);
第三位同理能夠得到字母表中第27位,也就是B。以此類推,最終將會得到密文"TABNMDHBBXVL"。
相較于邏輯推演生成密碼,維吉尼亞密碼還可以使用表格法生成密碼。
如下圖,對于明文的第三個字母T,對應密鑰的第三個字母I,于是使用表格中I行字母表進行加密,得到密文第三個字母B。類似地,明文第六個字母為K,對應密鑰的第六個字母T,在表格中使用對應的T行進行加密,得到密文第二個字母D。以此類推,可以得到密文“TABNMDHBBXVL”。
可以看出,使用表格法無論是加密還是解密,都有著更低的學習成本以及更高的效率。這種密碼的高易用性和不錯的強度讓它聲名顯赫。
維吉尼亞密碼以其簡單易用而著稱,同時初學者通常難以破解,因而又被稱為“不可破譯的密碼”(法語:le chiffre indéchiffrable)。這也讓很多人使用維吉尼亞密碼來加密的目的就是為了將其破解。維吉尼亞密碼足夠地易于使用使其能夠作為戰地密碼。例如,美國南北戰爭期間,南軍就使用黃銅密碼盤生成維吉尼亞密碼。北軍則經常能夠破譯南軍的密碼。戰爭自始至終,南軍主要使用三個密鑰,分別為“Manchester Bluff(曼徹斯特的虛張聲勢)”、“Complete Victory(完全的勝利)”以及戰爭后期的“Come Retribution(報應來臨)”。
對包括維吉尼亞密碼在內的所有多表密碼的破譯,都是以字母的出現頻率為基礎的,但直接的頻率分析卻并不適用。例如,如果’P‘是密文中出現次數最多的字母,則’P‘所代表的明文很有可能是’E‘(在明文為英文的前提下),其原因在本文的第二章已經論述。由于在維吉尼亞密碼中,同一個明文字母可以被加密成不同的密文,因而簡單的頻率分析在這里并沒有用。
然而,維吉尼亞密碼也有著很明顯的漏洞。如果我們知道了密鑰的長度,那密文就可以被看作是交織在一起的愷撒密碼,而其中每一個都可以單獨破解。例如,上個例子中以”THINKTHINKTH“作為密鑰排列,這種情況下明文的第一位和第六位都將以密鑰字母’T‘加密,它們的偏移量就是相同的。倘若明文足夠長,就可以選取所有模5同余的位上得到字母來組成一組愷撒密碼。
因此,對于一個明文足夠長、密鑰長度為t的維吉尼亞密碼,至多需要將其按照模t同余的原則分解為t組平移密碼即可破譯。于是,破譯過程的核心便落在了如何取得t值上。
五、卡西斯基試驗(Kasiski’s Method)、弗里德曼試驗和重合指數(Index of Coincidence)
為了求出密鑰長度t,可以利用卡西斯基實驗和重合指數。卡西斯基實驗的內容很容易理解,不多做贅述。這里引用百度百科中的例子。
卡西斯基試驗是基于類似the這樣的常用單詞有可能被同樣的密鑰字母進行加密,從而在密文中重復出現。例如,明文中不同的CRYPTO可能被密鑰ABCDEF加密成不同的密文:
????????密鑰:ABCDEF AB CDEFA BCD EFABCDEFABCD
????????明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY
????????密文:CSASXT IT UKSWT GQU GWYQVRKWAQJB
此時明文中重復的元素在密文中并不重復。然而,如果密鑰相同的話,結果可能便為(使用密鑰ABCD):
????????密鑰:ABCDAB CD ABCDA BCD ABCDABCDABCD
????????明文:CRYPTO IS SHORT FOR CRYPTOGRAPHY
????????密文:CSASTP KV SIQUT GQU CSASTPIUAQJB
此時卡西斯基試驗就能產生效果。對于更長的段落此方法更為有效,因為通常密文中重復的片段會更多。如通過下面的密文就能破譯出密鑰的長度:
????????密文:DYDUXRMHTVDVNQDQNWDYDUXRMHARTJGWNQD
其中,兩個DYDUXRMH的出現相隔了18個字母。因此,可以假定密鑰的長度是18的約數,即長度為18、9、6、3或2。而兩個NQD則相距20個字母,意味著密鑰長度應為20、10、5、4或2。取兩者的交集,則可以基本確定密鑰長度為2。??
除了卡西斯基實驗,我們也可以使用別的參數來描述猜測的t值是否準確。當計算某個密文的重合指數(又名:重合概率,Index of Coincidence)時,即相當于求在某個密文中隨機無放回地抽取其中的兩位,這兩位的字母相同的概率。
對于一個由任意字母表所構成的密文字母串而言,其重合指數可以表示下圖:
其中c是歸一化系數,用于對不同字母表進行歸一化處理(英語為26),n?下標a是字母“a”出現在文本中的次數,N是文本的長度。重合指數也可以用求和的形式來表示:
我們已經知道,維吉尼亞密碼可以被分解為若干組平移密碼來破譯,而一個明文足夠長的平移密碼的重合指數接近0.0687。換言之,如果我們選取某個t值,使得分組后的密文的重合指數接近0.065,則說明選取的t值與密鑰的長度是一致的。?
在一串無規律的字母中,我們隨意抽取兩個字母,由于每個字母被抽到的概率相同,因此抽取的兩個字母相同的概率為26*(1/26)^2=0.0385。如果是從一篇文章或者一句完整的話中抽取,此時的概率為P(a)^2+P(b)^2+….+p(z)^2=0.067。這種特性是破譯密碼的一大關鍵,正常的單表替換,其重合指數更接近于0.067,而像維吉尼亞密碼這類周期性多表替換,其重合指數更接近于0.0385。
這里引用維基百科中的例子進一步闡述,為簡化描述,下文中“重合指數”全部指明文為英文時的情況:
作為使用IC的實際例子,假設我們截獲了以下密文消息:
QPWKA LVRXC QZIKG RBPFA EOMFL JMSDZ VDHXC XJYEB IMTRQ WNMEA IZRVK CVKVL XNEIC FZPZC ZZHKM LVZVZ IZRRQ WDKEC HOSNY XXLSP MYKVQ XJTDC IOMEE XDQVS RXLRL KZHOV
(分為五個字符只是一個電報慣例,與實際字長無關。)我們懷疑這是一個使用Vigenère密碼加密的英文密文,其中包含普通的A-Z分量和一個短的重復關鍵字,我們可以考慮密文“堆疊”成若干列,例如7列:
Q????P????W????K????A????L????V
R????X????C????Q????Z????I????K
G????R????B????P????F????A????E
O????M????F????L????J????M????S
D????Z????V????D????H????X????C
X????J????Y? ? ?E? ? B? ? ?I? ? ?M
T????R????Q? ?W????N????...????...
如果密鑰大小恰好與假定的列數相同,那么單個列中的所有字母都將使用相同的密鑰字母加密,實際上是一個簡單的愷撒密碼,應用于隨機選擇的英文明文字符。與它們相應的密文字母組,盡管每個字母已被置換(移位對應于密鑰字母的量,參考本文第四節),也應具有類似于英語的頻率分布的粗糙度。
因此,如果我們計算每列重合指數IC,它應該在0.067左右;另一方面,如果我們猜錯了密鑰大小(也就是選錯了列數),則其重合指數IC應該在0.0385左右。因此,我們分別計算當密鑰大小從1到10時的 IC:
從上圖可以看出,密鑰長度t很可能是5.如果實際長度是5,那么當長度取10的時候也會有較高的IC,原因是此時它的每列也對應一個簡單的愷撒加密。
在求得密鑰長度之后,通過窮舉密鑰字母的每一種可能取值(A到Z總共26種),并且針對每一行求其在某一取值下重合指數,重合指數最高的情況下該行最有可能為明文原文,此時的窮舉結果即為密鑰字母。以下是經過解密后得到的明文:
MUSTC HANGE MEETI NGLOC ATION FROMB RIDGE TOUND ERPAS SSINC EENEM YAGEN TSARE BELIE VEDTO HAVEB EENAS SIGNE DTOWA TCHBR IDGES TOPME ETING TIMEU NCHAN GEDXX
從中可以讀出明文想要發送的信息為:
是否必須將會議地點從橋改到地下通道,因為據信敵方特工已被派去觀看橋頭會議.時間不變XX
在明顯的位置恢復了單詞劃分。“?XX”顯然是“空”字符,用于填充最后一組進行傳輸。
整個過程可以很容易地打包成自動算法來破解這些密碼。由于正常的統計波動,這種算法偶爾會做出錯誤的選擇,特別是在分析短密文時。
以上內容僅代表本人大學學習思考內容,如有侵權及時刪除,歡迎討論和指教!