我们所有开发者都忽略了一些密码学概念。但我们本应该了解的。
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
在讲述背后的故事之前,让我先直奔主题。
开源社区的人们都知道我的名字是——vkweb。
我创建了一个免费开源的课程,旨在向开发者讲授密码学概念。这门课程专为满足开发者的需求而设计,只包含开发者需要理解的内容。基本上,任何白天(或晚上)打开终端的人都能从中受益。
🟢它以“好奇的密码学”的名称上线。
现在让我们来了解一下背后的故事。课程内容在最后。
这一切始于我刚开始学习编程的时候,当时我还是个编程新手,正在参加哈佛大学的在线课程CS50x。我在网上阅读文档时,接触到了各种密码学术语。
诸如此类的术语 salt, password hashing, PBKDF-2, key pairs。和大多数开发者一样,我也没有太在意它们,只是在谷歌上简单浏览了一下,然后就继续修复下一个最重要的错误或编写下一个功能。
一段时间过去了。我正在学习 CS50x。我看到一条推文,也可能是一篇博客文章,记不太清了,但肯定是freeCodeCamp.org 的创始人Quincy Larson发的。他告诉开源社区,他们决定改进全栈课程。
昆西鼓励开源社区参与新课程的构建。我想,看看我能帮上什么忙。我浏览了他们的 CurriculumExpansion GitHub 代码库中的问题,找到了一个我想深入研究的问题。
这个问题是关于如何向freeCodeCamp的学员讲解密码学概念。我决定接受挑战。于是,我首先深入研究了RSA公钥算法的内部工作原理。在那段时间里,可汗学院的视频和文章成了我的得力助手。
我与Kristofer Koishigawa合作,创建了一个包含课程内容的 pull request。在本课程中,freeCodeCamp 的学员将通过编写自己的公钥 RSA 算法来构建数字签名系统。在构建过程中,他们将学习相关知识encryption, hashing, public keys, private keys。
友情提示:切勿自行编写用于生产环境的加密算法。此处的 RSA 实现仅用于教学目的。好了,我们继续。
我们今天在这里。然而,四五年过去了,那门课程始终没有上线。我不知道原因。现在回想起来,我意识到,那门课程的教学方式并不合适。
最近我抽出了一些空闲时间来做自己的项目。我决定为开发者们开发一门全新的密码学课程。
这次我想认真做好。我们之前在freeCodeCamp上做的课程对开发者来说用处不大。
我们开发者不需要也不应该去处理算法内部的数学细节。那是密码学专家的工作,完全是另一个领域。我们开发者应该对相关概念有足够的了解,明白自己在做什么以及为什么这样做。
这样我们开发者就不会像下面这位 xkcd 漫画家(漫画人物的名字叫 cueball)那样了。
我开始着手制作这门新课程。我收集了一些对开发者来说很重要的概念。我只想涵盖开发者在日常开发工作中可能会遇到的那些概念。
此外,我希望这门课程具有互动性、趣味性和深度。因此,我搭建了自己的课程网站,其中包含编程挑战和有趣的图表。
让我先概述一下课程将涵盖的概念。这样您就可以判断是否值得花时间学习这门课程,或者直接跳过它。完成这门课程大约需要1.5小时,课程分为6个部分。
1. 对称密钥加密
我们的课程从密码学的起源讲起,讲述了古代帝王为了与军队指挥官沟通而不被敌人破解而进行的必要操作。我们将探讨密码学中最基本的原理之一—— 柯尔霍夫原理。我们将帮助您理解为什么密钥的高度多样性是加密安全性的核心。
2. 密码挑战:凯撒密码
这是一个编程挑战,你需要完成一个decrypt函数,使其ciphertext能够以预期的方式进行转换plaintext。你将了解代码中最著名的加密技术—— 凯撒密码!
3. 加密哈希函数
我们先讨论哈希表中常用的哈希函数,然后介绍加密哈希函数。我们将理解为什么加密哈希函数必须避免哈希冲突。我们会举两个例子来说明哈希冲突可能带来的危险——Ubuntu 软件包完整性检查和 Git 提交。
4. 密码哈希
事情只会变得更有趣。我们给你出一个问题。假设你有一个包含数千名用户的宝贵数据库,你会如何存储密码,才能确保即使攻击者攻破了数据库,用户的密码也不会泄露?另外,为什么加密密码并不是正确的方法?
5. 彩虹桌和盐
我们明白了为什么仅仅对密码进行哈希处理是远远不够的。攻击者开始使用一种名为彩虹表的强大数据结构,在几秒钟内就能破解密码。接下来,我们将看到盐值是如何发挥作用来保护我们免受这种攻击的!
6. PBKDF-2:减速
我们面临的最后一种攻击是基于GPU的攻击。GPU拥有数千个核心,可以并行运行数十亿个任务,是密码破解者的强大工具。
我们将学习PBKDF-2(基于密码的密钥派生函数),以及它如何帮助防御基于 GPU 的攻击。我们还将了解 Django 如何在内部使用 PBKDF-2 来保护密码。
恭喜兄弟🎉!课程上半部分就完成了!
课程的后半部分预计将围绕 Diffie-Hellman 密钥交换、RSA 公钥加密和 TLS 展开。
在制作下半部分之前,我决定先发布上半部分,以便获得开发者的反馈,看看上半部分是否有任何价值。
如果很多开发者能从中真正受益,我就会努力完善后半部分。所有内容将永远免费,这是我的承诺。
我会在我的推特上发布最新消息。欢迎关注我,我发推不多,但会尽量提供有用的信息。
如果您觉得这门课程有价值,请在下方评论区或我的推特私信中告诉我,这将激励我继续学习这门课程!
我将等待您的评论和反馈!
感谢你读完这篇文章,你真是太棒了!<3
-- vkweb
文章来源:https://dev.to/vkweb/cryptography-concepts-that-we-all-developers-missed-but-we-should-have-known-1712
