📖 术语 🟢 通俗解释 🔰 新手

🔁 重放攻击 Replay Attack

攻击者抓住一笔真实、已经签好名的交易,再发一次,让网络第二次接受它。没有什么被解密,也没有私钥被偷——这条消息本来就是有效的,只是被用了两遍。

💡
常见误解 — 遭到重放攻击,是不是有黑客破解了你的交易、偷走了私钥?不对!那笔交易本来就是你自己的、有效的交易,被人原样再发了一次。危险的是一次合法操作被重复执行,而不是什么秘密被攻破。
✍️1 笔签名交易🍴硬分叉:格式相同🔗链 A(本意要发的)🔗链 B(复制出来的)🔁被重放!同一个有效签名,两条链都接受
🍴 一次硬分叉用相同格式把一条链劈成两条,于是 ✍️ 你那一笔签名交易就能被 🔁 重放到另一条链上。一个签名,两条链都被花掉!

🧾 通俗来说 — 一张被复印的支票

设想你递给别人一张签好名的支票。签名是真的,所以银行照付。现在再设想他把这张支票复印一份,又去兑了一次。银行看到的依旧是有效签名,可你本来只想付一次。重放攻击就是这个道理:攻击者拿走一笔你合法签过名的交易,再广播一遍,让网络第二次处理它。因为原件是真的,网络就信了。不用解密,也不用偷私钥——只是把一次只该算一回的合法操作,硬算成了两回。

🍴 为什么硬分叉是经典的导火索

一条区块链通过硬分叉分成两条时,两条新链一开始共用同一段交易历史、同一种交易格式。所以你在一条链上签名并广播的交易,在另一条链上看起来一模一样,而且照样有效。攻击者(甚至只是无意之间)可以把你这笔签名交易复制到第二条链上,在那边也把你的钱挪走一笔——根本没经过你同意。

📌 危险的窗口很短:就在分叉刚结束、两条链还没在结构上分道扬镳的那阵子。一旦每条链都给自己的交易打上专属标记,复制这一招就失灵了。

🪙 新手会在哪儿撞上它

你最可能在链分裂和「免费分叉币」这种场合遇到重放攻击。分叉刚结束就去转账或领币的那一刻最危险:一笔本来发往新链的交易,可能被重放到老链上(或者反过来),结果在两条链上都发生了你压根没打算做的转账。

🛡️ 网络是怎么防的

防御手段原理
⏱️ 时间戳一条消息只在很短的窗口内有效,捕获到的旧消息很快就过期
🔢 一次性随机数(Nonce)用一个一次性数字把消息绑在单次使用上,复制品会被拒绝
🎫 会话令牌登录令牌只对一次会话生效,事后无法重复使用
🔗 重放保护(针对分叉)分叉时让每条链的交易彼此不兼容

在区块链上,重放保护分两个强度。强保护(双向)让两条链的交易在结构上互不兼容,无论哪个方向都复制不过去。选择性开启(弱保护)则要用户自己多做一步,才能让交易变得不可重放。

🔍 两个真实的分叉案例

  • 以太坊 vs 以太坊经典(2016 年) — 分裂之后,两条链用的是同一种交易格式,没有专属的链标识,于是签名交易能跨链重放。后来的修复方案 EIP-155,把一个唯一的链 ID 嵌进每个签名里,于是在一条链上有效的交易,在另一条链上会被拒绝。
  • 比特币 vs 比特币现金(2017 年) — 比特币现金从一开始就加入了强的双向重放保护,让自己的签名与比特币互不兼容。一笔比特币现金交易在比特币上无效,反之亦然。

📊 如今大多数主流的现代硬分叉默认都自带强重放保护,所以重放攻击相对少见,主要就是分叉期间那段风险窗口。

❓ 常见问题

遭到重放攻击,是不是说明有人黑进来或破解了我的交易?
不是。没有任何东西被破解,私钥也没被偷。攻击者只是把一笔你已经签过、并且仍然有效的交易又广播了一遍。危险之处在于一次合法操作被重复执行,而不是什么秘密被攻破。
新手到底什么时候会真的碰上重放攻击?
主要是在硬分叉或链分裂刚发生那阵子,两条链短暂共用同一种交易格式。在这个窗口期里转账或领取免费的「分叉币」最危险,因为同一笔签名交易在两条链上都可能有效。
现在重放攻击还常见吗?
现在已经相当少见了。大多数主流的现代硬分叉默认都自带重放保护,为一条链签的交易在另一条链上会被直接拒绝。真正的风险,主要就是分叉期间那段短暂的窗口。

🔗 相关术语 · 币种