§ 8.1 · Section

对称与非对称加密

AES · RSA · Key Exchange · Hybrid Encryption · Hash

第 4 章讲"一次访问的旅程"时,有一站被我们匆匆带过:你的手机和淘宝的服务器"互相验明身份并商定密语"(§ 4.4 的 TLS 握手)。当时你只知道有这么一步,不知道那一步里藏着整个互联网最精巧的发明。第 7 章讲完了云和边缘——计算跑到了全世界每个街角;可只要数据还在网上跑,就有一个问题始终悬着:凭什么你输的银行卡密码,路上几十个经手的设备一个都看不见?第 8 章"网络安全"就从这块基石讲起:把数据搅成一团天书的两把钥匙。一把钥匙上锁又开锁,叫对称加密;一对钥匙一半公开一半私藏、配合成套,叫非对称加密——而真实世界两者搭伙干活,叫混合加密。这三件事,就是本节的全部主线。

生活场景
🔑 一张托人捎回家的纸条

你把银行卡密码写在一张纸条上,托同事下班顺路捎给你家人。纸条封进信封交出去的那一秒,你心里"咯噔"一下:捎信的人、他路上经过的每一张桌子,理论上都拆得开这个信封。

你想了两招。第一招,用只有你家人看得懂的黑话写——可你们上次见面约暗语,已经是三个月前的事了,来不及。第二招,找个带挂锁的小铁盒装进去——锁上锁这个动作人人都会,但开锁的钥匙全楼只有一把,在你家人手里。

第二招就是本节的全部秘密:上锁的办法可以完全公开(任何人都能往盒子上扣锁),开锁的能力必须独家(钥匙只发一个人)——把"怎么锁"和"怎么开"拆成两件事,整个现代加密大厦就立在这一拆之上。

先把这一节的术语翻译成人话

照例,先上术语对照表。密码学的名词听着都带一股冷战谍战味,其实每一个都能在你家楼道里找到原型。老规矩:读完正文回来再扫一遍,收获翻倍。

术语换成大白话生活里对应的东西
明文 / 密文说白了就是"谁都看得懂的原信"和"搅成一团的天书"白纸条 / 撕碎重拼的纸条
密钥(Key)说白了就是"开锁的钥匙——一串数字,长度按位算"家门钥匙,齿形对上才能开
对称加密说白了就是"上锁开锁用同一把钥匙"普通挂锁:一把钥匙两头用
AES说白了就是"今天全世界通用得最广的那把对称锁"全国统一的防盗门锁芯标准
非对称加密说白了就是"上锁开锁用两把不同的钥匙,配成一对"邮筒:人人能投,只有管理员能开
公钥说白了就是"可以印在名片上到处发的那半把钥匙——只能上锁,不能开锁"街角邮筒的投递口,谁都能塞信
私钥说白了就是"打死也不能外借的那半把——唯一能开锁的"邮筒底部开箱钥匙,只归管理员
密钥交换(Diffie-Hellman)说白了就是"两个人当着围观群众的面,商量出一把谁也偷不走的共同钥匙"当众各自倒颜料,混出一种色,围观者拆不回原色
混合加密说白了就是"用慢的钥匙把快的钥匙递过去,之后全程用快的"挂号信寄门禁卡,之后天天刷卡进门
哈希(Hash)说白了就是"给任意文件算出一个定长指纹——能对指纹,拼不回原件"咖啡豆磨成粉:好磨,没法拼回豆子
(Salt)说白了就是"算指纹之前先撒一把专属调料,让抄答案的人白忙"腌菜每家方子不同,同样的菜腌出不同的味
数字签名说白了就是"用私钥给文件的指纹盖章——章只有你能盖,验章人人都能验"火漆印:仿不出,一验便知
暴力破解说白了就是"不琢磨开锁,挨个试遍所有齿形"拿一整箱钥匙串逐把捅锁眼

一句话串起整节:明信片网络逼出了加密;对称加密快但钥匙难送,非对称加密钥匙好送但慢,混合加密让两者各干擅长的活;哈希和签名在加密之外补上"没被改过"和"确实是本人"两块拼图。下面按这个顺序展开。

为什么必须加密:一张由明信片组成的互联网

