連接板的秘密
德軍大規(guī)模部署的這款Enigma I型可以說(shuō)是一個(gè)十分經(jīng)典的型號(hào)了。為什么這么說(shuō)呢?因?yàn)檫@個(gè)型號(hào)被德軍使用了整整8年,到1939年開(kāi)始攻打波蘭的時(shí)候才被后續(xù)型號(hào)取代。而且所謂的后續(xù)型號(hào),其實(shí)也只是做了一些小修小改,而Enigma的基本框架,在這個(gè)型號(hào)就已經(jīng)定型了。尤其值得一提的是,這個(gè)型號(hào)的Enigma加入了一個(gè)“邪惡”的新機(jī)關(guān),正是這個(gè)新機(jī)關(guān),讓Enigma的加密強(qiáng)度有了“鳥(niǎo)槍換炮”股的飛躍。
這是什么新機(jī)關(guān)這么厲害?它的名字就叫“連接板”。所謂連接板,也可以叫接線板,其實(shí)就是一塊電路板,上面標(biāo)著26個(gè)字母,每個(gè)字母對(duì)應(yīng)一個(gè)插線孔,如果用一根電線把任意兩個(gè)插線孔連起來(lái),這兩個(gè)孔所對(duì)應(yīng)的字母就會(huì)被交換。舉個(gè)例子,如果我用線把A孔和T孔連起來(lái),這時(shí)按下鍵盤(pán)上的A,實(shí)際上相當(dāng)于按下了T,反過(guò)來(lái),按下T實(shí)際上相當(dāng)于按下了A。
為什么說(shuō)這玩意兒邪惡呢?為了搞清楚這個(gè)問(wèn)題,我們先做幾道數(shù)學(xué)題吧。首先,我們知道Enigma的每個(gè)轉(zhuǎn)輪上有26個(gè)觸點(diǎn),那么—個(gè)轉(zhuǎn)輪通過(guò)旋轉(zhuǎn)就相當(dāng)于產(chǎn)生了26種不同的置換表,而Enigma配備有3個(gè)轉(zhuǎn)輪,而且它們是像時(shí)鐘上的秒針、分針、時(shí)針—樣分級(jí)步進(jìn)的,這就相當(dāng)于總共產(chǎn)生了26×26×26=17576種不同的置換表。不僅如此,這3個(gè)轉(zhuǎn)輪還可以按不同的順序來(lái)安裝,搬出高中數(shù)學(xué)講的排列組合,我們不難計(jì)算出,3個(gè)轉(zhuǎn)輪總共可以有P(3,3)=3x2x1=6種排列方式,于是置換表的總數(shù)就變成了,17576x6=105456種。
我們前面說(shuō)過(guò)了,Enigma的本質(zhì)就是一種多表置換密碼,這一點(diǎn)跟維熱納爾方表沒(méi)什么區(qū)別,但不同的是,維熱納爾方表只有26種置換表,而相比之下,Enigma的置換表數(shù)量至少有10萬(wàn)種,中間差了好幾個(gè)數(shù)量級(jí)呢。但是你說(shuō)10萬(wàn)種置換表算不算很多呢?唔,這個(gè)問(wèn)題有點(diǎn)微妙。從手工破譯的角度來(lái)看,這可以說(shuō)是個(gè)天文數(shù)字了,而且除非電文的字?jǐn)?shù)超過(guò)10萬(wàn)(一般是不可能的,這玩意兒又不是用來(lái)寫(xiě)小說(shuō)的),否則在一篇電文里置換表根本就不會(huì)重復(fù),這就意味著用來(lái)破譯維熱納爾方表的“卡西斯基測(cè)試”(忘了的話回去翻一下《多表密碼攻防戰(zhàn)(五)》吧)在這里也完全失靈了。但是,由于轉(zhuǎn)輪的步進(jìn)方式實(shí)際上是固定的,那么破譯者要做的就是找出3個(gè)轉(zhuǎn)輪的初始位置。盡管這個(gè)初始位置的可能性也是10萬(wàn)種,但手工破譯從來(lái)都是靠技巧吃飯的,通過(guò)一些線索的幫助,這個(gè)數(shù)量可以大大縮減。這意味著在知道每個(gè)轉(zhuǎn)輪的連線方式的前提下,只有3個(gè)轉(zhuǎn)輪的Enigma依然有可能被手工破譯,這讓本來(lái)就有點(diǎn)驚弓之鳥(niǎo)的德國(guó)人心里感覺(jué)還是有點(diǎn)虛。
這時(shí)候就該發(fā)揮連接板的邪惡威力了。我們剛才講了,連接板的作用是可以讓兩個(gè)字母在進(jìn)入轉(zhuǎn)輪之前就互換位置,接—根線交換兩個(gè)字母,那么總共26個(gè)字母最多可以接13根線?,F(xiàn)在問(wèn)題來(lái)了,接線板到底能給置換表增加多少種變化呢?又到了做數(shù)學(xué)題的時(shí)間,大家準(zhǔn)備好了嗎?
我們先來(lái)看接1根線的情況。用1根線把兩個(gè)字母連接起來(lái),總共有多少種連法呢?排列組合學(xué)得好的同學(xué)馬上就能算出來(lái),這相當(dāng)于從26個(gè)字母中取出2個(gè),且排列順序無(wú)關(guān),也就是G(26,2)=(26x25)/(2x1)=325種。這意味著,我只要在接線板上接1根線,就可以讓置換表的變化數(shù)量擴(kuò)大325倍!那么如果接2根線會(huì)怎樣呢?還是一樣的算法,接2根線相當(dāng)于從26個(gè)字母中取出4個(gè),即G(26,4)=(26x25x24x23)/(4x3x2xl)=14950種。但這還不算完,因?yàn)樵谶x出的2個(gè)字母上接1根線只有1種接法,但在4個(gè)字母上接2根線可就不一樣了,總共有3種接法,因此我們還得再乘以3,即:14 950x3=44 850種。
這真是太神奇了!只要接兩根線,Enigma的置換表就能立馬擴(kuò)大4萬(wàn)倍!而實(shí)際使用中—股需要接幾根線呢?根據(jù)資料記載,通常情況下接線板需要接10根線。我們不難算出,如果接10根線,也就是交換20個(gè)字母,那么光接線板產(chǎn)生的變化就超過(guò)了150萬(wàn)億種,再乘上由轉(zhuǎn)輪本身產(chǎn)生的10萬(wàn)種變化,這個(gè)數(shù)字已經(jīng)大到無(wú)法描述了,反正很大很大就對(duì)了。
總之,相比3個(gè)轉(zhuǎn)輪能產(chǎn)生的10萬(wàn)級(jí)別的變化,接線板則能夠產(chǎn)生百萬(wàn)億級(jí)別的變化,怪不得要用“邪惡”來(lái)形容這個(gè)設(shè)計(jì)了。但是,聰明的你一定也發(fā)現(xiàn)了,轉(zhuǎn)輪的位置每打一個(gè)字母都會(huì)發(fā)生變化,但接線板的連法是不可能自動(dòng)變化的,而是操作員按照密碼本每天早上接好,然后一整天就保持不動(dòng)了。因此盡管它能產(chǎn)生的變化數(shù)量極其龐大,但還是留下了一個(gè)不小的軟肋。我們?cè)谶@里先賣(mài)個(gè)關(guān)子,后面講到盟軍如何破譯Enigma的時(shí)候,還要再細(xì)說(shuō)這個(gè)問(wèn)題,大家先在小本本上記—下哦。
德國(guó)變天
講到這里你可能要問(wèn)了,“一戰(zhàn)”都打輸了,德國(guó)為啥還要從1930年開(kāi)始如此大規(guī)模地在軍隊(duì)里配備密碼機(jī)呢?難不成他們?cè)谧聊ナ裁葱皭旱挠?jì)劃?這還用說(shuō)嘛,要不然“二戰(zhàn)”是怎么打起來(lái)的嘛。
之前我們說(shuō)過(guò),“一戰(zhàn)”之后的德國(guó)元?dú)獯髠?918~1919年間爆發(fā)了一場(chǎng)大革命,把皇帝都給干翻了,德意志帝國(guó)也給改成了共和國(guó)??墒牵品嘶实?,人們就真的能過(guò)上好日子了嗎?當(dāng)然沒(méi)那么簡(jiǎn)單。德國(guó)在“一戰(zhàn)”中吃了敗仗,不得不默默地承受各種割地賠款裁軍的制裁,這種狀況下人民能過(guò)上好日子那就見(jiàn)鬼了。
俗話說(shuō)屋漏偏逢連夜雨,這新上臺(tái)的共和國(guó)政權(quán)還沒(méi)坐穩(wěn),一場(chǎng)席卷世界的經(jīng)濟(jì)大蕭條又給德國(guó)經(jīng)濟(jì)結(jié)結(jié)實(shí)實(shí)地來(lái)了一次暴擊。雖然說(shuō)大蕭條本身是一發(fā)地圖炮,并不是只打德國(guó)一家,但德國(guó)剛剛才割地賠款再加上政變,本來(lái)就已經(jīng)弱不禁風(fēng)了,這大蕭條一來(lái),就直接給打趴下起不來(lái)了。德國(guó)過(guò)得這么慘,歐洲其他國(guó)家的情況也好不到哪兒去,但大家都覺(jué)得,德國(guó)這樣也挺好的,至少再也沒(méi)力氣到處挑事兒了吧?
結(jié)果怎么樣呢?大家都太天真了,狗急了還能跳墻呢,越是日子不好過(guò)的地方越容易滋生極端思想,因?yàn)樵谶@種水深火熱的情況下,只要有人站出來(lái)振臂高呼一聲,就一定會(huì)有人跟著干,畢竟再怎么折騰,情況也不會(huì)變得比現(xiàn)在更糟糕了是吧?那么這個(gè)站出來(lái)的人是誰(shuí)呢?這個(gè)人大家都再熟悉不過(guò)了,他就是阿道夫.希特勒(Adolf Hitler)。
提到希特勒,我們都知道他是個(gè)臭名昭著的獨(dú)裁者和戰(zhàn)犯。希特勒1919年加入了德國(guó)工人黨,僅僅用了兩年的時(shí)間就當(dāng)上了老大,主要是因?yàn)檫@個(gè)黨總共就沒(méi)幾個(gè)人,希特勒又特別能吹,前任老大安東.德萊克斯勒( Anton Drexler)也很器重他。希特勒當(dāng)上老大之后,立馬給黨改了個(gè)名,叫“國(guó)家社會(huì)主義德國(guó)工人黨”,這里面“國(guó)家社會(huì)主義”這個(gè)詞兒聽(tīng)起來(lái)有點(diǎn)陌生,其實(shí)“納粹”就是它的縮寫(xiě)。
希特勒把他的納粹黨搞得風(fēng)生水起,黨員越來(lái)越多,勢(shì)力也越來(lái)越大。1930年,大蕭條的影響開(kāi)始波及德國(guó),像希特勒這種鼓吹國(guó)家民族主義的人,在這種時(shí)候特別吃香,一下子就有了跟現(xiàn)在的“網(wǎng)紅”差不多的熱度。希特勒一琢磨,既然如此,那我為啥不去競(jìng)選總統(tǒng)呢?搞笑的是,希特勒出生在奧地利,雖然在德國(guó)混了很多年了,但根本就沒(méi)有德國(guó)戶(hù)口!當(dāng)然了,作為一黨的老大,解決個(gè)戶(hù)口問(wèn)題有什么難的。于是1932年,希特勒真的去競(jìng)選總統(tǒng)了,然而他離成功就差了那么一點(diǎn)點(diǎn),輸給了“一戰(zhàn)”時(shí)的著名將領(lǐng)保羅·馮-興登堡( Paulvon Hindenburg)。
總統(tǒng)沒(méi)選上?沒(méi)關(guān)系,納粹黨現(xiàn)在已經(jīng)是國(guó)會(huì)第一大黨了,總統(tǒng)算個(gè)鳥(niǎo)???興登堡雖然也是個(gè)右派,但他還是比較溫和的,并沒(méi)有想要侵吞民主共和的果實(shí),看著希特勒和他的納粹黨在那邊上躥下跳,興登堡也覺(jué)得這個(gè)人太極端了,非得捅出簍子不可。興登堡想盡力法牽制希特勒的力量,倆人各種斗法,結(jié)果還是希特勒棋高一著,僅僅花了一年時(shí)間就當(dāng)上了德國(guó)總理,后來(lái)又是解散國(guó)會(huì)又是頒布法案折騰了一大圈,把自己的權(quán)力搞得越來(lái)越大。1934年,興登堡終于撐不住生病去世了,這下可沒(méi)人能按得住希特勒了,他給自己封了一個(gè)“元首”的頭銜,獨(dú)攬軍政大權(quán)于一身,德國(guó)從此徹底淪為納粹獨(dú)裁下的“德意志第三帝國(guó)”。
希特勒這么一個(gè)瘋狂的獨(dú)裁者居然能贏得88%的民眾支持率,可見(jiàn)當(dāng)時(shí)德國(guó)的社會(huì)狀況有多畸形。希特勒一上臺(tái)就做了個(gè)大決定,他把凡爾賽條約給撕了!什么戰(zhàn)爭(zhēng)賠款?老子不交了!什么限制軍備?老子不認(rèn)了!這一下又贏得了民眾的一片叫好,德國(guó)人早就對(duì)這個(gè)條約恨之入骨了,現(xiàn)在終于有人站出來(lái)幫我們出氣了。希特勒對(duì)內(nèi)狂打雞血,對(duì)外各種挑釁,大張旗鼓地搞軍國(guó)主義,擴(kuò)充軍備。你說(shuō)希特勒這么干,旁邊那些國(guó)家就真能坐得???旁邊那些國(guó)家都有誰(shuí)啊,意大利的墨索里尼跟希特勒是穿一條褲子的,然后倆人出兵幫西班牙的獨(dú)裁者弗朗哥打贏了內(nèi)戰(zhàn),奧地利呢又被德國(guó)吞了,其他國(guó)家也都沒(méi)什么實(shí)力,能說(shuō)上兩句話的也就英國(guó)跟法國(guó)了。然而英法兩國(guó)在“一戰(zhàn)”當(dāng)中也被消耗得很厲害,再加上大蕭條的影響,能把自己管好就不錯(cuò)了,根本沒(méi)精力管德國(guó),只能各種妥協(xié),指望跟德國(guó)簽幾個(gè)協(xié)議讓希特勒老實(shí)待著別惹事兒。但這種軟綿綿的手段怎么拴得住希特勒呢?等英法緩過(guò)神兒來(lái)之后再—看,歐洲的形勢(shì)早就失去控制了……
(一場(chǎng)世界大戰(zhàn)一觸即發(fā),Enigma如何保障德軍的通信安全,又是誰(shuí)最先邁出了破譯Enigma的第一步呢?我們下期繼續(xù)講。)