【论文阅读】Eclipse Attacks on Bitcoin’s Peer-to-Peer Network

摘要

我们介绍了对比特币点对点网络的eclipse攻击。我们的攻击允许控制足够数量IP地址的对手垄断与受害比特币节点的所有连接。攻击者可以利用受害者攻击比特币的挖矿和共识系统,包括n确认双消费,自私挖矿和区块链中的对抗分叉。我们详细研究了比特币的点对点网络,并通过概率分析、蒙特卡洛模拟、测量和使用比特币节点的实验来量化攻击中涉及的资源。最后,我们提出了对策,灵感来自僵尸网络架构,旨在提高eclipse攻击的门槛,同时保留比特币当前网络架构的开放性和去中心化。

1 介绍

虽然从20世纪80年代开始就有人研究加密货币[22,25,28],但比特币是第一个被广泛采用的加密货币。比特币成功的一个关键原因是它的去中心化。比特币没有使用中央银行来监管货币,而是使用去中心化的节点网络,这些节点使用计算工作证明来就分布式公共交易账本达成共识。区块链。Satoshi Nakamoto[52]认为,只要这些攻击者控制了网络中不到一半的计算能力,比特币在攻击者试图将区块链转移到不一致/不正确状态时是安全的。但是,在这种安全分析的基础上,有一个关于完全信息的重要假设;也就是说,比特币生态系统的所有成员都可以观察到同行所做的工作证明。

虽然在过去的几年里,人们对比特币的计算工作量证明协议的安全性进行了广泛的研究,如[14,29,36,37,45,49,50,52,58,60],但很少有人关注用于在比特币节点之间广播信息的点对点网络(见第8节)。比特币点对点网络被捆绑到核心比特币实现中,也称为。Satoshi客户机被设计成开放的、去中心化的、独立于公钥基础设施的。因此,不使用对等体之间的加密身份验证,节点通过其IP地址进行识别(第2节)。

每个节点使用随机协议选择8个节点,与它们形成长寿命的外向连接,并传播和存储网络中其他潜在节点的地址。拥有公共IP的节点还可以接受来自任何IP地址的117个未经请求的传入连接。节点与它们的传入和传出对等点交换区块链状态的视图。

Eclipse的攻击。然而,这种开放性也使得敌对节点加入并攻击点对点网络成为可能。在本文中,我们提出并量化了对运行比特币0.9.3版本的公共ip节点进行eclipse攻击所需的资源。在eclipse攻击[27,61,62]中,攻击者垄断了受害者的所有传入和传出连接,从而将受害者与网络中的其他对等体隔离开来。然后攻击者可以过滤受害者的区块链视图,迫使受害者将计算能力浪费在过时的区块链视图上,或将受害者的计算能力用于自己的邪恶目的(第1.1节)。我们提出了离路攻击,其中攻击者控制终端主机,但不控制受害者和比特币网络其余部分之间的关键网络基础设施。我们的攻击涉及到从攻击者控制的IP地址的一组终端主机快速、反复地向受害者形成未经请求的传入连接,发送虚假的网络信息,并等待受害者重新启动(第3节)。然后,受害者很有可能形成所有8个向攻击者控制的地址的传入连接,攻击者也垄断了受害者的117个传入连接。

我们的eclipse攻击使用极低速率的TCP连接,所以攻击者的主要挑战是获得足够数量的IP地址(第四节)。我们考虑两种攻击类型:(1)基础设施攻击,模拟一个ISP、公司或民族国家的威胁,他们拥有几个连续的IP地址块,并试图通过攻击其点对点网络来颠覆比特币;(2)僵尸网络攻击,由拥有不同IP地址范围的机器人发起。我们使用概率分析,(第4节)测量(第5节),以及在我们自己的实时比特币节点上的实验(第6节)来发现,虽然僵尸网络攻击需要的IP地址少得多,但有数百个组织有足够的IP资源来发动eclipse攻击(第4.2.1节)。例如,我们展示了一个拥有32个不同的/24 IP地址块(共8192个地址)的基础设施攻击者,或者一个由4600个机器人组成的僵尸网络,总是能以至少85%的概率吃掉一个受害者;这与网络中的节点数量无关。此外,在我们的实时比特币节点的测试中,400个机器人就足够了。为了说明这一点,如果8192个攻击节点加入今天的网络(包含≈7200个公共IP节点[4]),并诚实地遵循点对点协议,他们可以以大约(8192 7200+8192)8=0.6%的概率吃掉一个目标。

我们的攻击只针对具有公共ip的节点;如果拥有私有ip的节点的所有出站连接都指向重叠的公有ip节点,则可能会受到影响。

对策。众所周知,大型矿商、商业客户和在线钱包会修改比特币的网络代码,以降低基于网络的攻击风险。[3]通常推荐两种对策:(1)禁用传入连接,(2)选择连接良好的对等点或已知矿工的“特定”传出连接(即,使用白名单)。

然而,将其扩展到完整的比特币网络还存在几个问题。首先,如果禁止传入连接,新节点如何加入网络?第二,如何决定要连接到哪些“特定的”对等体?比特币节点应该形成一个私有网络吗?如果是这样,他们如何确保计算能力足够分散,以防止挖矿攻击?事实上,如果比特币要兑现其作为一种开放和去中心化加密货币的承诺,我们认为它的p2p网络也应该是开放和去中心化的。

因此,我们的下一个贡献是一组对抗措施,通过允许未经请求的进入连接来保持开放性,同时提高eclipse攻击的门槛(第7节)。今天,一个拥有足够地址的攻击者可以遮蔽任何接受进入连接并重新启动的受害者。我们的对策确保,在很大的概率下,如果受害者存储了足够多的合法地址来接受传入的连接,那么无论攻击者控制的IP地址的数量如何,受害者都不能被掩盖。我们的对策1、2和6已经部署在比特币v0.10.1中;我们还开发了一个带有对策3,4的补丁[40]。

1.1 eclipse攻击的含义

除了破坏比特币网络或有选择地过滤受害者对区块链的看法外,eclipse攻击是其他攻击的有用构建块。

工程块比赛。当两名矿工同时发现区块时,就会发生区块竞赛;一个块将成为区块链的一部分,而另一个“孤儿块”将被忽略,不为发现它的矿工提供挖矿奖励。一个超越许多矿工的攻击者可以通过聚集被超越矿工发现的区块来设计区块竞赛,一旦发现一个竞争区块,就向被超越矿工和未被超越矿工释放区块。因此,黯然失色的矿工将精力浪费在孤儿区块上。

