ECDSA_SVP_Attack
badmonkey的博客
很有意思的一个点,之前做cryptoals的时候又遇到类似的点,但是只是简单了解了一下,没想到真的会有这样的漏洞,而且还是在2019年发现的,只能说太牛x了.
利用点,ECDSA中随机数k的选择不同,导致k的大小有差异,从而导致了在计算 sig中的 r 所用的时间也会不同,利用时间来判断k的位数,进而利用lattice进行分析和攻击.符号具体含义参考ECDSA实现过程
s ≡ k − 1 ( H ( m + d r ) m o d p s \equiv k^{-1}( H(m + dr ) \mod p s≡k−1(H(m+dr)modp
两边同时乘 s − 1 s^{-1} s−1得到下面的式子
k ≡ s − 1 ⋅ H ( m ) ⏟ A + s − 1 ⋅ r ⏟ B ⋅ d m o d p k \equiv \underbrace{s^{-1} \cdot H(m)}_{A} + \underbrace{s^{-1} \cdot r }_{B} \cdot d \mod p k≡A s−1⋅H(m)+B s−1⋅r⋅dmodp
进一步得到
k = A + B ⋅ d + n ⋅ p , n ∈ Z k = A + B \cdot d + n \cdot p,n \in Z k=A+B⋅d+n⋅p,n∈Z
这样可以根据 A , B , p A,B,p A,B,p构造格子,使得 k k k在格子里,利用点在于如果 k k k很小,对格子适当扩展可以用LLL算法求出 k k k,进而求出 d d d,接下来就可以伪造签名了!构造的格子如下
前 t t t列其实是原始的格子,后面两列是用于攻击