[CTF]維吉尼亞密碼(維基利亞密碼)
----------------------百度百科算法
https://baike.baidu.com/item/維吉尼亞密碼/4905472?fr=aladdinide
維吉尼亞密碼(又譯維熱納爾密碼)是使用一系列凱撒密碼組成密碼字母表的加密算法,屬於多表密碼的一種簡單形式。加密
中文名 | 維吉尼亞密碼 |
外文名 | Vigenère cipher |
出 處 | 吉奧萬巴蒂斯塔貝拉索先生的密碼 |
性 質 | 加密算法 |
名詞解釋 | 愷撒密碼的基礎上擴展的多表密碼 |
組成元素 | 明文、密鑰、密表 |
描述
在一個凱撒密碼中,字母表中的每一字母都會做必定的偏移,例如偏移量爲3時,A就轉換爲了D、B轉換爲了E……而維吉尼亞密碼則是由一些偏移量不一樣的愷撒密碼組成。spa
爲了生成密碼,須要使用表格法。這一表格(如圖1所示)包括了26行字母表,每一行都由前一行向左偏移一位獲得。具體使用哪一行字母表進行編譯是基於密鑰進行的,在過程當中會不斷地變換。3d
圖1.表格blog
例如,假設明文爲:ip
ATTACKATDAWNci
選擇某一關鍵詞並重復而獲得密鑰,如關鍵詞爲LEMON時,密鑰爲:get
LEMONLEMONLEit
對於明文的第一個字母A,對應密鑰的第一個字母L,因而使用表格中L行字母表進行加密,獲得密文第一個字母L。相似地,明文第二個字母爲T,在表格中使用對應的E行進行加密,獲得密文第二個字母X。以此類推,能夠獲得:
明文:ATTACKATDAWN密鑰:LEMONLEMONLE密文:LXFOPVEFRNHR
解密的過程則與加密相反。例如:根據密鑰第一個字母L所對應的L行字母表,發現密文第一個字母L位於A列,於是明文第一個字母爲A。密鑰第二個字母E對應E行字母表,而密文第二個字母X位於此行T列,於是明文第二個字母爲T。以此類推即可獲得明文。
用數字0-25代替字母A-Z,維吉尼亞密碼的加密文法能夠寫成同餘的形式:
解密方法則能寫成:
密碼破譯
對包括維吉尼亞密碼在內的全部多表密碼的破譯都是以字母頻率爲基礎的,但直接的頻率分析卻並不適用。例如,若是P是密文中出現次數最多的字母,則P頗有可能對應E(前提是明文的語言爲英語)。緣由在於E是英語中使用頻率最高的字母。然而,因爲在維吉尼亞密碼中,E能夠被加密成不一樣的密文,於是簡單的頻率分析在這裏並無用。
破譯維吉尼亞密碼的關鍵在於它的密鑰是循環重複的。若是咱們知道了密鑰的長度,那密文就能夠被看做是交織在一塊兒的凱撒密碼,而其中每個均可以單獨破解。使用卡西斯基試驗和弗裏德曼試驗來獲得密鑰的長度。
卡西斯基試驗
弗里德里希·卡西斯基於1863年首先發表了完整的維吉尼亞密碼的破譯方法,稱爲卡西斯基試驗(Kasiski examination)。早先的一些破譯都是基於對於明文的認識、或者使用可識別的詞語做爲密鑰。而卡西斯基的方法則沒有這些限制。然而,在此以前,已經有人意識到了這一方法。1854年,查爾斯·巴貝奇受到斯維提斯(John Hall Brock Thwaites)在《藝術協會雜誌》(Journal of the Society of the Arts)上聲稱發明了「新密碼」的激勵,從而破譯了維吉尼亞密碼。巴貝奇發現斯維提斯的密碼只不過是維吉尼亞密碼的一個變種而已,而斯維提斯則向其挑戰,讓他嘗試破譯用兩個不一樣長度的密鑰加密的密文。巴貝奇成功地進行了破譯,獲得的明文是丁尼生所寫的詩《罪惡的想象》(The Vision of Sin),使用的密鑰則是丁尼生妻子的名字Emily(艾米莉)。巴貝奇從未對他的方法進行過解釋 。在對巴貝奇生前筆記的研究中發現,早在1846年巴貝奇就使用了這一方法,與後來卡西斯基發表的方法相同。
卡西斯基試驗是基於相似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的約數,即長度爲1八、九、六、3或2。而兩個NQD則相距20個字母,意味着密鑰長度應爲20、十、五、4或2。取二者的交集,則能夠基本肯定密鑰長度爲2。
弗裏德曼試驗
弗裏德曼試驗由威廉·F·弗裏德曼(William F. Friedman)於1920年代發明。他使用了重合指數(index of coincidence)來描述密文字母頻率的不勻性,從而破譯密碼。
指目標語言中兩個任意字母相同的機率(英文中爲0.067),
指字母表中這種狀況出現的機率(英文中爲1/26=0.0385),從而密鑰長度能夠估計爲:
其中,觀察機率爲
其中,c是指字母表的長度(英文爲26),N指文本的長度,n1到nc是指密文的字母頻率,爲整數。
此方法只是一種估計,會隨着文本長度的增長而更爲精確。在實踐中,會嘗試接近此估計的多個密鑰長度。一種更好的方法是將密文寫成矩陣形式,其中列數與假定的密鑰長度一致,將每一列的重合指數單獨計算,並求得平均重合指數。對於全部可能的密鑰長度,平均重合指數最高的最有多是真正的密鑰長度。這樣的試驗能夠做爲卡西斯基試驗的補充。 [3]
頻率分析
一旦可以肯定密鑰的長度,密文就能從新寫成多列,列數與密鑰長度對應。這樣每一列其實就是一個凱撒密碼,而此密碼的密鑰(偏移量)則對應於維吉尼亞密碼密鑰的相應字母。與破譯凱撒密碼相似的方法,就能將密文破譯。
柯克霍夫方法做爲卡西斯基試驗的改進,由奧古斯特·柯克霍夫(Auguste Kerckhoffs)提出。它將每一列的字母頻率與轉換後的明文頻率相對應而得出每一列的密鑰字母。一旦密鑰中每個字母都能肯定,就能很簡單地破譯密文,從而獲得明文。若是維吉尼亞字母表表格自己是雜亂而非按一般字母表順序的話,那柯克霍夫方法就會無效,但卡西斯基試驗和重複指數對於決定密鑰長度仍舊是有效的。
變體
維吉尼亞密碼的變體滾動密鑰密碼也曾一度被認爲是不可破譯的。這種變體的密鑰與密文的長度一致,所以卡西斯基試驗和弗裏德曼試驗即變得無效。1920年,弗裏德曼首先發現了此方法的弱點。因爲滾動密鑰密碼的密鑰是一段真實的語言,於是破譯者便能瞭解密鑰文本的統計信息,而這種信息也會反映到密文當中。
若是密鑰是徹底隨機、與明文的長度一致且只使用過一次,維吉尼亞密碼理論上是不可破譯的。然而,這種狀況下密鑰自己而非密文便成了關鍵,這被稱爲一次性密碼本。
維吉尼亞本人確實發明了一種更強的維吉尼亞密碼變體——自動密鑰密碼。巴貝奇所破譯的實際上是這種自動密鑰密碼,而卡西斯基則一般被認爲是首先發表了破譯固定密鑰多表密碼的方法。
還有一種簡單的變體使用維吉尼亞的解碼方法進行加密,同時使用維吉尼亞的加密方法進行解密,這被稱爲變異博福特密碼。此方法與弗朗西斯·博福特創造的博福特密碼不一樣,後者雖然也與維吉尼亞密碼類似,但使用了修改過的加密方式和表格,是一種對等加密。
維吉尼亞密碼錶面上的強度並沒能使其在歐洲獲得普遍使用。由Gronsfeld伯爵所創造的Gronsfeld密碼基本與維吉尼亞密碼相同,不過它只使用10個不一樣的密碼字母表(對應字母0到9)。Gronsfeld密碼的強度很高,這是由於它的密鑰並非一個單詞,但缺點在於字母表數量過少。儘管如此,Gronsfeld密碼仍在德國和整個歐洲有着普遍的應用。