Speed Optimizations in Bitcoin Key Recovery Attacks

Fixed Point Multiplication Methods

double-and-add

在椭圆曲线中计算: Q = k P Q=kP 比较容易想到的方法是:double-and-add方法。此方法的想法是将 k k 采用二进制表示:
      k = k 0 + 2 k 1 + 2 2 k 2 + + 2 m k m k=k_0+2k_1+2^2k_2+\cdots+2^mk_m
其中的 [ k 0 , , k m ] ϵ [ 0 , 1 ] [k_0,\cdots,k_m]\epsilon[0,1] ,并且 m m k k 的位长度,所以在Bitcoin中 m = 256 m=256
给出其算法:
double-and-add
如果直接计算 Q = k P Q=kP ,那我们要计算 k 1 k-1 次点加运算,如果我们设运行一次点加运算的时间为: A A ,那么总的时间是: k A kA
在上面的算法中, k i = 1 k_i=1 的可能大约是 m 2 \frac{m}{2} ,我们假设计算一次倍加所需的时间是: D D ,所以总的运行时间是: ( m 2 ) A + m D (\frac{m}{2})A+mD ,显然要比之前的运行时间缩短了很多。


因为 P P 是固定不变的,所以我们可以通过预先计算一些依赖于 P P 的数据来加速点乘法的操作。例如我们可以预先计算:
      2 P , 2 2 P , , 2 m 1 P 2P,2^2P,\cdots,2^{m-1}P
这样的话在上述算法中 P : = 2 P P:=2P 就无需计算了,也就是说只剩了点加运算,我们再分析一些计算时间的话,现在只有: ( m 2 ) A (\frac{m}{2})A ,很明显又极大的缩短了计算时间。下面我们具体说明这种算法。


固定基窗口算法

它的主要特点是先计算预置表,再进行主程序的运算,以使得主程序不需要倍点运算。
假定 ( K d 1 , , K 1 , K 0 ) 2 w (K_{d-1},\cdots,K_1,K_0)_2^w 是以 k k 的以 2 w 2^w 为基的表达式,其中 d = [ m w ] d=[\frac{m}{w}] ,令 Q j = i : K i = j 2 w i P Q_j=\sum_{i:K_i=j}2^{wi}P ,对于 1 j 2 w 1 1\leq j\leq2^w-1 有:
      k P = i = 0 d 1 K i 2 w i P = j = 1 2 w 1 ( j i : K i = j 2 w i P ) = j = 1 2 w 1 j Q j = Q 2 w 1 + ( Q 2 w 1 + Q 2 w 2 ) + + ( Q 2 w 1 + Q 2 w 2 + + Q 1 ) kP=\sum_{i=0}^{d-1}K_i2^{wi}P=\sum_{j=1}^{2^w-1}(j\sum_{i:K_i=j}2^{wi}P)=\sum_{j=1}^{2^w-1}jQ_j=Q_{2^w-1}+(Q_{2^w-1}+Q_{2^w-2})+\cdots+(Q_{2^w-1}+Q_{2^w-2}+\cdots+Q_1)
在计算 k P kP 的过程中,仅需计算 Q j Q_j ,然后通过 Q j Q_j 相加即可得出 k P kP ,而 Q j Q_j 是预置表中的点,且其值为已知,因此通过查询预置表并结合点加运算就可以得到 k P kP ,从而省略了倍点运算,在忽略预置表的计算时间的情况下,我们可以分析其运行时间,3.1步点加需要的运行时间: ( d 1 ) A (d-1)A ,3.2步点加所需要的运行时间: ( 2 w 1 1 ) A (2^w-1-1)A ,所以中总的运行时间为: ( 2 w + d 3 ) A (2^w+d-3)A
在这里插入图片描述
作者通过查阅之前的类似算法发现,这些算法对内存的消耗十分友好,但是作者要追求的是缩短运行时间,耗费多点内存无可厚非,所以作者从这个方向出发提出了一种新的计算方法,此方法将会占用更多的内存资源,也就是在预计算中消耗的。


新方法

作者提出 P j = j P P_j=jP ,在这里 1 j 2 w 1 1\leq j\leq2^w-1 ,对于每一个 P j P_j 计算 P i , j = 2 w i P j P_{i,j}=2^{wi}Pj ,整体的算法和固定窗口基算法一样,作者只是将其中一大部分提前计算了出来,虽然会占用较大的内存,但是会极大的提升计算速度。
在这里插入图片描述
我们可以发现如果忽略预计算的时间,则需要运行的时间大概是 ( d 1 ) A (d-1)A ,与前面固定基窗口算法相比,可以看出明显提升了计算速度。


下面给出在不同的窗口宽度w下的测试结果:
在这里插入图片描述
我们可以发现在 w = 20 w=20 的情况下效果最好!.

我的主页:Stride Max Zz欢迎大家访问!

发布了23 篇原创文章 · 获赞 1 · 访问量 1534

猜你喜欢

转载自blog.csdn.net/qq_35324057/article/details/104329423