代码破解——我该如何破译一条加密消息?以及其他入门问题

图 1-1 中的明信片(由 Karsten Hansky 提供给我们)寄出于 1904 年。正如你很容易看出的那样,写在明信片上的信息是加密的。

图 1-1:显然,这张明信片的寄件人不希望邮递员或收件人的家人读到它。所以,他们选择把信息加密。

几十年、甚至几百年前的加密信息一点也不罕见。已知存在无数加密的日记、信件、笔记本、无线电报文、报纸广告和电报------更不用说大量加密明信片了,比如图 1-1 这张。加密文件也能在档案馆、私人收藏和跳蚤市场里找到,也能在互联网拍卖平台、网站和邮件列表上发现。还有更多加密信息被印在书籍、报纸和杂志里,新旧皆有。

在计算机普及之前,加密主要靠手工完成,通常使用铅笔和纸张(因此有"铅笔纸面加密"这一说法)。有时,密码使用者也会借助一些简单器具,比如皮革条带,或木制、金属制的小工具,例如转盘或滑尺。自 20 世纪 20 年代末起,机械与电动的加密机器开始投入使用,其中最著名的是德国的恩尼格玛机(见第 15 章)。由于加密机价格昂贵,它们主要在军队、情报机构和外交部门得到广泛使用。财力较弱的人则往往继续使用铅笔纸面的系统。

大约在 1970 年前后,随着现代数字技术的到来,商业与军事加密开始采用计算机硬件和软件。尽管如此,铅笔纸面加密仍然延续至今,而且今天依然相关。它被相当广泛的人群使用:保护非法活动的犯罪分子、交换秘密信息的朋友与恋人,以及把它用于各种娱乐活动的人。例如,地理寻宝(geocaching)玩家、密室逃脱爱好者,以及参与其他高科技寻宝游戏的人,可能会用密码学来隐藏经纬度坐标。

本书讲什么?

我们将向你展示一些真实信息的历史实例------例如明信片、日记、信件和电报------这些信息使用铅笔和纸张或其他手工方法加密。我们也会教你破解它们的方法。尽管由于计算机技术的广泛使用,手工加密与解密的重要性已大幅下降,但仍有许多人出于多种原因对破译加密信息感兴趣:

  • 家族可能想读懂从祖先那里继承来的加密明信片、信件或日记。
  • 历史学家希望破译他们在研究中遇到的加密文献,以洞察过去的时代。
  • 警察可能想破解犯罪分子写下的密文信息。
  • 地理寻宝玩家想解出谜题缓存(puzzle cache)。
  • 解密爱好者乐于破译几十年甚至几百年前生成的加密文档;其中许多人认为,解开一个尚未破解的密码,其刺激程度不亚于攀登珠穆朗玛峰或做出一次新的考古发现。
  • 学生尝试解决密码学课程中的挑战。大多数课程聚焦基于计算机的加密,但通常也会包含对铅笔纸面方法的学习。

一些解密者主要对历史加密信息感兴趣;另一些人则享受作为娱乐而创作的加密谜题,比如 Elonka 的《The Mammoth Book of Secret Codes and Cryptograms》2 中的谜题,或美国 Cryptogram Association 的定期出版物中的谜题。本书主要讨论历史加密。本章开头展示的那张 1904 年明信片,是我们提供的第一个例子。在第 5 章,我们将解释如何将它破译出来。

我需要了解哪些技术术语?

要被加密的文本称为明文 (plaintext)。加密的结果称为密文 (ciphertext)。有时,密文会嵌在其他可读文本之中;为与其中出现的密文相区分,这类可读文本称为清文(cleartext)。

许多加密方法依赖某种秘密信息,这种信息可能只为寄件人与收件人所知------这就是密钥 (key)。一个典型的密钥例子是替换表:把字母表中的每个字母替换成另一个字母。有时,密钥也会用一个词来表示,即关键字(keyword)。

加密方法有两类:密码 (cipher)与代码(code)。描述它们差异最简单的方式是:密码(有时拼作 "cypher")通常作用于字母,而代码作用于单词或短语。使用代码的问题在于,你往往需要先设想几乎所有想使用的词,然后生成一本为每个词提供对应项的代码本。由于一种语言可能有成千上万的词,这样的代码本可能非常庞大!而只在字母层面运作的密码系统则可以紧凑得多。只要寄件人与收件人都了解该系统,几乎任何内容都能用密码加密;不需要厚重的代码本。本书涵盖的大多数加密方法都是密码。代码将在第 7 章讨论。

