編碼寶典

《密碼寶典》（Cryptonomicon）是美國作家尼爾·斯蒂芬森於1999年創作，以密碼學和計算機科學為題材的科幻小說。
全書共分為兩個篇章，第一部分講述了第二次世界大戰時，同盟國和軸心國之間的情報戰。其中登場的人物有同盟國的密碼學家，他們在英國布萊切利園的政府密碼學校破譯了納粹德國的恩尼格瑪密碼，軸心國軍事、情報官員也有出場，他們已認清了現實，而對戰局喪失信心；而第二部分的故事設置在1990年代末期，戰爭五十多年之後。新的人物在書中出場，其中一些是前篇人物的子孫後代。他們潛心研究計算機、互聯網和密碼學技術，開發出了基於電子貨幣的匿名網上銀行系統，還在書中虛構的基納庫塔蘇丹國這一島嶼國家建設了一個地下數據避風港，並加密了所有的網絡流量。他們的目的是在大屠殺再次來臨時，讓遭遇種族滅絕的民族有能力與政府進行對抗。
與斯蒂芬森的其他代表作《雪崩》和《鑽石時代》對比，與其說本書是一本科幻小說，實際更接近歷史小說和科技驚悚小說。書中對許多歷史人物都進行了演繹，如艾倫·圖靈、阿爾伯特·愛因斯坦、道格拉斯·麥克阿瑟、溫斯頓·丘吉爾、山本五十六、卡爾·鄧尼茨、赫爾曼·戈林、羅納德·里根等。同時，本書也以極高的技術性著稱，其中詳細介紹了建立在信息論、模算數和素數分解基礎上的現代密碼學原理（如RSA），也提到了UNIX操作系統等計算機安全領域的其他主題。為了配合劇情需要，斯蒂芬森甚至讓著名密碼學家布魯斯·施奈爾幫忙設計了一個真實的加密算法，還在書後附錄中給出了完整的論文和Perl程序代碼。
非計算機背景的讀者可能難以理解書中的技術細節，但是本書依然獲得了許多科幻讀者和文學評論家的好評。評論家傑克·克萊頓（Jay Clayton）在他的著作《查爾斯·狄更斯在賽博空間：後現代文化中的十九世紀來世》中寫道，本書將主題聚焦於「文學-科技-工程-軍事-工業-情報聯盟」（可能在戲仿軍事工業複合體一詞），將二戰和互聯網兩個相隔五十年的時代聯繫了起來，是一本「極客的終極小說」。
此外，小說中也產生了社會影響，影響或是預言了密碼貨幣和數據避風港的出現。1999年PayPal公司成立，其聯合創始人彼得·蒂爾當時就希望PayPal最終成為一種私人貨幣，打破政府對貨幣的壟斷，還將本書列為團隊成員必讀；2008年，以比特幣為代表的密碼貨幣被開發出現，而一位比特幣的早期投資人也是本書讀者；2000年，避風港有限公司成立，該公司在西蘭公國這個坐落在英格蘭東海岸的私人國家安裝了服務器和互聯網，開始運營數據避風港業務。《連線》雜誌指出，儘管公司CEO說他的想法來自一個密碼技術會議，而不是本書，但是這個數據避風港與小說中的劇情幾乎如出一轍。

**命名**
斯蒂芬森談到，本小說的書名是一個文字遊戲，來自恐怖小說作家洛夫克拉夫特筆下的《死者之書》（Necronomicon）：
小說中的《密碼寶典》是一本虛構的書籍，記載了美國學術界關於密碼學和密碼分析的全部知識，被稱為「密碼學家的聖經」。據說這本書的作者是約翰·威爾金斯，隨後又由威廉姆·弗裡德曼等人修訂。評論家凱瑟琳·海耶斯（Katherine Hayles）說，本小說中的《密碼寶典》有點類似於卡巴拉這樣的秘密學說，在橫跨數個世紀的時間，地下兄弟會的密碼學家不斷的傳承並編寫它。知道了本書的內容，就好比從艾洛伊人變成了莫洛克人，而有能力為本書貢獻內容的人則是精英中的精英。

