Solution——BIP032

当i≥231时,我们称之为硬化子秘钥衍生,如下图:

对于solution1,如果我们知道扩展私钥k1,并且知道该私钥的相对位置,那么我们可以通过K,xc(链码)计算得到y1、y2,由于:y1∗kmodq=k1,所以我们可以解出k,进而可以计算出:y2∗kmodq=y2,依次类推进而计算出所有的私钥。同理可证solution2。
攻击
如果攻击者知道ExtendedPublicKeyK∣∣xc并且相同的随机数被处在同一层中的两个用户使用了,知道他们的相对路径,那么可以计算出对应的:yL,我们假设用户1对应的是:y1,用户2对应的是:y2所以两个对应的私钥就是:ky1、ky2,得到:
as1=(H(m1)+rky1)modq
as2=(H(m2)+rky2)modq
将第一个等式中的a表示出来带入第二个等式得到:
k=ry1s2−ry2s1H(m2)s1−H(m1)s2modq
这样我们就可以解得私钥的值。
如果攻击者知道两个不同层次的:K,xc以及用户的相对位置,并且随机数a、b都各自使用了一次,一共有四个用户。
对于solution1因为我们知道用户的相对位置,我们可以计算出:ky1,k′y2,ky3,k′y4并且得到如下几个式子:
as1=(H(m1)+raky1)modq
as2=(H(m2)+rak′y2)modq
bs3=(H(m3)+rbky3)modq
bs4=(H(m4)+rbky1′)modq
ky1s2−k′y2s2=raH(m2)s1+H(m1)s2modq
ky3s4−k′y4s3=rbH(m4)s3+H(m3)s4modq
两个方程可以解出k和k′,与之前类似的方法即可解出所有私钥。solution2同理。