我们或许了解到,一个机构或群体如果拥有51%的算力,那么有百分百的成功率篡改数据,基于这个攻击共识的方法,还有别的篡改数据的发方法吗?当然,在数据库里51%攻击伴随着其他的“副作用”——双重支付。
什么是双重支付呢,定义如下:
双重支付顾名思义就是一笔钱用于发生多笔交易,在所有的交易里,某一笔资金和它发生的交易都是一一对应的:你用5块钱便利店买了一瓶矿泉水,这五块钱就流向便利店不在你手上了,你也不可能同时用这五块钱买一瓶酸奶。当然,重点不在这五块钱的商品买能力,而是“同一张五块钱”。所有的交易可以看做是一个满足逻辑学基本矛盾原理的逻辑学的问题——即是一个事物在同一件事情下不可能既是这样又不是这样的。
但是在数据复制已经是不费吹灰之力的互联网环境下,数据的克隆也不过就是几个快捷键或者说复杂一点需要一些简单解码的事了。比特币的本质是代码,那么它也应当具备可复制的特性。如果有人将我买水的币复制之后得到的克隆币拿去买酸奶,这笔钱就被使用了两次(甚至更多),这显然违背了矛盾原理。
发起双重支付攻击有两种办法:
为了避免双重支付的发生,比特币网络制定了一定的规则来验证交易,在验证之前,所有的交易将会留存在交易池里。发起双重支付攻击,就要抢在验证之前发起并且抢先被验证,那么克隆交易就会被认定为是“真交易数据”,而对应的真交易就会被定为是无效数据从而被清理丢弃。
在这里要说明的是,所有的交易地址发送对象只是个没有实际意义的代号,可以是同一个团体,也可以是自己,因此抢先验证只用拥有超过一半的算力,成功与否与发送对象无必然联系。
第二种情况,则是两笔交易几乎在同一时刻被验证,这时候A(包含真实数据的交易,以下简称A交易),和B被篡改的交易,两笔交易会有一笔被排挤到另外的一条“备用链”之上,等待后续验证。如果该篡改团体拥有一半以上的算力,那么计算速度(也就是矿工的挖矿速度)显然快于其他团体,记载更多数据的链更具有说服力,因此矿工总选择更长的链来进行扩展。此时,包含真实数据的交易A就被排挤清理,而交易B就成功实现了篡改。
图源:pixabay
网友评论