一、背景

(一)规则:

  •    区块链可能分叉产生多条链,哪条链的长度最长(区块最多),该条链就会被所有人认可,称为事实链。
  •    最长链(事实链)如果记录我拥有100个比特币,那么我就拥有100个比特币。

(二)现象:

  1. 攻击者作为付款人向收款人转账100个比特币,转账成功之后,这笔交易记录R会被全网的其它节点认可并打包记录到一个新区块里。
  2. 如果攻击者又想把这笔比特币拿回来,那么只需要保证最长链的新区块里没有包含该转账交易记录R。
  3. 可是全网的其它节点维护的事实链已经包含了该转账交易记录R,怎么办呢?
  • 在发起此次转账交易前,攻击者自己保留一条最新的链(我们称为攻击链);

  • 攻击链生成新区块时,将不包含该交易记录或篡改这个交易记录;

  • 努力把攻击链变成最长链

(三)问题:

       计算攻击链变成最长链的概率

 

(四)解题思路:

1. 定义

  • 攻击节点集:维护攻击链
  • 诚实节点集:维护诚实链
  • 攻击成功:攻击链成为事实链,即攻击链长度超过诚实链

 

2.问题具体化:

“计算攻击链变成最长链的概率“

变为

在诚实链延长了z个区块,攻击链延长了k个区块的条件下,计算攻击链长度超过诚实链的概率“

再变为

诚实链生成一个新区块的概率是p,攻击链生成一个新区块的概率是q(q=1-p),在诚实链延长了z个区块,攻击链延长了k个区块的条件下,计算攻击链长度超过诚实链的概率“

 

 

二、计算过程

(一)泊松分布

       比如有一个火车站,平均每分钟有100个人出站(均值)。但具体到每个分钟,出站人数是随机的,不一定是一百个,可以是大于等于0的任何整数,这种情况下的概率的分布就是泊松分布。

比特币 POW 白皮书 区块篡改成功的概率计算详解_区块链

      如果要计算出站人数是98个的概率,就让公式中的 Lambda等于100(泊松分布的期望和方差均为Lambda),k 等于98,带入公式计算即可。

(二)攻击链产生的了k个区块,k可能是大于等于0的任何整数,所以k的取值的概率符合泊松分布。

(三)“诚实链生成一个新区块的概率是p,攻击链生成一个新区块的概率是q(q=1-p),在诚实链延长了z个区块,攻击链延长了k个区块的条件下,计算攻击链长度超过诚实链的概率“。

    该问题可再变为

    ” 诚实链生成一个新区块的概率是p,攻击链生成一个新区块的概率是q(q=1-p),在诚实链延长了z个区块,攻击链延长了k个区块的条件下,计算攻击链延长k个区块的概率乘以当攻击链延长了k个区块的时候,攻击链追上诚实链的概率

    (四)由于k的取值不确定,且符合泊松分布,所以需要分别计算k等于0到正无穷的所有值对应的概率,最终加起来,就是最终能够追上的概率

比特币 POW 白皮书 区块篡改成功的概率计算详解_区块链_02

(五)k发生的概率

比特币 POW 白皮书 区块篡改成功的概率计算详解_区块链_03

      其中,λ 是k的均值,在诚实链上延长了 z 个区块的条件下,平均值跟 z 是满足比例关系的。

比特币 POW 白皮书 区块篡改成功的概率计算详解_区块链_04

(六)当攻击链延长k个区块的时候,攻击链追上诚实链的概率

比特币 POW 白皮书 区块篡改成功的概率计算详解_区块链_05

      如果诚实链延长了 z 个区块,而攻击链延长了 k 个区块,k 是一个固定值,那么追上的概率通过前面已有的公式就可以得到,也就是 q 除 以 p 的 z 减去 k 次方。

       可以发现:那么攻击者能够追上来的概率随着要追赶的区块数量的增加而呈指数减小。最开始的时候可能还有点机会,但是拉开的距离越大,机会就越渺茫了。

 

(七)所以,

比特币 POW 白皮书 区块篡改成功的概率计算详解_区块链_06

 

(八)但是如果要根据这个公式去运算最终结果,就会涉及到无限数列的累加,所以我们把公式来变换一下形式。

比特币 POW 白皮书 区块篡改成功的概率计算详解_区块链_07

      由于追上和追不上的概率之和是百分百,所以用1减去追不上的概率,就是追上的概率了。当 k 大于 z ,表示攻击已经成功,已经追上了,所以也就不存在追不上的概率了,所以计算追不上的概率时 k 的取值范围就是 0 到 z 了。最终,用1减去追不上的概率,结果就跟刚才一样是追上的概率了,但是这次就是有限项相加了。

 

三、参考文献:

1. 比特币白皮书翻译

http://www.btcpapers.com/

2. 比特币白皮书的计算部分详解

https://zhuanlan.zhihu.com/p/56151888