真实世界的密码学(一)(1)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 真实世界的密码学(一)

前言

序言

当你拿起这本书时,你可能会想,为什么又一本关于密码学的书?甚至,为什么我要读这本书?要回答这个问题,你必须了解它是什么时候开始的。

一本经过多年打磨的书

如今,如果你想学习几乎任何东西,你会谷歌它,或者必应它,或者百度它——你懂的。然而,对于密码学,取决于你要找的是什么,资源可能相当匮乏。这是我很久以前就遇到的问题,从那时起一直是持续的挫败感的来源。

在我还在学校时,我曾经为一门课程实现过差分功率分析攻击。那时,这种攻击是密码分析的一个突破,因为它是第一个公开发表的侧信道攻击。差分功率分析攻击是一种神奇的技术:通过在设备加密或解密时测量其功耗,你能够提取它的秘密。我意识到,优秀的论文可以传达出伟大的思想,而在清晰度和可理解性上却付出了很少的努力。我记得为了弄清作者想要表达的意思而一头撞在墙上。更糟糕的是,我找不到解释这篇论文的好的在线资源。所以我又撞了一会儿头,最终搞明白了。然后,我想,也许我可以帮助其他像我一样将要经历这一磨难的人。

受到鼓舞,我画了一些图表,加以动画处理,并录制了自己讲解它们的视频。那是我关于密码学的第一段 YouTube 视频:www.youtube.com/watch?v=gbqNCgVcXsM

几年后,我上传了视频之后,我仍然从互联网上的陌生人那里收到赞扬。就在昨天,当我写这个序言时,有人发帖说:“谢谢你,真的是一个很好的解释,可能省了我好几个小时来理解那篇论文。”

这是多么大的一份奖励啊!在冒险探索教育领域的另一边迈出的这一小步足以让我想要做更多的事情。我开始录制更多这样的视频,然后我开始写一篇关于密码学的博客。你可以在这里查看:cryptologie.net

在开始写这本书之前,我已经积累了将近 500 篇解释这个介绍之外许多概念的文章。这一切都只是练习。在我心里,写一本书的想法在 Manning Publications 与我联系提出书籍提案的几年前就在慢慢成熟。

现实世界的密码学课程

我完成了理论数学学士学位,不知道接下来该做什么。我一直在编程,而我想要协调这两者。自然而然地,我对密码学产生了兴趣,它似乎兼具了两者的优点,并开始阅读我能够得到的不同的书籍。我很快发现了自己的人生使命。

有些事情很让人烦恼,尤其是那些以历史开始的长篇介绍;我只对技术性感兴趣,一直以来都是如此。我发誓,如果我写一本关于密码学的书,我不会写一行有关维吉尼亚密码、凯撒密码和其他历史遗留物的内容。于是,在波尔多大学获得密码学硕士学位后,我以为我已经为现实世界做好了准备。我还是太天真了。

我相信我的学位足够了,但我的教育缺乏关于我即将攻击的真实世界协议的许多知识。我花了很多时间学习椭圆曲线的数学知识,但对这些在密码算法中如何使用却一无所知。我学习了有关 LFSR、ElGamal 和 DES 等一系列其他密码学原语,但我永远不会再见到它们。

在我开始在 Matasano(后来成为 NCC Group)工作时,我的第一个任务是审核 OpenSSL,这是最流行的 SSL/TLS 实现——这个代码基本上加密了整个互联网。哦,我的脑袋痛啊。我记得每天回家时头痛欲裂。这简直是一个灾难般的库和协议!当时我完全不知道,几年后我会成为 TLS 1.3 的合著者,这是该协议的最新版本。

但是,那时候,我已经在想,“这才是我应该在学校学到的东西。我现在获得的知识才是为了让我为真实世界做准备!”毕竟,我现在是一个专门从事密码学的安全从业者。我在审核真实世界的加密应用。我正在做人们在完成密码学学位后希望自己能做的工作。我实现了、验证了、使用了,并就应该使用哪些密码算法提供建议。这就是为什么我是我正在写的书的第一位读者。这就是我会写给过去的自己的东西,以便为他准备好面对现实世界。

大多数漏洞所在

我的咨询工作让我审核了许多真实世界的加密应用,如 OpenSSL、Google 的加密备份系统、Cloudflare 的 TLS 1.3 实现、Let’s Encrypt 的证书颁发协议、Zcash 加密货币的 sapling 协议、NuCypher 的门限代理重加密方案,以及其他许多真实世界的加密应用,可惜我不能在公开场合提及。

在我的职业生涯早期,我被指派审计一个知名公司编写的自定义协议以加密其通信。结果发现几乎所有内容都使用了签名,但暂时的密钥却没有,这完全破坏了整个协议,因为任何有一些安全传输协议经验的人都可以轻易地替换它们——这是一个新手的错误,但被认为有足够经验编写自己的加密协议的人却忽略了这一点。我记得在最后解释这个漏洞的时候,整个工程师室安静了好几十秒钟。

在我的职业生涯中,这个故事反复出现了很多次。有一次,当我为另一家客户审计加密货币时,我发现了一种方法可以伪造已经存在的交易,因为签名的内容有些模糊不清。在为另一家客户查看 TLS 实现时,我发现了一些微妙的方法来破坏 RSA 实现,结果,与 RSA 的一位发明者合作撰写了一篇白皮书,导致向十几个开源项目报告了许多公共漏洞和曝光(CVE)。最近,在写作我的书的过程中阅读了关于更新的 Matrix 聊天协议时,我意识到他们的身份验证协议存在问题,导致了他们端到端加密的破解。在使用密码学时,不幸的是,有很多细节可能会导致错误。在这一点上,我知道我必须写点东西来解决这些问题。这就是为什么我的书包含了这么多这样的轶事。

作为工作的一部分,我会审查多种编程语言中的密码学库和应用程序。我发现了一些漏洞(例如,Golang 标准库中的 CVE-2016-3959),研究了库如何欺骗您误用这些漏洞(例如,我的论文《如何植入迪菲-赫尔曼后门》),并就应该使用哪些库提供建议。开发人员从未知道该使用哪个库,而我总是发现答案很棘手。

我继续发明了 Disco 协议(discocrypto.com; embeddeddisco.com),并在不到 1000 行代码的情况下编写了其功能齐全的密码库,而且还涉及了多种语言。Disco 只依赖于两个密码学原语:SHA-3 的置换和 Curve25519。是的,仅凭这两个在 1000 行代码中实现的东西,开发人员就可以进行任何类型的身份验证密钥交换、签名、加密、MAC、哈希、密钥派生等等。这使我对一个好的密码库应该是什么有了独特的看法。

我想让我的书包含这些实用的见解。因此,不同的章节自然包含了如何在不同的编程语言中应用“密码学”的示例,使用备受尊敬的密码学库。

需要一本新书吗?

当我在著名的安全会议 Black Hat(黑帽大会)上举办我的年度密码学培训课程时,一名学生来找我,问我能否推荐一本好书或在线课程关于密码学。我记得建议学生阅读 Boneh 和 Shoup 的一本书,并参加 Coursera 上的 Boneh 的密码学 I 课程。(我也在本书的结尾推荐了这两个资源。)

学生告诉我,“啊,我尝试过,这太理论化了!” 这个回答一直留在我心里。起初我不同意,但慢慢意识到他们是对的。大多数资源在数学上非常深奥,而大多数与密码学交互的开发人员不想涉及数学。对他们来说还有什么选择呢?

当时另外两个颇受尊重的资源是(布鲁斯·施奈尔的两本书)。但这些书开始变得相当过时。应用密码学花了四章讨论分组密码,还有一整章讨论密码模式,但没有提及认证加密。更新一些的密码工程只在脚注中简单提到了椭圆曲线密码。另一方面,我的许多视频或博客文章正在成为一些密码概念的良好主要参考资料。我知道我可以做一些特别的事情。

