4. 签名算法选型

好,咱们进入实战流程里最核心的决策环节——选签名算法。

说实话,我见过不少团队,一上来就拍脑袋说“用RSA 2048吧,大家都这么用”。嗯,这确实没错,但未必是最优解。你想想看,你的MCU只有几百KB的Flash,主频才几十兆赫,RSA验签一次要几百毫秒,用户开机等得起吗?

所以今天咱们把RSA和ECDSA掰开揉碎了聊。我会结合我在几个量产项目里的踩坑经历,帮你做这个选择。

4.1 RSA vs ECDSA:核心差异

先看一张对比表,一目了然:

对比维度RSAECDSA
数学基础大整数分解椭圆曲线离散对数
密钥长度(等效安全强度)2048位(112位安全)256位(128位安全)
签名速度慢(私钥操作)快(私钥操作)
验签速度快(公钥操作)慢(公钥操作)
签名体积与密钥等长(256字节@2048位)较短(64字节@256位)
硬件加速支持广泛(很多MCU内置RSA引擎)较少(高端芯片才有)

看到这里你可能会问:“那到底选哪个?”

我的经验是——看你的瓶颈在哪。

核心原则:
- 如果固件升级频繁,且MCU性能较弱 → 优先考虑ECDSA(签名生成快,但验签慢)
- 如果验签是高频操作(比如每次启动都验) → RSA可能更合适(验签快)
- 如果签名体积敏感(比如BLE OTA) → ECDSA胜出(签名短)

4.2 密钥长度选择:别盲目追求“越大越安全”

我遇到过一位客户,上来就说“我要RSA 4096,绝对安全”。我问他:“你的MCU主频多少?”他说80MHz。我说:“那你每次启动要等1.2秒验签,用户不骂你才怪。”

其实,安全强度不是线性增长的。RSA 2048位提供112位安全强度,RSA 4096位只提升到128位,但计算量翻了4倍。你想想看,这性价比高吗?

我个人习惯的推荐:

  • RSA 2048位:当前工业界主流,足够应对2030年之前的威胁
  • RSA 4096位:除非有合规要求(比如某些政府项目),否则不推荐
  • ECDSA P-256(secp256r1):我最常用的选择,128位安全强度,签名仅64字节
  • ECDSA P-384:面向未来,但验签开销明显增加
我的避坑建议:
我曾经在一个IoT项目里选了ECDSA P-521,结果发现MCU的硬件加速器不支持这么长的曲线,纯软件验签花了3秒多。后来乖乖换回P-256,验签降到120ms。所以——先查你的芯片支持什么,再选曲线。

4.3 性能与安全性权衡:实战中的取舍

咱们用一张流程图来梳理决策逻辑:

签名算法选型决策流程 开始选型 MCU有硬件加速器? (查芯片手册) 是 推荐RSA 2048 否 签名体积敏感? (OTA/存储限制) 是 推荐ECDSA P-256 否 验签频率高? (每次启动都验) 是 推荐RSA 2048 否 推荐ECDSA P-256

这张图是我在实际项目中总结出来的。你看,硬件加速器是第一个分水岭。如果你的MCU内置了RSA引擎(比如STM32L4系列),那RSA验签可以做到几十毫秒,这时候选RSA完全没问题。

但如果没有硬件加速,纯软件跑RSA 2048验签,在Cortex-M4上大概要200-400ms。而ECDSA P-256纯软件验签,大概在100-200ms。这时候ECDSA反而有优势。

⚠️ 重要提醒:
ECDSA的签名生成(私钥操作)比RSA快很多,但验签(公钥操作)比RSA慢。如果你的场景是“服务器签名一次,设备验签无数次”,那RSA的验签速度优势就很明显。反过来,如果是“设备之间互相签名验证”,ECDSA更合适。

4.4 实战中的密钥长度选择建议

我直接给结论,你照着选就行:

  • 普通IoT设备(MCU < 200MHz):ECDSA P-256,签名64字节,验签约150ms
  • 高性能设备(MCU > 200MHz 或带硬件加速):RSA 2048,验签可做到20ms以内
  • 车载/工业(合规要求高):RSA 3072 或 ECDSA P-384,但要做好性能预算
  • BLE OTA(签名体积敏感):ECDSA P-256,签名仅64字节,比RSA 2048的256字节小4倍

嗯,这里要注意一点——密钥长度不是越高越好。我曾经见过一个项目,用了RSA 4096,结果每次OTA升级要等2分钟签名验证,用户直接投诉。后来降到2048,安全强度只降了一点点,但体验好了10倍。

4.5 我的最终建议

如果你现在让我选,我会说:

默认选ECDSA P-256。除非你有明确的理由(比如硬件加速器只支持RSA,或者合规要求必须用RSA),否则ECDSA在签名体积、密钥生成速度、未来扩展性上都更优。

而且,你看NIST和各大安全机构的最新推荐,都在往椭圆曲线迁移。RSA虽然还没被淘汰,但2048位以下的RSA已经不被推荐了。

一句话总结:
选算法不是选“最安全的”,而是选“最适合你硬件平台的”。ECDSA P-256是当前嵌入式固件签名的“黄金标准”。

好了,这一节的内容就到这。下一节咱们会聊签名密钥的生成与管理——这可是个容易踩坑的地方,我到时候给你讲讲我丢过私钥的惨痛经历。