書名: 碼書:編碼與解碼的戰爭作者名: (英)西蒙·辛格本章字數: 6321字更新時間: 2019-01-22 18:41:49
秘密書信的演進
秘密書信的歷史非常悠遠。被羅馬哲學家及政治家西塞羅(Cicero,公元前106年-公元前43年)譽為“史學之父”的希羅多德(Herodotus,公元前484年?-公元前425年?)即講過一些最早的秘密書信故事。希羅多德在《歷史》(The Historys)—書中記載了希臘與波斯于公元前5世紀時的沖突。他把這些沖突視為自由對抗奴役、獨立的希臘城邦對抗暴虐的波斯人的爭戰。根據他的記述,就是秘密書信的技術拯救了希臘,使他們幸免于被號稱萬王之王的波斯暴君薛西斯(Xerxes,公元前519年?-公元前465年)征服的厄運。
希臘與波斯之間的宿怨在薛西斯于波斯波利斯(Persepolis)建造城市,作為傲世帝國的新首都后達到臨界點。所有帝國境內的王國,乃至鄰近城邦,都紛紛獻上貢品與珍禮,唯獨雅典與斯巴達明目張膽地置身其外。為報復這份無禮的羞辱,薛西斯開始整飭武力,宣稱要“擴張波斯帝國的領土,使帝國國界齊同上帝的疆域,陽光所到之處無一不在吾人國境之內”。接下來的五年,他秘密集結了有史以來最強大的武力;公元前480年,他已就緒,準備發動一場突襲了。
偏偏這些波斯軍隊的集結行動竟被一位名叫狄馬拉圖斯(De-maratus)的希臘人給瞧見了。狄馬拉圖斯被祖國驅逐而住在一個叫蘇薩(Susa)的波斯城市里。雖然遭受流放,他對希臘仍存忠誠之心,因此決定送封信警告斯巴達人薛西斯的侵襲計劃。問題是,這封信要怎么送才不會被波斯守衛攔截下來呢?希羅多德記述道:
被發現的風險很高,而只有一個辦法能順利送出這封信:將一副可對折的木制寫字板上的蠟刮下來,把薛西斯的企圖寫在木頭上,再用一層蠟把這則信息蓋住。這樣一來,這些木板看似一片空白,沿路衛兵也就不會找它們麻煩。這則信息抵達目的地時,沒有人猜得到其中的奧秘。據我了解,是克利歐明斯(Cleomenes)的女兒,亦即李奧尼狄斯(Leonides)的妻子戈爾戈(Gorgo)瞧出端倪,告訴旁人:把蠟刮掉,就會發現木頭上有字。他們照做之后發現了信息,接著便轉告其他希臘人。
這道警告讓原本毫無防備的希臘人開始進行武裝準備。城邦所擁有的銀礦收益原本由城民均分,現在則改交給海軍支用,建造了兩百艘戰艦。
至此,薛西斯已喪失奇襲先機。公元前480年9月23日,波斯艦隊抵達雅典附近的薩拉米斯灣(Bay of Salamis)時,希臘人已做好應戰準備。他們把波斯艦隊誘進海灣時,薛西斯還以為希臘海軍已是囊中之物。希臘人自知他們艦隊的船身小、數量少,留在外海會全軍覆沒,回到海灣內則有機會以智取勝。風向一改,波斯人就被一股腦兒吹進海灣里,窘迫地迎戰希臘人。波斯公主雅特彌夏(Artemisia)三面受圍,嘗試退回外海,卻撞到自己的隨行船只,引起一陣恐慌,導致更多波斯船只互撞。希臘人趁勢發動猛烈的攻擊,短短一天之內,波斯的龐大武力隨即宣告屈服。
狄馬拉圖斯的秘密通訊法只是單純地把信息藏起來。希羅多德所記述的另一個事件,也是用隱藏法就足以保障信息的傳輸安全。希斯泰尤斯(Histaiaues)鼓動米里圖斯(Miletus)的亞里斯達哥拉斯(Aristagoras)反叛波斯國王。希斯泰尤斯把信差的頭發剃光,將信息寫在他的頭皮上,等他頭發又長出來了,才讓他去傳送秘令,那個時代對行事速度的要求顯然寬松些。表面上,這位信差未帶任何不妥物品,因此旅程中未受任何干擾。抵達目的地后,再度把發絲剃除,把頭伸給指定的收訊人瞧瞧,他的任務就完成了。
這種掩飾信息存在性的保密通訊法稱為隱匿法(steganography),源自希臘文steganos和graphein兩個單詞,前者意為“掩蔽的”,后者則是“書寫”。自希羅多德時代起,兩千年來隱匿法的應用以千奇百怪的形式遍及世界各地。例如,古代的中國人把信息寫在柔細的絲布上,揉成一個小球,覆上蠟,再讓信差吞進這粒蠟球。16世紀的意大利科學家喬凡尼·波塔(Giovanni Porta)解說了在煮熟的蛋里藏匿信息的方法:用一盎司明礬和一品脫醋所混成的液體當作墨水寫在蛋殼上。這種溶劑會穿透富含氣孔的蛋殼,而在硬化的蛋白表層上留下信息——你得剝掉蛋殼才看得到。使用隱形墨水寫信也是隱匿法的一種。早在公元1世紀,老普林尼(Pliny the Elder)就解釋道:thithymallus植物的汁液可以用作隱形墨水。它的汁液干掉后會變透明,但稍微加熱就會焦掉而變成棕色。很多有機液體也有類似特性,因為它們富含碳質而很容易焦黑。事實上,就連現代間諜,當配發的隱形墨水用光時,也會想到用自己的尿液來應急。
隱匿法的壽命這么長,表示它顯然是相當的安全。不過它有一個根本弱點。萬一敵人搜查信差身體,發現信息,秘密通訊的內容馬上就曝光了。一旦信息被攔截到,所有安全措施皆前功盡棄。一板一眼的衛兵可能依例搜查每位過境的旅人、刮一刮任何蠟板、烤一烤空白紙張、剝剝熟蛋的殼、剃剃人們的頭等,多多少少總有些信息會敗露的。
因此,就在隱匿法發展的同時,也衍生出了“密碼法”(cryptography)。密碼法這個詞源自希臘文kryptos, “隱藏”的意思。密碼法的目標不是將信息本身隱藏起來,而是隱藏信息的意義;它的程序稱為“加密”(encryption)——把信息轉譯成無法理解的文字或符號,也就是依據發信人與收信人預先協議好的規則來改寫信息。收信人依照改寫規則轉換信息,就能還原信息的意義了。而不清楚改寫規則的敵人,即使辦得到,也得大費周章,才能把加密文字轉換回原始信息。
密碼法和隱匿法雖然沒什么關聯,卻可合并使用,以強化安全性。例如,屬于隱匿法的微縮小點(microdot)在第二次世界大戰期間相當普及。在南美洲的德國情報人員把一頁文字攝影、縮小成直徑不到1厘米的小點,然后藏置在一封看似無關緊要的信函里,偽裝成句點。1941年,FBI接獲密報,首度找到微縮小點。這份情報告知美國人注意尋找信紙表面上微微發亮的小點,這些小點即是膠卷。這些被攔截下來的微縮小點,大多可以直接讀取內容,有時德國情報員會預作防范,先將信息加密再攝影,如此一來,美國人就沒轍了。所以,美國人雖攔截、阻絕了一些通訊,但遇到密碼法與隱匿法并用的情況,就無法獲知德國間諜活動的新消息。由此可見,密碼法是秘密通訊兩門技術中較強的一個,因為它有防止信息落入敵手的能力。
事實上,密碼法本身又可分成兩類:移位法(transposition)與替代法(substitution)。移位法是將信息里的字母調動順序。這個方法不適用于非常簡短的信息,像是只有一個單詞的,因為少數幾個字母的重組方式實在有限。舉例來說,三個字母就只有六種排列方式,例如COW、CWO、OCW、OWC、WCO、WOC。不過,字母數目一增加,排列方式的數目就會急速升高,除非確知改寫步驟,否則不可能拼回原始信息。“For example, consider this short sentence.”這句話只有35個字母,卻有超過50,000,000,000,000,000,000,000,000,000,000種的排列方式。假使每人每秒檢查一種排列方式,全世界的人都日以繼夜做這項檢查工作,也需要宇宙壽命1,000倍的時間才能檢查完所有組合。
加密信息時,若將字母隨意搬家,它的安全度一定非常高,因為即使是短短的句子,攔截到它的敵人也沒辦法解譯出來。只是,這有個缺點。移位法等于是在制造回文謎,困難度可以非常驚人的回文謎;如果字母的重組毫無章法,那么,不僅是敵人,就連原收信人也沒辦法解讀。所以,字母的重組必須遵循發信人與收信人預先約定好的規則,這樣的移位法才有實際效用。例如,有些學童會使用“籬笆式”(rail fence)的移位法來傳遞消息,也就是把信息內容的奇數位字母寫成一排、偶數位字母寫在另一排,再把偶數位字母接到奇數位字母后面。例如:

