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