花卷
被忽略的高級(jí)貨
前面我們講了發(fā)生在英國(guó)和法國(guó)的兩段故事,這兩段故事都是發(fā)生在16世紀(jì)到17世紀(jì)的歐洲。看完這兩段故事,你可能會(huì)覺(jué)得,那時(shí)候的密碼雖然下了不少功夫,做了不少改良,但好像還是道高一尺魔高一丈,總有高手能搞定這些密碼,如果這樣的話,那加密還有什么意義,不是跟玩過(guò)家家一樣了嗎?
其實(shí),你想的還確實(shí)有點(diǎn)道理,脆弱的密碼跟裸奔沒(méi)什么區(qū)別,不對(duì),應(yīng)該說(shuō),脆弱的密碼還不如裸奔呢。這話放到現(xiàn)在也一點(diǎn)都不過(guò)時(shí),就好像我要送人一個(gè)東西,又不想讓別人看到里面是啥,于是就在外面套個(gè)黑的塑料袋,如果你手里沒(méi)有黑塑料袋,你恐怕會(huì)猶豫一下我還要不要送這個(gè)東西。其實(shí)密碼就是這個(gè)黑塑料袋,如果沒(méi)有密碼的保護(hù),人們也不會(huì)輕易地把那些性命攸關(guān)的敏感信息發(fā)出去。但反過(guò)來(lái)說(shuō),一旦有了密碼,人們的膽子可就大多了,他們心想反正我已經(jīng)加密了,里面的內(nèi)容應(yīng)該不會(huì)泄露出去吧?這就是為什么我們說(shuō)脆弱的密碼還不如裸奔,因?yàn)榇嗳醯拿艽a只是給你壯了膽,卻絲毫沒(méi)能保護(hù)你的信息安全,這不是妥妥的“豬隊(duì)友”嘛。
實(shí)際上,我們說(shuō)的這些,當(dāng)時(shí)歐洲的密碼學(xué)家也都知道,他們也從來(lái)沒(méi)停止過(guò)對(duì)更強(qiáng)大的密碼的追求,要不然也不會(huì)把單表密碼整得越來(lái)越復(fù)雜。在這里告訴你們一個(gè)秘密吧,其實(shí)無(wú)論是瑪麗女王也好,還是路易十四也罷,他們用的密碼完全不能代表當(dāng)時(shí)的最高水平,換句話說(shuō),更高級(jí)的密碼其實(shí)早就出現(xiàn)了,只不過(guò)這些人“不識(shí)貨”而已。這話看起來(lái)有點(diǎn)玄乎,難道這正是傳說(shuō)中的“高手在民間”?這次的故事,講的就是這種當(dāng)時(shí)沒(méi)有怎么被重用,但卻特別具有劃時(shí)代意義的高級(jí)貨。
超越單表密碼
要講這種高級(jí)貨,我們先來(lái)總結(jié)一下之前講了很久的老熟人——單表密碼。包括瑪麗女王的密碼、路易十四的“偉大密碼”在內(nèi)的大部分當(dāng)時(shí)常見(jiàn)的密碼,其實(shí)都屬于單表密碼這個(gè)大類,說(shuō)白了,就是換湯不換藥,本質(zhì)上大同小異。單表密碼的特點(diǎn)也很容易總結(jié),它基本上都是“一對(duì)一”的置換,舉個(gè)簡(jiǎn)單的例子,把A置換成1,把B置換成2,把C置換成3,以此類推。當(dāng)然了,我們之前也提到過(guò),為了提高單表密碼的強(qiáng)度,人們又搞出了一字多碼,比如說(shuō),A現(xiàn)在不僅可以置換成1,還可以置換成51和81,顯然這是為了對(duì)付頻率分析用的“障眼法”。
看到這里你可能要問(wèn)了,一字多碼不就不是“一對(duì)一”置換了么?唔,怎么說(shuō)呢,你說(shuō)得對(duì),這種不是一對(duì)一了,我們姑且算它“一對(duì)多”吧。然而,盡管一個(gè)字母可以對(duì)應(yīng)多個(gè)碼,但是反過(guò)來(lái)看,每個(gè)碼還是只能對(duì)應(yīng)一個(gè)確定的字母,比如說(shuō)看到51,我可以確切地知道它肯定代表A,而不可能代表別的字母。對(duì)于破譯者來(lái)說(shuō),他們手上最強(qiáng)大的武器就是阿拉伯人發(fā)明的頻率分析,也就是根據(jù)密文中字母的頻率分布去猜測(cè)原文。盡管一字多碼可以對(duì)頻率分析造成一些麻煩,但這個(gè)麻煩基本上是“可逆”的,也就是說(shuō),它只是把一個(gè)字母的頻率給“拆散”了,只要我能把拆散的幾塊原樣拼起來(lái),就能夠還原出原本的頻率了對(duì)不對(duì)?也正是因?yàn)檫@樣,這種“障眼法”無(wú)論搞出多少花樣,還是只能騙騙菜鳥(niǎo),對(duì)高手來(lái)說(shuō)只能是隔靴搔癢。
我估計(jì)當(dāng)時(shí)的某些密碼學(xué)家也隱隱約約意識(shí)到,要想設(shè)計(jì)出更厲害的密碼,就必須徹底打破單表密碼的這個(gè)“單一映射”的框框,不然再怎么搞都是白搭。然而怎么才能打破這個(gè)框框,這里面可是需要靈感和技術(shù)的……算了還是不賣關(guān)子了,直接說(shuō)答案,要想超越單表密碼,不僅需要“拆散”,還需要“打亂”,也就是說(shuō),一個(gè)明文字母必須能夠被置換成多個(gè)密文字母,而且反過(guò)來(lái),一個(gè)密文字母也必須能夠?qū)?yīng)多個(gè)明文字母,即必須建立一種“多對(duì)多”的映射才行。拿ABC三個(gè)字母來(lái)說(shuō),加密的時(shí)候,A可以置換成A、B、C中的任意一個(gè),而解密的時(shí)候,A也可以對(duì)應(yīng)A、B、C中的任意一個(gè)。
這種“多對(duì)多”的映射說(shuō)起來(lái)好像挺簡(jiǎn)單的,但實(shí)際設(shè)計(jì)出來(lái)又是另一回事,這里面也是經(jīng)歷了很多波折,更糟心的是,真的設(shè)計(jì)出來(lái)了,還要被人們嫌棄,并沒(méi)有多少人愿意用它,這到底是怎么回事呢?
天才的密碼盤(pán)
那么到底是誰(shuí)最先設(shè)計(jì)出這種超越單表密碼的“多對(duì)多”映射密碼的呢?不用說(shuō),這個(gè)人一定是一位超級(jí)天才,而且是閃閃發(fā)亮的那種,他的名字叫萊昂·巴蒂斯塔·阿爾伯蒂(Leon Battista Alberti)。但凡對(duì)文藝復(fù)興時(shí)代大牛有點(diǎn)了解的人應(yīng)該都對(duì)阿爾伯蒂這個(gè)名字不陌生,沒(méi)錯(cuò),他就是文藝復(fù)興時(shí)期意大利的一位鼎鼎大名的建筑師,佛羅倫薩有很多著名地標(biāo)建筑都是他的杰作,比如魯切拉宮和新圣母教堂。
等等,為啥一個(gè)專門(mén)蓋房子的,會(huì)跟密碼學(xué)扯上關(guān)系?你可別忘了,文藝復(fù)興時(shí)代的大牛很多都是十八般武藝樣樣精通的全才,達(dá)·芬奇就是一個(gè)再好不過(guò)的例子。阿爾伯蒂也不例外,除了特別會(huì)蓋房子,人家還有很多頭銜:作家、藝術(shù)家、詩(shī)人、哲學(xué)家、語(yǔ)言學(xué)家……(感覺(jué)“狗眼”也要被閃瞎了。)除了這些頭銜之外,阿爾伯蒂也被稱為當(dāng)時(shí)最偉大的密碼學(xué)家之一,他最偉大的功績(jī)就是打破了單表密碼的框框,打開(kāi)了新世界的大門(mén)。說(shuō)實(shí)話,就憑這一點(diǎn),就已經(jīng)比當(dāng)時(shí)甚至是之后一兩百年的密碼學(xué)家們不知高到哪里去了。為什么這么說(shuō)呢?因?yàn)榘柌僭谒?467年發(fā)表的專著中就已經(jīng)描述了這種劃時(shí)代的密碼,這比瑪麗女王還早100年,比路易十四還早200年,不僅如此,400多年后聲名大噪的德軍密碼機(jī)Enigma,可以說(shuō)也是由阿爾伯蒂設(shè)計(jì)的這種密碼發(fā)展而來(lái)的,你說(shuō)厲害不厲害。
那么阿爾伯蒂設(shè)計(jì)的這種密碼到底長(zhǎng)什么樣呢?它的核心是一個(gè)圓盤(pán)一樣的裝置,我們可以管它叫“密碼盤(pán)”,阿爾伯蒂管它叫“Formula”。這種密碼盤(pán)由兩個(gè)同心圓環(huán)組成,外面一圈圓環(huán)是固定的,上面刻著20個(gè)大寫(xiě)字母和4個(gè)數(shù)字;里面一圈圓環(huán)是可以轉(zhuǎn)動(dòng)的,上面刻著23個(gè)小寫(xiě)字母和一個(gè)“&”符號(hào)。
至于這個(gè)密碼盤(pán)的用法,我只能說(shuō)還是蠻復(fù)雜的,不過(guò)既然我們要介紹這個(gè)天才的突破,再?gòu)?fù)雜也得講一講對(duì)吧,別嫌我啰唆就行。現(xiàn)在假設(shè)我們要加密的文字是“TI AMO, TU MI AMI.”(意大利語(yǔ)“我愛(ài)你,你愛(ài)我”的意思),然后假設(shè)我們和接受信息的對(duì)方各自都有一套一模一樣的密碼盤(pán),請(qǐng)大家看著下面那個(gè)密碼盤(pán)的圖,我們要開(kāi)始加密啦。
首先,我們需要跟對(duì)方事先約定一個(gè)位于內(nèi)圈上的字母作為“基準(zhǔn)字母”,在這個(gè)例子里,假設(shè)我們約定的基準(zhǔn)字母是k。然后,在開(kāi)始加密第一個(gè)字母之前,我們還要先確定密碼盤(pán)的“配置”。還記得嗎,這個(gè)密碼盤(pán)的內(nèi)圈是可以轉(zhuǎn)的,這意味著內(nèi)圈和外圈可以產(chǎn)生24種不同的位置組合,也就是24種不同的配置。假設(shè)我們現(xiàn)在就用圖上所示的這個(gè)配置,這時(shí)基準(zhǔn)字母k所對(duì)應(yīng)的外圈字母是B,于是我們就在密文的開(kāi)頭寫(xiě)上B。
搞好上面兩步之后,我們就可以開(kāi)始加密正文啦。正文的加密方法不難,對(duì)于明文的每個(gè)字母,我們先找到它在外圈上的位置,然后再找到相對(duì)應(yīng)的內(nèi)圈字母,就是我們要的密文了。舉個(gè)例子,正文的第一個(gè)字母是T,我們?cè)谕馊ο日业絋,然后看看對(duì)應(yīng)的內(nèi)圈字母是啥?哦,是i,好了,我們就在剛才的B后面寫(xiě)下i。以此類推,“TI AMO”加密之后就是“Bivg&y”,注意,我們?cè)诩用艿臅r(shí)候需要把空格和標(biāo)點(diǎn)都去掉。
不知道你發(fā)現(xiàn)了沒(méi)有,到這里為止,阿爾伯蒂的密碼還只是一個(gè)普通的單表密碼,因?yàn)槊魑淖帜负兔芪淖帜甘且粚?duì)一的映射,不過(guò)別急,馬上就是見(jiàn)證奇跡的時(shí)刻,別走神。接下來(lái),我們把密碼盤(pán)的內(nèi)圈轉(zhuǎn)一轉(zhuǎn),于是密碼盤(pán)就變成了另外一種配置,每個(gè)字母的對(duì)應(yīng)關(guān)系也就跟著變了。不過(guò)這里有一個(gè)問(wèn)題,聰明的你一定發(fā)現(xiàn)了,對(duì)方在解密的時(shí)候,也必須在同樣的地方將密碼盤(pán)變成同樣的配置,才能正確解密后面的內(nèi)容。問(wèn)題是對(duì)方怎么知道應(yīng)該在什么地方如何改變密碼盤(pán)的配置呢?答案其實(shí)很簡(jiǎn)單,還記得我們?cè)诿芪拈_(kāi)頭需要先寫(xiě)一個(gè)B么?那個(gè)字母就代表密碼盤(pán)的配置,也就是說(shuō),對(duì)方看到B,就知道現(xiàn)在要將密碼盤(pán)內(nèi)圈上事先約定好的基準(zhǔn)字母k,對(duì)準(zhǔn)外圈上的字母B。那么,當(dāng)需要改變密碼盤(pán)的配置時(shí),我們用一個(gè)外圈字母來(lái)提示對(duì)方就行了,比如說(shuō),現(xiàn)在我們把內(nèi)圈順時(shí)針轉(zhuǎn)動(dòng)一個(gè)位置,這時(shí)基準(zhǔn)字母k對(duì)應(yīng)的外圈字母變成了C,于是接下來(lái)我們需要在密文中也寫(xiě)上這個(gè)字母C,代表“現(xiàn)在要改變密碼盤(pán)配置啦”!
后面的事情就很簡(jiǎn)單了,對(duì)于正文的后半部分,我們需要用新的密碼盤(pán)配置來(lái)加密,比如說(shuō)下一個(gè)字母是T,之前T對(duì)應(yīng)的是i,但現(xiàn)在不一樣了哦,我們?cè)倏匆幌拢F(xiàn)在對(duì)應(yīng)的應(yīng)該是q,好,那么以此類推,后半部分“TU MI AMI”加密之后就變成了“Cqiztezt”,注意,由于外圈密碼盤(pán)上沒(méi)有字母U,所以這里我們用V來(lái)代替它。最后,把前后兩部分拼起來(lái),我們就得到了最終的密文:“Bivg&yCqiztezt”。
那么這種密碼又該怎么解密呢?如果你看懂了加密的操作,那么解密的操作也就不難想象了,因?yàn)橹灰焉厦娴倪^(guò)程反過(guò)來(lái)做就行了嘛。先回憶一下我們一開(kāi)始說(shuō)的前提條件:解密的人也有一個(gè)一模一樣的密碼盤(pán),而且他知道雙方事先約定好的基準(zhǔn)字母(在這里是k)。當(dāng)解密的人看到密文中的大寫(xiě)字母或數(shù)字(它們屬于外圈)時(shí),就知道這代表密碼盤(pán)的配置,比如說(shuō)他先看到B,就要轉(zhuǎn)動(dòng)密碼盤(pán)的內(nèi)圈,讓基準(zhǔn)字母k指向外圈的字母B。接下來(lái),他只要在內(nèi)圈中找到密文中的字母,再看一下外圈的對(duì)應(yīng)字母,就可以解密出明文了,不過(guò),當(dāng)他再次遇到大寫(xiě)字母或數(shù)字時(shí),就需要重新轉(zhuǎn)動(dòng)密碼盤(pán)來(lái)改變配置才能繼續(xù)解密后面的內(nèi)容。
(那阿爾伯蒂的密碼是不是真的能抵抗頻率分析?這種密碼又有什么弱點(diǎn)呢?我們下期繼續(xù)講。)