收信人只要逆向執行這個程序,就能復原信息。規則性移位法的形式很多,包括三排籬笆法,亦即先把信息改寫成三排字母,而不是兩排。還有一種方法是:將字母兩兩對調順序,亦即第一個字母和第二個字母互調,第三個字母和第四個字母互調,以此類推。

圖2:從發信人的密碼棒解下來時,這皮帶上的字母猶如隨意胡寫的,S、T、S、F……唯有把這皮帶纏繞在一根直徑正確的密碼棒上,信息才會重現。
歷史上第一件軍用密碼裝置——公元前5世紀的斯巴達密碼棒(scytale),則采用了另一種形式的移位法。密碼棒是一根木棒(如圖2),纏繞上一條皮革或羊皮紙,發信人在密碼棒上橫向寫下信息,再解下這條皮帶。展開來看,皮帶上的長串字母沒有任何意義,借此方法即可攪亂信息的內容。有時候,信差會把它當作腰帶,有字母的那一面當然向內藏,系在腰上——也算是隱匿法的一種。收信人把這條皮帶纏繞在直徑相同的密碼棒上,就可以還原信息了。公元前404年,一位遍體鱗傷的信差來到斯巴達將領利桑德(Lysander)面前,在這趟自波斯出發的艱困旅程中,只有他和四位同伴幸存。利桑德接過這位信差的腰帶,纏繞到他的密碼棒上,得知波斯的發納巴祖斯(Phamabazus)準備侵襲他。多虧了密碼棒,利桑德得以預先防范,從而擊退了敵軍。
除了移位法外,另一種方法是替代法。早在公元4世紀,婆羅門學者跋舍耶那(Vatsyayana)所寫的《愛欲經》(kāma-sūtra)即曾提到用替代法加密信息,而它的方法還是得自于公元前四世紀的古文稿。《愛欲經》鼓勵婦女學習64種技藝,如烹飪、服飾、按摩、制作香水等。此外還有一些有點兒出人意料的技藝,像是魔術、下棋、書籍裝幀與木工。第45項則是秘密書信(mlecchita-vikalpa),理由是可幫助婦女隱瞞她們的曖昧關系。其中一項建議方法是:先將字母隨意配對,再用配對字母取代信息里的原始字母。如果將這方法套用到羅馬字母,我們可以為字母進行如下的配對:

這么一來,發信人可以把meet at midnight(子夜見面)改寫成CUUZ VZ CGXSGIBZ。這種秘密書寫即稱為替代式密碼法(substitution cipher),因為原始信息的每個字母都用另一個字母取代,可說是跟移位式密碼法(transposition cipher)互補的一種方法。移位法是字母的內涵不變,位置變;替代法則是字母的內涵變了,位置不變。
替代式密碼法在軍事上的應用首度記載于愷撒大帝(Julius Caesar)的《高盧戰紀》(Gallic Wars)。愷撒提到他如何送信給被圍困許久而正考慮投降的西塞羅。他采用的替代法是用希臘字母取代羅馬字母,把信息轉譯成敵人看不懂的符號。愷撒記述了這則訊息的戲劇性傳遞過程:
信差受到指示,如果無法送達,就把信綁在皮帶上,隨矛擲進防御陣地里去。這位高盧人怕危險不敢靠近,便依指示把矛丟擲過去。這支矛恰巧卡在樓塔上,卡了兩天,都未被我軍發現。直到第三天,才被一位士兵看到,拿下來交給西塞羅。他讀畢之后,召集全軍公開宣達,眾人聽罷頓時歡欣鼓舞。
愷撒使用秘密書信的次數非常頻繁,瓦萊里·普洛布斯(Valerius Probus)寫了一篇論文專門討論他的密碼法,可惜此書已失傳。幸好,蘇東尼烏斯(Suetonius)寫于公元2世紀的《十二帝王傳》(Lives of the Caesars)詳細記載了愷撒常用的一種替代式密碼法。這位羅馬皇帝把信息內容的字母——改成比它后三位的字母,例如將A寫成D,將B寫成E。在此順便介紹一下密碼學家常用的術語:原始信息所用的字母集稱為明文字母(plain alphabet),替代字母所組成的字母集則稱為密碼字母(cipher alphabet)。如圖3,把明文字母列在密碼字母上面,就可以清楚看出密碼字母挪移了三位。因此,這類替代法通常被稱為愷撒挪移式密碼法(Caesar shift cipher)或簡稱愷撒密碼法(Caesar cipher)。所有原始訊息字母一一由另一個字母或符號取代的替代法,都屬于密碼法(cipher)。
雖然蘇東尼烏斯只提到一種挪移了三位的愷撒密碼法,這類密碼法的挪移數當然并不限于一種,如果使用26個英文字母,它的挪移位數可以是1到25,而得出25種互異的密碼法。此外,我們也不一定要挪移固定位數,大可隨意指定明文字母與密碼字母間的對應關系,如此可產生數量非常龐大的密碼法。這樣的對應方式超過400,000,000,000,000,00 0,000,000,000種,我們也就可以有相同數目的密碼法。

