🛡️ 第五章 什么是密码、数字签名、数字证书
📄 一句话概括

共享密钥加密(对称加密)快得几乎不要钱,代价是【解密的那把钥匙和加密的那把是同一把】——于是它所有的麻烦都不在数学上,而在【这把唯一的钥匙怎么送到对方手里、怎么不被重复使用、人多时怎么不爆炸】。

📝 本节和前面几节的关系

5-1 定下了"算法公开、只守密钥"这条原则,这一节开始看第一条真的能用的技术路线。

它在课程里的位置也很清楚:2-15 讲无线局域网是怎么加密的,那里面的 WPA2 用的就是这一节的对称加密;3-7 里勒索软件锁死你的文件,用的也是同一套——同一个工具,防守方和攻击方都在用。

一、为什么它快:同一把钥匙,同一条流水线

共享密钥加密(也称对称加密)的机制非常直白:

所以它的速度只取决于"CPU 每秒能做多少次这样的运算",跟数据内容无关——这就是它快的原因。今天主流 CPU 里甚至有专门为 AES 准备的硬件指令,一次能做完整的一轮运算。

对比一下就明白差距有多大:本章 5-3 要讲的公开密钥加密,一次运算要做几千次大数乘法,比对称加密慢三个数量级。这个速度差就是后来【混合加密】出现的唯一理由。

二、命门一:密钥空间有多大,就能撑多久

对称加密的强度完全由密钥长度决定——因为攻击者能做的只有一件事:把密钥试一遍。假设对手有一台每秒能试 10^12 个密钥的专用硬件,各长度分别能撑多久,Demo 里有完整的表。

记忆点在这里:DES 的 56 位在 1998 年就被专用硬件三天攻破——不是算法有洞,纯粹是钥匙太短。而 AES-256 的 2^255 次尝试,在宇宙年龄内都做不完。

三、命门二、三:分发问题与数量爆炸

对称加密真正的麻烦不是算得慢,而是这两条(下一节整节都在讲第一条):

这一节先把这两个麻烦摆出来,是因为它们直接推导出了下一节的全部内容:公开密钥加密存在的意义,就是把这两个麻烦同时消掉。

四、动手 Demo:密钥空间,和一次"跟算法无关"的破解

# 一次性密码本:密钥和明文一样长,只使用一次
m1 = b"ATTACK AT DAWN"
m2 = b"DEFEND AT DUSK"
kx = b"KEYKEYKEYKEYKE"          # 两段明文共用了同一把密钥(错误做法)
c1 = bytes(a ^ b for a, b in zip(m1, kx))
c2 = bytes(a ^ b for a, b in zip(m2, kx))
x  = bytes(a ^ b for a, b in zip(c1, c2))   # 密钥在这一步被完全消掉

实跑输出:

一、密钥空间决定硬闯要多久(假设对手有每秒试 10^12 个密钥的专用硬件)
  密钥长度    举例                    平均要试      平均耗时
  56 位       DES(1977 年标准)      2^55          10.0 小时
  64 位       早期对称密码            2^63          106.8 天
  80 位       已不推荐                2^79          1.92 万年
  112 位      3DES 的有效强度         2^111         82.27 万亿年
  128 位      AES-128                 2^127         5.39e+18 年
  256 位      AES-256                 2^255         1.83e+57 年
  → 56 位只有 2^56 种,平均试一半就中——这就是 DES 倒下的根本原因:
     1997 年分布式互联网 5 个月、1998 年 EFF 的 Deep Crack 56 小时、
     1999 年两者合起来 22 小时 15 分。算法没错,是钥匙太短。

二、换长钥匙能不能一直加下去:能,但对称密码有个定理级的回答
  一次性密码本(密钥和明文一样长、只使用一次)在数学上不可破解——
  但【和明文一样长的密钥怎么安全送到对方手里】又绕回了分发问题。

三、密钥绝不能重复使用:一次 XOR 演示
  明文 1      ATTACK AT DAWN
  明文 2      DEFEND AT DUSK
  同一把密钥  KEYKEYKEYKEYKE
  密文 1      0a110d0a06126b040d6b01181c0b
  密文 2      0f001f0e0b1d6b040d6b010c180e
  把两段密文 XOR:051112040d0f0000000000140405
  → 密钥被完全消掉了:密文 1 XOR 密文 2 = 明文 1 XOR 明文 2
     只要我猜到其中一段明文(这里猜到是 ATTACK AT DAWN),
     另一段立刻还原:DEFEND AT DUSK
  → 结论:钥匙再好,重复使用就全废。这就是【一次一密】的由来。

四、DES 之后的路线:3DES 已经退场,AES 是当前答案
  算法            状况                  说明
  DES             已禁用                56 位,1998 年被短时间攻破
  3DES            已禁用                Sweet32 攻击;NIST 规定 2023 年底后停用
  AES-128/192/256 当前标准              2001 年 FIPS 197;有 CPU 硬件指令加速

五、量子计算机来了,对称密码只被【减半】,不会被击穿
  Shor 算法打的是 RSA/ECC(靠分解与离散对数);对 AES 这类对称密码
  只有 Grover 算法,效果是平方根级别的加速,也就是有效强度减半:
  原始强度      量子下等效    判断
  AES-128       64 位         不够,要换
  AES-256       128 位        够用,仍是安全区
  → 所以 2026 年面对量子威胁的做法不是换掉 AES,
     而是【把长期要保密的数据从 AES-128 换成 AES-256】——一次配置改动。

读这个输出:

五、⚠️ 2026 现状

30 秒实验

