区块链中双花攻击是什么意思?

五迷三道 提交于 2019-12-05 13:34:43

没经过真实攻击一次次洗礼且保持进化的公链都不是安全的公链,51%攻击一旦成为真实场景下的成熟攻击手法,各个非大型公链及对接了一堆小公链币种的都需要小心了,风控机制需要特别增加一项:双花攻击是什么呢?万一出现双花攻击,怎么办?

 

让我们举个简单的例子,例如你在购物中心刷卡买东西。这种行为面临着三种危险:

 

首先,刷卡这种行为,校验的是你的信用卡信息,也就是说只要给刷卡机提供同样的信息,就能从你的账户里把钱刷走。没有错,很多朋友都听说过,有犯罪组织专门从事复制卡信息的勾当,之后“盗刷”你的卡。在一些不发达国家的小店里刷卡就特别容易中招。

 

其次,负责记账和结算的卡组织和银行的服务器可能被黑客攻破,造成数据泄露和伪造交易。回首近几年一波又一波某某大公司数据库被黑客攻入的新闻,这危险并非危言耸听。

 

最后,还有一种可能,就是用卡人自己可能利用系统网络延迟,在进行第一笔交易、用完所有额度后,趁系统还没记账把额度扣完,立刻进行第二笔交易,形成诈骗。当然目前的结算系统延迟极小,这情况不太可能,不过像在优惠券或者抢购资格这种另外搭建的相对脆弱的系统上还是有可能的。

 

网上支付也一样,犯罪分子可以用特殊手段(例如木马,伪造WIFI等)截获你跟服务器之间的传递数据,如果商家加密技术太弱的话信息就可能被破解——嗯,某国很多时候数据干脆是不加密的。所以大家才一直被警告不要乱装程序、不要连可疑的WiFi。

 

区块链是怎么正确处理这些问题的呢?让我们以比特币交易为例,逐条分析。

 

首先,比特币拥有者想要完成某项交易,例如买手机吧,他会向全网广播:我小A向小B支付1个比特币。

– 与这条信息一起的,还有一条加密信息,这条信息是用Hash函数对上一条信息加密生成一个摘要后,再用A的私钥进行加密的(称为私钥“签名”)。

– 接收到这条信息的B和其他用户先用同样的Hash函数对明文信息生成摘要,再用A的公钥对加密信息进行解密,如果解密得到的摘要与明文生成的摘要相同,便认为信息确实是A发出的,且没有经过篡改。

– A的公钥和Hash是公开的,私钥则无法算出,只有A知道,这样就既保证了交易的达成,又保证了A的信息无法被窃取。

其次,由在POW(运算力证明)中胜出的矿工负责这段时间的记账,事先完全无法知道究竟哪个矿工来记账,黑客也就无从黑起,除非碰运气。

最后,在传统系统中因为结算速度极快而不太可能的情况,在比特币网络中反而可能性比较大。如昨天所说,因为没有中心化的管理者,交易确认的时间要长很多,使得这种诈骗有可能实现,这就是比特币的double spending双重花费问题,简称“双花”。

双花攻击

双花攻击是同一笔UTXO在不同交易中的花费,双花不会产生新的货币,只能把自己花出去的钱重新拿回来。

这个攻击方法给了我灵感,实际上这道题就是使用双花攻击中的51% 股票代码查询www.gendan5.com/topic/lcSearch.html。attack。51% attack指的是攻击者如果可以拥有超过全网50%的算力,就可以创造一条高度大于原始链的链,攻击者可以发送一个新的块到这条链上。(如果有对比特币进行51%数字货币attack成功的案例,最大的危害在于人们对比特币的信心受损导致的比特币大跌而不是51% attack本身带来的危害)

如何进行51% attack攻击?在这道题中,就是创造一条超过原始链的长度。为了在后续讲解中方便,先写出题目给出的几个块,主链上块前有*

*块1(创世区块):银行发行100w币
*块2(1):黑客转走99w9999,银行留1
*块3(1):空块(什么都没操作)

具体操作就是从块1之后append一个块,把银行的100w转到shop中

*块1(创世区块):银行发行100w币  
*块2(1):黑客转走99w9999,银行留1 块2(2)--shop转走100w
*块3(1):空块(什么都没操作)  

(还可以随意转钱?就是有这种操作23333)

下一步,在自己append的块后append一个空块

*块1(创世区块):银行发行100w币  
*块2(1):黑客转走99w9999,银行留1 块2(2)--shop转走100w
*块3(1):空块(什么都不发生) 块3(2)--空块(什么都不发生)

再来一次同样的操作

*块1(创世区块):银行发行100w币  
块2(1):黑客转走99w9999,银行留1 *块2(2)--shop转走100w
块3(1):空块(什么都没操作) *块3(2)--空块(什么都不发生)
  *块4(1)--空块(什么都不发生)

此时最长的链为块1-块2(2)-块3(1)-块4(1)。这样,我们就构造了一个比题目给我们还要长的链,区块链这套逻辑会把最长的链当做主链,主链从块2(2)处分叉,块2(1)失效了,shop账户中多了100w,我们获得一个钻石。接下来系统在购买钻石的块3(2)块后添加一个块,转走商店中的100w到商店钱包。

*块1(创世区块):银行发行100w币  
块2(1):黑客转走99w9999,银行留1 *块2(2)--shop转走100w
  *块3(2)--空块(什么都不发生)
  *块4(1)--空块(什么都不发生)
  *块5(1)--把100w转到shop_wallet_address

那么另一个钻石该怎么获得呢?继续利用50% attack攻击,从块4(1)分叉,添加空块

*块1(创世区块):银行发行100w币    
块2(1):黑客转走99w9999,银行留1 *块2(2)--shop转走100w  
  *块3(2)--空块(什么都不发生)  
  *块4(1)--空块(什么都不发生)  
  *块5(1)--把100w转到shop_wallet_address 块5(2)--空块(什么都不发生)

再append一个空块

*块1(创世区块):银行发行100w币    
块2(1):黑客转走99w9999,银行留1 *块2(2)--shop转走100w  
  *块3(2)--空块(什么都不发生)  
  *块4(1)--空块(什么都不发生)  
  块5(1)--把100w转到shop_wallet_address *块5(2)--空块(什么都不发生)
    *块6(1)--空块(什么都不发生)

主链变为块1-块2(2)-块3(1)-块4(1)-块5(2)-块6(1),块5(1)失效,shop拥有100w,钻石+1,得到flag。

五月,比特币黄金遭遇了51%攻击,此次攻击之后,系统超388200个BTG被双花;六月,ZEN也遭受到两次同类型攻击。‘双花’攻击就像一只蛰伏的野兽,平时不易感知,可它随时可能会威胁到你的安全。

对于51%攻击与‘双花’问题,很多用户一直都颇有微词。那么今天,我想先跟大家探讨一下这个‘双花’攻击。

‘双花’一词始现与比特币系统中,当时有朋友问了这样一问题,“在现实世界中,我买一瓶水花一块钱,钱立马就进了别人的口袋,但在比特币系统中,我发起转账到交易成功的这段时间,钱还是在我的账户里,这时候,我可不可以又付给另一个人呢。”

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!