在线工具集

AES vs RSA:对称与非对称加密的取舍

深入对比 AES 与 RSA 加密算法:对称 vs 非对称原理、密钥长度、性能差异(AES 快 1000 倍)、为什么 HTTPS 用混合加密、TLS 握手流程、量子计算威胁、NIST 抗量子算法。

📅 发布于 2026-04-29 · ⏱ 约 15 分钟阅读

加密是现代网络安全的基石。无论是网银转账、密码登录还是 HTTPS 网页访问,背后都离不开加密算法。但你可能听过 AES、RSA、ECDHE 等名词,却不清楚它们的区别、为什么要用两种加密方式、性能差异有多大。本文将深入探讨对称加密(AES)与非对称加密(RSA)的原理、应用场景、性能对比,以及 HTTPS 如何巧妙地结合两者,并面对量子计算的新挑战。

1. 对称加密:AES 的原理与应用

什么是对称加密?

对称加密是指加密和解密使用同一个密钥的加密方式。发送者用密钥 K 加密明文,接收者用同一个密钥 K 解密。这就像一个共享的保险箱钥匙——只要握着这把钥匙,谁都可以打开。

对称加密的历史悠久。最著名的例子是凯撒密码(Caesar Cipher),每个字母按固定偏移量替换。现代对称加密则使用复杂的数学运算,确保在没有密钥的情况下无法破解。

AES(高级加密标准)

AES(Advanced Encryption Standard)是目前最广泛使用的对称加密算法,由 Rijndael 算法发展而来,2001 年被美国 NIST 正式采纳为联邦加密标准。AES 有三个版本:

  • AES-128 — 128 比特密钥,56 十亿年暴力破解时间
  • AES-192 — 192 比特密钥
  • AES-256 — 256 比特密钥,被认为抗量子计算

AES 的安全性基于替换和排列(S-box 和行混合)的复杂迭代,每个版本进行 10~14 轮加密。目前没有已知的有效攻击方法。

对称加密的优缺点

优点:

  • 速度快(比非对称加密快 1000 倍以上)
  • 算法成熟、被广泛验证
  • 密钥短(AES-256 只需 32 字节)
  • 适合大文件加密

缺点:

  • 密钥分配困难——如何安全地交换密钥?
  • 每个通信对方都需要不同的密钥,密钥管理复杂
  • 无法实现数字签名

2. 非对称加密:RSA 与椭圆曲线

非对称加密的革命

非对称加密(也叫公钥加密)使用一对密钥:公钥(Public Key)和私钥(Private Key)。公钥公开分享,私钥保密。任何人可用公钥加密,但只有私钥持有者能解密。这解决了对称加密的密钥分配难题。

非对称加密由 Diffie、Hellman 和 Merkle 在 1976 年首次提出,RSA 是最著名的实现。这是密码学中的里程碑,被誉为"单向陷阱函数"——易于加密,难于解密。

RSA:基于大数因数分解

RSA 的安全性基于一个数学事实:将两个大质数相乘很容易,但将结果分解回原始质数极其困难(这是经典计算机的难题)。

RSA 密钥生成流程:

1. 选择两个大质数 p 和 q 2. 计算 n = p × q 3. 计算欧拉函数 φ(n) = (p-1) × (q-1) 4. 选择公钥指数 e(通常为 65537) 5. 计算私钥指数 d(满足 e × d ≡ 1 mod φ(n)) 6. 公钥:(e, n),私钥:(d, n)

加密:密文 = 明文^e mod n;解密:明文 = 密文^d mod n。

ECDHE:椭圆曲线的优势

ECDHE(Elliptic Curve Diffie-Hellman with Ephemeral)基于椭圆曲线离散对数问题。与 RSA 相比:

  • ECDHE-256 的安全强度等同于 RSA-3072,但密钥更短,计算更快
  • 支持前向保密(Forward Secrecy)——每次握手生成临时密钥对,即使服务器私钥泄露,过去的会话也无法解密
  • 现代浏览器和服务器优先使用 ECDHE

3. 密钥长度对比:为什么不一样?

经常看到 AES-256 和 RSA-2048 或 RSA-4096 并列,你可能疑惑:256 比 2048 小得多,为什么安全性相当?

密钥强度不是简单比较长度

安全强度的衡量单位是"比特安全强度"(Bits of Security),表示破解所需的平均工作量为 2^n。

  • AES-128 = 128 比特安全强度
  • AES-192 = 192 比特安全强度
  • AES-256 = 256 比特安全强度
  • RSA-2048 = 约 112 比特安全强度
  • RSA-3072 = 约 128 比特安全强度
  • RSA-4096 = 约 150 比特安全强度
  • ECDHE-256 = 约 128 比特安全强度

原因:RSA 的安全性基于整数因数分解的数学难度,不能线性扩展。而 AES 的安全性是指数级的——每增加 1 比特密钥,破解难度就翻倍。

