比特币双花攻击成功概率与比特币白皮书的calculation部分解读

第一部分: q z = ( q / p ) z q_z = (q/p)^z

已知
p p = probability an honest node finds the next block
q q = probability the attacker finds the next block
q z q_{-z} = probability the attacker will ever catch up from z blocks behind
注: p + q = 1 p + q = 1
求攻击者在落后z个区块的情况下被攻击者追上的概率。

分析:
这个问题可以等价于赌徒问题,赌徒(攻击者)本钱为 z -z ;相当于目前落后z个区块

  • 当资产为 x -x 块时,赌徒会止损( x > z x>z ),即赌徒不能忍受损失 x x ;相当于当攻击者发现已经落后诚实结点x个区块后,不再进行攻击。
  • 当资产为 0 0 时,赌徒会收手;相当于攻击者目前区块高度与诚实结点一样,攻击成功。

赌徒赌赢的概率是 q q ,那么赌徒的本钱为-z时,赌徒攻击成功的概率为

q z = q q z + 1 + ( 1 q ) q z 1 q_{-z}= q*q_{-z+1}+(1-q)*q_{-z-1}

目的是资产达到i,我们来看第一回合赌局,有两种可能,以q的概率赌赢,以1-q的概率赌输:

  • 第一回合赌赢,第二回合赌徒的本钱为 z + 1 -z+1 ,后面基于本钱 z + 1 -z+1 攻击成功的概率为 q z + 1 q_{-z+1} ;这种情况的概率为 q q i 1 q*q_{i-1}
  • 第二回合赌输,第二回合赌徒的本钱为 z 1 -z-1 ,后面基于本钱 z 1 -z-1 攻击成功的概率为 q z 1 q_{-z-1} ;这种情况的概率为 ( 1 q ) q i 1 (1-q)*q_{i-1}

这是一个二阶的数列,相当于解方程 x = q x 2 + ( 1 q ) x=qx^2+(1-q) ,解得 x 1 = 1 x_1=1 x 2 = 1 q q x_2=\frac{1-q}{q}

注意:

  • q 0 = 1 q_0=1 :如果攻击者与诚实结点高度差异为0,那么攻击成功
  • q = 0 q_{-\infin}=0 :如果攻击者落后诚实结点 \infin 个区块,攻击者放弃攻击,攻击失败。如何理解上面的表述?即攻击者在追赶的过程中无论落后多少个区块也不会放弃攻击

x 1 = x 2 x_1=x_2 时,即 q = 1 2 q=\frac{1}{2}
q z = ( A + B ( z ) ) ( x 1 ) z = A + B ( z ) q_{-z}=(A+B(-z))(x_1)^{-z} = A+B(-z)
又因为 q 0 = 1 q_0=1 q = 0 q_{-\infin}=0 ,所以 q z = 1 q_z=1

x 1 x 2 {x_1}\neq{x_2}时,
q z = A ( x 1 ) z + B ( x 2 ) z = A + B ( 1 q q ) z q_{-z}=A(x_1)^{-z}+B(x_2)^{-z} = A+B(\frac{1-q}{q})^{-z}

  • q < 1 2 q<\frac{1}{2} 时, q = 0 q_{-\infin}=0 q 0 = 1 q_0=1 => A = 0 B = 1 A=0,B=1 => q z = ( 1 q q ) z q_{-z}=(\frac{1-q}{q})^{-z}
  • p > 1 2 p>\frac{1}{2} 时, q = 0 q_{-\infin}=0 q 0 = 1 q_0=1 => A = 1 B = 0 A=1,B=0 => q z = 1 q_z=1

综上所述:
q z = { ( 1 q q ) z = ( q 1 q ) z , q < 1 2 1 , q 1 2 q_{-z} = \begin{cases} (\frac{1-q}{q})^{-z}=(\frac{q}{1-q})^{z}, & q<\frac{1}{2} \\ 1, & q \geq \frac{1}{2} \end{cases}

进行变换:
q z = { ( q p ) z , q < p 1 , q p q_{-z} = \begin{cases} (\frac{q}{p})^{z}, & q<p \\ 1, & q \geq p \end{cases}

第二部分:泊松分布

当我们发起一笔交易tx在T1时被广播,而攻击者同时在T1做双花攻击。在T2时tx被主链上z个区块支持。

那么我们需要猜测攻击者在从T1时刻到T2时刻,暗地里挖了多少个块?
假设是泊松过程,T为一段长时间,在间隔T内,诚实结点挖了p个,攻击者挖了q个。

诚实结点挖z个区块所花时间t满足 z = ( p T ) t z = (\frac{p}{T})t
攻击结点挖x个区块所花时间t满足 x = ( q T ) t x = (\frac{q}{T})t

因此,
x = q p z x = \frac{q}{p}z

所以,攻击者暗地里挖的区块个数满足 λ = q p z \lambda=\frac{q}{p}z 的泊松分布P(x)。所以攻击者攻击成功的概率为

P ( ) = x = 0 + P ( x ) q z ( z x ) = x = 0 + λ x e x p ( λ ) x ! { ( q p ) z x , x z 1 , x > z = 1 x = 0 z λ x e x p ( λ ) x ! ( 1 ( q p ) z x ) P(攻击成功) = \sum_{x=0}^{+\infin} P(x)*q_{-z}(z-x) = \sum_{x=0}^{+\infin} \frac{{\lambda}^{x}{exp(-\lambda)}}{x!} * \begin{cases} (\frac{q}{p})^{z-x}, & x\leq z \\ 1, & x > z \end{cases}=1-\sum_{x=0}^{z} \frac{{\lambda}^{x}{exp(-\lambda)}}{x!}(1-(\frac{q}{p})^{z-x})

猜你喜欢

转载自blog.csdn.net/jason_cuijiahui/article/details/85047527