恩尼格碼的發明和破解


恩尼格碼是二戰德軍所采用的電子加密機械

 

其基本組成可以分為三部分:

鍵盤,轉子和顯示器

鍵盤一共具有26個鍵,類似於今天的計算機鍵盤(顯示起見,省略為6個)

轉子實際上有3個,縮略起見只畫了1個

顯示器在最右邊,當鍵盤上的鍵被按下時,字母被加密后所對應的小燈就會在顯示器上亮起來

 

即按下a燈,B燈會亮,這就意味着a被加密成了B

同樣的,b被加密成了A,c被加密成了D,d被加密成了F,e被加密成了E,f被加密成了C。

這種加密方式稱為“簡單替換算法”

 

“簡單替換”在現實中很容易通過頻率統計法破解,這就用到了轉子。

轉子的作用在於鍵盤上的一個鍵被按下時,相應的密文會在顯示器上顯示,然后轉子的方向就會自動的轉動一個字母的位置

 

例如,當連續的按下3個b時:

第一次鍵入b時,信號通過轉子中的連線使得A燈亮了起來,然后轉子轉動一格;

第二次鍵入b時,它所對應的字母就變成了C;

同樣的,第三次鍵入b時,燈E會變亮。

 

這里看到了恩尼格碼的關鍵:這並不是一個簡單替換算法,同一個字母b在明文的不同位置時,可以被不同的字母所替換,而密文中不同位置的同一個字母,可以代表明文中的不同字母。這就使得頻率分析法沒有用武之地了。這種加密方式被稱為“復式替換密碼

 

但是如果連續的鍵入6個鍵(實際有26個鍵),轉子就會整整轉一圈,回到原始的方向上,這時編碼就和最初重復了。於是在實際的恩尼格碼中,一共有3個轉子(二戰后期甚至有4個轉子)

所以要在26*26*26=17576后才會重復原來的編碼。

 

自此基礎上,設計者巧妙地在三個轉子的一端加上了反射器

 

如圖所示,鍵盤和顯示器中的相同字母被連到了一起。反射器和轉子一樣,把一個字母連在另一個字母上,但是並不轉動。乍一看這個固定的反射器並沒有作用,並不增加可以使用的編碼數目,但是如果將它和解碼聯系起來就會發現這種設計的別具匠心之處:

當一個鍵被按下時,信號並不從鍵盤直接傳到顯示器,而是首先通過三個轉子連成的一條線路,然后通過反射器回到3個轉子,再通過另一條線路到達顯示器上。例如,b鍵被按下時,D燈亮。

如果此時按下的不是b鍵而是d鍵,則信號會按照相反的方向,到達B燈。

也就是說,反射器雖然沒有增加可能的不重復方向,但是使得編碼過程和解碼過程完全一致

 

在實際情況下:發信人首先要調整三個轉子的方向,使其處於17576中的一個方向(其實轉子的初始方向即為密鑰,這是約定好的),然后依次鍵入明文,發送出去。解密方只需要使用一台相同的恩尼格碼機,按照約定,將轉子的方向調整至和發信方相同,依次鍵入得到的密文,就可以得到明文--這就是反射器的作用

我們也可以得到,反射器的一個副作用就是一個字母永遠也不能被加密成它自己,因為反射器中的1個字母總是被連接到另外1個字母。

 

也就是說,轉子的初始方向決定了整個密文的加密方式

雖然17576很大,但是也足夠進行暴力破解。當然設計者也可以再多增加轉子,但是我們發現,每增加一個轉子,也只是使得轉子的初始方向增加了26倍(即乘26),同樣增加了轉子也就增加了恩尼格碼的體積和成本

這時設計者使得三個轉子做得可以拆卸下來互相交換,這樣一來初始方向的可能性變成了原來的六倍

即將3個轉子編號為1、2、3,那么它們可以被放成,123-132-213-231-312-321一共六種不同的位置,也就是說,現在收發信息的雙方除了要約定好轉子的初始方向,還必須約定好六種排列中的一種。

不過增加6種轉子的排列方式也並不能有效地回避暴力破解問題。

下一步設計者在鍵盤和第一轉子之間增加了一個連接板,這塊連接板允許使用者用一根連線把某個字母和另一個字母連起來,這樣這個字母的信號在進入轉子之前就會變成另一個字母的信號,這樣的連線一共有6根。

這樣就可以使得6對字母的信號互換,其他沒有連線的字母保持不變。當然連線狀況也需要約定好

那么由轉子自身的初始方向,轉子之間的位置,以及連接板連線的狀況就組成了所有可能的密鑰:

三個轉子不同的方向為26*26*26=17576種;

三個轉子之間的相對位置為6種;

連接板上兩兩交換6對字母的可能性很大,由排列組合可得為100391791500種;

於是一共具有17576*6*100391791500,大約1億億種可能性。

只要約定好上面的密鑰,收發雙方之間就可以簡單的加密和解密,但是如果不知道密鑰,破解出來基本沒有可能。

 

我們總結一下可以發現,連線班對可能性的貢獻最大,但是由於連線班本身是一個“簡單替換”,非常容易被頻率分析;轉子的提供的可能雖然不多,但是其“復式替換”系統的設計,使得整個系統再也無法受到頻率分析。這二者優勢互補,增加了可能性,也使得暴力破解望而卻步。(這是我認為恩尼格碼機最出色,也是最有魅力的設計所在)。

 

