区块链中的重放攻击:它的定义、真实案例以及如何预防。

目录

重放攻击

分享

1993年,密码学家称之为“最简单的攻击”:获取一条有效消息,等待片刻,然后再次发送。没有人会建造金库时期望密钥被重复使用。

但以太坊和以太坊经典分叉时,情况正是如此:同一笔已签名的交易,在两条链上广播,导致真实资金转移了两次。没有黑客攻击,没有密码被盗,也没有钓鱼链接。

这是一次老套的攻击,它利用合法性作为武器,重演以往的攻击方式。

加入UEEx

体验全球领先的数字财富管理平台

注册

另请参阅: 加密货币领域的主要安全问题

什么是重放攻击(Replay Attack)?

重放攻击序列

重放攻击是一种网络安全漏洞,攻击者拦截有效数据传输并恶意重复使用或重新发送它们以欺骗系统。 

与改变或伪造数据的攻击不同,重放攻击只是重新传输先前捕获的信息,例如登录凭据、身份验证令牌或交易请求,以欺骗系统相信它正在接收新的合法命令。

请注意: 重放攻击(重放攻击)可以发生在同一条链上或跨链上。

另请参阅: 在加密货币领域,5倍是什么意思?

同链重放攻击和跨链重放攻击有什么区别?

同链重放攻击发生在同一条区块链内:同一笔已签名的交易或消息被多次提交到同一网络。

nonce 机制可以防止标准以太坊交易出现这种情况;一旦 nonce(一次性使用的数字)被消耗,同一笔交易就会被拒绝。

跨链重放攻击发生在地址格式和签名逻辑相同的两条区块链之间——最常见于硬分叉之后。

随机数(nonce,仅使用一次的数字)在这里不起作用,因为两条链独立跟踪随机数。以太坊上随机数为 5 的交易和以太坊经典上随机数为 5 的交易在不同的系统中是不同的记录,但签名后的交易数据是相同的。

EIP-155 的链 ID 专门用于修复跨链重放攻击。对于智能合约签名验证,EIP-712 的域分隔符可以同时处理同链和跨链攻击。

加入UEEx

体验全球领先的数字财富管理平台

注册

重放攻击的真实案例:三个有据可查的案例

区块链中的重放攻击并非纸上谈兵,它已在多起事件中造成了确凿的经济损失。

以太坊/以太坊经典分叉——2016 年

在 DAO 黑客事件后,以太坊网络分叉为以太坊 (ETH) 和以太坊经典 (ETC),分叉前签署的每一笔交易在两条链上都有效。

这两条链共享相同的地址空间、交易格式和签名验证逻辑。

任何钱包签名的交易同时在 ETH 和 ETC 上都是有效的交易。

持有ETH和ETC用户资金的交易所立即成为攻击目标。

攻击者拦截了合法的 ETH 提现交易,并在 ETC 链上重放这些交易,导致用户原本无意使用的 ETC 余额被耗尽。

在分叉后的一段时间内,在重放保护机制广泛实施之前,超过 40,000 个 ETC 从交易所被转移。

这一事件直接促成了 EIP-155 的诞生。

以太坊合并——2022年

当以太坊从工作量证明(PoW)过渡到权益证明(PoS)(合并)时,一条名为以太坊的分叉链出现。 战俘 (ETHW)创建。

几天之内,攻击者利用了 Omni Bridge 跨链合约(该合约没有针对 ETHW 的重放保护),重放了从桥合约转移 200 ETHW 的交易。

攻击者利用 ETHW 链上的 ETH 主网预言机价格数据进行攻击,该数据已经过时且容易被操纵。

乐观主义OP代币盗窃案——2022年

在一次跨链重放事件中,价值 20 万美元的 OP 代币在有争议的多重签名交易序列中从 Optimism 被盗。

该攻击利用了 L1(以太坊)和 L2(Optimism)链上下文之间的差距,通过在错误的链上重放特定的签名消息,在未经授权的情况下转移代币。

这些并非孤立事件,而是已记录在案的模式:每次新的分叉或 L2​​ 部署创建两个共享地址或签名格式但没有链特定绑定的环境时,都会存在重放风险。

想想上次有新链上线,并且使用了你的以太坊地址。你检查过你现有的签名授权在新链上是否仍然有效吗?你确认过你的钱包签名方案是否包含了 EIP-155 吗?大多数人都没有。大多数人也安然无恙。但那些没安然无恙的人却损失了真金白银,而且他们谁也没有预料到。

另请参阅: 如何被动赚取加密货币?

加入UEEx

体验全球领先的数字财富管理平台

注册

EIP-155:2016 年分叉后的解决方案

EIP-155 由以太坊联合创始人 Vitalik Buterin 于 2016 年提出,其创建目的就是为了防止交易在分叉链上被重放。

原则上,解决方法很简单:将链的唯一标识符(chainId)嵌入到每个交易签名中。

在 EIP-155 之前,交易签名涵盖六个数据字段:随机数、gas 价格、gas 限制、接收者地址、值和数据。

