编码宝典

《密码宝典》（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）在他的著作《查尔斯·狄更斯在赛博空间：后现代文化中的十九世纪来世》中写道，本书将主题聚焦于「文学-科技-工程-军事-工业-情报联盟」（可能在戏仿军事工业复合体一词），将二战和互联网两个相隔五十年的时代联系了起来，是一本「极客的终极小说」。