分裂开采能力。使x部分矿工的采矿能力从网络的其余部分消失,使其更容易发起采矿攻击(例如,51%的攻击[52])。为了隐藏自然变化[19]下采煤功率的变化,矿工可以逐渐或间歇性地被遮蔽。

自私的挖掘。在自私挖矿[14,29,37,60]中,攻击者战略性地保留区块,以赢得超过其公平份额的挖矿奖励。攻击的成功由两个值参数化:α,由攻击者控制的挖矿能力的比例,和γ,在区块竞赛中在攻击者的区块上挖矿的诚实挖矿能力的比例。如果γ较大,那么α可以较小。通过使矿工黯然失色,攻击者增加γ,从而减少α,这样自私的采矿就更容易了。为了做到这一点,攻击者丢弃所有被遮挡矿工发现的区块,这些区块与自私矿工发现的区块竞争。接下来,攻击者通过只向被遮挡矿工提供自私矿工的区块链视图来增加γ;这将获取重叠矿工的计算能力,并使用它在自私矿工的区块链上进行挖掘。

对矿工的攻击可能会损害整个比特币生态系统;如果矿池通往公共比特币网络的网关被掩盖,它们也很容易受到攻击。Eclipsing也可以用于对非矿工的双重消费攻击,攻击者多次消费一些比特币:

0-确认的双重消费。在0确认交易中,客户向商家支付交易,而商家在看到区块确认即在区块链中看到交易之前就向客户发放了货物[18]。这些交易是在不适合等待通常需要5-10分钟的区块确认时使用的[20],例如,在零售点系统如BitPay[5],或在线赌博网站如Betcoin[57]。为了对商家发起双重消费攻击[46],攻击者侵蚀商家的比特币节点,向商家发送货物的交易T,并发送交易T ? 将这些比特币双重消费到网络的其他部分。商家向攻击者释放了货物,但由于攻击者控制了商家的所有连接,商家不能告诉网络的其他部分关于T,同时确认了T?攻击者因此获得了货物而没有付钱。0确认的双重消费已经在野外发生[57]。这种攻击与Finney攻击[39]一样有效,但使用的是黯然失色,而不是采矿能力。

N-confirmation花费的两倍。如果攻击者遮蔽了x部分的矿工,它也可以对遮蔽的商人发起n确认的双重消费攻击。在N确认交易中,只有在区块链[18]中深度为N−1的区块中确认交易后,商家才会释放货物。攻击者将其事务发送给重叠的矿工,矿工将其合并到他们的(过时的)区块链视图中。

然后攻击者将区块链的这个视图显示给被遮挡的商人,接收货物,并将来自非遮挡矿工的区块链(非过时的)视图发送给商人和被遮挡矿工。被遮蔽的矿工的区块链成了孤儿,攻击者不付钱就得到了货物。这类似于由矿池[10]发起的攻击,但我们的攻击者使矿工黯然失色,而不是使用他自己的采矿能力。

其他攻击也存在,例如,对运行在SPV模式[16]的节点的事务隐藏攻击。

2 比特币的点对点网络

我们现在基于比特币0.9.3版本描述比特币的点对点网络,该版本是2014年9月27日至2015年2月16日发布的最新版本,其网络代码自2013年以来基本没有变化。这个客户端最初是由中本聪(Satoshi Nakamoto)编写的,在公共ip节点中占有几乎普遍的市场份额(根据Bitnode统计,97%的公共ip节点占市场份额)。IO在2/11/2015[4])。

比特币网络中的对等体通过其IP地址进行识别。一个拥有公共IP的节点可以与其他比特币节点发起最多8个传出连接,并接受最多117个传入连接。一个私有IP的节点只发起8个出站连接。连接是通过TCP进行的。节点只传播和存储公网ip;一个节点可以通过比较IP包头和比特币版本消息来确定它的对等体是否有一个公共IP。节点也可以通过Tor连接;我们没有对此进行研究,而是参见[16,17]。我们现在描述节点如何传播和存储网络信息,以及它们如何选择传出的连接。

2.1网络信息传播

网络信息通过DNS种子器和ADDR消息在比特币网络中传播。

DNS播种机。DNS种子器是一个服务器,它使用比特币节点的IP地址列表(未经加密验证)来响应来自比特币节点的DNS查询。种子程序通过定期爬行比特币网络获得这些地址。比特币网络有六个种子程序,只在两种情况下被查询。

第一个是当一个新节点第一次加入网络时;它尝试连接到种子程序以获得活动IP的列表,否则将失败转移到一个大约600个IP地址的硬编码列表。第二种是现有节点重新启动并重新连接到新的节点;在这里,仅当节点开始尝试建立连接,且节点的出站连接少于两个时,才查询种子器。

ADDR的消息。ADDR消息包含最多1000个IP地址及其时间戳,用于从对等体获取网络信息。节点接受未经请求的ADDR消息。ADDR消息仅在与对等体建立外向连接时被请求;对等体以最多三个ADDR消息响应,每个ADDR消息包含从其表中随机选择的最多1000个地址。

节点向对等体推送ADDR消息有两种情况。每天,一个节点通过ADDR消息向每个对等体发送自己的IP地址。另外,当一个节点收到一个不超过10个地址的ADDR消息时,它会将该ADDR消息转发给两个随机选择的连接对等体。

2.2存储网络信息

公网ip存储在节点的尝试表和新表中。

表存储在磁盘上,并在节点重启时持久化。

过表。被尝试的表由64个桶组成,每个桶最多可以为节点成功建立入站或出站连接的对等体存储64个唯一地址。除了每个存储的对等点的地址外,节点还保存到该对等点的最近一次成功连接的时间戳。

每个对等体的地址通过对对等体的(a) IP地址和(b)组的哈希值映射到try中的一个桶,其中定义的组是包含对等体IP地址的/16 IPv4前缀。桶的选择如下:SK =节点诞生时选择的随机值。

IP =对端的IP地址和端口号。

Group = peer 's Group i = Hash(SK, IP) % 4 Bucket = Hash(SK, Group, i) % 64 return Bucket这样,每个IP地址在try中对应一个桶,每个组最多对应四个桶。

当一个节点成功连接到一个对等体时,该对等体的地址被插入到相应的尝试桶中。如果桶已满(即包含64个地址),则使用比特币驱逐:从桶中随机选择4个地址,最老的(1)替换为try中的新peer的地址,然后(2)插入到新表中。如果对等体的地址已经存在于桶中,则更新与该对等体地址相关的时间戳。当主动连接的对等体发送VERSION、ADDR、INVENTORY、GETDATA或PING消息且距离上次更新超过20分钟时,时间戳也会更新。

