深度学习
我们知道,区块链应用是一个点对点的网络程序,彼此之间通过一个共识规则来进行数据的一致性同步,这个共识规则在软件 中也就是一个共识算法,比如比特币中的工作量证明(Proof of Work),以太坊中也是使用工作量证明(根据开发计划,以太坊会更改共识算法),还有一些应用会使用其他共识算法,比如PoS、DPoS等。这些算法各 自也有很多变种,无论是哪一类,其目的都是一致的,就是提供一个相对公平也容易遵守的机制来确保节点区块链数据的一致,谁来运行这些算法程序,那谁就是矿 工,也就是运行挖矿程序的节点。矿工通过完成某种证明算法,得到区块数据的打包权,可以将网络中已经发起但还没有打包到主链的事务数据打包存储到新的区 块,并且广播给其他节点。倘若某个人通过某种手段,十之八九的打包机会都被他占有的话,那会发生什么?
我们来举个例子,在一个村子里,大家都要干活,干完活后就到会计那去登记一下,记下来今天谁谁谁干了什么,第二天 根据劳动量来分配奖金。这种情况下,这个会计就有了很大的权力,于是大家决定不能总是指派某一个人记账,要经常更换,有人就提出了一个办法,第二天谁来记 账,通过掷骰子来决定,每个人掷骰子6次,加起来的点数谁最多谁就做第二天的会计(如果点数一样就继续投掷,反正最后就会找到那么一个人),大家都觉得这 个办法不错。可是有一天有个家伙练成了一手绝技,每次都能掷最大点,大家谁也竞争不过他,结果天天都是他来做会计记账,这个时候等于又回到了之前的问题原 点,这个人拥有了对账本的支配权。
区块链程序也是类似的,比如比特币是通过工作量证明来竞争打包权的,那就是说谁的算力大谁就能有更大概率来获得打 包权。那就好办了,某人是个“土豪”,买了很多性能最顶配的矿机(专用挖矿的设备),那他是不是在某种程度上能控制区块链的记账了?事实上就是这样的。目 前比特币的挖矿算力主要集中在几个矿池,普通计算机能挖到矿的概率已经很渺茫了。当掌握了某个区块链网络中绝对力量的打包权时,就拥有了一定的破坏能力, 这种破坏攻击就称为51%攻击,为什么叫51%而不是60%或者99%呢,这只不过是个象征性的说法罢了,不用较真。51%就表明占据了百分百算力的一大 半。
话又说过来了,这占据了优势算力,具体怎么个攻击法呢?比特币中的区块是一个个衔接对应的,而其中的交易事务也是 通过输入输出的形式一一对应的,就算是随便修改了一个区块的交易事务,可是要想记入到主链中去还得将区块发送出去,等待被其他节点验证后才行,随便做了一 个破坏性的修改,根本就不能得到其他节点的验证通过,那不等于没法攻击吗?OK,我们就来演示一下这个51%攻击是怎么一个场景,我们就以使用工作量证明 机制的比特币来说明。
我们来设想一下,当打包权掌握在自己手里后,能干点什么?
(1)修改自己的交易记录,从而实现双花
我们来看一个例子,看看如何通过这种攻击从交易所获得利益。
1)将自己现有的比特币充值到某个交易所(这是为了兑换法币)。
2)自己计算出一个区块链,包含了一条交易信息,比如发送比特币到自己地址中。
3)假设这个自己计算出来的区块链的长度为10,此时先不向网络广播这个新的区块,而是先到交易所平台将自己现有的比特币换成法币(如人民币)提取出来,这个提取比特币的交易事务会记录在正常的区块链中。
4)假设当提取人民币时,正常的区块链主链的长度还是9,而我构造的区块链的长度已经是10了,此时向网络广播出去,网络会确认我的区块链是正确的,并且会记入到主链中去。
5)此时人民币已经被我提出来了,而我广播出去的第10号区块(最新的区块)中并没有包含我向交易所充值的记录,等于比特币还在我的地址中。
至此,一次攻击就完成了,上述只是一个与交易所之间的例子,其实还有很多其他生活中的场景,比如某咖啡店支持用比 特币购买咖啡,我支付给咖啡店一定数额的比特币,此时由于是小额支付,咖啡店并不会等到若干个区块确认后才给我做咖啡(按照比特币10分钟一个区块的进 度,要等上若干个区块认证……算了,还是不喝了),这个时候这笔交易还没有记入到主链中去,严格说还处于内存池,等待被打包,此时我喝着买来的咖啡,然后 通过自己的优势算力在获得打包权后将自己的这笔付款记录去除掉再广播新的区块出去,这样我就能白白喝一杯咖啡了。
(2)阻止区块确认部分或者全部交易
这个很容易理解,既然区块打包权在我手里,那这个区块里放入哪些交易事务就是我说了算,只要不违背比特币交易事务之间的衔接关系,也就可以任意剔除掉一些交易事务,使得有些交易事务长时间得不到主链确认。
(3)阻止其他矿工开采到区块
当算力优势非常明显的时候,阻止他人挖矿也就是显而易见能做到的了,这种情况下还会导致其他矿工失去挖矿积极性,导致最后挖矿算力更加集中在少数优势算力的矿工手中。
为了防止算力资源过于集中从而导致一个去中心自治的区块链系统形式上变成了一个中心化系统,人们也一直在寻求更好 的共识算法,比如PoS算法、DPoS算法等。这些算法不依赖于算力证明,而是通过持有数字代币的股权随机分配或随机投票选举代表等方法达到效果。迄今为 止,各类共识算法都各有优劣,有些区块链系统将共识模块开发成了一个可装配的组件,可以根据需要随时替换新的共识机制,不再像比特币这样写死在代码中。
当然,即便是一段时间内,算力集中在某些矿工手中,也不见得就会马上受到攻击,毕竟矿工挖矿是要付出代价的(电 费、设备损耗等),而占据算力优势的矿工投入更是不菲,花了这么多代价,反过来再攻击网络,使大家不再信任,从而自己挖出的币也就不值钱了,相信矿工们还 是会三思的。
最后提醒一下,51%攻击虽然可以占据打包权,可以决定打包区块中的交易事务,但并不是可以无限制地修改,至少有如下操作通过51%攻击是实现不了的:
1)修改他人的交易记录(没有他人的密钥)
2)凭空产生比特币(其他节点不会通过确认,达不成网络共识)
3)改变每区块的比特币发行数量(其他节点不会通过确认,达不成网络共识)
4)把不属于自己的比特币发给别人或自己(除非破解密码)
5)修改历史区块数据(其他节点不会通过确认,达不成网络共识)
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=64
微信号:qq444848023 QQ号:444848023
加入【我是码农】QQ群:864689844(加群验证:我是码农)
全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试
var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!
评论专区