比特幣51%的攻擊問題是最困難的挑戰(zhàn)之一,也是最有價(jià)值的解決方案之一。比特幣白皮書告訴我們,“只要誠實(shí)的節(jié)點(diǎn)共同控制的CPU功率大于任何合作的攻擊節(jié)點(diǎn)組,系統(tǒng)就是安全的。”
但我們能做得更好嗎?
比特幣是一種經(jīng)濟(jì)系統(tǒng)。在談到可能的攻擊者時(shí),再次提到白皮書:“不難發(fā)現(xiàn),遵守規(guī)則比破壞體系和自己財(cái)富的有效性更有利可圖,這些規(guī)則讓他獲得的新代幣比其他人加起來還要多。”
然而,我們知道,并非所有參與者都是理性的。這些參與者有可能是國家資助的實(shí)體,擁有幾乎無限的資金,或者是愿意投資/損失巨額資金以獲得某種戰(zhàn)略或其他利益的公司。
如果我們能夠創(chuàng)造一種方式,讓誠實(shí)的礦商達(dá)成分布式共識(shí),即使面對(duì)惡意的多數(shù)派,也能擴(kuò)大賬簿,這將是比特幣的一個(gè)巨大進(jìn)步。
礦業(yè)壟斷的危險(xiǎn)
比特幣的目的是提供一個(gè)分布式賬本,支持未經(jīng)許可的個(gè)人對(duì)個(gè)人(p2p)現(xiàn)金。51%的攻擊是危險(xiǎn)的,不僅因?yàn)樗鼤?huì)造成重復(fù)消費(fèi),導(dǎo)致商家賠錢,還因?yàn)樗梢源輾д麄€(gè)系統(tǒng)。
由于大部分持續(xù)的hashpower,攻擊者可以連續(xù)(或周期性)調(diào)用區(qū)塊鏈重組(“reorg”),從而破壞網(wǎng)絡(luò)的可靠性。在極端情況下,它們可以永遠(yuǎn)挖掘空塊,并只在自己的塊上擴(kuò)展鏈,將所有其他塊排除在外,導(dǎo)致鏈完全不可用。
以前解決這個(gè)問題的方法
Gavin Andresen提出,我們可以防止惡意的礦商發(fā)布需要包含優(yōu)先事務(wù)的共識(shí)規(guī)則的空塊。但這似乎是一個(gè)不完美的解決方案。資金充足的攻擊者不僅肯定能夠創(chuàng)建自己的事務(wù),而且這通常也不能防止重新組織攻擊。
ZenCash提出了一種針對(duì)延遲塊的懲罰系統(tǒng),在該系統(tǒng)中,攻擊者的塊的工作證明被一個(gè)懲罰因子所減少。雖然這類系統(tǒng)可以阻止某些攻擊,但它們也有缺點(diǎn)。它們可能仍然允許深度重組,這會(huì)損害0-conf的可靠性。攻擊者還可以通過同步的塊攻擊將此方案翻轉(zhuǎn)到誠實(shí)的挖掘者身上。
在這種攻擊中,惡意挖掘者會(huì)從相同的塊高度秘密地挖掘2條有效鏈,并從不同的節(jié)點(diǎn)上同時(shí)廣播它們。一些誠實(shí)的礦工會(huì)先得到A區(qū),然后相信B區(qū)就是攻擊點(diǎn),而其他人會(huì)看到相反的情況。兩組人會(huì)互相懲罰,可能永遠(yuǎn)不會(huì)收斂。
如果懲罰只適用于一定數(shù)量的塊,那么大多數(shù)攻擊者可以繼續(xù)挖掘,直到它們?cè)俅螕碛凶铋L(zhǎng)的鏈。
無效塊
下一個(gè)合乎邏輯的方法是允許礦商簡(jiǎn)單地使看起來可疑的無效塊,然后進(jìn)行徹底的突破。當(dāng)一個(gè)塊無效時(shí),從該塊延伸出來的鏈?zhǔn)菬o效的。這是一次徹底的決裂。
然而,你如何確定什么是可疑的呢?
閾值悖論
識(shí)別惡意的重組塊的一個(gè)簡(jiǎn)單嘗試可能是設(shè)置一個(gè)時(shí)間限制,但正如我們將發(fā)現(xiàn)的那樣,這是有問題的。
例如,如果鏈的頂端塊高度為100,并且進(jìn)來了一個(gè)高度為100的重復(fù)塊,如果節(jié)點(diǎn)在相同高度的現(xiàn)有塊之后的N秒內(nèi)觀察到該塊出現(xiàn),我們可能會(huì)說該塊是無效的。
但是N應(yīng)該是多少呢?假設(shè)沒有網(wǎng)絡(luò)或傳播問題,大多數(shù)情況下塊標(biāo)頭可以在大約一秒鐘內(nèi)廣播到大多數(shù)節(jié)點(diǎn)。假設(shè)我們選擇一個(gè)更大的值,例如15秒。那么也就是說任何在15秒后出現(xiàn)的內(nèi)容都是無效的。
這聽起來很簡(jiǎn)單,但是如果一個(gè)塊恰好在15秒處出現(xiàn)呢?有些節(jié)點(diǎn)可能比其他節(jié)點(diǎn)早一點(diǎn)或晚一點(diǎn)獲得它,因此一半的網(wǎng)絡(luò)可能認(rèn)為它是有效的,一半可能認(rèn)為它是無效的。
這是一個(gè)矛盾的方面,因?yàn)闊o論你設(shè)置多大,這種情況仍然存在,當(dāng)一個(gè)塊正好落在所選的時(shí)間標(biāo)記上時(shí),它可能意外地分割鏈或被有意利用。直觀上看,節(jié)點(diǎn)應(yīng)該能夠使用一些常識(shí)性設(shè)置來判斷塊是否來得太晚。
這種悖論可以用這樣一個(gè)事實(shí)來解釋,即設(shè)置會(huì)創(chuàng)建一個(gè)邊界或“斷層線”。
重組塊深度(“自動(dòng)檢查點(diǎn)”)
下一個(gè)合乎邏輯的問題是,我們能否確定一個(gè)塊的深度,超過了這個(gè)深度,就禁止重新組織。例如,任何深度超過4個(gè)塊都可能是無效的。但這也遇到了閾值計(jì)時(shí)問題,因?yàn)槿绻麌L試重組3塊,而另一個(gè)挖掘器也在廣播第4塊,那么一些節(jié)點(diǎn)將認(rèn)為它是有效的,而另一些節(jié)點(diǎn)將認(rèn)為它是無效的,從而再次導(dǎo)致鏈分裂。
中本共識(shí)和拜占庭將軍的問題
中本共識(shí)(Nakamoto Consensus)是一個(gè)術(shù)語,用來描述比特幣使用最高的工作證明鏈來識(shí)別正確版本的賬簿。它總有一個(gè)獨(dú)特的、可衡量的、無可爭(zhēng)議的數(shù)字來使各塊達(dá)成共識(shí)。
此外,它還具有確定性,使得非挖掘節(jié)點(diǎn)可以簡(jiǎn)單且容易地遵循一致的決策。
拜占庭將軍問題描述了一群將軍,他們想要進(jìn)攻一個(gè)城市,但是他們沒有一個(gè)簡(jiǎn)單的方法來協(xié)調(diào)他們的進(jìn)攻。在比特幣中,我們可能會(huì)把每一個(gè)已解決的區(qū)塊視為一個(gè)“將軍”,其他部隊(duì)可以效仿。因此,從事這項(xiàng)工作的礦工就被指定為有機(jī)會(huì)扮演將軍角色的人。
我們開始意識(shí)到將工作證明作為分布式時(shí)間戳機(jī)制使用的天才,以及創(chuàng)建不依賴于工作量證明、權(quán)益證明或其他區(qū)塊鏈協(xié)議。
尋找線索
如果區(qū)塊鏈工作的基本思想是,挖掘人員一次解決一個(gè)塊并擴(kuò)展分類,那么我們希望識(shí)別并懲罰繞過該系統(tǒng)的不良行為。
比特幣需要定期處理大量重組塊,這種說法多少有些荒誕。大多數(shù)孤立塊來自同一個(gè)社區(qū)。偶爾會(huì)出現(xiàn)一個(gè)2塊孤立鏈。這幾乎是聞所未聞的。更多的重組塊只會(huì)因?yàn)檐浖e(cuò)誤而發(fā)生,而不是因?yàn)檎5木W(wǎng)絡(luò)活動(dòng)而發(fā)生。
這些知識(shí)可以幫助我們處理大小無界的重組快;我們只需要能夠在實(shí)際范圍內(nèi)處理它們即可。
另一個(gè)重要的考慮因素是,嚴(yán)格使用最長(zhǎng)鏈規(guī)則允許新節(jié)點(diǎn)準(zhǔn)確地看到發(fā)生了什么,并知道應(yīng)該遵循哪條鏈。他們不需要知道重組快、后期塊等等。因此,如果允許在線節(jié)點(diǎn)就正確的誠實(shí)鏈達(dá)成一致,那么放棄這方面可能是一種可以接受的折衷方案。
非完全分布式解決方案
如果我們?cè)O(shè)想一個(gè)簡(jiǎn)單的解決方案,不允許重組超過6個(gè)塊,那么我們知道,與新塊同時(shí)出現(xiàn)的6個(gè)塊重組可以拆分鏈。不過,細(xì)心的礦商很容易發(fā)現(xiàn)并重新設(shè)定這種分裂。
這需要人為干預(yù),或許還需要誠實(shí)的礦工之間的協(xié)調(diào)。因?yàn)樗皇峭耆詣?dòng)化的東西。
這可以作為一個(gè)實(shí)際問題的解決方案,但它不是一個(gè)完全分布式的解決方案。如果當(dāng)前存在一組相互信任的誠實(shí)池,那么它是有效的。但在一個(gè)沒有人能確定自己可以信任誰的環(huán)境中,這種情況在全球范圍內(nèi)是行不通的。
另一個(gè)非分布式解決方案是允許一組受信任池(可能是5個(gè)簽名中的3個(gè))使塊無效。這可以通過節(jié)點(diǎn)觀察重新組織發(fā)生的方式來實(shí)現(xiàn); 。
這些都是目前的想法。最終,我們愛需要繼續(xù)尋找完全分布式的解決方案。
比特幣ABC 0.18.5補(bǔ)丁
比特幣現(xiàn)金客戶ABC 0.18.5使用懲罰和最大重組深度,這樣一來,攻擊既昂貴又困難。這不是一個(gè)完美的解決方案。如果交易所需要至少10個(gè)以上重組塊的確認(rèn),破壞網(wǎng)絡(luò)將比沒有這個(gè)補(bǔ)丁更難。
這不應(yīng)該是一個(gè)永久的解決辦法,我們應(yīng)該不斷改進(jìn)它。
跳出思維定勢(shì)
很明顯,51%的攻擊不是一個(gè)容易解決的問題。但是,我們應(yīng)打破常規(guī)的思維,來實(shí)現(xiàn)突破。
上面我們討論了51%攻擊的問題,以及這個(gè)為什么很難解決。在這里我想提出一個(gè)可能的解決辦法。(免責(zé)聲明:我沒有花太多時(shí)間來分析這個(gè)問題,所以可能有一些明顯的大缺陷。)
這個(gè)解決方案非常簡(jiǎn)單。節(jié)點(diǎn)將懲罰任何基于延遲嘗試重新組織的鏈。以前已經(jīng)提出了延遲懲罰和延遲證明工作方案。
從節(jié)點(diǎn)看到重組塊的時(shí)間到節(jié)點(diǎn)再到相同塊深度的前一個(gè)塊的時(shí)間,每秒鐘的時(shí)間將受到0.1%的懲罰。
懲罰適用于從重組塊開始的整個(gè)鏈。
關(guān)于時(shí)間的平滑衰減就是這和解決方案的魔力所在。
未受影響的正常孤立塊
目前,在正常情況下,當(dāng)同時(shí)發(fā)現(xiàn)2個(gè)塊時(shí),每個(gè)節(jié)點(diǎn)都會(huì)遵守第一個(gè)節(jié)點(diǎn)看到的規(guī)則。在這種情況下,不會(huì)有多大變化。例如,如果一個(gè)節(jié)點(diǎn)在5秒后獲得塊,那么該鏈的代價(jià)是0.5%。當(dāng)在任何一條鏈上發(fā)現(xiàn)下一個(gè)塊時(shí),它仍然是決定性的。
防止高深度的重組塊
現(xiàn)在讓我們進(jìn)入另一個(gè)極端:假設(shè)攻擊者等待10分鐘并嘗試重組塊。“很明顯惡這是惡意重組。在這種情況下,懲罰將變成60%。這意味著他們需要重組3個(gè)區(qū)塊來克服1個(gè)區(qū)塊,或者重組5-6個(gè)區(qū)塊來克服2個(gè)區(qū)塊。
如果重組攻擊發(fā)生在1000秒,那么它的權(quán)重就為0%。其他在999秒內(nèi)看到它的節(jié)點(diǎn)會(huì)給它一個(gè)非常小的重量,所以它很容易被超越。
中間地帶?
在20%,30%,50%的情況下,也會(huì)受到一些處罰。這可能會(huì)創(chuàng)建一個(gè)競(jìng)爭(zhēng)的情況,但只有在重組深度較淺的情況下才會(huì)發(fā)生。競(jìng)爭(zhēng)很快就會(huì)結(jié)束,同樣重要的是,攻擊者不能欺騙誠實(shí)的節(jié)點(diǎn),讓它們互相攻擊,因?yàn)樗鼈儠?huì)看到類似的懲罰。
Finalty
最后,我們回到中本共識(shí)。當(dāng)比賽結(jié)束,并且最長(zhǎng)的工作鏈證明最終超過攻擊者鏈(不管多長(zhǎng)時(shí)間),它將以最純粹的意義最終確定下來。
重組證明
懲罰是通過對(duì)延遲的實(shí)時(shí)分析來應(yīng)用的,但是重復(fù)的鏈工作可以通過發(fā)布(例如到塊資源管理器)重復(fù)的工作塊來證明。
接收塊的時(shí)間將被節(jié)點(diǎn)和礦工看到,也可以被發(fā)布。同步的節(jié)點(diǎn)可以識(shí)別競(jìng)爭(zhēng)條件,并等待它被解決。
評(píng)論