先建立本节最重要的一个直觉:你在网上发的每一个包,走的都不是"你和对面的专线",而是一段接力。从你家手机出发,先到路由器,再进小区宽带的光猫,钻进运营商的城域网,跳上骨干光纤,跨过几个省市,最后落进机房里某台服务器——一路上少则七八跳,多则二十几跳(第 2 章讲过的路由转发)。每一个跳板上的设备,都有机会"看一眼"这个包里装了什么。

这不是危言耸听的理论设定,而是 TCP/IP 的出厂默认。这套协议诞生在上世纪七十年代的科研网里,设计者们互相都认识、互相都信任,压根没想过"中间人会偷看"这件事——就好比一群同门师兄弟在一个院子里传纸条,谁会防着谁?于是 HTTP 明文跑了二十多年:网址、账号、密码、搜索记录,全都是裸奔的明信片。你在咖啡店连公共 WiFi 打开一个早期网站,隔壁桌一个装了抓包软件的笔记本,理论上就能看到你提交的登录表单。运营商劫持更是真实存在的老问题:早年不少 HTTP 页面会被半路插进运营商的广告弹窗——能在半路加东西,就说明半路的人看得见也改得动。

所以"加密"要对付的,从来不是某一个具体的坏人,而是这条接力路上所有理论上可能经手的陌生眼睛把明信片装进信封,让每一个中转站都只能看到信封上的地址(转发需要的信息),看不到信瓤(内容本身)——这就是加密在网络里干的活儿。信封上的地址还得留着,不然快递没法投递,这正是第 2 章说过的"包头明文、载荷加密"的分层分工。

对称加密:同一把钥匙的保险箱

第一种思路,人类用了几千年,朴素到不需要任何数学:用同一把钥匙上锁和开锁。把信放进保险箱,用钥匙锁上;寄到对方手里,对方用同一把钥匙打开。数字世界一模一样:密钥 K 把明文搅成一团天书,同样的 K 再把天书搅回明文——加密解密一把钥匙、一套算法,这就是对称加密

它有一个压倒性的优点:快。今天的对称算法之王叫 AES(高级加密标准),快到什么程度?现代 CPU 里干脆内置了专门执行 AES 的硬件指令,一秒钟加解密几个 GB 不在话下——你打视频电话的每一帧、网盘同步的每一个文件块、手机整盘加密的每一次读写,背后都是它。海量数据扛得住,这是对称加密吃饭的本钱。顺带一提它的出身:上一代标准 DES 在 1977 年用的钥匙只有 56 位,1998 年被一台专造的机器 22 小时暴力试开——锁没坏,是钥匙太短了。美国国家标准机构于是搞了一场全球公开招标,2001 年选定了比利时两位学者设计的算法,改名 AES,钥匙长度 128 位起步、可到 256 位。这段史实顺便埋了个伏笔:好锁的第一讲究,是钥匙足够长。国内银行和政务系统里你还会遇到一套国产算法:对称的叫 SM4、非对称的叫 SM2,思路与 AES/RSA 同宗,属于"另一套标准件"。

对称加密还有个常被低估的分支妙用:它不挑内容。不管加密的是一句话、一部电影还是整块硬盘,算法都一视同仁地按块搅拌。你在手机上设置开机密码之后,整机存储就被一把由这个密码派生的钥匙加密了——丢了手机,捡到的人面对的是一整块天书硬盘。对称加密是整个数字世界的"主力保险箱":哪里有海量数据要藏,哪里就有它。

一把好锁的三个讲究:搅得匀、钥匙长、图纸公开

"加密"两个字听玄,拆开看其实就是按规则搅拌。但同样是搅拌,地摊玩具和银行金库的锁差着十万八千里。一把现代好锁的讲究,挑三条最要紧的说。

记牢这三个讲究,你就比多数人更明白"加密安全"到底在安全什么:不在算法神秘,而在搅拌充分、钥匙够长、钥匙保密。

对称的死穴:钥匙怎么送到对方手里

讲到这里,对称加密看起来已经无敌了——快、结实、标准统一。可它有个致命的软肋,本节开头那张纸条的故事已经演过一遍:上锁开锁同一把钥匙,那"这把钥匙"本身,怎么交到对方手上?