不幸的是,这些术语容易混淆,因为"code"一词在日常中还有许多其他含义。例如,邮政编码(ZIP code)或行为准则(code of conduct)与加密毫无关系。即便我们把范围限定在加密技术领域,"code"这个词的用法也仍然含混,因为它有时会泛指加密本身(比如在 "codebreaking" 这个词中)。甚至职业密码学家在随意交流时,也可能把 code 和 cipher 混用。在本书中,我们只按上一段给出的定义使用 code 一词(即:在单词与短语层面加密信息的方法)。只有一个例外:当我们说 codebreaking 时,我们指的是所有类型的加密,而不仅仅是"代码"。

如果我们拥有密钥,就可以将密文解密 ,得到明文。如果我们在不知道密钥的情况下,试图从密文推导出明文,通常称为破解 加密。我们想要破解的加密信息称为密文谜题(cryptogram)。

加密这门技艺称为密码学 (cryptography),而破解密文谜题称为密码分析 (cryptanalysis)。codebreaking 是 cryptanalysis 的另一个说法。此外,cryptology 一词通常表示 cryptography 与 cryptanalysis 两者,但也可以表示对一切与加密相关之事的研究,包括人物、机器、系统与历史。术语 crypto 则可作为一个统称,用于涵盖这份列表中的许多条目。

一般而言,cryptology 指的是被加密的消息;但有时也会把隐写术(steganography,即隐藏信息;见第 15 章)包含在 cryptology 之内。

在破解一个 cryptogram 时,知道或猜到明文中出现的某个单词或短语通常会很有帮助。这样的单词或短语称为已知明文线索(crib)。

此外,密码学文献中经常会提到几个固定角色(尽管他们在本书中不占重要地位):在解释加密方法时,常用 Alice 和 Bob 作为占位名。通常,加密信息的发送者称为 Alice,接收者称为 Bob。有时还会出现其他角色,比如 Carol(另一位加密用户)、Eve(窃听者)以及 Mallory(恶意者)。这些角色不一定代表人类;他们也可能指计算机程序或硬件组件。

这些以及其他术语的定义,请参见附录 C 的术语表。

如何破解一段加密文本?

你来对地方了!我们这本书的目的正是帮助你回答这个问题,尤其是针对古典密码。我们会介绍实践中常见的主要"铅笔纸面"加密技术,然后说明如何把它们解出来。

为了照顾急性子的读者,我们先给出第一个破译示例:下面这段密文来自一则加密广告,刊登于伦敦报纸 The Times,时间是 1873 年 8 月 1 日。这则广告以及我们稍后还会提到的其他一些加密报纸广告,出自 Jean Palmer 于 2005 年出版的《The Agony Column Codes & Ciphers》。(Jean Palmer 是伦敦破译专家 Tony Gaffney 使用的笔名。)3

下面把密文按更易读的方式写出:

HFOBWDS wtbsfdoesksjd ji ijs mjiae (dai ditwy). Afods ks rofed dpficqp licqp. Toeqfwus yic lsrd vspojt uwjjid qsd ibsf. Aoll sjtswbicf di edwy apsfs yic lsrd ce doll O pswf rfik yic, qobs yicf wtbous. Yicf cjpwhhy aors jid asll.

破译的一个很好的第一步,是统计信息里的字母出现次数。这种技术叫频率分析(frequency analysis):根据每个字母在文本中出现的频繁程度,我们可以对它代表哪一个明文字母作出较为可靠的猜测:

如你所见,密文字母 s 的频率最高。它很可能对应明文字母 e ------在几乎所有英文文本中,e 都是出现频率最高的字母。紧随 e 之后,英语中最常见的字母通常是 t、a、o,不过仅凭频率本身很难把它们一一确定。但还有一个字母我们可以通过观察密文轻松猜到:单词 O 一定对应 I,因为英语里几乎没有别的只由一个大写字母构成的单词(除非在句首,这时字母 A 也可能成立)。

进一步分析会发现,密文里 yic 出现了三次,yicf 出现了两次。明文里的 the 和 them 是不错的猜测,但我们已经确定 s (而不是 c )对应 e 。因此,把它们解作 youyour 就说得通了。

知道明文字母 e、i、y、o、u、r 在密文中的对应关系后,我们就能更容易猜出更多词。例如,ijs 可解为 o*e (星号表示未知字母),这很可能是 one。最终,我们得到如下明文:

