Transactions
什麼是芬尼攻擊?
什麼是芬尼攻擊?解釋其目的、可能的先決條件、如何執行攻擊以及“Finney 攻擊”名稱的由來的額外要點。
Finney 攻擊以Hal Finney的名字命名,他在此評論中提出了這一建議。(Hal 恰好是比特幣交易的第一個接收者,也是第一個對比特幣原始碼發布發表評論的人。)
這是一種雙花攻擊,具有以下特點:
- 它僅在商家接受未經確認的交易時才有效。
- 但是,如果商家等待幾秒鐘以驗證網路中的每個人都同意他已獲得付款,它仍然有效。
- 它要求攻擊者探勘和控制他的塊的內容;然而,理論上他可以用任何算力來做到這一點,特別是遠低於網路算力的 50%。
它進行如下:
- 攻擊者正常探勘方塊;在他試圖找到的區塊中,他包含了一筆交易,該交易將他的一些硬幣發回給自己,而沒有廣播該交易。
- 當他找到一個區塊時,他不會廣播它;相反,他將相同的硬幣發送給商人以獲得某些商品或服務。
- 在商戶接受支付並不可逆轉地提供服務後,攻擊者廣播他的區塊;包含在此區塊中的將硬幣發送給自己的交易將覆蓋未確認的向商家付款。
如果從找到區塊到攻擊者付款並被商家接受的時間是t,平均找到一個區塊的時間是T,那麼在這個網路中,有t/T的機率會在網路上找到另一個區塊時間; 在這種情況下,攻擊將失敗,攻擊者將失去 B 的區塊獎勵。
這意味著嘗試攻擊的平均成本約為 (t/T) * B;根據經驗,商家應該至少等待 t=V*T/B(V 是交易的價值),以確保嘗試對他進行這種攻擊是無利可圖的;但這可能還不夠,因為靈活的攻擊者可以使用同一個塊進行多次攻擊,從而可能獲得它們的全部價值。
顯然,攻擊者的雜湊率越低,他進行攻擊的機會就越少。如果攻擊是為了獲得一些非流動性的商品,那麼很難使對這種商品的需求與找到一個區塊相吻合。如果攻擊是為了獲得流動性的東西(例如用比特幣換其他錢),機會是永遠存在的,但商家可能需要一些確認。這使得攻擊在實踐中難以使用。