你可能会说:微信发过去呗。停一下——微信自己也是跑在这张明信片网络上的;用一条不保密的信道去送钥匙,等于把保险箱和钥匙捆在一起寄。那先建一条加密通道再送钥匙?可加密通道也需要钥匙,这把钥匙又得先送过去……鸡生蛋、蛋生鸡,绕死了。这个死循环在密码学里有个正式的名字,叫密钥分发难题

传统世界的解法其实是有的:提前线下见面,当面约定。二战片里两本一模一样的密码本,一本在总部、一本在潜艇上,出发前亲手交接——好用,但只适合"少数几方、长期合作"的场合。互联网干的是另一门生意:你的手机今天要和成千上万个从没见过面、以后也不会再见的服务器建立保密线路。总不能每打开一个网页先去人家公司前台领钥匙。军队的密码本模式,撑不起一个每天几十亿次握手网络。对称加密单独挑不起互联网这副担子——不是锁不够好,是钥匙送不到。破局需要换一个思路:干脆让"上锁"和"开锁"变成两件不同的事。

非对称加密:一对接头暗号的信箱

1976 年,两位研究者发表了一篇后来被称为"密码学新方向"的论文,第二年三位 MIT 的学者造出了第一套能用的方案(用三人姓氏首字母命名为 RSA)。他们带来的观念转变只有一句话:让钥匙成对出现——一把负责上锁,另一把才负责开锁。

具体玩法回到楼道里的邮筒就全通了。你想收密信,就去申请一个专属信箱:这个信箱的投递口设计(公钥)你可以印在名片上满世界发——任何人、任何时候、不用打招呼,都能往里投信;而箱底那把开箱钥匙(私钥)从出厂那天起就只在你手里,全世界独一份。想给我发密信?拿我名片上的公钥把信锁进箱子就行,一路经过多少双眼睛都无所谓——因为能打开这个箱子的钥匙,从物理上就只存在一把。

注意这套流程里藏着的那次质变:我和你从未见过面、没有共用过任何秘密、不需要任何提前约定,却完成了一次保密通信。你用来上锁的公钥本来就是公开的,被偷看一百遍也无所谓;而唯一的秘密——私钥——从始至终没离开过我家抽屉,根本不需要"送"。上一节那个"钥匙送不过去"的死循环,不是被解开的,是被整个绕开的:需要传输的东西全部公开,真正保密的东西一步都不动窝。

为什么公开的钥匙不怕人看:数学里的单向门

第一个合理的疑问马上来了:公钥公开、算法公开,那小偷拿着公钥,为什么推算不出私钥?答案是一座数学奇观:单向门——一个方向走容易到飞起,反方向走难到宇宙尽头。

拿 RSA 依赖的这扇门说:它是"大数分解"。两个三百位的大素数相乘,计算机毫秒级搞定——乘法往这个方向走,是高速公路。可把得到的乘积反过来拆回那两个素数呢?目前人类已知最好的算法,配上全世界的算力,所需时间也是天文数字——好比榨橙汁:橙子榨成汁一分钟的事,可你把一杯橙汁还原回一只完整的橙子试试?门就在那儿:谁都能往前走,没人能走回来。

RSA 的整套构造就立在这扇门上,可以这样粗糙地理解:公钥里装着那个巨大的乘积(大方公开,反正拆不开),私钥里藏着拆开它的方法(其实就是那两个素数的知识,只有你自己知道)。你可能会嘀咕:万一哪天有人发明了神级分解算法呢?问得完全正确——这正是密码学的日常焦虑,所以工程界早就在准备后手:另一条路线叫椭圆曲线(ECC),用不同的数学单向门达成同样效果,钥匙更短、更省电,手机和国产的 SM2 走的都是这条路;量子计算机如果成熟,会动摇其中一部分门(后量子密码是当下热点),但那是另一部长篇了。这里只需要带走一个观念:非对称加密的安全性不靠藏,靠"知道的人也倒不回去"——公开的东西架在单向门上,公开本身就是安全的。

顺带把"当众商量钥匙"的调色把戏也收进来:密钥交换(Diffie-Hellman)允许双方各自守一个秘密颜色,当众把公开色倒进同一个桶里混合——最后两边调出了同一种混合色当共同钥匙,而围观群众就算录下了全程、拿走了所有公开颜色的样本,也拆不出每个人私藏的那一瓶。两只从未交换过秘密的手,就这样在众目睽睽之下握到了一起。

