十、双花问题
这个漏洞就是双花,double spending,不是double flower。
既然有人在抢着记账、记好的账本又不能篡改,我们还可以验证每条消息的真伪,这似乎很完美了啊,但为何还有什么double spending呢?我们举例说明之。
比如我只有5个比特币,我先向老张转账5btc,同时再向老赵转账5btc。这就是双花,我把5个比特币化了两次。这就是所谓的双花问题,这是一种诈骗行为,如何预防?
正常情况下,一定是先有一条信息被大家打包,然后第二条信息由于与第一条信息冲突而无效。但是,我如果是同时双花的,也就是一边广播:我向老张转账5btc,与此同时又广播:我向老赵转账5btc。这样,就会有两个矿工分别打包了这两笔记录,这就叫做分叉,即同时有两个区块生成了。如果要真是如此,大家都去双花了,5个比特币能化两次5个比特币,岂不就乱套了,比特币系统成了骗子横行的世界了。
比特币的规则是只有最长的区块链得到确认,最长的区块链才会有挖矿奖励。所以正常大家都会切换到长链上挖矿而将短链废弃掉,这样就会有一笔交易作废了。所以一般转账之后比特币网络建议大家等到一个区块确认了,此时再发货就比较安全。
我们再以Alice给Bob转账来说明。假设Alice只有5个比特币,但她有两个地址,地址1和地址2,她先用地址1向Bob支付5个比特币去购买一杯咖啡,与此同时,Alice又用地址1给自己的地址2转账了这五个比特币,必须注意,一定是同时、非常的同时。如果Alice得逞了,她就等于白喝了一杯咖啡。她可以得逞吗?假设Alice是很强,她能让这两笔交易同时打包在两个区块,Bob看到一个区块确认了,就给发送咖啡了。这时候,Alice为了让Bob这笔转账失效,就必须让包含转账给自己地址那条交易记录的区块成为主链,那么她就要在那个区块后面不断的生成区块使这条链越来越长。Alice要实现双花,其实很不容易,她必须要实现双花所形成的两个链条都不废掉,一直要坚持到拿到Bob的咖啡为止。因为任何有一条区块链废了、就意味着双花也就不存在了。比如给自己转账的那条链失效了,那就意味这Alice真就正转账给Bob了。如果给Bob转账的那条链接废了,Bob没收到btc也就不会提供服务、不会给Alice发送咖啡。所以Alice策略应该是先让Bob那条链成为主链,这样Bob就发货了;Alice一看Bob发货,于是开始努力加长给自己转账的那条链,一旦链条长度超过了Bob那条链,给自己转账的就成了主链,从而废掉了Bob那条链,这意味着Bob的交易记录作废,也就是Bob最终没有拿到比特币。
Bob若想万无一失,就不能急着发货,要等到自己的链条足够长的时候才发货。一般来说再等上六个区块的形成,就已经很保险了。Alice想废掉已经又加长了六个区块的长链,就必须自己加长自己的短链,来超越那个长链。为什么非要自己加上呢?因为矿工都会在长链上挖矿,只有最长的区块链才能得到确认,才会有挖矿奖励。Alice要凭一己之力,让自己的短链超过长链,有肯能吗?nothing is impossible。双花is possible,但前提是Alice的计算能力强大无比,因为区块由谁所生成,决定于谁最先算出Hash值,也就是要决定于算力——计算的能力。
如果Alice掌握了全网51%的算力,那么她有51%的概率抢夺到下一个区块的记账权,当她在对自己有利的那个区块后继续生成区块的时候,她就会让Bob收不到那5个btc,这就是所谓的“51%攻击”。这似乎是可行的?但是,Bob听了我们的节目,他变聪明了,他不是等一个区块就发货,而是等了六个区块的确认才发货,因为已经生成了六个区块,那这一定是主链,关键是矿工也都相信这是主链,所以都会在这个链上继续挖矿来获得奖励。
Alice为了使Bob的这笔转账失效,她必须在对自己有利的那个链上连续生成区块而且赶上主链。与全网斗争抢夺记账权连续六次,如果算力一般这几乎不可能,如果算力超强倒是有可能实现。不过如果Alice只为了喝一杯咖啡就如此消耗巨额算力成本似乎不值得。可能发动双花攻击的原因是大额转账,但是我们可以发现,只要区块链越靠后,安全性越高,比如我等这个区块链确认了10次,那么想要追上主链就必须连续抢夺十次记账权,这个难度是几何级数上升的。一般而言六次就已经很安全了,所以比特币系统也认为一笔交易如果确认了六次就算有效了。由于每一个区块是十分钟生成,确认六个区块也就是一个小时,相比于普通几秒到账的银行转账,这个确实慢了好多。
我们对双花问题再说一遍。Alice先有目的的向网络两边散布两条交易记录(当然是网络拓扑结构的两边而不是地理结构的两边),当两个区块2与2a都形成了以后,Bob觉得交易记录被确认,开始发货,此时Alice为了让这条信息失效,必须在对自己转账的那个链上开始抢夺记账权力,每一个区块的生成必须基于上一个区块的hash值(回顾一下抢夺记账权力就是暴力尝试随机数算出复合规律的hash值),所以Alice就要连续抢夺若干次直到对她有利的这条链成为主链,使得向Bob转账的链条成为短链,所有短链上的交易信息返回待打包的池子,挖矿挖出的比特币也会返回,也就是吃进去的比特币再要吐出来。也就是说,一旦对Alice获得了coffee,然后又将对自己有利的链条长度、超过向Bob转账的链条,那么Bob所获得的5btc就会被收回,也即是这个交易记录作废了因为比特币规则只对最长链挖矿有奖励。
但是如果Bob等了六个区块后、依然处于长链状态,然后再发货就没有问题了,因为全网算力都会集中在长链,一旦长链至少有6个区块的领先,Alice再想要追赶这个长链、以便让这些交易记录作废就会非常非常难。即便Alice神通广大到掌握了全网51%的算力,抢夺记账权的几率就是51%,连续六次都成功的概率就是0.51^6=1.7%,这就是所谓51%攻击,如果仅仅掌握三成算力,那么这个概率就是0.07%了。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。