HTTPS 里,RSA 只是「递钥匙的」
你访问 https:// 网站时,绝大部分数据其实不是 RSA 加密的,而是对称加密(如 AES)。RSA 的出场只有一瞬间——握手阶段用来安全地传递对称会话钥匙:
- 打招呼浏览器与服务器互致问候,交换「我会哪些加密算法」。
- 出示证书服务器递上数字证书(内含公钥),由证书机构背书「这确实是本网站」。
- 递钥匙浏览器生成一把随机对称钥匙,用服务器公钥加密后发过去——全世界只有真服务器能解开。
- 换挡飞驰此后全部通信改用那把对称钥匙做 AES 加密,快如流水。
非对称加密又慢又贵(大数乘方),对称加密又快又稳(但递钥匙是死结)。所以现实方案是:用 RSA 解开「递钥匙」的死结,用对称加密跑真正的数据——这就是「混合加密」。实验室里一次加密一个字母,现实里 RSA 一次只用几毫秒,干最值钱的那一件事。
(补充一条现状:如今 TLS 1.3 的主流握手已改用更高效的 ECDHE 交换钥匙、RSA 主要退守签名验证岗位——但「非对称解决钥匙配送」的剧本没有变,详见下文签名部分。)
数字签名:把 RSA 反过来用
还记得实验室里那句「用 d 加密、e 解密也成立」吗?把它反过来,就得到了数字签名——用私钥处理,用公钥验证:
- 盖章对文件计算摘要(哈希值),再用私钥处理它,附在文件末尾——这就是签名。
- 验章任何人用公钥解开签名得到摘要 A,再自己对文件算一遍摘要 B。A = B ⇒ 文件确实出自私钥持有者,且一字未改。
为什么先哈希再签?因为 RSA 运算慢,直接签大文件太奢侈;摘要只有几十字节,签它等于签了整份文件。这套机制支撑着:软件更新校验(防止更新包被篡改)、电子合同、代码签名、区块链交易、JWT 令牌……凡是需要证明「这是本人发的、没被改过」的场景。
加密与签名,是同一对钥匙的两种用法:加密 = 用收件人的公钥上锁(保机密);签名 = 用自己的私钥盖章(证身份)。现实中每个人都有两对钥匙:一对「给我上锁」,一对「替我盖章」。
实验室 vs 工业 RSA:三处关键升级
| 环节 | 实验室版本 | 工业版本 | 为什么必须升级 |
|---|---|---|---|
| 明文处理 | 逐字母加密 | 整块处理 + OAEP 随机填充 | 逐字加密会泄露模式(相同字母→相同密文),攻击者可重放、拼接密文。填充引入随机性,同样的话每次密文都不同 |
| 密钥尺寸 | 两位数素数 | 2048 位以上,素数由密码学随机数生成 | 抵御「拆 n」;随机性防止密钥重复 |
| 使用方式 | 直接加密内容 | 只递钥匙 / 只签名,数据交给 AES | 性能 + 前向保密(钥匙泄露不影响历史通信) |
一条从业者忠告:理解原理请像本站这样亲手算;写产品请永远使用 OpenSSL、平台密码库等成熟实现。自研加密的坑几乎全在填充、时序泄露、随机数这些「原理之外」的细节里。
量子威胁与后量子时代
实验室里 Eve 用「试除」拆 n,要跑 √n 次。1994 年 Shor 提出一种量子算法,理论上能在多项式时间内完成大数分解——一旦足够强大的量子计算机出现,RSA 的墙将被直接绕过。这就是密码学界认真讨论「后量子密码(PQC)」的原因。
- 现状:拆解 2048 位 RSA 需要数百万个高保真量子比特,远超当前设备(数百~千级),今天无需恐慌。
- 已经在动:NIST 已于 2024 年标准化首批后量子算法(如基于格的 ML-KEM);主流浏览器与云厂商已开始部署「混合握手」(经典 + 后量子双保险)。
- 先囤后解:值得警惕的是「先截获存储、等量子成熟再解密」——高机密数据现在就该考虑后量子保护。
RSA 的故事还没写完,但它的作者们当年或许没想到:一篇 1977 年的数学论文,会在半个世纪里守护人类绝大多数机密,还催生了一门为「量子时代」预备的全新数学军备。数学的安全,永远是进行时。
常见疑问
HTTPS 网站证书里的「RSA 2048 位」指的是什么?
指证书里服务器公钥的模数 n 是 2048 比特。你在浏览器点地址栏小锁 → 查看证书,能看到「公钥算法:RSA (2048 bits)」——就是原理篇里那个 n 的真实尺寸。
有了 RSA,为什么密码学还在用对称加密?
性能差千倍以上:AES 加密 1GB 视频轻松自如,RSA 做同样的事要慢到无法接受。两者是分工而非竞争:RSA 管身份与钥匙,AES 管数据洪流。
私钥文件(.pem / .key)为什么那么长?
里面不只是 d:还存着 p、q、指纹、证书链等多种冗余字段,用于加速运算和管理。保护它的最好方式是:不进代码仓库、不进聊天记录、开启硬件保护(如 YubiKey)。
椭圆曲线加密(ECC)和 RSA 是竞争关系吗?
是同一思路(正易反难)的不同数学实现:ECC 用「椭圆曲线上的离散对数」当墙,256 位 ECC 的强度约等于 3072 位 RSA,又小又快。现代系统正逐步从 RSA 迁移到 ECC,但教学与兼容场景 RSA 依然无处不在。