新表。新表由256个桶组成,每个桶可以为节点尚未发起成功连接的对等体保存64个地址。节点用从DNS种子器或ADDR消息中学到的信息填充新表。

a在new中插入的每个地址都属于(1)一个组(在我们对try表的描述中定义)和(2)一个源组(源组中包含连接的对等体的IP地址或从该组中学习到的节点地址a的DNS种子器的IP地址)。

Group = /16包含要插入的IP。

Src_Group = /16包含对端发送IP。

i = Hash(SK, Src_Group, Group) % 32 Bucket = Hash(SK, Src_Group, i) % 256 return Bucket每个(Group, source Group)对哈希到一个新的桶,而每个组选择最多32个新的桶。

每个桶保存唯一的地址。如果一个桶已满,那么一个名为isterrorble的函数将遍历桶中的所有64个地址;如果其中任何一个地址是糟糕的,因为它(a)超过30天,或(b)有太多失败的连接尝试,那么糟糕的地址将被删除,取而代之的是新地址;否则,使用比特币驱逐与小的变化,驱逐的地址被丢弃。

2.3 选择同行

如果节点重新启动或网络丢弃了一个出站连接,则选择新的出站连接。

比特币节点从不故意放弃连接,除非满足黑名单条件(例如,对等体发送的ADDR消息太大)。

具有ω∈[0,7]出站连接的节点按照以下方式选择ω + 1个连接:(1)决定是否从试过或新中选择,其中Pr[select from试过]=√ρ(9−ω) (ω + 1) +√ρ(9−ω) (1)

ρ是存储在try中的地址数量和存储在new中的地址数量之间的比率。

(2)从表中随机选择一个地址,偏爱时间戳较新鲜的地址:(i)在表中随机选择一个非空桶。(ii)在该桶中随机选择一个位置。(ii)如果该位置有一个地址,则返回概率p(r,τ) = min(1,1.2 r1 +τ)(2)的地址,否则,拒绝该地址并返回(i)。接受概率p(r,τ)是r的函数,r是到目前为止被拒绝的地址的数量,τ是地址的时间戳与当前时间之间的差,以10分钟的增量为单位进行测量(3)连接到地址。如果连接失败,执行(1)。

3 Eclipse攻击

我们的攻击目标是拥有公共IP的受害者。我们的攻击者(1)用攻击节点的地址填充尝试表,(2)用不属于比特币网络的“垃圾”IP地址覆盖新表中的地址。“垃圾”地址是未分配的(例如,[56]将其列为“可用”地址)或[43]将其列为“保留供将来使用”地址(例如,252.0.0.0/8)。我们用“垃圾”填充new,因为与攻击者地址不同,“垃圾”不是稀缺资源。攻击会持续到(3)受害节点重新启动,并从其持久化存储中的已尝试表和新表中选择新的传出连接(章节2.3)。很有可能,受害者建立了所有8个出口连接到攻击者的地址;所有8个地址将从尝试,因为受害者不能连接到“垃圾”在新的。最后,攻击者(5)占用受害者剩余的117个传入连接。现在我们详细描述攻击的每一步。

3.1 人口尝试和新

攻击者利用以下方法来填充try和new:

  1. 来自未经请求的传入连接的地址存储在try表中;因此,攻击者只需从该地址连接到受害者,就可以将一个地址插入受害者的尝试表中。此外,比特币驱逐规则意味着攻击者的新地址很可能会驱逐存储在尝试表中的任何旧的合法地址(章节2.2)。

  2. 一个节点接受不请自来的ADDR消息;这些地址被直接插入到新表中,而不测试其连接性(第2.2节)。因此,当我们的攻击者从一个对抗性地址连接到受害者时,它也可以发送带有1000个 "垃圾 "地址的ADDR消息。最终,垃圾地址覆盖了新的所有合法地址。我们使用 "垃圾 "是因为我们不想把我们的IP地址资源浪费在覆盖new上。

  3. 节点很少从对等人和DNS播种者那里索取网络信息(第2.1节)。因此,虽然攻击者覆盖了受害者的尝试表和新表,但受害者几乎从未通过查询合法的对等者或播种者来反击对抗性信息的泛滥。

3.2 重启受害者

我们的攻击需要受害者重新启动才能连接到敌对地址。比特币节点可能重启的原因有几个,包括ISP中断、电源故障、升级、主机操作系统失败或攻击;事实上,[16]发现一个拥有公网IP的节点有25%的几率在10小时后脱机。另一个可以预见的重启原因是软件更新;例如,在1/10/2014,位节点。io看到942个节点运行着Satoshi客户端0.9.3版本,到2014年12月29日,这个数字已经上升到3018个节点,相当于超过2000次重启。因为更新通常不是可选的,特别是当它与关键的安全问题相对应时;2013年发生了三次比特币升级,2014年,心脏出血漏洞[53]导致了一次升级。此外,由于社区需要提前得到关于升级的通知,攻击者可以监视通知,然后开始攻击[2]。重启也可以通过DDoS[47,65],内存耗尽[16],或数据包死亡(已经发现比特币[6,7])故意引发。归根结底,点对点网络的安全性不应依赖于100%的节点正常运行时间。

3.3 选择出站连接

如果在重新启动时,受害者将所有的对外连接都发送到攻击者地址,则攻击成功。为此,我们利用了从trying中选择具有新时间戳的地址的偏向;通过在攻击中投入额外的时间,我们的攻击者确保它的地址是新的,而所有合法地址都变得越来越陈旧。我们用几个简单的假设来分析这个问题:

  1. 受害者的尝试表中的f -部分地址由对手控制,其余的1 -f -部分是合法的。(第4节分析了对手因此必须控制多少地址。)

  2. new中的所有地址都是“垃圾”;所有到new中的地址的连接都失败,受害者被迫连接到try中的地址(章节2.3)。

  3. 攻击分回合进行,每回合重复,直到受害者重新开始。在单轮攻击中,攻击者从其每个对抗IP地址连接到受害者。一个回合需要时间τa,因此所有被试对抗性地址都小于τa。

  4. try中的f分数地址在受害者重新启动之前主动连接到受害者。这些合法地址上的时间戳每20分钟或更久更新一次(章节2.2)。我们假设这些时间戳在受害者重新启动时是新的(即,τ = 0);这对攻击者来说是最糟糕的情况。

  5. 花费在攻击τ上的时间?是从对手开始攻击的时刻到受害者重新启动的时间。如果受害者在攻击过程中没有获得新的合法网络信息,那么,除去上面描述的f ?-分数,try中的合法地址比τ?更老。

