当前位置: 首页 > 编程日记 > 正文

浅谈几种区块链网络攻击以及防御方案之51#37攻击

旧博文,搬到 csdn
原文:http://rebootcat.com/2020/04/11/network_attack_of_blockchain_51_attack/

写在前面的话

自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初的几年,并且随着比特币价格的一路飙涨,黑客针对比特币网络的攻击就一直没有停止过。据估算,目前大约有 350 ~ 400 万比特币永久丢失,价值大约 240 ~ 280 亿美元。当然其中不只有由于黑客的攻击导致的丢失,毕竟比特币最初的几年很多人都没有意识到比特币的价值,很多的私钥都遗失了。

本文就谈一下目前几种区块链网络攻击,以及其防御方案。

本文尽量用简单易懂的白话来描述,也仅代表我个人的看法,欢迎探讨

同系列:

  • 浅谈几种区块链网络攻击以及防御方案之51%攻击
  • 浅谈几种区块链网络攻击以及防御方案之日蚀攻击
  • 浅谈几种区块链网络攻击以及防御方案之女巫攻击
  • 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击
  • 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

51%攻击

在了解什么是 51%攻击前,先简单科普下区块链的几个概念,这里主要以比特币为例作说明。

什么是挖矿?

其实挖矿这个词描述得有点太过于形象了,以至于弄得反而很生涩。当然区块链世界里还有很多玩概念的东西,背后道理其实反而没那么复杂。

在比特币网络里,大家共同在维护一张账目表,参与记账的节点可以称之为矿工,其中矿工需要做的事情就是拼命竞争记账的权利,这个竞争记账权的过程可以称之为挖矿,当一个节点得到这个记账权之后,可以描述为这个节点挖到矿了。那么节点为什么会拼命的竞争这个记账权呢?因为比特币会对挖到矿的节点有奖励。这个奖励是基于区块高度的,最开始是每个区块奖励 50btc,每产生 210000 个区块为一个减半间隔,减半间隔之后奖励会减半。比如目前(2020.04)区块奖励是 12.5btc。

上面这段话里面有两个点需要解释:

  1. 为什么节点要竞争这个记账权
  2. 区块高度又是什么

针对第一个问题,如果用比较白话的方式讲的话就是,在分布式去信任的系统中,由于有激励的存在,大家都想拿到这个记账权,但是这个记账权在同一时刻(这里用词不一定表示某一刻,更多的形容相对的同一时刻)只允许其中一个节点拿到,并且由这个节点对交易进行记录。这样才能保证这张账本是唯一的,大家看到的是一样的账本。不然大家都来记账的话,这张账本就乱了,这就是称之为 ”共识“ 的由来。

针对第二个问题,很好理解,区块高度或者说时钟高度,其实是用来描述一个区块的序号的,从创世区块 0 开始依次递增。不用过分纠结,本身是一个很简单的东西,或者叫区块序号更容易理解【手动滑稽】,可以看一下下图:

我们打开 BTC.com, 可以看到比特币网络的一些信息,比如区块高度,目前最新的已经到了 625408,区块奖励是 12.57869736btc。我们选择一个区块高度(比如 625400), 可以看到这个区块的信息:

可以看到这个区块高度是 625400, 这个区块里有 243 笔交易,确认数是 9等。这里需要重点关注一下 确认数 这个概念,后面会用到这个概念。

共识

上面提到比特币网络里参与记账的节点竞争记账权的过程称为挖矿,那么除了上面抛出来的两个问题之外,还有一个问题没有解决。

那就是节点通过什么方式竞争,怎么竞争

竞争的方式就称之为共识,描述分布式去中心化的系统中大家通过共识算法达成统一某个行为或是认知的这种行为,即大家达成了共识,本次由 A 节点进行记账,下次由 B 节点进行记账。

共识算法应该能保证大家能在一定时间内形成共识,同时兼具安全性以及公平性。这样的话参与记账的节点才能有机会获得奖励,才能鼓励大家参与这个网络。