使用相同的验证逻辑,该签名在任何与 EVM 兼容的链上都有效,因为这些字段都没有指明交易是针对哪条特定的链。

EIP-155 之后,交易的签名哈希中包含三个附加字段:chainId 和两个空占位符值。

已签署的交易 以太坊主网 (chainId = 1)在 Optimism(chainId = 10)、Polygon(chainId = 137)或任何其他 EVM 链上都不是有效的签名。

接收交易的节点会将链 ID 与自身的链 ID 进行比对,并拒绝任何不匹配的情况。

这一改变显著降低了标准交易的跨链重放攻击。

重要的局限性: EIP-155 仅保护原始以太坊交易。

它不保护应用层签名,即智能合约使用 ecrecover 函数在内部验证的已签名消息。

即使在交易层面完全实现了 EIP-155,不检查链 ID 而直接验证链下签名的合约仍然容易受到重放攻击。这就是 EIP-712 的作用所在。

Nonce——它如何防止同链重放

nonce(一次性使用的数字)是防止同一区块链内发生重放攻击的机制。每个以太坊账户都维护一个计数器,该计数器从 0 开始,每次发送交易时递增 1。

当您提交 nonce = 5 的交易时,网络只会在您当前账户 nonce 正好为 5 的情况下接受该交易。

处理完成后,您的帐户 nonce 将变为 6,任何重放 nonce-5 交易的尝试都会失败,因为网络现在期望 nonce 为 6。

这就是为什么你不能在同一条以太坊链上发送两次相同的交易:nonce 值阻止了这种情况的发生。Gate.io 在 2026 年 3 月的分析中指出,问题在于:nonce 值本身可以防止同一条链上的重放,但无法防止跨链重放,因为不同的链维护着各自独立的 nonce 值。

您在以太坊主网上的账户 nonce 和您在以太坊经典上的账户 nonce 是独立跟踪的。

如果你在以太坊和以太坊经典上进行了相同数量的交易,那么在以太坊上 nonce = 5 的交易在以太坊经典上也可能 nonce = 5。EIP-155 通过将 chainId 集成到签名本身来弥补这一缺陷。

加入UEEx

体验全球领先的数字财富管理平台

注册

EIP-712 — EIP-155 未涵盖的层

EIP-155解决了交易级重放攻击,但对智能合约签名验证没有帮助。

当智能合约使用 ecrecover 验证链下签名时,它验证的是消息,而不是交易。EIP-155 的 chainId 保护机制适用于承载消息的以太坊交易,而非消息内容本身。

如果开发者构建的合约在验证签名时没有在签名数据中包含 chainId、合约地址和 nonce,那么任何拦截这些签名的人都可以重放这些签名。

EIP-712(类型化结构化数据签名)解决了这个问题。它定义了一种标准的签名消息结构方式,其中包括域分隔符、包含链 ID 的哈希值、验证合约的地址以及合约的名称和版本。

根据 EIP-712 创建的签名与特定链上特定地址的特定合约相关联。

即使字节码相同,也无法在不同的链或不同的合约上重放该攻击。

对于开发者:在部署任何验证链下签名的合约之前,请确保您的签名方案包含以下三个要素:nonce(防止相同消息的重复使用)、chainId(防止跨链重放攻击)和合约地址(防止跨合约重放攻击)。OpenZeppelin 的 ECDSA 库 4.7.3 及更高版本已正确实现所有这三个要素。

另请参阅: USDT支付是如何运作的?

重放攻击的工作原理

重放攻击的工作原理
步骤操作
1。 拦截使用数据包嗅探器(例如 Wireshark)窃听未加密的网络。
2。 捕获记录有效的数据包(凭证、令牌或交易请求)。
3。 分析无需解密即可准备捕获的数据包以供重复使用。
4。 重播将有效数据包重新发送回目标系统。
5.执行如果重复请求缺少新鲜度检查,系统会将其视为合法请求。

如何防止重放攻击

展示如何防止重放攻击的信息图
保护方法运作模式最适合使用
时间戳拒绝时间超出可接受范围(例如 30 秒 - 1 分钟)的请求。时效性交易和 API 调用
唯一标识符/令牌为请求附加一次性随机 ID,并在使用后标记该 ID 以防止重复使用。金融交易和会话 ID
加密(TLS / SSL / HTTPS)对传输中的数据进行加密,以阻止数据包嗅探工具捕获明文。Web应用程序、安全FTP和后端服务
随机数(仅使用一次的数字)使用随机或顺序值,该值一旦被消耗便立即失效。API 安全性和双因素身份验证:基于时间的一次性密码 (TOTP)

加入UEEx

体验全球领先的数字财富管理平台

注册

易受重放攻击的系统和协议