成功的概率。如果对手在尝试中拥有f部分的地址,在第一次尝试中接受对抗地址的概率是p(1,τa)·f,其中p(1,τa)如式(2)所示;这里我们使用的事实是,对手的地址不超过τa,即回合的长度。如果在尝试从尝试中选择一个地址的过程中拒绝了r−1个地址,那么在第r次尝试中接受对抗地址的概率为

在这里插入图片描述

如果所有8个传出连接都指向对抗性地址,则受害者将被重叠,这种情况发生的概率为q(f, f ?,τa,τ?)8。图1绘制了τa = 27分钟时q(f, f ?,τa,τ?)8 vs f和τ?的不同选择;我们假设f ?= 8 64×64,它对应一个完整的尝试表,其中包含在受害者重新启动之前活跃连接的8个地址。

随机选择。图1还显示了从每个表中均匀随机选择地址的成功概率。我们通过画f8 vs f来做。在没有随机选择的情况下,只要攻击的目标是τ?= 48小时,τa = 27分钟。

在随机选择的情况下,90%的成功概率需要f = 98.7%的尝试攻击者地址。

在这里插入图片描述
图1:节点q(f, f ?,τa,τ?)8(公式(3))重叠的概率vs在攻击τ?上投入的不同时间值的对抗性地址在尝试中的比例。轮长τa = 27分钟,f ?= 8 64×64。虚线表示如果使用随机选择代替,则使节点重叠的概率。

3.4 垄断被遮蔽的受害者

图1假设受害者正好有8个出站连接;就传入连接而言,我们所需要的只是受害者有几个开放的插槽来接受攻击者传入的TCP连接。

虽然通常认为计算机可以建立的TCP连接的数量受到操作系统或源端口数量的限制,但这只适用于使用操作系统提供的TCP套接字时;专门的攻击者可以使用自定义TCP堆栈打开任意数量的TCP连接。一个自定义的TCP栈(例如,zmap[35])需要最小的CPU和内存,并且通常只受带宽的限制,我们攻击的带宽成本是最小的:攻击连接。为了填充尝试表,攻击者从其每个地址重复连接到受害者。每个连接包括TCP握手、比特币版本消息,然后通过TCP RST断开连接;上游花费371字节,下游花费377字节。有些攻击连接还发送一个包含1000个地址的ADDR消息;这些ADDR消息上游花费120087字节,下游花费437字节,包括TCP ack。

垄断的连接。如果攻击成功,受害者有8个到攻击节点的传出连接,攻击者必须占用受害者剩余的传入连接。为了防止其他人连接到受害者,这些TCP连接可以维持30天,此时受害者的地址是可怕的,并被网络忘记。虽然比特币支持区块库存请求和发送区块和交易,但这消耗大量带宽;因此,攻击者不响应库存请求。因此,每建立一个TCP连接,需要上游377字节,下游377字节,由乒乓报文和TCP ack维护,每80分钟消耗164字节。

我们通过实验证实,一个比特币节点将接受来自同一IP地址的所有传入连接。(我们假设这样做是为了允许NAT后的多个节点连接到同一个节点。)保持缺省的117个传入TCP连接花费164×117 80×60≈4字节/秒,很容易允许一台计算机同时垄断多个受害者。

另外,这还允许连接饥饿攻击[32],在这种攻击中,攻击者垄断了点对点网络中的所有传入连接,使新节点无法连接到新节点。

4 有多少攻击地址?

3.3节说明了攻击的成功很大程度上取决于τ?,在攻击中投入的时间,f,攻击者地址在受害者的尝试表中的比例。我们现在使用概率分析来确定对于给定的f值,攻击者必须控制多少个地址;然而,重要的是要记住,即使f很小,攻击者仍然可以通过增加τ?成功。回顾2.2节,比特币非常小心地确保一个节点不会存储来自同一组的太多IP地址(即/16 IPv4地址块)。因此,我们考虑两种攻击变体:僵尸网络攻击(第4.1节)。攻击者持有多个IP地址,每个IP地址属于不同的组。该模型模拟了由分散在不同IP地址块中的主机组成的僵尸网络发起的攻击。第4.1.1节解释了为什么许多僵尸网络有足够的IP地址多样性来进行这种攻击。

基础设施攻击(章节4.2)。攻击者控制多个IP地址块,可以拦截发送到该IP块中的任何IP地址的比特币流量,即攻击者持有同一组中的多个地址集。

该模型模拟了一家公司或一个民族国家试图通过攻击比特币的网络来破坏比特币。第4.2.1节讨论了可以发起这种攻击的组织。

我们关注的是试过的;附录B考虑如何发送“垃圾”填充的ADDR消息覆盖new。

4.1 僵尸网络攻击

僵尸网络攻击者在不同的组中持有t个地址。我们将每个地址建模为散列到Tried中的一个均匀随机的桶中,因此散列到每个桶中的地址数量是二项分布3,即B(t, 1 64)。攻击者能占据try中64×64个条目中的多少个?我们对各种情况进行建模,并将结果绘制在图2中。

在这里插入图片描述
图2:僵尸网络攻击:在不同场景下尝试存储的预期地址数量vs地址(机器人)数量t. V值由公式(4)(7)和(8)计算,并通过蒙特卡罗模拟(100次/数据点)确认。

  1. 最初是空的。对于攻击者来说,在最好的情况下,所有64个桶最初都是空的,并且在尝试的表中存储的对抗地址的预期数量为
    在这里插入图片描述
  2. 比特币驱逐。现在考虑攻击者的最坏情况,每个桶i都充满了64个合法地址。然而,这些地址将比对手试图插入到桶i的所有Ai不同的对抗地址更老。由于比特币驱逐规则要求每个新插入的地址选择存储在桶中的四个随机地址,并驱逐最老的地址,如果四个选择的地址中的一个是合法地址(将比所有对手的地址更老),合法地址将被对抗地址覆盖。

对于a = 0…Ai,设Ya为实际存储在桶i中的对抗地址数,假设对手在桶i中插入了一个唯一的地址。如果插入的ath地址成功覆盖了合法地址,则设Xa = 1,否则设Xa = 0。然后,

在这里插入图片描述
其中(6)后面是,因为bucket最初充满了合法地址。我们现在有了E[Ya]的递归关系,我们可以用数值方法求解。所有桶中的对抗地址的预期数量是这样的

