椭圆曲线签名的风险主要来自实现和使用,而不是数学本身:私钥不够随机、ECDSA 签名随机数重复或有偏差、算法库被误用、设备通过耗时和功耗泄露信息,都可能让攻击者算出私钥。此外,签名可延展性会干扰业务系统,量子计算则是长期威胁。
私钥随机数不足会带来什么风险?
私钥无法被穷举的前提,是它从接近 2²⁵⁶ 个可能值中均匀随机地选出。如果随机源只有 32 位熵,攻击者只需尝试约 43 亿次,普通显卡就能完成。
靓号工具 Profanity 就用了 32 位种子,Wintermute 因此损失约 1.6 亿美元;某款硬件钱包历史固件的随机源出错,导致约 594.5 BTC 被转走。两起事件中算法都没有被破解,地址看起来也完全正常,只是私钥的取值范围被悄悄缩小了。
ECDSA 签名随机数为什么不能重复或泄露?
ECDSA 的签名公式是 s = k⁻¹ × (z + r × d),其中只有一次性随机数 k 和私钥 d 是未知的。知道了 k 就能直接解出 d;同一私钥两次签名用了同一个 k,两个签名的 r 会相同,任何人都能从链上发现并解出私钥。即使 k 不重复,只要取值有统计偏差,收集足够多签名后也能用格攻击恢复私钥。
通行的对策是按 RFC 6979 从私钥和消息确定性地推导 k,不再依赖运行时随机数;Ed25519 等 EdDSA 方案在设计上就是这样做的。
算法库的实现和调用会出什么问题?
算法本身没问题,接口设计或调用方式也可能泄露私钥。例如部分 Ed25519 算法库允许调用者单独传入公钥,攻击者让同一条消息用不同公钥各签一次,就能提取私钥。又如密钥协商时不校验对方公钥是否在曲线上,攻击者可以发送“弱曲线”上的点逐步套出私钥,即无效曲线攻击。“用了标准算法”不等于“安全地用了标准算法”。
什么是侧信道攻击?
侧信道攻击不破解算法,而是观察设备运算时的耗时、功耗或电磁辐射。如果标量乘法在私钥某位为 1 时多做一次点加,这些信号就会随私钥变化,测量足够多次就可能还原私钥。故障注入则是用电压毛刺、激光等手段让芯片算错,再对比错误签名推算密钥。这类攻击通常需要物理接触,即使是可信执行环境也并非绝对安全,TEE.fail 等研究就是例子。应对方法是常量时间实现加上硬件防护。
什么是签名可延展性?
对 ECDSA 来说,如果 (r, s) 是有效签名,(r, n − s) 也有效,任何人都能改。它不泄露私钥,也改不了金额和地址,但会改变交易字节。比特币早期的交易 ID 包含签名,第三方能在确认前改变 ID,只按原 ID 追踪的提现系统可能误判失败并重复打款。比特币后来用低 S 值规则和 2017 年的 SegWit 解决了这个问题,以太坊也强制要求低 S 值。
但智能合约和业务系统自己验签时仍可能忽略这点。用“签名是否用过”来防重放的合约,可以被换一个等价签名绕过,应改用消息内容加递增序号来防重放,并拒绝高 S 值签名。
量子计算会让椭圆曲线签名失效吗?
长期看会。Shor 算法在足够大的量子计算机上可以高效求解椭圆曲线离散对数,公钥已暴露的地址都可能被推算出私钥。Google 量子白皮书把破解 256 位曲线所需的物理量子比特估算到了 50 万个以下,但Willow 等现有量子芯片远未达到这一规模。企业现在能做的是减少地址复用,关注公链的抗量子升级计划。
企业怎样降低椭圆曲线签名的风险?
一是密钥生成只用经过验证的随机源,不用来路不明的工具。二是使用经过审计的密码库,采用确定性签名随机数和常量时间实现,校验所有输入。三是不让完整私钥集中在任何一台设备上,用 MPC 把私钥拆成分片分散保管,单点被攻破也转不走资产。四是用白名单、金额限制和多人审批控制“这一笔该不该签”。
结语
椭圆曲线签名的风险集中在随机数、算法库、设备和业务系统这些细节上。企业改变不了公链的曲线,但可以决定私钥怎样生成、存在哪里、按什么规则签名。Safeheron 的 MPC 钱包即服务为企业提供 MPC 密钥管理和策略引擎。
想让每一次链上签名都更安全可控? 联系 Safeheron 销售团队,预约一对一演示