推荐的密钥长度

根据 NIST 2023 指南:

  • 2023 年及以后,不应使用 RSA-2048 用于新系统
  • 推荐 RSA-3072+ 或 ECDHE-256+
  • 数据长期保护(超过 50 年)推荐 AES-256 或 RSA-4096

4. 性能差异:AES 比 RSA 快 1000 倍

这是为什么 HTTPS 不能只用 RSA 的关键原因。让我们用实际数据来说话。

单位加密速度(1MB 数据)

在现代硬件上(Intel i7 处理器):

  • AES-256(CBC 模式) — 约 500 MB/s
  • AES-256(GCM 模式,硬件加速) — 约 2000 MB/s
  • RSA-2048 加密 — 约 0.3 MB/s
  • RSA-2048 解密 — 约 0.015 MB/s

结论:AES 比 RSA 快 1500~13000 倍。

实际网页传输的影响

假设用 RSA-2048 加密 1MB 的网页:

  • 加密时间:~3 秒
  • 解密时间:~67 秒
  • 总延迟:~70 秒

如果用 AES-256:

  • 加密时间:~2 毫秒
  • 解密时间:~2 毫秒
  • 总延迟:~4 毫秒

差别显而易见。用 RSA 加密网页会让网络完全不可用。

5. HTTPS 混合加密:为什么不只用 RSA?

既然 AES 速度远快于 RSA,为什么还要用 RSA?这是因为 AES 有一个致命缺陷:密钥分配问题

密钥分配难题

想象你和朋友要用 AES 加密信息。你们需要一个共享密钥。但这个密钥必须通过某种方式传达给对方——问题是,如何安全地传递这个密钥,确保没有人在途中看到?如果明文发送密钥,那就前功尽弃了。

在 HTTPS 出现前,银行等机构的解决方案是:员工面对面交付钥匙,或用快递人工送达。这显然不适合互联网。

混合加密方案

HTTPS 的天才之处在于混合加密:

步骤 1:客户端获取服务器的 RSA 公钥 ↓ 步骤 2:客户端生成随机的 AES 会话密钥 ↓ 步骤 3:客户端用服务器的 RSA 公钥加密这个 AES 密钥 ↓ 步骤 4:客户端发送加密后的 AES 密钥到服务器 ↓ 步骤 5:服务器用 RSA 私钥解密,获得 AES 密钥 ↓ 步骤 6:双方都用 AES 密钥加密后续通信(高速)

这样做的好处:

  • RSA 仅用于握手阶段(通常只有几秒钟),时间成本可接受
  • 数据传输用高速的 AES,不影响用户体验
  • RSA 的公钥可以公开发布,任何人都能用它加密(发送方安全)
  • 每次连接都可以生成新的 AES 密钥(会话密钥),增强安全性

为什么不用 ECDHE 而用 RSA?

现代 HTTPS(TLS 1.3)实际上已经主要用 ECDHE 而不是 RSA 做密钥交换。RSA 密钥交换在 TLS 1.3 中已被移除。ECDHE 优势:

  • 前向保密(Forward Secrecy)——即使服务器私钥泄露,过去的会话不被破解
  • 更快的性能
  • 更强的安全属性

6. TLS 握手流程详解

TLS 1.2 握手(4 个往返)

这是传统 HTTPS 的握手过程:

客户端 → 服务器:ClientHello - 支持的 TLS 版本、密码套件、椭圆曲线 服务器 → 客户端:ServerHello + Certificate + ServerKeyExchange - 选择 TLS 版本和密码套件 - 发送证书(包含公钥)和临时公钥参数 客户端 → 服务器:ClientKeyExchange + Finished - 发送客户端临时公钥或加密的预主密钥 - 计算会话密钥并发送加密 Finished 消息 服务器 → 客户端:Finished - 确认握手完成,开始加密通信

TLS 1.3 握手优化(1 个往返)

TLS 1.3 在 2018 年标准化,大幅优化了握手流程:

客户端 → 服务器:ClientHello - 包含支持的密码套件和密钥共享参数 服务器 → 客户端:ServerHello + Finished - 选择参数并立即计算会话密钥 - 发送加密后的 Finished 消息

TLS 1.3 的改进:

  • 握手时间从 2 个 RTT 降至 1 个 RTT(通常快 50% 以上)
  • 0-RTT 模式允许客户端在握手完成前发送数据(需要小心重放攻击)
  • 移除了不安全的密码套件(如 RSA 密钥交换)
  • 强制 AEAD 加密(关联数据认证加密,如 AES-GCM)

7. 量子计算威胁与 NIST PQC

量子计算如何威胁加密?

量子计算机利用量子叠加和纠缠的特性,能以指数级速度解决某些问题。最著名的是 Shor 算法(1994 年),可在多项式时间内破解 RSA 和椭圆曲线加密。