PRIVATE advertisement no one knows (two today). Write me first through lough. Disgrace you left behind cannot get over. Will endeavour to stay where you left us till I hear from you, give your advice. Your unhappy wife not well.

如果我们能使用计算机以及类似 CrypTool 2 (免费开源软件,可在其官网获取)的程序,还能用一种更高效的方法来破译这则《The Times》加密广告:在密文中寻找一个具有明显重复模式的单词。我们能找到的最佳候选是 wtbsfdoesksjd ------它在第 4、第 9、第 11 位出现了同一个字母(s),并且第 6 位和最后一位的字母(d)也相同;除此之外,这个词里的其他字母都各不相同。CrypTool 2 提供了一个工具,可以在大型词库中搜索具有给定重复模式的单词。对 wtbsfdoesksjd ,它只返回一个匹配:advertisement。这显然是报纸广告里非常常见的词。

如果我们接受 advertisement 这个猜测,就能确定下面这些字母的对应关系:

Plaintext: a d e i m n r s t v

Ciphertext: w t s o k j f e d b

这些信息让我们可以识别或猜出更多词。例如,第一词 HFOBWDS 对应 RVATE ,即可解出 PRIVATE 。这样我们就知道密文字母 H 和 O 分别对应 P 和 I。密文 wtbous 可解为 advi*e ,应当是 advice(不可能是 advise,因为 s 已经对应到另一个字母了)。这也表明密文字母 u 对应明文字母 c。到这里我们已经识别出足够多的字母,应该能解出更多词。最终,我们得到上面那段明文。

这则广告看起来像是一位妻子写给离开她的丈夫的消息。我们大概永远不会知道是谁写的、又是出于什么原因------毕竟它发表于 150 年前。不过从破译者的角度看,谜题已经解开了。

这并不难,对吧?在本书接下来的内容里,你将接触到更复杂的加密方法,以及更成熟的破解技巧。

我如何判断自己面对的是哪一种加密方式?

破解密文通常需要先知道它使用了哪种加密方法。因此,除了破译方法之外,本书还会介绍若干识别密码类型的技巧。识别所用密码可能非常简单,也可能非常困难。一个有用的事实是:实践中遇到的大多数信息,通常只会使用大约十来种方法之一;通过一些分析,这些方法往往可以彼此区分。

如果你想在不通读全书的情况下先识别某一种密码,下面几段可以给你一些指引。

如果你想解的加密文本看起来像这样4 ......

......或者像这样5 ......

......或者像这样......

......或者像这样......

SIAA ZQ LKBA. VA ZOA RFPBLUAOAR!

......那么它很可能是替换密码(substitution),你应该阅读第 3、4、5 章。

如果你想解的 cryptogram 看起来像这样6 ......

......请看第 7 章(关于代码与 nomenclators)。

如果你的密文看起来像这样7 ......

......它很可能是旋转栅格(turning grille)加密,本书第 11 章会讲。

如果你想解的加密文本看起来像这样8 ......

......或者像这样......

......请看第 13 章(缩写密码,abbreviation ciphers)。

如果你想解的加密文本看起来像这样......

218.57 106.11 8.93 17.61 223.64 146.7 244.53 224.21 20 192.5 160.19 99.39 No. 8 251.70 1 223.64 58.89 151.79 226.69 8.93 40.12 149.9 248.101 167.12 252.35 12.31 135.100 149.9 145.76 225.53 212.25 20 241.6 222.22 78.45 12.31 66.28 252.33 158.33 6.65 20 2 11.50 142.37 223.87 12.31 142.37 105.33 142.37 157.20 58.62 133.89 250.86.

......请读第 14 章(关于词典码与书本密码,dictionary codes and book ciphers)。

如果你面对的是五字母一组的分组文本......

......可能性有好几种,最常见的是代码 (第 7 章)、换位密码 (第 9、10 章)、二合字母替换 (digraph substitution,第 12 章),或机器密码(第 15 章)。

如果你的 cryptogram 看起来不像上述任何一种,或者你不确定最符合哪一类,那么恐怕你需要一章一章读下去,直到找到你要的内容为止。

我在阁楼里发现了一段加密文本;你能帮我把它破译出来吗?

也许可以!你找到的是曾祖父留下的一张加密明信片吗?你是在跳蚤市场买到一本加密笔记本吗?又或者,你还保留着童年时最好的朋友寄给你的那条密语?如果是这样,你可以尝试用本书介绍的某一种技术来破解这条信息。

