区块链中的双重支付及其预防方法

  • hacken
  • 发布于 2025-07-01 12:43
  • 阅读 11

本文深入探讨了区块链中的双重支付问题,解释了其原理、攻击方式(如Finney攻击、竞争攻击、51%攻击),以及区块链和用户如何防范双重支付攻击。文章还提到了拜占庭将军问题与双重支付的关联,以及通过协议审计来发现和修复漏洞的重要性。

更新日期:2025 年 6 月 30 日

阅读时长:6 分钟

作者:Oleh Malanii

一名攻击者通过在 Ethereum Classic 链上多次花费相同的代币,窃取了超过 160 万美元。这次攻击仍然是历史上破坏纪录的双重支付攻击之一。双重支付是对区块链的致命攻击,每个区块链都应尽最大努力避免。

它也可能发生在普通用户身上。了解双重支付的内部运作方式以及它如何展开,将有助于你保护自己的资产安全。

什么是双重支付?

双重支付是一种利用形式,操纵者多次花费完全相同的加密货币。它与拜占庭将军问题有一些相互关联的历史背景,该问题反映了在没有中央机构的情况下达成共识的挑战。比特币背后的技术设计最终解决了这个问题。迄今为止,比特币网络本身从未出现过双重支付问题。但由于其复杂的操作机制,以太坊已经多次面临这个问题。

双重支付是如何发生的?

双重支付是指某人两次花费相同的加密货币。

回想一下,区块链是一系列交易区块。一个新的区块必须有一个哈希值,这是一个重要的加密函数,其中包含关于公共交易数据和新区块添加日期的所有细节。

当服务将非最终区块视为最终区块时,就会发生双重支付。当服务没有很好地确认交易时,也可能发生双重支付,从而多次花费交易的应付款项。

导致双重支付问题的另一个重要原因是智能合约逻辑存在缺陷。如果没有健全的签名验证来阻止这种行为,用户可能会两次花费相同的代币。

双重支付问题会在现实生活中发生吗?

双重支付问题存在于金融交易的各个方面,无论是在线还是离线。但发生模式因具体情况而异。这是一个现实生活中可能发生的场景:

John 在视频通话中告诉 Alice 或 Bob,其中一人将支付 Jane 200 美元现金。Jane 找到 Alice 并要求 200 美元,她得到了。这应该足以满足他们的协议。但在 Alice 告诉 Bob 她已经给了 Jane 200 美元之前,Jane 已经来找 Bob 并要求 200 美元。Bob 给了她 200 美元,因为他不知道 Jane 早些时候已经支付了 Alice,而且没想到她会如此狡猾。

在上述场景中,Alice 和 Bob 向 Jane 支付了两次。这也是在这种背景下的双重支付

双重支付攻击

它们以各种形式出现,包括:

  1. Finney 攻击

Hal Finney 提出了这种攻击的想法。黑客挖掘一个区块,其中包含一笔交易,将资金从钱包 A 发送到钱包 B。但他们等待广播这个区块。

当这种情况发生时,他们向供应商支付产品费用,并将资金发送到他们的钱包 C。在供应商可能等待了几分钟没有收到警报后,他们可以假设交易仍在 mempool 中并转移产品。攻击者现在可以广播他的区块。此时,他们到钱包 A 的第一笔交易超过了最近到钱包 C 的交易。因此,供应商永远不会收到付款,而攻击者已将相同的资金发送到他的另一个钱包。

  1. 竞争攻击(Race Attack)

ByteCoin,比特币网络的一位资深成员,创造了这个词。当两笔交易争先恐后地进入一个区块时,就会发生竞争。进入的交易被认为是成功的,而没有进入的交易则失败。

这是攻击者如何进行竞争攻击的:他们向受害者发送一些加密货币,但从未广播它。同时,攻击者使用相同的加密货币进行另一笔交易并将其广播到网络。验证者批准将第二笔交易添加到区块中,因为它​​们是第一个看到的。受害者的交易输掉了进入区块的竞争。因此,付款永远不会成功。

  1. 51% 攻击

51% 攻击是指一个实体作为多数 staker 控制一个区块链网络,并导致网络中断。这样,他们获得了执行和撤销的权力:阻止交易确认、重写交易历史以及执行双重支付交易

如何防止双重支付攻击

健全的共识机制