**故事情節**
全書共分為兩個篇章，第一部分的時間是第二次世界大戰，第二部分則是互聯網泡沫和亞洲金融危機期間。
1942年，美國海軍的年輕數學天才、密碼破譯專家，勞倫斯·普里查德·沃特豪斯（Lawrence Pritchard Waterhouse），被派遣至新組建的2702英美聯合支隊工作。此時，德國恩尼格瑪已遭到盟軍情報部門的破解，而隱瞞這一事實，就是這支最高機密部隊的任務。他們深入敵後導演了一系列的事件，讓盟軍的勝利得到了其他自圓其說的各種解釋，以迷惑敵人。而曾在中國戰場作戰，並參與過瓜達爾卡納爾島戰役的老兵，美國海軍士官長鮑比·沙夫託（Bobby Shaftoe），同樣服役於2702支隊，並負責執行沃特豪斯的計劃。與此同時，日本帝國陸軍下令讓士兵在菲律賓建造一個神秘的地堡，沙夫託的老友，採礦工程師後藤（Goto Dengo）也在列其中。
1997 年前後，勞倫斯·沃特豪斯之孫，蘭迪·沃特豪斯（Randy Waterhouse），與他玩角色扮演遊戲時認識的老朋友阿維·哈拉比（Avi Halaby）開創了一家創業公司，用新鋪設的光纖通訊線路為菲律賓移民提供視頻電報業務。而伊凡菲特公司（Epiphyte Corporation）則使用這筆現金流，在虛構的基納庫塔蘇丹國資助數據避風港建設項目。線纜鋪設的海底勘探工作由後藤工程集團（Goto Engineering）進行，負責人是後藤之孫。隨著這些過去的“幽靈”因淘金或復仇而逐漸重新浮現出來，事情也開始變得混亂起來。

**人物介紹**

**第二次世界大戰**

**虛構人物**
羅伯特·“鮑比”·沙夫託（Robert "Bobby" Shaftoe）
美國海軍陸戰隊士官長，愛好俳句。
勞倫斯·普里查德·沃特豪斯（Lawrence Pritchard Waterhouse）
美國海軍軍官、數學家、密碼學家。儘管他在海軍服役，但在條件需要時也會穿陸軍軍裝出場。
金特·比舍夫（Günter Bischoff）
納粹德國海軍上尉、U型潛艇船長。起初指揮一艘普通U型潛艇；隨後被派遣到一艘過氧化氫為氧化劑，實現不依賴空氣推進技術的新型U型潛艇上繼續擔任船長。
魯道夫·“魯迪”·馮·哈克爾（Rudolf "Rudy" von Hacklheber）
德國數學家、密碼學家，但並非納粹。曾在普林斯頓大學從事研究，在此與艾倫·圖靈曾有戀情，並認識了沃特豪斯與之成為好友。
厄爾·科姆斯托克（Earl Comstock）
電機出納公司的前行政高管，美國陸軍軍官，最終參與了美國國家安全局（NSA）的建立，併成為美國對外政策的關鍵決策者，使美國介入第二次印度支那戰爭。電機出納公司（Electrical Till Corp）是書中的虛構公司，縮寫為ETC，相當於現實中的IBM。
格洛伊·阿爾塔米拉（Glory Altamira）
菲律賓的護理學學生，在日佔時期參與Philippine resistance against Japan。鮑比·沙夫託的情人，道格拉斯·沙夫託之母。
朱麗葉·基維斯蒂克（Julieta Kivistik）
芬蘭女性，曾在書中幾位二戰人物受困於瑞典時伸出援手。後來生下一男嬰（即金特·伊諾克·鮑比·基維斯蒂克），父親不明。
奧托·基維斯蒂克“大叔”（“Uncle” Otto Kivistik）
基維斯蒂克的叔叔，在二戰時以中立國瑞典為立足點，建立了奔走於瑞典、芬蘭與蘇聯之間的一個相當成功的走私團伙。
瑪麗·斯凱米西德（Mary cCmndhd）
塔格姆人，居住在澳大利亞的庫格蘭姆移民社區。在沃特豪斯於布里斯班停泊補給時，斯凱米西德引起了他的注意。瑪麗的姓氏為“cCmndhd”，讀作斯凱米西德（Skuhmithid），英文姓氏化作史密斯（Smith）；“Qwghlm”是書中的虛構島嶼，讀音是塔格姆（Taggum），它位於大不列顛島的西北部，位置接近現實中的赫布里底群島。