如果你没能成功,或者你只是单纯不想投入时间自己去解一个 cryptogram,欢迎把它发给我们。(我们的邮箱地址在本章末尾的 "I have a comment" 一节里。)当然,我们不可能调查每一个我们收到的加密谜题,但在很多情况下,我们确实能提供帮助。我们尤其对历史案例感兴趣;相对而言,对现代有人自创的系统兴趣较小。Klaus 一直在寻找有意思的加密文本,好拿来写文章;Elonka 则有一个网站专门收录著名的未解密码。我们不作任何保证,更别说保证你的谜题一定会被解开,但我们至少会看一眼。

如果你把你发现的 cryptogram 发给我们,请尽量同时提供以下信息:

  • 告诉我们你对这份 cryptogram 背景所知道的情况:你在哪里发现它的?是谁写/制作的?你是否还有其他信息,比如它大概创作于哪个时期?它是寄给或来自你认识的人吗?这个人会说哪些语言?这类信息对破译者可能极其有用。
  • 告诉我们你是否允许我们发表这份 cryptogram(比如发布在互联网上,或刊登在像本书这样的出版物里),还是希望保密。当然,没有发件人的同意,我们不会发表任何内容。
  • 如果你允许我们发表,请告诉我们你是否希望署名致谢,及/或是否允许我们提到你的名字。

我自己加密了一段文本;你能破解吗?

虽然我们一直对真正的历史与古典密码很感兴趣,但一般而言,我们无法帮助处理较新的内容。这很大程度上是因为我们收到的邮件数量太多;此外,把一堆随机文字拼起来,然后宣称"来破我的密码!"实在太容易了。

但如果某个特定密码引发了大量公众关注,我们也会破例。例如,如果一条加密信息以艺术作品的形式出现,或作为建筑铭文、墓碑刻字,或以其他不寻常的方式呈现,它就可能对更广泛的受众更有吸引力。另外,为破解某个密码谜题提供现金奖励或其他奖品,也是让新谜题更具吸引力的好办法。我们也可能对由 NSA 或其他与破译有关联的组织发布的密码挑战产生兴趣。

如果你喜欢设计加密挑战,我们建议加入 American Cryptogram Association ,他们一直在寻找为其定期通讯设计谜题的人。你也可以访问密码谜题平台 MysteryTwister 并提交一个挑战。

我发明了一种新的加密方法;你们能帮我看看吗?

和所有在密码圈有一定知名度的人一样,我们经常收到这样的来信:有人发明了自己的加密方法,希望我们评审或破解它。坦白说,我们从未收到过一个足够扎实、或者看起来值得我们投入时间的系统,所以认真讲,这么做恐怕不是个好主意。

如果你设计的方法与本书介绍的众多手工密码之一有关,那么它很可能是非常容易被破解的------尤其在现代计算机的帮助下,有很多方法可以把这类系统拆开。新密码必须与 AES、Diffie--Hellman、RSA 这类最先进的密码算法竞争(它们不在本书讨论范围内)。要设计一种能进入"顶级联赛"的加密算法非常困难,即便是受过高度训练的专家,通常也需要多年努力才能做出一个好的加密算法。

因此,如果你刚进入加密技术领域,又确实想设计新系统,我们建议先找一本好的密码学书,认真学习已经存在的加密算法。例如,Joachim von zur Gathen 的《CryptoSchool》(2015)9 是一部全面的入门;Jean-Philippe Aumasson 写的《Serious Cryptography》(2017)10 则是更短的替代选择。如果你能读德语,也可以试试 Klaus 的《Kryptografie---Verfahren, Protokolle, Infrastrukturen》(2016)11。

关于"密码专家不断收到可破解系统"的这一现象,我们强烈推荐阅读 Memo to the Amateur Cipher Designer(Bruce Schneier,1998)12。这篇文章虽然已过去二十多年,但仍然切中要害。简而言之,Schneier 说(我们也同意):想尝试创建一种新的密码系统,首先必须在破解既有系统方面积累大量经验。

我解开了一个著名的未解 cryptogram;我该怎么办?

在本书中,我们介绍了几十个尚未破解的 cryptogram。其中有些非常著名,比如 Voynich manuscript;另一些则还没受到太多关注,比如"香烟盒 cryptogram"。(这两个都能在第 5 章看到。)Elonka 的网站上提供了一份著名 cryptogram 的清单,13 而 Klaus 也在自己的博客上发布过他心目中的"最难未解 cryptogram 前五十"。14