一对钥匙的两用:保密是正着用,签名是反着用

这对钥匙的妙处还远没挖完。到目前为止我们都在"正着用":拿你的公钥上锁,只有你的私钥能开——这个方向管的是"保密",防的是偷看。现在把流程整个反过来:拿你的私钥去"锁"一段内容,而全世界任何人都能拿你的公钥去"开"。开得开,就证明了一件事:这段内容出不了别人手,因为私钥全宇宙只有一把,在你抽屉里。

这就是数字签名的原理骨架。注意它一次性解决了两个问题:防冒充(别人没有你的私钥,盖不出这个章)和防抵赖(你没法说"这不是我发的"——章只能出自你的钥匙,你把章借出去等于把私钥泄了,责任跑不掉)。同一对钥匙,正着用是保密信箱,反着用是个人印章——加密防"看",签名防"赖"和"冒",方向一换,用途天差地别。这个"一钥两用"的对称美,是整个非对称体系最耐人寻味的地方。

哈希:磨成粉末就再也拼不回去的指纹

在钥匙的故事之外,还差一块关键拼图。加密管住了"不被偷看",但没人管"没被改过"——信封是封好了,可半路要是有人把信瓤里的"转账 100 元"改成"转账 10000 元"再封回去呢?这就轮到哈希登场。严格说哈希甚至不算"加密":它根本不打算还原,只负责给任意内容算出一个固定长度的指纹——一部 4K 电影和两个字"好的"进去,出来的都是一串同样长度的乱码(常用算法 SHA-256 算出的指纹是 64 个十六进制字符)。

好哈希算法有三个脾气,每个都有生活原型:

这三个脾气合起来,让哈希成了数字世界的"验货章"。下载站旁边那行"SHA256 校验值",就是官方指纹:你下载完自己磨一遍,对上了就证明文件一个字节没坏、没被人塞过东西。网盘的"秒传"也是它:你上传一部电影,网盘先算指纹,发现库里早有一模一样的指纹,就免了真传——你的上传进度条一秒走完,传的其实只是"指纹核对"。一句话记住哈希的分工:它不藏东西,它负责"对指纹"——完整性交给它,机密性才轮到加密。

密码为什么不能明文存:哈希加上一把盐

哈希还有一个和每个读者都直接相关的应用:网站根本不知道你的密码。听起来玄,其实是行业标配——你注册时填的密码,网站第一时间就磨成了指纹(哈希值)存进数据库,原始密码看一眼就扔。以后每次登录,把你这次输入的再磨一遍,对指纹就行。哪天数据库被人整库拖走(行话叫"拖库"),小偷抱走的只是一仓库指纹:想从指纹拼回密码,等于想从咖啡粉拼回咖啡豆。

但小偷也不是吃素的,他们有一招叫彩虹表:提前把"所有常见密码"的哈希值算好存成一本对照字典,拖库之后拿指纹一查就反查出明文。破解这招的办法简单到可爱:盐(Salt)。给每个用户的密码在磨粉之前,先掺一小撮各不相同的随机调料——"123456"磨出来不再是全网统一的那个指纹,而是"你这家的 123456"专属指纹。对照字典瞬间作废:好比同样的白菜,你家按自家方子腌,腌出来的味道跟谁家的都对不上号,抄答案的人对着味道表干瞪眼。所以每次爆出"某某网站数亿条密码泄露",密码存得好(加盐哈希)的站,泄的只是腌菜坛子;存得差的站(明文或裸哈希),才是把钥匙串整串奉送。判断一个网站有没有基本的安全素养,就看它存的是你的密码,还是你密码的"加了盐的指纹"。

数字签名:先磨指纹,再盖私章

把哈希和"反着用的私钥"组装起来,就得到了完整版的数字签名——顺便解决一个工程问题:直接拿私钥给整个文件"上锁"太慢了(下节就讲非对称有多慢),而签名要的本来也不是藏住文件,只是证明"文件没变、出自本人"。于是流程优化成两步走:

说白了,签名签的从来不是文件本身,而是文件的指纹——好比公证处不会把整栋楼扛进保险库,只给房产证盖一个骑缝章:章跟证一起才有效,谁也换不走内页。这套机制今天跑在软件更新上(系统敢自动装补丁,是因为每一个补丁包都带着开发者的签名)、跑在 HTTPS 里、也跑在电子合同和电子发票里。不过这里埋着一个新问题:验章要用你的公钥——那我上哪儿去拿"你的"公钥?拿到手又怎么确定它真是你的?万一有人半路把公钥调了包,整套签名就全部签在骗子名下了。这个问题足够重要,重要到值得单独一节——§ 8.2 数字证书与 CA 专讲它。

非对称的软肋:慢,慢得离谱

非对称加密这么神,为什么不全用它?一个字:慢。对称算法是流水线上的搅拌机,非对称算法是手工雕刻的大数乘方——两者的速度差在两到三个数量级,也就是说同样一段数据,非对称要慢几十到几千倍。用 RSA 去加密一部电影,好比用毛笔手写每一张快递面单上的每一行地址:不是写不出来,是这买卖没法做了。

所以非对称在真实系统里的戏份其实极少,演的都是"关键一幕":握手的那几毫秒、签名盖章的那一下、交换钥匙的那一送。剩下九成九点九的数据搬运,全部交回给对称算法这个老实主力。非对称是"礼宾车",对称是"货运重卡"——礼宾车负责最金贵的那一程(把钥匙送到),重卡负责之后所有的重活。这个分工不是权宜之计,而是刻在所有现代安全协议骨头里的架构。那两者具体怎么交接?这就到了本节的收官大戏。

混合加密:真世界的黄金组合

现在把所有零件拼起来,看一眼 HTTPS 的真实流程——也就是第 4 章 § 4.4 那次"商定密语"的幕后真容:

看出这套设计的精妙了吗?慢的非对称只出场一瞬,干完"安全递钥匙"这一件它独门擅长的事就退场;快的对称接管之后的一切。好比新员工入职:公司用挂号信把门禁卡郑重寄到你家(慢、贵、但确保卡真到了你本人手里——这一步对应非对称),之后你天天刷卡进出办公楼(快、便宜、天天用——这一步对应对称)。没人会每天用挂号信寄门禁卡上下班,也没人会拿门禁卡当传家宝供着不用。顺带还能解释一个你听过的时髦词——前向保密:因为钥匙是每次现调、用完就焚,就算哪天某把钥匙真的泄露了,也只能解开"那一次"通话的录音,昨天的、上个月的全部无恙。混合加密 = 非对称保"接头",对称保"干活"——这就是 § 4.4 里那半秒握手真正办下的事。

攻击者为什么不砸锁:他们只骗你交钥匙

写到这儿你可能有个疑问:这些算法全都公开了几十年,全世界黑客日夜研究,怎么就没人破开?老实回答:靠正面强攻,确实没人破得开。2 的 128 次方不是修辞,是把全球算力烧干也算不完的物理事实。可现实中的数据泄露事件几乎每周都有,那坏人走的是哪条路?

答案是:没人撬保险箱,都在骗你亲手交钥匙。钓鱼网站做的就是这门生意——做个和真官网一模一样的页面发链接给你,你"自愿"把密码输了进去;假 WiFi 蹲守咖啡店,冒充网络名字等你连上来,做中间人两头传话;木马程序干脆住进你手机里,密码输进真网站也照样被当场抄走。再结实的锁也架不住主人把钥匙递给门口的陌生人。数学保护的是"锁",而攻击瞄准的永远是"人"——安全链条里最脆的一环,从来是人这一环。

这解释了为什么后面几节的方向会和这一节如此不同:本节讲的是数学上的铜墙铁壁,§ 8.3 讲的是 Web 世界里那些"不正面攻锁、专走歪门"的打法(注入、跨站、伪造请求),§ 8.6 讲的是把"不信任任何人"制度化的一整套管理哲学。先记结论:加密本身几乎无懈可击,出事的永远是使用加密的人和流程。

你身边的四个现场:这套东西天天在替你打工

老规矩,概念读完回生活里验一遍货。下面四个现场,今天之内你大概率全会路过:

认这个套路的口诀:凡是你和一台陌生机器"没见过面却开始说悄悄话"的地方,背后都是同一套剧本——非对称接头,对称干活。

常见误区:三条最容易念歪的经

Analogy · 一栋保密公寓:把本节所有概念装进一个画面