渐渐地,我的许多学生开始对加密货币产生兴趣,对这个主题提出越来越多的问题。与此同时,我开始审计越来越多的加密货币应用程序。后来,我转到 Facebook 工作,负责领导 Libra 加密货币(现在称为 Diem)的安全工作。当时,加密货币是最热门的领域之一,混合了许多极其有趣的密码原语,迄今为止几乎没有在现实世界中使用过(零知识证明、聚合签名、门限密码学、多方计算、共识协议、密码累加器、可验证随机函数、可验证延迟函数等等……清单还在继续)。然而,没有一本密码学书籍包含了关于加密货币的章节。我现在处于一个独特的位置。

我知道我可以写一本书,告诉学生、开发人员、顾问、安全工程师以及其他人现代应用密码学究竟是什么。这将是一本几乎没有公式但充满许多图表的书。这将是一本几乎没有历史但充满我亲眼目睹的现代密码失败故事的书。这将是一本几乎没有关于传统算法的书,但充满我个人见过的大规模使用的密码学:TLS、Noise 协议框架、Signal 协议、加密货币、HSM、门限密码学等等。这将是一本几乎没有理论密码学但充满可能变得相关的内容:密码认证密钥交换、零知识证明、后量子密码学等等。

当 Manning 出版社在 2018 年联系我,问我是否想要写一本关于密码学的书时,我已经知道了答案。我已经知道我想写什么了。我只是在等待着有人给我机会和借口来花时间写我心中的那本书。巧合的是,Manning 有一系列“真实世界”的书籍,所以自然而然地,我建议我的书扩展它。你眼前的是两年多的辛勤工作和大量热爱的成果。我希望你喜欢。

致谢

感谢 Marina Michaels 一直以来的帮助和见解,如果没有她,这本书可能不会完成。

感谢 Frances Buran,Sam Zaydel,Michael Rosenberg,Pascal Knecht,Seth David Schoen,Eyal Ronen,Saralynn Chick,Robert Seacord,Eloi Manuel,Rob Wood,Hunter Monk,Jean-Christophe Forest,Liviu Bartha,Mattia Reggiani,Olivier Guerra,Andrey Labunov,Carl Littke,Yan Ivnitskiy,Keller Fuchs,Roman Zabicki,M K Saravanan,Sarah Zennou,Daniel Bourdrez,Jason Noll,Ilias Cherkaoui,Felipe De Lima,Raul Siles,Matteo Bocchi,John Woods,Kostas Chalkias,Yolan Romailler,Gerardo Di Giacomo,Gregory Nazario,Rob Stubbs,Ján Jancˇár,Gabe Pike,Kiran Tummala,Stephen Singam,Jeremy O’Donoghue,Jeremy Boone,Thomas Duboucher,Charles Guillemet,Ryan Sleevi,Lionel Rivière,Benjamin Larsen,Gabriel Giono,Daan Sprenkels,Andreas Krogen,Vadim Lyubashevsky,Samuel Neves,Steven(Dongze)Yue,Tony Patti,Graham Steel,以及所有 livebook 评论者的许多讨论和纠正,以及技术和编辑反馈。

感谢所有审阅者:Adhir Ramjiawan,Al Pezewski,Al Rahimi,Alessandro Campeis,Bobby Lin,Chad Davis,David T Kerns,Domingo Salazar,Eddy Vluggen,Gábor László Hajba,Geert Van Laethem,Grzegorz Bernas´,Harald Kuhn,Hugo Durana,Jan Pieter Herweijer,Jeff Smith,Jim Karabatsos,Joel Kotarski,John Paraskevopoulos,Matt Van Winkle,Michal Rutka,Paul Grebenc,Richard Lebel,Ruslan Shevchenko,Sanjeev Jaiswal,Shawn P Bolan,Thomas Doylend,William Rudenmalm,感谢您的建议,这使得这本书更加完善。

关于本书

现在距我开始写《真实世界密码学》已经过去两年多了。我最初打算让它成为一本介绍实际世界中使用的密码学的所有内容的入门书。但是,当然,这是一个不可能的任务。没有一个领域可以用一本书来总结。因此,我不得不在我想给读者的详细程度和我想覆盖的领域之间取得平衡。我希望你发现自己和我一样陷入了同样的困境。如果你正在寻找一本实用的书,教你企业和产品实现和使用的密码学,以及如果你对实际世界的密码学是如何在表面下工作感兴趣,但不是在寻找一个包含所有实现细节的参考书,那么这本书适合你。

谁应该读这本书

这是我认为会受益于这本书的人群类型的列表(尽管请不要让任何人将你归类为某种类型)。

学生

如果你正在学习计算机科学、安全或密码学,并希望了解现实世界中的密码学(因为你要么在瞄准行业工作,要么想在学术界从事应用主题),那么我认为这本教材适合你。为什么呢?因为,正如我在前言中所说的,我曾经也是这样的学生,我写了我那时希望有的那本书。

安全从业者

渗透测试人员,安全顾问,安全工程师,安全架构师以及其他安全角色组成了我教应用密码学时大多数学生的人群。因此,这些材料是通过我在试图向非密码学家解释复杂的密码学概念时收到的许多问题加以完善的。作为一个安全从业者,这本书也受到了我为大公司审计的密码学以及我在途中学到或发现的错误的影响。

直接或间接使用密码学的开发人员

这项工作也受到了我与客户和同事之间的许多讨论的影响,这些人大多既不是安全从业者也不是密码学家。如今,编写代码而不涉及密码学越来越困难,因此,你需要对你所使用的东西有一定的了解。这本书通过不同编程语言的编码示例以及其他更多内容来给你这种理解,如果你感兴趣的话。

密码学家对其他领域感兴趣

这本书是应用密码学的介绍,对像我这样的人很有用。首先我是为自己写的,记住这一点。如果我做得不错,一个理论密码学家应该能够快速理解应用密码学世界的样貌;另一个在对称加密上工作的人应该能够通过阅读相关章节迅速掌握密码验证密钥交换;一个与协议工作的人应该能够迅速地了解量子密码学;依此类推。

工程和产品经理想要了解更多的人

这本书还试图回答我认为更注重产品的问题:这些方法的权衡和限制是什么?我面临什么风险?这条路会帮我遵守法规吗?我需要这样做那样做才能与政府合作吗?

好奇的人想要了解现实世界的加密

你不需要是我之前列出的任何一种类型才能读这本书。你只需要对现实世界中的密码学感兴趣。请记住,我不教授密码学的历史,也不教授计算机科学的基础知识,所以至少,在阅读这样一本书之前,你应该听说过密码学。

假定的知识,长版本

为了最大限度地利用这本书,你需要什么?你应该知道这本书假设你对你的笔记本电脑或互联网的工作方式有一些基本的了解,至少,你应该听说过加密。这本书是关于真实世界的密码学,所以如果你不熟悉计算机或者以前从未听说过encryption这个词,那么很难将事情放在上下文中。

假设你在某种程度上知道你在做什么,如果你知道比特和字节是什么,如果你看过甚至使用过像异或、左移这样的位运算,那就是一个真正的优势。如果你没有?不,但这可能意味着你需要不时停下来花几分钟在读书之前进行一些谷歌搜索。

实际上,无论你有多么有资格,当阅读这本书时,你可能会不时停下来,以获取更多来自互联网的信息。要么是因为我(真是可耻)在使用术语之前忘记了定义它,要么是因为我错误地认为你会了解它。无论如何,这应该不是什么大事,因为我尽力以最简单的方式解释我介绍的不同概念。

