哈尔滨工程大学计算机学院2022年区块链技术课程
小组成员:2019065413史尧天,2019030521马祥桐
一.什么区块链 1.1 区块链的概念简而言之,区块链就是类似于数据结构的单链表的存储结构,在区块链上的区块中存放着用户的交易记录,而每个区块可以存储多个交易记录。区块由head和body构成,head用于连接上一个区块的地址,body包含了交易记录和其他的数据记录。
1.2 区块的产生区块的产生其实就相当于我们平时在账本上记账一样,选择了某一页,将相当于产生了一个区块,当这页被记满了,我们就需要另找一页来继续记账,这就相当于新区块的产生,而下个区块由谁来生产,怎么生成?这个过程就是挖矿,每个块的后面都有着一个哈希值,然后各个旷工需要使用该哈希值用大量的计算机资源来计算,谁能找到一个对的值,那么谁就可以用这个值来创造区块。
1.3 共识机制我们知道,数据在网络上传输是由延迟的,那么区块的产生必定会产生一定的问题。假设在同一时间有两个结点甲和乙同时挖出了新的区块(假设两者此时用的区块链是相同的),这时候他们像全网进行广播,由于网速,距离等限制,一部分结点会收到甲的区块,一部分结点收到了乙的区块,如果不加以控制,那么肯定会出现区块链随机分叉问题。因此区块链采用最长链优先机制
最长链机制:中本聪在比特币的白皮书中提到过,比特币的PoW机制是一个CPU算一票,最长链意味着这条链上的工作量最大。简单来说,比特币区块链上的区块是矿工们解决数学问题才生成的,每一个区块都和前一个区块有关联,最长的链意味着引用的区块越多,是最难被改变的。所以节点们总是觉得最长链才有效,在最长的链上挖矿才能有奖励。
有了这样的机制,那我们允许区块链出现短暂的分叉,甲乙双方收到对方的区块链,此时就会支持区块链较长的那方,接着以对方的账本继续挖矿,这样就能保证有一条大家公认的区块链账本。
二.51%攻击但采用了最长链机制,这个货币系统就是安全的吗?假设现在我拥有全球51%的计算机资源,那么理论上来说我计算下一个区块一定比其他的结点块,那么我就可以任意的添加对自己有益的交易记录,而且还不需要其他人的确认。这样就会出现一个问题,这个货币不会再被别人所相信,货币系统也就运行不下去了。
2.1 什么样的货币系统才是安全的?比特币白皮书中,有过这样的表述:诚实节点控制算力的总和,大于有合作关系的攻击者算力的总和,该系统就是安全的。
2.2 什么是51%攻击?当系统中有合作关系的恶意节点所控制的算力,超过诚实节点所控制的算力,系统就是有被攻击的风险。这种由恶意节点控制超过50%算力所发起的攻击,称为51%算力攻击(51% Attack)。
2.3 是不是所有的加密货币都会出现51%攻击?只有基于PoW(工作量证明)共识机制的加密货币,才存在51%算力攻击,比如比特币、比特现金和目前阶段的以太坊等;而非PoW共识算法的加密货币则不存在51%算力攻击,如基于DPoS(委托权益证明)共识机制的EOS、TRON等
2.4 51%攻击容易实现吗?理论上我们无法通过技术层面来阻止51%攻击,但为什么比特币现在仍然运行地好好的,这是因为在设计比特币系统时,中本聪利用经济学原理来减少51%攻击出现的可能——获得全网算力优势的代价极度昂贵,而花费极高成本实施的双花攻击会造成信任崩溃,使得数字货币严重贬值,这对于攻击者而言得不偿失。相反,在拥有51% 算力的情况下,进行诚实挖矿所获得的收益要更多。这也被人叫做51%攻击悖论。
假设,我现在准备花费大量的资金,来获取全球超过50%算力资源,然而当我实施51%攻击后,发现我赚到的还没有我花的多,而且不仅如此,由于发生了%攻击,还导致比特币发生贬值,那岂不是得不偿失。
那肯定有人要问了,既然51%要花费这样的大的成本,怎么会有人去发送51%攻击?答案是:有的要知道比特币可是存在许多山寨币的,如下图所示,比特币现金,电子现金,比特币SV。
而我们也可以发现在山寨币上的结点是远远低于比特币的,因此获得全网算力优势的代价相对较小,攻击者可以在实施 51% 攻击后,退出系统快速变现,从而牟取暴利。
三.攻击方式这里介绍两种我理解了的51%攻击方式
3.1 贿赂攻击贿赂攻击是一种在非协作选择模型上(比如无信任基础区块链)的攻击,攻击者通过额外经济奖励收购挖矿算力,使得自己所掌握的算力短期内超过51%,从而对区块链进行 51% 攻击。
3.1.1 产生过程1.攻击者发起一笔交易 A,将一定量的数字加密货币转账给受害者;
2.受害者在交易 A 收到足够多的确认后,认可交易 A,并向攻击者移交等值的财物;
3.攻击者在网络中宣称将提供额外奖励给在目前相对较长但不包含交易 A 的次主链上工作的矿工, 以鼓动其他矿工违背共识, 在非主链上进行工作;
4.当次主链足够长时,攻击者通过加大奖励力度,促使次主链的长度在短时间内超过原主链的长度;
5.当次主链成功超越原主链长度后,次主链成为最长链,根据共识,其他矿工承认次主链为新主链, 原主链中的交易 A 因为回滚而无效。
可以看到攻击者转给受害者比特币,受害者将等值的现金交给攻击者,但是攻击者收到现金之后,却使用金钱来贿赂其他旷工在另一条不包含这个交易的链上挖矿,那么最后就导致此链的长度超过了包含交易的那一条链,由于最长链机制,次链变成了主链,而比特币仍然还在攻击者的账户里面。
3.1.2 防范措施在区块链挖矿机制设计中引入保证金和惩罚措施. 当矿工做出不利于区块链的决策时, 会受到处罚并失去抵押在链上的保证金. 这种惩罚措施变相提高了攻击者的贿赂成本, 使得贿赂攻击更难发生.
3.2 通用挖矿攻击 3.2.1 产生方式通用挖矿攻击的攻击目标是那些和已有币种的架构和共识相同或相似但还未形成挖矿规模的币种, 尤其是主流币种的山寨分叉币. 由于这些山寨币和某些主流币架构和共识算法相同, 主流币的矿机可以直接用来开采山寨币. 攻击者通过挪用大量主流币矿机, 轻松获得山寨币 51% 算力, 从而进行 51% 攻击, 之后攻击者只需将攻击成果变现, 再返回主流币继续挖矿即可. 由于攻击者只是短期持有山寨币, 因此攻击导致信任崩溃而引起的山寨币贬值对攻击者没有任何影响, 换句话说, 这种通用挖矿攻击对于攻击者而言成本低廉, 极易实施.
这种方式就和前面的2.4讲的大同小异。
3.2.2 防范措施区块链设计者在设计新币种时应尽量避免与其他主流区块链的架构和共识算法冲突. 新的币种使用新的共识算法和架构或是在已有算法上进行调整可以有效的减少其他币带来的影响
四.产生危害 3.1 自私挖矿自私挖掘池选择性地释放挖到的区块,有时放弃自己当前的收入,但常常突然释放更多的块,迫使其他网络丢掉自己的块或者失去应有的收入。短期内自私挖掘的收入会较低,同时这也降低了其他块的收入。而保持中立的节点就可能加入自私挖掘池的队伍来增加他们的收入。最终,自私挖掘池的队伍会逐渐扩大到超过50%的大小,网络的控制权由自私挖掘池掌握。
什么意思呢?举个例子,假设我拥有超过50%的算力资源,那么我可以一直在我的链上持续挖矿,但是呢?我却比较自私,并不是挖出一个区块,就把这个区块发布出去,而是先攒着,等到挖到一定数量的区块,再发布。这样做有什么用呢?首先,我拥有超过50%的算力资源,那么我挖出来的区块数量肯定是比其他人多的,因此在最后发布出去的时候,并不需要其他人的批准和认可,我的链可以直接变成主链。其次,别人也许在之前的链上挖出了一些区块,但是肯定没有我挖的多,由于最长链机制,导致其他人挖到的区块会被直接作废掉,完全让其他人浪费掉了他们的算力资源,而且他们还拿不到挖区块所获得的奖励。如此一来,我就一直可以偷偷的挖区块,然后拿走所有的挖矿奖励和转账费用。
3.2 双花交易双花交易又被称为“双重支付”
假设两件商品的价格都是100元,而我们钱包中只有100元,理论上我们只能购买其中的一件商品,但是由于区块链的最长链优先的原则,我们可以同时的购买两件商品。
如上图所示,A在同一时间发出两个区块,一个包含了A转账B100比特币的交易1,另一个包含A往他的另一个账户A'转账100比特币的交易2,而A在不包含交易1的链上继续挖矿,因为他有着超过全网50%的算力资源,所以他挖出下一个块的速度会快于包含交易1的链的速度,这样由于比特币的最长链机制,交易1会消失掉,B并没有收到100比特币,而A的100比特币还在自己的腰包,因此做到了一笔钱花两次,也就是双花交易。
3.3 随机分叉同一时间段内全网不止一个节点能计算出随机数,即会有多个节点在网络中广播它们各自打包好的临时区块(都是合法的)。
某一节点若收到多个针对同一前续区块的后续临时区块,则该节点会在本地区块链上建立分支,多个临时区块对应多个分支。该僵局的打破要等到下一个工作量证明被发现,而其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营,开始在较长的链条上工作。其他分支将会被网络彻底抛弃。
每一个节点从全网接受信息,因此可能会发生在同一时间收到两个相同长度的链,因此在此节点就会出现分叉,在两条链上同时进行挖块,直到通过最长链机制选出较长的一条,就舍弃掉另一条。那些最开始就在另一条链上工作的结点相当于在这段时间白白浪费了自己的时间和算力资源。
五.结束语任何货币都需要有足够的的安全性才会被别人所认可,而比特币51%攻击的危害如此之大,很容易使比特币系统奔溃,因此想要让比特币能够持续发展下去,不仅需要找到合适的解决措施,最重要的还是矿工们做到诚实挖矿,让诚实节点远远多余那些坏节点的个数。
六.参考文献魏松杰,吕伟龙,李莎莎.区块链公链应用的典型安全问题综述[J].软件学报,2022,33(01):324-355.DOI:10.13328/j.cnki.jos.006280.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)