在上面ENIGMA的照片上,我們看見水平面板的下面部分就是鍵盤,壹***有26個鍵,鍵盤排列接近我們現在使用的計算機鍵盤。為了使消息盡量地短和更難以破譯,空格和標點符號都被省略。在示意圖中我們只畫了六個鍵。實物照片中,鍵盤上方就是顯示器,它由標示了同樣字母的26個小燈組成,當鍵盤上的某個鍵被按下時,和此字母被加密後的密文相對應的小燈就在顯示器上亮起來。同樣地,在示意圖上我們只畫了六個小燈。在顯示器的上方是三個轉子,它們的主要部分隱藏在面板之下,在示意圖中我們暫時只畫了壹個轉子。
鍵盤、轉子和顯示器由電線相連,轉子本身也集成了6條線路(在實物中是26條),把鍵盤的信號對應到顯示器不同的小燈上去。在示意圖中我們可以看到,如果按下a鍵,那麽燈B就會亮,這意味著a被加密成了B。同樣地我們看到,b被加密成了A,c被加密成了D,d被加密成了F,e被加密成了E,f被加密成了C。於是如果我們在鍵盤上依次鍵入cafe(咖啡),顯示器上就會依次顯示DBCE。這是最簡單的加密方法之壹,把每壹個字母都按壹壹對應的方法替換為另壹個字母,這樣的加密方式叫做“簡單替換密碼”。
簡單替換密碼在歷史上很早就出現了。著名的“凱撒法”就是壹種簡單替換法,它把每個字母和它在字母表中後若幹個位置中的那個字母相對應。比如說我們取後三個位置,那麽字母的壹壹對應就如下表所示:
明碼字母表:abcdefghijklmnopqrstuvwxyz
密碼字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
於是我們就可以從明文得到密文:(veni, vidi, vici,“我來,我見,我征服”是儒勒·凱撒征服本都王法那西斯後向羅馬元老院宣告的名言)
明文:veni, vidi, vici
密文:YHAL, YLGL, YLFL
很明顯,這種簡單的方法只有26種可能性,不足以實際應用。壹般上是規定壹個比較隨意的壹壹對應,比如
明碼字母表:abcdefghijklmnopqrstuvwxyz
密碼字母表:JQKLZNDOWECPAHRBSMYITUGVXF
甚至可以自己定義壹個密碼字母圖形而不采用拉丁字母。但是用這種方法所得到的密文還是相當容易被破解的。至遲在公元九世紀,阿拉伯的密碼破譯專家就已經嫻熟地掌握了用統計字母出現頻率的方法來擊破簡單替換密碼。破解的原理很簡單:在每種拼音文字語言中,每個字母出現的頻率並不相同,比如說在英語中,e出現的次數就要大大高於其他字母。所以如果取得了足夠多的密文,通過統計每個字母出現的頻率,我們就可以猜出密碼中的壹個字母對應於明碼中哪個字母(當然還要通過揣摩上下文等基本密碼破譯手段)。柯南·道爾在他著名的福爾摩斯探案集中《跳舞的人》裏詳細敘述了福爾摩斯使用頻率統計法破譯跳舞人形密碼的過程。
所以如果轉子的作用僅僅是把壹個字母換成另壹個字母,那就沒有太大的意思了。但是大家可能已經猜出來了,所謂的“轉子”,它會轉動!這就是ENIGMA的最重要的設計——當鍵盤上壹個鍵被按下時,相應的密文在顯示器上顯示,然後轉子的方向就自動地轉動壹個字母的位置(在示意圖中就是轉動1/6圈,而在實際中轉動1/26圈)。下面的示意圖表示了連續鍵入3個b的情況:
當第壹次鍵入b時,信號通過轉子中的連線,燈A亮起來,放開鍵後,轉子轉動壹格,各字母所對應的密碼就改變了;第二次鍵入b時,它所對應的字母就變成了C;同樣地,第三次鍵入b時,燈E閃亮。
照片左方是壹個完整的轉子,右方是轉子的分解,我們可以看到安裝在轉子中的電線。
這裏我們看到了ENIGMA加密的關鍵:這不是壹種簡單替換密碼。同壹個字母b在明文的不同位置時,可以被不同的字母替換,而密文中不同位置的同壹個字母,可以代表明文中的不同字母,頻率分析法在這裏就沒有用武之地了。這種加密方式被稱為“復式替換密碼”。
但是我們看到,如果連續鍵入6個字母(實物中26個字母),轉子就會整整轉壹圈,回到原始的方向上,這時編碼就和最初重復了。而在加密過程中,重復的現象是很危險的,這可以使試圖破譯密碼的人看見規律性的東西。於是我們可以再加壹個轉子。當第壹個轉子轉動整整壹圈以後,它上面有壹個齒撥動第二個轉子,使得它的方向轉動壹個字母的位置。看下面的示意圖(為了簡單起見,現在我們將它表示為平面形式):
這裏(a)圖中我們假設第壹個轉子(左邊的那個)已經整整轉了壹圈,按b鍵時顯示器上D燈亮;當放開b鍵時第壹個轉子上的齒也帶動第二個轉子同時轉動壹格,於是(b)圖中第二次鍵入b時,加密的字母為F;而再次放開鍵b時,就只有第壹個轉子轉動了,於是(c)圖中第三次鍵入b 時,與b相對應的就是字母B。
我們看到用這樣的方法,要6*6=36(實物中為26*26=676)個字母後才會重復原來的編碼。而事實上ENIGMA裏有三個轉子(二戰後期德國海軍用ENIGMA甚至有四個轉子),不重復的方向個數達到26*26*26 =17576個。
不僅如此在三個轉子的壹端還十分巧妙地加了壹個反射器,而把鍵盤和顯示器中的相同字母用電線連在壹起。反射器和轉子壹樣,把某壹個字母連在另壹個字母上,但是它並不轉動。乍壹看這麽壹個固定的反射器好象沒什麽用處,它並不增加可以使用的編碼數目,但是把它和解碼聯系起來就會看出這種設計的別具匠心了。見下圖:
我們看見這裏鍵盤和顯示器中的相同字母由電線連在壹起。事實上那是壹個很巧妙的開關,不過我們並不需要知道它的具體情況。我們只需要知道,當壹個鍵被按下時,信號不是直接從鍵盤傳到顯示器(要是這樣就沒有加密了),而是首先通過三個轉子連成的壹條線路,然後經過反射器再回到三個轉子,通過另壹條線路再到達顯示器上,比如說上圖中b鍵被按下時,亮的是D燈。我們看看如果這時按的不是b鍵而是d鍵,那麽信號恰好按照上面b鍵被按下時的相反方向通行,最後到達B燈。換句話說,在這種設計下,反射器雖然沒有象轉子那樣增加可能的不重復的方向,但是它可以使譯碼的過程和編碼的過程完全壹樣。
反射器
想象壹下要用ENIGMA發送壹條消息。發信人首先要調節三個轉子的方向,使它們處於17576個方向中的壹個(事實上轉子的初始方向就是密匙,這是收發雙方必須預先約定好的),然後依次鍵入明文,並把閃亮的字母依次記下來,然後就可以把加密後的消息用比如電報的方式發送出去。當收信方收到電文後,使用壹臺相同的ENIGMA,按照原來的約定,把轉子的方向調整到和發信方相同的初始方向上,然後依次鍵入收到的密文,並把閃亮的字母依次記下來,就得到了明文。於是加密和解密的過程就是完全壹樣的——這都是反射器起的作用。稍微考慮壹下,我們很容易明白,反射器帶來的壹個副作用就是壹個字母永遠也不會被加密成它自己,因為反射器中壹個字母總是被連接到另壹個不同的字母。
安裝在ENIGMA中的反射器和三個轉子
於是轉子的初始方向決定了整個密文的加密方式。如果通訊當中有敵人監聽,他會收到完整的密文,但是由於不知道三個轉子的初始方向,他就不得不壹個個方向地試驗來找到這個密匙。問題在於17576 個初始方向這個數目並不是太大。如果試圖破譯密文的人把轉子調整到某壹方向,然後鍵入密文開始的壹段,看看輸出是否象是有意義的信息。如果不象,那就再試轉子的下壹個初始方向……如果試壹個方向大約要壹分鐘,而他二十四小時日夜工作,那麽在大約兩星期裏就可以找遍轉子所有可能的初始方向。如果對手用許多臺機器同時破譯,那麽所需要的時間就會大大縮短。這種保密程度是不太足夠的。
當然還可以再多加轉子,但是我們看見每加壹個轉子初始方向的可能性只是乘以了26。尤其是,增加轉子會增加ENIGMA 的體積和成本。然而這種加密機器必須是要便於攜帶的(事實上它最終的尺寸是34cm*28cm*15cm),而不是壹個具有十幾個轉子的龐然大物。在Enigma的設計當中,機器的三個轉子是可以拆卸下來互相交換的,這樣壹來初始方向的可能性變成了原來的六倍。假設三個轉子的編號為1、2、3,那麽它們可以被放成123-132-213-231-312-321六種不同位置,當然現在收發消息的雙方除了要預先約定轉子自身的初始方向,還要約定好這六種排列中的使用壹種。
其次,鍵盤和第壹轉子之間還設計了壹個連接板。這塊連接板允許使用者用壹根連線把某個字母和另壹個字母連接起來,這樣這個字母的信號在進入轉子之前就會轉變為另壹個字母的信號。這種連線最多可以有六根(後期的ENIGMA具有更多的連線),這樣就可以使6對字母的信號互換,其他沒有插上連線的字母保持不變。在上面ENIGMA的實物圖裏,我們看見這個連接板處於鍵盤的下方。當然連接板上的連線狀況也是收發信息的雙方需要預先約定的。
在上面示意圖中,當b鍵被按下時,燈C亮。
於是轉子自身的初始方向,轉子之間的相互位置,以及連接板連線的狀況就組成了所有可能的密匙,讓我們來算壹算壹***到底有多少種。
三個轉子不同的方向組成了26*26*26=17576種不同可能性;
三個轉子間不同的相對位置為6種可能性;
連接板上兩兩交換6對字母的可能性數目非常巨大,有100391791500種;
於是壹***有17576*6*100391791500,大約為10000000000000000,即壹億億種可能性。
只要約定好上面所說的密匙,收發雙方利用ENIGMA就可以十分容易地進行加密和解密。但是如果不知道密匙,在這巨大的可能性面前,壹壹嘗試來試圖找出密匙是完全沒有可能的。我們看見連接板對可能性的增加貢獻最大,那麽為什麽要那麽麻煩地設計轉子之類的東西呢?原因在於連接板本身其實就是壹個簡單替換密碼系統,在整個加密過程中,連接是固定的,所以單使用它是十分容易用頻率分析法來破譯的。轉子系統雖然提供的可能性不多,但是在加密過程中它們不停地轉動,使整個系統變成了復式替換系統,頻率分析法對它再也無能為力,與此同時,連接板卻使得可能性數目大大增加,使得暴力破譯法(即壹個壹個嘗試所有可能性的方法)望而卻步。