正文 第二十五章

約翰·馬里斯的實驗室門是敞開著的,可是阿舍還是敲了敲門。

「進來,」密碼學家說。

馬里斯的實驗室是研究站上最整潔的,屋子裡看不到一星半點的灰塵。除了一個角落裡小心翼翼疊放著的半打手冊,他的辦公桌上只有一個鍵盤和一台平板顯示器終端。室內沒有照片,沒有海報,也沒有其他任何個人紀念品。可在阿舍的眼裡,這才是典型的馬里斯:靦腆,內向,在個人生活和對事物的看法上幾乎都深藏不露;全身心地沉浸在自己的工作中。對一個密碼學家來說,這些都是理想的素質。

遺憾的是,此時此刻,他的當前工作——這麼一段簡短而且似乎很簡單的代碼——原來卻是如此難以捉摸。

阿舍關上房門,在唯一一把來客坐的椅子里坐了下來。「我收到了你的信,」他說,「暴力破解有希望嗎?」

馬里斯搖了搖頭。

「隨機位元組過濾呢?」

「意思無法理解。」

「我明白了。」阿舍灰心地陷進了椅子里。在他收到馬里斯要他儘早過來一下的郵件時,他心裡一陣激動,以為他已經破解出了那段代碼。「儘早」這個詞從安之若素的馬里斯那裡發出來,實際上是大聲請求馬上商量事情。「那麼,它是個啥?」

馬里斯看了他一眼,又把目光轉了開去,「我不知道我們是不是,也許,正從一個錯誤的角度去破解這些代碼。」

阿舍皺起了眉頭,「什麼意思?」

「是這樣。昨天晚上我正在讀一本有關阿蘭·圖靈 生平的書。」

阿舍對此一點也不感到驚奇。作為一名追求完美的學者,馬里斯正在致力於第二個博士學位:計算史上的重要時刻——阿蘭·圖靈是早期計算機理論的開創者,「說下去。」

「嗯……你知道圖靈機嗎?」

「你幫我重溫一下吧。」

「1930年代,阿蘭·圖靈提出了一個理論上的計算機設想,這就是著名的圖靈機。它由一條其長度可以無限延伸的『帶子』所組成。『帶子』上有一些用有限字母系統書寫的符號。一個基於某種查詢表的『讀取頭』從『帶子』上走過,讀出『帶子』上的符號並釋出其含義。根據讀取的不同符號,『讀取頭』的狀態能夠變化。『帶子』上儲存的既可以是數據,也可以是『轉換方法』,也就是他意謂的一些小程序。在今天的計算機中,『帶子』就是存儲器,而『讀取頭』就是微處理器。圖靈聲稱這種理論上的計算機可以解決任何計算問題。」

「說下去,」阿舍說。

「我開始思考我們試圖破解的這段代碼。」馬里斯用手指著計算機屏幕,上面顯示的那個「守護神」發射的光脈衝信號,幾乎像是在以它的簡短和曖昧嘲弄著他們:

0000011111001010110101011001110111000101

0110001100010100011010011000010000000000

「我在想:如果這是一條圖靈『帶子』呢?」馬里斯繼續說道,「如果我們讓這些0和1從一台圖靈機上通過,它們又會怎麼樣呢?」

慢慢地,阿舍坐著的身子朝前傾了過來。「你是說這80位代碼……是一段計算機程序?」

「我知道這聽起來有點瘋狂,先生——」

還有什麼瘋狂能比得上我們身處這裡這一事實本身呢,阿舍心想。「請接著說。」

「好吧。首先,我必須把這些0和1字元串分解成一個個單獨的命令。我假定開頭的5個0和5個1,是用來表示每條指令長度的佔位符——也即由數字組成的每一個『詞』的長度是5位。於是我們就得到了14條5位長的指令。」馬里斯敲了一個鍵,屏幕上長長的數字串消失了,取而代之的是按順序排列的一行行數字:

00101

01101

01011

00111

01110

00101

01100

01100

01010

00110

10011

00001

00000

00000

阿舍注視著屏幕,「作為一個計算機程序它真是太短了。」

「是的。顯然,它應該是一個非常簡單的計算機程序。而機器語言就是數字語言的最基本也最普遍的形式。」

阿舍點點頭,「然後呢?」

「等今天早晨我到了辦公室,我就寫了一個小程序,把這些數值跟標準的機器語言指令序列進行比較。這個小程序把所有可能的指令一個個地分派到這些數值上,再檢查是否能從中得出一個可以運行的計算機程序。」

「是什麼使你覺得這些信息——不管這信息是什麼人發給我們的,它使用的也是跟我們一樣的機器語言指令?」

「基於二進位,先生,對任何可以想像到的計算裝置,存在某種不可再縮小的通用數字指令集:加,減,轉移,若為0則跳過,還有布爾邏輯。所以我讓這個小程序運行,並繼續做我的其他工作。」

阿舍點點頭。

「大約20分鐘以前,這個小程序運行結束了。」

「這14行二進位數字被轉譯出任何可行的計算機程序了嗎?」

「是的。得到了一個。」

阿舍覺得自己的興緻突然飆升起來。「真的?」

「是一個簡單的數學表達式程序。就是這個。」馬里斯敲了另一個鍵,一系列指令出現在了他的顯示器屏幕上。

阿舍急切地弓腰湊了上去。

指令/助記符注釋

00101ADD/將地址13(10進位數)的內容取出放入累加器中

0110101101/建立起一個標誌

01011M/將標誌值取反

00111PLC/把結果值放入地址14

0111001110/

00101ADD/對地址12的內容作減法運算

0110001100/

01100ISZ/將標誌值加1,如果值為0則轉移

01010JMP/返回到第6步重複執行

0011000110/

10011END/程序結束

00001/地址12

00000/地址13

00000/地址14

「這程序是幹什麼的?」阿舍問。

「你會注意到它的代碼在一個循環中做了一系列的重複減法運算。在機器語言里,這種方式就是在做除法:通過重複做減法來實現。哦,這只是一種方法——你也可以通過做算術右移來實現——但那樣一來你就得需要一套更專業化的計算系統。」

「這麼說它就是一條除法語句?」

馬里斯點點頭。

阿舍感到自己在驚訝和困惑之中還夾雜著突如其來的極度興奮,「別吞吞吐吐的了,老弟。他們除的是個什麼數字?」

「1。」

「1。那它又被什麼數字來除?」

馬里斯舔了舔嘴唇,「哦,你瞧,問題就在這裡,先生……」

上一章目錄+書簽下一章