维吉尼亚密码

維吉尼亞密碼（又譯維熱納爾密碼）是使用一系列凱撒密碼組成密碼字母表的加密算法，屬於多表密碼的一種簡單形式。
維吉尼亞密碼曾多次被發明。該方法最早記錄在吉奧萬·巴蒂斯塔·貝拉索（ Giovan Battista Bellaso）於1553年所著的書《吉奧萬·巴蒂斯塔·貝拉索先生的密碼》（義大利語：La cifra del. Sig. Giovan Battista Bellaso）中。然而，後來在19世紀時被誤傳為是法國外交官布萊斯·德·維吉尼亞（Blaise De Vigenère）所創造，因此現在被稱為「維吉尼亞密碼」。
維吉尼亞密碼以其簡單易用而著稱，同時初學者通常難以破解，因而又被稱為「不可破譯的密碼」（法語：le chiffre indéchiffrable）。這也讓很多人使用維吉尼亞密碼來加密的目的就是為了將其破解。

歷史

多表密碼最早在1467年左右由萊昂·巴蒂斯塔·阿爾伯蒂提出，他使用了一個金屬密碼盤來切換密碼錶，只是這個系統只能做些有限的轉換。後來1508年時，約翰尼斯·特里特米烏斯《隱寫術》（Steganographia）中發明的表格法（tabula recta）成為了維吉尼亞密碼的關鍵部分。然而當時此方法只能對密碼錶做一些簡單的、可預測的切換。這一加密技術也稱為特里特米烏斯密碼。
這一方法真正出現是在吉奧萬·巴蒂斯塔·貝拉索於1553年所著的書《吉奧萬·巴蒂斯塔·貝拉索先生的算術》中。他以特里特米烏斯的表格法為基礎，同時引入了密鑰的概念。
布萊斯·德·維吉尼亞於1586年亨利三世時期發明了更為簡單卻又更有效的自動密鑰密碼（autokey cipher）。之後，19世紀時貝拉索的方法被誤認為是由維吉尼亞首先發明的。大衛·卡恩在《破譯者（The Codebreakers）》中對此表示遺憾，他寫道「歷史忽略了這一重要貢獻，將其歸功於維吉尼亞，雖然他對此並不知道」。
由於破譯的難度很高，維吉尼亞密碼也因此獲得了很高的聲望。知名作家、數學家查爾斯·路特維奇·道奇森（筆名路易斯·卡羅）在其1868年所編、收於一兒童雜誌的《字母表密碼（The Alphabet Cipher）》中稱其是不可破譯的。1917年，《科學美國人》將維吉尼亞密碼稱為「無法被轉化的」。然而，維吉尼亞密碼卻配不上這樣的稱號。查爾斯·巴貝奇完成了破譯的工作，但他沒有將此發表。之後，弗里德里希·卡西斯基（Friedrich Kasiski）於19世紀完全破解並發表了他的方法。甚至在此之前，一些資深密碼分析家在16世紀就能偶爾將其破解。
維吉尼亞密碼足夠地易於使用使其能夠作為戰地密碼。例如，美國南北戰爭期間南軍就使用黃銅密碼盤生成維吉尼亞密碼。北軍則經常能夠破譯南軍的密碼。戰爭自始至終，南軍主要使用三個密鑰，分別為「Manchester Bluff（曼徹斯特的虛張聲勢）」、「Complete Victory（完全的勝利）」以及戰爭後期的「Come Retribution（報應來臨）」。
吉爾伯特·維爾南（Gilbert Vernam）曾試圖對已被破譯的密碼進行修補（於1918年創造了維爾南-維尼吉亞密碼），然而這終究無濟於事。不過維爾南的發明最終促成了一次性密碼本的誕生，這是一種理論上不可破譯的密碼。

密碼破譯

對包括維吉尼亞密碼在內的所有多表密碼的破譯都是以字母頻率為基礎的，但直接的頻率分析卻並不適用。例如，如果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的約數，即長度為18、9、6、3或2。而兩個NQD則相距20個字母，意味著密鑰長度應為20、10、5、4或2。取兩者的交集，則可以基本確定密鑰長度為2。

頻率分析

一旦能夠確定密鑰的長度，密文就能重新寫成多列，列數與密鑰長度對應。這樣每一列其實就是一個凱撒密碼，而此密碼的密鑰（偏移量）則對應於維吉尼亞密碼密鑰的相應字母。與破譯凱撒密碼類似的方法，就能將密文破譯。
柯克霍夫方法作為卡西斯基試驗的改進，由奧古斯特·柯克霍夫（Auguste Kerckhoffs）提出。它將每一列的字母頻率與轉換後的明文頻率相對應而得出每一列的密鑰字母。一旦密鑰中每一個字母都能確定，就能很簡單地破譯密文，從而得到明文。如果維吉尼亞字母表表格本身是雜亂而非按通常字母表順序的話，那柯克霍夫方法就會無效，但卡西斯基試驗和重複指數對於決定密鑰長度仍舊是有效的。

變體

維吉尼亞密碼的變體滾動密鑰密碼也曾一度被認為是不可破譯的。這種變體的密鑰與密文的長度一致，因此卡西斯基試驗和弗里德曼試驗即變得無效。1920年，弗里德曼首先發現了此方法的弱點。由於滾動密鑰密碼的密鑰是一段真實的語言，因而破譯者便能了解密鑰文本的統計信息，而這種信息也會反映到密文當中。
如果密鑰是完全隨機、與明文的長度一致且只使用過一次，維吉尼亞密碼理論上是不可破譯的。然而，這種情況下密鑰本身而非密文便成了關鍵，這被稱為一次性密碼本。
維吉尼亞本人確實發明了一種更強的維吉尼亞密碼變體——自動密鑰密碼。巴貝奇所破譯的其實是這種自動密鑰密碼，而卡西斯基則通常被認為是首先發表了破譯固定密鑰多表密碼的方法。
還有一種簡單的變體使用維吉尼亞的解碼方法進行加密，同時使用維吉尼亞的加密方法進行解密，這被稱為變異博福特密碼。此方法與弗朗西斯·博福特創造的博福特密碼不同，後者雖然也與維吉尼亞密碼相似，但使用了修改過的加密方式和表格，是一種對等加密。
維吉尼亞密碼錶面上的強度並沒能使其在歐洲得到廣泛使用。由Gronsfeld伯爵所創造的Gronsfeld密碼基本與維吉尼亞密碼相同，不過它只使用10個不同的密碼字母表（對應字母0到9）。Gronsfeld密碼的強度很高，這是因為它的密鑰並不是一個單詞，但缺點在於字母表數量過少。儘管如此，Gronsfeld密碼仍在德國和整個歐洲有著廣泛的應用。