你想成为一名密码学家?- 密码学学习引导

本文为想要学习密码学的人提供了一个资源列表和学习指南,内容涵盖了密码学学习的各个方面,从课程、书籍到实践活动,以及其他阅读材料和建议。作者鼓励读者深入学习,并强调了安全的重要性,同时还给出了社区参与的建议。

你想成为一名密码学家吗?

这并不是一个真正公平的标题,因为这不会教你如何成为一名密码学家, 但我小时候最喜欢的游戏之一是 Quest for Glory: So You Want to be a Hero 我实在不想错过这个致敬它的机会。 一个更好的标题应该是 "那么,你想开始设计和编写密码学代码,并大致了解更广泛的密码学社区正在发生的事情吗?", 但这说起来不太顺口,不是吗?

介绍

由于某些原因,你决定需要学习更多密码学知识。 也许是个人兴趣,或者你的工作正在转变。 我真的不知道。 然而,令人惊讶的是,很多人问我“我该如何开始?”,(或者更常见的是“你是如何开始的?”的变体), 所以与其每次都为每个人整理我的笔记,我不如在这里 一次性 以一种易于分享和更新的格式写下来。

与主要的 密码学陷阱 类似,这是一个个人项目,绝对是非正式的。 我没有其他“正式”资格,只有自 2006 年以来,我一直在以某种形式从事这方面的工作(并从 2012 年左右开始关注它)。

请不要

这并不是一种搞门户之见的行为。 任何人都可以学习这些,我真的认为更多的开发人员应该了解更多关于密码学的知识。 然而,我的一个人生目标是开发人员 不需要 了解密码学(或者主要的密码学陷阱列表中的 任何内容), 他们需要这样做是对现有工具和库的一种控诉。

那么我为什么要阻止呢? 这些知识可能很危险。

正如我通常不鼓励人们学习开锁(如果你想学习可以看看 Toool) 或业余烟火技术(抱歉,这里没有有用的链接)一样, 学习刚刚好能让自己陷入困境的密码学知识真的很容易。 如果你对开锁一无所知,你不太可能会说“嗯,我想知道我是否可以打开这把随机的锁?” 如果你只知道一点点,你可能会说“啊哈,我认出这把锁了,我可以打开它!” 一旦你了解了更多,你可能会说“我可以打开那把锁,但如果它坏了,我就被困在我的公寓外面了,而且这把锁在技术上也不属于我,而且我住的地方即使这样做也是违法的……” 同样,在密码学中,很容易学习到足够多的知识来组装一些 看起来 不错但却存在灾难性缺陷的密码学代码。 (当我审查密码学代码时,我喜欢阅读关于为什么“即使它看起来很危险,这样做也是安全的”的注释。 这些注释几乎总是错误的,并且准确地突出了如何破坏系统。 问题在于,作者掌握了足够的知识来提出论点,但不足以了解为什么它仍然不安全。) 另请参阅 Schneier 定律,即“任何人……都可以创建一种他自己无法破解的算法。” 此外,你会犯错误,其中一些错误很重要,会伤害到他人。 尽管你尽了最大努力,但这仍然会发生。 你能接受吗?

因此,如果你真的想擅长这件事(而不仅仅是出于兴趣学习),你需要投入大量的时间。 你确定这值得吗? 是否有更好利用你时间的方法? 密码学很少是你项目中最有价值的技能,而且还有更多有意义的爱好。 (我应该花更多时间练习乐器或骑自行车。)

然而,说了这么多,如果你仍然想学习这些,我希望这能有所帮助。

这不是什么

这不是一门课程,也不旨在真正教会你任何东西。 (我正在 编写一个术语表,这会有所帮助,但谁知道什么时候会完成。) 相反,它的目的是成为一个资源列表和一个跳板,让你从真正了解他们在做什么并且能够真正教你的人那里学习。

如果你阅读了本列表中 所有 (甚至大部分)内容,你将比世界上绝大多数安全专家更了解密码学。 然而,你仍然不会成为密码学家。 你可能会发现并纠正许多密码学错误,甚至编写一些简单的 高级 密码学代码, 但你绝对不应该实现任何原语。 你绝对不应该开始定义新的设计或独自完成任何工作。 (我不在乎你有多优秀或你是什么人,密码学永远不是一项可以单独完成的任务。)