圖3:應用于簡短信息的愷撒密碼法。愷撒密碼法的定義是:密碼字母集相對于明文字母集挪移了一定數目的位置(在此例是挪移了三位)。密碼學的慣例是:明文字母集用小寫,密碼字母集用大寫。同樣地,原始信息,亦即明文,也是用小寫;加密過的信息,亦即密碼文,則用大寫。
每種密碼法都可視為某種一般加密法——稱為算法(algorithm)——再加上一把鑰匙(key)的組合結果。鑰匙是用來指定特定加密程序的演算細節。在上述例子,算法是指以密碼字母集里的字母——取代明文字母集里的字母,而且密碼字母集可以是明文字母集的任何一種重組結果。鑰匙則定義加密過程中所用的密碼字母集。我以圖4說明算法和鑰匙的關系。
敵人研究攔截下來的加密信息時,也許可以八九不離十地猜對它的算法,卻很難推測出它的鑰匙。例如,他們或能猜測到,明文的所有字母都根據一套特定的密碼字母集——被調換了,但他們卻不太可能知道對方用了哪一套密碼字母集。只要發信人和收信人謹慎保密好這套密碼字母集,亦即鑰匙,敵人就解譯不出他們攔截到的信息。鑰匙的重要性遠高于算法,這是密碼學上顛撲不破的真理。荷蘭語言學家紐文霍夫的奧古斯特·科克荷夫斯(Auguste Kerckhoffs von Nieuwenhof)1883年在《軍事密碼術》(La Cryptographie militaire)—書所述的“科克荷夫斯原則”明確道出鑰匙的重要性:密碼系統的安全性不在于防止敵人洞悉密碼算法,鑰匙的保密才是決定密碼安全性的唯一關鍵。

