http://www.7klian.com

XVG 恶意挖矿事件透视:「算力优势+时间挟制」进攻案例阐明

(图十八)

如图十七和十八,代码主要的窜改是将上次窜改的判定时间戳校验的代码举办规复,nMaxClockDrift 由 20 分钟调解回 2 小时。修复了代码 if (GetBlockTime() < pindexPrev->GetBlockTime())return error(“AcceptBlock() : block’s timestamp is too early”);大概误伤正常产出的区块的问题。

2. XVG 简介和挖矿安详事件阐明2.1 加密钱币 XVG 简介
(图三)

XVG 又名 verge,是基于比特币技能的开源加密钱币,主打匿名性,与门罗,达世雷同。XVG 最初是在 2014 年推出的,由于快速增长的社区,这个数字钱币迅速风行,并不绝吸引世界各地的用户前来投资。 XVG 的挖矿算法有 Scrypt/X17/lyra2rev2/MYR groestl/blake2 s 这 5 种,而且出块时间仅为 30 秒,大巨细于比特币的 10 分钟。因为支持的算法多,可以使更多矿工可以或许挖到 XVG 币,从而确保每小我私家都有平等的时机获取 XVG 币。 在生成新块的时间戳校验方面,XVG 是警惕了旧版的比特币的代码。在 checkblock() 和 acceptblock() 函数傍边挪用了时间戳校验的算法,与 bitcoin0.8.2 沟通,别离是凭据如图四中的函数执行流程得到挪用。

(图十七)


3.2 xvg 团队的第二次 patch

由于 XVG 支持 5 种算法竞争挖矿,正常挖矿的环境下,取 10 个区块如下截图。

(图十)


通过调查发明,进攻者最开始修改时间戳的块是 2007355,并不是 ocminer 所说的 2007365,如图六 :

(图十九)


作者 | 360 埃癸斯尝试室

第二种方法 : 每隔 9 个块,使得持续的三个块时距离断改为 1 秒 (图二赤色字体) 很显然按照难度调解的函数,我们知道这里出块的速度很是的快。导致这里难度极速回调。 下表是赤色的块的难度环境。

https://github.com/vergecurrency/VERGE/commit/80c81aef63272231fc39c2af4b8db9f3f2e9


(图二十)

为了阻止单一算法独有挖矿,新插手 CheckPreAlgo() 函数,如图十九和图二十所示,从块高度 2042000 开始,在执行 checkblock() 函数的时候开始挪用新插手的查抄逻辑。自当前区块共向前回溯 10 个区块,查抄单一算法挖出的区块数,当每 10 个区块有 6 个可能 6 个以上的区块是由单一算法挖出的时候,新出的这个区块不会被链接管,从而缓解单一算法独有挖矿激发的安详问题。


patch 窜改如下三图。

(图七)

下面临代码做简朴表明。图七代码的意思为只要新块的时间戳大于之前 11 个 block 的时间戳的中位数,且不高出当前网络时间 2 个小时,则这个块都被认为有效。GetBlockTime() 只是简朴返回位于 class CBlockHeader 中的 nTime 成员,也即本块生成的时间戳。GetMedianTimePast() 的实现如图八 :

(图十一)

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