4、签名算法详解:RSA、ECDSA、Ed25519 对比

签名算法是安全升级的「守门员」。选错了,整个升级链路就是纸糊的。

今天咱们把三个主流算法——RSA、ECDSA、Ed25519——掰开揉碎讲清楚。我会结合自己踩过的坑,告诉你什么场景该选谁。

4.1 RSA 签名算法:老牌劲旅,但有点「重」

RSA 诞生于 1977 年,至今仍是工业界最通用的签名方案。它的核心原理基于大整数分解难题——两个大素数相乘容易,但反过来分解极难。

核心特点:

  • 支持签名和加密两种用途
  • 密钥对生成:随机选两个大素数 p、q,计算 n = p × q
  • 签名过程:对消息哈希做私钥指数运算
  • 验签过程:用公钥指数运算恢复哈希并比对

我在一个 IoT 项目里用过 RSA-2048。当时觉得 2048 位够安全了,结果发现设备每次签名要算 5 秒——用户等得直骂娘。后来才明白,RSA 的私钥操作(签名)比公钥操作(验签)慢得多。

参数 RSA-2048 RSA-4096
公钥长度 256 字节 512 字节
签名长度 256 字节 512 字节
签名速度(相对) 慢 非常慢
验签速度(相对) 快 中等
安全等级 112 位 128 位

避坑指南:我曾经见过有人用 RSA-1024 做固件签名。NIST 早在 2013 年就禁止了 1024 位 RSA。别省那点计算资源,至少上 2048。

4.2 ECDSA 签名算法:更小的密钥,更高的性能

ECDSA(椭圆曲线数字签名算法)是 RSA 的现代替代者。它基于椭圆曲线离散对数难题——在曲线上找一个点很容易,但反推私钥几乎不可能。

说白了,ECDSA 用更短的密钥达到了和 RSA 同等的安全强度。256 位的 ECDSA 密钥 ≈ 3072 位的 RSA 密钥。

对比项 RSA-2048 ECDSA P-256
公钥长度 256 字节 32 字节
签名长度 256 字节 64 字节
签名速度 慢 快
验签速度 快 快
密钥生成速度 慢 极快

ECDSA 有个坑——它依赖高质量的随机数。如果随机数生成器出问题,私钥可能被恢复。2010 年索尼 PS3 的签名密钥泄露,就是因为用了固定的随机数 k。

我的建议:在嵌入式设备上用 ECDSA,一定要确认硬件随机数生成器(TRNG)的质量。如果 TRNG 不可靠,宁可用 Ed25519。

4.3 Ed25519 签名算法:现代、安全、快

Ed25519 是 Edwards 曲线数字签名算法的一种实现。它基于 Curve25519,由 Daniel J. Bernstein 设计。我个人非常喜欢这个算法——它几乎把 RSA 和 ECDSA 的缺点全解决了。

Ed25519 的优势很明显:

  • 固定时间执行:没有侧信道攻击风险
  • 签名短:只有 64 字节
  • 公钥短:只有 32 字节
  • 签名快:比 ECDSA 快 2-3 倍
  • 抗碰撞:哈希函数内建在算法中

性能对比(签名 1000 次,单位毫秒):

  • RSA-2048:约 850 ms
  • ECDSA P-256:约 120 ms
  • Ed25519:约 45 ms

我在一个高并发签名服务里换掉了 RSA,改用 Ed25519。原来 8 台服务器才能扛住的流量,换完后 2 台就够了。你想想看,这差距有多大。

4.4 三剑客终极对比

下面这张表是我自己整理的选型参考,每次做架构评审都拿出来对照:

维度 RSA-2048 ECDSA P-256 Ed25519
公钥长度 256 B 32 B 32 B
签名长度 256 B 64 B 64 B
签名速度 慢 快 极快
验签速度 快 快 极快
侧信道防护 需额外实现 需额外实现 内建
随机数依赖 低 高 低
标准化程度 极高 高 中
适用场景 兼容性优先 通用场景 性能/安全优先

4.5 选型建议:我踩过的坑和总结

嗯,这里要注意——没有银弹。每个算法都有自己的脾气。

  • 选 RSA:如果你的系统需要兼容 10 年前的设备,或者必须支持加密+签名双用途。但别用 1024 位,至少 2048。
  • 选 ECDSA:通用场景,密钥短、速度快。但一定要确保随机数质量,否则私钥可能裸奔。
  • 选 Ed25519:新项目首选。性能好、安全、实现简单。我现在的所有新项目都默认用 Ed25519。

我曾经踩过的坑:在一个车联网项目里,我选了 ECDSA P-256。结果某批次设备的随机数生成器有 bug,导致签名可预测。还好在测试阶段发现了,不然后果不堪设想。从那以后,只要条件允许,我优先用 Ed25519。

最后说一句:签名算法只是安全升级的一环。密钥管理、证书链、安全存储同样重要。但算法选对了,地基就稳了。

签名算法选型决策流程 选择签名算法 需要兼容旧设备/加密+签名? 是 否 RSA-2048 兼容性优先 随机数生成器可靠? (硬件 TRNG 或高质量熵源) 是 否 ECDSA P-256 通用场景 Ed25519 安全/性能优先 提示:新项目默认选 Ed25519;需要兼容旧系统选 RSA;随机数可靠且需标准化选 ECDSA 无论选哪个,密钥长度和安全等级必须满足当前及未来 5 年的安全要求