ECDSA 安全漏洞深度解析:从非 ce 泄露到密钥恢复实战
DSA 基础入门
ECDSA 是基于椭圆曲线群的数字签名算法(DSA)变种。DSA 包含三个核心算法:
密钥生成:随机选择私钥 x∈ℤq,计算公钥 y=gˣ mod p
签名生成:对消息 m,选择随机 nonce k,计算:
r = (gᵏ mod p) mod q
s = k⁻¹(H(m)+xr) mod q
签名验证:检查 r = (gᴴ⁽ᵐ⁾yʳ)ˢ⁻¹ mod p mod q
ECDSA 的特殊性
ECDSA 与 DSA 的核心区别在于使用椭圆曲线群而非乘法群:
公钥 y=gˣ变为椭圆曲线点
r 值取椭圆曲线点 gᵏ的 x 坐标
验证时计算椭圆曲线点(gᴴ⁽ᵐ⁾yʳ)ˢ⁻¹的 x 坐标
非 ce 重用导致密钥泄露
若两个签名使用相同 nonce k:
通过 s₁-s₂ = k⁻¹(H(m₁)-H(m₂))可解出 k
代入 x = r⁻¹(ks-H(m))即可恢复私钥
复制代码
非 ce 部分泄露攻击
即使仅泄露少量 nonce 比特,也能通过格攻击恢复密钥:
Howgrave-Graham 和 Smart:3 比特泄露即可攻破 160-bit DSA
Nguyen 和 Shparlinski:扩展至 ECDSA
LadderLeak 攻击:仅需<1 比特泄露
复制代码
YubiKey 真实漏洞利用
当 nonce 存在 80 比特固定前缀时:
构造差值矩阵消除未知固定值
通过 LLL 算法获取 nonce 差值
代数推导恢复私钥:
复制代码
防护建议
首选 EdDSA:内置安全 nonce 生成
恒定时间实现:防止时序侧信道
RFC 6979:确定性 nonce 生成标准
盲签名技术:隐藏算术操作
攻击所需签名数量与 nonce 泄露比特数的关系:
本文证明 ECDSA 的安全性极度依赖 nonce 的随机性,任何微小的偏差都可能导致整个签名体系崩溃。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码
办公AI智能小助手
评论