enigma机的原理
注:本文修改自三思科學《ENIGMA的興亡》
?
?????????? ENIGMA
?
??? ENIGMA看起來是一個裝滿了復雜而精致的元件的盒子。不過要是我們把它打開來,就可以看到它可以被分解成相當簡單的幾部分。下面的圖是它的最基本部分的示意圖,我們可以看見它的三個部分:鍵盤、轉子和顯示器。
?
?
??? 在上面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出現的次數就要大大高于其他字母。所以如果取得了足夠多的密文,通過統計每個字母出現的頻率,我們就可以猜出密碼中的一個字母對應于明碼中哪個字母(當然還要通過揣摩上下文等基本密碼破譯手段)??履稀さ罓栐谒母柲λ固桨讣小短璧娜恕防镌敿殧⑹隽烁柲λ故褂妙l率統計法破譯跳舞人形密碼的過程。
??? 所以如果轉子的作用僅僅是把一個字母換成另一個字母,那就沒有太大的意思了。但是大家可能已經猜出來了,所謂的“轉子”,它會轉動!這就是ENIGMA的最重要的設計——當鍵盤上一個鍵被按下時,相應的密文在顯示器上顯示,然后轉子的方向就自動地轉動一個字母的位置(在示意圖中就是轉動1/6圈,而在實際中轉動1/26圈)。下面的示意圖表示了連續鍵入3個b的情況:
?
?
??? 當第一次鍵入b時,信號通過轉子中的連線,燈A亮起來,放開鍵后,轉子轉動一格,各字母所對應的密碼就改變了;第二次鍵入b時,它所對應的字母就變成了C;同樣地,第三次鍵入b時,燈E閃亮。
?
?? 照片左方是一個完整的轉子,右方是轉子的分解,我們可以看到安裝在轉子中的電線。
?
??? 這里我們看到了ENIGMA加密的關鍵:這不是一種簡單替換密碼。同一個字母b在明文的不同位置時,可以被不同的字母替換,而密文中不同位置的同一個字母,可以代表明文中的不同字母,頻率分析法在這里就沒有用武之地了。這種加密方式被稱為“復式替換密碼”。
??? 但是我們看到,如果連續鍵入6個字母(實物中26個字母),轉子就會整整轉一圈,回到原始的方向上,這時編碼就和最初重復了。而在加密過程中,重復的現象是很危險的,這可以使試圖破譯密碼的人看見規律性的東西。于是我們可以再加一個轉子。當第一個轉子轉動整整一圈以后,它上面有一個齒撥動第二個轉子,使得它的方向轉動一個字母的位置??聪旅娴氖疽鈭D(為了簡單起見,現在我們將它表示為平面形式):
?
?
??? 這里(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,按照原來的約定,把轉子的方向調整到和發信方相同的初始方向上,然后依次鍵入收到的密文,并把閃亮的字母依次記下來,就得到了明文。于是加密和解密的過程就是完全一樣的——這都是反射器起的作用。稍微考慮一下,我們很容易明白,反射器帶來的一個副作用就是一個字母永遠也不會被加密成它自己,因為反射器中一個字母總是被連接到另一個不同的字母?! ?/p>
?
安裝在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就可以十分容易地進行加密和解密。但是如果不知道密匙,在這巨大的可能性面前,一一嘗試來試圖找出密匙是完全沒有可能的。我們看見連接板對可能性的增加貢獻最大,那么為什么要那么麻煩地設計轉子之類的東西呢?原因在于連接板本身其實就是一個簡單替換密碼系統,在整個加密過程中,連接是固定的,所以單使用它是十分容易用頻率分析法來破譯的。轉子系統雖然提供的可能性不多,但是在加密過程中它們不停地轉動,使整個系統變成了復式替換系統,頻率分析法對它再也無能為力,與此同時,連接板卻使得可能性數目大大增加,使得暴力破譯法(即一個一個嘗試所有可能性的方法)望而卻步。
轉載于:https://www.cnblogs.com/rhythmic/p/5585496.html
總結
以上是生活随笔為你收集整理的enigma机的原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python实现局域网内使用TCP服务器
- 下一篇: 如何编写清晰的Ansible剧本(复杂剧