有沒有想過親手打造一臺數字電子計算機呢?假如要制作的是一臺用于信息加密的專用計算機,那么任務并不難完成。在卡爾·薩根的小說《接觸》中,小女孩愛麗在讀中學時就自己組裝了一臺用于信息加密的專用計算機。所謂的專用計算機,究其本質就是將輸入端輸入的符號序列,經某種固定的規律轉換后,生成新的符號序列輸出而已。一臺加密機所要做的事情正是轉換符號序列,只不過它將轉換規則隱藏了起來。
當前的困難是,隨著計算機集成度越來越高,想要找到用于組裝加密機的邏輯門、寄存器之類的電子元件,并不是件很容易的事情,在基礎教育階段,許多學校也不太會配齊邏輯電路實驗設備。幸好,有許多邏輯電路模擬器可用。本文所介紹的加密機,是在邏輯電路模擬器Logisim中實現的,Logisim是一款開源軟件,運行時需要Java運行環境的支持。Logisim使用起來比較簡單,限于篇幅本文不做詳細介紹。
● 密鑰不變的加密機
在往期文章中,曾介紹過二戰時期德國的Lorenz加密機,這種加密機采用電傳碼的二進制明文和另一個二進制密鑰作異或運算(即數字相同得0,不同得1)來生成密碼,假如明文是i,對應的電傳碼為01100,而密鑰是01000,則生成的密碼將為00100,這里就借用此思路來制作加密機,模擬器的電路其實非常簡單。
電路圖中的三個矩形都是移位寄存器,它們都和最左面的一個時鐘脈沖相連接,左上側的寄存器中存儲著字母i所對應的電傳碼01100,左下側是密鑰01000,兩個寄存器中的數據將通過一個異或門進行運算,圖1所示的電路圖在搭建完成后,可按下Logisim模擬器工具欄中畫著手指的按鈕進入到運行狀態,并用鼠標點擊時鐘脈沖觸發電路運行,運行后,生成的密碼將會存儲在最右側的寄存器中。當然,真正的Lorenz加密機,密鑰數據存儲在齒輪中,而不是存儲在寄存器中,生成的密碼是直接打印在紙張上的。
● 密鑰會發生變化的加密機
假如密鑰總是不變,那么密碼很容易被破解,所以真正的Lorenz加密機中的密鑰總是在變化著。雖然這種變化必然是有規律的,但由于變化規律復雜,所以對不知情的人來說,很難在未親見加密機的結構前找出其中的規律。Lorenz加密機的密鑰變化規則比較復雜,這里不詳細敘述,但可以借用其最基本的原理,做一臺簡化的密鑰自身也發生變化的加密機,其關鍵就在于,密鑰本身也是一系列運算的結果。
上頁圖2雖然僅僅增加了兩個寄存器和一個異或門,但由于特定的線路連接策略,密鑰變化要復雜很多,一方面,密鑰是由下方的兩個寄存器的數據作異或運算而來;另一方面,下方兩個寄存器之間也有著相互控制的關系(其中一個寄存器控制著另一個寄存器是否循環移位)??紤]到寄存器的位數可以增加到很多,僅僅是如此簡單的加密裝置,若不借助特別的工具,其生成的密碼也很難在短時間內被破解,而真正的Lorenz加密機用了11個齒輪來存儲生成密鑰的數據,其破解難度可想而知。