对 AES 的威胁较弱。Grover 算法可将 AES 的安全强度减半(AES-256 → AES-128 等效),但仍需要 2^128 次操作,对现实威胁有限。

量子威胁时间线: 2030~2035 年左右,有 50% 概率出现能破解 RSA-2048 的量子计算机。这意味着大多数现在加密的数据将面临回溯解密风险(Harvest Now, Decrypt Later 攻击)。

NIST 后量子加密(PQC)标准化

NIST 在 2022 年发布了首批后量子加密标准(FIPS 203/204/205):

  • ML-KEM(密钥封装机制)— 基于格加密(Lattice),用于密钥交换
  • ML-DSA(数字签名)— 基于格加密,用于身份认证
  • SLH-DSA — 基于哈希的签名,替代方案

这些算法基于数学难题(格论、哈希),在量子计算机面前仍然难以破解。

混合过渡策略

从 RSA 迁移到后量子加密需要时间。推荐的过渡方案:

  • 现在 — 使用 ECDHE-256 做密钥交换(比 RSA-2048 安全)
  • 2024~2025 — 在 TLS 中同时支持 ECDHE 和 ML-KEM(混合)
  • 2026~2030 — 逐步主要依赖 ML-KEM
  • 数据安全 — 对已加密数据,立即升级到 AES-256 和后量子签名

8. 实战指南:选择合适的加密方案

场景 1:HTTPS 服务器配置

推荐配置(2026 年):

  • 密钥交换:ECDHE-X25519 或 ECDHE-P256
  • 数据加密:AES-128-GCM 或 ChaCha20-Poly1305
  • 签名证书:RSA-3072 或 ECDSA P-256(短期内);未来迁移到 ML-DSA
  • TLS 版本:1.3 及以上

场景 2:敏感数据长期加密

如医疗记录、财务数据需要加密 30+ 年:

  • 使用 AES-256-GCM
  • 密钥交换:ML-KEM(后量子,已有参考实现)或 AES-KW 包装
  • 签名:ML-DSA(确保来源真实性)

场景 3:移动 App 加密

推荐:

  • 使用原生 TLS(系统 HTTPS 库)而非自定义加密
  • 不要自行管理密钥——让系统 Keychain(iOS)或 KeyStore(Android)管理
  • 对敏感数据额外用 AES-256 客户端加密

避免的做法

  • 不使用 RSA-1024 或更短密钥(已被破解)
  • 不用 ECB 模式(AES-ECB 不安全)
  • 不自行实现加密算法(除非你是密码学家)
  • 不混合 MD5 和 AES(MD5 已破裂,用于完整性检查不安全)
  • 不硬编码密钥到代码

常见问题

为什么 HTTPS 不只用 RSA 而要用 AES?

RSA 加密速度太慢(比 AES 慢 1000 倍以上),不适合加密大量数据。HTTPS 的方案是:用 RSA 只交换密钥(握手时一次性),然后用 AES 加密后续的网页数据(高速)。这种混合方案兼顾了安全性和性能。

密钥长度为什么不一样?AES-256 vs RSA-2048?

AES-256 和 RSA-2048 提供不同安全强度的原因是算法性质。RSA 的安全基于因数分解难题,而 AES 基于替换排列。RSA 需要更长的密钥。一般规则:RSA-2048 ≈ AES-128 安全强度;RSA-3072 ≈ AES-192;RSA-4096 ≈ AES-256。

ECDHE 比 RSA 密钥交换更好吗?

是的。ECDHE 在安全性和性能上都优于 RSA。ECDHE-256 的安全强度等同于 RSA-3072,但计算更快,密钥更短。ECDHE 还支持前向保密:即使服务器私钥泄露,过去的会话密钥仍无法被解密。现代 HTTPS(TLS 1.3)优先使用 ECDHE。

量子计算会破坏 AES 和 RSA 吗?

量子计算对 RSA 威胁更大。Shor 算法可在多项式时间内破解 RSA,但对 AES 威胁有限(仅降低一半强度:AES-256 → AES-128 等效)。NIST 正标准化后量子加密(ML-KEM、ML-DSA),基于格加密,抗量子。采用 PQC 是防守量子威胁的长期方案。

为什么需要数字签名(RSA/ECDSA)?

数字签名用于身份认证和完整性校验。服务器用私钥签名,客户端用公钥验证。这防止了中间人攻击:即使攻击者截获通信,也无法伪造有效的签名。HTTPS 中的 SSL 证书包含服务器公钥,CA 用自己的私钥签名这个证书。

TLS 1.3 相比 TLS 1.2 如何优化了握手?

TLS 1.3 将握手从 2 个往返(RTT)降至 1 个 RTT。它在 ClientHello 中直接发送密钥共享参数,服务器可立即计算会话密钥。0-RTT 模式甚至允许在完成握手前发送数据。这显著提升了连接建立速度,特别是高延迟网络环境。