RSA vs ECC:聊聊非对称加密

如果你在互联网上做过任何和安全相关的事情——申请 SSL 证书、配置 SSH 密钥、或者哪怕只是好奇地点开浏览器地址栏那把小锁——你大概率已经和非对称加密打过照面了。而在这个领域里,RSA 和 ECC 是两个绕不开的名字。

上一篇文章我们聊了对称加密算法 AES,今天我们就来聊聊非对称加密

先从”非对称”说起

在正式比较之前,得先把”非对称加密”这件事讲清楚。所谓对称加密,就是加密和解密用同一把钥匙,好比你家的门锁,锁门开门是同一把钥匙。这很直觉,但有个要命的问题:你怎么安全地把钥匙交给对方?尤其是在互联网上,你根本不知道线路的另一头站着谁。

非对称加密的思路就很巧妙了——它用一对钥匙,一把公开(公钥),一把自留(私钥)。公钥加密的东西,只有对应的私钥能解开。你可以把公钥贴满全世界,别人用它给你加密信息,但只有你手里的私钥才能读到内容。这个概念在 1970 年代被提出来的时候,简直是密码学的范式革命。

好,背景交代完了。主角登场。

RSA:那个资历最老的前辈

1977 年,Ron Rivest、Adi Shamir 和 Leonard Adleman 三个人搞出了一种算法,取了他们姓的首字母,叫 RSA。这玩意的数学原理说起来其实不复杂:找两个超级大的质数,把它们乘起来,得到一个巨大的合数。用这个合数做加密很容易,但你要想从这个合数反推出那两个质数?对不起,以目前的算力来看,这件事难到令人绝望。

RSA 的优雅之处就在于它建立在一个极其朴素的数学事实上——大整数分解是困难的。这种简洁让它非常容易理解和实现,也让它在将近五十年的时间里成为了互联网安全的基石。你访问的绝大多数 HTTPS 网站,在过去很长一段时间里都在用 RSA。

但它不是没有问题。

RSA 的安全性和密钥长度直接挂钩。随着计算能力不断提升,曾经够用的 1024 位密钥早已被淘汰,现在行业标准是 2048 位,而要达到 128 位的安全强度,理论上你需要 3072 位的 RSA 密钥。如果你想更安全一点,比如达到 256 位安全强度?那你需要一个 15360 位的密钥。这个长度已经在实际使用中不太现实了——密钥生成慢、加解密慢、传输的数据量也大。

换句话说,RSA 正在遭遇一个”扩展性”的天花板。它就像一台老式的柴油卡车,结实、可靠、经过了充分的考验,但在需要灵活和高效的场景里,它开始显得笨重。

ECC:后来居上的新锐

1985 年,两位数学家 Neal Koblitz 和 Victor S. Miller 各自独立地提出了一个想法:用椭圆曲线来做密码学。这就是 ECC——椭圆曲线密码学。

椭圆曲线听起来很高深,其实核心思路和 RSA 一样,都是找一个”正向计算容易、逆向计算极难”的数学问题。只不过 ECC 用的是椭圆曲线离散对数问题(ECDLP),而不是大整数分解问题。目前已知的最优算法要破解 ECDLP 需要完全指数时间,而破解 RSA 所依赖的整数分解问题”只”需要亚指数时间。这个区别意味着什么?意味着 ECC 可以用短得多的密钥达到和 RSA 同等的安全水平。

具体来说:一个 256 位的 ECC 密钥,安全强度大致相当于一个 3072 位的 RSA 密钥。

你没看错。256 位 vs 3072 位,提供的是几乎相同的安全等级。

这带来的好处是全方位的。密钥短,意味着生成密钥更快、签名和验证更快、加解密更快、传输的数据更少、占用的存储和内存更小。Cloudflare 做过基准测试,在 TLS 握手的场景下,ECC-256 的速度比 RSA-3072 快了 20 到 116 倍,这个差距不是一点半点。

对于资源受限的设备——比如物联网终端、智能卡、嵌入式系统——ECC 几乎是唯一合理的选择。你很难想象一个小小的智能门锁去处理一个 3072 位甚至更长的 RSA 密钥。

那为什么 RSA 还没被淘汰?

既然 ECC 这么好,RSA 怎么还活着?

原因很现实。首先是兼容性。RSA 存在了快五十年,几乎所有系统、库、硬件都支持它,很多老旧的设备和软件可能压根不认识 ECC。其次,RSA 的实现相对简单,出错的余地小。ECC 在实现上更精巧,也意味着更容易踩坑——一个有缺陷的随机数生成器就可能直接泄露私钥。曾经就有过这样的案例:用同一个随机数签名两次,私钥就直接暴露了。