今天做两个动作,各 15 秒:

  1. 在命令行里查一下你电脑的 CPU 支不支持 AES 硬件加速(Linux 下 grep -o aes /proc/cpuinfo | head -1,Windows 下用 Get-CimInstance Win32_Processor | Select Name 看型号再查规格);查不到也没关系,只要记住一句话:对称加密今天的瓶颈通常不在 CPU,而在网络和磁盘。
  2. 拿两个数字感受一下"指数级":56 位和 64 位只差 8 位,但破解时间从 10 小时变成 107 天(差约 256 倍);128 位对比 256 位,差 128 位,破解时间差的就是 2 的 128 次方倍。这个"每加一位翻一倍"的直觉,是后面理解所有密钥长度选择的基础。

这一节要带走的一句是:共享密钥加密是密码学里最锋利的那把刀,但它只有一把钥匙——所以它所有的麻烦,都发生在"钥匙怎么送、怎么换"这两个动作上,而不在算法里。

常见误区

  1. 错误:共享密钥加密和"共享密码"是一回事,都属于已经被淘汰的老办法。——纠正:这两件事完全无关,而且共享密钥加密今天仍是最主流的加密方式。你自己电脑上的硬盘加密、Wi-Fi 加密、以及每一次 HTTPS 连接里的实际数据传输,用的都是对称加密(5-7 会讲这个分工)。被淘汰的只是"用同一把密钥太多年、太短、还重复用"这种做法——不是这种技术本身。

  2. 错误:既然 256 位更安全,那所有场景都应该用 AES-256。——纠正:要看数据需要保密多久、以及算力和带宽的成本。"保密期短的用 128、保密期长的用 256"是个务实的经验法则。更关键的是:在真实系统里,把 AES-128 换成 AES-256 常常不是瓶颈,把密钥生成、分发、轮换的流程做对才是。别把注意力放在一个不是短板的地方——这也是本章反复要绕回来的那个主题:密码学的失败很少发生在算法上。

  3. 错误:一次性密码本在数学上不可破解,那就该用它。——纠正:理论安全不等于工程可用,它有两个致命前提:① 密钥必须和明文一样长——你要发 1 GB 的文件,就得先安全送出 1 GB 的密钥("怎么送"又回到了分发问题);② 密钥只能用一次,重复使用就会像 Demo 里那样瞬间崩塌。这两条叠加起来,意味着它只在极少数极端场景(比如元首级热线的密钥由专人递送)才可行。所以它今天是一个"理论上的上限",不是"工程上的方案"——这也正好说明为什么现代对称加密的目标是"用一把短密钥,逼近一次性密码本的安全性"。

  4. 错误:只要用了 AES,数据就是安全的。——纠正:AES 只是一个"加密原语",它在真实系统里的安全性取决于周围那一圈工程细节。三个最典型的翻车点:① 密钥怎么产生(如果从口令直接派生、不加盐、不迭代,口令猜出来一切就完了);② 分组模式选得对不对(老式的 ECB 模式会把相同明文块加密成相同密文块,图案会直接漏出来);③ 密钥怎么保管(写死在代码或配置文件里,等于把钥匙贴在门上)。下面几节会依次解决其中的一部分:5-5 讲哈希与完整性,5-7 讲密钥怎么在会话里现生成。

自测三问(点开对答案) 1. 为什么说对称加密的麻烦"不在数学上"? —— **因为它用的是一把钥匙,加密和解密都要有这把钥匙**。**算法本身是公开的、数学上已经被反复验证过的(AES 用了二十多年)**,所以**"这把钥匙怎么从 A 手里安全地到 B 手里"就成了唯一的难题**。**更麻烦的是这个难题有自指的味道**:要安全地送一把密钥,好像就得先有一条安全的通道——**而那条通道本身又需要密钥**(这就是 5-3 要解开的死结)。**所以对称加密的全部工程复杂度,都集中在密钥的分发、生成、轮换与保管上**,这也是为什么本节 Demo 用一整段演示"密钥重复使用会怎样",而不是演示"算法怎么算"。 2. 56 位和 64 位只差 8 位,为什么破解时间差了 256 倍? —— 因为**密钥空间是按位数指数增长的**:**56 位有 2^56 种密钥,64 位有 2^64 种,两者相差 2^8 = 256 倍**。**攻击者平均只需要试一半**,所以平均耗时也按 256 倍的比例拉开(10 小时对 107 天)。**这个"每加一位翻一倍"的规律是密钥长度选择的全部依据**——**它同时解释了为什么加密强度不能靠"把算法搞复杂一点"来提升,只能靠"把密钥加长"**。**也解释了为什么"撞库"这种事在密码上有效**:如果密码空间只有几百万种,指数增长这件事就帮不上忙了。 3. 量子计算机来了,为什么要换 RSA 却不换 AES? —— **因为两者被攻击的数学基础不同**。**RSA 和椭圆曲线依赖"大数分解"与"离散对数"这两个难题,Shor 算法能直接高效地解掉它们**——**这是"击穿",方案本身失效,必须换成不依赖这类问题的算法**(后量子标准 ML-KEM 等)。**而 AES 依赖的是"没有已知的数学捷径,只能穷举"**,**量子世界能做的只有 Grover 算法:把穷举的尝试次数从 N 降到约根号 N**,**也就是把有效强度减半**。**减半的后果可以靠"把钥匙加长一倍"补回来**——**AES-256 在量子下等效 128 位,仍然安全**。**所以面对量子威胁,对称加密只需要改配置,公开密钥加密才需要换算法。**

相关笔记