查看原文
其他

这朵罪恶之「花」或令区块链永无宁日

零界 31QU 2019-04-09
  31区ID:blockchain31


从4月4日到5月27日,一个月时间,XVG项目遭受到3次双花攻击。


5月25日,比特黄金也遭受双花攻击,导致1860万美元的资金损失。是数字货币领域第一次真正意义上的双花事件。


那么,双花到底是什么「花」。




什么是双花?


双花,简单理解就是同一笔资金以某种方式被花费了两次。目的就是获益。


在区块链上,交易进行之前,都会对币交易进行检查,如果这笔交易之前已经被标记为花掉,那么新的交易会被拒绝。


一笔交易,在被区块记录之前,如果重新发起同样的交易,就会被区块拒绝。



如何成功发动一笔双花攻击?


网络攻击者想要两次花费自己的数字资产。


第一步,先将某种加密货币卖掉,兑换成法币后,准备攻击网络,这个过程越快越好。


第二步,这个交易完成以后,链条上至少有一个区块记录了这笔交易。攻击进行得越早,记录交易的区块就会越少,攻击成功的可能性就会越大。


第三步,发起攻击。攻击者从记录交易区块的上一个区块开始重新记账。这个时候就会生成两条链,一条老链,一条新链。只要攻击者算力够大,新链条就可以追上老的链条。例如,链条上第10个块记录了转账交易,攻击者就从第9个区块开始攻击。如果攻击者拥有全网1%的算力,那么获得一个区块记账权的概率就是1%。连续获得2个区块记账权的概率就是0.01%。


如果攻击者拥有的算力达到了全网51%以上,攻击者追上原来链条的就是时间问题了。


5月25日发生在比特黄金上的双花攻击就是采用这种方式进行的。


打个比方,将区块链比作高速公路,正常情况下,所有矿工都在路上开车竞争,比拼速度。谁的速度快,谁就能拿到大奖。


这时候,打算发起双花攻击者开了一辆法拉利汽车,同时他可以用自己的超能力封掉原来的高速公路,重新开辟一条其他矿工都不知道的道路,这个时候攻击者就可以轻松甩掉竞争者。


当这位攻击者拿到前方的奖励之后,就重新运用自己的超能力打开正常的道路,以防止其它竞争者发新问题。


看不见的背后,有人在窥视你的数字资产



区块链是这样解决双花问题的


那么比特币是如何解决双花问题的呢?作为「点对点的电子现金支付系统」,主要通过「UTXO」与「时间戳」系统来解决此问题。


UTXO


UTXO(unspend transaction output的缩写),意思是未花费的交易输出。UTXO指的是被锁定的、不可再分割的、记录在区块网络上的一定数量的比特币。一个交易者持有的比特币,是以UTXO的形式被记录在区块链网络中的,而一笔交易地址中的比特币数量,实际上也是由成百上千个UTXO构成。


「比特币余额、账户、钱包」这些名词都是在比特币钱包被创建之后产生的。比特币钱包出现之后,通过扫描属于该用户所有的UTXO数量得到该用户总共有多少的比特币。


当A给B转了一笔比特币之后,这个转账会向全网进行广播,节点收到交易信息之后,会对该交易的UTXO进行验证,如果比特币不存在与该交易的UTXO中,则验证失败。


综上,UTXO转账的过程是这样的,假设A给B转了10个比特币。


A给B转的10个比特币,存在于B的UTXO中;

A给B转的金额等同于B要接受的金额,10个比特币;

B接收后10个比特币后,从A的UTXO中解锁,进入B的UTXO中。


时间戳


时间戳就是按照时间顺序将交易加上时间,这个时间不可改变。比特币现金系统是一串按照密码学加密过的数据块组成,每一个块就是一个区块。系统会对每一个区块按照时间顺序加上时间戳,从而计算出每一个区块的加密数值,即哈希。每一个区块都会包括上一个区块的哈希值,这样这些区块就会按照时间顺序排列,成为区块链。


比特币现金系统本身就是构造了一个永不停息、无坚不摧的时间戳系统。系统利用数字时间戳保证每个区块按时间顺序相连成区块链,时间戳也为区块链链上每一笔数据打上时间标记。


有了UTXO与时间戳之后,双花问题就得以解决。


例如:


A给B转账10个比特币,系统会核对A的UTXO中是否存在10个比特币。如果不存在,则交易被拒绝;


A将10个比特币,同时转给了B与C,系统会按照时间顺序,先确认第一笔交易。第一笔交易确认之后,另外一笔转账就会失效;


当同时转的10个比特币被B、C同时收到之后,全网的区块会分叉,首先确认6个交易的那条链,将会获得矿工的支持,令两一条较短的链条就会被废弃。10个比特币最终只能归B或者C一个人所有。


那么会不会发生意外呢?当然会,比特币黄金就是活生生的教训了。至于如何发生51%攻击,可以回过头复习一下上面的文章。


屡遭攻击的XVG官网



XVG的时间戳被修改造成51%始末


明白了双花发生的原理,接下来深入研究XVG这次修改时间戳完成的攻击过程。


据报道,在XVG上面发生的双花攻击,是攻击者在代码中操纵了一个漏洞,矿商在区块上设置虚假的时间戳获取暴利。


那么修改时间戳,如何造51%攻击问题呢?!


通过前文,我们知道时间戳系统就是:对每一个生成的区块按照先后顺序加上时间标签,并计算出每个区块的哈希值,后一个区块包含前一个区块的哈希值,这样所有的区块就能够形成一个链条,即区块链。


XVG的出块速度是每30秒出一个块,这种速度下,矿工的挖矿难度在短时间内不会有太大的变动。


现在,某一位攻击者手中有大量算力,例如有超过51%的算力被控制在攻击者手中,他利用自己的算力优势,让自己控制的链条成为全网主链,同时修改时间戳。这个时候,其他矿工挖到的区块就无法通过时间戳验证,成为孤块。只有攻击者自己控制的链条才能成为主链。


如果不好理解,就想象一下前面举的例子,修改时间戳的能力就类似于攻击者的超能力。


时间戳被修改之后,会对网络造成什么影响呢?


攻击者通过将原来30s/区块的XV网络,改为5min/区块。为了使出块速度正常,XVG主网就会自动降低挖矿难度,这时其他矿工也就无法在新链上面挖矿,原来链条区块也都是孤块,无法产生收益,只有攻击者控制的链条才能够产生收益。而且也不需要很大的算力就能够得到大量的XVG。



写在最后


安全性是区块链技术的根基,51%攻击曾被认为不可能出现。


然而,这样的根基随着类似事件的频繁上演,正在逐步松动。


区块链,真的安全吗?






31区热门文章



三天暴涨十倍的GTC,我们有四点疑问

比特币耶稣因BCH被告,从100万美元赌约说起

熊市、 空头、 矿工 、ICO、 韭菜,共识大会报告带你回顾2018年至今发生了什么

共识大会倒计半小时,力挽狂澜还是力不从心?

13天,62小时,3个选择

老罗「 一定会做 」的区块链手机,到底怎么做?

成为孙·贾斯汀






区块链50人



直播:李岩对话冯文杰,区块链应用距离我们有多远?

赵东:从亏损1.5亿到逆袭,为何我要信仰区块链?

深夜访谈人民网创投总经理,带你看懂区块链投资

对话李笑来:区块链新世界的生存指南

方刚对话于佳宁:区块链不是泡沫

方刚对话杜均:如何真正投资区块链?



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存