EER:以太坊是如何解决日蚀攻击(eclipse attack)的?

什么是日蚀攻击

首先简单介绍一下日蚀攻击

以太坊的节点发现机制基于Kademlia,但其目的却不同,Kademlia旨在成为在分布式对等网络中存储和查找内容的手段,而以太坊仅用于发现新的节点。由于以太坊的节点是由其公钥表示的,并且不受IP限制,因此在一个机器上可以同时存在很多节点。攻击者在很少的服务器上制作出很多的节点,并积极的ping受害者的服务器。通过Kademlia协议,攻击者的节点信息将存储并填充在受害者节点列表中。下一步就是让受害者重启机器,手段包括断电、ddos攻击等等。重启后,攻击者再不停的ping被害者的节点以建立tcp连接,一旦被害者所有的tcp连接都是攻击者制造的,那么就达到了把被害者与正常的网络隔离的目的,当然最大的目的应该还是为了双花。有一篇论文是专门介绍日蚀攻击的,大家可以找来看看。

网上有很多关于日蚀攻击的详细介绍,在这里不做赘述。

以太坊2.0流动性质押协议Rocket Pool上线新版Staking UI并将下调迷你池费率:3月12日消息,以太坊 2.0 流动性质押协议 Rocket Pool 在其官方社交媒体上宣布新版 Staking UI 已正式上线,新功能改进了钱包面板,为用户提供交易估算服务、以及更直观的 rETH 汇率和帮助支持。此外,Rocket Pool 还宣布将根据社区提案将所有新迷你池(minipool)的佣金率下调为 15%(目前最高为 20%),除非出现重大分歧,否则该提案将在 UTC 时间 2022 年 3 月 23 日 0:00 生效。[2022/3/12 13:52:31]

以太坊是如何防止日蚀攻击的

在刚才提到的论文中,提到了以太坊的geth1.8.0解决了日蚀攻击,于是作者拿1.8.0和1.7.3做对比,理清了以太坊解决这个问题的做法。

数据:以太坊矿工收入以美元计算在 EIP-1559 升级前后差别不大:8月31日消息,以美元计算的以太坊矿工收入在 EIP-1559 升级前后差别不大,约 1.8 亿美元。币价方面,以太坊币价本月大部分时间徘徊在 3000 美元附近,而 7 月则围绕 2000 美元波动。数量方面,据 Etherscan 数据,截止 8 月 29 日,以太坊矿工本月共挖得以太坊约 6.1 万枚环比大幅减少(7 月共挖得 9.1 万枚),主因 EIP-1559 升级后以前部分属于矿工的以太坊被销毁。(The Block)[2021/8/31 22:49:03]

直接看代码。

以太坊启动时加载p2p网络的流程如下,

cmd/geth/main.goinit方法->geth->startNode()->utils.StartNode()->stack.Start()->running.Start()

币安:以太坊和ERC20代币提款已恢复:交易平台币安:以太坊和ERC20代币提款已恢复。(金十)[2021/5/19 22:22:15]

这个running.Start()调用的即是p2p/server.go中的Start()方法,看看这个方法做了什么:

//Startstartsrunningtheserver.//Serverscannotbere-usedafterstopping.func(srv*Server)Start()(errerror){......srv.loopWG.Add(1)gosrv.run(dialer)srv.running=truereturnnil}

这篇文章主要关注解决日蚀攻击相关代码,其他的不做介绍。

上面的gosrv.run(dialer)连接池管理协程,负责维护TCP连接的列表,监听各种信号,处理peer的增删改

USDC Treasury在以太坊网络增发1800万枚USDC:Whale Alert数据显示,北京时间4月4日00:26,USDC Treasury在以太坊网络上增发1800万枚USDC。增发哈希为:0xc35d0f126896e58108aedd393c503919d087fa95888e7f54a23e047cfea4f72d。[2021/4/4 19:43:57]

