基于智能合约的区块链跳池攻击预防方案

 

0x01 Pool Hopping attack

跳池攻击(Pool Hopping attack)是矿工在提供财务奖励较少时离开矿池,而在采矿产生更高奖励时又加入的结果。这种离开和重新加入矿池的行为会让矿工得到比他们贡献的计算能力更多的回报。

离开矿池的矿工夺走了了矿池的集体哈希能力,这使矿池无法成功挖掘该区块,从而导致其竞争对手在其完成之前就挖掘了该块。现有很多池跳防御措施和检测策略,但是它们没有提供任何强大的预防性解决方案来阻止矿工离开矿池。本文为了防止跳池攻击,提出了一种基于智能合约的跳池攻击预防模型。

主要目标是通过要求所有矿工不断贡献其计算能力来成功开采一区块,从而保持矿工之间的平等关系。实施了一个分类帐本以矿工证书的形式包含所有矿工的记录,该记录跟踪矿工先前行为的历史。该证书使资产池管理者可以更好地启动智能合约的条款,从而保护现有矿池成员的利益。该模型可防止频繁的跳池,他们以代管的形式提交币,如果在完成区块开采之前放弃矿池,就有可能失去资产。

 

0x02 Mining Pool

本文介绍了每个跳池攻击预防解决方案都必须解决的关键关键因素,并与现有解决方案进行了比较分析。在矿池中,如果挖掘成功,则池中的矿工将根据特定标准分享采矿奖励。包括每股收益(PPS),最后n股收益(PPLNS),和可预测收益。作为共享奖励的标准,可预测的单独采矿(PSM)是每个池采用不同规则和规定的地方。这样的矿池占比特币总挖矿率的65.8%,以太坊总挖矿率的76.9%,极大地影响了区块链的维护。

有多种针对采矿池的攻击,称为跳池,扣块攻击(BWH)和扣块后分叉(FAW)攻击。在这些攻击中,原则上已知的跳池攻击对区块链矿池是致命的。当矿工跨越不同的矿池时,会发生跳池攻击,并且仅当池的预期收入较高时才参与,而当预测收入较低时则退出。即使离开或加入矿池后,这些恶意矿工仍然可以得到奖励,这使诚实的矿工处于不断参与矿池的劣势。如果不对跳池攻击进行检查,则没有理由让诚实的矿工留在池中。因此,如果每个人都进行频繁的跳池,那么只有少数矿工会留下来,诚实的矿工会赔钱并离开区块链矿池。如果仅剩下几个矿工,他们将不会参与挖掘区块,因为个体采矿需要非常高的计算资源,而这是许多人负担不起的。如果剩下的矿工很少,那么他们将无法保证区块链的完整性,并使维护区块链变得难以管理。因此,必须防止跳池攻击以维护区块链网络。

现有的研究提出了使用基于返回事务处理的去匿名化技术,基于时间和基于信誉的检测方法以及旨在仅检测攻击的矿池反抗措施。跳池的检测不仅是主要要求,而且对于防止将来发生跳池也很重要。本文提出的系统介绍了Hop_Count和作为托管提交的代币的概念。 Hop_Count是矿工离开采矿池时增加的数字,它确定必须作为托管提交多少枚代币。该矿工将代币作为托管方提交,当他们放弃采矿池时将被剥夺它们。换句话说,存放在第三方托管中的代币用作存款,并要求矿工仅留在一个矿池中,以免损失所存放的钱。

 

0x03 Key Considerations

有效的跳池预防措施必须考虑三个关键因素。它们是计算能力,安全性和问责制。所确定的关键考虑因素的重要性如下:

•计算能力:矿工需要一定数量的计算能力才能解决密码难题,才能成功挖掘区块。为了增加成功的机会,他们与其他矿工一起集体开采。如果一个矿工或一组矿工放弃矿池,则集体计算能力将大大降低。矿池与其他矿池竞争,以首先挖掘区块。第一个成功获得区块的人将获得奖励。因此,计算能力的下降危及首先解决挖掘难题的主要目标。

•矿工风险:矿池面临变化的哈希能力,并且挖掘区块存在延迟(即,挖掘所需时间超过挖掘区块所需的平均时间)。重要的是要确保加入矿池的新矿工将来不会有风险。记录有放弃矿池并稍后再加入矿池的矿工要么不被允许加入矿池,要么被要求同意防止他们离开矿池的条款。矿池管理者必须能够确定允许矿工加入挖矿网络的风险因素[21]。

•问责制:需要为每位放弃矿池的矿工制定一种问责措施,以为其个人经济增长获得更大的经济回报。这种考虑的需要是作为一种预防方法,以确保离开矿池的矿工受到处罚,并且在此类事件期间,矿池中现有的矿工会得到充分而均匀的回报。

