比特币 (9):51%攻击和6个确认数

By | 2018-04-29
17,200 views | 1,750 Comments

阅读本文之前,请先阅读《精通比特币》第8章和中本聪的论文。

一、51%攻击

51%攻击指的是,有人掌握了全网一半以上的算力,就可以和全网其他算力进行对抗,更改区块链记录了。最根本的原因是比特币区块链采取的是最长链原则,即当前最长的链被认为是主链,是正确的链。51%具体能做什么呢?

1. 假设51%算力仍然是遵循比特币的规则

这个时候,仍然需要签名才能进行转账交易等,那么51%攻击,不能修改别人的账户下的金额,不能将别人账户金额转到自己的账户下,只能对自己的账户进行操作,比如双重支付(双重支付可以有两种方式:要么是在交易被确认之前,要么攻击者通过块链分叉来完成)、阻止确认其他交易。

2. 假设51%算力不遵循比特币的规则

这个时候,51%算力可以修改区块链规则,比如,放弃非对称加密的签名机制,转账不需要签名也可以进行,51%算力就可以将其他账户下的金额转到自己名下,因为他掌握了一半以上的算力,所有规则都可以修改,不需要其他算力的参与(因为长远来看,他总是能跑赢其他算力)。

二、6个确认数

为啥掌握51%的算力就能破坏比特币网络呢?从直观感觉上确实如此,将攻击节点算力和诚实节点算力当作两个人,挖矿行为就像赛跑一样,当然是速度快的人最终赢得比赛。其实中本聪在论文中做了数学上的分析。另外,现在比特币转账,都建议等待6个确认数之后,资金才认为是安全的,在他的论文中也做了解释。

首先,所有推导都有一个前提,就是区块随着时间按照大致恒定的速度产生,也就是说,每间隔T0(10分钟)产生且只产生一个区块。

假设当前网络算力是H,诚实节点算力是pH,攻击节点算力是qH,p + q = 1。因为算力本身就是指每个固定时间间隔内能计算Hash的次数,在比特币中,每10分钟产生一个区块,我们可以将10分钟当做一个最小的时间间隔,那么诚实节点算力和攻击节点算力是说:每10分钟发起一次计算的比赛,在这10分钟内,诚实节点能计算k * p次,攻击节点能计算k * q次(k只是一个系数而已,并不重要,重要的是比值),由前提可知:平均意义上,不存在诚实节点和攻击节点都没挖出区块(某个10分钟存在这个情况的话,那么下一个10分钟会降低挖矿难度),也不存在诚实节点和攻击节点都挖出区块(某个10分钟存在这个情况的话,那么下一个10分钟会增加挖矿难度)。所以可以这样认为:诚实节点有概率p挖出一个区块(此时,攻击节点没有挖出区块),攻击节点有概率q挖出一个区块(此时,诚实节点没有挖出区块)!即使诚实节点和攻击节点在两条分叉链上互不影响的挖矿,整个区块链网络也符合这个速度上的特点,这点是理解后面公式的关键。

关于某个交易得到多少个确认数之后资金才是安全的这个问题,在中本聪的论文中,将这个问题,分为两步(假设是n个确认数之后):

1) n是指,在该交易之后,诚实节点已经挖出了n块,也就是诚实节点对这个交易做了n次确认,因为攻击节点的目的是破坏这个交易,不会浪费自己丁点儿的算力对这个交易做任何确认。这个时候,攻击节点挖出了多少块?(可以理解为,该交易之后,攻击节点就在暗地里将区块链条分叉了,并且不将自己分叉之后的工作放到区块上,而是一直在自己的链条上单独挖矿,等到合适的时机,才会公开自己的工作)

2) 假设这个时候,攻击节点挖出了m块,和诚实节点差距是z = n – m,攻击节点弥补这个差距,追上诚实节点的可能性是多大?