对于比特币来说,采用的是 POW 作为共识算法,即 Proof Of Work(工作量证明)。工作量证明算法是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的耗时适当的复杂运算,并且这个结果能够快速被其他节点进行验证。

比特币节点需要计算一个 hash,具体过程是对一个随机数加上交易数据做 hash,然后穷举这个随机数,使得 hash 之后的值能满足一定的条件,比如前缀是 ‘0000’。谁先计算出来,谁就在本次记账权的竞争中胜出,然后对交易打包,广播区块,获得区块奖励。显然这里的穷举需要耗费大量的算力,并且计算满足条件的 hash 值不是一件容易的事,基本上可以保证很难有在同一时刻(相对同一时刻)两个或者多个节点都找到了这个满足条件的 hash 值,这也就保证了共识的稳定性。

到这里基本上可以明白一个道理,谁拥有越多的算力,谁得到这个记账权的概率就越大,获得的奖励就会越多

最长链原则

区块链世界中有很多概念还是很不好理解的,慢慢来,比如这个最长链原则。

在分布式去中心化的系统中,由于网络传输的延迟或者网络故障等不可预知的一些因素,会导致大家收到的交易或者数据是不一致的。在几轮记账之后,势必会出现一些节点看到的区块链和其他节点看到的区块链不一致。

由于大家看到的区块链不一致,也就是有长有短的区块链。比特币规定任何矿工在看到更长的区块链的时候,应该立即停止短的区块链上的挖矿,大家共同围绕这最长的这条链进行挖矿。

如果不了解区块链原理的同学可能会一头雾水,是的,这里的概念还是比较难理解的。下面举一个例子作为说明:

上图可以看到在区块2 之后分叉了,变成了两条链,区块链网络中的一部分节点看到的链是上面这条区块链,另外一部分看到的是下面这条区块链。

矿工在挖矿的时候,或者说节点在做记账权竞争的时候,需要计算 hash,这里会用到最后一个区块的信息,当挖到区块的时候,新产生的区块里会记录上一个区块的一些信息,这样就把整个区块就串起来了,形成一条链

假设 A 节点看到的是上面一条链,并且基于这条链进行挖矿,在挖矿的过程中收到了下面一条链的区块7 的数据包,校验发现这个区块的高度相比自己的区块6’ 更高,也就是说收到了一条新的更长的区块链,那么诚实的矿工应该马上停止正在进行的基于区块6‘ 的挖矿,转而基于区块7 进行挖矿。一定时间之后上面这条链就废弃了,网络中没有任何节点会保存这条链的信息,大家看到的都是一条最长的区块链。

设想一下,如果 A 节点仍然基于区块6’ 进行挖矿,那么即便挖到了区块,收到的奖励最后也会无效。

这里可能会有人有疑惑,为什么要制定这个最长链原则?大家为什么又要遵守这个规则?从安全角度讲,最长链原则更安全,更难推翻重写;从其他角度讲,这个规则就是区块链世界里的公理,而公理就是指对一些基本的假定,比特币就是这么规定的,不用过分纠结。

细心的同学可能会注意到上面的一个问题,A 节点放弃自己的链,那么这条链从区块3‘ 开始到区块6’ 里面的数据是不是都无效了?里面的交易呢?

答案是的,里面的交易都无效了,因为一个区块是对一堆交易的打包,而对于同一笔交易来说,转账发起方会把这笔交易广播给所有人,也就是对于一笔交易来说,每个矿工都可能会收到这条交易并且放到自己的交易池。那么针对作废的区块3‘ 到区块6’ 里面的交易,虽然在这条链上无效了,但是这些交易也会被其他节点看到,说不定已经被其他节点挖到区块并且记录到下面这条区块链里了。所以针对某笔交易来说,并没有丢失。

何为51%攻击


在通过上述文章的讲解之后,明白了 ”挖矿“ 的概念,”共识“ 的概念以及 ”最长链原则“ 的概念。接下来可以正式开始介绍 51% 攻击了。

