4. 车载OTA签名算法选型
车载OTA的签名算法选型,本质上是在“安全强度、验签性能、密钥与签名体积、RAM/Flash占用、实现复杂度”之间做工程取舍。OTA升级包通常由云端私钥签名,车端ECU用预置公钥验签;一旦验签通过,才允许写入或激活新固件。因此,算法选型直接决定了升级包大小、ECU验签耗时、Bootloader代码体积以及长期密钥治理方式。本节围绕ECDSA、EdDSA、RSA-PSS三类主流方案,给出可落地的对比与选型依据。
一、三类算法的基本定位
RSA-PSS基于大整数模幂运算,安全性依赖大数分解难题。它兼容性最好,很多老平台和HSM都支持,但密钥和签名体积大:3072位RSA公钥约384字节,签名也是384字节;验签需要模幂,在低主频MCU上耗时明显。ECDSA基于椭圆曲线离散对数,常用P-256或P-384。P-256公钥仅64字节(未压缩65字节),签名64字节,安全强度约128位,验签主要是点乘和模逆,速度远快于RSA。EdDSA(常用Ed25519)基于扭曲爱德华兹曲线,签名64字节、公钥32字节,安全强度约128位,验签为固定基点点乘加哈希,天然抗侧信道、无需随机数,实现更简洁。
需要强调:三者安全强度不能按密钥长度直接比较。P-256与Ed25519均约128位安全强度,3072位RSA也约128位;2048位RSA约112位,已逐步退出新设计。选型时应先确定目标安全等级,再比较资源开销。
二、性能与资源消耗的工程判断
在典型车规MCU(如Cortex-M4/M7,主频80~300MHz)上,验签耗时量级可作如下合理估算:Ed25519验签约1~3ms,ECDSA P-256约2~5ms,RSA-3072约20~50ms。这些数值随主频、是否带硬件加速、软件库优化程度变化,属于示例量级而非实测结论。对OTA而言,验签发生在Bootloader或安全启动阶段,若单次验签超过100ms,可能影响上电启动时间;若升级包分片验签,则需控制每片验签开销。
资源占用方面,Ed25519与ECDSA的验签代码通常各占10~30KB Flash,RAM峰值约2~8KB;RSA-3072因大数运算,代码和RAM占用更高,Flash约20~50KB,RAM峰值可达8~16KB。对资源紧张的ECU,Ed25519在体积和速度上优势明显。但若ECU已集成支持RSA的HSM或安全库,复用现有信任链可降低集成成本。
三、安全实现的关键差异
ECDSA签名依赖高质量随机数k,若k重复或可预测,私钥可被直接恢复,这是历史上有名的漏洞模式。因此ECDSA签名端必须使用CSPRNG或RFC 6979确定性k。EdDSA(Ed25519)采用确定性签名,私钥经哈希派生,天然规避随机数缺陷,且验签公式统一,抗侧信道设计更友好。RSA-PSS使用随机盐值,盐值长度影响安全证明,验签端需正确实现MGF1和掩码生成,参数配置错误会导致互操作失败。
在OTA场景中,验签端通常只持有公钥,私钥在云端或签名服务器。因此车端更关注验签性能与公钥存储,签名端更关注密钥保护与随机数质量。若云端HSM仅支持RSA,则车端可能被迫选择RSA-PSS;若云端支持Ed25519,则车端可享受更小体积和更快验签。
四、选型决策表(可直接参考)
| 场景条件 | 推荐算法 | 理由 |
|---|---|---|
| 新平台、MCU资源紧张、追求快速验签 | Ed25519 | 签名/公钥最小,验签快,确定性签名无随机数风险 |
| 需与现有TLS/HSM/PKI生态对齐 | ECDSA P-256 | 兼容性好,证书链成熟,性能可接受 |
| 老平台仅支持RSA,或已有RSA信任根 | RSA-PSS 3072 | 兼容性最强,但体积大、验签慢,需评估启动时间 |
| 安全等级要求高于128位 | ECDSA P-384 或 Ed448 | 提升安全强度,但体积和耗时增加,需权衡 |
五、落地建议与验证要点
实际选型时,建议先在目标ECU上做基准测试:固定输入消息,分别测量Ed25519、ECDSA P-256、RSA-3072的验签耗时、代码体积和RAM峰值。测试应覆盖冷启动和热启动,因为Bootloader阶段缓存未生效,耗时可能更高。同时验证签名格式与OTA包封装是否匹配,例如Ed25519签名固定64字节,可直接拼接在固件尾部;RSA-3072签名384字节,需考虑包体对齐和传输分片。
综上,EdDSA在车载新设计中综合优势最明显,ECDSA是兼容性与性能的平衡选择,RSA-PSS则更多用于存量平台兼容。选型不是单纯比速度,而是结合安全等级、平台能力、云端签名设施和长期密钥治理共同决定。建议在项目早期就完成算法基准测试和信任根设计,避免后期因验签耗时或体积超限而返工。