最后,当我使用cryptography这个词时,你的大脑可能会想到数学。如果除了那个想法,你的脸还皱起了,那么你会很高兴地知道你不必太担心。真实世界的密码学是关于教授见解,以便你对所有这些是如何运作有直观的理解,并且尽可能避免数学细节。

当然,如果我说制作这本书没有涉及数学,那就是在撒谎了。没有数学就没有教授密码学。所以我要说的是:如果你在数学方面取得了良好的水平,那会有所帮助,但如果没有,这不应该阻止你阅读这本书的大部分内容。除非你对数学有更高级的理解,否则一些章节对你来说可能不友好,特别是最后两章(第十四章和第十五章)关于量子密码学和下一代密码学,但没有什么是不可能的,你可以通过意志力和谷歌搜索矩阵乘法和其他你可能不了解的事物来应对这些章节。如果你决定跳过这些章节,请确保你不要跳过第十六章,因为那是锦上添花。

这本书的组织方式:一份路线图

真实世界的密码学分为两部分。第一部分应该从第一页读到最后一页,涵盖了大部分密码学的成分:像乐高一样的东西,用来构建更复杂的系统和协议。

  • 第一章是关于真实世界密码学的介绍,给你一些你将学到的内容的概念。
  • 第二章讨论了哈希函数,这是密码学中使用的一种基本算法,用于从字节串创建唯一标识符。
  • 第三章讲述了数据认证以及你如何确保没有人修改你的消息。
  • 第四章讲述了加密,它允许两个参与者将他们的通信隐藏起来,使观察者无法看到。
  • 第五章介绍了密钥交换,它允许你与他人进行交互地协商一个共同的秘密。
  • 第六章描述了非对称加密,它允许多人将消息加密给单个人。
  • 第七章讨论了签名,密码学等效于笔和纸签名。
  • 第八章讲述了随机性以及如何管理你的秘密。

本书的第二部分包含了由这些成分构建的系统。

  • 第九章教你如何使用加密和认证来保护机器之间的连接(通过 SSL/TLS 协议)。
  • 第十章描述了端对端加密,这实际上是关于像你和我这样的人如何相互信任的。
  • 第十一章展示了机器如何认证人,并且人们如何帮助机器相互同步。
  • 第十二章介绍了新兴的加密货币领域。
  • 第十三章重点介绍了硬件密码学,这些设备可以用来防止你的密钥被提取。

有两个附加章节:第十四章介绍了后量子密码学,第十五章介绍了下一代密码学。这两个领域开始进入产品和公司,要么是因为它们变得更加相关,要么是因为它们变得更加实用和高效。虽然如果你跳过这最后两章我不会责怪你,但你必须在把这本书放回书架之前仔细阅读第十六章(结语)。第十六章总结了密码学从业者(也就是你,一旦你完成这本书)必须牢记的不同挑战和不同教训。就像蜘蛛侠的本·帕克叔叔说的:“伴随着伟大的力量而来的是伟大的责任。”

关于代码

本书包含许多源代码示例,既在编号列表中,也在普通文本中。在这两种情况下,源代码都以fixed-width font like this的格式进行排版,以区分它与普通文本。有时,代码也会以**in bold**的形式呈现,以突出显示从章节中的先前步骤中改变的代码,例如当新功能添加到现有代码行时。

在许多情况下,原始源代码已经重新格式化;我们添加了换行符和重新调整了缩进,以适应书中可用的页面空间。在罕见情况下,甚至这都不够,列表包括行连续标记(➥)。此外,在文本中描述代码时,源代码中的注释通常已被从列表中删除。代码注释伴随着许多列表,突出显示重要概念。

liveBook 讨论论坛

购买包括免费访问由 Manning Publications 运行的私人网络论坛,您可以在那里对这本书发表评论,提出技术问题,并从作者和其他用户那里获得帮助。要访问论坛,请转到livebook.manning.com/book/real-world-cryptography/discussion。您还可以在livebook.manning.com/discussion了解有关 Manning 论坛和行为规则的更多信息。

Manning 对我们的读者的承诺是提供一个场所,让个别读者之间以及读者与作者之间进行有意义的对话。这不是对作者参与的任何特定数量的承诺,作者对论坛的贡献仍然是自愿的(且未付费的)。我们建议您尝试向作者提出一些具有挑战性的问题,以免他失去兴趣!只要这本书还在印刷中,您可以从出版商的网站访问论坛和以前的讨论档案。

关于作者

David Wong是 O(1) Labs 的高级密码学工程师,负责 Mina 加密货币。在此之前,他是 Facebook 的 Diem(原名 Libra)加密货币的安全主管,之前是 NCC Group 的密码服务实践的安全顾问。David 还是《现实世界的密码学》一书的作者。

在他的职业生涯中,David 参与了几个公开资助的开源审计项目,如 OpenSSL 和 Let’s Encrypt。他曾在各种会议上发表演讲,包括黑帽大会和 DEF CON,并在黑帽大会上教授了一门关于密码学的课程。他为 TLS 1.3 和 Noise 协议框架做出了贡献。他发现了许多系统中的漏洞,包括 Golang 标准库中的 CVE-2016-3959,以及各种 TLS 库中的 CVE-2018-12404、CVE-2018-19608、CVE-2018-16868、CVE-2018-16869 和 CVE-2018-16870。

他是 Disco 协议(www.discocrypto.comwww.embeddeddisco.com)和智能合约的去中心化应用安全项目(www.dasp.co)的作者之一。他的研究包括对 RSA 的缓存攻击(cat.eyalro.net/)、基于 QUIC 的协议(eprint.iacr.org/2019/028)、对 ECDSA 的时序攻击(eprint.iacr.org/2015/839)或者 Diffie-Hellman 中的后门(eprint.iacr.org/2016/644)。您可以在他的博客www.cryptologie.net上看到并阅读有关他的信息。

关于封面插图

《现实世界的加密学》 封面上的图画标题为“Indienne de quito”,即基多印第安人。这幅插图取自雅克·格拉塞·德·圣索维尔(Jacques Grasset de Saint-Sauveur,1757–1810)收集的各国服装装束,题为 《不同国家的服装》 ,于 1797 年在法国出版。每幅插图都是精细绘制并手工着色的。格拉塞·德·圣索维尔的收藏丰富多样,生动地提醒我们,仅 200 年前,世界各地的城镇和地区在文化上是多么的不同。人们相互隔离,说着不同的方言和语言。在街道上或乡间,仅凭着他们的服装就能轻易地辨认出他们的居住地和他们的职业或社会地位。

自那时以来,我们的穿着方式已经发生了变化,地区间的多样性,当时如此丰富,已经消失了。如今很难区分不同大陆的居民,更不用说不同的城镇、地区或国家了。也许我们已经用更多样化的个人生活,甚至是更多样化和快节奏的技术生活来交换了文化多样性。

在如今难以区分一本计算机书籍与另一本之际,曼宁(Manning)通过基于格拉塞·德·圣索维尔的图片再现两个世纪前丰富多样的地区生活,来庆祝计算机行业的创造力和主动性。

第一部分:原语:密码学的基本组成部分

欢迎来到密码学的现实世界!你手中的这本书(如果你选择获取印刷版本)分为两个相等的部分,共有八章。通过阅读整本书,你将了解几乎所有关于现实世界密码学的知识——就是你所处的这个世界。

请注意,本书的第一部分是按顺序阅读的,尽管每一章都会告诉你前提条件是什么,所以不要把这看作是一种强制性的限制。前八章带你了解基础知识——密码学的基本构建块。每一章介绍一个新的原语,并教你它的作用、工作原理以及它如何与其他元素结合使用。本书的第一部分旨在在我们开始利用全部内容之前,为你提供良好的抽象和见解。

祝你好运!

第一章:引言

本章涵盖

  • 密码学的内涵
  • 理论与现实中的密码学
  • 你将在这次冒险中学到什么

