比特币双花攻击

双花:就是双重支付,一笔资金被花费了两次。

  在传统的交易中,因为有银行这样的中心化机构,所以是不会存在双花问题的:每一笔支付都将从你的银行账户中扣除相应的资金,所有的明细在银行都有记录。但是在比特币中,没有账户的概念,而是引入了UTXO,即未花费交易输出。因为没有银行这样的中心化机构的保证,当发生一笔交易时就可能存在着双花的危险:比方说A有一个比特币,然后他同时构造两笔交易T1和T2来花费这1个比特币,其中一个给了B,从B那里买件衣服,一个给了C,从C那里买双鞋。如果不引入某种机制来避免这种情况,那作为数字货币的比特币将没有任何存在的意义。

1.正常情况:

  假设A构造了两笔交易T1和T2,将价值1 BTC的UTXO分别转给了B和C,妄图同时从B和C那里获得好处。然后A几乎同时将构造好的这两笔交易广播至网络。

假设网络中的矿工节点先收到了交易T1,发现这笔交易的资金来源确实没有被花费过,于是将T1加入到自己的内存交易池中等待打包进区块。

大部分情况下,这个矿工节点会在不久后又收到交易T2,此时因为T2所指向的交易输入与已经加入交易池的T1相同,于是矿工节点会拒绝处理该交易。网络中其他的矿工节点都类似,因此A发起的双花尝试将会失败。

2.分叉情况:

  假设矿工节点M1和M2几乎同时挖出了区块,并且很不幸M1挖到区块只收到了交易T1,而M2挖到的区块只收到了交易T2,这样交易T1和T2被分别打包进两个区块。因为这两个区块是同时被挖出的,于是造成了区块链的分叉。

  网络中某些节点(可能是离M1近的)先收到了M1打包的区块BLK1,于是用该区块延长自己的区块链。而另外一些节点(邻近M2的)则先收到M2打包的区块BLK2,用该区块延长自己的区块链。于是整个区块链网络中呈现出了不一致的问题:

  像这种不一致问题,一般只需要一个确认就能得到解决:假设随后又收到新区块,而新区块以BLK1作为父区块,那么之前用BLK1延长自己区块链的节点,只需要将新区块链接到自己的区块链上,而之前以BLK2延长自己区块链的节点,则需要切换到新的最长链上,如下图:

  因此在出现分叉的情况下,通常也只需要等待一个区块的确认时间,网络节点中的区块链就可以重新一致。在这个例子中,经过一个区块的确认期以后,B最终确认自己收到A的1 BTC,而因为包含有转账给C的交易T2的区块BLK2位于备用链上,因此无法通过支付验证。A的双花尝试也以失败告终。

3.经过6个区块的确认才安全

  上面提到一般情况下,只要经过1个区块的确认时间基本上就能确保“相对的安全”。而在比特币中,对于很小额的支付,为了提高交易速度,一般也就是等1个区块的确认即可。但是注意这里说的是“相对安全”,对于数额特别大的交易,1个区块的确认远远不够。

  我们考虑上面提到的分叉情况:假设经过1个区块的确认后,B知道了A给他的1 BTC确实已经位于链上,于是发货给A。此时A及其同伙掌握着很大的一部分算力,A通知其同伙开始使劲挖矿延长备用链(攻击链)。当A最终成功的使攻击链长度(累计工作量)超过当前主链长度时,再一次导致网络中的节点切换主链,如下面的示意图:

  于是包含了A转给C的交易T2的区块BLK2又位于了主链之上,此时A通知C钱已到账。C做支付验证也没问题,于是C给A发货,A的双花攻击成功。

  因此对于额度稍大的交易,必须要等待6个区块的确认才能保证安全。因为攻击者要想构造攻击链追上已经经过6个区块确认的主链,需要花费的算力成本非常大,很有可能得不偿失。

参考链接:https://blog.csdn.net/ztemt_sw2/article/details/83543434

原文地址:https://www.cnblogs.com/skzxc/p/11025664.html

时间: 2024-08-06 19:12:20

比特币双花攻击的相关文章

比特币黄金(BTG)遭受51%双花攻击?——不亏

自2017年8月1日比特币现金(BCH)硬分叉之后,比特币硬分叉就已成为一种潮流,BTG.B2X.BCD.SBTC.BCHC等等诸多分叉币不绝于耳.然而其中却有一个另类,那就是BTG.其另类的主要原因在于,相对于其他分叉币,BTG并没有对比特币进行扩容,依然采用1M区块+SegWit设定.其主要改变在于挖矿算法,对ASIC矿机进行了限制,转而通过电脑GPU挖矿.总而言之,BTG的GPU挖矿设想,旨在解决比特币挖矿算力过于集中的问题,保证其去中心化的特性.然而现实却并没有想象中的美好,GUP挖矿依

