從18路諸侯討董卓,談如何對抗51%攻擊
一、何為51%攻擊
談到比特幣的風險,就不能不談著名的51%攻擊。51%攻擊是指控制了全網過半的算力後,通過重新計算已確認的區塊來造成雙花的行為。比如有使用者在使用比特幣進行一筆交易後,馬上動用51%以上的算力在新挖出的區塊中不記錄這筆交易,那就能把已經支付的比特幣拿回來了。
在PoW共識機制下,以比特幣為首,51%攻擊威脅會一直存在。目前,比特幣全網絕大多數算力都掌握在少數幾家礦池受手裡,比特幣並不是絕對安全,理論上說,51%攻擊威脅一直都存在。之所以到現在比特幣一直在安全執行,是因為大型礦池在發動51%攻擊後,會重創比特幣幣值,這些持有最多比特幣的礦池會受到最大的負面影響。對他們來說,持有比特幣的收益遠遠高於將比特幣擊潰,任何一個理智的人都不會這麼做,除非他是個瘋子。
除了PoW,我們知道還有其他的共識機制。如PoS,同樣存在51%攻擊的可能,由於PoS直接在創世區塊內就寫明瞭股權證明,主要由股東自己來保證安全,少了算力保證這一步,其安全性尚且比不上PoW機制;DPoS機制(委託權益證明)安全性甚至只由少數關鍵節點來保證;至於拜占庭機制,其容錯率更低,只要有33%以上的節點不可信就一籌莫展了。
二、18路諸侯,忠臣沒過半
讀過三國演義的朋友都知道,十八路諸侯討伐董卓是故事開端的一出重頭戲。因為漢末朝廷無能,西涼軍閥董卓進京,架空皇帝,荒淫無道,各地實力派紛紛起兵,組成聯軍對董卓進行征討。彼時董卓勢力很大,單一諸侯與之作戰都沒有勝算,只有大家聯合起來才有希望將其打敗。這時候,18路諸侯可以看做18個節點,忠誠漢室,勇敢作戰的是“好”節點,心懷鬼胎,畏敵不前的則是“壞”節點。
我們知道,18路諸侯兵力並不相等,從數千到數萬不等,大家公推袁紹作為盟主。在後來的作戰中,諸侯中的孫堅一度和袁紹,袁術等人起了糾紛,幾乎大打出手。如果把兵力近似理解為算力,把諸侯身份看作是股權證明,把糾紛理解為好壞節點之爭。那18路諸侯討伐董卓之戰,幾乎成為了PoW+PoS+拜占庭容錯的超級混合共識機制之爭了,倘若大多數都是好節點,將足以迫使壞節點一同進兵。遺憾的是,中間只有曹操一個好節點,數量實在是太少了。在曹操被董卓擊敗之後,最終討伐軍四分五裂,陷入長期的內戰中。
51%攻擊就像一把達摩克利斯之劍,高懸在很多區塊鏈應用頭上。儘管比特幣可以依靠高幣價來保證自身的安全,但是其他的小幣種可就沒這麼幸運了,此前,比特幣的分叉幣比特幣黃金(BTG)就遭遇了51%攻擊,BTG尚且不能倖免,何況那些更小的幣種呢?這就是很多山寨幣不可信的一個主要原因。
三、有解決的辦法嗎
那麼,有沒有什麼辦法能夠避免51%攻擊呢?或者如何才能大大提高攻擊閾值呢?可以看到,上面無論哪種共識機制本質上都是通過依靠惡意的節點沒有超過共識機制的抗攻擊數,來保證不影響正確的共識結果。這種做法體現了完全的去中心化精神,但換言之,他們都沒有對節點“質量”判斷的能力,無法選拔出高質量的節點作為代表達成共識。我們便可以從選拔高質量節點這裡入手。
這個不難理解。好比將軍帶兵打仗,一般的共識機制是隨機徵召來一批人,如果由老人小孩女人甚至病人數量過半,這樣組成的軍隊自然要打敗仗。倘若能夠選擇年輕力壯,訓練有素,士氣高昂的士兵,哪怕人數少些,但這樣的軍隊才是王牌軍。
這裡再引入一個概念,叫做小世界網路。我們知道,為數眾多的節點與節點之間連邊數構成了網路。網路的規模可以由網路平均路徑長度和網路群聚係數這兩個引數來度量,網路平均路徑長度指的是網路中任意兩個節點最短距離的平均值,網路群聚係數指的是這個節點與所有鄰居節點之間的實際連邊數除以這些鄰居節點之間可能出現的最大連邊數。而小世界網路指的就是平均路徑長度較短,而網路群聚係數較大的網路。
這裡群聚係數可能不是很好理解,我們舉一個例子。曾經火爆一時的人人網,便成功運用到了類似小世界網路的理念。通過人人網,我們常常會驚奇的發現,自己小學的同學,竟然與自己私交甚篤的朋友也是朋友;在校園裡擦肩而過的美女,竟然是與自己天天逃課上網小夥伴的妹妹…我們可以這樣理解,網路群聚係數與朋友圈子的重合度正相關,網路群聚係數越高,說明兩個人朋友圈子的重合度越高。
四、值得信任的統帥
我們知道,小世界網路理念具有極強的現實意義。社會學上的同步問題,傳染病在人群中的流行問題,謠言在人際社會中的擴散問題,都是小世界網路的傳播案例。通過對小世界網路的研究,我們發現,小世界網路能夠節點間實現信任傳遞,傳遞效果與小世界網路規模動態,連邊數等網路結構引數有關,這些引數對小世界網路的傳播規律有著深刻的影響。
我們可以運用小世界網路理念,通過信任傳遞,僅選取少數優質節點作為代表來達成共識,這樣大大提高了系統的安全可信性,足以突破傳統區塊鏈51%攻擊的安全上限,參與共識節點數量減少了,也實現了效率的提升。
這是什麼意思呢?我們知道,效率往往與數量成反比,參與驗證的節點數量越多,耗時越長,效率越低。而且由於諸侯數量較多,倘若有過半的諸侯懷有私心,勢必造成任務的流產。事實上也是,18路諸侯終日宴飲開會,卻始終形不成作戰共識。試想,如果能在18路諸侯中選出少數幾個“最忠誠於大漢”的人形成指揮部來進行決策,而非選出“四世三公”家庭條件最好的袁紹作為盟主,這樣,即便過半的諸侯並非完全效忠於朝廷,也必須服從指揮部,這樣安全性大大提升了,討伐董卓的效果應當會更好。
五、防止渾水摸魚
那麼,問題來了。如何才能甄別出誰才是“最忠誠於大漢”的人呢?俗話說:畫虎畫皮難畫骨,知人知面不知心。沒有一個奸臣會把“奸臣”倆字寫在臉上,倘若選出的代表是“一點也不忠誠於大漢”的人,那討伐軍也不用打仗了,就地解散算了。
在Trias提出的異構共識演算法(HCGraph)中,通過利用可信執行環境 TEE(Trusted Execution Environment)等可信計算技術,對小世界網路中節點質量好壞程度的判斷,僅選取少數優質節點作為代表以達成共識,那麼這個過程是如何實現的呢?
我們知道,單一TEE技術對技術提供方存在著很強的依賴性,如IntelSGX技術便受到Intel公司的中心化控制,公司做出任何調整對會對Intel SGX產生巨大影響。Trias首次實現了對TEE技術(包括Intel SGX,IntelTXT, ARM TrustZone, TCG TPM, 國標TCM, 國標TPCM等)的全支援,消除了對單一TEE技術的依賴。
在Trias網路中,每一個網路節點都會在某個時間內向周邊的鄰接節點發起證實的操作,這樣它就能獲得一個本地的信任向量,通過歸併這些本地向量便可以獲取本地的信任關係,考慮到真實網路中小世界網路的特性,通過這種方法往往可以獲取到一個比較完整的網路互信關係。
每一個節點都有傳播和驗證兩個功能,他們既可以把自己的可信狀態傳播出去,又能夠驗證其他節點的可信狀態。通過與臨近節點的認證關係,他們之間便有了信任和不信任這兩種關係,通過確定其與鄰接節點連線的信任強度值,強度越高,說明節點的可信度越高。據試驗資料統計,每一個節點,想要執行非法操作而不被發現,都需要超過90%的不良節點與其同謀,這是接近不可能的事。
六、信任,需要時時檢驗
另外,值得注意的是,這種信任關係並非一成不變的,信任也好,不信任也好,隨著時間的關係都會逐漸變淡,這種關係是處在反覆的驗證中,以確保隨時都能選拔出最可靠的小世界網路中的節點。
對應到大漢朝就是,從大臣選拔開始,就不拘泥於單個門閥貴族(單個TEE),而是面向全體有能力的人(所有TEE),(科舉制度優於九品中正制,可見一斑)。只有可信的人才能入朝為官。從第一步就減少了奸人亂政的可能性。此後,每一位大臣始終都處在不斷的被周圍人驗證的狀態,驗證其是否對朝廷足夠忠誠,驗證其是夠足夠文韜武略,驗證其是否一直盡職盡責,這個驗證的過程並非一次性的,而是一直在進行中,一旦某個大臣有不軌的舉動,都會被辨識並剔除。
這樣就好比每一個大臣都隨時有一個打分,試想,如果朝廷突然出現董卓這樣的奸臣擅政,所有諸侯自動圍繞在幾個分數最高的大臣身邊,由他們發號施令勤王討逆,由於這幾個人都是長期以來被大家公認為最可靠的人,其忠誠,其能力,其威望,各方面都無可指摘,自然最為安全,而且效率高高。