问候,旅行者;坐稳了。你即将进入一个充满奇迹和神秘的世界——密码学的世界。密码学是一门古老的学科,旨在保护受到恶意人物侵扰的情况。这本书包括了我们需要防御自己免受恶意的咒语。许多人尝试学习这门技艺,但很少有人能在掌握之前生存下来,因为掌握这门技艺面临着重重挑战。的确,令人兴奋的冒险在等待着!

在这本书中,我们将揭示密码算法如何保护我们的信件,识别我们的盟友,并保护我们的宝藏免受敌人的侵害。穿越密码学的海洋将不会是一次最顺利的旅程,因为密码学是我们世界安全和隐私的基础——最轻微的错误都可能致命。

注意 如果你发现自己迷失了方向,请记得继续向前走。一切最终都会变得清晰起来。


1.1 密码学是关于保护协议的

我们的旅程从介绍密码学开始,这是一门旨在防御协议免受破坏者侵害的科学。但首先,什么是协议?简单来说,它是一个(或多个人)必须遵循一系列步骤以实现某事的步骤列表。例如,想象一下以下假设:你想将你的魔剑无人看管几个小时,这样你就可以小睡一会儿。一个做到这一点的协议可能是这样的:

  1. 将武器放在地上
  2. 在树下小睡一会儿
  3. 从地上取回武器

当然,这并不是一个很好的协议,因为任何人都可以在你小睡时偷走你的剑……因此,密码学是考虑到那些想要利用你的对手的。

在古代,当统治者和将军们忙于背叛彼此和策划政变时,他们最大的问题之一就是如何与他们信任的人分享机密信息。从这里,密码学的概念诞生了。经过几个世纪的努力和辛勤工作,密码学才成为今天严肃的学科。现在,它在我们周围被广泛使用,以在我们混乱和不利的世界中提供最基本的服务。

这本书的故事是关于密码学的实践。它带领你在整个计算机世界中进行探险,介绍了当今正在使用的密码协议;它还向你展示了它们由什么部分组成以及如何组合在一起。虽然一本典型的密码学书通常是从密码学的发现开始,然后带你穿越它的历史,但我认为用这种方式开始事情没有太多意义。我想告诉你实用的东西。我想告诉你我亲眼所见的,作为一家大公司的顾问审查密码应用,或者作为领域工程师自己使用的密码学。

几乎不会有可怕的数学公式。本书的目的是揭示密码学的神秘,调查当今被认为有用的内容,并提供关于你周围事物是如何构建的直觉。本书面向对此感兴趣的人,有冒险精神的工程师,冒险的开发者和好奇的研究人员。第一章,本章,开始了对密码学世界的探索之旅。我们将发现不同类型的密码学,哪些对我们重要,以及世界是如何同意使用这些的。

1.2 对称加密:什么是对称加密?

密码学的一个基本概念是对称加密。它在本书中的大多数密码算法中使用,因此非常重要。我通过我们的第一个协议在这里介绍这个新概念。

让我们想象一下,女王爱丽丝需要给住在几个城堡之外的鲍勃勋爵发送一封信。她请求她忠诚的信使骑着他可靠的坐骑,冒着前方危险的土地,为了将珍贵的消息送到鲍勃勋爵手中。然而,她心存疑虑;即使她的忠诚信使为她服务多年,她希望在传输过程中的消息对所有被动观察者保密,包括信使!你看,这封信很可能包含了一些关于途中王国的有争议的八卦。


女王爱丽丝需要的是一个模拟将消息直接交给鲍勃勋爵而没有中间人的协议。这在实践中是一个几乎不可能解决的问题,除非我们引入密码学(或者传送)到方程中。这就是我们很久以前通过发明一种新类型的加密算法——称为对称加密算法(也称为密码)来解决的问题。

顺便说一下,一种加密算法通常被称为原语。你可以把原语看作是密码学中最小的、有用的构造,通常与其他原语一起使用以构建协议。这主要是一个术语,没有特别重要的意义,尽管它在文献中经常出现,但了解它是很好的。

让我们看看如何使用加密原语来隐藏女王爱丽丝的消息免受信使的干扰。现在想象一下,这个原语是一个黑匣子(我们看不到里面或者它内部在做什么),提供两个函数:

  • ENCRYPT
  • DECRYPT

第一个函数,ENCRYPT,通过取一个秘钥(通常是一个大数)和一个消息来工作。然后输出一系列看起来像随机数的数字,一些嘈杂的数据。我们将称这个输出为加密消息。我在图 1.1 中说明了这一点。


图 1.1 ENCRYPT 函数接受一个消息和一个秘钥,并输出加密消息——一长串看起来像随机噪音的数字。

第二个函数 DECRYPT 是第一个函数的反函数。它使用相同的秘钥和第一个函数的随机输出(加密的消息),然后找到原始消息。我在图 1.2 中进行了说明。


图 1.2 DECRYPT 函数接收一个加密的消息和一个秘钥,并返回原始消息。

要使用这个新的原语,女王艾丽斯和鲍勃勋爵必须首先在现实生活中见面并决定使用什么秘钥。稍后,女王艾丽斯可以使用提供的 ENCRYPT 函数,借助秘钥保护消息。然后,她将加密的消息传递给她的信使,最终将其传递给鲍勃勋爵。然后,鲍勃勋爵使用相同的秘钥对加密的消息使用 DECRYPT 函数来恢复原始消息。图 1.3 显示了这个过程。


图 1.3(1)艾丽斯使用带有秘钥的 ENCRYPT 函数将她的消息转换为噪音。(2)然后她将加密的消息传递给她的信使,后者不会了解到底层消息的任何信息。(3)一旦鲍勃收到加密的消息,他可以使用与艾丽斯相同的秘钥使用 DECRYPT 函数来恢复原始内容。

在这个交换过程中,信使所拥有的只是看起来随机的东西,它对隐藏消息的内容没有任何有意义的见解。实际上,借助密码学的帮助,我们将我们的不安全协议增强为安全协议。新的协议使女王艾丽斯能够向鲍勃勋爵发送一封机密信件,而没有任何人(除了鲍勃勋爵)了解其内容。

使用秘钥将事物渲染成噪音,使其与随机无法区分的过程,在密码学中是一种常见的安全协议保护方式。随着你在接下来的章节中学习更多密码算法,你会看到更多这样的内容。

顺便说一句,对称加密是密码学算法的一个更大类别的一部分,称为对称密码学秘密密钥密码学。这是由于密码原语暴露的不同函数使用相同的密钥。后面你会看到,有时会有不止一个密钥。

1.3 克尔克霍夫原则:只有密钥是保密的

设计一个密码算法(就像我们的加密原语)是一件容易的事情,但设计一个安全的密码算法并不是胆小之人能够做到的。虽然我们在这本书中避免创建这样的算法,但我们确实学会了如何识别优秀的算法。这可能会很困难,因为选择太多,超出了任务所需。在密码学的历史中反复失败的经验教训以及社区从中学到的教训中可以找到一些提示。当我们回顾过去时,我们将领会到什么将密码算法变成一个值得信赖的安全算法。

数百年过去了,许多皇后和领主被埋葬了。从那时起,纸张被放弃作为我们主要的交流方式,转而采用更好更实用的技术。如今,我们可以接触到强大的计算机以及互联网。更实用,当然,但这也意味着我们之前的恶意传送者变得更加强大。他现在无处不在:你所在的星巴克咖啡厅的 Wi-Fi、构成互联网并转发你的消息的不同服务器,甚至在运行我们算法的机器上。我们的敌人现在能够观察到更多的消息,因为你向网站发出的每个请求都可能通过错误的线路,并在几纳秒内被改变或复制,而没有人注意到。

