为什么RSA只负责交换密钥,而AES加密所有数据?混合加密原理详解

你每天刷的 HTTPS 网页、发的加密消息、传的文件,背后都藏着一场精密的”分工”:非对称算法(RSA 或更现代的 ECDHE)只在握手那一下露个面,干一件小事——把钥匙递过去;之后的所有数据,全都是 AES 在默默加密。

为什么不让 RSA 一气呵成把消息也加密了?

为什么 AES 这么快却要靠 RSA “递钥匙”?这背后不是某个工程师的任性决定,而是数学、性能和安全性三方博弈出来的最优解。

对称与非对称的”先天缺陷”

要理解混合加密,得先看清两类算法的”性格”。

AES 为代表的对称加密:加密和解密用同一把密钥,像一把物理钥匙开一把锁。它的优势是快——AES-256 在现代 CPU 上吞吐量可达每秒数百 MB 甚至数 GB,硬件还有专门指令加速。但它有个致命问题:密钥怎么安全送给对方?如果 Alice 和 Bob 此前从未见过面,Alice 怎么把 AES 密钥交给 Bob 而不被中间人 Eve 截获?

一旦密钥在传输中被拿到,整个加密体系就崩了。

RSA 为代表的非对称加密:有一对密钥,公钥可以随便公开,私钥自己藏好。别人用公钥加密,只有持有私钥的人能解密。它完美解决了密钥分发问题——Alice 直接用 Bob 的公钥加密任何东西,全世界都能看到密文,但只有 Bob 能解开。
听起来 RSA 是万能的?不,它有两大硬伤:

速度极慢。

RSA-2048 加密同样大小的数据,比 AES-256 慢约 3000 倍;RSA-4096 比 RSA-2048 还要再慢 8 倍左右。这是因为 RSA 做的是大数的模幂运算,计算复杂度极高。

明文长度受限。

RSA 一次能加密的数据量受密钥长度限制,RSA-2048 理论上限只有 245 字节左右,根本塞不下正常的业务数据。

一个直观的对比:用 AES 加密 1GB 文件只需几秒;同样的数据量如果硬要用 RSA 加密,可能需要几个小时甚至几天,CPU 占用率会非常高。

RSA算法

混合加密(Hybrid Encryption):让专业的人干专业的事

既然 AES 快但递钥匙难,RSA 慢但擅长递钥匙,那何不让它们合作?

这就是混合加密的核心思想:

用 RSA(或非对称算法)加密一个临时生成的 AES 会话密钥——这件”小活”RSA 干起来毫无压力;

用 AES 加密真正的业务数据——这件”重活”交给 AES,飞快完成。

为什么”递钥匙”这件事非 RSA 不可?

你可能会问:凭什么不让 AES 自己把密钥协商出来?

问题在于:在公开信道上,两个互不认识的人要约定一个共同的秘密,而不能让旁观者猜到——这是对称加密做不到的。AES 本身只是个加密算法,它不解决”密钥怎么来”这个问题。

RSA 的数学魔法在这里派上用场:它的安全性建立在大整数分解难题上——两个大质数相乘很容易,但要把乘积分解回原来的质数,对经典计算机来说需要天文数字级别的时间。用 GNFS(一般数域筛,目前已知最快的经典分解算法)分解 RSA-2048 大约需要 2¹¹² 次操作;2020 年研究者分解 RSA-250(829 位)就耗掉了 2700 核年的算力,而 RSA-2048 比 RSA-250 还要难约 10¹⁸ 倍。

这就是为什么 Alice 可以放心大胆地用 Bob 的公钥加密 AES 密钥:即使 Eve 截获了 E_RSA(K),在没有 Bob 私钥的情况下,她面对的是一道经典计算机几千年都解不开的数学题。

走进真实的 HTTPS:握手那一下发生了什么

以 TLS 1.2 及更早版本中经典的 RSA 密钥交换为例:

  1. 客户端生成随机数 Pre-Master Secret。
  2. 用服务器证书里的 RSA 公钥加密它。
  3. 发送给服务器。
  4. 服务器用 RSA 私钥解密,拿到 Pre-Master Secret。
  5. 双方基于这个秘密推导出相同的 AES 会话密钥。
  6. 从此刻起,所有 HTTP 数据都用 AES 加密传输。