先看第一个问题,中本聪从固定时间间隔的角度出发,他认为,诚实节点T0内挖出一个区块的概率是p,那么平均而言,T0 / p 的时间间隔肯定能挖出一个区块,那么诚实节点挖出n块,共消耗了To * n / p的时间间隔。攻击节点T0内挖出一个区块的概率是q,那么T0 * n / p的时间间隔内,平均而言肯定能挖出q * n / p块,而且每个T0 * n / p的时间间隔内,挖出的块数差不多。将T0 * n / p当做一个单位时间间隔,那么求解的问题是:单位时间内随机事件发生的次数的概率分布。而泊松分布就是描述这个概率的工具。可以参见:维基百科-泊松分布 。λ 表示单位时间间隔内发生的次数,即为q * n / p。

而 Analysis of hashrate-based double-spending 这篇论文认为,不应该从固定时间间隔的角度进行估算,认为中本聪的计算只是一个简化模型。该论文认为,依然从块数出发,相当于:攻击节点在经历至少n次失败(诚实节点挖出了n块),能挖出的块数,而负二项分布就是描述这个问题的工具,可以参见:维基百科-负二项分布。这个概率公式很简单:

不做解释,可以参见论文。该论文最后得出的概率值,和中本聪的模型的概率值大致相当,只是略有差别。

接着看第二个问题,这里再次说一下推导的前提,就是区块随着时间按照大致恒定的速度产生,也就是说,每间隔T0(10分钟)产生且只产生一个区块。明确了这个前提,就能发现,其实诚实节点和攻击节点是互斥的,每10分钟只能有其中之一节点发现一个区块,即使他们可能在两个分叉上。那么这个问题就像中本聪在论文中说的,可以等同于赌徒破产问题,可以参见:维基百科-赌徒破产问题 或者 赌徒破产问题。其中的递推公式

Pa = pPa+1 + q Pa-1,  a=1,2,…,N-1

是说,假设初始有a个,如果以概率p获得一个金币,那么就等同于初始有a + 1个金币,如果以概率q失去一个金币,那么就等同于初始只有a – 1个金币。应用到比特币中,可以从诚实节点的角度出发,理解为,初始的时候,诚实节点有z个金币,怎么赌博而失去了所有z个金币或者财富一直增加。具体请参照中本聪的论文。

下面是Analysis of hashrate-based double-spending 中列出的,不同攻击节点q概率和等待确认数n的情况下,攻击节点追赶上的概率(因为该论文提出的模型和中本聪提出的模型计算结果相差不大,并且提供的数据比较全,所以使用这个表格)

6个确认数是怎么得到的呢?是假设攻击节点算力在10%左右,发起攻击成功概率小于0.1%的确认数,从上表中可以看出是6。

本文到此结束。

1,750 thoughts on “比特币 (9):51%攻击和6个确认数

    1. JerryCaumb

      Знаете ли вы?
      Фиктивно отменить рабство в Камбодже её короля заставили французские колонизаторы.
      «Голова крестьянина» хранилась в доме у немецкой актрисы.
      Роден назвал свои «Врата ада» напрямую, а его соотечественник только намекнул.
      Биограф русского художника романтизировала историю его французской прародительницы вслед за Герценом.
      Американский лейтенант из конвоя PQ-17 был спасён советским танкером и наладил его оборону от авианалётов.

      http://www.arbeca.net/

      Reply
    1. JerryCaumb

      Знаете ли вы?
      Биограф русского художника романтизировала историю его французской прародительницы вслед за Герценом.
      Потомок наполеоновского генерала стал Героем Советского Союза.
      Консервативные художественные критики обрушились на портрет девушки, называя её гермафродитом, дочерью Каина и проституткой.
      Бывший наркокурьер, став премьер-министром Юкона, принимал законы против наркомании и наркоторговли.
      После 50 черепно-мозговых травм регбист завершил карьеру, опасаясь получить синдром деменции.

      http://www.arbeca.net/

      Reply
  1. vurtilopmer

    Way cool, some valid points! I appreciate you making this article available, the rest of the site is also high quality. Have a fun.

    Reply

发表评论

电子邮件地址不会被公开。