假設bob透過一個帶有識別符號x的事務向alice支付了一些比特幣,假設在挖掘之前,x被擴充套件為一個新的識別符號x’。alice收到了付款,但bob不知道。既然alice知道bob不知道,她就騙bob再次付款。她重複這一過程,直到bob最終意識到發生了什麼,但這可能為時已晚。在現實世界中,這種攻擊是按以下方式在交易所執行的:
在這種情況下,攻擊者:
1.紅色圓圈一女巫Sybil節點
2.使用女巫Sybil節點包圍交換節點(黃色圈)。
3.從交易所提款。
4.提款X離開交易所後,Sybil節點將提款延展至X'。
5.X'會傳播到網路中。
當X'被挖掘到下一個區塊時,攻擊者已收到提款X',但是交易所後端尚未確認收到提款,因為它正在區塊鏈中尋找X。知道這一點,攻擊者將繼續:
6.要求交易所重複提款,因為“還沒有透過”。
7.沖洗結果並重復提款。
取決於交易所的規模大小,攻擊者可以採用“寄生策略”,透過這種方式,只需不斷少量體現就可以耗盡交易所。這使攻擊者可以在未發現的情況下,重複體現直到交易所管理人員發現為止。或者攻擊者也可以採用“吸血鬼策略”,從而在系統管理員做出響應之前,以高頻率的大筆撤資消耗掉交易所。
無論採用哪種策略,這都是一個問題,加密貨幣架構師都需要去解決可延展性問題。
注意:實際上對於步驟(2)攻擊者無需完全包圍交易所節點。儘管攻擊成功的可能性較低,但僅需要幾個連線即可執行攻擊。包圍得越多,概率越高。
解決可延展性問題
比特幣(BTC)透過引入隔離見證(Segwit)而“解決了”延展性,隔離見證將簽名與TXID計算隔離開來,並用對該簽名的不可更改的雜湊承諾來代替它。該雜湊用作指向簽名的指標,該簽名儲存在另一個資料結構中。為了驗證交易簽名,驗證者使用雜湊在其他資料結構中查詢簽名,然後執行常規的ECDSA驗證。這消除了簽名作為交易可延展性的來源,因為它們儲存在交易之外,並且不能將指向簽名的雜湊指標進行延展。但是它引入了對包含簽名的其他資料結構的依賴性。比特幣的一個小折衷,但意義重大。
雖然Segwit本身並不是一個壞主意,但部署和由此產生的部署政治在比特幣社羣內部引起了分裂。這導致社羣分為比特幣(BTC)和比特幣現金(BCH)。儘管將隔離見證(Segwit)吹捧為主要原因,但潛在的問題更多是與隔離見證的部署有關,而不是技術問題。另外,“永遠不要軟叉,永遠不要硬叉”的政策暗示著1MB塊大小實際上是鎖定的,這對於許多人來說是不可接受的。
反對隔離見證(Segwit)的技術論點更多地與它作為軟叉的無用複雜性有關,而與它作為硬叉的健全性無關。作者認為,Segwit作為軟叉是使比特幣破裂的源頭。然而作為硬叉的Segwit是(並且仍然是)技術上合理的延展性解決方案。