比特币防篡改技术详解

区块链技术在当下的火爆程度不必多说,比特币作为中本聪大神的"亲儿子",自然是研究区块链技术绕不开的话题.比特币是一个完全开放的去中心化的金融系统,时刻暴露在全球黑客攻击之下仍能安全稳定的运行至今(除了在2010年遭到一次大整数溢出漏洞攻击),用事实证明了比特币系统的安全性和稳定性.这其中一整套完整的防篡改破坏的安全体系是其最大的安全报障,下面我们就来逐步揭开比特币防篡改特性的面纱,体会一下比特币设计的奥妙. 非对称加密算法 首先我们先复习一下非对称加密的概念:非对称加密都有一对密钥,分

比特币行情动态:比特币一直暴跌,为什么还有那么多矿工加入?

比特币一直暴跌,为什么还有那么多矿工加入?比特币价格在八个月之内从最高点的20000美元下降到了6500美元,(译注:今天已经跌至3500万美元左右),跌幅超过80%.但在此期间,哈希率却从15EH/s上升到45EH/s,高达三倍的增长.(译注:价格从6500美元跌落至3500美元时,哈希率跌幅还是很大的,不过难度调整之后,近期的哈希率开始复苏,目前有20%左右的涨幅). 加密货币挖矿行业的传统观点认为,哈希率随价格上涨而上升,反过来,随价格下跌而下降.这是因为随着价格上涨,会吸引更多的矿工加入

比特币(Onion)病毒预防方法

比特币病毒来袭,目前受影响的系统大都为Windows系统,Linux系统.MAC系统还未出现,防御目前最主要手段是禁止系统高危端口.系统补丁升级及安装杀毒软件. Windows系统存在很多被黑客利用的危险端口,例如135.136.137.138.139.445等端口,京峰教育为大家分享个人电脑如何来预防该病毒. 1.  比特币病毒攻击页面 京峰教育学员有多位小伙伴公司服务器.电脑都被该病毒攻击,被攻击后,所有Windows服务器上显示如下图: 2.  查看Windows系统端口 PC桌面-左下角

solidity编写智能合约(入门)

一个简单的智能合约 先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节. 存储 contract SimpleStorage { uint storedData; function set(uint x) { storedData = x; } function get() constant returns (uint retVal) { return storedData; } } 在Solidity中,一个合约由一组代码(合约的函数)和数据(合约的状态)组成

《Nodejs开发加密货币》之十七:共识机制,可编程的利益转移规则

本文是关于加密货币入门文章的最后一篇.加密货币入门文章主要针对开发人员,从理论层面描述加密货币的架构思路,共计3篇.本文标题在真正写作的时候作了修改,没有延续上文最后的提示<机制,左右社会未来的根源>.写作本文时,比特币遭遇疯涨,当前是3876元/比特币. 前言 前面的文章中,我们说过,加密货币都是去中心化的,去中心化的基础就是P2P节点众多,那么如何吸引用户加入网络成为节点,有那些激励机制?同时,开发的重点是让多个节点维护一个数据库,那么如何决定哪个节点写入?何时写入?一旦写入,又怎么保证不

区块链概念

一段视频了解一下: 知乎普及:https://www.zhihu.com/question/37290469 首先不要把区块链想的过于高深,他是一个分布在全球各地.能够协同运转的数据库存储系统,区别于传统数据库运作——读写权限掌握在一个公司或者一个集权手上(中心化的特征),区块链认为,任何有能力架设服务器的人都可以参与其中.来自全球各地的掘金者在当地部署了自己的服务器,并连接到区块链网络中,成为这个分布式数据库存储系统中的一个节点:一旦加入,该节点享有同其他所有节点完全一样的权利与义务(去中心化

浅谈无需工作量证明的加密货币

浅谈无需工作量证明的加密货币 Iddo Bentov1,Ariel Gabizon2,Alex Mizrahi (Computer Science Dept., Technion; chromawallet.com) 译者:shylocks ([email protected]) 摘要:本文研究了那些并没有使用 PoW(工作量证明)协议的加密货币.这些协议通常采用 PoS(权益证明)协议,也就是采用了一种使担任验证工作的人获得在系统中相关权限的协议.我们对拥有较多矿工的系统进行了分析.最后,提出

p4.BTC-实现

比特币是基于 transaction-based ledger.(隐私保护性很好,但是在转账中需要说明币的来源,比较麻烦) 比特币的全节点需要维护一个UTXO的数据结构(unspent transaction output ). 获得记账权后,为了自己的交易信息还会在区块中打包别人的交易信息,为了鼓励这种维护账本的行为,协议中也规定了相应的transaction fee.不过比较少,一般是千分之几个BTC. 以太坊是基于 account-based ledger(这样就不用说明币的来源). 挖矿