**歷史人物**
書中對許多歷史人物進行了演繹。
艾倫·圖靈（Alan Turing）
美國計算機科學家、密碼學家，是沃特豪斯的同事與好友，曾是魯迪·馮·哈克爾的戀人。
道格拉斯·麥克阿瑟（Douglas MacArthur）
美國陸軍著名軍官，在書中第二次世界大戰的故事即將結束時，扮演了關鍵角色。
卡爾·鄧尼茨（Karl Dönitz）
納粹德國海軍元帥。鄧尼茨並沒有直接在故事中出現，但一直在向U艇部隊發出命令，其中一艘就是比舍夫駕駛的潛艇。鄧尼茨最終命令潛艇自沉，比舍夫拒不執行命令，以公開Nazi gold的藏匿點相威脅，要求鄧尼茨撤銷命令。
赫爾曼·戈林（Hermann Göring）
納粹德國政軍領袖，在魯迪·馮·哈克爾的回憶錄中多次出現。魯迪回憶稱，戈林曾千方百計想將他招募進納粹，用密碼學知識為納粹服務。魯迪最終為納粹提供了一套安全性被故意削弱的系統，其完整版本則預留給尋找黃金的秘密行動。
羅納德·里根（Ronald Reagan）
未來的美國總統，此時正於美國陸軍航空隊電影小組服役，製作軍事訓練和教育用的影片。里根試圖採訪仍在醫院進行康復治療，以麻醉藥度日的鮑比·沙夫託。但沙夫託故意破壞了里根的採訪，聲稱自己遭到了一隻巨大蜥蜴的攻擊，並尖銳批評麥克阿瑟。
山本五十六
日本帝國海軍聯合艦隊司令長官。本書用了一章的篇幅講述山本五十六之死：1943年4月14日，美國海軍截獲了山本五十六視察前線的詳細電文，並制定了代號為「復仇行動」的暗殺計劃，並於4月18日在山本前往前線時，即刻擊落了山本五十六的座機。山本在臨終時刻仔細思索，才突然意識到日軍的通訊密碼早已全部被美軍破譯，而這正是他「坐在幾噸熊熊燃燒的廢鐵裡的椅子上，以每小時100英里的速度墜入叢林」而喪命的原因。
阿爾伯特·愛因斯坦（Albert Einstein）
美國物理學家。故事中，勞倫斯·沃特豪斯早年在普林斯頓大學就讀時，常常在普林斯頓高等研究院的大堂漫步。一見到有數學家經過，他就去詢問各種十分複雜的計算難題。一次，他遇到了愛因斯坦（但並不認識），結果愛因斯坦二話不說就把沃特豪斯打發走了。沃特豪斯後來也正是這樣認識圖靈的。

**技術內容**
本書以極高的技術性著稱，使用大量的筆墨詳細介紹了建立在信息論、模算數和素數分解基礎上的現代密碼學原理（如RSA），也提到了UNIX操作系統、數據安全存儲等計算機安全領域的其他主題，例如對範·埃克竊聽（Van Eck phreaking）技術的講解。非技術背景的讀者可能不容易理解這些技術細節。

**Finux操作系統**
本書中，出現了一個名叫Finux的操作系統。它的原型是現實中的Linux內核，其開發者林納斯·託瓦茲來自芬蘭（Finland），故此得名。斯蒂芬森表示，他為了讓創作不被侷限在Linux的技術細節中，因此有意改動了這個名字。

**一次性密碼本**
一次性密碼本是一種無法被破解的加密方式，然而這密鑰的長度必須至少和明文等長，因此在實踐中使用困難。在本書情節中，幾位人物加密通訊時看似使用了一次性密碼本。但在故事中，這也遭到了試圖破解者的懷疑：預共享的密鑰事實上可能並不存在，密碼本有可能是使用固定的算法生成的。