51% 攻击是指如果攻击者拥有全网 51% 的算力,那么他就能够利用算力优势搞一些动作。这里的 51% 是一个概称,实际上运气好的话可能不需要这么多的算力就能发动 51%攻击,比如 45%算力就有成功的可能性

那么我们来探讨下攻击者会利用 51%攻击做什么事?

双花攻击或者做空比特币

攻击者拥有全网超过 51% 算力之后,首先是成功挖矿的概率增大了,由于成功挖矿的概率增大,那么攻击者就能够对挖到的区块进行修改。假设攻击者是理性的,为了利益考虑,那么他会修改区块中关于自己的交易记录,以便双重支付,区块中其他的交易,由于没有发起者的签名,攻击者是不能够去修改的,也就是说攻击者没法做到把别人的币转给自己。

具体做法就是把自己的币转到交易所,卖出后出金提现,然后利用 51% 攻击去修改这笔交易,转到自己的另外一个钱包地址中,由于有算力优势,并且遵循最长链原则,那么之前转到交易所的交易记录被认为是无效的,区块链中记录的是后面这笔交易。也就是同一笔钱花了两次,最终损失的是交易所。这里不一定是交易所,也可能是其他人或者商家等。

但是双花是有可能被检测出来的,还记得上文提到的 “确认数” 吗?那么确认数是什么?

区块链是由一个个区块形象的连接在一起,形成链状。当其中某笔交易发生的时候,会被打包到区块中,然后形成区块链,每追加一个区块,确认数加 1。计算方法很简单,用当前最长链的最新区块高度减去某笔交易所在的区块高度即为确认数。这里需要注意的由于有分叉的可能(参考上面的两条不同长度的链),这笔交易在不同的链里面高度是不一样的,所以正确获得某笔交易所在的区块高度是通过交易哈希去获取的。

比如下图:

同样是区块高度为 625400 的区块,经过编写博文这么一段时间来,确认数从 9 变成了 25,说明 625400 这个区块之后新增加了 14 个区块。

节点会对区块进行校验的,对于双花攻击,节点是有可能在 6 个确认周期内发现一笔交易被双重支付了,从而对交易发起者进行一些惩罚。所以为了预防双花,一般可以增加确认数,对比比特币来说, 6 个确认周期是比较合适的。

那么此次成本和收益怎么样呢?成本就是你需要掌握全网 51% 以上的算力,这个本身就是一个很大的成本;收益就是一笔钱被花费了两次,那么这笔钱有多少就很关键了,如果少的话攻击者肯定是犯糊涂了才会发起这个 51% 攻击,如果这笔钱很大呢?在对交易进行验证的过程肯定也会更加严格,包括在交易所出金提现也是会重重验证,想要快速的脱身恐怕很难。

所以发起 51%攻击不可能是因为一次双花攻击。那么做空比特币呢?

比特币遭到 51%攻击之后势必会导致比特币乃至整个加密货币市场的市值损失,然后攻击者通过比特币期货做空比特币获益。这里其实还是跟获益的大小有关系,如果获益比较小,收益都赶不上发起攻击的成本;如果获益很大,则在实际操作套现过程中会变得很困难,至少是不顺利,风险很大。

上面的讨论基于一个假设是攻击者控制了全网 51% 的算力只持续了一段时间,攻击者的目的也只是想要发起双重支付攻击或者做空比特币,并且快速套现脱身,那么如果攻击者控制了全网 51% 以上的算力持续了很长一段时间呢?

摧毁比特币系统

先说我个人的看法,对比特币发起 51%攻击,比特币系统不会崩溃,而且还能恢复,但比特币市值就不好说了,甚至整个加密货币的市值很可能损失 0 ~ 90% 以上

如果攻击者拥有超过 51% 以上的算力,实际攻击的时候肯定不止 51%,比如达到了70% ~ 90%,并且攻击者控制持续了一段比较长的时间,那么攻击者能够反复进行双花攻击。实际过程可能是这样的:

首先攻击者需要在攻击发起之前买到一定量的比特币,或者说拥有一定量的比特币,那么出售这些比特币,然后利用算力优势发起双花攻击,抹掉出售自己比特币的这些交易记录,相当于自己的比特币与出售之前没什么变化,再次出售这些比特币,然后重复这个过程。

在这个过程中,势必会引起市场的警觉,导致比特币价格一路下跌,只要比特币价格没有跌倒 0,说明有人还愿意收比特币,那么这个攻击就可以持续。直至比特币归零或者其他防御解决方案比如硬分叉重新恢复了比特币网络。这个时候的加密货币市场,肯定是一片哀鸿。

但是从技术层面来讲,即便比特币归零了,比特币网络依然还能够通过诚实的矿工加入,利用全球闲置的大量算力,重新恢复比特币网络。至于比特币价格,这个不做讨论。也就是说 51%攻击能阻断或者影响比特币系统一段时间,但是攻击停止之后还是能够恢复的。这里就不得不提 POW 这个共识的优点了。

本来 POW 是消耗了大量的电力来做算力竞速的,但是在比特币系统接近崩溃的时候,只要有算力的加入,整个区块链网络就能恢复起来

然而,如果是使用了 POS 的区块链系统,如果发生类似的 51% 攻击,由于共识算法是以 Stake 作为依据的,那么新节点加入并不能带来任何起色,整个网络基本上不可能恢复了。但是这里有个悖论就是拥有 51% 以上 Stake 的攻击者为什么要发起这个攻击?导致自己的币不值钱?真的是人傻钱多,不在乎钱,就想干死这个区块链系统?【黑人问号脸】

51%攻击悖论

其实上面有提到过,发起 51%攻击的成本很高,尤其是想持续一段时间的攻击。那么收益的大小就很关键,但是无论怎么算,收益本身并不高并且风险巨大。

相比拥有 51% 算力诚实的参与比特币挖矿得到的奖励来说,可能都达不到。而且真实场景下,想要发起 51%攻击,门槛很高,并且不可能做到无人察觉。

所以这也就是为什么 51%攻击基本上不可能的原因。但是,,,结合其他的攻击手段,可以降低 51%攻击的算力门槛,比如日蚀攻击,这个在下一篇博文中 浅谈几种区块链网络攻击以及防御方案之日蚀攻击 会做介绍。

写在最后

关于 51%攻击,大家基本上只需要了解就行了,对于区块链系统来说,基本上不用担心这种攻击,因为有悖论的存在。真正需要关心的是门槛较低,风险较低,收益较高的攻击。

另外,使用 POW 的缺点是很明显的,但是在安全方面又有着很独特的作用,不得不佩服中本聪对比特币系统的设计!!!

参考

51% Attack

51%攻击解析

什么是比特币51%攻击?

是否仅需一次51%攻击,比特币体系即会崩溃?

Blog:

  • rebootcat.com

  • email: linuxcode2niki@gmail.com

2020-04-11 于杭州
By 史矛革

相关文章:

全球Python调查报告:Python 2正在消亡,PyCharm比VS Code更受欢迎

作者 | 唐小引题图 | 自东方 IC出品 | AI科技大本营(ID:rgznai100)一年一度的 Python 开发者调查报告终于发布了。该报告由 Python 软件基金会和 JetBrains 联合发起,已经持续三年,并且参与调查的开发者人数正在逐年上…

中兴V880使用手记之五——刷入recovery

Recovery是安卓系统的一个特殊工作模式,也就是一个刷机的工程界面,给安卓手机刷入Recovery相当于给系统安装了一个dos界面,可以在未开机的状态下,实现系统更新、还原出厂设置、清除手机缓存等。通过一些第三方工具,可以…

windows 系统常用操作