而且,并不是所有的椭圆曲线都是安全的。选择哪条曲线、怎么实现,都有讲究。NSA 曾经推荐过的某些曲线后来被怀疑可能留了后门,这让一部分密码学社区对 ECC 的某些标准曲线持保留态度。

所以在实际世界中,RSA 和 ECC 是共存的。截至目前,像 Google 和 Facebook 这样的大厂用的是 ECC 证书,而 Amazon 和 Apple 的主站则一直在用 RSA。没有谁对谁错,只有适不适合。

说了这么多,直观对比一下:

维度RSAECC
诞生时间1977 年1985 年提出,2000 年代开始广泛使用
数学基础大整数分解椭圆曲线离散对数
128 位安全所需密钥长度3072 位256 位
密钥生成速度较慢(需要大质数生成)极快
签名/验证速度较慢
兼容性极好,几乎全平台支持好,但部分老旧系统不支持
实现难度相对简单更复杂,对实现质量要求高
适用场景通用,尤其是遗留系统移动设备、IoT、高性能 TLS

房间里的大象:量子计算

聊 RSA 和 ECC,不提量子计算就像聊天气不提下不下雨——不完整。

1994 年,Peter Shor 发表了一个量子算法,能够在多项式时间内完成大整数分解和离散对数求解。这意味着一旦有足够强大的量子计算机出现,RSA 和 ECC 都会被瞬间击穿。注意,是”都会”——不光是 RSA,ECC 也在 Shor 算法的射程范围内。实际上,由于 ECC 的密钥本身就短,破解 ECC 所需的量子比特数反而比破解同等安全强度的 RSA 更少。

目前的量子计算机还远远没有达到这个水平。Google 在 2024 年底发布的 Willow 芯片只有 105 个量子比特,而破解 RSA-2048 可能需要数百万个稳定的逻辑量子比特。但是,”现在收割,未来解密”(Harvest Now, Decrypt Later)的威胁是真实存在的——有能力的对手今天就可以拦截并存储加密流量,等到将来量子计算机成熟了再解密。对于需要长期保密的数据,比如政府机密、金融信息、医疗记录,这种威胁不是杞人忧天。

这也是为什么 NIST 从 2016 年就启动了后量子密码学(PQC)标准化项目。2024 年,NIST 正式发布了首批 PQC 标准,包括基于格的 ML-KEM(用于密钥封装)和 ML-DSA(用于数字签名)。这些新算法基于完全不同的数学问题,被认为能够抵抗量子攻击。

换句话说,RSA 和 ECC 的这场比较,某种程度上已经是”经典时代”的讨论了。真正的未来属于后量子密码学。但过渡需要时间——很多很多时间。英国的 NCSC 给出的路线图是从 2028 年开始迁移,到 2035 年完成。美国的 CNSA 2.0 指南也设定了类似的时间表。在这段漫长的过渡期里,RSA 和 ECC 仍然是我们日常安全的支柱。

所以,我该选哪个?

如果你是在 2025 年做一个新项目的技术选型,我的建议很简单:

如果没有特殊的兼容性需求,优先选 ECC。更短的密钥、更快的速度、更低的资源消耗,在几乎所有现代场景下都是更优解。具体曲线的话,NIST P-256(也叫 secp256r1)是最广泛使用的选择,Curve25519 则在很多新兴协议中越来越受欢迎——它的设计哲学就是把实现上容易犯错的地方尽量消除。

如果你需要兼容老旧系统、硬件安全模块、或者某些只认 RSA 的遗留基础设施,那 RSA-2048 仍然是安全的、可靠的选择。没必要因为 ECC 更”新”就一刀切。

如果你处理的是需要长期保密的敏感数据,那就该开始关注后量子密码学了。可以考虑混合方案——在传统的 ECC/RSA 之上叠加一层后量子算法,这样即使其中一种被攻破,另一种仍然提供保护。

写在最后

密码学的有趣之处在于,它永远是一场关于时间的赌注。RSA 赌的是你在可预见的未来没法分解大整数,ECC 赌的是你解不了椭圆曲线上的离散对数,而后量子密码学赌的是某些格上的问题即使量子计算机也搞不定。

每一代算法都曾经被认为是牢不可破的,然后随着数学和计算能力的进步,它的城墙逐渐出现裂缝。这不是某个算法的失败,而是密码学这门学科前进的方式。

RSA 年近半百,仍在服役。ECC 正值壮年,锋芒毕露。而后量子密码学正在候场,准备接过接力棒。

作为普通开发者,我们能做的就是理解这些工具各自的优劣,在当下做出合理的选择,并对未来保持一份清醒的危机感。毕竟在安全这件事上,偏执一点不是坏事。


发布于

分类

作者

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注