在我们之前,我们可以看到最近的历史中有许多加密算法失效的例子,被秘密国家组织或独立研究人员破解,并未能保护其消息或实现其声明。我们吸取了许多教训,并逐渐了解了如何制造良好的密码学。

注意,密码算法可以通过多种方式被视为破解。对于加密算法,你可以想象到多种攻击算法的方法:秘密密钥可以泄露给攻击者,消息可以在没有密钥的情况下解密,仅通过查看加密消息就可以透露一些关于消息的信息,等等。任何会削弱我们对算法做出的假设的事情都可以被视为破解。

密码学经历了漫长的试验和错误过程后,产生了一个强有力的概念:要对密码原语所声称的安全性进行信任,就必须由专家公开分析该原语。否则,你就是在依赖安全性通过模糊性,这在历史上并不奏效。这就是为什么密码学家(构建者)通常会寻求密码分析家(破解者)的帮助来分析一个构造的安全性。(尽管密码学家经常自己也是密码分析家,反之亦然。)


让我们以高级加密标准(AES)加密算法为例。AES 是由美国国家标准与技术研究院(NIST)组织的国际竞赛的产物。

注意,NIST 是一个美国机构,其角色是定义政府相关职能以及其他公共或私营组织使用的标准并制定指南。像 AES 一样,它标准化了许多广泛使用的密码原语。

AES 竞赛持续了数年,期间来自世界各地的许多志愿密码分析师聚集在一起,试图打破各种候选结构。几年后,通过这个过程建立了足够的信心后,一个单一的竞争性加密算法被提名为成为高级加密标准本身。现在,大多数人相信 AES 是一种可靠的加密算法,并且被广泛用于几乎所有的加密。例如,当你浏览网页时,你每天都在使用它。

在公开建立加密标准的想法与一个经常被称为Kerckhoffs’ principle的概念有关,可以理解为这样一种情况:依赖于我们的敌人不会发现我们使用的算法是愚蠢的,因为他们很可能会发现。相反,让我们对此持开放态度。

如果女王艾丽斯和鲍勃勋爵的敌人确切地知道他们是如何加密消息的,那么他们的加密算法如何安全?答案是秘钥!秘钥的保密性使得协议安全,而不是算法本身的保密性。这是本书的一个常见主题:我们将要学习的所有加密算法,以及实际世界中使用的加密算法,大多数情况下是可以自由学习和使用的。只有作为这些算法输入的秘钥是保密的。1644 年,让·罗伯特·迪·卡莱特(Jean Robert du Carlet)说:“Ars ipsi secreta magistro”(即使对于大师来说也是秘密的艺术)。在接下来的部分中,我将谈论一种完全不同类型的密码原语。现在,让我们使用图 1.4 来整理我们迄今为止学到的知识。


图 1.4 到目前为止你学到的密码算法。AES 是对称加密算法的一个实例,它是更广泛的对称加密算法类别的一部分。

1.4 非对称加密:两把钥匙比一把好

在我们关于对称加密的讨论中,我们说女王艾丽斯和鲍勃勋爵首先见面商定一个对称秘钥。这是一个合理的情景,实际上很多协议确实是这样工作的。然而,在有许多参与者的协议中,这很快就变得不太实际:我们需要我们的网络浏览器与谷歌、Facebook、亚马逊以及其他数十亿个网站见面,然后才能安全地连接到它们吗?

这个问题,通常称为密钥分配,在很长一段时间内一直很难解决,至少直到 20 世纪 70 年代末另一类大而有用的密码算法被发现,称为非对称密码学公钥密码学。非对称密码学通常使用不同的密钥来执行不同的功能(与对称密码学中使用的单个密钥相对),或者为不同的参与者提供不同的观点。为了说明这意味着什么以及公钥密码学如何帮助建立人与人之间的信任,我将在本节中介绍一些非对称原语。请注意,这只是你将在本书中学到的内容的一个概述,因为我将在随后的章节中更详细地讨论这些密码原语中的每一个。

1.4.1 密钥交换或如何获得共享秘密

我们将要看的第一个非对称密码学原语是密钥交换。首次发现并发布的公钥算法是一种以其作者命名的密钥交换算法,称为 Diffie-Hellman(DH)。DH 密钥交换算法的主要目的是在两个参与方之间建立一个共同的秘密。然后可以将这个共同的秘密用于不同的目的(例如,作为对称加密原语的密钥)。

在第五章中,我将解释 Diffie-Hellman 的工作原理,但在此简介中,让我们使用一个简单的类比来理解密钥交换提供了什么。像密码学中的许多算法一样,密钥交换必须从参与者使用的一组共同参数开始。在我们的类比中,我们简单地让 Alice 女王和 Bob 勋爵同意使用一个正方形(■)。接下来的步骤是让他们选择自己的随机形状。他们俩都去各自的秘密地点,在不被看到的情况下,Alice 女王选择了一个三角形(▲),而 Bob 勋爵选择了一个星形(★)。他们选择的对象必须以任何代价保持秘密!这些对象代表他们的私钥(见图 1.5)。


图 1.5 DH(Diffie-Hellman)密钥交换的第一步是让两个参与者生成一个私钥。在我们的类比中,Alice 女王选择一个三角形作为她的私钥,而 Bob 勋爵选择一个星形作为他的私钥。

一旦他们选择了他们的私钥,他们都会单独将他们的秘密形状与他们最初同意使用的共同形状(正方形)相结合。这些组合产生了代表他们的公钥的独特形状。Alice 女王和 Bob 勋爵现在可以交换他们的公钥(因此称为密钥交换),因为公钥被视为公共信息。我在图 1.6 中说明了这一点。


图 1.6 DH 密钥交换的第二步,两个参与者交换他们的公钥。参与者通过将他们的私钥与一个共同形状相结合来导出他们的公钥。

现在我们开始看到为什么这个算法被称为公钥算法。这是因为它需要一个由私钥和公钥组成的 密钥对。DH 密钥交换算法的最后一步非常简单:Alice 女王取 Bob 男爵的公钥并与她的私钥结合。Bob 男爵也同样对待 Alice 女王的公钥,并将其与自己的私钥结合。结果现在应该在每一方都是相同的;在我们的示例中,是一个形状结合了星形、正方形和三角形(见图 1.7)。


图 1.7 DH 密钥交换的最后一步,两个参与者产生相同的共享密钥。为此,Alice 女王将她的私钥与 Bob 男爵的公钥结合,而 Bob 男爵则将他的私钥与 Alice 女王的公钥结合。仅观察公钥无法获取共享密钥。

现在由协议参与者决定如何使用这个共享密钥。在本书中,你会看到几个示例,但最明显的场景是在需要共享密钥的算法中使用它。例如,Alice 女王和 Bob 男爵现在可以使用共享密钥作为对称加密原语进一步加密消息的密钥。概括一下

  1. Alice 和 Bob 交换他们的公钥,这掩盖了他们各自的私钥。
  2. 使用另一方的公钥和各自的私钥,他们可以计算出一个共享密钥。
  3. 观察公钥交换的对手没有足够的信息来计算共享密钥。

注意 在我们的示例中,最后一点很容易被绕过。实际上,在没有任何私钥知识的情况下,我们可以将公钥组合在一起生成共享密钥。幸运的是,这只是我们比喻的一个局限性,但它足以帮助我们理解密钥交换的作用。

实际上,DH 密钥交换非常不安全。你能花几秒钟想出为什么吗?

因为 Alice 女王接受她收到的任何公钥都是 Bob 男爵的公钥,所以我可以拦截交换并用我的公钥替换它,这样我就可以冒充 Bob 男爵向 Alice 女王发起攻击(同样也可以对 Bob 男爵进行相同操作)。我们称之为 中间人 (MITM)攻击者可以成功攻击协议。我们如何解决这个问题?在后面的章节中,我们将看到我们要么需要用另一个加密原语增强此协议,要么需要事先知道 Bob 男爵的公钥是什么。但那样的话,我们不是回到了原点吗?