在这里插入图片描述
3. 随机的驱逐。我们再次考虑攻击者的最坏情况,其中每个bucket都充满合法地址,但现在我们假设每个插入的地址都驱逐一个随机选择的地址。(这不是比特币所做的,但我们分析它以进行比较。)应用引理A.1(附录A),我们发现所有桶中的对抗地址的期望数量为
在这里插入图片描述
4. 利用多个回合。我们的日食攻击以轮为单位进行;在每一轮中,攻击者重复地将他的每个t地址插入到尝试的表中。虽然每个地址在每一轮的尝试中总是映射到相同的桶,但比特币驱逐在每一轮中将每个地址映射到该桶中的不同插槽。因此,在一轮结束时没有存储到其尝试的bucket中的对抗地址,仍可能在未来一轮中成功存储到该bucket中。到目前为止,本节只考虑了一轮。但是,通过多次重复攻击,可以存储更多的地址。在足够的轮数之后,期望的地址数由式(4)给出,即攻击者在最佳情况下执行攻击!

4.1.1谁可以发起

僵尸网络攻击?图2中的“初始为空”行表明,利用多个回合的僵尸网络可以完全填充≈6000个地址。虽然这种攻击不容易从合法的云服务(通常为每个租户分配的地址小于20个[1,8,9])发起,但这种规模或更大的僵尸网络已经攻击过比特币[45,47,65];例如,Miner僵尸网络有29,000个主机,其公网ip为[54]。虽然一些僵尸网络感染集中在几个IP地址范围[63],但重要的是要记住,我们的僵尸网络攻击不需要超过≈6000个组;许多僵尸网络比[59]大一个数量级。例如,Walowdac僵尸网络的范围主要是58.x-100。x233 188. x和。X[63],即42 × 28 + 55 × 28 = 24832组。从Carna僵尸网络[26]的主机列表中随机抽取5000次,我们发现1250个机器人平均提供402个不同的组,足以攻击我们的比特币实时节点(第6节)。此外,我们很快在图3中显示,一个具有s > 200个组的基础设施攻击很容易填满所有的bucket;因此,使用s > 400组,攻击执行如图2所示,即使许多机器人在同一组中。

4.2 基础设施攻击

攻击者持有不同组的地址。我们确定攻击者控制包含t个IP地址/组的s个组可以填充多少尝试。

有多少组?我们通过假设四个独立的哈希函数将每个s组映射到try中的64个桶中的一个来模拟填充try的过程(见2.2节)。因此,如果Γ∈[0,64]计算try中非空桶的数量,我们使用引理A.1来计算

在这里插入图片描述

在这里插入图片描述
图3:基础设施攻击。EΓ与s(组的数量)。

图4:s = 32组的基础设施攻击:不同场景中存储的期望地址数量与每组t的地址数量的比较。将式(9)与完整版本[41]中的方程相乘得到的结果,并通过蒙特卡罗模拟(100次试验/数据点)进行验证。水平线假设每个(9)的所有E[Γ]桶都满了。

图3图E[Γ];我们预计64个桶中的55.5桶中s = 32,除一个桶外其他桶中s >都是67组。试过的桌子有多满?完整版本[41]确定了第4.1节描述的前三个场景中每个桶存储的地址的预期数量;图4绘制了尝试用对抗性地址填充的期望分数E[f]。图4中的水平线显示了如果每个方程(9)的每个E[Γ]桶都充满了攻击地址会发生什么。

当所有的桶最初都是空的,或者使用足够数量的轮回时,对手的任务是最简单的;当使用s=32组时,一个256个地址的/24地址块足以填满每个桶。

此外,如第4.1节所述,利用多轮攻击的表现与 "初始空 "的情况相同。

具体来说,在32个组,每个组有256个地址(共8192个地址)的情况下,攻击者可以期望在足够多的轮次后填补约f=86%的尝试表。在比特币驱逐的情况下,攻击者只用一轮就能达到同样的效果;同时,在随机驱逐的情况下,一轮的效果要差很多。

在这里插入图片描述

4.2.1 谁能发动基础设施攻击?

哪些组织有足够的IP地址资源来发起基础设施攻击?我们从2014年7月开始编制了组织IPv4地址分配的数据映射,使用CAIDA的AS到组织数据集[23]和AS到数据集[24]的前缀数据集,用来自成熟数据库[55]的信息补充我们的数据。我们确定了给每个组织分配多少组(即同一/16 IPv4地址块中的地址)和每个组的地址;参见图5。有448个组织有超过s = 32个组,每个组至少t = 256个地址;如果这些组织投资τ?= 5小时,τa = 27分钟,然后他们以大于80%的概率掩盖受害者。

各国的国家isp为此目的持有足够数量的组(s≥32);例如,苏丹(Sudan Mobile)、哥伦比亚(ETB)、阿联酋(Etisalat)、危地马拉(Telgua)、突尼斯(突尼斯电信)、沙特阿拉伯(沙特电信公司)和多米尼加(Cable and Wireless)。美国内政部有足够多的小组(s = 35),韩国信息通讯部(s = 41),以及其他数百个小组。

4.3 总结:基础设施还是僵尸网络?

图4,2显示,僵尸网络攻击远远优于基础设施攻击。填补f=98%的受害者尝试表需要一个4600个节点的僵尸网络(根据方程(4),攻击的回合数足够多)。

相比之下,基础设施攻击者需要16000个地址,由s=63个组(公式(9))组成,每组t=256个地址。然而,根据第3.3节,如果我们的攻击者增加了在攻击中投入的时间τ?,那么它可以在填充尝试方面远没有那么积极。例如,根据图1,攻击τ? = 24小时,τa = 27分钟回合,我们的成功概率超过85%,只需f = 72%;在攻击者的最坏情况下,这只需要3000个机器人,或一个基础设施攻击s = 20组,每组t = 256地址(5120地址)。同样的攻击(f=72%,τa=27分钟)只运行了4个小时,仍然有>55%的成功概率。为了说明这一点,如果有3000个机器人加入今天的网络(有<7200个公共IP节点[4]),并诚实地遵循点对点协议,他们可以以概率≈(3000 7200+3000)8=0.006%吃掉一个受害者。

5 测量实时比特币节点

我们简要地考虑了影响eclipse攻击成功的参数在“典型”比特币节点上的表现。因此,从2014年12月23日到2015年4月2日,我们用公共ip测试了5个比特币节点(连续运行,没有重启)43天。我们还分析了一些其他人在2015年2月15日捐赠给我们的同行文件。注意,有证据表明,不同年龄和不同地区的节点的度量有很大差异[46];因此,我们的分析(第3-4节)和我们的一些实验(第6节)主要关注攻击者的最坏情况,即表最初充满了新地址。