在这个过程里,RSA 运算整个会话只做一次;而 AES 运算要对每一个字节的数据执行。这种分工充分利用了两者的优势。

TLS 1.3 的进化:RSA 连”递钥匙”的活都丢了

讲到这里必须补一个重要的现代背景:在最新的 TLS 1.3 中,RSA 密钥交换已经被彻底移除。

原因有两个:

  • RSA 密钥交换不能提供前向保密。服务器私钥一旦在未来泄露,攻击者可以回放之前录下的所有 HTTPS 流量,解出每次的 Pre-Master Secret,历史通信全部暴露。
  • RSA 密钥交换本身漏洞不少。著名的 Bleichenbacher 攻击及其变种 ROBOT 攻击利用了 RSA PKCS#1 v1.5 填充的弱点,数千条消息就可能攻破部分实现,2017 年 Facebook 等大型网站都发现过这类问题。

TLS 1.3 的解决方案是:用 ECDHE(椭圆曲线 Diffie-Hellman 临时密钥交换)来协商会话密钥。

ECDHE 的工作方式不一样:

客户端和服务器各自临时生成一对椭圆曲线密钥;

双方交换公钥;

各自用对方的临时公钥 + 自己的临时私钥,独立计算出同一个共享秘密;

握手结束后,这些临时密钥对被立即销毁。

这样做的好处是:

前向保密:每次会话都用全新的一次性密钥,就算服务器长期私钥明天泄露,今天的历史流量也解密不了;

更快:ECDHE 基于椭圆曲线,计算量比 RSA 小得多;TLS 1.3 的握手从原来的 2-RTT 缩减到 1-RTT,初始连接速度提升 50%;

更安全:彻底规避了 RSA 密钥交换的一系列填充攻击。

📌 所以严格来说,现代 HTTPS(TLS 1.3)里的”递钥匙”工作已经由 ECDHE​ 接管,而 RSA 退居二线,主要负责证书签名和身份验证——它用私钥给握手消息签名,客户端用公钥验证”对面确实是证书声称的那个服务器”。

但这并不削弱我们标题里的核心逻辑:非对称算法负责”安全地协商/递送会话密钥”,对称算法 AES 负责”加密真正的消息批量数据”。变的只是”递钥匙”的具体执行者从 RSA 换成了 ECDHE,分工的本质没变。

RSA算法

聊到这里,顺带提一个前沿话题:量子计算机对 RSA 和 AES 的威胁是不对称的。

RSA 面临较大威胁:Shor 算法能在多项式时间内分解大整数,一台拥有约 4000 个逻辑量子比特(按当前纠错水平约合 2000 万个物理量子比特)的量子计算机,可能在数小时内破解 RSA-2048。不少密码学家认为,RSA 在未来 10 到 15 年内可能被量子计算攻破。

AES 相对安全:Grover 算法能把对称加密的有效密钥长度减半,AES-128 会降到 64 位安全强度(不够安全),但 AES-256 在 Grover 攻击下仍有 128 位安全强度,对量子计算机来说依然是不可行的。

这也解释了为什么 NIST 的后量子标准化路线图里,被替换的主要是密钥交换/签名算法(RSA、ECDH、ECDSA),而 AES 基本可以保留——只需把 AES-128 升级到 AES-256 即可。混合加密的”骨架”不变,变的只是”递钥匙”那一步换成格密码(如 ML-KEM/Kyber)。

回到我们的标题:RSA 只用来”递钥匙”,真正加密消息的却是 AES。

这句话背后是密码学工程师们几十年摸索出来的智慧——让非对称算法去解决它最擅长的事(在公开信道上安全地协商秘密),让对称算法去干它最擅长的活(以硬件级速度批量加密数据)。​ 任何一方单独上都不行:RSA 单干太慢且长度受限,AES 单干解决不了密钥分发。

下次当你在浏览器地址栏看到那把小锁时,希望你想起:在那毫秒级的 TLS 握手背后,一场”非对称递钥匙、对称运货”的精密接力刚刚完成,而这场接力,守护着你每一次点击、每一句聊天、每一笔支付。

这就是现代互联网安全的基本设计。

免责声明:本文部分文字、图片、音视频来源于网络、AI,不代表本站观点,版权归版权所有人所有。本文无意侵犯媒体或个人知识产权,如有异议请与我们联系。