以前,Alice 女王和 Bob 男爵需要知道一个共享密钥;现在 Alice 女王和 Bob 男爵需要知道各自的公钥。他们如何知道呢?这是不是又是一个鸡生蛋蛋生鸡的问题?嗯,有点像。正如我们将看到的,实际上,公钥密码学并不能解决信任问题,但它简化了其建立(特别是当参与者数量很多时)。

让我们暂停一下,继续下一节,因为你将在第五章了解更多关于密钥交换的知识。我们还有一些非对称加密原语需要揭示(见图 1.8),以完成我们对现实世界密码学的概览。


图 1.8 我们到目前为止学到的加密算法。两大类加密算法是对称加密(使用对称加密)和非对称加密(使用密钥交换)。

1.4.2 非对称加密,不像对称加密那样

DH 密钥交换算法的发明很快被 RSA 算法的发明紧随其后,该算法以 Ron Rivest、Adi Shamir 和 Leonard Adleman 命名。RSA 包含两种不同的原语:公钥加密算法(或非对称加密)和(数字)签名方案。这两种原语都是更大类别的加密算法称为非对称加密的一部分。在本节中,我们将解释这些原语的作用以及它们如何有用。

第一个,非对称加密,与我们之前讨论的对称加密算法有类似的目的:它允许加密消息以获得机密性。然而,与对称加密不同,对称加密是完全不同的:

  • 它使用两个不同的密钥:一个公钥和一个私钥。
  • 它提供了一个不对称的观点:任何人都可以使用公钥加密,但只有私钥的所有者可以解密消息。

现在让我们用一个简单的类比来解释如何使用非对称加密。我们再次从我们的朋友女王爱丽丝开始,她持有一个私钥(及其相关的公钥)。让我们把她的公钥想象成一个她向公众发布供任何人使用的开放箱子(见图 1.9)。


图 1.9 为了使用非对称加密,女王爱丽丝需要先发布她的公钥(这里用一个开放的盒子表示)。现在,任何人都可以使用这个公钥来加密发送消息给她。而且她应该能够使用相关的私钥解密它们。

现在,你、我和每个想要的人都可以使用她的公钥加密一条消息给她。在我们的类比中,想象一下你会把你的消息插入到开放的箱子里,然后关闭它。一旦箱子关闭了,除了女王爱丽丝之外,没有人能够打开它。这个盒子有效地保护了消息的保密性免受观察者的观察。然后,关闭的盒子(或加密内容)可以发送给女王爱丽丝,她可以使用她的私钥(只有她知道的)来解密它们(见图 1.10)。


图 1.10 非对称加密:(1)任何人都可以使用艾丽丝女王的公钥将消息加密给她。(2)接收后,(3)她可以使用相关联的私钥解密内容。在消息发送给艾丽丝女王时,没有人能够观察到。

让我们在图 1.11 中总结到目前为止我们学到的加密原语。我们只需要再学习一个就可以完成我们的真实世界加密之旅了!


图 1.11 到目前为止我们学到的加密算法:两类大型加密算法是对称加密(使用对称加密)和非对称加密(使用密钥交换和非对称加密)。

1.4.3 数字签名,就像你的纸笔签名一样

我们看到 RSA 提供了一种非对称加密算法,但正如我们之前提到的,它也提供了一种数字签名算法。这一数字签名的加密原语的发明在建立我们世界的爱丽丝和鲍勃之间的信任方面帮助巨大。它类似于真实的签名;你知道的,比如当你试图租一间公寓时,你被要求在合同上签字的那种。

“如果他们伪造我的签名怎么办?”你可能会问,实际上,真实的签名在现实世界中并不提供太多安全性。另一方面,加密签名可以以同样的方式使用,但提供带有你名字的加密证书。你的加密签名是无法伪造的,并且可以很容易地被其他人验证。与你过去在支票上写的古老签名相比,非常有用!

在图 1.12 中,我们可以想象一个协议,艾丽丝女王想向大卫勋爵表明她信任鲍勃勋爵。这是一个典型的多参与者环境下建立信任的例子,以及非对称加密如何帮助。通过签署一份包含“我,艾丽丝女王,信任鲍勃勋爵”的文件,艾丽丝女王可以表明立场并通知大卫勋爵要信任鲍勃勋爵。如果大卫勋爵已经信任艾丽丝女王及其签名算法,那么他可以选择相应地信任鲍勃勋爵。


图 1.12 大卫勋爵已经信任艾丽丝女王。因为艾丽丝女王信任鲍勃勋爵,所以大卫勋爵能够安全地信任鲍勃勋爵吗?

更详细地说,艾丽丝女王可以使用 RSA 签名方案和她的私钥签署消息“我,艾丽丝女王,信任鲍勃勋爵”。这将生成一个看起来像随机噪音的签名(见图 1.13)。


图 1.13 要签署一条消息,艾丽丝女王使用她的私钥并生成一个签名。

任何人都可以通过组合验证签名

  • 艾丽丝的公钥
  • 签名的消息
  • 签名

结果要么是true(签名有效),要么是false(签名无效),如图 1.14 所示。


图 1.14 要验证来自阿丽斯女王的签名,还需要被签名的消息和阿丽斯女王的公钥。结果要么验证签名,要么无效化签名。

我们现在学到了三种不同的非对称基元:

  • 与迪菲-赫尔曼(Diffie-Hellman)进行密钥交换
  • 非对称加密
  • 使用 RSA 进行数字签名

这三种密码算法是非对称加密中最知名和常用的基元。它们如何帮助解决现实问题可能并不完全明显,但请放心,它们每天都被许多应用程序用来保护周围的事物。现在是时候用我们迄今学到的所有密码算法来完整地描绘我们的图景了(见图 1.15)。


图 1.15 我们迄今学到的对称和非对称算法

1.5 对加密进行分类和抽象

在前一节中,我们调查了两类大型算法:

  • 对称加密(或秘密密钥加密)—使用单个秘密。如果有多个参与者知道秘密,则称为共享秘密。
  • 非对称加密(或公钥加密)—参与者对于密钥有不对称的视角。例如,有些人会知道公钥,而有些人会同时知道公钥和私钥。

对称和非对称加密不是加密中唯一的两类基元,而且很难对不同的子领域进行分类。但是,正如你将意识到的那样,我们书中的很大一部分内容都是关于(并且利用了)对称和非对称基元。这是因为当今加密中有用的很大一部分内容都包含在这些子领域中。另一种划分加密的方式可能是

  • 基于数学的构建—这些依赖于数学问题,如分解数字。(RSA 算法用于数字签名和非对称加密就是这种构建的一个例子。)
  • 启发式构建—这些依赖于密码分析人员的观察和统计分析。(对称加密的 AES 就是这种构建的一个例子。)

这种分类还涉及速度因素,因为基于数学的构建通常比基于启发式的构建慢得多。给你一个概念,对称构建通常基于启发式(看起来有效的东西),而大多数非对称构建基于数学问题(被认为是困难的问题)。

对我们来说,严格分类密码学所能提供的一切是很困难的。事实上,关于这个主题的每本书或课程都给出了不同的定义和分类。最终,这些区别对我们来说并不太有用,因为我们将看到大多数密码原语都是具有独特 安全声明 的独特工具。我们反过来可以使用这些工具中的许多作为构建协议的基础模块。因此,了解这些工具的每一个是如何工作的,以及它们提供了哪些安全声明,以便理解它们如何保护我们周围的协议,是非常重要的。因此,这本书的第一部分将介绍最有用的密码原语及其安全属性。

