花卷
上期我們講到,文藝復(fù)興時期,意大利一位著名的不務(wù)正業(yè)的建筑師阿爾伯蒂,居然在15世紀就設(shè)計出了一種劃時代的“密碼盤”,就連之后兩百年出現(xiàn)的密碼學(xué)家跟他相比都顯得黯然失色了。上期我們還演示了如何用阿爾伯蒂的密碼盤來進行加密和解密,那么接下來的問題就是,這種密碼盤到底先進在哪里,又有什么弱點呢?
密鑰輪換的秘密
阿爾伯蒂的密碼盤到底先進在哪里呢?讓我們先回憶一下之前加密過的內(nèi)容。之前我們把“TI AMO, TU MI AMI”這句話加密成了“Bivg&yCqiztezt”,而要把這段密文進行解密,需要具備兩個條件:一個是和加密者一模一樣的密碼盤,二是加密者設(shè)定的基準字母(在這個例子中是k)。為了讓大家看得更清楚一些,我們把原文和明文做成一張對應(yīng)表:
1. 原文: T I A M O T U M I A M I
2. 密文: B i v g & y C q i z t e z t
這里要提醒一下,密文中的兩個大寫字母(B和C)代表密碼盤的位置設(shè)定,所以它們不對應(yīng)原文中的任何字母。我們之前講過,傳統(tǒng)的單表密碼最大的弱點就是原文的字母和密文的字母之間存在“一對一”或者“一對多”的確定的對應(yīng)關(guān)系,利用這種關(guān)系,破譯者就可以使出頻率分析大法,抽絲剝繭般地干掉你的密碼。那么,這種確定的對應(yīng)關(guān)系,在阿爾伯蒂的密碼中是不是真的被消除了呢?別著急,我們一步一步地來分析。
首先,原文中一些重復(fù)出現(xiàn)的字母,比如T和A各出現(xiàn)了2次,I和M各出現(xiàn)了3次。拿T為例,我們可以看出,兩個T都分別被加密成了不同的字母(i和q),其他幾個字母的情況也差不多,這說明阿爾伯蒂的密碼至少擺脫了“一 一對應(yīng)”的關(guān)系。
這里你可能要問了,單表密碼通過“一字多碼”的方法,也能做到這一點???這話在理,但我們前面也講過,一字多碼只能實現(xiàn)“一對多”的對應(yīng)關(guān)系,也就是說,一個原文字母能對應(yīng)多個不同的密文字母,但一個密文字母還是只能對應(yīng)一個確定的原文字母。我們來看看阿爾伯蒂的密碼,密文中也有一些重復(fù)出現(xiàn)的字母,比如i就出現(xiàn)了2次,但是你看出來了沒,這兩個i對應(yīng)的原文字母卻是不同的(T和U),這才是阿爾伯蒂密碼盤的精髓(畫重點?。?。
如果破譯者不知道密碼盤的結(jié)構(gòu)和用法,僅憑頻率分析的話是肯定要抓瞎的,因為一旦打破了確定的對應(yīng)關(guān)系,就意味著所有字母的頻率都被混合在了一起,攪成了一鍋粥,很難各歸各位,整體上也就無法體現(xiàn)固有的頻率分布規(guī)律了。阿爾伯蒂的密碼盤之所以能夠?qū)崿F(xiàn)這一點,靠的其實就是“密鑰輪換”。換句話說,每次遇到大寫字母時,都要改變密碼盤中內(nèi)圈和外圈的位置關(guān)系,也就意味著每次遇到大寫字母都會“換”一張新的密碼表——這也正是“多表置換密碼”(Polyalphabetic substitution cipher)這個名字的由來。
密碼盤的弱點
由以上看來,阿爾伯蒂的密碼盤確實是該得個科技進步一等獎,不過,這玩意兒真的完全干翻了頻率分析嗎?真的就無懈可擊了嗎?答案就算我不說你也知道,肯定沒那么好的事兒,下面我們來找找這個密碼盤的弱點吧。其實,這個密碼盤的最大弱點就是密碼盤本身。還記得我們之前說的嗎——這種密碼要確保安全,有一個很重要的前提,即“破譯者不知道密碼盤的結(jié)構(gòu)和用法”。換句話說,如果我知道了這個密碼盤是如何輪換密鑰的,那破譯它也就不難了吧?
現(xiàn)在我們假設(shè)破譯者手里也有一個密碼盤,這個密碼盤有可能是和加密者手上的一模一樣,也有可能不是一模一樣。如果是一模一樣的,那事情就簡單了,因為只要知道了加密者用的基準字母,那破譯者和解密者不就擁有完全一樣的信息了嘛?,F(xiàn)在的問題是,怎么才能知道基準字母呢?這也不難,因為內(nèi)圈和外圈的位置組合只有24種可能性,一個一個試唄!
當(dāng)然,上面這種情況好像有點太理想化了,你可以投訴破譯者“作弊”。那么假設(shè)破譯者手上的密碼盤和加密者手上的不一樣,也就是內(nèi)外圈字母的排列順序都不一樣,但是破譯者知道密碼盤是怎么用的,這樣的條件下,破譯者要怎么玩呢?如果破譯者知道密碼盤的用法,那么他肯定知道大寫字母代表密鑰輪換,而在同一個輪換周期之中,這個密碼盤也就相當(dāng)于一個簡單的單表密碼。拿我們那個例子來說,C后面的密文都屬于同一個輪換周期,里面的原文字母和密文字母也就都是簡單的一對一關(guān)系,你看這段原文里面有兩個字母I,加密之后的密文也就變成了兩個一樣的字母t。而且,如果兩段密文前面的大寫字母相同,也就意味著它們所用的置換表(內(nèi)外圈位置關(guān)系)也相同,如果把整篇密文按照所用的置換表做個分組,那么對于其中的每一組我們都可以用頻率分析來搞定,因為它們都只是簡單的、一對一的單表置換而已,隨便找一個略懂頻率分析的菜鳥都能秒殺之。
多表密碼的進化
其實,阿爾伯蒂在他的專著里描述了兩種密碼盤的用法,我們之前演示的只是其中一種。這種用法有個明顯的弱點,那就是把密鑰輪換擺在了明處,因為代表密鑰輪換的是大寫字母,破譯者一眼就能看出來它們跟別的字母不一樣,這不是此地?zé)o銀三百兩嘛。阿爾伯蒂描述的另一種用法似乎解決了這個問題,在這種用法當(dāng)中,輪換密鑰的標(biāo)記也是用密文字母(小寫字母)來表示——還記得密碼盤的外圈上有4個數(shù)字對吧?如果解密者發(fā)現(xiàn)某個密文字母解密之后是1~4其中的某個數(shù)字,那么就代表在對接下來的密文進行解密之前,需要先按照數(shù)字來進行密鑰輪換。
第二種用法看起來比第一種要靠譜一點嗎?其實也未必,在第一種用法中,我們總共可以搭配出24種不同的置換表,但在第二種用法中,置換表的種類被迫縮減到了4種,這樣一來,對頻率分布的掩蓋效果就差了很多。更何況,那幾個數(shù)字本來的設(shè)計是為了搭配密碼字典來用的,如果把它們征用了做密鑰輪換,那也就相當(dāng)于把字典這個用法給腰斬了。
講到這里大家應(yīng)該已經(jīng)看出來了,阿爾伯蒂是個密碼學(xué)天才,這一點沒毛病,他設(shè)計的密碼盤可以算是多表置換密碼的老祖宗,對后世的密碼影響也是相當(dāng)大。然而,密碼盤的弱點也同樣非常明顯,它的弱點可以概括成下面這兩方面。
第一個弱點是它的密鑰輪換頻率太低。想想看,在什么時候進行密鑰輪換是加密者人工選擇的,實際使用中往往是一句話一換,甚至是幾句話一換。盡管從整體上來看,頻率分布確實被打亂了,但其實每一個輪換周期中連續(xù)的文字都是用同一張置換表來加密的,這就很容易被那些眼尖的破譯者抓住小辮子。
第二個弱點是它的安全性極大地依賴于密碼盤的結(jié)構(gòu)不被破譯者知道。我們之前分析過了,一旦破譯者知道了密碼盤的結(jié)構(gòu)和用法,那么這種密碼的安全性就會大大降低,甚至可以說,安全性完全不如設(shè)計得稍微像樣一點的單表置換密碼。這種弱點,現(xiàn)代密碼學(xué)里還給它專門起了一個名字,叫做“隱匿式安全”(Security through obscurity),意思就是說通過隱匿密碼方案上的一些細節(jié)(比如這個密碼盤的結(jié)構(gòu))來確保安全性。
毋庸置疑,這必須是個反面教材,隱匿式安全那是徹頭徹尾的自欺欺人、掩耳盜鈴—— 一個密碼方案,就不應(yīng)該有什么藏著掖著的,哪怕我把所有的技術(shù)細節(jié)都公開給你看,你照樣破解不了我的密碼,這才是貨真價實的安全吶!上面這句話,其實是密碼學(xué)中一條非常重要的原則,它還有個名字叫做“柯克霍夫原則”(Kerckhoffss principle),而且偉大的信息學(xué)宗師克勞德·香農(nóng)(Claude Shannon)也曾經(jīng)說過一句名言:“敵人了解系統(tǒng)”,意思就是說,在設(shè)計一個系統(tǒng)時應(yīng)當(dāng)假設(shè)敵人有能力完全了解該系統(tǒng)的全部細節(jié)。實際上,我們現(xiàn)在用的最主流的那些密碼算法,比如AES、RSA之類的,都遵循柯克霍夫原則。也就是說,它們的所有細節(jié),無論是設(shè)計原理還是源代碼,全都是公開的,你想看就能看(只要你能看得懂),但這絲毫不會影響它們的安全性——只要你不知道密鑰,要破解這些密碼依然是極其困難的。
上面這兩個弱點,不務(wù)正業(yè)的阿爾伯蒂到最后也都沒能解決,估計是忙著蓋樓沒空管這攤子事兒吧。那么后人有沒有解決這兩個問題,設(shè)計出更先進的多表置換密碼呢?答案當(dāng)然是肯定的,只不過事情得一步一步來,問題也得一個一個解決。
1508年,有一位名叫約翰尼斯·特里特米烏斯(Johannes Trithemius)的德國人寫了一部叫Polygraphia的著作,這個詞現(xiàn)在的意思已經(jīng)變了,那個時候的意思類似于“多重密碼”(poly-代表“多”,-graphia代表“記錄”)。這個特里特米烏斯挺有意思的,他是個修道士,經(jīng)常寫一些神秘兮兮的書,比如講占星術(shù)啦、通靈啦什么的。除此之外,他還負責(zé)編纂過一部編年史,但是這貨的業(yè)務(wù)水平實在不咋地,寫個歷史書居然也能開腦洞,各種胡編亂造夾帶私貨,都快把歷史寫成小說了。
除了上面說的這本Polygraphia,他在更早的1499年還寫過另外一本更奇葩的書叫做Stegnographia。如果你看過本專欄之前的連載,肯定對這個詞有點印象,它就是我們講希波戰(zhàn)爭的時候提到的“隱寫術(shù)”(Stegnography)嘛——沒錯,而且更重要的是,這個詞還就是特里特米烏斯在這本書里“首創(chuàng)”的。為啥說這本書奇葩呢?因為這本書的內(nèi)容看起來都是講魔法和通靈的,但其實里面另有玄機,在他去世100年之后,這本書才正式印刷出版,其中給出了一部分解密用的“密鑰”,用這些密鑰解密之后,人們才恍然大悟——原來這本書是講隱寫術(shù)和密碼術(shù)的!
那么,這本Polygraphia又是講啥的呢?特里特米烏斯在這本書里面介紹了一種新的多表置換密碼,還給它起了個名字叫“方表”(Tabula recta)。方表方表,顧名思義,就是一張方形的表唄,這有什么稀奇的呢?其實,特里特米烏斯的方表在多表密碼的發(fā)展史上具有非常重要的意義,因為它是最著名的一種多表密碼——“維熱納爾方表”的原型,而圍繞維熱納爾方表,還曾上演過一場精彩的攻防戰(zhàn)。
(特里特米烏斯的方表到底是什么樣的呢?它解決了阿爾伯蒂密碼盤的哪些問題呢?關(guān)于維熱納爾方表的攻防戰(zhàn)又是怎么一回事?我們下期繼續(xù)講。)