“加密系統的保密性只應建立在對密鑰的保密上,而不應該取決於加密算法的保密”。恩尼格碼的設計使得,即使敵人獲取了一台恩尼格碼機,但是如果不知道密鑰(即轉子的初始方向,轉子的相對位置以及連線板的連接情況),破解是不現實的。

 

在戰爭期間,如果每天只有一個密鑰,那么難免被對方截獲大量的以同一個密鑰加密的信息,這對保密工作有害無益。盡管不知道對於恩尼格碼機是否可以采用類似的方法,德國人還是留了個心眼。他們決定在當天密鑰調整好的恩尼格碼機上不直接加密要發送的明文,相反的,首先發送的是一個新的密鑰

例如,在連線板的連接順序和轉子的順序不改變的情況下,隨機選擇三個字母,輸入兩次,比如PEHPEH,加密為比如KIVNSE(注意復式加密的會被加密成不同的形式,第一次KIV,第二次NSE),然后發信方把KIVNSE放在電文的最前面,接着重新調整三個轉子的初始方向到PEH,才開始繼續加密。

這種方法的每一份電報都有屬於自己的三個表示初始方向的密鑰。輸入兩遍是為了糾錯。

 

一直到圖靈破解恩尼格碼時,對於其的破譯都采用的是雷傑夫斯基的方法,即利用每條密文最開始重復的密鑰。如果德國人發覺這一點並取消,那么英國密碼分析專家的破譯手段就會毫無用處。圖靈的任務就是找到另一種不必利用重復密鑰的破譯方法。

在發現德國人總是在早上6點發出天氣預報,其中八成含有“天氣”,也就是“Wetter”這個詞,根據此前德國人天氣預報的死板形式,圖靈甚至能夠准確的知道這個詞具體在密文的哪個位置,這就使得圖靈想到使用“候選單詞”這個方法來破譯恩尼格碼電文。

如果在一篇密文中,圖靈知道了Wetter這個詞被加密成了ETJWPX,那么剩下的工作就是找到將Wetter加密成ETJWPX的初始位置,如果暴力破解,將會遇到1590億種的組合。但是雷傑夫斯基的天才思想告訴圖靈,必須將轉子方向變化造成的問題和連接板交換字母造成的問題分開來考慮

假設圖靈已經猜到了Wetter這個詞被加密成了ETJWPX,那么存在一個字母循環圈:

 

圖靈並不清楚在密文中出現這個候選單詞時的轉子狀態,但是假設他猜對了這個候選單詞,把這個候選單詞起始時的轉子方向記為S,那么在此時恩尼格碼把w加密成了E;然后轉子轉到了下一個狀態,假設為S+1,恩尼格碼把e加密成T;在S+2方向上一個不屬於這個循環的字母被加密了,暫且不去管它;接下來在S+3方向,恩尼格碼把t加密成W。

圖靈的絕妙思想是利用3台恩尼格碼機將連線板效應消除!

也就是說將第一台恩尼格碼顯示器上的E和第二台恩尼格碼顯示器上的e連起來,又把第二台上的T和第三台上的t連起來,最后把第三台上的W和第一台上的w連起來(注意恩尼格碼本身並沒有區分大小寫,只用來區分明文密文)

假設連接板上有關的交換字母的連線是這樣的:

E<——>L1

T<——>L2

W<——>L3

現在假設字母w被輸入第一台恩尼格碼機,它先通過連接板變成了L3,然后通過三個轉子經過反射器,再通過三個轉子返回連接板;因為我們根據候選單詞知道w此時會被加密成E,所以沒有經過接線板前它一定是和E對應的L1;L1經過接線板變成E后,直接成了第二台恩尼格碼機的輸入。提醒一下,第二台恩尼格碼機的轉子方向是S+1,所以根據候選單詞知道e此時會被加密成T,我們來看看具體是怎么回事。從第一台恩尼格碼機來的e通過連接板變成了L1,再通過轉子和反射器回來變成了連接板上和字母T對應的L2;通過連接板后變成了T,然后這個T又變成第三台恩尼格碼機上的輸入t。第三台恩尼格碼機的轉子方向是S+3,這個傳送過來的t會被加密成E,具體的情況和上面第一第二台上的類似。我們發現現在三台恩尼格碼機的線路組成了一個閉合回路,如果在里面加上一個燈泡,它就會亮起來。

這是我們發現,無論連接板上的連線究竟如何(也就是說無論L1,L2,L3是什么),只要轉子的方向正確,這個回路就會閉合(小燈泡就會亮)。當然也需要找到連接板上的連線,但是這是一個簡單替換,比如鍵入ETJWPX出來了tewwer,就說明w和t交換了,鍵入其他部分可以猜出其他字母的交換情況。

同時其他的問題也可以通過一定的技巧解決。

比如說即使找到了候選單詞,也不一定能確定其在一整句話的位置。

但是根據反射器的構造我們發現,一個字母從來也不會被加密成它本身,可以用一句明文去逐漸的對應密文,找到有相同對應的情況就排除,其他的可以交給破譯工具去嘗試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM