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