本文摘要:前言居善地,心善渊,与善仁,言善信,政善治,事善能,动善时。
前言居善地,心善渊,与善仁,言善信,政善治,事善能,动善时。背景区块链少见的反击主要有,延展性反击、51%算力反击、DDoS反击、女巫反击或日蚀反击、粉尘反击。
这里就不一一讲解了,主要来聊下「日蚀反击」。日蚀反击(Eclipse Attack)是一种针对点对点网络(p2p)类似流形结构的反击手段。大家都告诉日蚀是一种天体物理现象,月球在白天的时候运营到地球与太阳之间,遮盖太阳光,构成日蚀。日蚀反击所取此意互为,在网络中通过蓄意网络连接将目标节点从网络连接环境中隔绝,使目标节点无法提供网络上的长时间数据,就样子日蚀下地球无法提供太阳光,故名“日蚀反击”。
针对传统P2P网络的日蚀反击由来已久。而针对区块链网络的日蚀反击首次经常出现于2015年的信息安全顶级会议USNIX。波士顿大学的 Ethan Heilman在其论文 《Eclipse Attacks on Bitcoin’s Peer-to-Peer Network》中,分析了日蚀反击针对区块链网络的手段可行性和有可能导致的严重后果。- 论文地址 -https://eprint.iacr.org/2015/263.pdf在比特币网络中,目前理论上完全唯一不存在的反击手段是51%算力反击,虽然这种反击手段在别的基于PoW共识算法中早已被顺利实行了很多次,比如以太经典的51%算力反击。
- 「以太经典51%算力反击」原文地址 -https://bravenewcoin.com/insights/etc-51-attack-what-happened-and-how-it-was-stopped但在比特币网络里却根本没过被人顺利实行过的迹象,却是花费数亿美元的代价去实行反击,网卓新闻网,无论怎么看都是得不偿失的。但通过日蚀反击,攻击者可以不对整个网络展开反击,而是针对特定的节点,比如反击交易所,这样的反击成本将近大于51%的算力市场需求。
在实行日蚀反击时,攻击者可以向受害者发动大量的网络连接的创建催促,让自己沦为目标节点的Peer node。通过这种手段,一旦受害者所有的peer node都变为由攻击者掌控的节点,受害者在区块链网络的所有input和output都将接到攻击者的监控和掌控。一旦掌控了受害者的所有区块链网路通信,攻击者就可以截击长时间区块链网络里实时的交易,新的区块等信息,转而向受害者广播自己埋的新区块,而由于受害者无法提供长时间网络的区块信息,攻击者将仍然受限于反击长时间网络所需的51%算力,而只必须掌控比受害者多的算力才可已完成反击过程。
针对普通节点的日蚀反击可使目标节点的算力违宪,埋违宪区块,适当地使自己的算力在区块链网络中的占比减少。而针对交易所的日蚀反击则有可能通过一个分开对交易所发动的账户交易或者付款交易而在交易所节点中已完成双花反击或者必要盗取交易所持有人的加密货币。来自peer node的网络封锁以我的理解来看,想要发动日蚀反击,攻击者就必需用自己掌控的节点几乎代替受害者在区块链网络中的长时间peer node,否则任何一个有可能的链接都会使得受害者接管到长时间的区块和交易。
此外,攻击者应当有能力建构假造的新区块并且可以通过受害者节点的检验,否则,意味着是将目标节点从区块链网络中隔绝出去,攻击者所能取得的收益将无法最大化。基于以上,我们来分析对Neo网络发动日蚀反击的可能性。再行来看下将Neo节点在网络上展开封锁的可行性。
关于网络部分的更好内容,青睐读者《Neo从源码分析看网络通信》。-《Neo从源码分析看网络通信》 -https://my.oschina.net/u/2276921/blog/1622015除了从Neo服务器提供之外,还能以主动提供的方式来提供网络节点,将要网络节点的催促广播给所有与本地节点创建相连的节点,通过已相连远程节点的节点列表来动态搜集整个网络中的节点信息。分析Neo的网络机制,就能告诉Neo在网络通信这块需要必要跟目标节点创建通信,这是一个好的结尾。
接下来,再行想到其不存在的潜在容许,否能通过单一节点来发动大量的网络连接以催促堵塞目标节点。通过分析源码,我们在src.neo.Network.P2P.ChannelsConfig.cs 里看见了Neo针对peer节点IP的容许,同时也有针对仅次于链接数量的容许。但这是好事,最少意味著阻隔节点的工作量是有下限的。
/// summary/// Max allowed connections/// /summarypublic int MaxConnections { get; set; } = Peer.DefaultMaxConnections;/// summary/// Max allowed connections per address/// /summarypublic int MaxConnectionsPerAddress { get; set; } = 3;但是对同一IP的链接容许也意味著没有办法仅有通过一台机器收到大量链接催促来实行廉价高效的反击。从攻击者角度来说,这很不友好关系。
更加不友好关系的是,Neo在初始化的时候,不会再行读取一个seedlist作为初始peer nodes的候选人。- 源码方位 -src.neo.Network.P2P.LocalNode.csprivate readonly IPEndPoint\[\] SeedList = new IPEndPoint\[ProtocolSettings.Default.SeedList.Length\];而这个SeedList里显著会有攻击者的地址。
"seed1.neo.org:10333","seed2.neo.org:10333","seed3.neo.org:10333","seed4.neo.org:10333","seed5.neo.org:10333"这里就不会经常出现困难,因为我们没有办法在不必要反击目标节点或者DNS的前提下让目标节点和这些seedlist插入链接。从共识应从接下来,我们再行来分析下Neo的共识机制。更加详尽的内容,青睐读者《Neo从源码分析看共识协议》。Neo使用的是dBFT共识机制,在dBFT共识过程中,并不是所有的节点都有参予共识的资格,而是必须投票选举出有一票议员(目前还是官方登录)。
一票议员的列表在每一个节点中都有备份,所以想把自己假造成议员是不过于现实的。在共识过程中,新的区块由议员轮流化身议长主持人分解,并须要由多达2/3的议员检验亲笔签名证实后才能生效。在普通节点实时新的区块的时候,是不会检验区块的亲笔签名,如果亲笔签名数据不合法,那么新的区块就不会被无情拒绝接受。
dBFT的这种共识结构对日蚀反击本身是不友好关系的,当然,你也可以说道是更加安全性的。因为议长分解区块议员展开检验的机制本身就意味著,即使我们顺利把目标节点隔离开,那么也没有办法分解合法的新区块。
因为攻击者本身不是议员,没有机会分解新的区块。而且即使攻击者是议员,又假设恰好是议长,这时候情况不会略为悲观点,但是想往下进展仍然很难。来自蓄意议员的帮助我们假设议员里有恰好1/3,1个议员统一帮助我们发动反击,并且漠视Neo对peer节点的一系列容许。情况看起来一片岌岌可危,我们享有了这么多的卧底,哪怕我们再行纳一个人重新加入我们,我们就可以光明正大的给Neo使绊子了,但我们稍不,我们就要这种刚刚好的感觉。
但是知道前景光明么?由于每个共识周期的区块是在共识周期内的视图里分解的,所以我们可以在共识周期里重置视图的地方看见,对于新的分解区块只不过是由一个多投账户来分解的,这个多投账户就是通过全体议员中多达2/3议员亲笔签名来检验通过的。- 源码方位 -src.neo.ledger.Blockchain.cspublic static UInt160 GetConsensusAddress(ECPoint\[\] validators){ return Contract.CreateMultiSigRedeemScript(validators.Length - (validators.Length - 1) / 3, validators).ToScriptHash();}由于我们的议员数量无法达成协议分解新的区块的必要条件,所以除了有数的卧底之外,我们还必须加到新的议员转入我们的阵营。但是通过“合法”手段提供新的节点或许是一件不有可能已完成的任务。
首先,在Neo网络中加到新的议员是必须经过议会选举过程的,这个过程中的所有交易都必须经过有数的多达2/3议员的检验才能通过,即先要通过议会选举减少攻击者的实力,才能“光明正大”地反击Neo。因此,对Neo网络实行日蚀反击或许是不现实的。总结本文从Neo源码的角度,一方面分析了日蚀反击的反击手段和有可能导致的后果,另一方面也探寻了面临日蚀反击的时候Neo系统本身的巩固性。
本文是关于区块链安全性的科普性文章,部分内容有可能不合乎专业性,严谨性,亦须饮用。作者实力所限,文中不免疏忽,望不吝交流指点。
本文来源:澳门最新网站游戏-www.517bst.com