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

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

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

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

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

赌徒赌赢的概率是 q 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} qz=qqz+1+(1q)qz1

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

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

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

注意:

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

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

x 1 ≠ x 2 时 , {x_1}\neq{x_2}时, x1̸=x2
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} qz=A(x1)z+B(x2)z=A+B(q1q)z

  • q < 1 2 q<\frac{1}{2} q<21时, q − ∞ = 0 q_{-\infin}=0 q=0 q 0 = 1 q_0=1 q0=1=> A = 0 , B = 1 A=0,B=1 A=0B=1 => q − z = ( 1 − q q ) − z q_{-z}=(\frac{1-q}{q})^{-z} qz=(q1q)z
  • p > 1 2 p>\frac{1}{2} p>21时, q − ∞ = 0 q_{-\infin}=0 q=0 q 0 = 1 q_0=1 q0=1=> A = 1 , B = 0 A=1,B=0 A=1B=0 => q z = 1 q_z=1 qz=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} qz={ (q1q)z=(1qq)z,1,q<21q21

进行变换:
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} qz={ (pq)z,1,q<pqp

第二部分:泊松分布

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

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

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

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

所以,攻击者暗地里挖的区块个数满足 λ = q p z \lambda=\frac{q}{p}z λ=pqz的泊松分布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}) P()=x=0+P(x)qz(zx)=x=0+x!λxexp(λ){ (pq)zx,1,xzx>z=1x=0zx!λxexp(λ)(1(pq)zx)

你可能感兴趣的:(blockchain,bitcoin,2018,blockchain,bitcoin,2018)