一、密码学概述:从古典到量子,我们到底在保护什么?
各位同学好,我是这门课的主讲。在正式开始之前,我想先聊聊一个基础问题:密码学到底是什么?
说白了,密码学就是一门「藏」与「验」的艺术。藏,是把信息藏起来不让别人看懂;验,是确保信息没被篡改、确实是本人发的。我做了十几年安全架构,见过太多「以为加密了就万事大吉」的项目,结果往往在签名验签环节翻车。嗯,这节课我们就先把地基打牢。
1.1 密码学发展史:一场攻防博弈的进化论
密码学的发展,其实就是一部加密与破译的对抗史。我把它分成四个阶段,这样好记:
| 阶段 | 时期 | 代表算法 | 核心特点 |
|---|---|---|---|
| 古典密码 | 古代 – 19 世纪末 | 凯撒密码、维吉尼亚密码 | 基于字符替换或置换,依赖算法保密 |
| 近代密码 | 20 世纪初 – 1940 年代 | 恩尼格玛机 | 机械/电子设备辅助,密钥空间扩大 |
| 现代密码 | 1970 年代 – 至今 | DES、RSA、AES、ECC | 基于数学难题,算法公开,密钥保密 |
| 量子密码 | 21 世纪 – 未来 | 量子密钥分发 (QKD)、后量子密码 | 利用量子力学原理,理论上可证明安全 |
一个关键转折点:1976 年 Diffie 和 Hellman 发表了《密码学的新方向》,提出了公钥密码的概念。这彻底改变了密码学的面貌——以前加密和解密必须用同一个密钥,现在你可以把加密密钥公开,全世界都能给你发密文,只有你能解密。我在做金融系统时,这个特性简直是救星。
为什么会从古典走到量子?你想想看,古典密码的凯撒密码,就是把字母往后移三位。这在罗马时代够用,但到了计算机时代,穷举 26 种可能连一秒都不需要。所以密码学一直在「道高一尺,魔高一丈」地进化。
我记得有一次帮客户审计一个老旧系统,他们还在用自己魔改的古典密码——把字符串反转再 XOR 一个固定值。我当场就演示了如何用 5 行 Python 脚本破解。嗯,那个客户的脸都绿了。
1.2 密码学的四大核心目标
很多初学者以为密码学就是「加密」,其实远不止如此。我习惯用 CIA+N 来记:
- C - 机密性 (Confidentiality):确保信息不被未授权的人获取。加密是实现机密性的主要手段。
- I - 完整性 (Integrity):确保信息在传输或存储过程中没有被篡改。哈希函数、消息认证码 (MAC) 是常用工具。
- A - 可用性 (Availability):确保授权用户在需要时能够访问信息。这更多是系统层面的保障,但密码学中的密钥管理直接影响可用性——密钥丢了,数据就废了。
- N - 不可否认性 (Non-repudiation):确保发送方不能否认自己发送过某条消息。数字签名是实现不可否认性的核心机制。
我的经验之谈:在项目里,很多人只关注机密性,觉得「加密了就安全了」。我曾经遇到一个案例,某公司用 AES-256 加密了所有数据库字段,但没做完整性校验。结果攻击者通过篡改密文,把转账金额从 100 元改成了 100 万。加密保证了机密性,但没保证完整性。所以四大目标缺一不可。
1.3 密码学在现代互联网中的应用场景
密码学不是实验室里的理论,它就在你每天用的每一个互联网服务里。我列几个最常见的场景:
- HTTPS / TLS 协议:你访问任何 https 网站,背后都在进行证书验证、密钥协商、对称加密通信。这是密码学最广泛的应用。
- 数字签名与电子合同:你在网上签的电子合同,背后是 RSA 或 ECDSA 签名。我参与过某电子签章平台的设计,签名验签的流程必须严格遵循标准,否则法律上不认。
- 区块链与加密货币:比特币、以太坊的核心就是哈希函数和椭圆曲线签名。没有密码学,区块链就是个公开账本,谁都能伪造交易。
- 身份认证与单点登录:OAuth 2.0、JWT 令牌都依赖签名技术。你登录一个网站后,服务器给你发一个签名的 token,下次请求带上它,服务器验签通过就知道是你。
- 安全邮件与即时通讯:PGP 加密邮件、Signal 的端到端加密,都是密码学的实战案例。
避坑指南:我曾经见过一个团队自己实现了一套「签名算法」,把用户密码的 MD5 值当作签名。这完全不对!签名必须使用非对称密钥对,私钥签名、公钥验签。自己造轮子搞签名,十有八九会出安全问题。记住:永远不要自己实现密码学算法,用成熟的库。
1.4 本章知识体系总览
下面这张图,是我画的本课程知识体系框架。你可以把它当作一张地图,后面每学一章,都可以回来对照一下,看看自己走到了哪里。
这张图把密码学的发展脉络、核心目标和应用场景串在了一起。你会发现,现代密码的三个分支——对称加密、非对称加密、哈希函数——最终都是为了实现那四个核心目标。而所有的应用场景,都是这四个目标的具体落地。
我个人习惯在开始一个新项目时,先画这样一张图。它能帮你快速定位:当前要解决的问题,属于哪个分支?要达成哪个目标?用什么算法最合适?