本文为想要学习密码学的人提供了一个资源列表和学习指南,内容涵盖了密码学学习的各个方面,从课程、书籍到实践活动,以及其他阅读材料和建议。作者鼓励读者深入学习,并强调了安全的重要性,同时还给出了社区参与的建议。
这并不是一个真正公平的标题,因为这不会教你如何成为一名密码学家, 但我小时候最喜欢的游戏之一是 Quest for Glory: So You Want to be a Hero 我实在不想错过这个致敬它的机会。 一个更好的标题应该是 "那么,你想开始设计和编写密码学代码,并大致了解更广泛的密码学社区正在发生的事情吗?", 但这说起来不太顺口,不是吗?
由于某些原因,你决定需要学习更多密码学知识。 也许是个人兴趣,或者你的工作正在转变。 我真的不知道。 然而,令人惊讶的是,很多人问我“我该如何开始?”,(或者更常见的是“你是如何开始的?”的变体), 所以与其每次都为每个人整理我的笔记,我不如在这里 一次性 以一种易于分享和更新的格式写下来。
与主要的 密码学陷阱 类似,这是一个个人项目,绝对是非正式的。 我没有其他“正式”资格,只有自 2006 年以来,我一直在以某种形式从事这方面的工作(并从 2012 年左右开始关注它)。
这并不是一种搞门户之见的行为。 任何人都可以学习这些,我真的认为更多的开发人员应该了解更多关于密码学的知识。 然而,我的一个人生目标是开发人员 不需要 了解密码学(或者主要的密码学陷阱列表中的 任何内容), 他们需要这样做是对现有工具和库的一种控诉。
那么我为什么要阻止呢? 这些知识可能很危险。
正如我通常不鼓励人们学习开锁(如果你想学习可以看看 Toool) 或业余烟火技术(抱歉,这里没有有用的链接)一样, 学习刚刚好能让自己陷入困境的密码学知识真的很容易。 如果你对开锁一无所知,你不太可能会说“嗯,我想知道我是否可以打开这把随机的锁?” 如果你只知道一点点,你可能会说“啊哈,我认出这把锁了,我可以打开它!” 一旦你了解了更多,你可能会说“我可以打开那把锁,但如果它坏了,我就被困在我的公寓外面了,而且这把锁在技术上也不属于我,而且我住的地方即使这样做也是违法的……” 同样,在密码学中,很容易学习到足够多的知识来组装一些 看起来 不错但却存在灾难性缺陷的密码学代码。 (当我审查密码学代码时,我喜欢阅读关于为什么“即使它看起来很危险,这样做也是安全的”的注释。 这些注释几乎总是错误的,并且准确地突出了如何破坏系统。 问题在于,作者掌握了足够的知识来提出论点,但不足以了解为什么它仍然不安全。) 另请参阅 Schneier 定律,即“任何人……都可以创建一种他自己无法破解的算法。” 此外,你会犯错误,其中一些错误很重要,会伤害到他人。 尽管你尽了最大努力,但这仍然会发生。 你能接受吗?
因此,如果你真的想擅长这件事(而不仅仅是出于兴趣学习),你需要投入大量的时间。 你确定这值得吗? 是否有更好利用你时间的方法? 密码学很少是你项目中最有价值的技能,而且还有更多有意义的爱好。 (我应该花更多时间练习乐器或骑自行车。)
然而,说了这么多,如果你仍然想学习这些,我希望这能有所帮助。
这不是一门课程,也不旨在真正教会你任何东西。 (我正在 编写一个术语表,这会有所帮助,但谁知道什么时候会完成。) 相反,它的目的是成为一个资源列表和一个跳板,让你从真正了解他们在做什么并且能够真正教你的人那里学习。
如果你阅读了本列表中 所有 (甚至大部分)内容,你将比世界上绝大多数安全专家更了解密码学。 然而,你仍然不会成为密码学家。 你可能会发现并纠正许多密码学错误,甚至编写一些简单的 高级 密码学代码, 但你绝对不应该实现任何原语。 你绝对不应该开始定义新的设计或独自完成任何工作。 (我不在乎你有多优秀或你是什么人,密码学永远不是一项可以单独完成的任务。)
请参阅 主要文档的贡献和许可部分。
- 原文链接: github.com/SalusaSecondu...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!