黑客如何进行区块链51%攻击(双重攻击)
51%的攻击行为或双重攻击策略是指矿工及其群体在特定区块链系统中尝试以两倍的方式投入相同的数字加密货币。这些行为被称作“双重花费”(Double Spend),其名称来源于参与者试图通过这种方式实现资源的过度利用和潜在损失的行为机制。然而,并非所有情况下都是如此;更常见的情形是针对特定系统的完整性进行破坏性打击,在这种情况下,“双重花费”更多地反映了对系统安全性的威胁和潜在漏洞的利用。
51%的攻击行为或双重攻击策略是指矿工及其群体在特定区块链系统中尝试以两倍的方式投入相同的数字加密货币。这些行为被称作"双重花费"(Double Spend),其名称来源于参与者试图通过这种方式实现资源的过度利用和潜在损失的行为机制。然而,并非所有情况下都是如此;更常见的情形是针对特定系统的完整性进行破坏性打击,在这种情况下"双重花费"更多地反映了对系统安全性的威胁和潜在漏洞的利用
举个例子说明这一概念:设想我在一辆豪华汽车上投资了10枚比特币。几天后汽车交货时,我的比特币从个人账户转账至车主账户。通过实施对区块链的51%攻击策略后,在某些情况下我可以撤销这笔比特币转账交易。如果成功的话,在获得这辆豪华汽车的同时我也持有这些比特币,并且可以继续使用它们。从一个自治民主区块链的角度来看,在理论上51%攻击的概念似乎是显而易见的但人们对它的运行机制往往存在误解。这篇简短的文章将尝试对这一现象如何进行更加深入地解释。
了解矿工如何向区块链添加交易的基本知识对于理解这一过程至关重要因此我推荐您先阅读《矿工如何向区块链添加交易》这篇文章因为只需要几分钟就可以完成学习。
如果您希望全面了解区块链的工作原理则可以从《 blockchain beginners guide》开始学习。
区块链=治理
为了深入理解绝大多数攻击前的情况, 人们有必要先了解 blockchain 协议本质上是一种治理结构. 它负责处理各类记录, 如交易数据. 由于 blockchain 协议能够为我们承担相关责任, 因此我们无需依赖第三方机构(如政府或银行)来进行此类操作. 这就是(绝大多数)blockchain 去中心化的根本原因. 比特币 blockchain 的协议架构建立在民主自治模式之上, 这意味着网络中绝大多数参与者(即矿工)将共同决定哪一种版本的数据记录为"真相".
51%的攻击如何发挥作用
当比特币持有者在参与交易时,在完成了支付操作后就会被归集到未经验证的本地区块池中。这些本地区块池中的矿工会根据可用的交易进行选择,并整合这些交易形成新的区块。为了将这个新区块加入到主区块链中来实现系统更新与升级的目的,则必须通过计算能力来解决一个非常困难的数学难题。每个矿工都利用自身的计算资源去寻找解决这个问题的方法。一旦发现这一解答方案后就会立即分享给整个网络(包括自己的区块),只有当新区块内的所有记录都与主区块链上已有的相关信息完全吻合时才会获得网络的认可与接受。值得注意的是即使是一些恶意企图破坏系统安全性的行为也无法得逞因为他们都需要获得他人的数字签名才能进行相关操作(即需要持有者的私钥)。因此除非拥有相关的密钥否则是无法从其他用户的账户中获取比特币资金使用的。
偷挖采矿——创造区块链的后代
需要注意了。但是,在这种情况下,恶意攻击者可能会试图篡改现有交易记录。当某个矿工找到一个解决方案时,该解决方案必须被传播给所有其他节点以便它们在新块加入区块链后能够验证该方案是否正确(即实现共识)。然而,在某些情况下恶意攻击者若不将他们的区块上的解决方案通知整个网络,则可能导致后续区块出现分歧。因此,在分布式系统中存在两种可能的区块链版本:一种是正常运行的状态下的主链(Main Chain),另一种是由恶意行为引发的分支链(Side Chain)。

现在有两种版本的区块链。红色区块链可以被认为是“偷挖”模式。
一个版本正由无瑕的矿工追踪;另一个则被危险分子掌控。恶意miners目前专注于构建自己的专用区块链系统,并未将其数据传输至网络其他节点;由于这一链条尚未对外传播;其余节点仍处于隔离状态。恶意miners可在此专用系统中任意配置资源;例如将比特币投入一辆跑车;然而在真实区块链上;这些加密货币已经全部消耗殆尽;因为它们并未将交易记录记录于隔离版系统中;因此在专用链条上仍保有这些数字资产