书中的很多概念第一次接触时可能会相当复杂。但像一切事物一样,我们越是阅读它们,越是在上下文中看到它们,它们就越自然,我们就能越抽象它们。这本书的作用是帮助你创建抽象,让你建立这些构造所做的事情的心理模型,并理解它们如何组合在一起产生安全协议。我经常会谈论构造的接口,并给出使用和组合的现实示例。

以前,密码学的定义很简单:女王爱丽丝和博伯爵想要交换秘密信息。现在不再是这样了。如今的密码学描述相当复杂,是围绕着发现、突破和实际需求有机发展起来的。归根结底,密码学是帮助增强协议以使其在对抗环境中运行的东西。

要准确理解密码学如何帮助,对我们而言最重要的是这些协议旨在实现的一系列目标。那才是有用的部分。本书中我们将了解的大多数密码原语和协议提供以下一种或两种属性:

  • 保密性 —— 它关乎掩盖和保护一些信息免受错误眼睛的侵害。例如,加密掩盖了传输中的消息。
  • 认证 —— 它关乎我们正在与谁交谈。例如,这有助于确保我们收到的消息确实来自女王爱丽丝。

当然,这仍然是密码学可以提供的内容的一个重要简化。在大多数情况下,细节都在原语的安全声明中。根据我们在协议中如何使用密码原语,它将实现不同的安全属性。

在本书中,我们将学习新的加密原语以及它们如何结合起来以暴露诸如保密性和认证等安全属性。目前,我们要欣赏的是,密码学是关于在对抗性环境中为协议提供保险的。虽然“对手”并没有明确定义,但我们可以想象他们是试图破坏我们协议的人:参与者、观察者、中间人。他们反映了真实生活中对手可能的情况。因为最终,密码学是一个实践领域,旨在防御血肉和骨头以及位的不良行为者。

1.6 理论密码学与现实世界密码学

1993 年,布鲁斯·施奈尔(Bruce Schneier)发布了《应用密码学》(Wiley),这是一本针对希望构建涉及密码学应用的开发人员和工程师的书籍。大约在 2012 年,肯尼·帕特森(Kenny Paterson)和奈杰尔·斯马特(Nigel Smart)开始了一年一度的名为真实世界密码(Real World Crypto)的会议,针对的是同一群人。但是应用密码学和现实世界密码学是指什么?是否有多种类型的密码学?

要回答这些问题,我们必须从定义理论密码学开始,这是密码学家和密码分析家从事的密码学。这些密码学人大多来自学术界,在大学工作,但有时来自行业或政府的特定部门。他们研究密码学的一切。结果通过国际期刊和会议的出版物和演示分享。然而,他们所做的并不是显然有用或实用的。通常情况下,没有“概念证明”或代码被发布。无论如何,这是毫无意义的,因为没有计算机足够强大来运行他们的研究。话虽如此,理论密码学有时变得如此有用和实用,以至于它会进入另一边。

另一方面是应用密码学现实世界密码学的世界。它是你周围所有应用程序中发现的安全的基础。虽然它通常看起来好像不存在,几乎是透明的,但当你在互联网上登录银行账户时它就在那里;当你给朋友发消息时它与你同在;当你丢失手机时它帮助保护你。它是无处不在的,因为不幸的是,攻击者无处不在,并积极尝试观察和伤害我们的系统。从业者通常来自行业,但有时会与学术界合作评估算法并设计协议。结果通常通过会议、博客文章和开源软件分享。

现实世界的密码学通常非常关注现实世界的考虑因素:算法提供的确切安全级别是多少?运行算法需要多长时间?原语需要的输入和输出大小是多少?现实世界的密码学就是这本书的主题。虽然理论密码学是其他书的主题,但我们仍将在本书的最后几章中窥探一下那里正在酝酿的东西。准备好被惊讶吧,因为你可能会一瞥到明天的现实世界的密码学。

现在你可能想知道:开发人员和工程师如何选择用于他们的现实世界应用的密码学?

1.7 从理论到实践:选择你自己的冒险

位于顶部的是提出并解决难题的密码分析师[…] 而在底部的是希望加密一些数据的软件工程师

—Thai Duong(“那么你想自己设计密码学?”,2020)

在我花费在研究和从事密码学的所有年份中,我从未注意到一个密码学原语在实际应用中被使用的单一模式。情况相当混乱。在一个理论原语被采用之前,有一长串人要处理这个原语,并将其塑造成某种可消费的东西,有时对大众更安全。我该如何向你解释呢?

你听说过选择你自己的冒险吗?这是一个旧书系列,你可以选择如何沿着故事前进。原则很简单:你读完书的第一部分;在部分结束时,书让你通过给出不同的选项来决定未来的道路。每个选项都与一个不同的部分号码相关,如果你愿意,可以直接跳转到该部分。所以,在这里我也做了同样的事情!从阅读下一段开始,按照它给出的方向前进。


一切始于此。 你是谁?你是爱丽丝,一位密码学家吗?你是大卫,私营行业工作者,需要解决问题吗?还是你是伊娃,工作在政府部门,忙于密码学?

  • 你是爱丽丝,前往步骤 1。
  • 你是大卫,前往步骤 2。
  • 你是伊娃,前往步骤 3。

步骤 1:研究员得研究。 你是一名在大学工作的研究人员,或者在私营公司或非营利组织的研究团队工作,或者在像 NIST 或 NSA 这样的政府研究机构工作。因此,你的资金可能来自不同的地方,并可能激励你研究不同的东西。

  • 你发明了一个新的原语,前往步骤 4。
  • 你发明了一种新的结构,前往步骤 5。
  • 你开始了一场公开竞赛,前往步骤 6。

第 2 步:行业有需求。 作为你的工作的一部分,出现了一些问题,你需要一个新的标准。例如,Wi-Fi 联盟是由感兴趣的公司资助的非营利组织,制定了围绕 Wi-Fi 协议的一套标准。另一个例子是银行联合起来制定了支付卡行业数据安全标准(PCI-DSS),该标准强制执行处理信用卡号码时要使用的算法和协议。

  • 你决定资助一些急需的研究,前往第 1 步。
  • 你决定标准化一个新的基元或协议,前往第 5 步。
  • 你发起了一场公开竞赛,前往第 6 步。

第 3 步:政府有需求。 你为你国家的政府工作,需要推出一些新的加密。例如,NIST 负责发布联邦信息处理标准(FIPS),规定了哪些加密算法可以被与美国政府打交道的公司使用。虽然许多这些标准都是成功案例,人们倾向于对政府机构推动的标准有很多信任,但(不幸的是)对于失败还有很多话要说。

在 2013 年,根据爱德华·斯诺登的披露,发现 NSA 故意并成功地推动在标准中包含后门算法(参见 Bernstein 等人的“Dual EC: A Standardized Back Door”),其中包括一个隐藏的开关,允许 NSA,仅限 NSA,预测你的秘密。这些后门可以被视为魔法密码,允许政府(仅限政府,据说)颠覆你的加密。在此之后,密码学界对来自政府机构的标准和建议失去了很多信心。最近,在 2019 年,发现俄罗斯标准 GOST 也遭受了同样的对待。

密码学家长期以来一直怀疑,该机构在 2006 年被国家标准技术研究所采纳并后来被国际标准化组织采纳的标准中植入了漏洞,该组织有 163 个成员国。机密的 N.S.A.备忘录似乎证实了这个致命弱点,由 2007 年两名微软密码学家发现,由该机构设计。N.S.A.编写了这一标准,并积极推动国际组织,私下称这一努力为“一项精湛的挑战”。

纽约时报(“N.S.A. Able to Foil Basic Safeguards of Privacy on Web,” 2013)

  • 你资助了一些研究,前往第 1 步。
  • 你组织了一场公开竞赛,前往第 6 步。
  • 你推动正在使用的基元或协议的标准化,前往第 7 步。