列表

课程

  1. Dan Boneh 的密码学 I 这是一门优秀的本科水平的密码学课程,每个人都应该完成这门课程。 这可能是你的第一站
  2. Christof Paar 的密码学导论 (我个人没有验证过这个。) 我听说过关于这个系列讲座的好评,并且认为它与 Boneh 的课程具有相似的价值。 所以,我也推荐它。
  3. Alfred Menezes 的密码学 101 再一次,我个人没有审查过这个,但是 Menezes 是一位优秀的教授和密码学家。 学习这些课程在我的个人待办事项清单上。

书籍

  1. David Wong 的 Real-World Cryptography 非常棒。 我已经读过了,完全赞同。
  2. 看看 lvh 的 Crypto 101。(虽然我个人没有验证过它,但我非常熟悉 lvh 的出色工作。)
  3. 获取 Jean-Philippe Aumasson 的 Serious Cryptography。 这是关于应用密码学的最好的书籍之一。
  4. (只是为了好玩)阅读 Singh 的 The Code Book。 我认为这不会帮助你成为一名密码学家,但它是有趣的该领域的历史,并且是对该主题的轻松介绍。 如果这里的其他内容太严肃,那么这可能是一个更温和的介绍,以帮助你为其余内容做好准备。
  5. (只是为了好玩)Fagone 的 The Woman Who Smashed Codes 是一本关于 Elizebeth Smith Friedman 的 引人入胜的 传记。 在许多方面,她是美国现代密码破译的创造者,并且为保护两次世界大战期间的盟友做了许多默默无闻的工作。

活动

  1. Cryptopals Crypto Challenges 这是第一个“动手”资源。 它会引导你构建和破坏许多标准的密码学算法。 它开始很容易,但在最后变得 非常困难。 即使你无法完成它,你也应该尽可能地走下去,并在你变得更好时不断地努力。
  2. CryptoHack 这与“CryptoPals”类似,但更新并且更时尚。 它看起来也很棒,但我只完成了其中的一部分。 我真正的抱怨是,它基本上要求你使用 Python 并处理网络编程。 虽然这些都不是很大的干扰,但我个人不喜欢 Python,并且喜欢能够离线工作。

其他阅读材料

  1. Soatok 的 How to Learn Cryptography as a Programmer
  2. 阅读你使用的库的源代码。
  3. 阅读 大量 规范。 你使用 AES-GCM? 阅读 NIST SP 800-38D 你使用 HMAC? 阅读 RFC #2104
  4. 阅读 The Stick-Figure Guide to AES
  5. 阅读 Latacora Blog(特别是“Right Answers”)
  6. 阅读我的 密码学陷阱 列表。
  7. 阅读 Thomas Ptacek 的 If You’re Typing the Letters A-E-S Into Your Code You’re Doing It Wrong

其他

  1. 寻找在比你更接近专业密码学领域工作的人,并请他们帮助你(请他们喝啤酒或选择的饮料)
  2. 查看你使用的库在 GitHub 上的公开问题,看看你是否可以做出贡献,或者至少理解它们
  3. 关注 IACR。(有两个好的 Bluesky 帐户:官方 @IACRCrypto非官方 @eprint.ing.bot,它跟踪(未经审查的)论文。)我还建议你阅读我的 如何阅读研究论文 页面,以帮助你处理这些论文。
  4. 看一下 密码学 subreddit wiki(当我在 2021 年 5 月查看时非常棒。) 我特别建议你查看“如何更多地参与其中”部分,因为成为社区的一部分是最有用的事情之一。 自从我成为密码学社区的一员(早在 2018 年初)以来,事情对我来说变得容易多了,我开始变得更好了。 这是因为当我遇到问题或试图弄清楚事情时, 我可以轻松地浏览我关注的人(甚至提出问题)来找到我需要的资源。
  5. 记住(并尝试关注)此列表中提到的任何公司/个人。
  6. 了解你的极限

贡献和许可

请参阅 主要文档的贡献和许可部分

  • 原文链接: github.com/SalusaSecondu...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
SalusaSecondus
SalusaSecondus
江湖只有他的大名,没有他的介绍。