在这里插入图片描述

连接数。我们的攻击要求受害者为传入连接提供可用的插槽。图6显示了我们的一个比特币节点随时间的连接数量,按到公共或私有ip的连接划分。有很多可用的位置;虽然我们的节点可以容纳125个连接,但我们从未看到一次超过60个连接。[17]中类似的测量结果表明,80%的比特币对等体允许至少40个传入连接。我们的节点在其生命周期中平均看到9.9个公网ip连接;其中8个是传出连接,这意味着我们很少看到来自公网ip的传入连接。其他节点的结果也类似。

连接长度。因为公共比特币节点很少放弃与他们的同行的出站连接(除了在重启,网络故障,或由于黑名单,见第2.3节),许多连接是相当长的。当我们在2/4/2015抽查我们的节点时,在我们所有的节点,17%的连接已经持续了15天以上,其中,65.6%是到公共IP。另一方面,许多比特币节点经常重启;我们看到43%的连接持续了不到两天,其中97%是给私人IP的节点。这可能解释了为什么我们看到来自公共IP的连接如此之少;许多公共IP节点坚持与他们成熟的长期同行,而不是我们年轻的节点。

试过的和新表的大小。在最坏情况下的攻击中,我们假设已尝试的表和新表完全充满了新地址。虽然我们的比特币节点的新表很快就被填满了(48小时内99%),但表1显示,他们尝试的表远没有充满新地址。即使在43天后,我们的节点所尝试的表的满量也不超过300/4096≈8%。这可能是因为我们的节点很少有来自公共ip的连接;因此,大多数尝试的地址都是成功的公网ip连接(很少)。

新鲜的尝试。即使是那几个被试过的地址也不是特别新鲜。表1显示了我们的节点和捐赠的对等体文件中地址的年龄分布。对于我们的节点,17%的地址超过30天,48%的地址超过10天;因此,这些地址将比在日食攻击中插入的对抗性地址更不受欢迎,即使对手没有花太多时间τ?在攻击受害者时。

生产。表1还显示,当我们试图在2/17/2015.4连接到try中的一小部分地址时,它们是在线的,这表明eclipse攻击的进一步脆弱性,因为如果在受害者重置时,大多数合法地址是离线的,受害者很可能连接到一个对抗地址。

在这里插入图片描述

6 实验

现在我们用实验来验证我们的分析。

方法。在我们的每个实验中,受害者(比特币)节点位于攻击机器上的虚拟机上;我们还输入了受害者的密码。

受害节点运行在公共比特币网络(又称主网)上。攻击机器可以从公共比特币网络读取所有受害者的数据包,因此可以从任意IP地址伪造TCP连接。为了发动攻击,攻击机器从每个攻击者地址伪造TCP连接,向受害者建立一个传入连接,发送一个VERSION消息,有时也发送一个ADDR消息(参见附录B),然后断开连接;攻击连接定期发起,很少占用受害者的所有可用的传入连接插槽。为了避免伤害公共比特币网络,(1)我们使用240.0.0.0/8-249.0.0.0/8中的“保留将来使用”的[43]ip作为攻击地址,将252.0.0.0/8作为ADDR消息中发送的“垃圾”地址,(2)我们删除(受污染的)受害者试图发送到公共网络的任何ADDR消息。

在攻击结束时,我们重复地重新启动受害者,并查看它进行了哪些传出连接,丢弃到“垃圾”地址的连接,并为攻击者地址伪造连接。如果所有8个传出连接都是到攻击者的地址,则攻击成功,否则攻击失败。每个实验重新启动受害者50次,并报告成功的百分比。在每次重新启动时,我们将受害者的表恢复到攻击结束时的状态,并将受害者的系统时间倒回到攻击结束时的时刻(以避免在try和new中确定时间戳)。我们重新启动受害者50次,以衡量我们(概率)攻击的成功率;在真正的攻击中,受害者只会重启一次。

初始条件。我们尝试各种初始条件:

  1. 最坏的情况。在攻击者的最坏情况下,受害者最初有尝试过的和新的表,这些表完全充满了具有新鲜时间戳的合法地址。为了设置初始条件,我们在一个刚出生的受害者节点上运行我们的攻击,时间不超过一小时,用251.0.0.0/8、253.0.0.0/8和254.0.0.0/8的IP地址填充尝试和新的地址,我们指定这些地址为 “合法地址”;这些地址在攻击开始时不超过一个小时。然后我们重新启动受害者并开始攻击它。

  2. 移植案例。在我们的移植实验中,我们在2015年8月2日从五个活跃的比特币节点之一复制了尝试过的表和新表,将它们安装在一个使用不同公共IP地址的新受害者中,重新启动受害者,等待它建立8个外接连接,然后开始攻击。这让我们能够在一个一致的初始条件下尝试各种攻击。

  3. 生活情况。最后,在2015年2月17日和2015年2月18日,我们攻击了连接到公共比特币网络的实时比特币节点;此时,我们的节点已经在线了52或53天。

结果(表2)。结果见表2。前五列总结了攻击者的资源(组的数量s,每个组的地址t,在攻击τ上投入的时间?,轮长τa每3-4节)。接下来的两列表示初始条件:在攻击之前,try和new地址的数量。

在这里插入图片描述

下面四列给出了在攻击结束时(受害者第一次重新启动时)尝试和新尝试的大小,以及它们存储的攻击者地址的数量。wins列计算重新启动受害者50次后攻击成功的次数。

最后三列给出3.3、4节的预测。攻击地址列在new(附录B)和try中给出了预期的地址数量。

对于try,我们假设攻击者运行了足够多的攻击回合,因此对于僵尸网络,try中的期望地址数量受方程(4)和图4中基础设施攻击的“初始空”曲线支配。最后一列使用实验值τa, τ?, f, f ?。

观察。我们的研究结果表明:

  1. 最坏情况下的成功。我们的实验证实,在最坏的情况下,有32个/24大小的组(共8192个攻击地址)的基础设施攻击成功的概率非常高。我们还证实,僵尸网络比基础设施攻击更有优势;即使在最坏情况下的初始条件,4600个僵尸也有100%的成功。

  2. 预测的准确性。我们几乎所有攻击的实验成功率都高于预测成功率。为了解释这一点,回想一下我们在3.3节中的预测,假设合法地址恰好是τ?老(τ在哪里?是投入在攻击上的时间);实际上,合法地址可能更老,特别是当我们使用真实节点的试表时(表1)。因此,章节3.3的预测是成功率的下界。

