以太坊是如何解决日蚀攻击(eclipse attack)的?_EER:以太坊银行币值钱吗

什么是日蚀攻击

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

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

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

以太坊开发人员正在计划下一个硬分叉“Dencun”:金色财经报道,在周四的以太坊开发电话会议上,开发人员讨论了下一个硬分叉“Dencun”,该名称源自以太坊区块链的两个主要层上同时发生的两个升级的组合词,所有协议规则所在的执行层将进行“Cancun”升级,而在确保块得到验证的共识层被称为“Deneb”。Dencun的核心是EIP4844,也被称为“proto-danksharding”,该提案旨在通过增加数据“blob”的空间来扩展区块链,预计这些变化还将降低第2层rollups的费用。预计Dencun还将包括一些其他技术升级,包括EIP6780、6475和1153。开发人员在本次会议上没有讨论Dencun升级的时间,尽管他们过去曾表示,目标是在2023年下半年推出。Dencun的全貌预计将在接下来的几周内确定。[2023/5/12 14:58:14]

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

Aave新提案投票拟在以太坊合并前关闭ETH借贷市场:金色财经报道,Aave发起新的提案投票,计划在以太坊合并前关闭ETH借贷市场,此外当ETH利用率达到100%时,将借款APR从103%提升到1000%。该投票将于9月3日12:15结束。[2022/8/30 12:57:10]

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

直接看代码。

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

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

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

报告:以太坊DeFi市场活跃钱包数量自2月中旬下降近40%:金色财经报道,DappRadar报告显示,以太坊DeFi市场上活跃钱包数量从2月中旬至今下降了近40%,主要DeFi协议(例如Synthetix和Curve)24小时活跃用户数也下降了10%到15%。但在过去30天内,Uniswap的用户增加了22%,1inch的用户增加了35%。[2021/3/8 18:26:20]

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

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

动态 | 成为以太坊信标链验证者仅需经过25.6mins验证:金色财经现场报道,6月29日在2019以太坊技术及应用大会上,以太坊核心研究员 Hsiao-Wei Wang详细介绍了成为信标链验证者的步骤。首先质押32ether(或大于),合约验证余额,再经过4epochs(25.6mins)后即可激活验证者身份。[2019/6/29]

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

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(){}}}...}

动态 | 过去三个月以太坊开采空块数量急剧增长:据AMBCrypto消息,在过去三个月中,以太坊使用指标显示了一个相当令人吃惊的趋势:开采的空块数量急剧增加。CoinFi的首席数据科学家AlexSvanevik说,非法矿场所使用的技术被称为“间谍采矿”,即矿工在不实际处理区块内任何交易的情况下因采矿而得到奖励。在这种情况下,形成“空块”。这对以太坊造成了前所未有的威胁,数据显示,空块的传播速度快了15%,这意味着间谍矿工的总收入也增加了15%。经过搜索发现,有两个矿池存在这种行为:F2Pool和Etherdigg。[2018/10/7]

注意加粗的代码,有一个针对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个

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

水星链

[0:15ms0-0:503ms