根据对上述研究的分析,当前没有现有预防措施来预防矿工过早地离开矿池。虽然他们可以成功地检测到跳池或提供防跳池解决方案,但没有建议的方法来阻止它们重复相同的行为。

 

0x04 Prevention Model

基于智能合约的预防模型对跳池的矿工施加了严厉的惩罚,如果矿工在解决区块难题之前离开了矿池,则会给矿池带来经济利益。

矿工恶意利用成功挖掘区块的奖励分配方法,这会减少诚实矿工的收入。为了解决这个问题,提出了一种基于智能合约的池跳池攻击预防模型。模型的好处是:

(1)矿池管理者在允许每个矿工加入矿池之前对其行为进行记录;

(2)它可以防止频繁跳池的矿工,因为矿工要求将代币作为托管提交,如果他们实施跳池攻击,则将被作为惩罚;

(3)给出了一个详细的数值模型,该模型有助于计算每个矿工的确切托管量。

上图所示的预防模型包括以下四个步骤。首先,矿工要求加入矿池。其次,矿池管理者请求矿工提交矿工地址,该地址与由矿池管理者存储在本地数据库中的块地址链接。使用区块地址的矿池管理者从区块链网络中查找矿工证书。第三,如果矿工的跳池数高并且违反了先前的智能合约(即,重复跳池并且违反了以前的智能合约的数量很高),将要求他们同意执行智能合约的条款。他们将代币提交代管,以保护矿池。最后,矿池管理者将根据矿工的行为更新采矿证书并退还或保留提交的代币。

此模型的运行基于矿池管理者拥有的一个分类帐本,该分类帐本使他们可以使用矿工的地址查找矿工的证书。以Ethpool钱包为例,这是一个基于以太坊的区块链钱包,矿工的地址将是他们获得区块奖励的地方。这是他们获得代币的奖励的地址,作为成功挖掘区块或与其他用户进行其他交易的奖励。该矿工的地址对于每个矿工的证书都是唯一的,并且没有两个证书包含相同的矿工地址。

当矿工离开矿池时,矿池管理者将根据矿工的行为结果更新证书。更新后的证书将被提交到区块链网络,并且块地址存储在矿池管理者管理的本地数据库中。矿工的证书包含以下详细信息:矿工的地址,跳池次数,遵守的先前智能合约和违反的先前智能合约。

如果矿工请求加入新的矿池,则矿池管理者要求该矿工提交其地址。矿池管理者使用该地址在本地数据库中查找哈希值到包含区块链网络上矿工证书的块。根据矿工证书的详细信息,矿池管理者将签发新的智能合约。如果该矿工是加密货币网络中的新矿工,并希望加入采矿池,则他们在完成挖掘过程或放弃挖掘过程后将获得新证书。矿池管理者将更新证书并将其作为交易提交到区块链网络上。包含矿工证书的区块地址存储在与矿工地址链接的本地数据库中。这样可确保没有其他实体可以修改矿工证书的详细信息。

矿池管理者可以允许经常跳池的矿工加入其矿池网络,但是基于以下条件:矿工同意接受智能合约的条款,在那里他们将代币提交代管。合同要求矿工必须留在矿池网络中,直到不挖掘该区块为止。成功挖掘该区块后,所提交的代币将退还给矿工,包括挖掘矿池的奖励。如果矿工不履行合约,他们将失去所有代币。然后将代币分发给网络中所有现有的矿工。

 

0x05 Methodological Flow

提出的模型的方法流程包括三个单独的模块,并解决了三个主要问题。这些模块包括:

(1)评估,定义矿池管理者如何评估矿工对采矿池的风险;

(2)项,指定要为矿工计算的代管值;

(3)更新,其指定方法如下图所示,基于两个不同的场景来修改矿工证书。在建议的模型中,分类帐本由矿池管理者维护,并且只能由矿池管理者访问,以通过读/写访问来访问矿工证书。矿池管理者根据矿工提供的矿工地址访问矿工的详细信息。

矿工证书包含以下详细信息:
•矿工地址:此地址基于将被识别为属于矿工的证书。每个证书都绑定到一个矿工地址,并且一个矿工地址不能与第二个证书关联。这样可以确保串行池跳频矿工无法通过矿池管理者请求新证书来掩盖其恶意行为。

