AES vs RSA:对称与非对称加密的取舍
深入对比 AES 与 RSA 加密算法:对称 vs 非对称原理、密钥长度、性能差异(AES 快 1000 倍)、为什么 HTTPS 用混合加密、TLS 握手流程、量子计算威胁、NIST 抗量子算法。
加密是现代网络安全的基石。无论是网银转账、密码登录还是 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 模式甚至允许在完成握手前发送数据。这显著提升了连接建立速度,特别是高延迟网络环境。