圖4:發信人透過一道加密算法來加密明文信息。算法只是加密通則,還必須選配一把鑰匙,才能定義出一套特定的加密系統。把鑰匙與算法一起運用到明文信息上,就會產生加密過的信息,亦即密碼文。敵人或能在信息傳送過程攔截下密碼文,但應該無法解譯出信息。相對地,知道發信人所用鑰匙與算法內容的收信人就能把密碼文轉換回明文信息。
除了嚴守鑰匙不得泄露外,安全的密碼系統還必須有數量龐大的可用鑰匙。像愷撒挪移式密碼系統的加密強度就相當弱,因為這類系統只有25把鑰匙,敵人若攔截到信息,并懷疑它用的演算法是愷撒挪移法時,只需檢查25種可能性就能找出答案。可是,發信人若使用一般的替代式算法,亦即他的密碼字母集可以是明文字母集的任何一種重組結果,他就有400,000,000,000,000,000,000,000,000把鑰匙可以選用。圖5所示即為其中一種。就算敵人攔截到這則信息,也知道他用的算法是什么,恐怕還是沒有勇氣執行檢查所有可用鑰匙的恐怖工作。即使敵方每秒可檢查一種鑰匙,也得花上宇宙壽命10億倍的時間才能檢查完這400,000, 000,000,000,000,000,000,000種可能性,來破解這則信息。
這類密碼的妙處就是:執行容易,安全性卻很高。對發信人而言,指定鑰匙,亦即定出26個字母在密碼字母集里的順序,是件輕松簡單的工作。對敵人而言,用所謂的暴力解法來檢查所有可能性,是根本不可行的。使用此法時,鑰匙的定義應該要簡易,因為發信人和收信人兩方都必須清楚知曉鑰匙為何;鑰匙愈簡單,發生誤會的機會就愈少。

圖5: 一般替代式算法的例子——根據鑰匙,一一替換明文的字母。鑰匙的內容就是這套可以是明文字母集的任一重組結果的密碼字母集。
事實上,只要收信人愿意將可用鑰匙的數目略減,鑰匙的定義可以更加簡單。制定密碼字母集時,發信人可以選用一個鑰匙詞(keyword)或鑰匙詞組(keyphrase),而不必將全部的字母隨機重排。例如,選用JULIUS CAESAR當鑰匙詞組,然后把空格及重復的字母都去掉(變成JULISCAER),再以這些字母當密碼字母集的起始字母。接著,把字母集的其他字母,依照原有順序,接到鑰匙詞組字母的后面,就能造出如下的密碼字母集:

用這種方式制定出來的密碼字母集的好處是,只要記住鑰匙詞或鑰匙詞組,就等于記下整套密碼字母集了。這一點很重要。如果發信人必須把密碼字母集記在一張紙上,敵人就有可能截獲這張紙,得到鑰匙,而得以閱讀所有以這把鑰匙加密的通訊內容。若是把鑰匙默記在腦袋里,敵人得到它的機會就會小很多。用鑰匙詞組所能造出來的密碼字母集雖然比隨機產生的來得少,但數量仍舊很龐大。對敵人而言,檢查所有可用鑰匙詞組以破解信息,仍是一件毫不可行的任務。
簡易與牢固的特性,讓替代式密碼法在秘密通訊界風光了公元1至10世紀之間的一千年。就像生物演化一樣,編碼者已逐步建立起一套能確保通訊安全的系統,沒有必要再繼續研發了。既然沒有需求,何必要進一步發明呢?重擔落到嘗試破解替代式密碼法的解碼者身上。敵方可不可能解得開加密的信息?許多古代學者相信,由于可用鑰匙的數目太過龐大,替代式密碼法是無法破解的。數個世紀以來,這種看法似乎始終成立。然而,解碼者終究會找到一條搜尋鑰匙的捷徑。破解密碼,不再需要數十億年的時間,抄捷徑的話,只要幾分鐘就可揭開信息內容了。這項突破發生于東方,而且是語言學、統計學與宗教熱誠的輝煌結晶。