我们的实验僵尸网络攻击明显比他们的预测更成功(例如,88%的实际攻击和34%的预测),很可能是因为最初尝试的地址在攻击之前已经非常陈旧(表1)。我们的基础设施攻击也比他们的预测更成功,但这里的差异没有那么显著。为了解释这一点,我们看看新表。虽然我们的成功率预测假设new被完全覆盖,但我们的基础架构攻击没有完全覆盖新表5;因此,我们有一些额外的失败,因为受害者在new中进行了向外的连接。

  1. “典型”案例的成功。当我们在活动节点或从这些活动节点提取的表上测试攻击时,我们的攻击在更少的地址下也能成功。最引人注目的是,一个由400个机器人组成的小型僵尸网络成功的概率非常高;虽然这种僵尸网络完全覆盖了新内容,但它只填充了400/650 = 62%的尝试,仍然以超过80%的概率成功获胜。

7 对策

我们已经展示了一个拥有足够IP地址和时间的攻击者如何能够掩盖任何目标受害者,而不管受害者的试表和新表的状态如何。我们现在提出的对策使eclipse攻击更加困难。我们的对策受到僵尸网络架构的启发(第8节),并设计为忠实于比特币的网络架构。

以下五种反措施可以确保。(1) 如果受害者在攻击前有h个合法地址,并且在攻击期间,当受害者重新启动时,其中有p部分接受传入连接,那么即使是拥有无界数地址的攻击者也不能以超过方程(10)的概率吃掉受害者。(2) 如果在攻击前,受害者最古老的出站连接是给一个合法的对等体,那么在受害者重新启动时,如果该对等体接受入站连接,则侵蚀攻击失败。

  1. 确定性随机驱逐。替换比特币驱逐如下:正如在try和new(第2.2节)中每个地址确定性哈希到单个桶一样,一个地址也确定性哈希到该桶中的单个槽。这样,攻击者就不能通过在多个回合中重复插入相同的地址来增加存储地址的数量(章节4.1)。相反,存储在try中的地址由图2,4中的“随机驱逐”曲线给出,减少了存储在try中的攻击地址。

  2. 随机选择。我们的攻击还利用了形成外向连接到具有新时间戳的地址的严重偏差,因此,只有一小部分f = 30%的受害者的尝试表的攻击者可以通过增加τ?,它在攻击上投入的时间(章节3.3)。如果从尝试过的和新的地址中随机选择地址,我们可以消除攻击者的这一优势;这样,50%的成功率总是需要对手填满8√0.5 = 91.7%的尝试次数,即一次基础设施攻击需要40个组,一次僵尸网络攻击大约需要3680个对等体。结合确定性随机驱逐,这个数字跳到10194个机器人的50%成功概率。

这些反措施加强了网络,但仍然允许攻击者拥有足够的地址来覆盖所有的尝试。接下来的对策是:

  1. 测试之前驱逐。在try中将地址存储在其(确定选择的)槽中之前,首先检查该槽中是否存储有较旧的地址。如果是,简单地尝试连接到旧的地址,如果连接成功,那么旧的地址不会从所尝试的表中删除;只有在连接失败时,新地址才存储在try中。

我们分析了这三种对策。假设在攻击之前,在被试表中有h个合法地址,并通过假设被试表中的h个合法地址中的每一个都是活动的(即,接受传入的连接),独立地以p的概率来模拟网络混乱。使用test-before-evict,对手无法从被试表中驱逐p×h个合法地址(在预期中),不管它控制的不同地址的数量。因此,即使其余的尝试充满了对抗性的地址,掩盖受害者的可能性是有限的

在这里插入图片描述
这与今天的协议形成了鲜明的对比,在今天的协议中,攻击者拥有足够的地址,即使尝试也有无限的成功概率,但充满了合法地址。

在这里插入图片描述
我们执行蒙特卡罗模拟,假设有p个合法地址最初存储在try中,僵尸网络通过未经请求的传入连接将一个地址插入到try中。图7中每条曲线下方的区域是机器人a的数量,假设有h个合法地址在尝试中,机器人a可以以至少50%的概率掩盖受害者。对于test-before-evict,曲线在h = 4096(1−8√0.5)/p处水平稳定;只要h大于这个量,即使是拥有无限个地址的僵尸网络也有50%的成功概率。重要的是,如果不进行驱逐前测试,就不存在平台期;一个僵尸网络只要有足够多的地址,就能掩盖一个受害者,不管合法地址的数量是多少。

然而,有一个问题。我们的比特币节点的流失率很高(表1)。例如,当p = 28%的流失率时,将对手的成功概率限制在10%需要约h = 3700个地址;节点h < 400。因此,我们的下一个对策是向try添加更多合法地址:

  1. 触连接。在new中添加一个出站连接,建立短时间的测试连接到随机选择的地址。如果连接成功,则从new中移除地址并插入到try中;否则,将从new中驱逐该地址。

触角连接清除新垃圾,同时增加在节点重新启动时可能在线的新地址的数量。我们的第5个对策与上述对策是垂直的:

  1. 锚定连接。受Tor入口保护旋转率的启发[33],我们增加了两个在重启之间持续存在的连接。因此,我们增加了一个锚点表,记录当前出站连接的地址和首次连接到每个地址的时间。重新启动时,节点将两个额外的出站连接献给接受入站连接的最古老的锚点地址。现在,除了击败我们的其他对策外,一个成功的攻击者还必须破坏锚点连接;如果受害者连接到一个不受攻击者控制的锚点地址,那么日蚀攻击就会失败。

除了这五种对策外,还有一些其他的想法可以提高日蚀攻击的门槛。

  1. 更多的桶。最明显的对策之一是增加试用表和新表的大小。假设我们将try表中的桶的数量翻倍。如果我们考虑基础设施攻击,s组填充的桶从(1 - e - 4s64)(每个式(9))跳到(1 - e - 4s128)。因此,基础设施攻击者需要双倍数量的组,以期望填充相同的尝试比例。类似地,僵尸网络需要双倍增加机器人的数量。然而,重要的是,这种反措施只有在尝试已经包含许多合法地址时才有用,因此攻击者拥有所尝试的地址中的一小部分。

