加密算法性能对比:AES、RSA、ECC等
讲并发与吞吐,绕不开加密算法的选型。很多人以为选算法只看安全强度,结果上线后吞吐直接腰斩。我今天就拿三种最常用的算法——AES、RSA、ECC——掰开揉碎讲清楚它们的性能底牌。
对称加密:AES的速度优势
AES是目前对称加密的工业标准。它用同一个密钥加密和解密,硬件指令集(比如Intel的AES-NI)让它的速度非常漂亮。我曾在某支付网关项目里测过,单核每秒能跑超过2GB的数据流。你想想看,这个量级在RSA、ECC面前几乎是碾压的。
| 算法 | 密钥长度 | 加密吞吐(1KB块,单核) | 典型延迟 |
|---|---|---|---|
| AES-128 | 128 bit | 约2.1 GB/s | 亚微秒级 |
| AES-256 | 256 bit | 约1.8 GB/s | 微秒级 |
| RSA-2048 | 2048 bit | 签名约5万次/s,验签约2万次/s | 毫秒级 |
| ECC-256(secp256r1) | 256 bit | 签名约15万次/s,验签约11万次/s | 亚毫秒级 |
不过AES有个死穴:密钥分发。两边得事先约定同一个密钥,这在开放网络里几乎不可能。
非对称加密:RSA与ECC的对比
RSA和ECC解决了密钥分发问题,但代价是性能。RSA依靠大数分解,ECC依靠椭圆曲线离散对数。其实ECC在相同安全强度下比RSA快得多,而且密钥短。我记得有一次帮客户优化TLS握手,把RSA-2048换成ECC-256(X25519),握手机制耗时直接降了70%。
| 对比维度 | RSA-2048 | ECC-256(secp256r1) |
|---|---|---|
| 密钥尺寸 | 2048 bit | 256 bit |
| 同等安全强度 | 大约112 bit | 128 bit |
| 签名速度 | 慢(约5000次/秒) | 中(约15万次/秒) |
| 验签速度 | 极慢(约2000次/秒) | 中(约11万次/秒) |
| 密钥生成 | 慢(秒级) | 极快(毫秒级) |
| 典型应用 | 旧系统、证书 | 新协议(如TLS 1.3、区块链) |
为什么ECC更快?它的数学运算在有限域上,乘法和点加都是轻量级。而RSA的大整数幂模运算,一次就要几千bit的乘法,硬件加速也救不了。
混合加密的实战组合
真正常见的生产模式是“混合加密”。流程大致如下:
- 客户端生成一个临时AES密钥(比如256bit)。
- 用服务端的公钥(RSA或ECC)加密这个AES密钥,发送过去。
- 服务端用私钥解密,得到AES密钥。
- 后续所有数据都用AES对称加密传输。
这样一来,性能开销集中在第一次握手(非对称),后续海量数据都走AES线速通道。我建议把非对称算法只用于密钥交换,ECC-256做ECDH,然后派生AES-256-GCM密钥——这个模式在TLS 1.3里已经是标准了。
性能测试方法
光看理论数字不直观,在真实环境里最好自己压测。我是用一套模板来测的:
# 简单压测思路(伪代码)
for each algorithm in [AES-256-GCM, RSA-2048, ECC-256]:
setup context (key pair or key)
start = now()
for i in 1..N:
if algorithm == AES:
encrypt(1KB plaintext)
else:
sign(1KB hash) # 非对称只测签名
elapsed = now() - start
throughput = N / elapsed
print(algorithm, throughput)
你可以在自己的服务器上用openssl speed命令快速出数据:
# 查看系统自带的性能
openssl speed aes-256-cbc rsa2048 ecdh
嗯,这里要注意:openssl的测试用的是固定样本,可能和你的业务模式有偏差。我习惯写一个微基准测试,跑100万次,取中位数和百分位。
一张图看清性能与安全的关系
下面这张图我把三种算法放在同一个坐标系里:横轴是安全强度(等效对称密钥bit),纵轴是相对吞吐(取对数)。你可以看到AES在右上角,RSA在左下角,ECC夹在中间但更靠近AES。
从图中能直观看到:ECC在128bit安全强度下吞吐比RSA高一个数量级,而AES在256bit强度下仍然保持最高吞吐。这就是为什么现代系统都优先ECC做密钥交换,AES做数据加密。
总结:选型清单
| 场景 | 推荐算法 | 理由 |
|---|---|---|
| 大量数据加密(如文件、消息流) | AES-256-GCM | 高吞吐、硬件加速、自带认证 |
| 密钥交换 / 签名 | ECC-256 (X25519, secp256r1) | 速度快、密钥短、安全等级充足 |
| 兼容旧系统 / 证书续期 | RSA-2048 | 生态成熟,但尽量迁移到ECC |
| 高安全、低吞吐可接受 | ECC-521 或 AES-256 + 混合 | 量子计算威胁未到时够用 |