区块链:比特币的双花问题

发布时间:2024-09-05 19:01

哈尔滨工程大学 区块链技术课程

计算机学院  2019065621于博玮

计算机学院  2019065625张恺宁

1  区块链简介

1.1  什么是区块链

简单来说,区块链是由一串区块组成的链式结构,每个区块都存储了比特币网络的交易信息。

区块链技术起源于比特币,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护以及公开透明等特点。

区块链这一概念起源于比特币白皮书,但是白皮书并未对区块链做出较为精确的定义。近年来,区块链的潜力被逐渐激发出来,应用于诸多领域,而不仅仅是应用到货币系统。对于现有的成熟区块链系统,例如比特币、以太坊等,其主要功能是进行价值交换,故常常将区块链称为分布式账本技术,而对区块链,则较为普遍地解释为一个分布式的共享账本和数据库。

区块链:比特币的双花问题_第1张图片

 

1.2  区块链组成

1.2.1  区块

我们可以将区块链理解为一个账本,账本上的每一页便是账页,每一个账页又是由所有的交易数据组成的。其中,区块便可以通俗地理解为账页,用户的交易数据就记录在上边。一个区块有着自己地结构,由区块头和区块体两个部分组成。区块头用来记录当前区块的特征值,区块体则包含着实际的数据,可以是交易数据,也可以是智能合约。

1.2.2  区块链网络

区块链的记账方式有别于传统的中心化记账。分布式的记账方式意味着每一个“记账人”都在维护其本地的“账本”,是以网络通信是必要的。而通信方式采用的是点对点网络(P2PNetwork,或者是P2P网络),这是一种无中心服务器、依靠用户群交换信息的互联网体系。

区块链:比特币的双花问题_第2张图片

 

1.2.3  区块链共识

区块链是一个大家都认可的账本,而且区块链会以一个区块为单位来进行记账,一个区块就相当于一个账页。每个记账人加入的时候,首先都要同步之前大家都认可的所有区块,也就是已经上链的区块。而之后,一个新的区块被全网验证、并达成共识之后,也就是成功上链之后,每个节点都将会更新,并同步这个区块,在这个区块之后开始记账。也就是说,记账人要不断地更新、同步本地的账本。而选择谁的区块上链,或者说该选谁记的账页为准,这就是一个共识问题。

区块链:比特币的双花问题_第3张图片

 

2  双花问题

2.1  什么是双花

数字货币,不像传统货币一样看得见摸得着,它只是数字信息,由人持有并保管。比特币便是如此,它仅仅是通过哈希算法生成的一串数字,严格来说,比特币是存储这些数字信息的地址。而进行比特币交易是也不像使用传统货币的交易那样“一手交钱,一手交货”,对于分布式系统来说,交易记录会广播给网络中所有节点。一个人完全可以在A节点处完成一项交易,在A节点广播到B节点之前对B节点进行访问并产生交易,由于B节点未收到A节点的交易信息,故本该在A节点就交易出去的货币还能再次交易,从而产生“双花问题”。

对于“双花”的定义,即是双重支付,指的是在数字货币系统中,由于数据的可复制性,使得系统可能存在同一笔数字资产因不当操作被重复使用的情况。

区块链:比特币的双花问题_第4张图片

区块链:比特币的双花问题_第5张图片 

区块链:比特币的双花问题_第6张图片 

区块链:比特币的双花问题_第7张图片 

 

2.2  双花问题的分类

双花问题可以归结为两种,一种是由于信息同步的延迟造成的双花,通常被称为记账前双花;另一种是由于黑客攻击导致的账本交易信息丢失造成的双花,通常被称为记账后双花。

那么如何防范以上两种双花问题呢?对于前者,可以不以付款者的交易记录为依据,只有确认自己账户上钱到账才交付商品,即等记账后,再完成交易。或者借助UTXO的账户机制。对于后者,可以等待更多确认以及时间戳防伪。51%的算力要作废最新账页,其成功概率是51%,但作废连续两个新账页的概率就是51%*51%=26%,作废3个的概率是13.3%,作废6个的概率只有0.46%了。如果攻击者没有掌握51%的算力,只掌握20%的算力,那么攻击成功的概率就只有0.0064%了。

至于UTXO与时间戳的概念,本文后续会加以讲解。

2.3  双花问题的解决

我们可以采用UTXO与时间戳来解决双花问题。

2.3.1  UTXO

区块链:比特币的双花问题_第8张图片

 

比特币交易的基本单位是未花费的一个交易输出,简称UTXO。UTXO是不能再分割、被所有者锁住和记录区块链网络中的一定数量的比特币货币。当一个用户接收比特币时,金额被当作UTXO记录到区块链里。一个用户拥有的比特币实际上会被当作UTXO分散到数百个交易和数百个区块中。

总的来说,“一个用户的比特币余额”,这个概念是通过比特币钱包创建的派生之物。比特币钱包通过扫描区块链并聚合所有属于该用户的UTXO来计算该用户的比特币余额。事实上,比特币现金系统中并没有账户,没有钱包,没有余额,有的只是记录在区块链中,被所有者锁住的UTXO。

当某一笔比特币交易被创建并广播到区块链网络之后,接收到此交易信息的节点会对交易进行验证,检查其是否存在于UTXO中。如果交易输出已不存在于UTXO中,则验证失败。

举个例子:

用户A给用户B转账1个BTC,用户C给用户B转账0.5个BTC。整个过程如下:

用户A要发送的那1个比特币存在于用户A的UTXO中,同理,用户C要发送的那0.5个比特币存在于用户B的UTXO中;用户A发送的金额等于用户B接受的金额,即1BTC。用户C发送的金额等于用户B接受的金额,即0.5BTC;用户B接收后,1个比特币从用户A的UTXO中解锁,进入用户B的UTXO中,0.5个比特币从用户C的UTXO中解锁,进入用户B的UTXO中。

区块链:比特币的双花问题_第9张图片

 

比特币现金系统中记录着当前每一笔“未花费的交易输出”。当节点接收到一笔交易信息的时候,它需要去 UTXO 数据库里查,看看这笔交易所引用的 UTXO 是否存在,它的收款人(拥有者)是不是当前新交易的付款者。交易结束之后,系统会做相应的更新。

2.3.2  时间戳

区块链:比特币的双花问题_第10张图片 

为了防止一个UTXO被重复使用的情况,比特币网络中还引入了时间戳的概念。比特币现金系统本身就是构造了一个永不停息、无坚不摧的时间戳系统。系统利用数字时间戳保证每个区块按时间顺序相连成区块链,时间戳也为区块链链上每一笔数据打上时间标记。假设用户A将被认证为UTXO的1BTC同时转账给B1、B2,两笔交易仅有一笔会成功完成,因为挖矿节点会选择性的记录优先接收到的或交付手续费更高的那笔交易。当交易被挖矿节点先后记录,根据时间戳的数据,最先被记录的交易才能成功验证。

假设A将1个BTC同时转账给B和C,那两笔交易中仅有一笔会成功完成。因为系统中的节点会根据时间戳来选择记录先接收到的那笔交易,先被记录的交易会通过上述的流程打包到区块链网络之中。

当第一笔交易完成后,第二笔交易的数据在上传到区块链网络的过程中,节点就会通过时间戳的顺序,追溯到这笔钱在之前已经划过一次,从而判断后面的这次转账为异常数据,就不会再有一笔数字资产被花掉两次或多次的可能了,从而解决了双花问题。

区块链:比特币的双花问题_第11张图片

 

因为时间戳具备不可纂改、可追溯、透明化等特点,所以除了解决双花问题之外在知识产权保护方面也有重要作用。

总的来说,时间戳就是一个给信息盖上时间的“烙印”的方法,目前,其作为区块链的核心技术之一,是解决比特币双花问题的重要手段。

时间戳工作原理

①在区块链网络中,当一笔交易产生的时候,系统会自动生成交易数据(包括转出地址、转入地址、交易金额、数字签名等)的时间戳标记;

②按照时间戳的标记顺序,某个节点会将这些交易数据打包到区块之中;

③一个完整的区块经过整个区块链网络的认证后,该节点会对这个新产生的区块进行区块的时间戳标记;

④标记之后,会通过广播的方式,同步给全网的所有节点,这样每个节点手里都有一份这个区块的所有信息,包括时间戳,这样就形成了一个去中心化的分布式时间戳。

⑤新产生的区块会按照时间戳的标记跟以前打包好的区块按顺序依次相连,形成一条有序的不可纂改的区块链。

2.4  双花问题的扩展

由双花问题引出一些恶意攻击,以下介绍51%攻击和种族攻击两种。

2.4.1  51%攻击

双花攻击,即51%攻击,51%是指算力占全网算力的51%,比特币网络需要通过哈希碰撞来匹配随机数从而获得记账权,算力衡量的是一台计算机每秒钟能进行哈希碰撞的次数。 算力越高,意味着每秒钟能进行越多次的哈希碰撞,即获得记账权的几率越高。 可以理解为,在一个交易被写到区块链上,并且又经过z个区块以后,攻击者又开始重新产生了一条新区块链,并且比目前的区块链快,这样攻击者就可以把以前的交易中的花费的虚拟货币取回来。

51%算力攻击是如何做到双花的呢?假设小黑有666BTC,他把这些币支付的大白同时,也把这些币发到自己的另一钱包地址上。换一句话说,小黑的一份钱,同时转给两个人。最终,发给大白那笔交易先被得到了确认,并打包在区块高度为N的区块内。 这时,控制了超过50%算力的小黑,发起51%算力攻击。他通过重新组装第N个区块,将发给自己那笔交易打包进区块里,并持续在这条链上延展区块,由于算力的优势,这条量将成为最长合法链。这样小黑666BTC双花成功,大白钱包里的666BTC"不翼而飞"了。

2.4.2  种族攻击

种族攻击是一种变向的双花攻击。攻击者将代币发给商家,如果商家没有确认,攻击者就会把这笔代币再发给自己的另一个钱包。为了提升打给自己钱包的这笔交易的打包率,攻击者会提高矿工费,若攻击者打给自己的这笔交易被提前打包,那么打给商家的这笔交易就会被回滚,攻击者就获得了同一笔代币的双重支付。

种族攻击是如何做到双花的呢?举个简单的例子,小明作为攻击者,将一笔比特币发给小强,但由于比特币交易的拥堵情况,这笔交易还未得到处理。与此同时,小明就会再把这笔比特币发给自己的一个钱包,小明在这笔交易中,加了较高的矿工费,由于许多矿池会对内存池中的交易按照手续费高低排列,优先处理高手续交易,所以小明发给自己的这笔交易被提前打包,这时候这笔交易就先于发给小强的交易,由此实现了双花,这就是种族攻击。

3  总结

随著数字货币的兴起,比特币作为一个去中心化的点对点电子现金系统,主要依靠UTXO和时间戳来解决“双花”问题,从而实现在不需要信任第三方的情况下转移数字资产。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号