“先看僅有少量已知明文的情況,明文w E t t E R第一個字母w被加密成E,它的加密過程是:首先經過插線板進行了一次替換(記作函式p1),然後經過三個轉子(記作r),又經過反射器返回並再次經過一次插線板(p2),寫成w->(p1)->r->(p2)->E。”
“我們知道兩次經過插線板僅僅是最簡單的兩兩字母替換,可以用如下的方法進行推測插線板的設定:假設w與A連線w-A,則w->(p1)=A,然後A透過三個轉子加密。由於轉子的內部連線結構是已知的,就可合理選擇一個轉子狀態,假設A透過轉子後輸出L,即A->r=L, 這樣得L->(p2)=E,就可推斷出在插線板L和E連線L-E。”
宋鴻飛刷刷刷在黑板上推演,俞大維聚精會神地看著,頭腦在飛速運轉。
“這樣,透過這個已知明文按照同樣的方式繼續推斷,可以發現插線板的其他設定,K-q、x-b、t-G、w-J,到這裡就發現有問題了,我們首先已假設w-A,w不可能同時連線兩個字母A和J,這就能證明w-A的設定是錯誤的。然後,繼續推斷w-b、w-c、w-d,如此迭代,推斷完26種可能,嗯當然沒有連線也是一種可能。。”
“如果所有可能都是錯的,就意味著轉子的設定是錯誤的,就需要撥動一下轉子,再次嘗試另一個設定,並重覆上面的推斷過程。”
俞大維驚歎道:“真是一個絕妙的方法!這樣一來,就只需嘗試26次插線板連線!轉子的設定總共有十萬種可能,雖然還是很大的工作量,但也是可以完成的了!”
宋鴻飛道:“是的,破解過程原理就是如此!不過這樣需要很長的時間,還有更聰明的方法。其一,當我們發現得出了一個錯誤的結果比如w-A和w-J,這就意味著與之相關的推測得到的連線都是錯誤的,往下就無需再檢查這些連線了,這樣能排除大量待檢組合。”
俞大維點點頭,道:“對,這樣用時就大大減少了!”
宋鴻飛又笑笑道:“但是這樣也還都是手工進行重複工作,我們應該把它交給機器!”
宋鴻飛接著在黑板畫出原理圖,進行推演:“我們可以設計出一種這樣的機器:把上面做的推測如w-A透過電路的方式實現,電路會自動進行推測,當進行到w-J,這意味著推測錯誤。電路可快捷地找到w-A中所有的推測可能,也就是所有錯誤結果。然後,再依次推測另一組轉子設定。十萬級別的數量,對於電路來說不算什麼問題。”
“就是一個不斷排除錯誤選項的過程,最後剩下的就是沒有引發錯誤的設定方式,只需要採用人工檢查的方式,看看得到的結果是否正確。”
俞大維道:“把最繁雜重複的大量工作交給機器,效率就大大提高了!”
宋鴻飛又道:“如果得到了更多的類似這種已知明文,密碼專家們稱之為‘crib’(小抄)。當能構成一條字母環時,對於機器來說還有更絕妙的方法。”
俞大維大感興趣,道:“小抄?這名字倒是夠貼切的。”
宋鴻飛推演道:“還是用w E t t E R來舉例,如果推測出下面這樣構成環的小抄:
明文 w E t t E R
密文 E R K m G w
在這個對印關係中,明文w第一次被加密成E,轉子轉動一位後E被加密成R,轉子轉動五位之後R又被加密成w。記作:w->(r1)->E->( r2)->R->( r6)->w ,
觀察w -> E這個步驟,它經過插線板和轉子的過程就是w->p1->r->(p2)->E。w首先被插線板替換成了另外一個字母,記