花卷
短暫的和平
話說,我們講了兩個(gè)“一戰(zhàn)”期間的密碼戰(zhàn)故事。一個(gè)是德國外長齊默爾曼勾結(jié)墨西哥懟美國的密電,被英國海軍情報(bào)部門“40號房間”截獲、破譯,然后一轉(zhuǎn)手捅給了美國總統(tǒng)威爾遜,導(dǎo)致美國對德國宣戰(zhàn)。另一個(gè)是德軍在皇帝會(huì)戰(zhàn)中用來傳遞作戰(zhàn)指令的ADFGVX密碼被法國情報(bào)局破譯,間接地導(dǎo)致了一場關(guān)鍵性戰(zhàn)役的失利。這兩個(gè)故事里,德國似乎都是那個(gè)倒霉蛋,自己辛辛苦苦整出來的密碼系統(tǒng)最后都讓別人破譯了,相當(dāng)于在敵人面前裸奔,這能不吃敗仗么?看到這里,你們肯定要問了:難道說德國人的情報(bào)水平就這么爛嗎?難道英法他們用的密碼就特別厲害,德國人都沒辦法破譯嗎?
你還別說,到了和平年代,以前打仗時(shí)那些破事兒就都被拿出來討論了。這一討論不要緊,大伙兒驚奇地發(fā)現(xiàn),德國人在“一戰(zhàn)”期間根本就沒有花精力去破譯敵人的密碼!換句話說,德國人的思路是:我們的密碼特別強(qiáng)大,你們都破不了,而且我也一直在升級密碼系統(tǒng)啊!我們的指揮官特別厲害,你們怎么安排行動(dòng),我們都不care??!你說這是哪兒來的迷之自信??!結(jié)果怎么樣大家也都看到了,看來當(dāng)這個(gè)“倒霉蛋”可絕不是因?yàn)椤靶疫\(yùn)E”,而是智商需要充值??!
不過,這些事兒德國人也是后來才反省的,“一戰(zhàn)”剛結(jié)束那會(huì)兒,德國人還天真地認(rèn)為,我們的密碼根本就沒有被敵人破譯,一切失敗都是戰(zhàn)略和戰(zhàn)術(shù)的失敗,就比如齊默爾曼的密電,美國人還不是踩了狗屎運(yùn)才從墨西哥的電報(bào)局偷出來的?他們有天大的本事也破譯不了我們?nèi)绱藦?fù)雜的外交密碼啊!實(shí)際上,看過前面的故事大家都知道了,美國人確實(shí)沒破譯密碼,破譯密碼是英國人干的,而且狡猾的英國人還表演了一出套路,專治一根筋冒傻氣的德國佬。
民間高手
雖然德國軍方在情報(bào)方面各種犯蠢和自以為是,但俗話說“高手在民間”,論搞技術(shù),德國人還是有兩把刷子的。1918年2月,就在“一戰(zhàn)”西線戰(zhàn)事膠著萬分,德軍準(zhǔn)備發(fā)動(dòng)最后一波攻勢的時(shí)候,有個(gè)叫阿圖爾·謝爾比烏斯(Arthur Scherbius)的德國工程師提交了一份專利申請,講的是他發(fā)明的一種轉(zhuǎn)輪密碼機(jī)。
謝爾比烏斯1878年出生于德國法蘭克福,從小就立志要當(dāng)一名偉大的工程師。他大學(xué)本科學(xué)的是電氣工程,后來又在漢諾威大學(xué)拿到了工學(xué)博士學(xué)位,要知道那個(gè)年代的博士可比現(xiàn)在值錢多了。謝爾比烏斯的老爹是做生意的,家里應(yīng)該還是有一定的底子,而且謝爾比烏斯也從小耳濡目染了老爹的商業(yè)頭腦,因此他這個(gè)密碼機(jī),當(dāng)然不是隨便搞著玩的,而是要把它搞成個(gè)正經(jīng)的產(chǎn)品,推到市場上狠狠地賺上一筆。
于是,就在1918年提交了專利申請之后,謝爾比烏斯跟朋友合伙開了個(gè)公司,字號特別直白,就拿兩個(gè)人的名字拼一塊兒,叫“謝爾比烏斯&里特”(Scherbius&Ritter;),他們這個(gè)公司的主要業(yè)務(wù)就是生產(chǎn)和銷售自己發(fā)明的那種密碼機(jī)。好產(chǎn)品自然得起個(gè)響亮的品牌,我們中國很多品牌喜歡起個(gè)洋名,顯得特別高端洋氣,謝爾比烏斯也沒能免俗,他也給自己這個(gè)密碼機(jī)起了個(gè)“洋名”,就叫“Enigma”。這個(gè)詞來自特別高端洋氣的希臘語,是“謎語”的意思,你看,聽起來特有神秘感是不?
那么,謝爾比烏斯打算把這個(gè)密碼機(jī)賣給誰呢?想想看,誰會(huì)經(jīng)常用密碼來通信呢?這不明擺著的嘛,軍隊(duì)唄!于是謝爾比烏斯他們就先跑到德國海軍上門推銷去了。不過我們剛才說了,德國軍方這時(shí)候還處于自我膨脹的糊涂蛋狀態(tài),對升級密碼系統(tǒng)沒太大興趣,不過一看有人來推銷密碼機(jī),也覺得這玩意兒挺新鮮的,要不這樣,這位同志,你先來介紹一下你發(fā)明的這個(gè)東東到底怎么個(gè)厲害法吧。
一代神器Enigma
對密碼戰(zhàn)歷史稍微有點(diǎn)了解的人應(yīng)該都聽說過Enigma這個(gè)名字,不說如雷貫耳家喻戶曉吧,至少它也可稱得上是“一代神器”。既然Enigma如此經(jīng)典,那它自然有獨(dú)到的過人之處,甚至可以說,它是一個(gè)“劃時(shí)代的偉大設(shè)計(jì)”。那么,它到底偉大在哪里呢?
德軍在“一戰(zhàn)”期間使用過很多類型的密碼,有外交部和海軍用的那種密碼本(本質(zhì)上就是用數(shù)字來替換單詞的置換密碼),也有像ADFGVX這種把換位和置換結(jié)合起來用的復(fù)合密碼,但是無論是哪種密碼,置換的部分基本上都是用的單表。我們之前講“多表密碼攻防戰(zhàn)”的時(shí)候曾提到過,單表置換密碼在頻率分析面前幾乎是不堪一擊,而更安全的多表置換密碼早在文藝復(fù)興時(shí)期就已經(jīng)出現(xiàn)了,到了“一戰(zhàn)”的時(shí)候,像維熱納爾方表這種多表置換密碼也早已經(jīng)很成熟了,可為什么軍隊(duì)會(huì)放著這么好的東西不用呢?
答案很簡單,因?yàn)槎啾砻艽a的效率太低,不好使!想想看,以前用書信通信的年代,人們對效率沒什么追求,反正信寄到對方手里要花很久時(shí)間,你加密解密的效率再高也沒啥用。然而,進(jìn)入電報(bào)時(shí)代,情況就完全不一樣了,電報(bào)那是光速啊,速度一下子就甩開書信N條街。于是,在信息本身的傳輸速度已經(jīng)達(dá)到幾乎“瞬時(shí)”的情況下,人們就自然而然地會(huì)發(fā)更多的消息,特別是軍隊(duì)里,大事小事都得發(fā)電報(bào)指示,加密解密太慢就成為信息傳輸?shù)钠款i,那可就真的耽誤事兒了。
既然多表密碼哪兒都好,就是太慢,那只要給它提提速,不就完美了嗎?工業(yè)革命的浪潮滾滾向前,這時(shí)說到提速,人們首先想到的當(dāng)然是用機(jī)器。你看機(jī)器都能替代大批的紡織女工,把布織得又好又快,那能不能用機(jī)器代替人手來做加密解密呢?不知道大家還記不記得我們之前講過的阿爾伯蒂密碼盤(不記得的話往回翻一下《多表密碼攻防戰(zhàn)(一)》),那玩意兒被譽(yù)為最早的實(shí)用多表密碼裝置,它的用法就是寫幾個(gè)詞轉(zhuǎn)一下密碼盤的位置,這樣就能切換置換表了。想到這里,有人一拍腦袋,說我做個(gè)自動(dòng)轉(zhuǎn)的密碼盤不就行了嗎?
不用說,這個(gè)拍腦袋的人就是謝爾比烏斯,當(dāng)然,也不光是他,其實(shí)那個(gè)時(shí)候有很多人都在研究這個(gè),但是誰第一個(gè)做出東西來誰就是老大呀。謝爾比烏斯的基本思路就是做這么一個(gè)能自動(dòng)轉(zhuǎn)的阿爾伯蒂密碼盤,然后這玩意兒就像一臺打字機(jī)一樣,有個(gè)鍵盤,按下一個(gè)字母,打出來的卻是另一個(gè)字母,然后上面的密碼盤就自動(dòng)轉(zhuǎn)一個(gè)格,哇,太炫酷了!
按一個(gè)字母打出另一個(gè)字母這個(gè)腦洞雖然很棒,但實(shí)現(xiàn)起來比較困難,因?yàn)榇蜃謾C(jī)是個(gè)機(jī)械系統(tǒng),要?jiǎng)討B(tài)改變鍵盤和打字的小錘子之間的連接實(shí)在不容易,最關(guān)鍵的是,它太容易壞??!不過,條條大路通羅馬,謝爾比烏斯就想了另外一條路:我在密碼盤后面接上電線,前面連接鍵盤,后面連接一組上面標(biāo)著字母的燈泡。鍵盤一按,通過電線連接,后面一個(gè)燈泡就亮了,然后那個(gè)密碼盤一轉(zhuǎn),接線的方式就會(huì)改變,于是再按同一個(gè)鍵,后面會(huì)亮另一個(gè)不同的燈泡。
此圖就是Enigma上用的密碼盤,我們一般管它叫“轉(zhuǎn)輪”(rotor)。你仔細(xì)看,這個(gè)轉(zhuǎn)輪的一側(cè)是金屬針,另一側(cè)是金屬觸點(diǎn),里面的線是亂序接的,也就是說,一個(gè)金屬針并不連接到同一位置上的觸點(diǎn),而是連接到另一個(gè)位置的觸點(diǎn)。這樣一來,前面鍵盤上按下一個(gè)字母,經(jīng)過轉(zhuǎn)輪之后就變成了另一個(gè)字母,然后當(dāng)轉(zhuǎn)輪旋轉(zhuǎn)之后,所有的觸點(diǎn)又會(huì)被重新連接,這就相當(dāng)于換了一張置換表。
轉(zhuǎn)輪上的每一格都標(biāo)有一個(gè)字母,很明顯,一個(gè)轉(zhuǎn)輪可以產(chǎn)生26組不同的置換表。謝爾比烏斯覺得這個(gè)數(shù)量還是太少了,不能給別人留下暴力破解的機(jī)會(huì)!那怎么增加置換表的數(shù)量呢?你可能會(huì)說,多加幾個(gè)轉(zhuǎn)輪就可以了唄。這辦法沒錯(cuò),不過要注意的是,我們需要讓這幾個(gè)轉(zhuǎn)輪按不同的速率來轉(zhuǎn),就類似鐘表上的指針,秒針轉(zhuǎn)一圈,分針走一格,分針轉(zhuǎn)一圈,時(shí)針走一格,有這樣的進(jìn)位關(guān)系,幾個(gè)轉(zhuǎn)輪才能遍歷所有的排列組合。
于是,謝爾比烏斯在他的Enigma密碼機(jī)上裝了3個(gè)轉(zhuǎn)輪,轉(zhuǎn)輪之間就通過那個(gè)金屬針和觸點(diǎn)相互連接,一個(gè)字母從鍵盤上按下之后,要依次經(jīng)過3次置換,最終變成另一個(gè)完全不同的字母,更重要的是,每次按鍵之后還會(huì)自動(dòng)切換置換表.即便你連續(xù)按下5個(gè)A,它也能給你變成像GUITP這樣5個(gè)完全不同的字母,超神奇有沒有!
神奇的反射器
好了,現(xiàn)在我們已經(jīng)有了一臺可以自動(dòng)切換置換表的密碼機(jī),但細(xì)心的你一定會(huì)發(fā)現(xiàn),現(xiàn)在還有一個(gè)問題沒解決呢——我們的密碼機(jī)只能加密,不能解密?。〈_實(shí),你可以把5個(gè)A變成GUITP,可是你怎么把GUITP變回5個(gè)A啊?只能加密不能解密的密碼機(jī)根本沒法用嘛!要解決這個(gè)問題有兩個(gè)辦法,一個(gè)辦法是重新設(shè)計(jì)一臺解密機(jī),不過這樣一來,用戶就得帶兩臺機(jī)器才能收發(fā)消息了,這個(gè)畫風(fēng)實(shí)在太low。第二個(gè)辦法呢,就是把這臺機(jī)器設(shè)計(jì)成兩用的,既能加密也能解密,這樣用戶就不用多帶一臺機(jī)器啦。
據(jù)說,謝爾比烏斯自己也沒想出什么好主意來解決這個(gè)問題,不過他公司里的一個(gè)小伙伴倒給他出了一個(gè)點(diǎn)子。這個(gè)設(shè)計(jì)特別天才,但有趣的是,這個(gè)設(shè)計(jì)后來居然成了破解Enigma的一個(gè)重要弱點(diǎn)。(哎呀,不小心劇透了。)那究竟是個(gè)怎樣的設(shè)計(jì)呢?如果我們要讓這臺機(jī)器能夠“一機(jī)兩用”,最直接的思路就是把它設(shè)計(jì)成一個(gè)“自反”的結(jié)構(gòu)。所謂“自反”,就是說比如我在某個(gè)狀態(tài)下按下A鍵,B燈泡亮,那么在同樣的狀態(tài)下(轉(zhuǎn)輪的位置都相同),如果我按下B鍵,那么A燈泡就應(yīng)該亮。這種設(shè)計(jì)的巧妙之處在于,我依次按下明文中的字母,機(jī)器就會(huì)幫我變成密文,也就是加密的過程;反過來,如果我依次按下密文中的字母,機(jī)器就會(huì)幫我變回明文,也就是解密的過程。
問題來了,這個(gè)“自反”的機(jī)制怎么實(shí)現(xiàn)呢?小伙伴跟謝爾比烏斯說,咱們在最后一個(gè)轉(zhuǎn)輪的后面加一個(gè)反射器,把電流反射到另一個(gè)觸點(diǎn),然后沿著轉(zhuǎn)輪再一個(gè)一個(gè)走回去,一直回到鍵盤。鍵盤的地方咱們做一個(gè)雙擲開關(guān),平時(shí)鍵沒按下去的時(shí)候,電路跟燈泡是接通的,于是,被反射回去的電流就會(huì)直接點(diǎn)亮相應(yīng)字母的燈泡。
如果上面一段看得有點(diǎn)暈的話,咱們看這張簡單的示意圖吧。按下A鍵,電流依次跑過右、中、左3個(gè)轉(zhuǎn)輪,到達(dá)最左邊的反射器,然后從另外一條路線又依次跑過左、中、右3個(gè)轉(zhuǎn)輪,最后回到鍵盤這里的G,于是就點(diǎn)亮了與字母G相對應(yīng)的燈泡。假設(shè)這個(gè)時(shí)候我按下G鍵,那么電流就會(huì)按照完全相反的路線跑回到A的地方,點(diǎn)亮A燈泡。你看,這樣不就實(shí)現(xiàn)了“自反”么?只需要一臺機(jī)器,就可以同時(shí)完成加密和解密啦,簡直完美!
(那么,謝爾比烏斯有沒有成功地把他的密碼機(jī)賣給德國海軍呢?接下來又會(huì)發(fā)生怎樣的故事呢?我們下期繼續(xù)講。 )