在具有健全共识机制的区块链中,永远不会发生双重支付共识机制使矿工或验证者能够正确地履行其维护网络完整性的职责。其安全严密的逻辑和设计将默认防止意外或自愿的双重支付问题。

包含 Nonce 以防止重放攻击

Nonce 是一个难以破解的加密值,必须先对其进行哈希处理才能挖掘区块。Nonces 的值只能使用一次。它们有助于保护区块链免受重放攻击,因为它们的值无法被复制。Nonces 维护每个区块的完整性。

时间戳

每笔成功的交易都有一个时间戳。时间戳证明特定的区块是在指定时间添加到链中的。一旦区块被加上时间戳,它就变得不可逆转。任何试图在带有时间戳的区块中进行双重支付加密货币的冲突交易都会失败。

高节点运营成本

双重支付操纵通常要求攻击者管理一个或多个节点。在 51% 攻击的情况下,黑客需要控制网络中一半以上的节点。

区块链缓解双重支付的一个主要方法是提高节点运营的门槛。例如,以太坊需要 staking 32 ETH(54,135 美元)才能成为节点管理者。这要求任何双重支付者放弃大量资金。

中心化监管

在传统银行系统中,双重支付很少发生,因为有 authorities 监控和批准每笔交易。不可能两次花费同一张钞票。区块链也可以采用这种安全检查。毕竟,双重支付的发生是因为没有单一的中心化实体来验证交易。但是,这个解决方案是一个两难境地,因为它违反了去中心化的理念。因此,一些区块链可能永远不会采用这种方法。

确认 UXTO 是否已被花费

未花费的交易输出(Unspent Transaction Output)是关于交易历史和当前状态的信息循环。区块链上的每笔交易都有一个输出,该输出可以成为新交易中的新输入。只有在用户花费后,这个新输入才会成为新的 UXTO。防止双重支付意味着包含一个系统来检查 UXTO 是否已被花费。

区块链协议和智能合约审计

双重支付问题通常存在,这是由于区块链协议甚至智能合约的内部运作中的漏洞。发现和修复这种高危漏洞的最佳方法是进行彻底而专业的审计。

普通用户如何避免成为双重支付的受害者?

除了区块链之外,普通用户也可能成为双重支付的受害者。主要的检查是等待 6 个区块确认。接收方可能会因为假设一笔交易将在只有一两个确认的情况下完成而陷入 Finney 攻击和竞争攻击。

一旦有 6 个区块确认,交易既不能被撤销也不能被否决。通常,最多应在 3 到 30 分钟内完成 6 个区块确认。

但有些用户可能很不耐烦或自以为是。最好的方法是等待 6 个区块确认,无论需要多长时间,以确保交易成功。大多数区块链最近都制定了一项规则来加快确认速度,这样就不会有不正当行为的空间。

总结

双重支付是一种严重的操纵行为,会影响区块链的完整性。黑客已经使用 51% 攻击(一种双重支付变体)攻击了 Ethereum Classic 和 Litecoin Cash。

攻击者还可以使用双重支付的代币欺骗供应商或服务提供商。区块链可以通过中心化监管、时间戳、审计和高节点运营成本来防止这种攻击。个人可以通过等待 6 个区块的确认来避免成为受害者。

同时,双重支付漏洞很少那么简单。区块链协议审计是针对这些可能导致双重支付攻击的复杂漏洞的正确解决方案。立即预订你的审计


什么是双重支付? 加密货币中的双重支付是一种非法的行为,即在一次或多次交易中花费相同的加密货币代币。

加密货币如何解决双重支付问题? 加密货币通过快速将真实交易的详细信息广播到所有节点来解决双重支付问题。从而使攻击者极难两次花费加密货币。

作为一个人,我如何避免成为双重支付攻击的受害者? 始终等待 6 个区块确认以确保交易是真实的,并且加密货币很快就会进入你的钱包。

区块链如何防止双重支付? 区块链可以通过协议审计、时间戳、高节点运营成本和中心化监管来避免双重支付

拜占庭将军问题在双重支付中是什么? 双重支付问题可以理解为 BGP 的博弈论。将军们必须就采取关键军事行动的最佳时间达成一致。但总是假设将军中的一个或多个叛徒可能会试图迷惑其他人。主要问题是忠诚的将军将如何达成协议。

  • 原文链接: hacken.io/discover/doubl...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
hacken
hacken
江湖只有他的大名,没有他的介绍。