1、所有端口使用情况 netstat -ano 2、查询xxxx端口pid netstat -aon|findstr "xxxx" 3、根据端口Pid查详情 tasklist|findstr "pkd" 4、根据进程pid kill 进程 taskkill /pid pid -f 转载于:https://www.cnblogs.com/vitre/p/5549344.html

浅谈几种区块链网络攻击以及防御方案之日蚀攻击

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/12/network_attack_of_blockchain_eclipse_attack/ 写在前面的话 自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之…

微服务的理想与现实

来源 | 京东智联云开发者随着云原生微服务的日益火热,很多人都开始对微服务的相关知识内容感兴趣。本篇内容,旨在扫盲(意思是小白可入),希望能对大家有帮助。如有问题,欢迎大家一起讨论,共同学习…

感恩心成就了车建新和红星美凯龙

前几天参加了红星美凯龙成立25周年庆典活动,庆典活动非常的隆重,庆典之前红地毯上星光熠熠,红星美凯龙掌舵人车建新等多位高管、品牌代言人大小S、刘谦、古巨基、萧亚轩、胡一虎等演艺群星、马未都、马艳丽、包小柏、王潮歌、殷智贤等不同领域…

第二阶段团队项目冲刺站立会议(九)

昨天做了什么: 已经简单实现我的后续显示问题。 今天准备做什么: 美观上的东西来不及做了估计,我要整合到项目的实现上去。 遇到的问题: 项目问题大体上和竞赛一致,但也有不一样的地方。转载于:https://www.cnblogs.co…

浅谈几种区块链网络攻击以及防御方案之女巫攻击

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/13/network_attack_of_blockchain_sybil_attack/ 写在前面的话 自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初…

INODE上网IP地址刷新超时处理

IP地址刷新超时2011-06-07 09:19:08 连接网络...2011-06-07 09:19:08 开始进行身份验证... [wangliyafaguibu]2011-06-07 09:19:09 正在上传用户密码...2011-06-07 09:19:10 您的身份验证成功2011-06-07 09:19:10 自动获取IP地址...2011-06-07 09:19:11 IP地址刷新超时2011-06-…

让大规模深度学习训练线性加速、性能无损,基于BMUF的Adam优化器并行化实践...

导语:深度学习领域经典的 Adam 算法在大规模并行训练的情况下会导致模型性能损失。为了解决这一问题,微软亚洲研究院采用 BMUF 框架对 Adam 算法进行了并行化,并在微软大规模 OCR 和语音产品数据集上进行了测试,使其在并行训练中几…

Spring AOP AspectJ Pointcut Expressions With Examples--转

原文地址:http://howtodoinjava.com/spring/spring-aop/writing-spring-aop-aspectj-pointcut-expressions-with-examples/ 1) Matching Method Signature Patterns The most typical pointcut expressions are used to match a number of methods by their signatu…

限免!百名AI大咖,20大技术和行业论坛,不可错过的开发者嘉年华

根据《2020科技趋势报告》的预测,AI将引发第三次计算浪潮,也是重塑世界最大的动因之一。而在全球人工智能技术的赛道上,中国无疑是领先者,到2030中国将成为全球主要的人工智能创新中心。在这样的大环境下,如何抓住机遇…

浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初…

C++中#include的工作原理

大多数人可能对“#include”比较熟悉,因为我们写C/C程序的时候都会写的字符串之一,但是它是具体怎么工作的?或者它的原理是什么呢? 可能不太熟悉,也有可能没有去关心过。我们只关心程序能否正确运行,或者程…

浅谈几种区块链网络攻击以及防御方案之其它网络攻击

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特币诞生到现在,比特币(网络)经历过大大小小非常多次的攻击,尤其在比特币诞生之初…

基于深度学习和传统算法的人体姿态估计,技术细节都讲清楚了

作者 | 站长 pursueYfuture来源 | AI专栏(ID: pursue-Y-future)计算机视觉的一大研究热点是人体姿态估计,还有很多问题急需解决,比如遮挡,交互等等。在最近的CVPR2020里边也有很多这方面的工作。本文站长主要是想谈谈基…

