上篇讲完了对称加密——从凯撒到AES-256。但一个根本问题悬而未决:如果你和对方从未谋面,怎么安全地把钥匙交给他?本篇讲的是1976年那场撼动密码学地基的非对称革命——两个从未见过面的人如何在公开信道上建立秘密、如何用数学验证身份、以及这套信任制度如何在量子时代重建自己。
| 关键词 | 一句话说明 |
|---|---|
| 非对称加密 | 加密和解密使用两把不同的密钥——公钥公开("锁"),私钥保密("钥匙") |
| Diffie-Hellman | 1976 年提出的密钥交换协议——在不安全信道上协商出共享秘密,窃听者无法计算 |
| RSA | 第一个实用的非对称加密算法(1977),安全性基于大整数分解的困难 |
| 数字签名 | 把 RSA 倒过来用——私钥签名、公钥验证,证明消息来源不可伪造 |
| PKI | 公钥基础设施——通过证书颁发机构(CA)的层级信任链,规模化验证公钥归属 |
| Shor 算法 | 量子计算机上分解大整数的多项式算法(1994)——宣判了 RSA 的死刑 |
| Grover 算法 | 量子搜索加速——对 AES-256 只将暴力破解从 2²⁵⁶ 降到 2¹²⁸,仍不构成实际威胁 |
| 格密码 | 基于高维格难题的后量子密码——目前无已知量子攻击,是 NIST 新标准的地基 |
凯撒密码、恩尼格玛、AES-256——加密算法的演进横跨两千年。但无论算法多复杂,它们都共享同一个前提:在开始通信之前,双方必须先持有同一把密钥。
这把钥匙怎么给对方?当面交,派人送,武装押运密码本进入密室——手段千变万化,本质都一样:用一个尚未加密的安全信道去传递密钥。如果你有安全到可以传递密钥的渠道,为什么不直接用那个渠道传消息?这是对称加密的囚徒困境。
这种困境让密码学在1976年之前始终是有钱人的游戏。政府用武装人员押运密码本,银行用专差送密钥卡——成本高昂、脆弱不可规模化。一个普通人想和朋友私密通信?你需要先约在咖啡馆交换一个密码短语——然后侥幸希望没有人偷听那杯咖啡。
如果两个人从未见面、中间的所有通信都被监听——他们还能建立只有彼此知道的秘密吗?1976年,两个年轻人证明了答案是:能。
想象三个人——你、你的朋友、和一个全程偷听你们对话的C。你们的面前各放着一碗完全一样的黄色颜料(公开材料)。
第一步。 你偷偷往自己碗里滴入一些红色,碗变成了橙色。你的朋友偷偷滴入蓝色,他的碗变成了绿色。C全程看着你们,但他只看到最后的橙色和绿色——你们各自滴入了什么颜色,他从未看见。
第二步。 你们把各自的碗举起来交换——你的橙色飞去了,他的绿色飞来了。C全程看着两种颜色在空中移动。
第三步。 你拿到朋友的绿色,加入自己的秘密红色——得到棕色。他拿到你的橙色,加入自己的秘密蓝色——也得到棕色。
你们两人得到了一模一样的棕色。C从始至终只知道三件事:公共的黄色、交换中的橙色和绿色。而棕色——你们最终的共享秘密——C永远合成不出来。
把这个颜料比喻翻译成数学,就是 Diffie-Hellman 密钥交换协议(1976年,《密码学的新方向》)。
公开材料是两个大数字——所有人可见。你和朋友各自私下选一个秘密数字,做一次数学运算(模幂),生成各自的公开值。交换公开值后,各自再用自己的秘密数字做一次同样的运算——两端得到的最终结果完全相同。这就是共享秘密。
而全程监听的窃听者——尽管掌握所有公开材料——要从公开值反推秘密数字,需要解一个叫离散对数问题的东西。在适当的参数下,这个问题在经典计算上是指数级困难的。
通俗地说:正向运算——已知底数g、指数a和模数p,计算 g^a mod p——快如闪电。反向——已知 g、g^a mod p 和 p,反推指数a——相当于让你看着一个数被揉进模运算的洗衣机里搅了几千圈之后,再让你倒推它进去之前是什么样。在经典计算上,这个问题是指数级困难的。
迪菲和赫尔曼证明了:不信任的各方可以在完全公开的信道上协商出一个共享秘密,而偷听者知道整个过程、知道所有数学公式,仍然算不出来。
在 Diffie-Hellman 之前,对称加密的信任成本与通信对象数量呈平方增长——每新增一个通信对象,你需要一个新的秘密信道、一次新的面对面密钥交换。
Diffie-Hellman 把这个成本降到了接近零。你不需要预先存在任何安全信道——你只需要让双方各持一个秘密数字,然后在公开信道上做数学运算。这和亚当·斯密的劳动分工一样深刻的洞察:斯密讲的是生产的分工让社会更富足;迪菲和赫尔曼讲的是信任的分工——让密钥分发不再是人肉押运的体力活,而是一道数学题。
Diffie-Hellman 协议解决了一个漂亮的问题——在公开信道上建立共享秘密。但它还不够:它要求双方同时在线、做一次交互。如果你想把加密消息发给一个明天才上线的人?做不到。
真正的非对称加密应该允许:你把公钥贴在互联网上,任何人随时随地都可以用这把"锁"加密消息发给你。只有你的私钥能打开。不需要对方在线,不需要交互。
1977年,麻省理工学院的三位研究者——罗纳德·李维斯特(Ron Rivest)、阿迪·沙米尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)——造出了第一个满足这个条件的实用算法。RSA 就是他们姓氏的缩写。
RSA的安全基于一个事实:把两个大素数相乘极其容易,但给定乘积,反推出这两个素数极其困难。
拿一张纸和一支笔,计算 211 × 227。几十秒,乘积是 47,897。现在换过来:给你 47,897,不准用计算器,找出是哪两个素数乘出来的——你也许还能做到,因为数字太小。但RSA-2048使用的是两个约300位十进制数字的素数,乘积约600位。用全世界所有经典计算机同时运算,完成分解所需的时间远超宇宙的年龄。
这个"单向"的数学事实支撑了互联网的密码基础设施四十年。RSA的公钥就是这两个大素数的乘积(给全世界看),私钥就是知道那两个素数分别是什么(只给自己留着)。
| 对称加密 | 非对称加密 | |
|---|---|---|
| 例子 | 凯撒、恩尼格玛、AES | Diffie-Hellman、RSA、ECC |
| 加密与解密 | 同一把钥匙 | 两把不同的钥匙(公钥 + 私钥) |
| 必须先做什么 | 秘密协商共享密钥 | 知道对方的公钥就行(可公开派发) |
| 根本问题 | "怎么安全地把钥匙送过去?" | "给你一把锁,你锁上消息,我用钥匙开" |
| 信任模型 | 需要预先存在的安全信道 | 可零先验信任 |
在实践中,这两种加密不是二选一的,而是协同工作的。你每次打开HTTPS网页时,浏览器和服务器先用RSA(或ECC)交换一个临时的对称密钥——这个过程非对称,但只做一次。随后整个网页的数据传输全部使用AES加密——对称,极快。非对称做握手,对称扛流量。两者缺一个,互联网安全就塌一角。
非对称加密解决了机密性——只有对方能读你的消息。但它没解决真实性:你怎么确定屏幕对面的人真的是他声称的那个人?
想象一个经典的中间人攻击:朋友把公钥发给你,窃听者C截获了它,换成了自己的公钥,然后转发给你。你以为你在用"朋友的锁"加密消息——实际上每一封都用的是C的锁。C拆开读了你的消息,再用朋友的公钥重新加密转发给朋友。你们的整个通信被全程记录——而你们俩完全不知道。
有世上最强的加密还不够。如果无法验证身份,AES-256 + RSA 也是白费。
答案恰好内置在RSA的数学里。RSA的加密和解密操作在数学上是对称的:
| 操作 | 用哪把钥匙 | |
|---|---|---|
| 加密 | 密文 = 明文^e mod n | 公钥 (e, n) |
| 解密 | 明文 = 密文^d mod n | 私钥 (d, n) |
| 签名 | 签名 = 消息^d mod n | 私钥 (d, n) |
| 验证 | 消息' = 签名^e mod n | 公钥 (e, n) |
把私钥用在"加密"的位置、把公钥用在"解密"的位置——得到的就是数字签名。数字签名不隐藏消息内容(任何人用公钥都能解开看到原文),但它证明了消息来源于私钥持有者——因为只有那个人拥有私钥d。
把私钥想成一支世界上只有你一个人有的笔——笔迹独一无二、不可复制。把公钥想成一个笔迹鉴定器——任何人都可以拿来鉴定,但谁也模仿不出你的笔迹。
当你在消息末尾签名:你用你的笔(私钥)签下,全世界把签名放进鉴定器(公钥验证),鉴定器确认这支笔画出的——而且这支笔从未离开过你的手。
数字签名有四个关键属性:
数字签名解决了"消息来源是谁"。但验证签名需要公钥——这把公钥本身是真的还是假的?你又回到了原点。
答案引入了一个第三方结构:公钥基础设施(Public Key Infrastructure, PKI),核心角色是证书颁发机构(Certificate Authority, CA)。
完整的流程是这样的:朋友走到CA面前,出示身份证明。CA核实他的身份,随后用CA自己的私钥在"此人的公钥 = XXXXX"这份声明上签名。这份签了名的声明就是一份数字证书。你拿到这份证书和你朋友的公钥,用CA的公钥验证证书上的CA签名——验证通过,你确认屏幕对面的公钥正是你朋友本人的。
它形成了一个链条:
CA 的公钥(预装在操作系统和浏览器里——根信任)
└→ CA 签名验证了朋友的公钥
└→ 朋友的公钥验证了朋友的数字签名
└→ 确信屏幕对面的人是他
你的电脑出厂时就内置了全世界几百个CA的公钥。当Safari或Chrome的地址栏出现那个小锁图标——背后是 PKI 在实时验证地球上几十亿个网站的数字身份。
| 方案 | 如何建立信任 | 成本 |
|---|---|---|
| 不要 PKI | 你亲自当面验证每一个通信对象的公钥 | 极高,不可规模化 |
| 个人自签 | 你自己当 CA,自签证书 | 低,但无人信你 |
| PKI | 委托权威 CA 验证并背书 | 低,信任通过层级传递 |
这里的洞见和密码学本身一样:信任需要被分工。你不能亲自飞遍世界上每一座数据中心去验证每一个网站的证书原件——你需要一个制度结构来帮你完成这件事。CA就是这个结构。
但这个结构有自己的裂缝——CA 被攻破(DigiNotar 在2011年被黑,导致伊朗全境的 Gmail 加密会话被大规模拦截)、一个CA可以签任意域名的证书(催生了证书透明度日志 CT Logs——所有证书的公开账本)。PKI 不是完美的,但它是一个一直在自我修复和加强的制度系统。
量子计算机对密码学的威胁不是均匀的。它把对称加密和不对称加密推向了两个完全不同的命运:
| 对称加密(AES) | 非对称加密(RSA, ECC) | |
|---|---|---|
| 量子威胁来源 | Grover 算法(1996) | Shor 算法(1994) |
| 威胁性质 | 加速暴力搜索 | 改变问题难度分类 |
| 效果 | AES-128 从 2¹²⁸→2⁶⁴;AES-256→2¹²⁸ 仍安全 | 多项式时间内攻破RSA和ECC——彻底致命 |
1994年,贝尔实验室的彼得·肖尔(Peter Shor)证明了:大整数分解可以在量子计算机上于多项式时间内完成。
"多项式时间"意味着你给整数多加一位,计算难度只增加一点点——而不是经典计算上的指数倍增。打个比方:经典计算分解一个RSA密钥就像挖穿一座山,每多一层岩石工作量翻倍。而Shor证明了量子计算机不需要挖山——它从山腰找到了一个洞口钻进去。
RSA和所有基于椭圆曲线的密码(ECC、ECDSA)——也就是今天HTTPS、比特币、数字签名的全部非对称密码基础设施——在这个意义上已经被判了死刑。执行日期取决于什么时候造出足够大的容错量子计算机。
Lov Grover 在1996年提出的算法能加速无结构搜索——把搜索复杂度从 O(2ⁿ) 降到 O(2n/2)。对 AES-128,2¹²⁸ → 2⁶⁴,从"不可能"变成"极其困难但理论可行"。对 AES-256,2²⁵⁶ → 2¹²⁸。2¹²⁸仍然是物理上不可能的数量级。
更致命的是,Grover 算法几乎不能并行化:造1000台量子计算机不会让它快1%——每一步必须等上一步完成。这是一道AES-256买来的隐性保险。
NIST在1997年征集AES候选时设了三档密钥长度——128、192、256。256那一档的一条隐性标准正是量子安全裕度:即使Grover完美生效,256位的对称加密仍保有128位的古典安全等级——至少到2050年前足够安全。
Shor算法攻击的是"周期性结构"——大整数分解和离散对数恰好有这种结构,可以被量子傅里叶变换锁定。密码学家开始寻找不被量子计算威胁的数学地基。
他们找到了格(Lattice)——一个高维空间的规则点阵,像一个有几百个维度的棋盘。核心难题叫最短向量问题(SVP):在一个500维的格中,找到所有非零向量中最短的那一个。
二维格上这是小学生的几何题。500维?没有已知算法能做到——无论是经典还是量子。格没有Shor需要的那种周期性——它在量子面前与在经典面前一样硬。
而且格具有一种独特的韧性:深度冗余。大整数分解是单一数学结构——找到弱点,全线崩溃。格不是:即使攻击者在几个维度上取得了进展,其余数百个维度仍然能让系统保持安全。
2016年,NIST正式启动后量子密码标准化——这是人类历史上规模最大、最自觉的一次密码基础设施迁移。必须在量子计算机建成之前完成补防。
82个候选算法从全球提交,经历三轮公开遴选。69个在中途被攻破或自行退出。2024年,NIST正式发布标准:
| 标准 | 用途 | 数学基础 |
|---|---|---|
| CRYSTALS-Kyber | 公钥加密 / 密钥封装 | 格密码 |
| CRYSTALS-Dilithium | 数字签名 | 格密码 |
| FALCON | 数字签名 | 另一种格结构 |
Google Chrome已经运行后量子密钥交换。Apple的iMessage全线运行后量子加密。美国国家安全局要求所有涉及国家安全的系统在2030年前完成迁移。你现在使用的每一套加密系统,都在被静默地替换为量子安全的版本——你不需要做任何事,它已经在后台更新了。
| 时代 | 信任基础 | 信任成本 | 谁能用 |
|---|---|---|---|
| 对称加密时代 | 个人秘密——武装押运密码本 | 极高 | 国家、军队、银行 |
| RSA 时代 | 大整数分解困难——一个公钥服务全世界 | 低 | 所有人 |
| 后量子时代 | 高维格困难——换了地基,保留非对称结构 | 低 | 所有人 |
这个过程的核心逻辑:每一次加密界的灾难,都让信任的数学地基比之前更牢固。
1976年的那场非对称革命,把建立信任这件事从面对面的体力活变成了一道数学题——人人都可以用,成本趋近于零。Shor在1994年的一篇论文又把这道题的数学地基震松了——但这一次,密码学界在量子计算机建成之前就已经选好了新地基。82个候选算法在全世界面前竞争、被淘汰、幸存、标准化。最终胜出的不再是两个素数的乘积,而是一整片高维格——连量子计算机也找不到短向量的硬地。
从恩尼格玛到AES-256,从RSA到后量子密码——密码学的理想状态始终是:数学在你身后低语,你一生都不需要看它。
上一篇:从恩尼格玛到AES-256——对称加密的进化。本文为加密与信任系列第二篇。