•Hop_Count:跳池计数显示矿工在其整个历史中跳越采矿池的次数。这是基于信誉的计数,矿池管理者会对其进行更新以反映矿工的行为。如果矿工跳池,则计数增加一,并且如果矿工在挖掘过程完成之前不离开池,则Hop_Count将减少一。如果矿工没有Hop_Count(即为零),则在挖矿过程完成后,计数将保持为零。
•维护智能合约(SCupheld):这显示矿工已履行与先前矿池管理者签署的智能合约的次数。如果履行的合约数量很多,那么当前的矿池管理者将把托管量保持在较低水平,因为矿工看起来值得信赖。
•违反智能合约(SCviolated):这显示矿工通过跳池而违反智能合约的次数。如果计数很高,那么矿池管理者可以增加托管量以维护采矿池的利益。

 

0x06 Three Modules

A、评估

如下图所示,当矿工请求加入矿池时,矿池管理者需要评估允许该矿工加入的风险因素。经理将确定矿工的信任度,使其在挖掘过程中一直保留到块采矿完成为止。

该模块基于三步过程,具体过程如下:

1.矿工要求:矿工将请求矿池管理者加入网络。如果该矿工具有过去的采矿记录,则它将具有预先颁发的矿工证书,该证书将显示该矿工的过去行为。但是,如果该矿工是首次挖掘,则矿池管理者将颁发新的矿工证书。矿池管理者将要求矿工提交其矿工地址,以便从分类账中找到矿工的证书。该分类帐由矿池管理者本地存储在数据库中。每个矿工证书对于每个矿工的地址都是唯一的。对矿工地址的请求不会侵犯矿工的隐私,因为该地址对于矿工成功地挖掘区块获得奖励至关重要。

2.检查矿工证书:矿池管理者使用矿工的地址访问存储在本地数据库中的分类帐本,以查找块地址。矿池管理者使用块地址查找作为数据存储在区块链网络上的矿工证书,将主要检查矿工的Hop_Count,先前的SCupheld的计数和SCviolated的计数。矿池管理者根据Hop_Count的值决定矿工是否加入,并根据SCviolated确定矿工是否安全或对整个采矿矿场构成风险。

3.评估矿工风险:矿池管理者将评估矿工是否对矿场构成风险,查两个元素的计数,即Hop_Count(α)和SCviolated(β)。如果值α和β均为零,则将矿工评估为安全矿工并加入矿池。但是,如果矿工证书显示的α和β等于或大于1,则将矿工视为对矿池的风险。矿工风险使用 Mrsk =α+β 计算。

矿工风险由Mrsk表示,并基于两个条件进行评估:(1)矿工安全,并且(2)矿工对矿池构成的风险。提出了两个不同的案例研究来解释这两种情况。为了满足第一个条件,假设该矿工是第一次加入矿池。 α和β值假定为零,Mrsk计算为零。矿工可以安全地加入矿池。为了满足第二个条件,假设矿工以前至少一次放弃了矿池。 α和β值为1。因此,Mrsk计算为2。该矿工被视为对矿池的高风险。

B、项

下图所示模块中,为矿工确定了智能合约的条款,由于高Hop_Count值,该矿工被视为对矿池的风险。要求矿工将代币提交代管,如果矿工在未完成区块挖掘的情况下离开矿池,则这是执行罚款的一种手段。托管是智能合约中满足条款的条件。代币被存储在智能合约数字协议中,以此作为保护矿池现有成员利益的安全措施。如果提早离开矿池,矿工可能会丢失代币。

该模块基于三步过程,具体过程如下:

1.矿工风险:矿工的Hop_Count被确定为等于或大于1,因此对矿池构成风险。矿工表现出的行为可能会在不适合他们的情况下跳池,并在高回报时返回。矿池管理者将签发一份智能合约,矿工必须根据该合约同意一系列条款才能加入。

2.智能合约条款:矿池与新矿工之间的智能合约的主要要求是需要代管。为了提供针对跳池攻击的可靠防御措施,具有高Hop_Count值的矿工必须在智能合约中提交一定数量的代币。丢掉代币的风险对矿工跳槽或放弃矿池是一个惩罚措施。矿池管理者将观察矿工维护和破坏的先前智能合约的数量。先前已兑现的智能合约的数量表明,即使该矿工的Hop_Count记录很高,它们在最近的矿池中行为也是值得信赖的矿工行为。

3.确定托管值:矿池与新矿工之间的智能合约的主要要求是需要代管。矿工提交代币作为保证金,如果矿工放弃矿池,他们将在代管中没收这些硬币。 Hop_CountSCviolated值等于或大于1的矿工需要提交代币作为托管,SCviovio的值不能低于1。如果矿工一次放弃矿池,则要求他们至少提交一个代管代币。托管值使用以下公式Es_dep =α+β-µ 计算。

托管值由Es_dep表示,它基于以下三个条件:

(1)矿工将零代币作为托管,定义为Mrsk = 0

(2)高风险矿工的托管量为两个或更多,定义为因为Mrsk为2或以上,

