第 1 课,共 4 课 · 9 分钟
对称加密、非对称加密与哈希
三种不同的密码学工具,各自保证三种不同的东西。把它们混为一谈,是虚假安全感最常见的来源。
人们常常说“它被加密了”,仿佛这就解决了一个安全问题。其实并没有,因为加密并不是单一的一件事。这一课讲的是几乎所有数字保护说法背后的三块基石:对称加密、非对称加密和哈希。它们各自保证不同的东西,而知道正在使用的是哪一种,才能真正弄清楚被保护的到底是什么。
对称加密:一把共享的密钥
Cloudflare 的学习中心对对称加密的描述很简洁:“只有一把密钥,所有通信方都用同一把(秘密的)密钥来加密和解密。”今天的标准范例是高级加密标准(AES),它取代了更早的数据加密标准(DES)——DES 因密钥长度太短而能被暴力破解。对称加密速度快,真正对你大部分数据进行打乱的正是它,不管是磁盘上的一个文件,还是通过 HTTPS 加载的一个网页的正文。它的核心难题在于分发:双方都需要同一把密钥,而在不让任何其他人看到的情况下把这把密钥传给对方,正是非对称加密要解决的问题。
非对称加密:成对工作的两把密钥
在非对称加密——也就是公钥加密——中,存在两把在数学上相互关联的密钥:据 Cloudflare 所说,“一把密钥用于加密,另一把不同的密钥用于解密。”加密密钥可以公开给任何人——因此叫“公钥”——而与之配对的解密密钥则保持私密。用公钥锁住的数据,只能用私钥解开。这正是让两个素未谋面的人能够通过一条公开网络就共享秘密达成一致的原理,而这恰恰是每一次 HTTPS 连接一开始发生的事情(下一课会详细讲解这个握手过程)。如今支撑它的常见算法是 RSA 和椭圆曲线密码学。
哈希:一枚指纹,不是一把锁
哈希函数和上面两者都不一样:它不锁住任何东西,也没有密钥能解开它。美国国家标准与技术研究院(NIST)把它定义为一种“把任意长度的比特串映射为固定长度比特串”的函数——通俗地说,它把任何文件或消息转换成一段简短、固定大小的指纹。NIST 规定了一个被认可的哈希函数必须具备的性质:必须在计算上不可行地找到能产生给定输出的输入(单向性),也必须在计算上不可行地找到能产生相同输出的两个不同输入(抗碰撞性)。这正是哈希能用来检查完整性——这个文件有没有被改动过?——并保护存储的密码的原因:一个服务可以拿一个密码去和存储的哈希值比对,而完全不需要保留真正的密码本身。像 MD5 和 SHA-1 这样更老的哈希函数,在面对有决心的攻击者时已不再被视为安全,这就是现代系统改用 SHA-2 或 SHA-3 系列的原因。
每一种工具实际保证的是什么
| 工具 | 它保证什么 | 它不保证什么 |
|---|---|---|
| 对称加密 | 只要共享密钥保持秘密,就能保证机密性 | 一开始就安全地交换这把密钥的方式 |
| 非对称加密 | 一种交换秘密的方式,以及验证身份的手段(参见下一课关于签名的内容) | 速度;对大量数据来说,它比对称加密慢得多 |
| 哈希 | 完整性:证明数据未被篡改,以及一种无需存储秘密本身就能核对秘密的方式 | 机密性;哈希在设计上不可逆,但它在设计上也不隐藏数据的大小或存在与否 |
它们在实践中如何组合
几乎没有什么系统只用到这三者中的一种。一次典型的安全连接会短暂地使用非对称加密来就一个共享秘密达成一致,然后转为速度更快的对称加密来处理实际数据,而哈希则贯穿全程,确保所发送的内容在途中没有被改动过。认识到这三种角色,能让本课程接下来的内容——签名、证书、TLS 和端到端加密——被理解为同一小组工具的不同组合,而不是各自独立的魔法。
要点
- 对称加密用同一把共享密钥来加密和解密;速度快,但需要一种安全共享这把密钥的方式。
- 非对称加密使用一对公钥和私钥,解决了对称加密所面临的密钥分发难题。
- 哈希会生成数据的一枚固定大小的指纹;它保护的是完整性和存储的秘密,而不是机密性——没有密钥能解开一枚哈希值。
- 现实系统会把三者结合起来:用非对称加密来就一个秘密达成一致,用对称加密保证速度,用哈希来发现篡改。
- 更老的算法(DES、MD5、SHA-1)存在已知弱点;AES 和 SHA-2/SHA-3 系列是当前的标准。
自我检测
1. 对称加密的定义性特征是什么?
- 它使用一把公钥和一把私钥
- 它使用同一把共享密钥来加密和解密 — 正确。
- 它不能用于处理大量数据
- 它完全不需要密钥
对称加密依赖于双方早已持有的同一把共享密钥;挑战在于如何安全地分发这把密钥。
2. 非对称加密解决了对称加密自身无法解决的哪个问题?
- 让加密变得更快
- 让两方在从未见过面的情况下就一个共享秘密达成一致 — 正确。
- 让密码更容易记住
- 防止数据被永久删除
公钥密码学让公钥可以被公开分享,而只有与之配对的私钥才能解密,从而实现了通过公开网络进行安全密钥交换。
3. 为什么哈希函数不能用来为一条消息保密?
- 哈希值的长度总是不足以容纳一条消息
- 哈希在设计上是单向的;没有密钥能把它还原回原始数据 — 正确。
- 把哈希函数用于加密是违法的
- 哈希只能用于图像,不能用于文本
哈希函数的设计使得从输出反推出原始输入在计算上不可行——正是这种性质(单向性)让它们适合用于完整性检查和密码存储,而不适合用于保密。
4. 哪一组算法因为已知的弱点而被认为已经过时?
- AES 和 RSA
- DES 和 MD5 — 正确。
- SHA-2 和椭圆曲线密码学
- TLS 和 HTTPS
DES 的密钥长度太短,MD5 存在抗碰撞方面的弱点,这意味着现代系统改用 AES 以及 SHA-2/SHA-3 系列。
用 FireAI 动手做
在你自己的 Mac 上练习这节课的内容。
来源
- Cloudflare Learning Center: What is encryption?
- NIST Computer Security Resource Center Glossary: hash function
在你的 Mac 上实践
免费试用全部功能 17 天,无需绑定银行卡。