如果你只记住这一节的一个画面,请记住这栋楼:一栋建在闹市里的保密公寓,楼下人来人往、快递层层转手——这就是互联网本身。

① 楼里的信件分两种走法。懒住户直接寄明信片(明文 HTTP),整条街谁都能瞄一眼——早年运营商往明信片上贴广告的事,真发生过。

② 大件贵重品,走保险箱(对称加密 / AES)。一把钥匙上锁开锁,流水线快得能扛下全楼的快递量。可新住户第一天就撞上死结:钥匙怎么交给收件人?快递员代送钥匙,等于锁和钥匙一起寄(密钥分发难题)。

③ 于是物业在每户门口装了邮筒(非对称加密)。邮筒的投递口设计(公钥)印在通讯录上任人索取,箱底钥匙(私钥)出厂就一户一把、永不离手。陌生人投信不用打招呼(公钥随便发),取信只此一家(私钥不外借)。数学保证了一条:仿造邮筒容易,仿造那把箱底钥匙,比把橙汁还原成橙子还难(单向门)。

④ 真实订单是这么跑的:买家先用邮筒接头,双方当众调出一把今天专用的箱钥匙(密钥交换),之后这一单的所有包裹全走保险箱(混合加密:非对称递钥匙,对称扛大件);今天用完今天作废,明天重调一把(前向保密)。

⑤ 楼下还有两件公共设施。一台磨豆机(哈希):任何文件倒进去出一份指纹,磨得飞快、拼不回去,掺了各家私方调料(盐)连对答案都办不到;一枚火漆章(数字签名):盖章只能用各家私钥,验章人人可查——文件配指纹,指纹配火漆,谁也别想偷换内页。

这栋楼记住,本节所有名词就都有了门牌号:明文是明信片、AES 是保险箱、公钥是邮筒口、私钥是箱底钥匙、密钥交换是当众调色、混合加密是邮筒接头后走保险箱、哈希是磨豆机、盐是各家腌菜方子、签名是火漆章。

一句话送给你:本节的三个心法

收束全节,带走三句话。第一,快慢分工是全局钥匙:对称快但钥匙送不动,非对称送得动但慢——真实世界的一切安全协议,本质都是"非对称接头、对称干活"这一句话的变奏。第二,公开不等于不安全:算法公开、公钥公开、当众调色——现代密码学的底气恰恰建立在"公开"之上,真正要捂严实的只有一样:私钥。第三,锁是数学的,钥匙是人的:暴力破解在数学上死路一条,现实里的失窃几乎全是"人交出了钥匙"——所以本节之后的三节,讲的都不是更硬的锁,而是更清醒的流程。两把钥匙一对章,外加一台磨豆机——第 8 章的地基,至此打完。

Recap · 收束

一句话总结:对称加密一把钥匙锁开两用、快而无匹却困于送钥匙;非对称一对钥匙公开一半私藏一半、慢而金贵却专治接头;混合加密让两者各展所长——非对称负责安全地把钥匙递过去,对称负责拿着钥匙高速干活,哈希和签名补上「没被改」与「是本人」。

机制上记住五件事
· 互联网是明信片网络:数据包层层转发、路路经手,加密防的不是某个坏人,是整条链上的陌生眼睛。
· 对称加密(AES):一把钥匙、速度之王、海量数据的主力;软肋是密钥分发——钥匙和锁不能同路。
· 非对称加密(RSA / ECC / SM2):公钥上锁私钥开锁,公钥随便发、私钥永不外借;安全不靠藏,靠数学单向门「知道也倒不回去」。
· 哈希与签名:哈希是磨豆机(单向、雪崩、难撞车),配盐存密码、配私钥成签名——完整性、防冒充、防抵赖三件事一把抓。
· 混合加密(TLS 的骨架):当众调出会话密钥、用完即焚——快慢分工,外加前向保密。

下一步:地基有了,但一个新问题立刻冒头——你手机里存的那把"淘宝公钥",是怎么来的?万一路上半路被人调了包,你以为在跟淘宝说悄悄话,其实每句都被骗子转述。锁没问题了,接下来要解决"对面到底是谁":§ 8.2 数字证书与 CA,讲那套给公钥发"身份证"的体系。

☰ 主页
Xue Hai Wu Ya · Network · § 8.1 · 对称与非对称加密