什么是日蚀攻击
首先简单介绍一下日蚀攻击
以太坊的节点发现机制基于Kademlia,但其目的却不同,Kademlia旨在成为在分布式对等网络中存储和查找内容的手段,而以太坊仅用于发现新的节点。由于以太坊的节点是由其公钥表示的,并且不受IP限制,因此在一个机器上可以同时存在很多节点。攻击者在很少的服务器上制作出很多的节点,并积极的ping受害者的服务器。通过Kademlia协议,攻击者的节点信息将存储并填充在受害者节点列表中。下一步就是让受害者重启机器,手段包括断电、ddos攻击等等。重启后,攻击者再不停的ping被害者的节点以建立tcp连接,一旦被害者所有的tcp连接都是攻击者制造的,那么就达到了把被害者与正常的网络隔离的目的,当然最大的目的应该还是为了双花。有一篇论文是专门介绍日蚀攻击的,大家可以找来看看。
网上有很多关于日蚀攻击的详细介绍,在这里不做赘述。
9月11日以来以太坊巨鲸已增持超350万枚ETH:10月24日消息,据Santiment披露数据显示,自9月11日以来,以太坊巨鲸(持有至少100万枚ETH的地址)已增持超350万枚ETH,合并后巨鲸ETH持有量增长14%。
截至目前,大约132个以太坊巨鲸钱包总计持有2855万枚ETH(约合360亿美元),创下历史新高。(The Coin Republic)[2022/10/24 16:37:00]
以太坊是如何防止日蚀攻击的
在刚才提到的论文中,提到了以太坊的geth1.8.0解决了日蚀攻击,于是作者拿1.8.0和1.7.3做对比,理清了以太坊解决这个问题的做法。
直接看代码。
以太坊启动时加载p2p网络的流程如下,
cmd/geth/main.goinit方法->geth->startNode()->utils.StartNode()->stack.Start()->running.Start()
以太坊链上DeFi总锁仓量跌破500亿美元:DeBank数据显示,由于以太坊跌破2000美元,目前以太坊链上DeFi总锁仓量已跌破500亿美元,降至484.2亿美元。[2021/5/23 22:35:35]
这个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的增删改
以太坊未确认交易为104,900笔:金色财经消息,据OKLink数据显示,以太坊未确认交易104,900笔,当前全网算力为231.27TH/s,全网难度为3.06P,当前持币地址为47,731,921个,同比增加101,963个,24h链上交易量为4,474,289.34ETH,当前平均出块时间为13s[2020/9/17]
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(){}}}...}
OKEx Jay Hao:比特币和以太坊都有自己的功能:OKEx CEO Jay Hao在推特表示,我认为比特币和以太坊都有自己的功能。我们现在仍然在寻找他们真正的用例,比如安全港、价值存储、Defi或者稳定币。让我高兴的是,越来越多的人投身于其中。[2020/5/26]
注意加粗的代码,有一个针对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}}
公告 | 预计将在今日凌晨3点45分进行以太坊君士坦丁堡和圣彼得堡双分叉:目前距离以太坊君士坦丁堡和圣彼得堡双分叉还有不到11个小时,当前区块高度为7,278,099,距离硬分叉高度还有1906个区块,网络哈希率为138850.5 GH/s。预计硬分叉时间将会在3月1日凌晨3点45分左右。有业内人士认为本次以太坊君士坦丁堡和圣彼得堡双分叉具有过渡性质,其实为下一个里程碑做准备,包括一项拟议的代码变更,这将改变当前以太坊的挖矿算法,让生态系统中的矿工能够在更公平的环境中工作。此外,以太坊开发人员还会讨论其他一系列全新的以太坊改进提案,并为 2019 年 6 月的“ethereum 1x“和“宁静”升级铺好道路。[2019/2/28]
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个
金色财经比特币9月9日讯通常,那些在等待被正式批准发布比特币交易所交易基金的公司会利用“漏洞”来推出他们的比特币投资产品,当然这些临时产品也是被美国证券交易委员会所默许的.
1900/1/1 0:00:00亲爱的LOEx用户:LOEx国际站近期将独家首发上线C60,敬请期待。代币名称:C60英文缩写:C60发行总量:650,000,000流通总量:5000,000白皮书连接:http://www.
1900/1/1 0:00:00尊敬的EZB用户:EZB交易所为支持DCNY的流通性,为使用DCNY的法币用户创造最大价值,DCNY将组织承兑商联合活动提案.
1900/1/1 0:00:00EOS看涨期权代码月EOS看涨1007期权标的EOS合约类型欧式看涨期权计价单位USDT最小价格单位0.0001USDT合约比例1:2.
1900/1/1 0:00:00接下来是描述性统计结果。稳定币发行主体:初创型金融科技公司占比近60%,其次为数字资产交易所/平台,以及传统金融机构35个主流稳定币项目发行机构中:金融科技公司共20家,涉及支付/借贷/财富管理.
1900/1/1 0:00:00导语:如今商业和科技日新月异的变化着,传统的商业模式面临被淘汰的趋势,对于企业而言,必须借助科技进行改革以适应发展.
1900/1/1 0:00:00