本文深入探讨了区块链中的双重消费攻击,详细介绍了攻击的原理、类型及其示例,并探讨了防护措施和共识机制的作用。双重消费严重威胁到交易的完整性和信任,是区块链技术广泛应用的障碍之一。
在本文中,我们探讨了区块链双重支出攻击是如何发生的,提供示例以及减轻和避免它们的方法。
双重支出攻击发生在相同的代币被多次使用时,破坏了金融交易的信任和安全性。 这个问题在区块链技术中尤其普遍,因为交易是去中心化的,没有中央权威进行管理。
在本文中,我们将通过实例探讨双重支出的发生、起源,以及减轻和避免它的机制。
双重支出攻击在区块链中是利用相同的代币多次使用的漏洞。
如果你不熟悉区块链是什么,区块链包含一系列区块,每个区块包含交易。新创建的区块会被哈希,并包含数据,包括该区块何时被添加。
交易数据通过节点进行验证并通过以下步骤添加到区块链中:
双重支出发生在一笔交易在一个区块中被确认,但随后一个冲突的交易花费相同的代币被插入到之前的区块中,或者对区块的顺序进行了操控。这会造成节点错误地将早期的非最终区块视为已最终确定,从而使双重支出得以实施。
减轻和避免区块链双重支出攻击对于确保对区块链系统的信任和采用至关重要,使其作为安全和可靠的交换媒介。
拜占庭将军问题,由Leslie Lamport、Robert Shostak和Marshall Pease于1982年提出,是一个理解分布式共识的理论框架,用于网络中不可靠节点而没有中心权威的情况。
在问题的情景中,一组拜占庭将军包围一个城市,并决定是进攻还是撤退。有些将军可能是叛徒,向不同的将军发送冲突消息。
正如拜占庭将军问题要求将军们在存在叛徒的情况下达成共识,双重支出问题也要求区块链参与者在潜在存在恶意行动者试图双重支出的情况下达成共识。
当恶意行为者试图通过传播冲突交易来操纵网络时,就会出现此问题,从而导致双重支出的场景。
拜占庭将军问题与双重支出问题
拜占庭容错(BFT)算法旨在通过使节点的分布式网络能够在存在故障或恶意节点的情况下达成共识来解决此问题。 这些算法,如实用拜占庭容错(PBFT),确保诚实节点能够在存在拜占庭故障的情况下就交易的有效性达成一致。
比特币于2009年由一个或一组使用化名Satoshi Nakamoto的人发布。它利用基于工作量证明(PoW)的共识机制来解决与早期加密货币如DigiCash相关的双重支出问题,并实现去中心化共识。PoW算法要求矿工解决计算密集型数学难题,以验证并将新区块添加到区块链中。这个过程使攻击者重写交易历史或进行双重支出攻击的经济成本很高,因为这需要控制大部分网络的计算能力。
在区块链网络中,双重支出问题主要通过基于Sybil抵抗机制的共识机制进行解决,如工作量证明(PoW)、权益证明(PoS)和实用拜占庭容错(PBFT)。 这些机制建立了一个共享的分类账,其中交易被以安全和不可篡改的方式验证并添加到区块链中。
然而,某些类型的双重支出攻击仍然存在。
双重支出攻击可以以不同形式表现出来,包括:
当攻击者利用去中心化区块链网络中交易传播的时间延迟时发生。
竞争攻击实现双重支出
以比特币先驱Hal Finney命名,这些攻击涉及:
Finney攻击实现双重支出
如果一个节点控制了工作量证明(PoW)或权益证明(PoS)区块链的网络哈希率的多数或者加密货币或权益,这可能会让它比网络的其他部分更快地挖掘区块,并控制确认过程。这使得它能够重写交易历史和双重支出代币。这类攻击主要是PoW中的一个问题,因为PoS区块链(稍后会讨论)通常有机制来阻止此类攻击,例如对参与恶意行为的验证者实施削减罚款。
51%攻击实现双重支出
区块链网络不断完善其安全协议和共识机制,以减轻双重支出风险。
一些有效的缓解策略包括:
区块链网络采用基于工作量证明(PoW)、权益证明(PoS)、实用拜占庭容错(PBFT)或其他Sybil抵抗机制的各种共识机制来实现分布式节点之间的协议。这些机制确保大多数节点对交易的有效性和顺序达成一致,从而使进行双重支出在经济上或计算上都变得不可行。
通过挖矿达成共识。矿工竞争解决复杂的数学难题,首先解决难题的矿工将新的经过验证的交易区块添加到区块链中。这个过程需要大量的计算能力,通常最快的矿工会添加区块。
验证者根据他们持有或作为抵押的加密货币的数量来选择提出和验证区块。验证者轮流提出区块,必须大多数验证者同意区块的有效性,才能将其添加到区块链中。被选中的验证者将区块添加到区块链。验证者在经济上有动力诚实行事,因为如果他们验证无效交易,就会面临失去抵押代币的风险。
一般来说,区块链系统实现确认机制,在收到更多网络确认时,交易变得越来越安全。确认数量表示在包含特定交易的区块后添加到区块链的区块数量。随着交易获得更多确认,它们获得的安全性增加,使得撤销或修改它们变得更加困难。
一些区块链平台提供交易终结性的特性,一旦交易被确认就不可逆转。以太坊向以太坊2.0的过渡采用基于权益证明的共识机制,旨在提供比当前的工作量证明系统更快的终结性。
不断监控网络,警惕可疑活动或异常行为,可以帮助及时检测和减少双重支出尝试。节点可以实施算法或方法来检测潜在的欺诈交易,以及共识规则来识别和拒绝潜在的欺诈交易。
未花费交易输出(UTXO)表示之前交易的输出,这些输出尚未被花费。在处理新交易之前,区块链网络验证所引用的UTXO是否已被花费,确保其只被使用一次,从而防止双重支出尝试。
教育用户和利益相关者关于双重支出的风险以及在确认交易之前验证交易细节的重要性,采用智能合约开发和安全课程等。推广安全管理加密资产的最佳实践可以帮助防止未经授权的交易,并减轻双重支出的风险。
实施安全最佳实践,包括加密和身份验证机制,帮助防止数据的未经授权篡改,从而缓解双重支出等潜在攻击。此外,积极参与安全审计和漏洞奖励计划可以提高整体安全性,并有助于识别和解决智能合约中的潜在双重支出漏洞。
重放攻击可以通过重新传输有效交易来利用相同的资金进行双重支出。防止重放攻击有助于减轻重放攻击的风险,因此减少双重支出的风险。有关重放攻击及其缓解方法,请参阅重放攻击综合指南。
PendingDepositRefund
事件缺少Nonce参数,这可能导致第三方工具不知哪笔存款被退款。
双重支出问题对区块链网络构成了重大挑战,威胁到交易的完整性和可信度,从而阻止其主流采用。
通过拜占庭容错算法和基于Sybil抵抗机制如PoW和PoS的共识机制,区块链网络努力达成共识并防止双重支出攻击。
对你的协议进行审计可以显著降低发生攻击的概率。
- 原文链接: cyfrin.io/blog/understan...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!