func(srv*Server)run(dialstatedialer){...running:for{scheduleTasks()select{...casec:=<-srv.posthandshake://Aconnectionhaspassedtheencryptionhandshakeso//theremoteidentityisknown(buthasn'tbeenverifiedyet).iftrusted{//EnsurethatthetrustedflagissetbeforecheckingagainstMaxPeers.c.flags|=trustedConn}//TODO:trackin-progressinboundnodeIDs(pre-Peer)toavoiddialingthem.select{casec.cont<-case<-srv.quit:breakrunning}casec:=<-srv.addpeer://Atthispointtheconnectionispasttheprotocolhandshake.//Itscapabilitiesareknownandtheremoteidentityisverified.iferr==nil{//Thehandshakesaredoneanditpassedallchecks.p:=newPeer(c,srv.Protocols)//Ifmessageeventsareenabled,passthepeerFeed//tothepeerifsrv.EnableMsgEvents{p.events=&srv.peerFeed}name:=truncateName(c.name)srv.log.Debug("Addingp2ppeer","name",name,"addr",c.fd.RemoteAddr(),"peers",len(peers)1)gosrv.runPeer(p)peers=pifp.Inbound(){}}...casepd:=<-srv.delpeer://Apeerdisconnected.d:=common.PrettyDuration(mclock.Now()-pd.created)pd.log.Debug("Removingp2ppeer","duration",d,"peers",len(peers)-1,"req",pd.requested,"err",pd.err)delete(peers,pd.ID())ifpd.Inbound(){}}}...}

以太坊ETH 2.0测试网Onyx活跃节点达244 个:Bitfly宣布启动 ETH2.0测试网数据统计平台eth2.ethernodes,根据该平台数据显示,Onyx Network目前有244个活跃节点,Witti Network有54个活跃节点,Topaz Network的活跃节点数为198个。[2020/6/15]

注意加粗的代码,有一个针对inboundCount的操作,当有posthandshake、addpeer消息的时候,会先去check,如果add或del了一个peer,则有对应的inboundCount或者inboundCount--。看看到底check了什么:

protoHandshakeChecks最终也是调用encHandshakeChecks:

func(srv*Server)encHandshakeChecks(peersmap*Peer,inboundCountint,c*conn)error{switch{case!c.is(trustedConn|staticDialedConn)&&len(peers)>=srv.MaxPeers:returnDiscTooManyPeerscasepeers!=nil:returnDiscAlreadyConnectedcasec.id==srv.Self().ID:returnDiscSelfdefault:returnnil}}

inboundConn表示连接类型为主动连接过来。

看加粗的这段逻辑:如果该连接是信任的,且是主动连接过来的,且主动连接过来的节点数量大于srv.maxInboundConns()时,则拒绝此连接。

可以看出来,以太坊是通过限制主动连接过来的数量来阻止日蚀攻击的。我们顺便看下这个数量是多少:

func(srv*Server)maxInboundConns()int{returnsrv.MaxPeers-srv.maxDialedConns(。func(srv*Server)maxDialedConns()int{ifsrv.NoDiscovery||srv.NoDial{return0}r:=srv.DialRatioifr==0{r=defaultDialRatio}returnsrv.MaxPeers/r}

MaxPeers默认是25,defaultDialRatio表示能够接受主动连接的比例,默认是3,所以最多允许传入的tcp连接数量就是25/3=8个

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

MEXC区块链:能源“链”上发力 电力自由交易

文:杨思佳编辑:王巧头图来源于pixabay20世纪30年代以来,随着化石能源带来的全球性危机,各类新能源开始投入使用。目前,中国已成为世界节能和利用新能源、可再生能源的第一大国.

区块链BTC:BTC多次向上试探无果 关注11000压力位

本文观点仅代表个人,仅限交流学习,所有内容不构成任何投资建议。想及时了解更多行情信息,请添加官方进群:jiamibaoluo目前以太坊网络上映射的BTC达到173874枚:目前以太坊网络上映射的.

[0:0ms0-0:559ms