
重放攻擊指的是攻擊者將先前有效的交易或授權再次提交到系統,導致同一操作被重複執行。這可以比喻為複製一份已簽署的文件,在不同窗口重複蓋章以獲得多次確認。
在區塊鏈領域,簽名是透過私鑰產生,類似於數位印章,用以確認「我同意此操作」。若已簽署的交易能在其他場景被識別,即可能遭遇重放攻擊。
為防止重複執行,區塊鏈會採用 nonce(隨機數)作為唯一識別碼。可將 nonce 理解為每次操作的序號,絕不重複。系統僅接受從未使用過的 nonce。
於跨鏈或分岔環境下,還需 chainId。chainId 就像網路識別碼,將交易綁定於特定鏈,避免在其他鏈上被重放。
重放攻擊多半源於系統沒有明確界定操作的「上下文」。上下文包括該操作所屬的區塊鏈、是否有唯一標識、是否設有過期時間,或是否綁定特定網域名稱或智能合約。
若簽名僅證明同意某項操作,卻未指定鏈、應用或時間範圍,任何獲得該簽名的人都可能在其他場景下重複使用。
若應用僅在本地或快取中追蹤「已用/未用」狀態,而非鏈上紀錄,重放攻擊更容易發生。同樣,分岔後,若兩條鏈共用交易格式和 nonce,也會出現跨鏈重放風險。
在同鏈重放的情境下,攻擊者攔截授權訊息或特殊交易,並於同一條鏈上重複提交。這常見於「離線簽名授權」缺乏唯一 nonce 或過期時間戳的狀況。
在跨鏈重放的情境下,若交易或訊息缺少 chainId 綁定,或分岔後兩條鏈均接受相同簽名格式,攻擊者就能將鏈 A 的有效交易再次於鏈 B 執行。
於智能合約層面,若合約未追蹤已處理的訊息 ID,或缺乏冪等性(即重複呼叫會產生累計效果),攻擊者即可多次執行本應僅限一次的操作。
2016 年,以太坊發生鏈分裂,形成 ETH 與 ETC。由於早期交易未區分鏈,產生了跨鏈重放風險。2016 年推出 EIP-155,為交易新增 chainId,顯著降低此類攻擊(參考:Ethereum Improvement Proposal 歷史)。
於授權場景中,若基於簽名的轉帳或額度授權缺乏過期時間與唯一 nonce,簽名可能被重複提交。2020 年發布 EIP-2612,標準化基於簽名的ERC-20代幣授權,要求同時包含 nonce 與到期時間(參考:Ethereum Improvement Proposal)。
若跨鏈橋與訊息協議未分配唯一識別碼並追蹤已消耗訊息,重放攻擊可能導致資產重複鑄造或釋放。業界現已透過訊息 ID 與鏈上狀態追蹤進行防範。
首先,檢查所有簽名請求內容。若錢包彈窗為「盲簽」(即無明確交易細節、網域名稱或鏈資訊),重放風險較高。
其次,確認授權是否包含過期時間與唯一 nonce。缺少任一項都會提升風險。
檢查是否有明確鏈上下文。缺少 chainId 或網域名稱分離(如 EIP-712 域)會增加跨環境重放風險。
最後,留意異常重複執行的跡象,如同一授權被多次使用、資產短時間內多次轉移,或相同訊息於多條鏈上產生效果。
步驟 1:將交易綁定於鏈上下文。採用 EIP-155 的 chainId,確保每筆交易僅能於指定鏈上執行,防止跨鏈重放。
步驟 2:為每項授權分配唯一 nonce 與過期時間。EIP-2612 與 Permit2 等標準要求每個簽名包含 nonce 與截止時間,過期授權自動失效。
步驟 3:於智能合約中紀錄「已用」訊息或 nonce。每條訊息應有唯一且不可重複的 ID,並將消耗狀態儲存在鏈上,實現冪等處理。
步驟 4:依 EIP-712 使用結構化簽名。簽名應包含網域名稱(verifyingContract、name、version)、chainId 及清晰可讀內容,最大程度減少誤用及重放攻擊風險。
步驟 5:於跨鏈橋及訊息通道中實施雙向驗證。不僅驗證源鏈與目標鏈,還需核查訊息唯一性、批次號及處理狀態,防止於不同路徑下重複執行。
步驟 1:僅於介面明確顯示文本細節時簽名。拒絕盲簽,確認彈窗包含網域名稱、鏈資訊及用途說明。
步驟 2:為授權設置邊界。優先選擇有時限及額度限制的授權,並定期透過區塊鏈瀏覽器或管理工具撤銷未用權限。在 Gate 等交易所提領時,務必確認已選擇正確的網路與地址,避免跨環境誤操作。
步驟 3:將資金與操作錢包分離。主要資產存放於硬體錢包或唯讀錢包,使用小額熱錢包與DApp互動,降低因重複授權造成的損失。
步驟 4:使用地址簿與白名單。將常用收款地址及備註儲存於 Gate 地址簿,啟用提領白名單,降低因誤操作或釣魚簽名導致重複提交的風險。
步驟 5:監控異常活動。若發現短時間內出現重複交易或授權多次觸發,應立即暫停操作、撤銷授權,並檢查裝置及外掛安全。
重放攻擊指同一有效交易或授權被反覆提交,核心問題是重複執行。雙花攻擊則為同一資產被重複花費,涉及共識機制與區塊重組,兩者在協議層面完全不同。
女巫攻擊則是透過多重身份偽裝成大量用戶,用於投票或分配操控,與重複交易無關,屬於身份層詐欺。重放攻擊則發生在交易或訊息層。
此外,中間人攻擊通常會修改資料或路由;重放攻擊則可能不更改內容,僅重複提交相同資料。
自 2016 年 EIP-155 引入 chainId 後,跨鏈重放攻擊大幅減少;EIP-2612(2020)與 Permit2 進一步規範簽名授權的 nonce 及到期機制。至 2025 年,隨多鏈及 Layer 2 網路普及,訊息通道、防重放 ID 及冪等設計已成為基礎設施。
帳戶抽象(如 ERC-4337)推動基於網域的 nonce 管理與策略,針對不同操作使用不同 nonce,降低域內重放風險。跨鏈橋現已強調源鏈驗證與訊息唯一追蹤,限制重複執行的風險。
重放攻擊的本質是「有效內容於錯誤上下文中再次執行」。解決方案為明確上下文:鏈識別、唯一 nonce、過期時間、網域綁定,並始終於鏈上紀錄已消耗狀態。開發者應採用 EIP-155、EIP-712、EIP-2612/Permit2 標準及冪等設計。一般用戶應避免盲簽、使用時限授權、按功能分開錢包並啟用交易所白名單以防範風險。若發現資金相關異常重複,應立即停止操作並撤銷授權。
重放攻擊不會直接竊取資產,但可能導致惡意重複交易。例如,在鏈 A 轉帳 100 個代幣,若攻擊者於鏈 B 重放該交易,可能導致兩條鏈上的資產都被轉移。關鍵防護措施是使用支援 chainId 驗證的錢包,並於跨鏈操作時格外謹慎。
Gate 等中心化交易所具備多重安全機制,使用者於平台內交易時幾乎不會遇到重放攻擊風險。主要風險發生於使用自我託管錢包進行跨鏈轉帳時。Gate 的現貨及衍生品交易,平台風控可保障帳戶安全。
重大生態變動(如鏈合併或分岔)確實提升重放攻擊風險。但專案方通常會提前採取保護措施,如更新 chainId。使用者應於過渡期間等待官方公告後再進行跨鏈操作,避免成為攻擊目標。
私鑰洩漏本身已是重大安全事件。重放攻擊會進一步加劇損失,攻擊者不僅可於一條鏈上轉移資產,還能在多條鏈上重放交易,可能導致所有相關資產被清空。唯一補救方法是立即將資金轉移至新錢包。
EIP-155 引入 chainId 機制,讓每筆交易都攜帶唯一網路標識,防止於其他鏈上執行。現代以太坊及相容鏈均已採納此標準,絕大多數重放攻擊已不可行。使用者選擇支援 EIP-155 的錢包是最簡單的防護方式。


