zhp 2019-06-30
51%攻击或双重攻击是区块链中的矿工或矿工群体试图在该区块链上花费两次数字加密货币。他们试图“双重花费”,因此得名。这样做的目的并不总是加倍花费数字加密货币,但更常见的是通过影响其完整性来对某个加密数字货币或区块链进行攻击。
这是一个简单的例子:假设我在豪华车上花了10比特币。几天后汽车交付,我的比特币从我的账户转账到汽车公司。通过对比特币区块链进行51%的攻击,我现在可以尝试撤销这种比特币转账。如果我成功了,我将拥有豪华车和比特币,我还可以再次使用这些比特币。从自治的民主区块链的角度来看,51%攻击的概念似乎是显而易见的,但对其运作方式存在一种常见的误解。这篇简短的文章将尝试对51%的攻击如何更详细地进行清晰的解释。如果你不知道矿工们如何向区块链添加交易,我建议你先阅读矿工如何通过七个步骤向区块链添加交易,因为只需要五分钟的就可以了。如果你不知道区块链是如何工作的,我建议你从这里开始。
在详细了解51%的攻击之前,重要的是要了解区块链协议基本上是一种治理形式。区块链管理数据的分类帐,例如交易数据。由于区块链协议可以为我们管理,我们不再需要第三方来执行此操作,例如政府或银行。这就是(大多数)区块链去中心化的原因。比特币区块链的协议基于民主自治制度,这意味着网络上的大多数参与者(矿工)将决定哪种版本的区块链代表真相。
当比特币所有者在交易中签字时,它会被放入未经证实的交易的本地池中。矿工从这些池中选择交易以形成交易块。为了将这个交易块添加到区块链中,他们需要找到解决非常困难的数学问题的方法。他们试图使用计算能力找到这个解决方案。这称为哈希( 在此处阅读有关哈希算法的更多信息 )。矿工的计算能力越强,在其他矿工找到解决方案之前找到解决方案的机会就越大。当矿工找到解决方案时,它将与其他矿工一起广播(连同他们的区块),并且只有当区块内的所有交易根据区块链上的现有交易记录有效时,他们才会验证它。请注意,即使是恶意的矿工也永远不会为其他人创建交易,因为他们需要该人的数字签名才能这样做(他们的私钥)。因此,如果不访问相应的私钥,就无法从其他人的帐户发送比特币。
现在要注意了。然而,恶意矿工可以尝试逆转现有交易。当一个矿工找到一个解决方案,它应该被广播给所有其他矿工,以便他们可以在块被添加到区块链之后进行验证(矿工达成共识)。然而,恶意矿工可以通过不将其块的解决方案广播到网络的其余部分来创建区块链的后代。现在有两个版本区块链。
现在有两种版本的区块链。红色区块链可以被认为是“偷挖”模式。
一个版本正在被无瑕疵的矿工跟随,一个被恶意的矿工跟随。恶意矿工现在正在研究他自己的区块链版本,而不是将其广播到网络的其他部分。网络的其余部分没有接受这个链,因为毕竟它还没有被广播。它与网络的其他部分隔离。恶意矿工现在可以把他所有的比特币花在区块链的真实版本上,这是所有其他矿工正在研究的版本。比方说,他把它花在兰博基尼身上。在真实的区块链上,他的比特币现在已经用完了。同时,他没有将这些交易包含在他的隔离版区块链中。在他的孤立版区块链上,他仍然拥有那些比特币。
与此同时,他仍在挑选区块,他在隔离版的区块链上自行验证了所有这些。这就是所有麻烦开始的地方......区块链被编程为遵循民主治理模式,即大多数。区块链通过始终跟随最长的(实际上最重的,但不要让事情太复杂化)链来实现这一点,毕竟,大多数矿工比其他网络更快地将块添加到他们的区块链版本中( 所以最长链=多数 )。这就是区块链确定其链条的哪个版本是真实的,以及钱包的所有余额所依据的。一场比赛现在开始了。拥有最多哈希能力的人将更快地为他们的链接版本添加块。
恶意矿工现在会尝试将块添加到他的隔离区块链中,比其他矿工更快地将块添加到他们的区块链(真实的)。一旦恶意矿工创建了更长的区块链,他就会突然将此版本的区块链广播到网络的其他部分。网络的其余部分现在将检测到区块链的这个(恶意)版本实际上比他们正在处理的版本更长,并且根据协议强制它们切换到这个链。
恶意区块链现在被视为真实的区块链,并且此链中未包含的所有交易将立即被撤销。攻击者之前已经将他的比特币用在了兰博基尼上,但这笔交易并没有包含在他的隐形链中,这条链现在已经被掌控,所以他现在又一次控制着那些比特币。他能够再次花费它们。
这就是一次双重攻击。它通常被称为51%攻击,因为恶意矿工将需要比网络其余部分组合更多的哈希能力(因此具有51%的哈希能力),以便更快地将块添加到他的版块的区块链中,最终允许他要建立一个更长的链条。
实际上,这些攻击非常难以执行。如前所述,矿工将需要比网络其他部分更多的哈希能力来实现这一目标。考虑到比特币区块链上甚至可能有成千上万的矿工,恶意矿工将不得不花费大量资金在采矿硬件上与网络的其他部分竞争。即使是地球上最强大的计算机也无法与该网络上的总计算能力直接竞争。还有无数其他反对进行51%攻击的论点。例如,被捕和被起诉的风险,以及电费,租用所有采矿硬件的空间和存储,覆盖你的轨道和洗钱。像这样的操作只是为了给攻击者的回报需要付出太多努力,至少在比特币区块链的情况是这样的。
另一个有趣的故事是,无论执行此类攻击的难度如何,过去实际上已经发生了多次51%的攻击。事实上,最近(2018年4月)在Verge(XVG)区块链上进行了攻击。在这种特定情况下,攻击者在边缘区块链协议的代码中发现了一个错误,该错误允许他以极快的速度生成新的块,使他能够在短时间内创建更长版本的Verge区块链。此示例说明了一个可以触发51%攻击的事件,尽管非常罕见,并且通常归功于协议代码中的错误。一个可靠的区块链开发人员团队可能会注意到这样的错误,并防止它被滥用。
在检查这个“工作证明量”POW算法(挖掘算法)时,它告诉我们更多的主动哈希/计算能力可以提高51%攻击的安全性。尽管像小型山寨币一样操作这种算法的较小区块链可能会更容易受到这种攻击,因为攻击者没有那么多的计算能力来竞争。这就是为什么51%的攻击通常发生在小型区块链(例如比特币黄金)上,如果它们发生的话。比特币区块链以前从未成为51%攻击的牺牲品。
这也带给我们最近关于区块链的最新热门话题之一:ASIC挖掘。ASIC采矿是一种由各种早期比特币矿业公司开发的采矿技术,用于增强采矿硬件,使其更加强大。现在很多业内人士都在争论ASIC矿工是否会使某些采矿个人或集团过于强大。Monero(XMR)区块链最近实施了一项协议更新,阻止了ASIC挖掘在其区块链上的使用。结果,网络上的总哈希功率下降了惊人的80% (见下文)!
在ASIC挖掘被阻止后,XMR网络的计算能力下降了80%!
这表明Monero网络的功率掌握在ASIC矿工手中。如果网络上的所有参与者都使用ASIC挖掘硬件,那么这也不一定是个问题。但问题是,像Bitmain这样的大型矿业公司被怀疑控制着大量的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%攻击(双重攻击)