Crypto Enigma密碼機原理

2021-10-21 11:53:13 字數 3892 閱讀 3358

enigma密碼機是二戰德軍使用的密碼機,是密碼系統**色的設計。

加密過程要經過5個元件:(以明文a為例,假設δ=0)

開始時輸入a

plugboard(假定接線板設定為:a-b,c-d)

char plug[27] =

badcefghijklmnopqrstuvwxyz」;

/abcdefghijklmnopqrstuvwxyz/

即 a -> b

rotor i

char rotor[27] =

「ekm***dqvzntowyhxuspaibrcj」;

/abcdefghijklmnopqrstuvwxyz/

即 b -> k

rotor ii

char rotor[27] =

「ajdksiruxblhwtmcqgznpyfvoe」;

/abcdefghijklmnopqrstuvwxyz/

即 k -> l

rotor iii

char rotor[27] =

「bdfhjlcprtxvznyeiwgakmusqo」;

/abcdefghijklmnopqrstuvwxyz/

即 l -> v

reflector

char reflector[27]=

「yruhqsldpxngokmiebfzcwvjat";

/abcdefghijklmnopqrstuvwxyz/

即 v -> w

經過上述5步,a轉成w,按逆向路徑經過3個齒輪時要反查表,把w進一步轉化成密文:

rotor iii

char rotor[27]=

「bdfhjlcprtxvznyeiwgakmusqo」;

/abcdefghijklmnopqrstuvwxyz/

即 w -> r

rotor ii

char rotor[27]=

「ajdksiruxblhwtmcqgznpyfvoe」;

/abcdefghijklmnopqrstuvwxyz/

即 r -> g

rotor i

char rotor[27]=

「ekmflgdqvzntowyhxuspaibrcj」;

/abcdefghijklmnopqrstuvwxyz/

即 g -> f

plugboard

char plug[27]=

「badcefghijklmnopqrstuvwxyz」;

/abcdefghijklmnopqrstuvwxyz/

即 f -> f

(plugboard和reflector對映表查表可以正向查,也可以反向查,結果一樣)

經過上述 4+1+4 = 9 步,a轉成w再轉成f,f就是a的密文。

可以嘗試把f當作明文重新9步走一遍,最後出來的一定是a。即明文到密文和密文到明文是完全對稱的。

實際的enigma密碼機/enigma模擬器中,應注意:

在9步中,資料是從圖中「右到左再左到右」傳遞的,因此去時第乙個碰到的rotor在右,第三個碰到的rotor在左;回時第乙個碰到的rotor在左,第三個碰到的rotor在右。

enigma是先轉動rotor再進行對映,即 δ 值的計算應該用轉動之後的keymessage值計算。

上例的9步過程中,假設3個rotor的ring setting設為aaa,則如果需要讓δ =0 ,應該將messagekey設成01 01 26即aaz,再敲鍵。(這樣,當敲鍵時,messagekey將先變為aaa,並得到δ = 0,就有了如上的9步過程)

因此可以看出,發完第乙個字母a之後,再發的第二個字母的δ值一定與第乙個不同,依次類推每乙個字母的δ均不同,由此實現了不同位置的相同字母的密文字母不同(多表密碼)(直至發到第26^3個字母,規律重新開始)

1、剩餘兩個rotor的對映表如下:

iv rotor:

esovpzjayquirhxlnftgkdcmwb

abcdefghijklmnopqrstuvwxyz

v rotor:

vzbrgityupsdnhlxawmjqofeck

abcdefghijklmnopqrstuvwxyz

2、5個rotor的使下乙個rotor發生跳轉的字母未必是z,即未必是「滿z進一」

當 rotor i、ii、iii、iv、v 為q、e、v、j、z時,若再鍵入字元,則下乙個rotor會轉動一格。(當然,這個rotor也會轉動一格,分別變為r、f、w、k、a)(5個rotor的qevjz稱為「使進製字母」,又敲鍵能使下乙個rotor轉動)

3、double stepping

由enigma的機械結構決定,中間的rotor有兩種情況會轉動:

(1) 右邊的rotor在自身的「使進製字母」,又敲鍵,右邊的使中間的轉動

(2)中間的rotor在自身的「使進製字母」,又敲鍵,中間的反常轉動(不論右邊在什麼位置)(反常機制,只有中間的rotor具有)

假定iii=1=a, ii=4=d, i=17=q

現在i旋轉,從q變成r,一定會帶動ii旋** iii=1=a, ii=5=e, i=18=r

此時再旋轉i的話,i本來是不應該帶動ii轉的(因為當前i不在q這個位置),但是ii還會立即再轉。

(同時ii正常帶動iii旋** iii=2=b, ii=6=f, i=19=s)

4、ring setting

ring setting是rotor內部的狀態,在rotor轉動時不會變化

messagekey是rotor外部的狀態(最外側露出的值),會隨每一次按鍵而變化

事實上在乙個值,在傳入rotor但進行對映之前,以及,在對映結束但傳出rotor之前,需要分別加、減乙個δ值。其中δ=messagekey-ringsetting.

設i號齒輪的 ringsetting = b, messagekey = d, 則 δ = messagekey - ringsetting = 『d』 - 『b』 = 2.

假定輸入a,則a進入i號齒輪時,需要先加上δ變成 a + 2 = c, 再對映c -> m,m - 2 = k。因此i號齒輪輸出k.

非常值得說明的是,例如剛才的9步過程

5、初始狀態的互通

通訊雙方的必須在同樣的初始messagekey下,才能完成如上對稱加密、解密操作。那麼初始狀態如何保證相同?

傳送方隨機想出3個齒輪的外部狀態(messagekey)為: abc,以明文的形式把abc傳送給對方。

再拿出今天要用到金鑰即真正用來加密的齒輪初始狀態為:zju

在當前齒輪初始狀態為abc的情況下,連續按下zju得到zju的密文z』 j』 u』 並傳送給對方。

對方在齒輪初始狀態為abc的情況下,輸入z』 j』 u』 可以解出zju

接下去雙方都把齒輪的初始狀態設為zju,然後就可以開始正式通訊。

ZJOI2003 密碼機 樹狀陣列

一台密碼機按照以下的方式產生密碼 首先往機器中輸入一系列數,然後取出其中一部分數,將它們異或以後得到乙個新數作為密碼。現在請你模擬這樣一台密碼機的運 況,使用者通過輸入控制命令來產生密碼。密碼機中存放了乙個數列,初始時為空。密碼機的控制命令共有3種 add number 把 number 到數列的最...

南郵密碼學實驗 轉輪密碼機

現代密碼學教程第2版 谷利澤,鄭世慧,楊義先編著 2015年版 輸入乙個字母 根據對應的慢輪子 中輪子 快輪子的對應的變換,輸出另乙個字母 每輸入乙個,慢輪子下轉一格,慢輪子轉一圈之後,中輪子下轉一格,中輪子下轉一圈,快輪子下轉一格 1 對於這個輪子來說,他的屬性是固定的,也就是輸入 輸出,行為也是...

linux使用者密碼機制

linux下修改使用者密碼可以執行 passwd admin,該命令位與 usr bin下。中實現該過程,可以通過呼叫 echo newpassword passwd admin stdin 來實現,當然新密碼可以模擬個input confirm的過程讓使用者輸入。linux密碼加密演算法不可逆,相...