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