比特币上产生的交易扩散到全网所有节点,每个节点收集、验证、确认交易(有验证规则)。经过验证的交易将进入交易池。交易池中的交易需要打包到一个块中,然后与前一个块链接,成为一个区块链。只有打包到块中的交易才能被视为全网确认的交易。比特币网络上的一些节点(矿工节点)可以每10分钟竞争一次将10分钟内的交易打包成块的权利。谁获得这个权利,谁就获得所有交易的比特币奖励和交易费。争夺包块权的过程就是“挖矿”。
挖掘的过程就像一个大型竞技数字拼图。当有人找到解决方案后,游戏会重新开始,游戏难度会自动调整,这样找到解决方案的时间大致可以维持在10分钟。想象一个巨大的数字拼图,有几千行高,几千列宽。如果我给你看已经填好的拼图,你可以很快验证是否有错误。但如果只填了一部分,其余都是空白,那就要花很多时间去解决了。数字拼图的难度可以通过调整大小(增加或减少行数和列数)来调整,但无论大小,确认过程都很简单。比特币使用的“谜题”是基于加密哈希算法。它表现出与谜题相似的特点:同样是非对称的,难解但易验证,难度可调节。
成千上万的矿工参与了寻找区块解决方案的全球竞赛。为了找到一个解决方案(称为“工作负载证明”),整个网络每秒都要进行数万亿次哈希计算。比特币中的工作量证明算法使用SHA256加密哈希函数不断哈希块头和一个随机数,直到找到与预设模式匹配的方案。第一个找到这个解决方案的矿工将赢得这一轮比赛,然后将这块石头放入区块链。
如果矿商(或矿池)想利用自己的哈希能力作弊或攻击,比特币的共识机制至少在理论上是有可能被攻击的。正如我们所看到的,共识机制依赖于这样一个假设,即大多数矿工愿意为了自己的利益诚实行事。然而,如果一个矿工或一群矿工能够获得整个网络的大比例挖掘能力,他们就可以攻击共识机制,以扰乱比特币网络的安全性和可用性。
对共识机制的攻击称为“51%攻击”。这是一群控制了全网51%以上哈希力量的矿工发起的对比特币的攻击。他们有能力挖掘大部分区块,可以故意在区块链创建“分叉”,进行双重支付交易,或者针对特定交易或地址发起拒绝服务攻击。分叉/双重支付攻击是指攻击者在某个块下创建分叉,形成新的主链,使之前确认的块失效。只要攻击者有足够的计算能力,他就可以连续使六个或更多的区块无效,从而使那些被确认了六次并被认定为不可篡改的交易无效。
除了双重支付攻击,还有一种共识攻击,即对特定比特币参与者(特定比特币地址)的拒绝服务攻击。大多数具有计算能力的攻击者可以简单地忽略特定的事务。如果这些事务被其他挖掘者包含在块中,攻击者可以从这个高度的块中排除这个事务,并重新计算它以形成分叉。只要攻击者控制了网络中的大部分计算能力,这种类型的攻击就可以持续拒绝对特定地址或地址集的服务。
全网哈希计算能力的大量增加,使得比特币系统不可能被单个挖矿者攻击。单个矿工几乎不可能控制哪怕1%的全网计算能力。然而,矿池带来的集中控制也导致矿池管理者为了利益而攻击风险。托管池中的池管理器控制候选块的生成,从而控制交易的筛选。这赋予了矿池管理者排除或包括交易的权利。如果这种权利被矿池管理者适度地、巧妙地滥用,矿池管理者可以在不被人知道的情况下,发动舆论攻击,获得利益。
然而,并不是所有的攻击都是受利益驱使的。一个潜在的攻击场景是,攻击者只想破坏比特币网络,但不想从中受益。这些意图破坏比特币网络的恶意攻击者需要大量资金和隐藏的计划。如果他们得到资金充足的政府的支持,一切都将顺理成章。或者,一个资金充足的攻击者可以购买大量的挖矿设备,联合一些矿池管理者对其他矿池发起拒绝服务攻击,从而攻击比特币的共识机制。所有这些情况理论上都是可能的,而且随着比特币网络的计算能力不断呈指数级增长,发动这些攻击是不切实际的。比特币系统也在不断发展,比如P2P矿池协议的推出,旨在促进矿池的分散控制。比特币的共识机制变得越来越难以攻击。