兩筆比特幣交易可能有相同 TXID 嗎?

兩筆比特幣交易可能有相同 TXID 嗎?的文章封面插畫

電腦常用雜湊值替檔案製作指紋,比特幣也用一串稱為 TXID 的值識別交易。既然 TXID 長度有限,而可能出現的交易內容近乎無窮,理論上終究會有不同內容落到同一串結果。那麼,兩筆比特幣交易會不會因此被網路認錯?

這個問題容易混合兩種情況。完全相同的交易資料經過同一套計算,本來就會得到相同 TXID;兩份不同資料卻算出同值,才叫雜湊碰撞。前者在重新廣播交易時很平常,後者則牽涉比特幣所依賴的密碼學安全假設。

因此,TXID 適合被理解為極難偽造衝突的資料指紋,而非數學保證永不重複的流水號。比特幣的實際安全性來自碰撞在現有計算能力下難以製造,加上全節點仍會核對完整交易與目前可花費狀態,不會只看一串名稱便接受付款。

相同資料重送,仍是同一筆交易

一筆交易會列出要花費的 UTXO、新建立的輸出、金額與其他欄位。這些資料依規則序列化後,經過兩次 SHA-256 雜湊,形成一般所說的 TXID。輸入與輸出完全相同、位元排列也完全相同時,結果自然相同。

所以,同一份已簽署資料被錢包或節點再次廣播,不會憑空變成第二次付款。它仍引用同一組輸入、建立同一組輸出;若交易已經進入有效區塊,那些輸入便已花費,重送副本不會讓帳本再扣一次。

反過來說,只要改動會納入 TXID 計算的內容,例如收款條件、金額或輸入,通常就會得到完全不同的結果。隔離見證交易另有涵蓋見證資料的 wtxid,這是識別範圍不同,不能理解成同一筆交易任意擁有兩個互相替代的名稱。

不同內容同值,才是密碼學碰撞

TXID 有固定的 256 位元空間,所有可能交易卻更多,因此從純數學上說,碰撞必然存在。關鍵在於能否在現實中找到或刻意製造。對設計良好的 256 位元雜湊函數,尋找任意碰撞所需工作量約落在 128 位元安全等級,遠超目前可行範圍。

這裡的「極難」不等於邏輯上的零機率。若有人真的能有效製造 SHA-256 碰撞,影響也不只是一個瀏覽器顯示錯誤:後續交易用 TXID 加輸出位置引用資產,區塊也用交易雜湊整理承諾,許多依賴內容指紋的機制都必須重新評估。

不過,隨機遇到碰撞與攻擊者針對特定交易製造可利用衝突,難度也不完全相同。安全分析關心的是攻擊者能否控制兩份資料、讓其中一份通過簽章與共識規則,並在正確時機取代另一份;看到兩串字元一樣,並不足以證明這整條攻擊路徑成立。

歷史上的重複 TXID 不等於雜湊被破解

早期比特幣曾容許內容完全相同的特殊挖礦交易出現在不同區塊,因此產生重複 TXID。那是相同序列化資料再次出現,並非兩份不同內容撞出同一雜湊。後續規則限制會覆蓋尚未花費輸出的重複交易,而區塊高度也被放入這類新幣交易的資料中,使相同內容更難再次形成。

這段歷史提醒我們,識別碼是否重複還取決於資料如何建立,以及協議怎麼處理重複內容。密碼學指紋負責讓不同資料幾乎不可能被刻意偽裝成同值;共識規則則處理一份交易能否在特定帳本狀態中成立。兩層功能彼此配合,沒有互相取代。

TXID 相同時,仍要回到完整內容與狀態

日常核對付款時,實務上幾乎不必擔心隨機碰撞。更常見的風險是把真實 TXID 當成付款已完成、沒有核對輸出是否付給正確地址,或忽略它尚未取得足夠交易確認。這些錯誤不需要破解任何雜湊就會發生。

若系統真的遇到相同 TXID 的異常資料,也不應只靠資料庫鍵值猜測。它需要比對完整序列化交易、所在區塊、輸出位置與目前有效鏈狀態,並確認軟體是否依現行規則處理。名稱是索引入口,完整資料和驗證結果才決定它代表什麼。

所以,兩份完全相同的比特幣交易資料會有同一個 TXID;兩份不同資料在數學上也可能碰撞,但現有密碼學假設讓刻意找到這種情況極不實際。把「同一資料重送」、「歷史上的相同內容重現」與「不同內容的雜湊碰撞」分開,就能理解 TXID 為何足以支撐日常識別,也看清它不是脫離完整交易與共識驗證的絕對唯一證書。