**大祭司加密算法**
故事中有這樣一段劇情：避免引起懷疑，主人公無法使用計算機進行加解密，而必須手工進行演算。為了配合這一劇情需要，斯蒂芬森向著名密碼學家布魯斯·施奈爾尋求幫助。施奈爾為此專門設計了一個真實的加密算法，名為「紙牌」（Solitaire），這個算法具有現代密碼學的安全性，但其演算無需計算機，只需要紙、筆和兩幅撲克即可，可以說是唯一安全的手工加密算法。在故事中為了掩人耳目，該算法以「大祭司」（Pontifex）的名義登場。
在小說的附錄中，收錄了布魯斯·施奈爾本人的論文，介紹了「紙牌」的全部細節。同時，斯蒂芬森還請了另一位著名密碼學家Ian Goldberg將「紙牌」算法實現為了一段Perl程序，並將以下程序源代碼附在書後。
#!/usr/bin/perl -s
$f=$d?-1:1;$D=pack('C*'.33..86);$p=shift;
$p=~y/a-z/A-Z/;$U='$D=~s/(.*)U$/U$1/;
$D=~s/U(.)/$1U/;';($V=$U)=~s/U/V/g;
$p=~s/A-Z/$k=ord($&)-64,&e/eg;$k=0;
while(){y/a-z/A-Z/;y/A-Z//dc;$o.=$_}$o.='X'
while length ($o)%5&&!$d;
$o=~s/./chr(($f*&e+ord($&)-l3)%26+65)/eg;
$o=~s/X*$// if $d;$o=~s/.{5}/$& /g;
print"$o\n";sub v{$v=ord(substr($D,$_0))-32;
$v>53?53:$v}
sub w{$D=~s/(.{$_0})(.*)(.)/$2$1$3/}
sub e{eval"$U$V$V";$D=~s/(.*)(UV.*UV)(.*)/$3$2$l/;
&w(&v(53));$k?(&w($k)):($c=&v(&v(0)),$c>52?&e:$c)}
小說出版後，斯蒂芬森對這段程序腳本進行了幾次修訂。第一次修訂更正了代碼中的一處筆誤，該筆誤是出版前排版時出現的，讓程序無法正常運行。第二次修訂時，在每一處Perl語句的結尾加入了分號斷句，以方便不熟悉Perl的讀者也能順利錄入並運行該程序。該程序還有一個帶註釋的詳解版，可以從布魯斯·施奈爾的網站下載。

**其他作品的提及**
英國音樂記者薩拉·尚皮永於1998年出版了《Disco 2000 (anthology)》，這是一本以公元2000年之前的文化為主題的文集，收錄了不少知名科幻作家的作品，其中就包括了尚未完成的《密碼寶典》節選。
斯蒂芬森之後又發表了本書的後續作品《巴洛克循環》，將時間設定於17世紀到18世紀早期，對《密碼寶典》的背景進行了補充說明。斯蒂芬森在《巴洛克循環》中渲染了一個充滿秘密結社與陰謀色彩的地下世界。這些秘密結社往往以家庭和團體為單位，書中的一些登場人物正是《密碼寶典》中人物的祖先。《巴洛克循環》中人物的所作所為影響了歷史的發展，為《密碼寶典》奠定了基礎。在隨後出版的《密碼寶典》大眾普及平裝版中，收錄了《巴洛克循環》的文本節選作為故事的補充說明。
PayPal的聯合創始人彼得·蒂爾在他的自傳《從0到1》中提到，本書是早年PayPal員工的必讀書。

**文學評論**
非計算機背景的讀者可能難以理解書中的技術細節，但是本書依然獲得了科幻讀者和文學評論家的好評。評論家傑克·克萊頓（Jay Clayton）在他的著作《查爾斯·狄更斯在賽博空間：後現代文化中的十九世紀來世》中寫道，本書將主題聚焦於「文學-科技-工程-軍事-工業-情報聯盟」（可能在戲仿軍事工業複合體一詞），將二戰和互聯網兩個相隔五十年的時代聯繫了起來，是一本「極客的終極小說」。

**獲獎與提名**

**參考資料 ==