🌐 第七章 网络安全技术
📄 一句话概括

共享密钥加密就是 7.2 说的"对称密钥"路线的正名与深挖:加密和解密共用同一把密钥——双方提前用安全渠道(当面、U 盘、电话)把钥匙共享好,之后密文随便公开走,没钥匙就是天书。它快(AES 快到能加密整条 Wi-Fi 信道),所以扛起了全世界的大数据量加密;但它有两个先天难题:第一把钥匙怎么安全交出去(先有鸡还是先有蛋),以及n 个人两两通话要 n(n-1)/2 把钥匙(1000 人公司 = 499500 把)。安全性由密钥空间决定:凯撒密码只有 25 种、几秒破光;DES 的 56 位在 1998 年被数天穷举;AES-128 的 2^128 用全宇宙算力也算不完——钥匙长度每多 1 位,穷举成本翻一倍。这个解药(公开密钥加密)留给下一节。

📝 本节和前面几节的关系

7.2 把加密的两条路线并排摆了出来(对称 vs 公开),本节专门把左半边放大细看——教材用"共享密钥加密方式"这个名字,强调的就是"一把钥匙,提前共享"这个动作。

手里已有的老账全都能对上:5.21 WPA2 的 AES-CCMP 是"共享密钥逐帧加密"的样板(那把共享钥匙就是 Wi-Fi 密码亲手配出来的);Demo90 的 7-Zip 密码压缩包是你已经做过的共享密钥加密(一个密码,加解密都用它);7.2 埋下的两个钩子——"密钥分发难题"和"密钥长度"——本节正式展开。看完本节你会发现:7.1 的口令、5.21 的 Wi-Fi 密码、7-Zip 的压缩密码、本节的共享密钥,本质都是"同一份秘密,双方各持一份"——共享密钥思想你其实从第一天就在用了。

一、工作原理:一把钥匙、双方各持一份(第一张配图)

共享密钥加密的完整生命周期只有三步:

步骤 做什么 关键约束
① 提前共享钥匙 用安全渠道让双方都拿到同一把钥匙:当面口述、U 盘拷贝、写纸上递过去 这条渠道不能是要加密的那条网络路——明文在网上发钥匙=白干
② 用钥匙通信 发送方加密 → 密文公开走 → 接收方用同一把钥匙解密 密文随便被抄;窃听者没有钥匙只能拿到乱码
③ 钥匙的日常管理 生成、分发、更换、销毁 谁持有、多久换一次、作废怎么清干净

第②步是它的强项(快),第①③步是它的软肋(见第六节)。先记住这幅全景图,剩下的内容全是围绕"钥匙"两个字展开的。

二、从凯撒密码开始:算法和钥匙是两回事

共享密钥加密最古老的祖师爷是两千年前凯撒用的移位密码:

规则(算法):每个字母沿字母表向后挪 k 位
钥匙(密钥):k = 3
明文:  H  E  L  L  O
密文:  K  H  O  O  R      (H→K,E→H,L→O,O→R)

它麻雀虽小五脏俱全,正好把 7.2 的四角色演活:

📌 一句话抓住共享密钥的本质:算法是公开的锁具设计,密钥是那把只有你们俩有的钥匙。

三、密钥空间:为什么钥匙越长越难猜(第二张配图)

凯撒密码输在哪?钥匙太少了——字母表只有 26 个字母,k 除去 0 最多 25 种。攻击者不分析任何数学,挨个试一遍(穷举)最多 25 次就破。

于是引出本节最重要的概念——密钥空间(keyspace):

密钥空间 = 这套加密下,钥匙所有可能取值的总数。穷举破解 = 把密钥空间挨个试一遍。

而钥匙通常用二进制位数衡量,密钥空间就是 2 的 n 次方:

加密方式 密钥长度 密钥空间 穷举的现实结果
凯撒密码 ~5 位 25 种 几秒,肉眼可破
DES 56 位 ≈ 7.2 亿亿(2^56) 1998 年被专用机数天穷举 → 退役
AES-128 128 位 ≈ 3.4 × 10^38(2^128) 用全球算力试到宇宙热寂也算不完 → 现行标准

关键规律:

密钥空间每多 1 位,穷举时间翻一倍。 56 位到 128 位,难度不是"翻一倍多",而是翻了 2^72 倍——这就是"钥匙长度=穷举成本"的真正含义。

📌 顺带修正一个直觉:AES 没有 512 位版,因为 256 位已经"物理上不可能穷举",再长只是浪费电——安全瓶颈从来不在钥匙长度,而在钥匙管理(第六节)。

四、现代共享密钥加密:DES → 3DES → AES

三代算法就是一部"穷举军备竞赛史":

