比特币挖矿与攻击方式分析

CPU

中本聪在比特币白皮书中曾提到“one-CPU-one-vote”,可见中本聪一开始预想的是所有人用CPU也就是最普通的个人PC就可以挖矿。比特币运行初期全节点确实是用CPU来挖矿的,全球的总算力也比较低。随着挖矿难度地增加,现在用CPU已经很难挖到矿了。

GPU

随着比特币的价值提升,人们开始用价格更高的GPU挖矿,GPU运行哈希计算相比CPU而言更有优势,大概是CPU挖矿速度的10倍。

ASIC

到了2013年下半年开始出现ASIC(Apllication Specific integrated)矿机,ASIC挖矿的速度是CPU的2000倍以上,而功耗却与GPU相当。ASIC其实就是一堆猜数字的机器,除了挖矿没有任何其他作用。从这时开始全球的算力开始由运行ASIC矿机的节点掌握。

矿池

由于挖矿成功是一个概率性事件,购买了价格高昂的矿机仍然可能连续几个月挖不出区块,收益非常的不稳定,所以引出了一种新的挖矿模式,即矿池。矿池主任负责打包区块和随机数nonce分片,而个体的矿机只需接入矿池参与hash计算,个体用户无需承担全节点的任务,减轻了负担。如下图所示:
在这里插入图片描述
收益分配

  • 整个矿池中只要有一个hash计算节点计算出符合条件的hash值,整个矿池就可以打包区块获得奖励。
  • 矿池的哈希计算节点同样是通过工作量证明来获得奖励,只要计算出差不多满足要求的nonce值,就可以发布给矿池管理员,如果矿池能够顺利挖出区块,则凭自己的nonce值也能获得相应比例的奖励,而计算出正确nonce值的哈希节点同样也是获得相应比例的奖励,不会有额外的奖励。

漏洞分析

  • 哈希计算节点计算出正确的nonce之后,奖励只属于矿池管理员,因为区块头中的Merkle Root Hash是根据矿池管理员的公钥地址和其他交易信息计算出来的,所以挖出的区块奖励无法被偷取,只能由管理员来分配奖励。
  • 但是由于各个矿池间的竞争关系,某个哈希计算节点可以故意搞破坏,计算出正确的nonce值后,可以故意丢弃nonce值不发布给管理员,阻止该矿池获得区块奖励。

攻击方式分析

分叉攻击(forking attact)

  • 矿池的出现使得分叉攻击变得更有可能。GHash.IO曾占据总算力的51%,达到了分叉攻击的条件。后来GHash.IO表示不再增加算力,比特币社区的恐慌才得以平息。
  • 值得注意的是,不一定非得达到51%的算力才可以发起分叉攻击,只是说51%攻击的概率更大,例如40%或者更低的算力同样存在一定的概率可以成功发起分叉攻击。
  • 另外矿工可以随时转换矿池,矿工也可以通过一定的优厚条件临时吸引矿工加入,扩充算力以进行分叉攻击,矿工甚至可能不知道自己参与了分叉攻击,只是从中获取了一些奖励。

抵制攻击(boycott)
占据较大比例算力的矿池故意不把某账户相关的交易放入区块,同时告知其他节点,其他节点因为害怕自己挖出的区块不被大矿池认可,大矿池可以轻易发起分叉,导致这些节点得不到奖励,因此这些节点也就不敢将该账户的交易放入区块。这就是抵制攻击。

临时保留区块攻击(selfish mining)
临时保留区块攻击指的是如果挖到区块之后,不立马发布出去,而是自己接着再挖下一个区块,这时会少一些竞争,由于矿池占的算力比例较高,是有很大可能赶在其他节点之前挖出下一个区块的。顺利挖到的话,一下子全部发布出去,这样自己能够获得两个区块的奖励。

算力较低的节点发起临时保留区块攻击,会存在一个风险,如果不发布挖到的区块,别人随时可能挖到区块并发布,如果生效的话,那么自己保留的区块将会失效,也就得不到任何奖励。算力比例较大的矿池可以相对比较容易地发起临时区块保留攻击。

发布了9 篇原创文章 · 获赞 0 · 访问量 1576

猜你喜欢

转载自blog.csdn.net/ice_fire_x/article/details/104173789