比特币“双花”与“51%”算力攻击

2019-02-21 06:56阅读:
比特币“双花”与“51%”算力攻击 比特币“双花”是指一笔比特币被两次或多次交易,最终只有一次交易有效,从而使一方获利,而另一方受损。“51%”算力攻击指某个用户或是联盟拥有了超过全网一半的算力(计算能力)时,可以对比特币区块链进行分叉篡改,实施攻击。最典型的算力攻击就是“双花”攻击。
一、比特币与算力
比特币的产生、交易、运转等每个环节都依赖于网络算力。这与比特币系统设计有关。
在安全设计上,比特币使用了两个高强度的密码算法:SHA256哈希和ECC椭圆曲线算法。主要用于保证比特币交易、区块数据不被篡改和验证用户身份可信,以保护用户资产安全。这些都需要进行大量计算,因而需要大量算力支撑。
比特币设计了工作量证明机制,依赖算力竞争获得交易记账权,并获得比特币奖励。其基本原理:用户打包一个区块,使用算力对区块进行连续计算,直到计算出一个符合预设条件的值,然后将区块写入区块链中,区块包含的交易被确认有效。这就是全网对交易确认的过程。每次区块确认成功,系统自动产生一定数量BTC,为保持系统运转,这笔BTC会作为奖励发给计算出那个值的用户。计算过程被形象地称为“挖矿”,进行计算的用户称为“矿工”。POW机制既是系统运转的动力,也是BTC产生的来源。这一切离不开算力,算力越大,挖矿成功的几率越大。这为“51%”算力攻击提供了可能。
二、双花
先说说单花过程,如下:
1.用户提交一笔比特币交易,系统将交易广播到全网;
2.网络具有挖矿能力的节点自动接收,将交易存在交易池,积累一定数量,将多个交易打包到一个区块,区块大小约1M。时间早的、交易费高的交易先被打包;
3.节点对自己打包的区块按POW机制进行计算,计算出符合条件的值后,将值与区块广播出去,各节点对其进行验证。
4.
验证有效,则将该区块增加在已有的区块链后,并广播全网更新区块链数据。各节点重新开始新一轮的挖矿。
5.区块链里的交易均属确认完成的交易,不能更改、撤销。从技术上讲,也很难更改、撤销。
单花是正常的交易方式,但是双花则属于欺诈行为,是对比特币的一种破坏和攻击。双花不会都得到最终确认,并记录到区块链,因为系统会验证交易,并对不符合规则的交易作处理。双花是利用算力优势打一个时间差,通过撤销已经确认完成的一次交易,发起并完成另一次交易,达到双花的目的和效果。下面以实例场景来描述其原理过程:
1.用户A向交易所发起一笔充值100个BTC的交易,当该交易得到确认(就是所在区块被连接到区块链),用户A迅速将100BTC卖出,获得现金;假设此时链的区块高度为N;
2.用户A利用手中的算力优势,重新构造并计算高度N的区块及其以后的区块,区块里忽略充值100BTC这笔交易。这相当于用户A从第N个区块开始建立一条分叉链,只要用户A不公布出来,其它网络节点并不知道分叉链的存在,仍沿着原来的路径挖矿。
3.当A的挖矿速度超过其它节点,分叉链长度就会超过原来的链。此时用户A向全网发布新产生的分叉链,由于A发布的区块都是可验证的,而且交易与第N个区块之前的交易不存在冲突,全网会自动更新区块链数据,从区块N开始出现两条分叉链。
4.全网会自动选择沿着较长的分叉链进行挖矿,当分叉的长度达到6个区块时,较短的分叉链上的分叉区块就会被抛弃,其中所有交易就会被回滚撤销。这样比特币始终保持一条链。
经过这样一个过程,用户A仍拥有充值前的100个BTC,同时又白得价值100个BTC的现金。这就是一个典型的双花案例。其他的双花原理也基本如此。
三、“51%”的算力攻击
只有拥有超过全网一半的算力,才可能实施双花这样的算力攻击。算力代表挖矿的速度,算力越大挖矿越快,算力超过一半,则挖矿的速度就会超过其他节点,攻击者才能从某个区块开始,重新建立一条符合攻击者意愿而又能被全网验证接受的分叉链,从而用特定区块替代已有区块,达到攻击目的。
四、对算力攻击可能性分析
降低获得绝对优势算力的可能,就能降低算力攻击的可能。对于比特币来讲,全网算力非常大,攻击者想建立超过一半算力几乎不可能,因此发动双花攻击也已经不可能。因此,规模越大、算力总量越大的数字货币,其发生双花攻击的可能性越低。
另一方面,如果某笔交易被确认之后,再有6个区块确认,那么根据概率计算,对这笔交易发动攻击的可能性只有万分之一,此时可以认为交易已经安全。所以,类似交易所这样的机构一般会等待6个或更多区块确认后,才完成该笔交易。
显然,这对于任何货币都是不可容忍的。现实中,防止货币双花很容易,首先纸币是实物,持有人一旦花出去就没有了,同一笔钱不可能被花两次;其次,用户资金账户由银行集中管理,通过微信、支付宝等网络支付花费资金,账户会及时更新,确保账户信息唯一性和权威性,不会出现资金重复使用。比特币不同于现实货币,它是一种电子现金,用于点对点支付,没有集中式账户管理,没有权威的第三方为用户担保,因此防止“双花”是比特币需要解决的一个复杂的问题。
一、比特币如何被花掉
比特币精妙的系统设计,配合高强度的密码算法,使得其具有很高安全性。比特币能够防篡改、防复制、防窃取、防抵赖,因此,通常来说,比特币“双花”很难发生。但是如果一个恶意的用户拥有足够的实力,就可以发起“双花”攻击,从而达到“双花”目的。
比特币设计工作量证明(POW)机制,依靠算力竞争获得交易的记账权,最终将交易记录在区块链上。而整个过程依赖于用户的算力,算力越大,能够越快的完成证明,从而
算法为基础用来为整个系统提供动力源,使得比特币能够保持运转,这个动力源就是算力。相比其他动力源,算力比较客观,不容易被人操纵。算力主要用于验证比特币交易,并把一批交易打包成一个区块,然后通过反复运算寻找一个符合条件的值(很大的数)。最先找到的,就可以把这个区块链接在比特币区块链上,
是比特币非常巧妙和有效的设计方案。比特币使用了高强度的密码算法来保证交易信息和用户身份的安全,因此需要足够的算力对网络交易和用户身份进行验证,交易量越大算力需求越大。当一批交易和用户身份信息被验证,就会存放在一个区块(结构化的数据块)中,多个区块按照时间顺序依次链接,形成了区块链。在去中心化的系统中,为避免人为因素,比特币将算力作为达成网络共识的话语权,拥有的算力越大,就越能够提出和建立网络共识
电子现金是存在网络中的一段代码或二进制数据,
在比特币中,没有账户概念,而是采用UTXO(未花费的交易输出)来记录用户的资金余额采用高强度密码算法,再通过巧妙的系统设计,有效解决了这一问题。下面来看看其基本原理。
一、密码算法
比特币采用了哈希算法和椭圆曲线算法两种密码算法。
哈希算法,也叫杂凑算法,作用是将任意长的信息压缩为固定长度(256bit)的二进制数据,称作哈希值。该算法有三个特性:一是正向计算很容易,但是反向推导原始信息极其困难;二是原始信息的微小变化,导致哈希值完全不同;三是没有两条不同的原始信息可以计算出相同的哈希值。由于上述特性,哈希算法可用于保护信息完整性,防止信息被篡改。比特币采用了SHA256哈希算法,它由美国国家标准技术研究院公开发布,安全性很高。
椭圆曲线算法是一种非对称密码算法,加密密钥与解密密钥不同,基于其特性,主要用于签名和验签。加密密钥签名时使用,证明用户身份,也称为私钥,要安全保存,不可泄露。解密密钥用于验证签名,即验证用户身份或者验证信息属于某个用户,也称为公钥,是公开的。
两个算法配合使用,就可以解决比特币用户交易、余额等信息和用户身份安全的问题,这是防止“双花”的安全基础。
二、系统机制设计
比特币中,一笔资金交易发出,一般情况下,只要包含该笔资金交易的区块得到全网确认(确认后,该区块被链接到比特币区块链的末端,作为链的最新区块,这个确认过程也就是达成共识的过程),该笔资金就算花费了,不会再回滚。但是如果同一笔资金被用于两个交易(在网络世界,不管什么原因导致,这种情况都是可能发生的),就形成“双花”,该如何处理呢?系统的POW工作量证明、UTXO未花费的交易输出、最长链选择等机制确保对其进行正确处理。
首先,如果同一笔资金的两笔交易被包含在同一区块,会被检测出来,然后根据时间戳,抛弃时间较晚的交易,这样就排除了“双花”。
其次,如果两笔交易被包含不同区块,一旦其中一个区块先被确认,那么该区块包含的交易就被确认,另一个区块中的交易就会被发现引用了不正确的UTXO,从而变成无效交易被抛弃,从而不会发生最终发生“双花”。
还有一种情况就是,两笔交易包含在不同区块,而且同时被确认。那么系统会将两个区块作为正确区块同时链接在比特币链的末端,使出现分叉。系统继续计算产生新的确认区块后,会链接在其中一条分叉区块之后,从而延长分叉链。之后产生新的区块,将会自动链接在较长的链之后。当较长的分叉链分叉区块个数达到七个时,则较短的分叉链就会被抛弃(包含的交易会回滚),从而不会最终发生“双花”。
正常情况下,发生“双花”的可能性很低,由于比特币POW机制设计,没有哪个用户拥有绝对算力优势,来伪造合法的交易或区块,从而将已形成的数据推翻,重新建立数据。