日食攻击是一种攻击去中心化网络的方法,攻击者通过这种方法试图隔离和攻击一个或多个特定用户,而不是攻击整个网络。
在这篇文章中将解释以太坊的一些特性,包括它的叔块机制,如何使它更容易受到这种攻击。
区块链中的数据结构
区块链是一个去中心化的协议,它将数据库分布在其网络中的多个节点上,为过去、当前和未来的交易建立共识机制。区块链中的数据结构表示为区块。
在一个去中心化的区块链网络中,参与者同意什么是正确的,而不是一个中央权威。区块链也是透明和不可变的,所有网络参与者都可以看到网络上发生的事情,而且交易日期不能被更改,除非通过一个商定的机制。
比特币区块链中的区块类
创世区块
创世区块是任何区块链的第一个区块,该区块是系统的基本起点,并与所有未来的交易相连。世界上第一个创世区块是由中本聪创建的,在此过程中,他创造了比特币。
创世区块的存在使区块链能够通过允许新创建的区块与以前的区块相关联来生成它的交易历史。此外,创世区块在同步网络节点方面有一个重要的功能——它们的数据库中都必须有相同的创世区块。这确保了区块链的分布式交易簿对每个人都是相同的,从而提供了安全性。
主链区块
主链区块是所有经过验证并包含在区块链中的区块。为了实现这一点,区块必须通过节点解决其分配的密码谜题来获得网络的同意。一旦网络达成共识,该区块就包含在区块链中,并由所有节点传播。这样,网络的每个节点都有新的区块,并作为它的一个验证点。
每个有效区块内部包含一系列与该区块一起验证的交易。例如,在比特币中,每个有效区块平均承载2100笔交易。一个有效区块中的每一笔交易都被确认。
所有有效区块继续确认以前的交易,充分保护网络上的所有区块和交易。当然,每个有效的区块包含一个允许验证的数据结构。该结构包括区块的哈希值、它的时间戳、它的nunco和它的区块交易数据。搜索候选解决方案的过程称为挖矿,参与的节点称为矿工。为区块的密码谜题生成有效解决方案的每个矿工都成为领先者,并被允许确定未确认的交易集。然后将它们追加到区块链中。
孤块
孤块或陈旧块是不属于区块链的有效区块。当两个矿工几乎同时验证区块时,或者当具有足够哈希能力的攻击者试图逆转交易时,可以创建这些数据。在这些情况下,网络共识协议将起作用,以决定哪些区块将被包含在链中,哪些将被孤立。
实际上,一个区块链网络被编程成总是偏爱最长的区块链。也就是说,它将选择包含更多信息或处理过的交易的区块。在比特币区块链中,孤块被丢弃,矿工执行的工作是无用的。
此外,正是由于这种类的区块,大多数交易所和一些钱包将自动等待额外的确认,才使资金可用。它们通过计算用户正在接收的交易和当前区块之间挖矿了多少区块来实现这一点。
gt;ETH.getBlock(blockNumber)
}
gt;ETH.syncing.highestBlock -ETH.getTransaction(“ “).blockNumber
区块是如何验证的?
区块链系统使用Merkle树数据结构,这使得它们(在理论上)是不可变的。Merkle树是Ralph Merkle在1979年申请专利的,在密码学中被广泛使用。Merkle树是验证共享数据是否被更改、损坏或更改的基本方法,非常适合区块链,因为它是轻量级的。例如,由于比特币的Merkle树结构,用户的移动钱包不需要下载所有的比特币交易来验证它们。
给定区块中的每个交易对应于Merkle树中的一个叶子,通过哈希单个交易递归构建Merkle根。
对交易(叶)进行哈希以创建额外的叶节点,这些叶节点可能对应于区块链网络中的交易。尽管可以从大量的交易中创建Merkle树,但Merkle根总是对应于一个32字节或256位的字符串(例如,SHA256哈希算法总是输出32字节的固定长度,而不管输入的大小)。通过这种方式,我们可以使用小到32字节的数据来验证多达数千个交易。
根据案例,任何更改,无论多么小,都会阻止对Merkle根的验证,并使区块链的部分或全部历史失效。
以太坊区块链中的区块类
以太坊与比特币的一个不同之处在于,它有一个更快的区块创建机制,旨在加快交易过程。但是,当区块生成之间的时间区间非常短(大约15秒)时,会创建大量孤块,因为将所有这些区块都包含在区块链中是低效的。
这导致了矿工在没有奖励的情况下浪费时间在区块上工作的问题。为了解决这个问题,以太坊的开发者推出了GHOST协议。
GHOST代表Greedy Heaviest Observed Subtree,这个概念很简单。它奖励那些验证孤块的矿工,尽管其奖励低于标准区块。为了释放奖励,区块必须被主链中的区块引用——或者叔块。
该机制的另一个优点是解决了网络中心化的问题。当快速创建区块时,大矿池很容易垄断区块验证,导致较小的竞争对手创建无数无用的孤块。
以太坊区块链中的区块类
以太坊区块链中有两种类的区块:
主链区块是包含在以太坊区块链中的区块。发现它的矿工将获得奖励。
叔块是经过身份验证但未包含在主区块链中的区块。矿工因此得到的报酬比有效区块低。
想象一下,两个在世界不同地方的矿工在同一时间挖矿同一个区块。然后它们在整个网络中传播它们的区块。这可能会在链中产生分歧,所以必须选择一个,而较大的区块总是获胜。未被选中的区块将成为孤儿(在比特币中)或叔叔(在以太坊中)。与比特币不同的是,以太坊矿工将获得 1/8 的完整区块奖励以挖矿叔块。
叔块奖励如何运作
主链区块的矿工可以引用叔块,当他们这样做时,一个额外的奖励分配给主链区块的矿工和叔块的矿工。主链中包含的每个区块可以引用最多两个叔块,并为每个引用的叔块提供1/32的完整区块奖励。然而,支付给矿工的报酬随着时间的推移而减少。
通过保证对浪费的计算工作的补偿,并通过使奖励随着时间的推移而减少,竞争链上的矿工有动力重新加入主链。这些叔块有助于链安全,也减少51%的攻击概率。
在以太坊矿池中,可以以多种方式分布:
比例支付计划
在这个简单的方案中,矿工将根据在池发现的两个区块之间的时间区间内提交的股票数量获得相应的奖励。因此,一个区块奖励B将在池中的N个矿工之间根据他们各自提交的份额进行分配。
按最后 N 股支付 (PPLNS)
(PPLNS)计划按照最近提交的N股份额比例分配奖励。
基于队列的支付计划
ETHpool3是第一个引入基于队列奖励机制的以太坊挖矿池。在这一机制下,矿工对提交给池运营商的每一份额累积信用。每次由池挖矿一个完整的区块时,区块奖励被分配给池中累积信用余额最高的矿工。然后,顶级矿工将其信用余额重置为他们自己和池中第二高的信用余额之间的差异。
引用关系创造了一个额外的铸造奖励,对于普通区块所有者是完整区块奖励的1/32,对于叔块的 (8 – i)/8。根据引用的区块高度,变量i的范围是1到6。
除了优化区块链的结构,以太坊还有另外两个安全改进。一个是随机打破平局规则。一个节点不是接受接收到的第一条链,而是在所有接收到的相同长度的链中随机选择一条链。γ的数目不再是固定的,等于竞争链数的倒数。另一个目标是免除叔块的挖矿战略。
叔块和日食攻击
日食攻击是如何工作的?
日食攻击要求攻击者控制主机节点的僵尸网络(每个节点都有自己的IP地址),并计算出受害者的邻近节点,基本上是通过反复试验。实现这一目标所需的努力取决于网络的规模和性质,但如果成功,攻击者将在受害者注销并重新加入网络后控制所有连接节点。
在这个场景中,有三个参与者——攻击者、受害者和一个诚实节点。如果受害者发现了一个区块,攻击者就不会将此区块传播到网络。如果攻击者发现了一个区块,他们就和受害者分享。通过这种方式,攻击者为自己和被遮蔽的节点创建了一个私有区块链。
这样,攻击者可以获得比诚实挖矿多 96.4% 的收益。日食攻击是可能的,因为在去中心化的网络中,一个节点不能同时连接到网络上的所有其他节点。相反,为了提高效率,一个给定节点将连接到一组选定的其他节点,这些节点依次连接到自己的选定组。因此,仅使用两台具有唯一IP地址的计算机就可以发起日食攻击。
以太坊依赖于基于一种名为Kademlia的协议的结构化网络,该协议旨在让节点更有效地连接到其他节点。通过使用密钥生成算法,攻击者可以非常迅速地创建无限数量的节点ID(点对点网络上的标识符)。更糟糕的是,攻击者甚至可以创建节点 ID,使它们比随机节点 ID 对受害者更具吸引力,基本上将受害者吸引到他们身边。
以太坊有三个特征可能使其容易受到日食攻击。首先,快速创建区块会创造出无尽的松散区块,通过增加以太坊的供应量间接侵犯了诚实矿工的利益。其次,叔块机制意味着节点可以从这些区块中获利。第三,以太坊增强的节点连接性为攻击者提供了动机。