時間:2023-06-13|瀏覽:276
加密貓Kitty 2022-05-02 11:52 重慶關注
針對所有的支付系統,有一種攻擊方式叫作“雙花攻擊”。所謂雙花攻擊就是指一筆資金被花費多次,攻擊者先將資金轉出,獲得收益后通過攻擊的手段撤銷該筆轉賬,讓資金最長鏈原則
剛才我們說誰先算出答案誰負責打包區塊,那如果有兩個節點同時做出了同一個區塊的答案該怎么辦呢?為了解決這個問題,比特幣系統設計了一個特殊的機制,叫作最長鏈原則。
現在假設有兩個節點A和B同時計算出了區塊N的答案,那么他們就會同時把自己的答案向外廣播。由于網絡傳輸的問題,離節點A比較近的節點就會先收到A的答案,驗證后發現A的結果是正確的,然后就會在A的基礎上繼續計算區塊N+1的答案。離節點B比較近的節點會優先收到B的答案,驗證后發現B的結果也是正確的,然后就會在B的基礎上繼續計算區塊N+1的答案。此時區塊鏈有兩個尾巴,分別是A打包的區塊和B打包的區塊,我們把這種情況叫作區塊鏈分叉。但是由于區塊答案的計算量很大,下一個區塊幾乎不會同時被計算出來。
此時如果區塊N+1的答案是在A的基礎上計算出來的,那么A的這個分叉就要長一些,在B的基礎上計算區塊N+1答案的節點就會停止作答,而是在新區塊的基礎上開始計算區塊N+2的答案。此時所有節點都回到了A的那個分叉上繼續向下計算,B之前計算出來的區塊N就被廢棄了。通過上面的描述我們可以看出,比特幣的這條鏈是有可能分叉的,分叉以后會以最長的鏈為準,那么在較短的分叉上的區塊就被廢棄了。這不正為我們攻擊比特幣系統帶來了可能性嗎!
對比特幣發起攻擊
你可能已經想到了,既然比特幣系統只認最長的那條鏈,我們是不是可以通過這樣的方式對比特幣進行雙花攻擊:
首先發起一筆正常的比特幣轉賬交易,用來和對方交換其他的東西。
交易在區塊N中被打包后,對方就收到了你的轉賬,然后將東西給你。
你在得到自己想要的東西后,開始收買節點重新創造一個區塊N,把你之前發的轉賬交易刪除掉,此時你成功地將比特幣進行了分叉。
由于比特幣系統只認最長鏈,所以你收買節點一直在你的分叉上繼續工作,直到讓你的分叉的區塊長度超過正常區塊的長度,那么系統中所有節點就會在你的分叉上繼續工作。
包含你轉賬的區塊N及其后面一直到N+n的區塊都被你的新分叉廢棄了,你的分叉成為了主鏈,在這條鏈上沒有你的轉賬記錄。
至此,你之前轉出的比特幣還在你的賬戶上,并且得到了你想要的東西,所以你的攻擊成功了。
比特幣中的博弈論
對比特幣的攻擊真的這么簡單嗎?答案當然是否定的!雖然我們說可以通過上述方法對比特幣發起