是否可以通過替換 merkle 樹中的 Tx 來創建雙花攻擊?
crypto.SE 上的這個問題描述瞭如何在比特幣網路中避免原像攻擊。
對於第二次原像攻擊:
hash(x) = hash(y)
暗示hash(hash(x)) = hash(hash(y))
所以它不能防止直接的原像攻擊。 比特幣為此建構了一個Merkle 樹
a b c
:hash(hash(hash(a)+hash(b))+hash(hash(c)+hash(c)))
.您可以再次看到,如果有人發現 a
c'
與 具有相同的 SHA-256 雜湊c
,他們可以替換它,最終結果仍然相同。雖然這確實可以提高對第一次原像攻擊的抵抗力,但沒有任何明顯的情況表明這些很重要——攻擊者通常會擁有生成雜湊的明文。(考慮到 ECDSA 操作在那裡,對地址的原像攻擊似乎有些牽強。)
c'
假設使用相同的雜湊生成兩個離線交易。假設創建每個 Tx 需要幾個月/幾年的時間。然後:
- 攻擊者向商家創建 Tx
- 攻擊者創建第二個 Tx,其輸入與 #1 相同。然後重新生成一個私鑰,直到 Tx 雜湊等於 c’ 的雜湊。
題
- 比特幣網路如何響應這些具有相同雜湊的競爭交易?
- 如果交易是非標準的,因此不會在礦工之間複製,結果會有什麼不同?
您還應該知道,查找 SHA256 衝突(兩個不同字節數組的相同雜湊)是一項非常複雜的任務。礦工每秒花費 terahashes 來尋找小於目標的雜湊值。精確匹配將很難找到。
此外,此任務中的攻擊者必須是具有足夠能力解決和廣播要包含在主鏈中的[特殊]塊的礦工。
簡而言之,我可以說這項任務需要如此多的算力——所以如果有人有足夠的算力,他可能會執行一個不太複雜的 51% 攻擊,而不是這個。
即使沒有關於默克爾樹的完整討論,擁有兩個具有相同雜湊的交易也可能會創建一個沒有人工干預就無法解決的分叉。
由於交易也通過它們在協議上的散列來標識,因此客戶端將獲得
t
或t'
,hash(t) = hash(t')
這意味著雖然節點認為他們接受了相同的交易,但他們實際上會同意兩個相互衝突的不同交易。當交易試圖索取由t
. 由於這些輸出是根據您接受的兩個中的哪一個創建的,t
而不是創建的t'
,因此後續交易將是有效的或無效的,因此問題會從一個交易傳播到多個交易。在網路的一個部分有效而在另一部分無效的交易將導致區塊鏈分叉,這可能會持續存在,可能需要人工干預。
回到你所說的場景:商人會被騙走他的錢。他會相信這些資金是可以使用的,但是他嘗試使用這些輸出進行的每筆交易都將被標記為無效,根據您的情況,他得到
t
了大部分採礦權t'
,因此t'
將進入鏈中。話雖如此,SHA-256 被認為是抗衝突的,並且發現與特定雜湊衝突的機會需要大量嘗試。即使找到任何兩個輸入之間的衝突也非常困難,並且是許多研究挑戰的主題。所以,短期內不太可能發生。