(3)该矿工为低风险矿工,需要支付一枚代管代币,定义为Mrsk = 1。

为了满足第一个条件,该矿工首次加入了采矿池,其Hop_Count(α),SCviovio(β)和SCupheld(µ)为零。

在第二种情况下,假设矿工先前已经放弃过矿池。 Hop_Count(α),SCviovio(β)均为1,SCupheld(µ)为零。Mrsk被计算为2,并且该矿工被评估为高风险矿工,确定矿工需要支付的代管量,即两个代币。

为了满足第三个条件,假设α的值为0,β为1,μ为1。Mrsk被计算为低风险矿工。从数学上讲矿工无需支付任何硬币。但是在模型中,作为条件,如果矿工仅一次放弃矿池,则β的值始终保持为1或大于1。因此矿工需要作为代管支付一枚硬币。

C、更新

一旦矿工加入采矿池,如下图所示,他们通常会在区块挖掘完成后离开。但是,矿工可能会提早离开并发起跳池攻击。矿池管理员将根据矿工的行为更新矿工证书。在此模块中,发布的智能合约将确定是否满足约定的条件。如果挖掘了该区块,那么矿工将收到他们在代管中提交的硬币,新的矿工证书将显示Hop_count值减少一。如果矿工在挖掘出该区块之前离开,他们将丢失所有存放在托管中的硬币,并且它们的Hop_count值将增加一。

该模块基于三步过程,具体过程如下:

1.挖掘:同意智能合约条款的矿工加入并成为矿池的成员。矿工将继续挖掘该块,并成为矿池采用的奖励分享系统的一部分。成功完成采矿后,所有矿工都会获得奖励,以解决区块的密码难题。

2.挖掘完成:矿池管理者将确定代管方式的矿工的代币是否将其收回。如果智能合约已履行或中断,则在此阶段做出决定。如果智能合约的条款得到满足,矿工将收到所有以托管方式提交的代币。如果不满足条件,则矿工将丢失托管中提供的所有代币。这些代币将平均分配给采矿池中的所有其他矿工,以弥补由于池跳跃攻击而造成的计算能力损失。不履行合约条款的财务后果是阻止矿工放弃挖掘权的必要措施。

3.更新矿工证书:矿池管理者将根据智能合约的结果更新矿工证书。智能合约的更新基于以下两个条件:(1)矿工实施了矿池跳跃攻击(Matt)并放弃了矿池;(2)矿工安全(Msf)并完成了挖掘过程。 Matt和Msf用于帮助说明矿工证书的更新过程。 α,β和µ的最终值很重要,并在矿工证书中进行了更新,以帮助评估矿工风险(Mrsk),并评估托管量。如果矿工放弃了矿池,则Hop_Count(α)和SCviolated(β)值增加1,而SCupheld(µ)值减少1。矿工证书的基于池跳跃攻击的更新用以下公式表示:

在第一个条件下,假设矿工是第一次(Matt)放弃了矿池,因此α和β的值现在为1。由于该矿工是第一次进行跳池攻击,因此其µ保持为零。现在,该矿工的矿工风险(Mrsk)值为1。在建议的模型中,α和μ的值不能减少超过零。 β的值不会低于1。
为了满足第二个条件,矿工是安全的(Msf)并完成了挖掘过程。 Hop_Count(α)值减少1,而SCupheld(µ)值增加1。但是SCviovio(β)计数保持不变,并且该值不会减少。下式表示成功完成区块挖掘后的矿工证书更新:

如果该矿工的Hop_CountSCviolated值为零,则认为该矿工可以安全加入。当提供较少的财务奖励(Mrsk = 1 + 1)时,矿工可能会离开矿池,而在获得更大的奖励时,矿工可能会加入。矿工将支付两个代币的托管费用,并完成挖掘过程。获得托管量,并将Hop_Count设置为零。如果SCviovioed计数值减少1,则矿工可以重复离开池,然后在奖励较高时返回的过程。但是,如果SCviolated保持恒定(Mrsk = 0 + 1),则矿工必须先支付一个代管代币,才能加入矿池。

 

0x07 Conclution

本文主要侧重于预防对矿池的跳池攻击,并提出了一种数值模型来计算矿工风险,然后矿池管理者将其纳入矿池。实施了一个详细的方程式以计算矿工作为托管人提交的代币数量。该模型的实现成本低廉,不需要专门的技术知识。模型有一定局限性:(1)由于矿工与矿池管理者之间的冲突而导致的矿工证书更新不准确;以及(2)矿池管理者维护的本地数据库的数据库安全性。可以通过确保在矿池中所有现有矿工的同意下更新矿工证书来解决这些限制。

(完)