怎么让百度快速重新收录

每天更新网站和做外链让百度重新收录的快速方法很多人都比较头疼让百度如何重新来收录你站点,这里为大家介绍一下我的经验;大家都知道做网络推广,特别是企业站推广,如果能在相关的关键字在搜索引擎里有个好的名次,肯定能给企业增长…

HQL语句大全

Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。Hibernate配备了一种非常强大的查询语言&#…

自动创建阿里云抢占式实例

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/08/24/auto_run_aliyun_spot/ aliyun_spot 自动创建阿里云抢占式实例。 支持一下作者,购买阿里云 背景 阿里云抢占式实例应该属于阿里云的一种闲置资源利用,性价比非常高&am…

What?! Python一行代码,能玩这么多童年的游戏?

来源 | 早起 Python责编 | Carol封图 | CSDN 下载自视觉中国儿童节就要来了,虽然秃头程序员没有头发,但是童心还是一直都在的,今天就分享一个私藏的GitHub项目——free-python-games,一行代码就能进入使用Python开发的小游戏快乐…

McAfee可能要收购NitroSecurity?

近日,根据国外媒体报道和业界人士的坊间传闻,有传闻指McAfee可能将在近期收购SIEM厂商NitroSecurity。最近,NitroSecurity正在准备IPO,去年年收入约4000万美元,在Gartner的MQ中位于Leader阵营。 NitroSecurity的SIEM技…

进程间通信IPC之--共享内存

每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读…

Scons构建C++项目

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/08/30/scons/ 前言 我是一个 linux c 开发者,但是一直对 Makefile 的语法很是头痛,每次都记不住,所以每次写 Makefile 都很痛苦,Makefile 里需要你自己编…

2020 AI产业图谱启动,勾勒中国AI技术与行业生态

《2020年国务院政府工作报告》提出,重点支持「两新一重」建设。其中「两新一重」中的第一个「新」,就是新基建,而人工智能是新基建的重要组成部分。新基建首次被纳入政府工作报告后,各大科技厂商纷纷押注,重金投向「新…

Windows Phone 7 SDK 7.1 Beta2 发布

早上看到消息,有Marketplace账号的筒子们注意了,可以去下载芒果的ROM了,一个开发者账号只能更新一个WP7,以下是App hub上的消息:来自http://create.msdn.com/en-US/news/Mango_Beta。关于开发工具的更新,可…

javascript基础语法——表达式

前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句。但是,其实还有一个术语经常使用,却很少被提到,这就是javascript表达式(expression)。本文将详细介绍javascript表达式,表达式…

Hexo Next 博客添加相册瀑布流

原文:https://rebootcat.com/2020/09/19/nextphotowall/ 前言 一直没有时间来整理下博客搭建的一些事情,现在补上一篇,给 Hexo Next 博客添加一个相册功能,使用瀑布流的方式。 原理说明 使用 github 作为仓库存储图片文件&…

【分享几个日常巡检 监控数据库的语句】

查看数据库表空间语句 select df.tablespace_name "表空间名",totalspace "总空间M",freespace "剩余空间M",round((1-freespace/totalspace)*100,2) "使用率%" from (select tablespace_name,round(sum(bytes)/1024/1024) totalspa…

AI换脸、声音篡改等,明确写入新版《民法典》

来源 | HyperAI超神经5 月 28 日,十三届全国人大三次会议表决通过了《中华人民共和国民法典》(以下简称《民法典》)第四编人格权中的第四章肖像权,明确提出了以信息技术手段,对于他人肖像、声音等权益的侵害认定。《民…

awk: (FILENAME=- FNR=1) 致命错误: 试图访问字段 -2

执行:awk {print $(NF-2)} aa.log出现错误:awk: (FILENAMEaa.log FNR1) 致命错误: 试图访问字段 -2可能和aa.log中数据有关系:改为:awk NF>1{print $(NF-2)} aa.log转载于:https://blog.51cto.com/henly/1786692