算法 出生 密钥长度 现状与死因
DES 1977(美国标准) 56 位 已退役:1998 年被专用穷举机数天破解——密钥空间被算力追上了
3DES 1990s 112~168 位 过渡方案:把 DES 跑三遍凑长度;太慢,已步入淘汰
AES 2001(全球公开招标) 128 / 192 / 256 位 现行标准:全球密码学家公开竞选出来的,手机 CPU 有硬件加速;WPA2、HTTPS、磁盘加密、7-Zip 用的全是它

AES 的出身就是柯克霍夫原则的现场直播:2001 年全球公开征集、各家方案互相攻击、最终比利时的 Rijndael 胜出——公开比武活下来的,才敢把全世界的银行押在它身上。

再补一块 7.2 留的拼图——同一个明文每次加密,密文为什么不一样? 现代共享密钥加密在干活时还会混入一个随机数(IV/nonce),让"同样的明文+同样的密钥"每次产出不同密文,专治攻击者"对照分析"(比如著名的 ECB 模式:同样的明文块永远加密成同样的密文块,加密一张企鹅图,轮廓能从密文里直接看出来——所以 ECB 严禁单独使用;真正在用的是 CBC、GCM 这类带随机数的模式)。这一条你已经在 7.2 的误区里见过结论了,这里是原理。

五、典型应用:共享密钥在哪些岗位上

场景 共享密钥是什么 备注
Wi-Fi(WPA2-个人) 你在路由器里设的那个密码 全家共享一把(5.21 的 PSK);AES-CCMP 逐帧加密
7-Zip 压缩包 你设的压缩密码 Demo90 亲手做过,AES-256
手机/电脑磁盘加密 开机密钥派生出的密钥 整机 AES,丢机不丢数据
VPN(IPsec) 双方协商的会话密钥 公司异地组网的加密管道
HTTPS 的"数据阶段" 握手协商出的会话密钥 注意:只有"送钥匙"用公钥,干活的是它(7.2 的混合加密)

看清楚这张表会发现一个规律:共享密钥加密无处不在,但"第一把钥匙怎么来的"全都被刻意藏起来了——要么人肉配(Wi-Fi 密码)、要么公钥帮忙送(HTTPS)。这正是它唯一的软肋所在。

六、两大先天难题与钥匙的日常管理

图一右下角那块红,展开说:

难题一:首次分发(先有鸡还是先有蛋)

要加密通信,先得共享钥匙;可共享钥匙本身就需要一条安全的通信路——而安全路还没建起来。目前的笨办法全是"带外":当面说、U 盘寄、电话里念(Wi-Fi 密码就是你妈喊你"密码在路由器贴纸上"完成的分发)。优雅的办法要等下一节的公开密钥加密。

难题二:数量爆炸(n 个人两两通话)

n 个人要保证任意两人通信都加密,每对需要一把独立钥匙:

人数 需要的钥匙数
5 人 10 把
100 人 4 950 把
1000 人 499 500 把

每人还得记住 n-1 把、知道哪句话用哪把——人数一大,管理成本先于安全性崩盘。

钥匙的日常:生命周期四件事

环节 要做什么 做砸了的后果
生成 用真随机来源,别用生日、12345678 弱密钥=密钥空间看着大、实际只有几百种
分发 走安全渠道(带外 / 下一节的公钥) 明文发=直接送给窃听者
更换 定期换;会话密钥用完即弃(7.2) 一把钥匙用十年,被分析的材料越攒越多
销毁 离职/换钥匙时清干净所有副本 删不干净的旧钥匙=后门一直开着

📌 和 7.1 口令、7.2 钥匙管理那句结论完全一致:共享密钥体系被攻破,几乎从来不是数学被破了,而是钥匙在"人"这一环漏了。

七、动手 Demo(Demo91)

目标:亲手玩一把"算法与密钥分离",亲手穷举一次密钥空间,把"钥匙长度=穷举成本"变成体感。

A. 纸笔玩凯撒密码(5 分钟)

  1. 拿一段英文(如 MEET AT NOON),用钥匙 k=3 加密:每个字母后挪 3 位 → PHHW DW QRRQ;
  2. 把密文发给同伴(或换个窗口存着),让他用 k=3 反向挪回来解密;
  3. 看到什么算成功:没钥匙的人看密文是一串乱码;知道 k=3 的人 10 秒还原。

B. 30 秒穷举:亲手把 26 把钥匙试一遍

打开 PowerShell(开始菜单搜 powershell),把下面两行整段粘贴进去回车(把 PHHW DW QRRQ 换成你自己的密文):

