zoukankan      html  css  js  c++  java
  • 什么是51% 攻击(双花攻击)

    51%攻击(双花攻击),因某个矿工或者矿池将一个加密货币多次支付而得名。通常,其目的并不仅是为了重复使用加密货币,而是为了攻击某个区块链网路,破坏它安全性,让它失去人们的信任。

    举一个简单的例子:

    假设我花了10个比特币买了一辆豪车。几天后,我得到了这辆豪车,并且我支付的比特币也成功转到了汽车公司的账户。通过51%攻击,我可以抹掉这笔交易的痕迹,如果成功,就相当于我不花一分钱就得到了一辆豪车,这10个比特币依然在我的钱包里,仿佛我从来没有花过一样,而汽车公司,当然,少了一辆车,却没有得到钱,并且查不到曾经卖过车。

    从区块链的民主性上来看,51%攻击从理论上讲是可行的。本文将详细的解释如何实施51%攻击,读完后相信你就能对51%攻击(双花攻击)有一个比较客观的认识,知道是否需要为此担心。

    在此之前,希望您想了解一下比特币如何挖矿(挖矿原理)比特币如何达成共识,区块链记账原理,如果你还不清楚什么是区块链,我建议你从这里开始。

    区块链=自治

    在详细介绍51%攻击前,我们必须要先知道在区块链网络上,是按照区块链协议工作。

    区块链协议实现了区块链的去中心化,让它可以自动管理数据账本(如交易账本),让我们不再依赖像政府、银行这样的第三方。

    比特币区块链的协议是基于民主的,也就是说,比特币网络上的大多数矿工决定了哪个分支区块链上的数据是真实的。

    如何实现51%攻击

    当一个比特币拥有者执行一个交易操作时,交易数据会先被存入本地交易池等待确定。矿工会从这些本地交易池中选择交易数据打包。为了要把数据打包上链,矿工需要解决一个非常复杂的数学问题,矿工通过计算机来做哈希计算并找到答案。(在此处阅读有关哈希算法的更多信息

    矿工拥有更多的算力,就会拥有比别人更大的机会找到答案。一旦某个矿工找到了答案,他就可以向全网广播(包括打包好的数据块),其他矿工就会根据区块链上已有的记录检查这个数据块是否有效。请注意,攻击者矿工不可能为其他人创建交易,因为创建交易需要本人的数字签名(私钥)。因此,在没有访问到对应的私钥时,从别人的账户发送比特币是不可能的。

    隐身挖矿-创建一个新的链

    现在,请注意,攻击者矿工可以试图撤销现存的交易。

    当一个矿工打包好一个块时,它本应该广播给其他矿工检查并添加到后续区块链上(这是矿工们的共识)。但是,攻击者矿工可以不广播,而继续在他自己打包的块后面不断打包新的数据块,创建一个别人不知道的分支链。现在网络上就存在两条区块链,如图:

    出现两条链

    现在同时存在两条链,一条是攻击者挖矿的链(红色),我们暂且叫它腐败链,它现在是隐身的,另一条是其他所有矿工挖矿的链(绿色),我们暂且叫它主链。攻击者矿工现在继续在腐败链上挖矿并且一直不广播,网络上其他矿工不会得到攻击者矿工打包的数据块,它对网络上的其他矿工是隐身的。

    这时,攻击者矿工可以在主链上花掉他所有的比特币,比如他买了一辆兰博基尼。同时,他自己的交易并没有在腐败链上记账,在腐败链上,他继续拥有那些比特币。

    记住,攻击者矿工在腐败链上排除了他自己的交易。

    同时,攻击者矿工继续从网络上得到数据块并添加到腐败链上。

    麻烦就从这里开始了......

    区块链被设计为是民主的,也就是少数服从多数。

    区块链通过始终相信最长链来达到民主,毕竟大多数矿工挖矿的链会更长(最长链=民主)。

    这就是区块链如何判断哪条链才是主链,反过来,钱包的余额也依赖于主链。

    现在比赛开始了。谁有更大的哈希计算能力,谁就会更快将块添加到其挖矿的链上,谁的链就会更长。

    这是一个攻击者矿工与全网矿工的赛跑。

    现在,攻击者矿工拥有更多的哈希计算能力,他在腐败链上挖矿的速度更快。

    比赛-通过广播一条新链来抹掉已经发生的交易

    现在,腐败链正以比主链更快的速度在延长。一旦腐败链比主链更长了,攻击者矿工便会立即向全网广播这条腐败链,而其他矿工检测到这条腐败链比他们原本挖矿的主链要长,按照协议,他们必须丢掉原本的主链,替换成这条腐败链。

    腐败链超过主链

    原本的腐败链现在被认为是主链,是值得信任的真实的链,所有在原主链上记账的交易数据都被丢掉了,就像没有发生过一样。

    攻击者之前用比特币买了一辆兰博基尼,但是这个交易现在并不存在于现在的主链上。他再次拥有了他曾经已经花掉了的比特币,他可以再次花掉这些比特币。

    其他所有矿工都必须要根据这条腐败链来重组他们的区块链,因为这条链更长。

    这条链上并不包含攻击者攻击者买兰博基尼的BTC支出。

    这就是一次双花攻击,通常叫51%攻击,因为攻击者矿工的哈希计算能力必须比网络上其他所有矿工算力的总和更多(也就是至少有全网51%的算力),才可以让他自己的链比主链更长。

    比特币区块链是怎样预防双花攻击的呢?

    实际上,要实现双花攻击是非常困难的。

    如前所述,一个矿工需要拥有全网51%以上的算力。试想,比特币区块链上目前有几百万矿工在挖矿,要达到与全网矿工匹敌的算力,攻击者必须要花费巨额资金在挖矿用的硬件上。即使是地球上最强大的计算机也不能与比特币全网的算力抗衡。并且,攻击者还得承担更多的后果,例如,担被抓和被起诉的风险,承担巨额电费的开销,租用存放挖矿用硬件的场地开销,还需要掩盖痕迹,洗钱等。至少在比特币区块链上,付出这么多去实现攻击,能得到什么回报呢?

    ASIC挖矿-增强的挖矿硬件

    最近又一个区块链热门话题:ASIC挖矿。这是由早期一些比特币挖矿公司为了提升挖矿硬件而开发的一种新的挖矿技术,它让矿机算力更强。

    目前,许多业内人士都在争论ASIC矿机是否让某些采矿个人或集团过于强大。Monero(XMR)门罗区块链最近就更新了协议,不允许在Monero(XMR)区块链上进行ASIC挖矿。因此,Monero(XMR)区块链网络上的哈希算力总数下降了惊人的 80%

    一个巨大的矿场

    本文首发于深入浅出区块链技术博客

    推荐

    点击系统学习区块链技术 ,进入国内极少数的高质量区块链技术博客,不仅有大量免费干货,也输出一些优质的付费内容,更有同时链接数千区块链开发者的各种专项微信群,如有需要欢迎骚扰微信号upchainedu

  • 相关阅读:
    pycharm突然变成了一个tab变成两个空格,查询无果
    79--JT项目17(Dubbo框架入门)
    79--JT项目17(SOA/RPC思想/zookeeper集群搭建)
    Java instanceof Operator
    12.21.4命名为Windows
    12.20.1汇总功能说明
    第24章分区
    Laravel 中间件的使用
    Laravel session的使用
    Laravel 数据分页
  • 原文地址:https://www.cnblogs.com/blockchainnote/p/11769356.html
Copyright © 2011-2022 走看看