第 4 步:提出一个新概念。 作为研究人员,你成功做到了不可能的事情;你发明了一个新概念。当然,有人已经想到了加密,但在密码学领域每年仍然会提出一些新的原语。其中一些将被证明无法实现,而一些将最终得以解决。也许你的提议中有一个实际的构造,或者也许你得等待看看是否有人能想出有效的方法。

  • 你的原始构造被实施,前往第 5 步。
  • 你的原始构造最终无法实施,回到起点。

第 5 步:提出新的构造或协议。 一个密码学家或密码学家团队提出了一个实现概念的新算法。例如,AES 是加密方案的一种实例化。(AES 最初由文森特·瑞曼和约安·达门提出,他们将他们的构造命名为他们的名字的缩写,Rijndael。)接下来呢?

  • 有人在你的构造基础上进行改进,前往第 5 步。
  • 你参加了一个公开竞赛并赢得了胜利!前往第 6 步。
  • 对你的工作有很多炒作;你将获得一个标准!前往第 7 步。
  • 你决定对你的构造进行专利申请,前往第 8 步。
  • 你或其他人决定实现你的构造会很有趣。前往第 9 步。

第 6 步:一个算法赢得了比赛。 密码学家们最喜欢的过程是一个公开的竞赛!例如,AES 就是一个邀请全球研究者参与的竞赛。经过数十次提交和分析以及密码分析师的帮助(可能需要数年),候选名单被缩减到几个(在 AES 的情况下,只有一个),然后开始标准化过程。

  • 你很幸运,在多年的竞争后,你的构造赢得了胜利!前往第 7 步。
  • 不幸的是,你失败了。回到起点。

第 7 步:一个算法或协议被标准化。 标准通常由政府或标准化机构发布。目的是确保每个人都在同一页面上,以最大限度地提高互操作性。例如,NIST 定期发布密码学标准。密码学中的一个知名标准化机构是互联网工程任务组(IETF),它是互联网上许多标准(如 TCP、UDP、TLS 等)的背后推动者,在本书中你会经常听到。在 IETF 中,标准称为 请求评论(RFC),几乎任何想要制定标准的人都可以编写。

为了加强我们不投票的观念,我们还采用了“哼声”的传统:例如,当我们面对面开会时,工作组主席想要了解“房间的感觉”时,主席有时会要求每一方对特定问题哼唱,“支持”还是“反对”。

—RFC 7282(《关于 IETF 中的共识和哼声》,2014)

有时,一家公司直接发布一个标准。例如,RSA 安全有限责任公司(由 RSA 算法的创建者资助)发布了一系列 15 个名为 公钥密码学标准(PKCS)的文档,以合法化该公司当时使用的算法和技术。如今,这种情况非常罕见,许多公司通过 IETF 来标准化他们的协议或算法,而不是通过自定义文档。

  • 你的算法或协议得到了实现,前往步骤 9。
  • 没有人关心你的标准,回到起点。

步骤 8:专利到期。 在密码学中,专利通常意味着没有人会使用该算法。一旦专利过期,重新对原语产生兴趣并不罕见。最著名的例子可能是 Schnorr 签名,它曾是最受欢迎的签名方案之一,直到 Schnorr 本人在 1989 年对算法进行了专利。这导致 NIST 标准化了一个较差的算法,称为数字签名算法(DSA),它成为了当时的首选签名方案,但现在已经不太使用。Schnorr 签名的专利在 2008 年到期,自那时起该算法开始重新受到关注。

  • 时间过去太久了,你的算法将永远被遗忘。回到起点。
  • 你的构建启发了更多的构建被发明在其之上,前往步骤 5。
  • 现在人们想要使用你的构建,但在真正标准化之前不会这样。前往步骤 7。
  • 一些开发人员正在实现你的算法!前往步骤 9。

步骤 9:构建或协议被实现。 实现者不仅要解读论文或标准(尽管标准 应该 面向实现者),而且还必须使他们的实现易于使用和安全。这并不总是一件简单的任务,因为在使用密码学的方式上可能会出现许多灾难性的错误。

  • 有人决定是时候为这些实现提供一个标准支持了。没有标准支持是令人尴尬的。前往步骤 7。
  • 炒作正落在你的加密库头上!前往步骤 10。

步骤 10:开发人员在应用程序中使用协议或原语。 开发人员有一个需求,而你的加密库似乎解决了这个需求 —— 轻而易举!

  • 原语解决了需求,但它没有一个标准。不太好。前往步骤 7。
  • 我希望这是用我的编程语言编写的。前往步骤 9。
  • 我滥用了库或者构建已经损坏。游戏结束。

你成功了!原语实现到真实世界有很多方式。最好的方式涉及多年的分析,一个友好的实现标准和优秀的库。更糟糕的方式涉及一个糟糕的算法和糟糕的实现。在图 1.16 中,我说明了首选路径。


图 1.16 理想的加密算法生命周期始于密码专家在白皮书中实例化一个概念。例如,AES 是对称加密概念的一个实例化(还有许多其他对称加密算法)。然后可以对构造进行标准化:每个人都同意以某种方式实现它以最大程度地实现互操作性。然后通过在不同语言中实现标准来创建支持。

1.8 一个警告

任何人,从最无知的业余爱好者到最优秀的密码学家,都可以创建一个他自己无法破解的算法

—布鲁斯·施奈尔(“给业余密码设计者的备忘录”,1998 年)

我必须警告您,密码学的艺术很难掌握。一旦您完成了这本书,就假设您可以构建复杂的密码协议是不明智的。这段旅程应该启发您,向您展示可能性,并向您展示事物是如何运作的,但它不会使您成为密码学大师。

本书并非圣杯。事实上,本书的最后几页将带你走过最重要的一课——不要独自踏上真正的冒险。龙可以杀人,你需要一些支持来陪伴你以便击败它们。换句话说,密码学很复杂,而仅凭本书无法让您滥用所学知识。要构建复杂的系统,需要研究自己的行业多年的专家。相反,您将学到的是如何识别何时应使用密码学,或者,如果有什么不对劲,可以使用什么密码原语和协议来解决您面临的问题,以及所有这些密码算法在表面下是如何工作的。既然您已经被警告,请转到下一章。

真实世界的密码学(一)(2)https://developer.aliyun.com/article/1508700

相关文章
|
安全 数据安全/隐私保护
【密码学】一文读懂线性反馈移位寄存器
在正式介绍线性反馈移位寄存器(LFSR)之前,先来看一个小故事,相传在遥远的古代,住着4个奇怪的人。
1559 0
【密码学】一文读懂线性反馈移位寄存器
|
18天前
|
安全 算法 量子技术
密码学:保护信息的艺术与科学
【8月更文挑战第31天】
29 0
|
4月前
|
安全 算法 网络协议
真实世界的密码学(二)(3)
真实世界的密码学(二)
54 4
|
4月前
|
算法 安全 Java
真实世界的密码学(二)(1)
真实世界的密码学(二)
45 3
|
4月前
|
安全 算法 网络安全
真实世界的密码学(四)(1)
真实世界的密码学(四)
36 2
|
4月前
|
Web App开发 安全 算法
真实世界的密码学(二)(4)
真实世界的密码学(二)
55 2
|
4月前
|
算法 安全 Linux
真实世界的密码学(二)(2)
真实世界的密码学(二)
52 2
|
4月前
|
存储 安全 算法
真实世界的密码学(一)(2)
真实世界的密码学(一)
49 0
|
4月前
|
算法 安全 数据库
真实世界的密码学(一)(4)
真实世界的密码学(一)
60 0
|
4月前
|
存储 算法 安全
真实世界的密码学(一)(3)
真实世界的密码学(一)
38 0