与此同时,在隔离版的区块链上自行验证这些区块。
这也标志着一系列问题的开始…为了实现民主治理的目标,
区块链采用了最长链机制——即通过始终跟随最长 chain(实际上最重 chain)来达成共识。
这是因为大多数矿工在速度上优于其他网络,
所以 longest chain = majority consensus。
这种机制不仅决定了哪个 chain 是真实的,
也决定了钱包中的资金总额。
一场竞赛已经悄然展开。
那些计算能力最强的人能够优先处理自己的链接并添加新的区块。

竞赛——通过广播新链来扭转现有交易
恶意参与者倾向于优先在隔离区块链中加入新区块,在完成新区块加入后相较于其他正常参与者的速度更快地构建真实链。当恶意参与者生成了一个较长的新链段时,该异常区块会被迅速传播至网络剩余节点。这些节点随后会发现该(恶意)区块链长度超越当前处理中的链,并依据协议机制迫使它们转而采用该主链。

恶意构建的区块链如今被视为真实的区块链体系,并且其中任何不在该区块中的交易都会被即时撤销。这位攻击者的大量比特币已被用于购买价值高昂的兰博基尼汽车;然而,在他的隐藏链中并未包含这一交易记录。因此他再一次掌握了这些原本属于他的比特币资产,并且可以任意支配并提取这些资金。

这代表了一种双重攻击策略。这种攻击通常被称为一种51%攻击(即恶意矿工控制网络哈希能力的51%),因为恶意矿工需要比网络其余部分组合更高的哈希能力来完成这一任务,并因此获得51%的哈希能力。从而使其能够构建一个比正常区块链更长的区块链链条。
那么比特币如何防范这种情况呢?
事实上,在比特币区块链生态系统中存在大量矿工参与

其他区块链是否容易受到攻击?
又一个引人入胜的故事是:无论此类攻击的难度如何,过去实际发生了多起51%攻击事件。值得注意的是,最近(2018年4月期间),在Verge(XVG)区块链上发生了一次这样的攻击行为。在这次情况中,攻击者发现了边缘区块链协议代码中的一个漏洞,该漏洞使他能够快速生成新区块,从而能够在短时间内构建出比正常情况更长的一段主链。这个案例展示了如何引发一次极其罕见但可能危害严重的双 spend 攻击事件,尽管这一现象极为罕见,并通常是由协议代码中的缺陷所导致,经验丰富的区块链开发团队可能会对此类问题给予高度关注并采取预防措施
在对这项'工作证'POW算法(即密码挖矿机制)进行考察时,我们发现该机制表明大量主动哈希/计算能力能够使针对该系统的51%故障安全得到有效提升。然而,在采用该机制的小规模区块链网络中——例如较小规模的分布式系统——这类系统往往更容易遭受此类攻击。这是因为这些系统参与对抗的机会有限,在资源受限的情况下难以与主要参与者展开竞争。因此,在实践中我们通常会观察到这类事件主要发生在那些较小规模的小型区块链网络中(如比特币黄金),而当此类事件发生时往往会导致不可预见的影响。需要注意的是,在整个比特币生态系统中这类事件尚未发生过
ASIC挖掘——增强的采矿硬件
这也引发了关于区块链技术发展的重要讨论:ASIC 挖矿作为一种新兴的技术模式逐渐受到关注。该技术最初由比特币 Miners 开发设计,在实际应用中旨在提升矿池计算能力并优化资源分配效率。对此问题的看法不一:一些人认为这可能使部分矿工或机构在市场中占据优势地位而另一些则担忧这可能削弱整体市场公平性。Monero(XMR)近期已发布一项软件升级禁止此类挖矿行为在Monero网络中运行以确保系统安全与稳定性的同时也减少了网络资源浪费的问题此前该升级已导致整个网络计算能力大幅下降在现有技术条件下堪称完美优化

在ASIC挖掘被阻止后,XMR网络的计算能力下降了80%!
该研究显示Monero网络的电力资源集中在asic矿工手中

看看Bitmain位于中国内蒙古的采矿设施。

另一个大型采矿设施。
======================================================================
分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:
- java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
- python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
- php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
- 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
- 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
- C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
- EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
- java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
- php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
- tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。
汇智网官方发布的原创翻译,请参考原文黑客如何进行区块链51%攻击(双重攻击)