但是,如果try大部分是空的(或者包含不再在线的节点的大部分过期地址),攻击者仍然会拥有try中的大部分地址,即使尝试的桶的数量增加了。因此,这个反措施还应该伴随着另一个反措施(例如,试探连接),以增加存储在try中的合法地址的数量。

  1. 更外向连接。图6表明我们的测试比特币节点至少有65个可用连接插槽,[17]表明80%的比特币对等点允许至少40个传入连接。因此,我们可以要求节点进行一些额外的传出连接,而不必冒网络连接容量耗尽的风险。事实上,最近的测量结果[51]表明,某些节点(例如,矿池网关)已经这样做了。例如,使用12个输出连接而不是8个(除了触角连接和两个锚点连接),将攻击的成功概率从f8降低到f12;为了达到50%的成功概率,基础设施攻击者现在需要46个组,而僵尸网络需要11796个机器人。

  2. 禁止未经请求的ADDR消息。一个节点可以选择不接受来自传入对等体的大型非请求的ADDR消息(有>10个地址),并且只在其新表太空时从传出连接中征求ADDR消息。这可以防止敌对的传入连接用垃圾地址充斥受害者的新表。我们认为这种变化是无害的,因为即使在当前的网络中,新表中的地址也不短缺(第5节)。为了更具体地说明这一点,请注意,一个节点在建立一个外向连接时请求ADDR消息。对等体用从其尝试过的和新的表中随机选择的n个地址进行响应,其中n是x和2500之间的随机数,x是对等体存储的地址的23%。如果每个对等体发送,比如说,大约n = 1700个地址,那么在比特币节点完成建立外向连接的那一刻,新的地址已经是8n/16384 = 83%了。

  3. 多元化传入的连接。今天,一个比特币节点可以让它所有的传入连接来自同一个IP地址,这使得在eclipse攻击或连接饥饿攻击[32]期间,单个计算机垄断受害者的传入连接非常容易。我们建议一个节点只接受来自同一IP地址的有限数量的连接。

  4. 异常检测。我们的攻击有几个特定的“特征”,使其可检测:(1)一系列来自不同IP地址的短时间传入TCP连接,发送(2)包含“垃圾”IP地址的大型ADDR消息(3)。突然将大量节点连接到比特币网络的攻击者也可以被检测到,正如使用1.1节中的遮蔽来大幅降低网络挖矿能力的攻击者一样。因此,监视和异常检测系统寻找这种行为也是有用的;至少,它们会迫使eclipse攻击者以较低的速度进行攻击,或者在覆盖新的IP地址(而不是使用“垃圾”IP地址)上浪费资源。

我们的对策现状。我们在2/2015年向比特币核心开发者披露了我们的结果。他们在比特币v0.10.1版本中部署了对策1、2和6,现在使用了确定性随机驱逐、随机选择,并将尝试和新桶的数量扩大了4倍。为了说明这种方法的有效性,请考虑攻击者的最坏情况,其中被尝试的攻击者完全充满了合法地址。我们使用引理a .1来估计t个IP地址为的僵尸网络的成功率

在这里插入图片描述
在图8(11)中,我们看到这个僵尸网络需要163K地址才能获得50%的成功率,而284K地址才能获得90%的成功率。这是好消息,但我们警告说,确保trial充满合法地址仍然是一个挑战(章节5),特别是在给定时间比特币网络中可能少于16384个公共ip节点。对策3和对策4的设计就是为了解决这个问题,所以我们也开发了一个补丁,包含这两个对策;有关我们的实现及其文档,请参阅[40]。

在这里插入图片描述

8 相关工作

比特币点对点网络。最近的研究研究了比特币网络如何延迟或阻止区块传播[31]或用于比特币用户去匿名化[16,17,48]。这些作品讨论了比特币网络协议的各个方面,[16]提供了ADDR消息传播的出色描述;我们关注的是尝试过的和新的表的结构、时间戳以及它们对地址选择的影响(第2节)。[17]表明,通过Tor连接的节点可以被同时操作比特币和Tor的Tor出口节点掩盖。其他工作将比特币对等点映射到自治系统[38],对对等点进行地理定位并测量扰动[34],并使用侧通道来学习比特币网络拓扑[16,51]。

p2p和僵尸网络架构。在建立在分布式哈希表(DHT)基础上的结构化p2p网络中,已经有大量关于日蚀攻击的研究[27, 61, 62];见[64]的调查。许多建议通过添加更多的结构来防御日蚀攻击;[61]限制了对等人的程度,而其他建议则使用基于距离指标的限制,如延迟[42]或DHT标识符[13]。相比之下,比特币使用一个非结构化的网络。虽然我们专注于利用比特币现有网络中的特定怪癖,但其他工作,如[11, 15, 21, 44]设计了新的非结构化网络,对拜占庭攻击有很强的适应性。[44]将行为不端的对等人列入黑名单。Puppetcast的[15]集中式解决方案是基于公钥基础设施[15],这不适合比特币。Brahms[21]是完全去中心化的,而是限制了对等体交换网络信息的速度–这是一个有用的想法,与比特币目前的方法有很大的不同。同时,我们的目标也比这些作品中的目标更加温和;我们并不要求每个节点都有同样的可能被诚实的节点采样,而是只想限制对最初连接良好的节点的蚀刻攻击。因此,我们的反措施受到僵尸网络架构的启发,它们有着相同的目标。Rossow等人[59]发现许多僵尸网络,如比特币,使用非结构化的点对点网络和八卦(即ADDR信息),并描述了僵尸网络如何防御用假信息充斥本地地址表的攻击。Sality僵尸网络拒绝驱逐 "高声誉 "地址;我们的锚定对策也是类似的(第7节)。Storm使用testbefore-evict[30],我们也推荐用于比特币。Zeus [12] 不允许来自同一个/20的多个IP的连接,并通过测试对等人是否在线来定期清理表格;我们的feeler连接也是类似的。

9 结论

我们提出了对比特币点对点网络的eclipse攻击,破坏了比特币的核心安全保证,允许对挖矿和共识系统的攻击,包括n确认双花费和区块链中的对抗分叉。我们的攻击针对的是拥有公共ip的节点。我们建立了攻击的数学模型,并用蒙特卡洛模拟、测量和实验验证了它们。我们通过在自己的实时比特币节点上执行攻击演示了攻击的实际效果,发现一个具有32个不同/24个IP地址块的攻击者,或一个4600个节点的僵尸网络,可以在攻击者最坏的情况下以超过85%的概率掩盖受害者。此外,即使一个400节点的僵尸网络也足以攻击我们自己的比特币活节点。最后,我们提出了使eclipse攻击更加困难的对策,同时仍然保持比特币的开放性和去中心化;最近的一次比特币软件升级中包含了其中的几个功能。

猜你喜欢

转载自blog.csdn.net/miracleoa/article/details/127517524