花卷
前情提要
上期我們講到,蘇格蘭瑪麗女王自帶霉運光環(huán),在三次不幸的婚姻之后,她被廢除了王位,流亡到英格蘭投奔女王伊麗莎白一世,然而卻因此被卷入了一場巨大的陰謀……
諜影重重
自從瑪麗女王被軟禁在英格蘭之后,外面的天主教勢力就沒消停過,因為他們認為只有瑪麗才配當正統(tǒng)的英格蘭女王,而伊麗莎白的出生本身就是個錯誤。伊麗莎白察覺到這些風(fēng)聲之后,派了她的首席秘書兼特務(wù)頭子弗朗西斯·沃辛漢爵士去好好盯著瑪麗,千萬別讓她整出什么幺蛾子。盡管所謂的軟禁還是好吃好喝的,生活也算悠閑自在,至少比監(jiān)獄里的犯人好太多了,不過瑪麗并沒有人身自由,不能離開查特利城堡半步,更別說跟什么人見面了。你說瑪麗就甘心這樣被軟禁一輩子嗎?當然不會,而且她也知道天主教勢力,特別是法國教會的人很愿意把她救出去,但是瑪麗自己不表個態(tài),這些人也沒辦法行動呀。那么現(xiàn)在問題來了,怎樣才能跟這些人取得聯(lián)系呢?
瑪麗嘗試給蘇格蘭寫信,給法國寫信,可是這些信就像石頭扔進大海一樣,寄出去就回不來了——恐怕瑪麗自己也明白,伊麗莎白現(xiàn)在對她看得這么緊,怎么能讓她的書信自由進出呢?就在瑪麗覺得一籌莫展的時候,天上忽然掉了一塊餡餅下來。1586年,有個叫吉爾伯特·吉福爾德(Gilbert Gifford)的人主動跟瑪麗秘密接觸,他自稱是天主教徒,法國“海龜”,而且還是瑪麗的“粉絲”,更重要的是,他說他有辦法幫瑪麗把信送出去,還能幫瑪麗把外面的信帶進來。
這個人什么來頭,居然如此神通廣大?難道瑪麗倒霉了半輩子,如今終于遇到貴人,要轉(zhuǎn)運啦?吉福爾德到底什么身份我們先賣個關(guān)子,反正他確實給瑪麗想了個辦法,打通了給查特利城堡送啤酒的商人的關(guān)系,把寫給瑪麗的信全都塞到啤酒桶里混進去,回收空桶的時候再順便把瑪麗寫給外面的信送出來。吉福爾德先跑了趟法國駐英國大使館,從里面把從法國寄給瑪麗的信全拿出來了。為啥法國大使館里面會有那么多信呢?因為大使館覺得這些信即便送出去也會被伊麗莎白的人攔下來,鐵定到不了瑪麗手里啊,萬一里面有啥不該看的呢?干脆先放在大使館里保管著吧。吉福爾德拿到這些信之后,就用啤酒桶的這招把信送進去了,瑪麗一看,嘩,真不枉我在法國待了這么多年,還真的有人惦記著我,而且吉福爾德這個年輕人確實有兩把刷子,有他幫忙,我何愁脫不了身呢?
從此,吉福爾德就成了瑪麗的御用信使,幫助瑪麗跟各方勢力取得聯(lián)絡(luò),大家聽說現(xiàn)在有辦法跟瑪麗女王通信了,也都開始摩拳擦掌準備干一票大的。這里面就有那么一伙人,以安東尼·巴賓頓(Anthony Babington)為首,他們的腦洞尤其大,想出來了一個驚天大計劃,當然,救瑪麗出來也是其中一環(huán)。至于這個計劃到底是什么內(nèi)容,我們還是先賣個關(guān)子,總之,有了吉福爾德的幫助,瑪麗跟這伙人順利接上頭了。不過,就算有啤酒桶傳書的妙法,這畢竟跟古希臘蠟板什么的其實是一路貨,都是把信息藏起來嘛,可是萬一被發(fā)現(xiàn)了怎么辦呢?時間過了1000多年,總得有點進步吧,實際上,瑪麗和這伙人之間的書信,那可都是經(jīng)過加密的。
并不神秘的古典密碼
瑪麗用的到底是怎樣一種密碼呢?她用的是一種比較典型的單表置換密碼——等等,啥叫單表置換密碼啊?為了搞清楚這個問題,我們還是先來惡補一下古典密碼的進化史吧。
首先來思考一個問題:一段信息,怎樣處理一下才能讓外人看不懂,還得能讓收件人看懂呢?我們的老祖宗思考這個問題很久啦,最直接的一種方法就是把信息中的每個字替換成另外的字,這個替換是有規(guī)律的,掌握這個規(guī)律的人就能夠把信息還原出來,而不知道這個規(guī)律的人就還原不出來,這就是所謂的“置換密碼”。
傳說古羅馬帝國的愷撒大帝就用過一種最原始的置換密碼,這種密碼是把每一個字母都按照字母表做相同的平移。舉個“栗子”,如果平移3個字母,那么A就變成D,B就變成E,以此類推,到字母表尾部再轉(zhuǎn)回來,X變成A,Y變成B,Z變成E。如果我有一段信息,就假設(shè)是I LOVE YOU吧,那么平移之后就變成了L ORYH BRX,怎么樣,看不懂了吧?當然,如果我知道這個平移的秘密,只要反向平移3個字母,信息就可以還原啦。
不過,愷撒的這種密碼有點太弱雞了,你想想看,假設(shè)字母表有26個字母,那么平移字母表就只有26種移法(其中移0個字母相當于不變,不過我們暫且算作一種移法),如果我是敵人,我只要從頭到尾試一遍,花不了幾分鐘就能全試過來了吧!這不是跟紙糊的一樣嘛……
既然愷撒密碼這么不靠譜,那么我們就改進一下吧。平移字母表的移法太有限了,那如果我把字母置換的順序打亂呢?比如A→R,B→F,C→B……不過既然這種置換完全沒規(guī)律,那么就必須得寫一張完整的置換表,對照著這張表才能加密和解密信息,像這種根據(jù)“一張表”來進行“置換”的密碼,就叫“單表置換密碼”啦。
那么我們思考一下,單表置換密碼有多少種換法呢?第一個字母A有26種換法(換成自己也算),第二個字母B要去掉A的換法(比如A換成R,那么B就不能換成R了),所以B有25種換法,以此類推,C有24種換法,D有23種……那么,26個字母的單表置換密碼總共有26×25×24×……×1=26?。?6的階乘)種。這個數(shù)字有多大呢?差不多是4后面26個零那么大,總之非常非常非常大就是了。這么多種換法,總歸不可能一個一個試了吧?哼哼。
阿拉伯黑科技
既然單表置換這么厲害,是不是就沒辦法破譯了呢?你太天真了。1987年,考古學(xué)家挖出了一本公元9世紀的阿拉伯手稿,翻開一看,嘩,里面講的全是破譯密碼的黑科技,原來單表置換密碼什么的1000年前就能破譯給你看啦。
那么阿拉伯人的黑科技到底是什么鬼呢?其實沒什么高深的東西,無非是一種古老的魔法——統(tǒng)計學(xué)。我們假設(shè)原始的信息是用英語寫的,如果我們對好多好多好多的英語文章進行一下統(tǒng)計,看看每個字母各自出現(xiàn)了多少次,我們就可以得到這么一張表(看下圖)。
這張表我們粗略一看就能發(fā)現(xiàn),E是出現(xiàn)頻率最高的,而E、T、A、O、I則占據(jù)了Top 5。單表置換密碼只是把每個字母找另外一個字母替代了一下,但它并沒有改變字母的出現(xiàn)頻率,比如說,假設(shè)E被置換成了P,那么所有的E現(xiàn)在都是P了,如果我把密文里的字母也都數(shù)一下,發(fā)現(xiàn)里面P是最多的,那我就有理由相信,P很可能就代表原來的E。
當然,信息的內(nèi)容不同,某些字母出現(xiàn)的頻率還是會有波動的,但頻率最高的這幾個字母基本上是雷打不動的吧。通過這個規(guī)律,破譯者就能掌握一些線索,然后再通過類似填字游戲的方式順藤摸瓜,把所有字母的置換方式都找出來,而且越到后面找起來越容易(因為剩下的可能性越少)。這種破譯技術(shù)叫做“頻率分析”,之前提到的那本阿拉伯手稿,里面寫的黑科技其實就是這個啦。
頻率分析也算是一套“專業(yè)技術(shù)”,就跟開鎖技術(shù)一樣,說白了,老鳥和菜鳥的差距是很大的。所以頻率分析的出現(xiàn),也意味著出現(xiàn)了很多從事“破譯”工作的“專家”,密碼學(xué)也從此變成了一門專業(yè)的學(xué)問。聽起來是不是很酷?
單表密碼的進化
加密和破譯,這兩股勢力在人類歷史上一直持續(xù)著明爭暗斗。阿拉伯人早在9世紀就掌握了頻率分析技術(shù),這一技術(shù)不久就傳到了歐洲,于是歐洲也出現(xiàn)了一批破譯專家,這讓普通的單表置換密碼變得不堪一擊,那么有沒有辦法對單表置換密碼進行一些改進,讓它變得更強,更難破譯呢?
辦法當然有,而且還不止一種。要破譯單表密碼,主要依賴的技術(shù)就是頻率分析,而頻率分析得以成立的前提是,單表密碼在加密過程中沒有改變字母的出現(xiàn)頻率——有了,如果我在加密的過程中改變一下字母的頻率,頻率分析不就不管用了嗎?
怎樣才能改變字母的頻率呢?我們可以用多個數(shù)字或符號(統(tǒng)稱“編碼”)來替代同一個字母。比如說,字母E的出現(xiàn)頻率最高,那么我就規(guī)定3、5、7這三個編碼都代表字母E,寫信的人在加密過程中,當遇到字母E時輪換使用這三個不同的編碼來替代。這樣一來,原本一個字母的頻率被平均拆成了三份,破譯的人就不可能通過密文中頻率最高的編碼來鎖定字母E了。此外,我們還可以根據(jù)已經(jīng)統(tǒng)計出來的字母頻率表,給高頻字母分配較多的編碼,給低頻字母分配較少的編碼(常見的做法是給元音字母分配三個編碼,輔音字母分配兩個編碼)。這樣一來,密文中所有編碼的頻率就會被“平均化”,就像平靜的湖面一樣波瀾不驚,破譯者要找出其中的規(guī)律可就難了。
還有一些辦法能夠改變字母的頻率。英文單詞中有很多雙拼字母,也就是一個字母重復(fù)出現(xiàn)兩次,比如tree、bottle這些。我們可以規(guī)定一個特殊的編碼,比如99,這個編碼意味著把前一個字母重復(fù)一遍,我們稱為dowbleth。這樣一來,所有的雙拼字母就從原來的出現(xiàn)兩次變成了只出現(xiàn)一次,從結(jié)果上看是把每個字母的頻率“摘出來”一些挪到了99上面去,做頻率分析的時候就會產(chǎn)生一定的偏差。
除了改變字母本身的頻率之外,我們還可以為破譯制造“噪音”。比如說,我們可以規(guī)定,15、25、35這三個編碼不代表任何字母,這樣的編碼稱為“空碼”。寫信的人在加密的時候可以隨機往密文里插入這些空碼,收信的人在解密時遇到空碼直接跳過去就好了,沒有任何影響,但破譯者可不知道哪些是空碼,做頻率分析的時候只能把這些噪音一并算進去,真是寶寶心里苦啊。
有了上面這些還不算完,我們寫信的時候有一些詞是經(jīng)常用到的,比如人名、國名、你我他她它、上下左右前后,還有像the、of、with之類的詞,我們可以給這些常用詞都搞個編碼,比如55代表英國,66代表法國;也可以對單詞中的一些常用字母組合單獨編碼,比如ea、tion這樣的。這樣一來除了可以縮短密文的長度之外,也可以給頻率分析帶來困難,因為同樣的編碼既可能代表一個字母,也可以代表一個單詞,或者是某幾個字母的組合。
像這種結(jié)合了字母編碼和常用單詞編碼的“密碼表”,在英語中叫做nomenclator。這個詞好像沒有什么合適的中文翻譯,字典里給的翻譯叫“詞匯表”,總之在這里指的就是這種用來加密和解密的編碼置換表啦,瑪麗女王和巴賓頓通信所使用的也正是一種nomenclator。
(單表密碼進化到如此復(fù)雜的程度,是不是就真的無懈可擊了呢?瑪麗女王用的密碼到底長什么樣?她和巴賓頓到底說了些什么?最后又會迎來怎樣的結(jié)局呢?我們下期繼續(xù)講。)