加密領域的許多人都聽說過“交易延展性”,并且它是“不好的”。但是,什么是“交易延展性”,為什么不好?讓我們快速了解一下。
在像比特幣這樣的加密貨幣中,交易是在用戶之間轉移價值的原子操作。用戶創(chuàng)建事務并將其發(fā)布到網(wǎng)絡。這些交易傳播網(wǎng)絡并最終被挖掘到區(qū)塊鏈中。接收者使用區(qū)塊鏈來確定交易是否得到確認。
在隨著成千上萬筆交易的進行,用戶如何快速識別它們以便能夠區(qū)分它們?如何在不使用某些緩慢的全局注冊表系統(tǒng)的情況下,以一整套相同的方式快速地,唯一地標識全球范圍內的所有斷開連接的用戶的交易?答案很簡單,您可以使用交易的加密hash作為標識符。
加密散列允許任何人僅使用數(shù)據(jù)本身派生任何數(shù)據(jù)的指紋。指紋是唯一的,每次計算都是一樣的。即使更改1位數(shù)據(jù),指紋哈希也會完全更改。
在比特幣中,事務的散列稱為事務的txid,并充當該事務的通用唯一標識符。
很好,那么什么是延展性?
交易可延展性
可延展性是指在不使事務失效的情況下更改事務(TXID)標識符的能力。根據(jù)加密貨幣的不同,有很多方法可以做到這一點。跨所有加密貨幣的通用方式是通過簽名延展性,這是本文的重點。
ECDSA數(shù)字簽名的數(shù)學原理,可以更改簽名,但不會使其失效。雖然這不允許偽造這些簽名,但允許攻擊者更改包含這些簽名的事務的txid,這可能會導致嚴重后果。
可延展性攻擊
假設bob通過一個帶有標識符x的事務向alice支付了一些比特幣,假設在挖掘之前,x被擴展為一個新的標識符x’。alice收到了付款,但bob不知道。既然alice知道bob不知道,她就騙bob再次付款。她重復這一過程,直到bob最終意識到發(fā)生了什么,但這可能為時已晚。在現(xiàn)實世界中,這種攻擊是按以下方式在交易所執(zhí)行的:
在這種情況下,攻擊者:
1.紅色圓圈一女巫Sybil節(jié)點
2.使用女巫Sybil節(jié)點包圍交換節(jié)點(黃色圈)。
3.從交易所提款。
4.提款X離開交易所后,Sybil節(jié)點將提款延展至X‘。
5.X’會傳播到網(wǎng)絡中。
當X‘被挖掘到下一個區(qū)塊時,攻擊者已收到提款X’,但是交易所后端尚未確認收到提款,因為它正在區(qū)塊鏈中尋找X。知道這一點,攻擊者將繼續(xù):
6.要求交易所重復提款,因為“還沒有通過”。
7.沖洗結果并重復提款。
取決于交易所的規(guī)模大小,攻擊者可以采用“寄生策略”,通過這種方式,只需不斷少量體現(xiàn)就可以耗盡交易所。這使攻擊者可以在未發(fā)現(xiàn)的情況下,重復體現(xiàn)直到交易所管理人員發(fā)現(xiàn)為止?;蛘吖粽咭部梢圆捎谩拔聿呗浴?,從而在系統(tǒng)管理員做出響應之前,以高頻率的大筆撤資消耗掉交易所。
無論采用哪種策略,這都是一個問題,加密貨幣架構師都需要去解決可延展性問題。
注意:實際上對于步驟(2)攻擊者無需完全包圍交易所節(jié)點。盡管攻擊成功的可能性較低,但僅需要幾個連接即可執(zhí)行攻擊。包圍得越多,概率越高。
解決可延展性問題
比特幣(BTC)通過引入隔離見證(Segwit)而“解決了”延展性,隔離見證將簽名與TXID計算隔離開來,并用對該簽名的不可更改的哈希承諾來代替它。該散列用作指向簽名的指針,該簽名存儲在另一個數(shù)據(jù)結構中。為了驗證交易簽名,驗證者使用哈希在其他數(shù)據(jù)結構中查找簽名,然后執(zhí)行常規(guī)的ECDSA驗證。這消除了簽名作為交易可延展性的來源,因為它們存儲在交易之外,并且不能將指向簽名的哈希指針進行延展。但是它引入了對包含簽名的其他數(shù)據(jù)結構的依賴性。比特幣的一個小折衷,但意義重大。
雖然Segwit本身并不是一個壞主意,但部署和由此產(chǎn)生的部署政治在比特幣社區(qū)內部引起了分裂。這導致社區(qū)分為比特幣(BTC)和比特幣現(xiàn)金(BCH)。盡管將隔離見證(Segwit)吹捧為主要原因,但潛在的問題更多是與隔離見證的部署有關,而不是技術問題。另外,“永遠不要軟叉,永遠不要硬叉”的政策暗示著1MB塊大小實際上是鎖定的,這對于許多人來說是不可接受的。
反對隔離見證(Segwit)的技術論點更多地與它作為軟叉的無用復雜性有關,而與它作為硬叉的健全性無關。作者認為,Segwit作為軟叉是使比特幣破裂的源頭。然而作為硬叉的Segwit是(并且仍然是)技術上合理的延展性解決方案。
來源: 區(qū)塊鏈研究實驗室