几乎每一个热门的未解密文,都出现过大量可疑的"解法"。cryptogram 越有名,声称"我解开了"的人就越多。仅 Voynich manuscript 就至少发表过六十种"解法"。其他常见目标还包括剩下的两条 Zodiac Killer 密码、Dorabella cryptogram,以及 Kryptos 的第四段信息。(我们后面还会回到这些谜题。)互联网上到处都是对著名 cryptogram 的不靠谱"解法"。

如果你是一位认真的破译者,并且相信自己找到了一条未解 cryptogram 的答案,第一件事就是挑战你自己的解法:你能把方法描述得足够简单,让第三方也能照着做并得到同样结果吗?你发现的解密过程是否足够直接,不需要太多"微调"和"特例"?得到的明文是否在不进行几十处改动与牵强解释的情况下就有意义?最后,再读一读 Ryan Garlick 在 2014 年写的文章《How to Know That You Haven't Solved the Zodiac-340 Cipher》。15(它讨论的是对第二条 Zodiac 密码的所谓解法,但其中大多数内容都可以推广到其他密码谜题。)

如果你的解法确实说得通,我们当然会非常有兴趣了解。如果你解开的 cryptogram 出现在 Elonka 的清单里,你甚至可以期待自己成为一位知名的破译者。

在你挑战破译界的"珠穆朗玛峰"之前,我们建议你先从已经被解开的 cryptogram 入手------本书里就有很多。接着,也许可以再去尝试那些不那么知名、但仍未破解的谜题。其中一些在研究圈里还没被充分关注,所以你的成功概率会更高。本书介绍的破译方法也许能帮助你取得突破。谁知道呢?也许有一天,你真的能征服世界上最著名的未解密码挑战之一!

破译需要哪些工具?

本书关注的是破解铅笔纸面密码,而不是现代基于计算机的加密。不过,这并不意味着我们在破译工作中不使用计算机。下面是本书中我们使用的三种最重要的计算机工具(都可以免费获得):

  • CrypTool 2cryptool.org)是一款由 Bernhard Esslinger 领衔的国际团队开发的密码学习程序。除其他功能外,它支持许多非常有用的破译工具。CrypTool 项目还提供密码学与密码分析的电子学习程序,例如 CrypTool 1、JCrypTool 和 CrypTool-Online。
  • 网站 dCodedcode.fr/en)由一个匿名的密码爱好者团体运营,提供大量有用的破译与统计工具。
  • Cipher Toolsrumkin.com/tools/ciphe...)是由 Tyler Akins 维护的一大套古典密码分析工具集合。

想找更多工具?请查看第 17 章中的"破译工具清单"。

我该如何加密我的文件和电子邮件?

请注意:本书涵盖的加密技术不应 用于加密有价值的机密。本书讨论的是铅笔纸面(也就是手工)加密。虽然研究手工加密出于多种原因很有趣、也很重要,但用这种加密方式来保护敏感数据已经完全过时了。如果你需要给电脑文件加密的工具,请选择一个优秀的加密程序,例如开源的 VeraCrypt 或 Philip Zimmermann 著名的 PGP。这类程序使用现代加密算法,包括 AES、Diffie--Hellman 和 RSA,以今天的技术手段无法破解。

我对这本书有意见;我该怎么办?

如果你喜欢这本书、不喜欢这本书、发现了错误,或者只是想发表看法,请发邮件给我们:codebreaking.guide@gmail.com 。你也可以查看勘误页 codebreaking-guide.com/errata,看看是否已经有人报告过这个错误。对我们来说,反馈极其重要。

相关推荐
Sheffield2 小时前
为什么大家都用iptables,不愿碰原生firewalld?
linux·运维·安全
艾力奋会展服务2 小时前
艾力奋展会方案的技术深度解析
安全·人脸识别·智能签到
枷锁—sha2 小时前
【SRC】前后端分离与API接口渗透
服务器·网络·安全·网络安全·系统安全
jimmyleeee2 小时前
大模型安全之三:数据污染
安全
Zero_Era2 小时前
智能设备金融级安全芯片——LKT4304
安全·金融
risc1234562 小时前
Elasticsearch 8.x+搭建集群一 (RPM/DEB 安装方式)
安全·elasticsearch·jenkins
MicrosoftReactor2 小时前
技术速递|社区驱动的 AI 安全:一个面向安全研究的开源框架
人工智能·安全·开源
德迅云安全杨德俊3 小时前
业务不中断、源站不暴露!DDOS高防 IP 抵御网络攻击
网络·安全·https·ddos
明月_清风3 小时前
单点登录(SSO)在前端世界的落地形态
前端·安全