西蒙・辛格的《密码故事》生动有趣、引入入胜,但中文译本存在多处人名前后翻译不一致的现象,且原著中关于针孔加密法的示例也完全丢失,建议有条件的同学尽量阅读英文原著《The Code Book》。
本文对于专用词汇的翻译不仅做了统一,索性和通用的翻译对齐,所以和中文译本里的译名可能有出入。共有上、中、下三篇,各篇链接及包含内容如下:
单字母替换密码
隐文术:通过把信息隐藏起来的这种秘密通信称为 Steganography(隐文术),由希腊词 Steganos(意为「覆盖」)和 Graphein(意为「写」)派生而来。
希罗多德(Herodotus)以编年史的形式记载了公元前 5 世纪希腊和波斯之间的冲突,其中提到住在波斯的希腊人德马拉图斯(Demaratus)利用已上蜡的一副可折叠的刻写板,先将蜡刮去,再将波斯的阴谋刻写在木板的背面,然后再涂上蜡盖住消息,从而将信息秘密地传递给希腊人。得到警告的希腊人开始武装自己,并最终在波斯人进攻时佯装被包围,并诱使波斯船队进入海湾,运用策略打败了波斯。
希罗多德还讲述了希斯塔亚乌斯(Histaiaeus)的故事:希斯塔亚乌斯想鼓励米勒图斯(Miletus)的阿里斯塔哥拉斯(Aristagoras)反叛波斯国王,为了秘密地传达他的指示,希斯塔亚乌斯剃光了他的一个信使的头发,将信息写在其头皮上,再等信使的头发重新长起来,很明显这段历史时期发生的还不是什么紧急事件。这个信使显然不用携带任何异物,能够自由穿行,不会有麻烦。一旦到达目的地,他就剃光头发,指给联络人看。
中国古代将信息写在小块丝绸上,塞进一个小球里,再用蜡封上,然后让信使吞下这个蜡球。
16 世纪,意大利科学家乔瓦尼・波塔(Giovanni Porta)描述了如何将信息隐藏在一个煮熟的鸡蛋里:把少许明矾和一点醋混在一起制成一种墨水,再用这种墨水将信息写在鸡蛋壳表面。墨水溶液就会经蛋壳上的微孔渗透进去,在已凝固的鸡蛋白表面留下印迹,这样只能剥去蛋壳后才能读取。
早在公元 1 世纪普林尼(Pliny the Elder)就解释了体液如何用作隐形墨水。用体液写的字晾干后即变得透明,但轻轻地加热就能把液体烤焦,从而字迹就以棕色显现出来。许多有机液体都有这样的性质,因为它们富含碳因而很容易被烤焦。事实上,即使是现代间谍也很少知道在标准配备的隐形墨水用完之后还可以用自己的尿液来临时代替。
密码术:在隐文术发展的同时,还有另一种方法也在演化,那就是 Cryptography(密码术),从希腊词 Kryptos(意为「隐藏」)派生而来。密码术的目的不是隐藏信息本身,而是要隐藏它的意思,也就是一种加密的过程。
隐文术和密码术常常混合使用。例如,二战期间流行的微粒照片是一种隐文术。德军在拉丁美洲的间谍将一页文件缩小在直径不到 1 毫米的微型照片上,看上去就是一个点,再将这个点状照片贴在看似无关紧要的一封信的某个句号上面。这种微型照片在 1941 年第一次被美国联邦调查局发现后,德军间谍开始有所防范,在缩小之前,将照片中的信息打乱。
密码术分为两种,即移位和替换。在移位中,字母不变,位置改变;在替换中,字母改变,位置不变。
移位:在《S. 中使用的加密法》中提到的「栅栏加密法(Rail fence cipher)」就是移位加密法的一种。另一种移位形式是早在公元前 5 世纪就出现在斯巴达的称为「Scytale」的装置,外形是一根棱形木棍,外面缠绕着一条皮革或羊皮纸。发送人先沿着木棍纵向在条带上写上信息,然后再解开条带,那么从条带上就看到一些无意义的字母,信息已被打乱了,信使就可以带着这条皮带,如果再来点隐文术的手段,他可以将其伪装成腰带系在身上,而信息却写在反面。复原信息时,接收者只需简单地把条带绕在一根木棍上,其直径应和发送者使用的一般大。Scytale 如下图所示(图片来自 Scytale):
沃尔辛厄姆在伦敦建了一座密码学校,并雇用托马斯・菲利普斯(Thomas Phelippes)作为他的密码助理。菲利普斯破译了巴宾顿和玛丽女王之间的信,在最后阶段甚至根据沃尔辛厄姆的命令,在玛丽女王的信后伪造了一个附言,诱使巴宾顿报出所有参与者的名字。最终,巴宾顿和他的 6 个同伙都被抓捕并被砍头,玛丽女王也同样被送上了断头台。
苏格兰玛丽女王的密码清楚地说明了使用一个脆弱的密码有时比完全不用密码还糟糕。玛丽女王和巴宾顿之间毫无顾虑地直接交流计划,因为他们相信他们的通讯是安全的。而如果他们公开地通信,他们将以一种更谨慎的方法来提及他们的计划。而且,他们对其密码的信任使得他们特别轻易地接受了菲利普斯的伪作。发送者和接收者对他们密码的隐秘性是如此地相信,以至他们认为敌人是绝不可能模仿他们的密码来加入这一段伪造的密文进去。正确使用一个牢固的密码当然会有利于发送者和接收者,但错误使用一个脆弱的密码却会使人对安全性产生一种错觉。
多字母替换密码
单字母替换密码在频度分析面前显得非常脆弱,迫切需要编出一种更强大的新密码。15 世纪佛罗伦萨的博学者里昂巴蒂斯特・阿尔伯提(Leon Battista Alberti)建议用两个或两个以上的密码表,在将信息译成密码时交替使用,以迷惑一些密码破译师,称为「阿尔伯提密码(Alberti cipher)」。
在阿尔伯提想法的基础上,布莱兹・德・维热纳尔(Blaise de Vigenère,又译作「布莱斯・德・维吉尼亚」)编出了一个系统的、更为有效的新密码,称为「维热纳尔密码(Vigenère cipher)」。其长处在于使用的是 26 个不同的密码表而不是单一的密码表来加密信息。加密的第一步是构造如下的维热纳尔方阵(图片来自 Tabula recta):
巴比奇破解维热纳尔密码:查尔斯・巴比奇(Charles Babbage)是一个性情古怪的天才,他最著名的成就是建立了现代计算机的理论框架。他成功地破解了维热纳尔密码,完成了一次自 9 世纪阿拉伯学者提出频度分析破解单字母替换密码以来,在密码破译学史上最伟大的突破。破解过程如下:
- 寻找密文中的重复序列,查看每种重复序列的间隔字母数。
- 计算所有间隔字母数的质因数,查看每个间隔数都有的质因数,即为关键词的长度 L(例如下图中可以确定关键词长度为 5)。
- 将密文分成 L 个部分,第一部分为 1、L+1、2L+1、3L+1……第二部分为 2、L+2、2L+2、3L+2……每个部分都是根据一个单字母替换密码来加密的。
- 对每个部分使用频度分析,并与标准频度分布对比,以确定每个部分所使用的密码表,即对应关键词的一个字母。
- 将上述 L 个字母串起来即为加密所使用的关键词,使用此关键词做完整的密文解密,即可得到明文。
巴比奇可能是在 1854 年成功地破解了维热纳尔密码。但他的发现却完全不为人所知,因为他从未发表它。这个发现直到 20 世纪当学者检查巴比奇丰富的笔记时才被公布于世。而与此同时,普鲁士军队的一位退役军官弗里德里克・威廉・卡西斯基(Friedrich Wilhelm Kasiski)也独立地发现了这种技术,他在 1863 年发表了他在密码破译学上的突破《加密和解密的艺术》,这个方法后来被称为卡西斯基测试(Kasiski examination),而巴比奇的贡献却很大程度上被忽略了。
在维多利亚时代,英国年轻的情侣禁止公开表白各自爱慕之心,甚至不敢互相通信,以防他们父母截住并偷看信的内容。这使得情侣之间通过报纸的个人信息专栏互相发送加密的信息。这些所谓的「激情栏(agony columns)」引起了许多密码破译师的好奇,查尔斯・巴比奇据悉就曾着迷于这种活动。他和他的朋友查尔斯・惠特斯通(Charles Wheatstone)以及巴伦里恩・波雷费(Lyon Playfair, 1st Baron Playfair)一起发明了一种灵巧的波雷费密码(Playfair cipher),也是《S. 中使用的加密法》其中一种加密法(维基百科上并没有提到巴比奇对此加密法有贡献)。有一次惠特斯通破解了《时代》杂志上一位牛津大学学生的留言,留言中暗示他的情人与他一起私奔。几天后惠特斯通插了一句留言,用同样的密码加密,建议这对情况不宜采取这样鲁莽的反叛行为。不久以后,杂志上出现了第三句留言,这次没有加密,是由那位女情人发来的:「亲爱的查理,不要再写了,我们的密码已经被发现了。」
针孔加密法(Pinprick encryption):古希腊历史学家埃涅阿斯(Aeneas Tacticus)提出一种秘密通讯的方法,先找到一篇无关紧要的文章,再在文章中一些特定的字母下面用针刺上小孔,这些字母可以拼成一段密文,接收者很容易识别。然而如果一个外人看到这一页,他可能会忽略这难以察觉的针孔,也就忽略了其中的密文。两千年后,英国写信的人使用了同样的方法以避免过多的邮政费用。在 19 世纪中期邮政系统革新之前,发送一封信大约是每 100 英里 1 先令,超过大部分人的财力。然而报纸可以免费邮寄,于是人们开始使用针孔在一张报纸的正面拼出一段信息,然后再通过邮局发送这份报纸,不需付一分钱。英文原著中对针孔加密法的描述及示例(图片来自 @BakaTakasugi):
比尔密码(Beale ciphers):19 世纪美国西部的一个牛仔托马斯・比尔(Thomas Beale)聚焦了一大批财富,有一个藏有价值 2000 万美元珠宝的宝藏,并写了一套神秘的密文(即比尔密码)描述了这个宝藏的地点。关于这个故事以及那些密文都包含在 1885 年出版的一个小册子里。尽管只有 23 页,但是这本小册子还是困惑了几代的密码破译师,吸引了成百的觅宝者。
比尔密码共有三页,都是密密麻麻的数字,其中第二页在出版的小册子中已经给出破译方法及原文,使用的是书卷密码(Book cipher),其中一本书或者一篇文章本身就是密钥,姑且称这样的书或文章为钥文。密码编码者顺序地给钥文的每个单词编号,这样每个数字就可以用来代替关联单词的第一个字母。然后,通过将明文中的每个字母替换成上述的数字来加密一个信息。注意:由于钥文中的单词首字母可能重复,因此同一个字母可能使用不同的数字替换。比尔密码的第二页使用的是《独立宣言》作为钥文,而第一页和第三页至今仍未破译。
比尔密码之所以难以破译,是因为信息是一次性的,因为它们关系到如此贵重的一个宝藏,比尔或许准备为第一和第三页密码写一篇特别的一次性钥文。事实上,如果钥文真的由比尔亲笔所写,这也就解释了为什么搜寻已出版的文章而没有结果的原因。我们可以试想比尔写了一篇 2000 字的私人文章,可能就是关于捕猎野牛的事情,而这篇文章只有一份。只有这篇文章的持有者,即拥有了独一无二的钥文,才能够破译第一页和第三页比尔密文。为一个信息专门写一篇一次性的钥文要比使用一本出版的书作为钥文安全得多。但这需要发送者有时间写出钥文并能够传给接收者,而这个要求对于每日通讯来说是不可能的。
对 NSA 的调侃:美国国家安全局很少公开过什么事情,有人提议 NSA 不是用来指 National Security Agency(国家安全局),而是指「Never Say Anything(沉默主义者)」或「No Such Agency(没有这样的机构)」(在电影《Snowden》中就出现过 No Such Agency 的调侃)。
以上。
网友评论