花卷
上期我們講到,意大利密碼學(xué)家貝拉索提出了一種新的多表密碼,我們?cè)囘^(guò)之后發(fā)現(xiàn)這其實(shí)是特里特米烏斯方表的一種改良版,貝拉索首創(chuàng)了一種叫作“口令”(Countersign)的機(jī)制,消除了密鑰輪換的規(guī)律性。那么,貝拉索的這種密碼到底能不能解決特里特米烏斯方表所遺留的“隱匿式安全”的問(wèn)題呢?后來(lái)還有沒(méi)有更先進(jìn)的多表置換密碼呢?這些密碼又該如何破解呢?別急,我們一個(gè)一個(gè)來(lái)看。
口令的妙用
通過(guò)和特里特米烏斯方表的對(duì)比,我們很容易看出來(lái),其實(shí)貝拉索的密碼就是特里特米烏斯的方表,只是比它多了一個(gè)口令的設(shè)計(jì),這個(gè)口令,看上去是一小步,其實(shí)可是關(guān)鍵性的一大步。為什么這么說(shuō)呢?因?yàn)閷?duì)于貝拉索的密碼來(lái)說(shuō),哪怕別人拿到了那張表——或者這么說(shuō)吧,貝拉索把他的密碼表就寫(xiě)在書(shū)里,那本書(shū)是公開(kāi)出版的,誰(shuí)想看都能看到——即便如此,決定查表方法和順序的是“口令”,這個(gè)口令特別關(guān)鍵,因?yàn)橹灰恢馈翱诹睢?,僅憑那張表你也不知道該怎么個(gè)查法,也就沒(méi)辦法破譯密文了。
這意味著什么呢?也就是說(shuō),貝拉索的密碼實(shí)現(xiàn)了密碼系統(tǒng)與密鑰的相互分離,密碼系統(tǒng)本身是公開(kāi)的,而密鑰是私密的(只有收發(fā)雙方才知道的),這不就是符合了我們前面說(shuō)過(guò)的那個(gè)“柯克霍夫原則”了嗎?換句話說(shuō),這不就是解決了“隱匿式安全”的問(wèn)題了嗎?
這可真是個(gè)振奮人心的消息吶!從阿爾伯蒂密碼盤,到特里特米烏斯方表,再到貝拉索密碼,我們一步一步地解決了好幾個(gè)問(wèn)題。首先,阿爾伯蒂密碼盤開(kāi)創(chuàng)了多表密碼的先河,從根本上帶來(lái)了比單表密碼更高的安全性;然后,特里特米烏斯方表解決了密鑰需要手動(dòng)輪換的問(wèn)題;接下來(lái),貝拉索密碼又解決了“隱匿式安全”問(wèn)題。那么到了這一步,貝拉索密碼是不是就已經(jīng)是多表密碼的“集大成”之作了呢?可是既然如此,為啥這種密碼好像沒(méi)啥人知道,反倒是我們之前提過(guò)的“維熱納爾方表”才是最著名的多表密碼呢?嗯,這個(gè)問(wèn)題確實(shí)詭異,那我們就來(lái)看看維熱納爾方表到底是何方神圣吧。
維熱納爾方表
不用我說(shuō)你也知道,維熱納爾方表肯定是個(gè)叫“維熱納爾”的人提出來(lái)的,這個(gè)人名字叫布萊斯·德·維熱納爾(Blaise de Vigenère),是16世紀(jì)時(shí)的一位法國(guó)外交官。說(shuō)句題外話,如果你碰巧看過(guò)其他一些密碼學(xué)的書(shū),可能大多數(shù)書(shū)里面把Vigenère翻成了“維吉尼亞”,連維基百科的中文詞條都是維吉尼亞,凡是這么翻的一看就不懂法語(yǔ),咱可不能跟他們學(xué)壞了。
維熱納爾17歲就進(jìn)了外交部,這應(yīng)該得益于他會(huì)說(shuō)好幾門外語(yǔ),而且他這一干就是30多年,也算是為法國(guó)的外交事業(yè)奮斗終生了。據(jù)說(shuō)維熱納爾曾經(jīng)在1549年和1566年兩次被外派意大利,說(shuō)實(shí)話,那時(shí)候在駐外大使館工作其實(shí)挺閑的,閑得我們這位維熱納爾同學(xué)都開(kāi)始研究起密碼學(xué)了。還記得之前我們提到的貝拉索先生嗎?貝拉索的那本講他發(fā)明的那個(gè)密碼的書(shū),就是1553年出版的,所以我們謹(jǐn)慎地猜測(cè),工作清閑,而且又對(duì)密碼學(xué)頗有興趣的維熱納爾同學(xué),在1566年那次外派意大利的時(shí)候,沒(méi)理由不去看這本新鮮出爐的著作??!甚至,說(shuō)不定他在1549年那次外派的時(shí)候,就已經(jīng)認(rèn)識(shí)了貝拉索,說(shuō)不定還跟他喝過(guò)幾杯咖啡。
不管維熱納爾到底有沒(méi)有看過(guò)貝拉索的書(shū),反正他后來(lái)搞出來(lái)的“維熱納爾方表”,本質(zhì)上跟貝拉索的密碼完全沒(méi)區(qū)別——或者準(zhǔn)確地說(shuō),維熱納爾就是把貝拉索密碼跟特里特米烏斯方表搞了個(gè)合體,也就是把貝拉索密碼改成了方表的形式。
維熱納爾方表的樣子跟特里特米烏斯方表一模一樣,再回憶一下,特里特米烏斯方表是每加密一個(gè)字母,就切換到下面一行,這種切換方式是固定的,而且有規(guī)律,有點(diǎn)太弱雞。維熱納爾覺(jué)得貝拉索的那個(gè)口令是個(gè)聰明的點(diǎn)子,太妙了,把它搬到方表上來(lái)不就好了嗎?也就是說(shuō),我們先想好一段口令,然后按照口令上的字母來(lái)切換方表中的行。還是我們之前的那個(gè)例子:TI AMO TU MI AMI,口令還是和原來(lái)一樣吧,用FANS,我們把原文和口令先寫(xiě)出來(lái):
現(xiàn)在我們開(kāi)始查表,第一個(gè)字母T,對(duì)應(yīng)的口令是F,先從表上左側(cè)一列找到F行,然后從上面的表頭中找到T列,看看它們交叉的位置是啥?對(duì)了,是Y。第二個(gè)字母I,對(duì)應(yīng)的口令是A,一樣的方法,我們找到了字母I。以此類推,最后得到的結(jié)果就是這樣的:
如果你單看維熱納爾方表的設(shè)計(jì),估計(jì)你會(huì)覺(jué)得這個(gè)設(shè)計(jì)真是太巧妙了,簡(jiǎn)直驚為天人?。〉绻覀円宦窂陌柌倜艽a盤看下來(lái),你就能明白,離開(kāi)了前人的智慧,維熱納爾絕對(duì)想不出這種巧妙的設(shè)計(jì)。不過(guò)也有人說(shuō),明明是貝拉索設(shè)計(jì)出來(lái)的密碼,維熱納爾拿來(lái)捏巴捏巴就改成自己的名字了?這要是放在有專利保護(hù)的年代,絕對(duì)算是侵權(quán)吶!確實(shí),維熱納爾方表和貝拉索密碼在原理上是一回事,不過(guò)維熱納爾的這種改法也不能說(shuō)完全沒(méi)有價(jià)值,至少在易用性上面,方表比貝拉索書(shū)里的那個(gè)表格要好一些,你覺(jué)得呢?
此外,還有一種說(shuō)法認(rèn)為,維熱納爾方表這個(gè)名字是純粹的“張冠李戴”,跟維熱納爾本人其實(shí)毫無(wú)關(guān)系,方表的形式也是貝拉索自己搞出來(lái)的。當(dāng)然了,維熱納爾本人也確實(shí)提出過(guò)一種方表密碼,這種密碼也很厲害,但卻不是我們說(shuō)的這種。好吧,歷史上的事情總是有很多爭(zhēng)議,我也不是歷史學(xué)家,講不清哪種說(shuō)法才是對(duì)的,不過(guò)這對(duì)于我們討論這種密碼似乎也沒(méi)太大影響吧。
無(wú)法破譯的密碼?
維熱納爾方表可以說(shuō)是當(dāng)之無(wú)愧的古典多表置換密碼的巔峰之作了,據(jù)說(shuō)后來(lái)還有人提出過(guò)各種各樣其他類型的多表密碼,但它們也都是跟維熱納爾方表大同小異,完全沒(méi)辦法撼動(dòng)它的霸主地位。想想看,維熱納爾方表是16世紀(jì)的產(chǎn)物,而處于同一時(shí)代的瑪麗女王卻還在用弱不禁風(fēng)的單表密碼,也是件很諷刺的事情吧。
你可能要說(shuō)了,實(shí)踐才是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),維熱納爾方表到底有多厲害,實(shí)踐中有沒(méi)有高手能破譯它呢?我覺(jué)得肯定有,但是那些破譯很有可能是非常僥幸的,有點(diǎn)像瞎貓碰到死耗子,而類似于用頻率分析破譯單表密碼這種通用方法,至少在300年內(nèi)都沒(méi)人搞出來(lái)過(guò),也正是因?yàn)槿绱?,坊間給維熱納爾方表起了個(gè)很牛的外號(hào),叫作“無(wú)法破譯的密碼”(le chiffre indéchiffrable)。對(duì)于一種密碼來(lái)說(shuō),這可以算是頭頂青天至高無(wú)上了吧。
當(dāng)然,外號(hào)歸外號(hào),維熱納爾方表的不敗金身終究還是在300年后被打破了。到底是哪位大牛這么厲害呢?其實(shí),先后有兩個(gè)人幾乎在同一時(shí)期找到了破譯維熱納爾方表的通用方法,我們一個(gè)一個(gè)來(lái)介紹吧。
計(jì)算機(jī)之父
說(shuō)起“計(jì)算機(jī)之父”這個(gè)稱號(hào),好像能夠想到的不止一個(gè)人,比如說(shuō)計(jì)算模型理論的先驅(qū)艾倫·圖靈,以及電子計(jì)算機(jī)邏輯結(jié)構(gòu)的先驅(qū)馮·諾依曼,不過(guò)這兩位都是20世紀(jì)的人物了,我們要說(shuō)的這位計(jì)算機(jī)之父可是他們倆的前輩,他就是查爾斯·巴貝奇(Charles Babbage)。
巴貝奇出生在18世紀(jì)末的英格蘭,比圖靈和馮·諾依曼早了100多年。這個(gè)人也是個(gè)傳奇般的人物。他是個(gè)地道的富二代,老爹是搞金融的,有錢,不過(guò)跟別的那些富二代不一樣,巴貝奇居然還是個(gè)學(xué)霸!俗話說(shuō)得好,不怕別人比你有錢,怕的是別人不但比你有錢,還比你聰明,比你努力。
巴貝奇后來(lái)考上了劍橋大學(xué),主業(yè)研究數(shù)學(xué),成就不小,拿到了皇家天文學(xué)會(huì)的金獎(jiǎng)。不過(guò)他這個(gè)人心思特別活絡(luò),除了數(shù)學(xué)之外,還精通機(jī)械、工程,甚至連經(jīng)濟(jì)學(xué)也頗有研究。巴貝奇之所以有“計(jì)算機(jī)之父”這個(gè)稱號(hào),得歸功于他設(shè)計(jì)的兩臺(tái)特別厲害的機(jī)器——差分機(jī)(Difference engine)和分析機(jī)(Analytical engine)。這兩個(gè)玩意兒,說(shuō)白了就是蒸汽驅(qū)動(dòng)的機(jī)械式計(jì)算機(jī)?,F(xiàn)在我們用的計(jì)算機(jī)是電子的,但巴貝奇那個(gè)年代,還搞不出電子的,即便如此,巴貝奇這兩個(gè)玩意兒可是正經(jīng)的十進(jìn)制數(shù)字計(jì)算機(jī)。其中差分機(jī)專門用來(lái)算多項(xiàng)式數(shù)表,而分析機(jī)就更厲害了,它不但支持條件分支和循環(huán),還可以編程,把100年后圖靈的模型套進(jìn)去一看,巴貝奇的分析機(jī)居然是“圖靈完全”的!也就是說(shuō),現(xiàn)在的計(jì)算機(jī)能做的事情,巴貝奇的那臺(tái)蒸汽老古董都能做,也就是慢點(diǎn)而已。
不過(guò)遺憾的是,巴貝奇的那兩臺(tái)機(jī)器,其實(shí)一臺(tái)都沒(méi)造出來(lái),為啥呢?主要是因?yàn)樵诋?dāng)時(shí)制造這么復(fù)雜的一臺(tái)機(jī)器,管理上的難度實(shí)在是太大了,而巴貝奇這個(gè)人又是想一出是一出,還特別固執(zhí),跟當(dāng)時(shí)項(xiàng)目的總工程師克萊門特天天吵,你說(shuō)這活還怎么干?還有一個(gè)問(wèn)題就是錢,一開(kāi)始巴貝奇在皇家天文學(xué)會(huì)發(fā)表差分機(jī)論文的時(shí)候,英國(guó)政府那是相當(dāng)感興趣,主要是因?yàn)檫@貨有一定的軍事價(jià)值,于是政府就說(shuō),我給你贊助,你幫我造一個(gè)出來(lái)唄。結(jié)果不知道是不是巴貝奇追求完美的強(qiáng)迫癥作怪,不但嚴(yán)重超了預(yù)算,而且還自己倒貼了好多錢,即便是這樣,差分機(jī)還是沒(méi)能造出來(lái)!政府一看這還怎么玩?算了就當(dāng)我的錢打水漂了,后面我也沒(méi)錢給你了,你自己看著辦吧。結(jié)果差分機(jī)就這么流產(chǎn)了。
后來(lái)巴貝奇又設(shè)計(jì)了一個(gè)威力加強(qiáng)版的“差分機(jī)2號(hào)”,計(jì)算精度達(dá)到了31位十進(jìn)制數(shù)。當(dāng)然了,有了上次的教訓(xùn),政府再也不敢跳這個(gè)坑了,沒(méi)錢,所以巴貝奇又沒(méi)造出來(lái)。再后來(lái)的分析機(jī)就更復(fù)雜了,巴貝奇連編程語(yǔ)言都設(shè)計(jì)好了,可惜,還是沒(méi)錢,造不出來(lái),這幾張?jiān)O(shè)計(jì)圖只能跟著他進(jìn)了棺材??蓱z的是,巴貝奇去世了還遭到各種冷嘲熱諷,說(shuō)他的差分機(jī)根本就是騙錢的,就算造出來(lái)也不能用。對(duì)于這種人身攻擊,英國(guó)人覺(jué)得有必要幫這位大牛證明一下他的實(shí)力,不能讓他遭受不白之冤吶!于是在1989年,也就是巴貝奇200周年誕辰的時(shí)候,英國(guó)搞了個(gè)項(xiàng)目,用巴貝奇的“差分機(jī)2號(hào)”設(shè)計(jì)圖,完全仿照19世紀(jì)的制造水平和精度,花了兩年時(shí)間,還真把這玩意兒給造出來(lái)了!而且開(kāi)動(dòng)起來(lái)一試,還真的能算,結(jié)果完全正確!總算是幫巴貝奇狠狠地出了一口惡氣。這臺(tái)差分機(jī)現(xiàn)在擺在倫敦的科學(xué)博物館里,有機(jī)會(huì)的話可以去瞻仰一下。
(那么,巴貝奇到底是用什么方法破解維熱納爾方表的呢?另外一個(gè)破解維熱納爾方表的人又是誰(shuí)呢?我們下期揭曉答案。)