$c = "PHHW DW QRRQ"
0..25 | ForEach-Object { $k = $_; ($c.ToCharArray() | ForEach-Object { if ($_ -match '[A-Z]') { [char]((([int][char]$_ - 65 + $k) % 26 + 65)) } else { $_ } }) -join '' }

屏幕会一次吐出 26 行——全部 26 种"钥匙"的解密结果,肉眼扫一眼,哪行是英文哪行就是答案(其中一行应是 MEET AT NOON)。

看到什么算成功:你刚亲眼完成了对"5 位密钥"的全空间穷举——不到一秒。现在想象密钥空间是 2^56、2^128,就能体会 DES 为什么死、AES 为什么稳。

C. 看 7-Zip 的钥匙长度选项(呼应 Demo90)

7-Zip 添加压缩包时的加密算法固定显示 AES-256——256 位密钥,密钥空间 2^256。对比 B 里你秒破的 25 种:这就是从"5 位"到"256 位"的差距(2^256 比可观测宇宙的原子总数还多)。

D. 30 秒实验:换钥匙,密文面目全非

用 A 的同一句 MEET AT NOON,换钥匙 k=17 再加密一次:得到的密文与 k=3 的版本毫无相似之处。算法一个字没变,只换了钥匙——共享密钥体系"钥匙天天换、算法定终身"的日常,就是这个动作。

E. 反直觉小测

问自己:"把 AES 密钥从 128 位加长到 256 位,安全性提升最大的场景是哪个?"

答案是:几乎没有场景显著受益——2^128 已不可穷举,真正的短板在钥匙管理(弱密钥、泄露、不更换)。对照第六节的表格自检一遍,你会发现"人"的四个环节每一个都比长度更容易出事。

八、常见误区

九、动手自测

点开自测(先自己答,再展开) 1. 共享密钥加密的定义是什么?"共享"两个字指的是什么动作? 2. 三步生命周期里,为什么第一步的安全渠道"不能是要加密的那条网络路"? 3. 凯撒密码怎么体现"算法与密钥分离"?换钥匙时什么变了、什么没变? 4. 什么是密钥空间?穷举破解和它是什么关系? 5. 为什么说"密钥空间每多 1 位,穷举时间翻一倍"?从 56 位到 128 位总共翻了多少倍? 6. DES 是怎么死的?它给"密钥长度"什么启示? 7. AES 是怎么选出来的?这体现了 7.2 的哪条原则? 8. 同一个文件每次加密密文都不同,是 bug 还是特性?靠什么机制实现? 9. n 个人两两加密通话需要多少把钥匙?这个难题叫什么? 10. 钥匙生命周期四环节是什么?各举一个"做砸了"的例子。 11. WPA2-个人、7-Zip、HTTPS 数据阶段,各自用的共享密钥从哪来? 12. 为什么说"共享密钥体系被攻破几乎都是钥匙在人这环漏了"?结合 7.1 的口令说说共同点。

答案:① 加解密共用同一把密钥;"共享"指双方提前通过安全渠道各持一份同一把钥匙。② 因为安全路还没建起来——在这条网络路上明文发钥匙,等于当着窃听者面交钥匙,加密形同虚设,所以必须"带外"(当面/U 盘/电话)。③ 算法="每字母后挪 k 位"公开不变;密钥=k 保密可换;换钥匙只改 k,规则一个字不动。④ 钥匙所有可能取值的总数;穷举=把密钥空间挨个试一遍,空间越大穷举成本越高。⑤ 二进制钥匙每加 1 位,取值多一倍;从 56 到 128 共加了 72 位,难度翻 2^72 倍。⑥ 56 位密钥空间(2^56)被 1998 年的专用穷举机数天试遍——启示是"密钥长度必须追着算力跑,今天的长度不保证十年后安全"。⑦ 2001 年全球公开征集、互相攻击、Rijndael 胜出;体现柯克霍夫原则——公开检验出来的算法才可信。⑧ 特性;靠混入随机 IV/nonce,让"同明文同钥"每次产出不同密文,专治对照分析(ECB 的企鹅图就是反例)。⑨ n(n-1)/2 把;密钥分发/管理难题(数量爆炸)。⑩ 生成(用生日→弱密钥)、分发(网上明文发→被窃听)、更换(十年不换→被积累分析)、销毁(离职清不干净→留后门)。⑪ Wi-Fi 密码=人肉在路由器里配的 PSK;7-Zip=你现场输入的密码派生;HTTPS 数据阶段=握手时双方协商出的一次性会话密钥。⑫ 因为数学层面(2^128)已不可穷举,失守点只剩"钥匙被偷":弱密钥、明文分发、不更换、删不净——与 7.1 口令"再强的策略也挡不住你亲手说出去"完全同构:最薄弱的环节永远是人。

十、下一步学什么

相关笔记