目标系统/协议它为何如此脆弱常见例子和缺陷
无线网络露天传输使得数据容易被截获和转发。过时的 Wi-Fi(WEP/弱 WPA)缺少数据包排序;蓝牙设备缺少 nonce 验证或会话配对。
加密协议依赖于静态键或缺乏上下文感知的新鲜度检查。当会话令牌或凭据缺乏严格的时间戳和过期规则时,可以使用 Kerberos 或 OAuth。
物联网(IOT)优先考虑低功耗运行和便利性,而非强大的安全性。由于计算能力有限,使用物联网协议(MQTT、CoAP)的智能锁和摄像头没有内置重放保护功能。
支付系统如果交易缺少动态的、一次性使用的身份验证码,则存在安全隐患。较旧的非接触式卡和缺少 EMV 加密或单笔交易令牌的 POS 终端。

另请参阅: 面向初学者的十大加密货币安全最佳实践

如何检测重放攻击

1. 时间戳验证和日志监控

重放攻击通常会重复使用数据,而不修改其原始时间戳。

通过监控和验证时间戳,系统可以检测到消息何时意外延迟或超出可接受的时间窗口。

  • 对令牌、交易和 API 调用实施严格的基于时间的有效性检查。
  • 标记似乎被延迟或在正常会话持续时间之外处理的消息。
  • 交叉引用系统日志以识别出现多次的相同时间戳的请求。

2. 重复消息检测

重放攻击的核心特征是重复发送相同的消息或数据包。

系统应监控此类模式,尤其是在身份验证、金融交易和会话管理等关键领域。

  • 使用散列或指纹来检测重复的数据包或请求。
  • 将传入数据与最近处理的条目进行比较,以检查重复的内容。
  • 记录并调查重复的会话令牌、API 调用或加密的有效负载。

3. 序列号和随机数跟踪

安全系统通常依靠序列号或随机数(一次性使用的数字)来跟踪和验证数据的唯一性。

重放的消息通常会重复使用相同的随机数或序列号,这可以被标记出来。

  • 保留最近使用的随机数或序列号的短期记忆(缓存或数据库)。
  • 删除或记录包含重复使用值的请求。
  • 对已处理的会话令牌或请求标识符发出警报。

4. 行为异常检测

重放攻击不一定是技术上的重复;有时,行为背景可以揭示威胁。

例如,用户在几秒钟内两次执行完全相同的交易可能很可疑。

  • 监控用户行为并为正常活动创建基线配置文件。
  • 标记异常模式,例如高频重复操作、来自不同 IP 的相同请求或使用相同令牌的多次登录。
  • 集成可以学习和适应典型交通模式的异常检测系统。

5. 网络流量分析

先进的检测工具可以实时分析网络流量以寻找可疑模式,特别是在重放攻击常见的无线或物联网环境中。

  • 使用入侵检测系统 (IDS) 或无线入侵防御系统 (WIPS) 检测可疑数据包重传。
  • 分析数据包头中重复使用的标识符、随机数或加密参数。
  • 注意会话之间不变的重复加密有效负载。

6. 会话令牌和身份验证日志分析

重放攻击通常涉及重复使用的身份验证令牌。系统应审核并分析令牌的发放和使用日志,以识别可能被重复使用或滥用的令牌。

  • 跟踪会话令牌寿命及其相关的 IP/设备信息。
  • 记录重新使用过期或已使用的身份验证凭据的尝试。
  • 调查重复使用标头、元数据或会话详细信息的登录尝试。

另请参阅: 加密货币硬件安全模块(HSM)详解

常見問題解答

重放攻击和 MITM 攻击之间有什么区别?

重放攻击涉及捕获并重新发送有效数据以欺骗系统,而中间人 (MitM) 攻击则会主动拦截并实时改变双方之间的通信。

重放攻击中捕获的最常见数据包类型有哪些?

重放攻击中捕获的最常见数据包类型包括身份验证请求、会话令牌、交易消息以及无线或网络通信中使用的控制命令。

TLS 如何防止重放攻击?

TLS 通过使用唯一的会话密钥、序列号和消息认证码 (MAC) 来防止重放攻击,以确保每条消息都是最新的,并且不能在未经检测的情况下重新发送或更改。

什么是 Kerberos 重放攻击?

当攻击者捕获并重新发送有效的 Kerberos 身份验证消息以诱骗系统在无需重新身份验证的情况下授予未经授权的访问时,就会发生 Kerberos 重放攻击。

加入UEEx

体验全球领先的数字财富管理平台

注册

总结

重放攻击看似简单,但其影响可能十分严重,从未经授权的访问到经济损失和服务中断,不一而足。

识别易受攻击的系统,了解这些攻击是如何进行的,并应用诸如 nonce、时间戳和加密之类的多层防御措施至关重要。 

由于威胁继续针对验证过程中的薄弱环节,早期检测和预防变得至关重要。 

加强系统抵御重放攻击不仅仅是保护系统;它还关乎确保在安全不容有损的数字环境中实现信任、数据完整性和一致的服务。

免责声明:本文仅供参考,不应被视为交易或投资建议。文中任何内容均不构成财务、法律或税务建议。加密货币交易或投资存在相当大的财务损失风险。在做出任何交易或投资决策之前,请务必进行尽职调查。