<button id="ei02c"><ol id="ei02c"></ol></button>
            1. <div id="ei02c"></div>

                    1. 安基網 首頁 資訊 IT業界 查看內容

                      與黑客斗智斗勇!為了阻止比特幣51%攻擊,技術大神想出一個絕招

                      2019-3-12 02:10| 投稿: xiaotiger |來自: 互聯網


                      免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!

                      摘要: 眾所周知,在區塊鏈中,只有大部分人受利益(挖礦獎勵等)的驅動表現出誠實行為整個區塊鏈才能正常運行,但如果誠實行為獲益低于欺騙行為,就會有人鋌而走險,如果鋌而走險的人占據大多數,整個區塊鏈就會出現各種各 ...
                      文章來源:區塊鏈大本營
                      眾所周知,在區塊鏈中,只有大部分人受利益(挖礦獎勵等)的驅動表現出誠實行為整個區塊鏈才能正常運行,但如果誠實行為獲益低于欺騙行為,就會有人鋌而走險,如果鋌而走險的人占據大多數,整個區塊鏈就會出現各種各樣的問題,最典型的莫過于 51% 算力攻擊。那么問題來了,去中心化實現了權力的下放,而下放后權力又該如何制衡保證不作惡?國外大神Tomaz Kariz受到礦池的啟發,提出在選擇區塊鏈時將區塊鏈中的“諸侯”礦池作為一個影響因素,引入區塊鏈評分機制以及懲罰機制,獎懲結合從而讓51%攻擊的成本更高。那么,礦池與區塊鏈的選擇如何結合?效果又會怎樣?讓我們跟著大神一探究竟!

                      作者 | phyro — Tomaz Kariz; 譯者 | Guoxi; 出品 | 區塊鏈大本營(blockchain_camp)

                      前段時間,以太坊經典( ETC )區塊鏈遭受了51%算力攻擊,這引起了我深深的思考。

                      從理論上來說,我認為 51% 算力攻擊并不是區塊鏈網絡設計的敗筆,但我們是否有辦法讓這些 51% 算力攻擊的攻擊者付出更昂貴的代價?

                      當一個區塊鏈節點客戶端發現同時存在多個區塊鏈時,它必須決定選擇哪個區塊鏈,這時節點客戶端會分別計算每個區塊鏈的評分 chainScore ,然后選擇分數最高的區塊鏈。

                      在PoW共識的區塊鏈中,選擇區塊鏈的規則通常被稱為“最長鏈規則”,其中區塊鏈的評分 chainScore 等于該區塊鏈上完成工作量的總和。這種根據評分來選擇區塊鏈的好處在于它是完全客觀的。

                      一個主觀評分的例子是,區塊鏈節點客戶端對區塊鏈的打分標準不僅根據在該區塊鏈上完成了多少工作量,還考慮到了如果切換到該區塊鏈時將從本地維護的區塊鏈中刪除多少個區塊,即對那些可能需要你更改本地維護區塊鏈的區塊鏈帶有偏見。

                      基于將從本地維護區塊鏈中刪除的區塊數量的主觀區塊鏈評分

                      另一個主觀區塊鏈選擇規則的例子是照常計算區塊鏈評分 chainScore ,但只有在切換到它需要從本地區塊鏈中刪除的區塊數不超過 20 個時才切換到這個具有更高評分的區塊鏈(該規則通常被稱為最大化重組覆蓋,max reorg cap )。

                      這個規則不僅會出現“新節點問題”(如上圖所示),而且即使所有節點都運行著相同版本的客戶端程序,它也可能會導致硬分叉。

                      所以我們要避免主觀地對區塊鏈進行評分,因為這樣做我們的區塊鏈選擇邏輯就會很難解釋,并且即使每個客戶端節點都遵循相同的規則也可能會導致硬分叉。

                      區塊鏈選擇規則

                      以太坊經典使用的區塊鏈選擇規則是選擇完成工作量最多的區塊鏈。假設一個名叫 Bob 的以太坊經典客戶端正在第一次連接以太坊經典網絡,Bob 必須在多個區塊鏈之間做出選擇,不過這并不是問題,他所要做的就是計算每個區塊鏈上完成了多少工作量并選擇完成工作量最多的區塊鏈。

                      即使我們有任意多 Bob 這樣的新入網以太坊經典客戶端,對每個區塊鏈它們都會計算出完全相同的評分 chainScore 。

                      在區塊鏈系統中給定 N 個節點,這 N 個節點構成一個完全圖(每個節點都連接到其他所有節點),區塊鏈選擇規則應具有以下屬性:

                      每個節點都應將同一個區塊鏈視為最佳選擇。

                      區塊鏈選擇規則還應為區塊鏈 C 提供相同的評分 chainScore ,不論任意時間點以及任意高度 H ,這意味著評分 chainScore 應該僅取決我們正在評估的區塊鏈上的數據。

                      這些屬性確保 Bob 和長壽命節點就需要追隨的區塊鏈達成一致,并使它們隨時間的推移逐漸收斂到同一個區塊鏈上。

                      需要注意的是,正如我們上面提到的,當下以太坊經典中評分chainScore最大的區塊鏈是那些完成工作量最多的區塊鏈。

                      區塊鏈挖礦

                      對于單獨挖礦的礦工而言,除非他掌控相當大的哈希算力,否則他不太可能會挖出區塊。

                      礦池就是為了解決這個問題而被發明的,礦池借鑒了“眾人拾柴火焰高”的思想,大量原本單獨挖礦的礦工聚在一起抱團取暖,共同挖礦,共同分享收益,所以即使某些礦工可能都沒有挖出一個區塊,但始終能獲得穩定的工作回報。

                      假設區塊鏈網絡中有多個礦池,它們總共占據網絡中的大部分哈希算力。

                      每一個區塊都包含一個被叫做 coinbase / etherbase 的數值,它用來指代挖出該區塊的礦工,表示應該接收挖礦獎勵的地址。

                      大多數區塊都是由礦池開采的,每個礦池通常都會指定一個用來接收挖礦獎勵的地址。

                      下面是以太坊經典區塊鏈上從高度 7283680 到高度 7283695 開采出的 16 個連續區塊,以及它們接收挖礦獎勵的礦工地址:

                      以太坊經典區塊鏈上高度 7283680 到高度 7283695 的區塊,以及它們接收挖礦獎勵的礦工地址

                      正如預期的那樣,絕大多數區塊都是由以太坊經典網絡中運營的礦池開采出的,其中礦池 Ethermine 開采了 5 個區塊,礦池 MiningPoolHub 開采了 4 個區塊,礦池 NanoPool 開采了 3 個區塊。

                      在灰色的區塊中挖礦獎勵被發送到我不知道所有者是誰的地址,但它們很可能也是礦池。

                      這似乎給了我們一點啟發……

                      利用礦池降低51%攻擊?真的!

                      假設我們有能連續挖出新區塊的礦池,我們應該能經常看到區塊的產出。當攻擊者進行 51% 算力攻擊時,他通常會離線連續挖掘 N 個區塊,然后發布一個比當前共識鏈更長的區塊鏈,從而導致當前共識鏈的重組。

                      攻擊者開采的區塊通常不使用我們過去觀察到的礦池的地址。

                      如果對礦池挖礦的前后不一致性進行懲罰,我們就可以在共識規則大致不變的前提下大大增加攻擊者發動攻擊的成本,從而保護我們免受 51% 算力攻擊。

                      在這里,我們需要先明確一下 51% 算力攻擊是如何發生的:

                      • 使用算力租賃服務(例如 NiceHash )來執行攻擊(假設 NiceHash 并不是礦池)。

                      • 一些礦池暗中勾結執行攻擊。

                      • 上面兩者的結合:礦池暗中勾結+算力租賃服務執行攻擊。

                      • 使用專用集成電路(ASIC)執行攻擊。

                      礦池前后一致性指數

                      區塊鏈選擇規則不僅可以考慮已完成的工作量,還可以考慮礦池的前后一致性。我們可以通過將 chainScore 的定義更改為以下公式來加入礦池的影響:

                      chainScore = parentChain.score +block.PoW_score * PCI

                      其中 parentChain.score 為前序區塊鏈的評分,block.PoW_score 為該區塊鏈所做的工作量, PCI(礦池前后一致性指數,Pools Consistency Index)為介于0和1之間的值。

                      這里的 PCI 表示礦池的前后一致性。讓我們來看一個使用礦池信息來評估區塊鏈“健康”程度的一個實現。

                      在最后 3000 個區塊上使用滑動窗口來衡量工作量前后一致性的示例。

                      chainScore 函數的代碼實現如下所示:

                      滑動窗口礦池前后一致性增量的參考實現

                      當網絡中多個區塊鏈共存時,我們認為最可能成為共識鏈的會是那些礦工在持續挖礦的區塊鏈。這種說法并不是百分百正確,但對于大多數情況都是如此,除非出現掌握超過 51% 哈希算力的礦池叛變的情況

                      這種結合礦池信息的方法可以預測區塊鏈的未來是什么樣的,并懲罰那些惡意行為者,而這些在過去是不可能實現的。當我們對礦池的前后不一致設置非常高的懲罰時,會出現以下兩種情況:

                      1. 網絡中僅存在一個區塊鏈,一些礦池停止挖礦。由于對于所有的礦工而言,他們的 PoW 值都會相應的降低,所以這對礦工來說無關緊要,因為區塊鏈評分 chainScore 很低并不會影響他們的挖礦收益。
                      2. 網絡中多個區塊鏈共存,在這種情況下,礦池前后一致性較低的區塊鏈(通常是 51% 算力攻擊)將受到懲罰。

                      那么,這種方法在上面所提到的幾種51%算力攻擊面前效果如何?

                      使用算力租賃服務(例如 NiceHash )來執行攻擊

                      由于其他礦池不會在他的區塊鏈上繼續挖礦,隨著時間的推移攻擊者會受到礦池前后不一致懲罰。

                      兩個共掌握全網 60% 哈希算力的礦池聯合執行攻擊

                      為了解決這個問題,我們不僅需要考慮礦池的哈希算力,還需要考慮在區塊鏈上挖礦的礦池的數量。如果我們有大于 10 個具有大致相同哈希算力的礦池,那么這個問題就會變得更容易解決。

                      兩者的結合

                      例如一個掌握全網 40% 哈希算力的礦池又租用了全網 30% 的哈希算力執行攻擊。

                      隨著時間的推移攻擊者會受到礦池前后不一致懲罰。值得注意的是,即使攻擊者將租用哈希算力挖出區塊的礦工地址設置為原本礦池的地址也無濟于事,因為我們會查看已挖出區塊過去的數據。

                      使用專用集成電路(ASIC)執行攻擊

                      這看起來像是長期的 51% 算力攻擊。攻擊者會隨著時間的推移受到礦池前后不一致懲罰,但如果他能繼續堅持下去,他就可能會成為我們參考的“過去的礦池”。在這種情況下,問題演變成了如果一個礦池叛變。

                      雖然這種方法并沒有解決 51% 算力攻擊,但它能使攻擊者的攻擊成本變得更加高昂,因為攻擊者會在很長一段時間內持續受到懲罰(很多個區塊時間)。

                      如果幾個礦池突然停止挖礦,監控系統可以發覺這種情況,社區會有一些時間來做出反應,例如開始自己挖礦(但由于懲罰機制的存在他們必須小心)或者只是在發生這種情況時等待更多后續區塊的確認。

                      基于這些情況,我們先做了以下假設:

                      • 將礦池作為網絡的一部分從而加強區塊鏈的安全性。當然了如果一個礦池可以通過各種手段掌握全網 51% 的哈希算力,那么他還是可以執行 51% 算力攻擊,不過這并不是我們引起的新問題,就我目前的了解,業界還沒有針對這種問題的解決方案。
                      • 一旦礦池 A 挖出了一個區塊,所有接下來的 29 個區塊都將獲得礦池 A 的前后一致性獎勵,無論這些區塊是由誰挖出的,因此,與其他人相比,礦池 A 并沒有獲得任何優勢。
                      • “墻頭草”礦工仍然受歡迎,但如果他們突然開始挖出大量區塊,他們可能會受到懲罰。如果他們有些前后一致性,我們不會對他們進行大量懲罰,他們可以輕松地挖出新的區塊。有人可能會說這樣會降低安全性,但我的預感是,你從獲得礦池前后一致性指數獲得的收益遠遠超過沒有“墻頭草”礦工而失去的收入。
                      • 只要每個新區塊保證為區塊鏈添加一些積極價值,挖礦就可以在沒有礦池存在的情況下繼續運行。
                      • 由于獨自挖礦的礦工很難開采出一個區塊,因此懲罰對他們的影響基本上為零。我認為他們中的大多數人都希望參與到礦池之中。
                      • 新來的更大的礦池將不得不逐漸加入區塊鏈中,否則它們會因為礦池挖礦前后不一致導致其挖出的區塊受到懲罰。
                      • 礦池前后一致性公式( PCI )以及區塊鏈評分 chainScore 可以有多種定義方法。
                      • 對于具有較低區塊間隔時間的區塊鏈,這種方法可以更好地工作,因為同樣的一段時間里這種區塊鏈可以獲得更多有關礦池一致性的信息。

                      接下來,我們需要用博弈論的方法來對這個假設進行驗證。需要注意的是,可以考慮不調整 PoW 的值,而是使用 PCI 作為附加值來保持 PoW 一致。

                      滑動窗口礦池前后一致性增量測試的結果

                      我通過模擬出一個理想的區塊鏈從而在一系列的連續區塊中檢測礦池前后一致性的想法。

                      雖然結果顯示,使用滑動窗口礦池前后一致性增量與最長區塊鏈機制(當前被大部分區塊鏈采用)相比, 51% 算力攻擊的成本會更加昂貴,但應該注意的是,由于測試過程中可能存在瑕疵,代碼中可能存在錯誤,或者是模擬出的環境過于理想/簡單/錯誤,這樣的結論可能會存在問題,因此離在區塊鏈上實際使用可能還有很長的路要走。

                      在這次實驗中我創建了大約 5500 個區塊(過程持續了 5500 * 14 秒),攻擊者在高度為4850的區塊處進行分叉。默認情況下,區塊的間隔時間約為 14 秒,在代碼上我做了很多的簡化,并沒有完全符合在當前區塊鏈中使用的邏輯(例如,區塊時間的計算不一樣,沒有叔塊)。

                      盡管存在差異,但我認為這個實驗足以檢驗我們的想法。實驗結果如下所示,結果中 Ratio (比值)表示主鏈和攻擊者在區塊高度 4850 處生成的分叉鏈之間區塊鏈評分 chainScore 的比值,如果這個比值低于 1.0 意味著主鏈的區塊鏈評分 chainScore 的總和低于攻擊者分叉鏈的總和。

                      我們還可以從圖中看到兩個區塊鏈達到的高度。

                      實驗結果

                      從圖中我們可以看出,較傳統的最長鏈方法,滑動窗口礦池前后一致性增量方法更容易選中主鏈,不過即使這種方法獲勝很多,在真實的區塊鏈環境中這種方法的效用還有待檢驗。

                      從上面這個結果表中我們可以看到,在所有的情況下分叉鏈最終都挖出了更多的區塊,但在滑動窗口評分方法中分叉鏈的評分 chainScore 從未超過主鏈(這并不完全正確,因為它可能在開始時獲得了更高的分數,但在這次測試中,分叉鏈最少領先主鏈 30 個區塊,并且評分也更高)。

                      如果攻擊者能夠堅持足夠長的時間,他就有可能成為“礦池歷史”的一部分,隨著時間的推移分叉鏈的評分chainScore 會超過主鏈。

                      當然了,這次實驗代碼除了我以外還沒有任何人檢查過。如果你發現了代碼中存在的問題,請向我提交。

                      已知的攻擊向量

                      51%算力攻擊

                      盡管如此,攻擊的成本可能要貴得多。

                      礦池冒充攻擊

                      攻擊者可以挖出更長的區塊鏈并在其中插入其他礦池的礦工地址,從而將攻擊者挖出區塊的礦池分布調整為與攻擊前大致相同的分布。

                      為了防范這種情況,我們需要為礦工提供某種形式的身份證明。這可以通過在區塊頭中添加名為 minerSig (礦工簽名)的身份驗證信息來解決。 minerSig是使用礦工私鑰簽名的前序區塊哈希值 parentHash 和該區塊的隨機數 nonce ,為了使區塊有效,我們需要檢查這個驗證。

                      攻擊者加入主網絡

                      攻擊者可以加入主網絡并挖出一些區塊,以避免以后被識別出突然大量挖礦。這種情況可以參考如果一個礦池叛變。

                      改進措施:擺脫礦池假設

                      在協議級別上實施礦池機制可以保證礦池確實存在。但即使我們沒有礦池,協議也能夠針對這種情況進行相應的優化。

                      就比如說,我們可以鼓勵礦工聚集起來,組建一定數量的礦池,具體的方法就是根據每個礦池的哈希算力給予挖礦獎勵,從而匯聚成總共 N 個礦池。假如我們想要大約 20 個礦池,那么對于占據全網哈希算力 5% 的礦池,挖礦獎勵最高(4 ETC)。

                      如果礦池的算力多于/少于這個值,那么礦池獲得較低的獎勵,剩余的獎勵將根據其他礦池的哈希算力分配給他們。由于我們最終為每個區塊創建了相同數量的挖礦獎勵(在這種情況下為 4 ),因此它并不會改變貨幣政策中定義的流通中的總貨幣。激勵措施需要正確完成,以便礦工按照我們的想法聚集。

                      這里要提醒開發者以下,即使一個人擁有 5 個礦池,每個礦池都掌握全網 5% 的哈希算力,這也沒有問題,因為它增強了礦池的前后一致性,從而為我們提供了額外的安全性。

                      如果已經存在礦池,就比如說當下的以太坊經典,那么如果需要,也可以在稍后階段實施。

                      其他可能的礦池前后一致性定義

                      礦池前后一致性公式可以執行以下操作。

                      • 基于礦池數據和相似分析的線性回歸。

                      • 懲罰哈希算力的增長(無論是對單獨的礦工還是對整個網絡)。對網絡懲罰的想法是,如果沒有惡意區塊鏈,那么對每個人的懲罰都是相同的,如果存在一個想要搶占先機的惡意區塊鏈,那么它將受到更多的懲罰。由于區塊時間戳可能是偽造的,因此僅從區塊鏈數據中很難給出這樣的客觀分數。

                      • 如果獨自挖礦的礦工或礦池在給定的區塊窗口內過快地增加挖掘區塊的比值,則給他們“超速罰單”。

                      • 對礦工的數據進行統計分析。

                      協議級礦池的礦池前后一致性示例

                      假設我們有一個區塊鏈,它具有內置的激勵機制,用于讓每個礦池的哈希算力收斂到全網的 1% ,從而形成總共約 100 個礦池。

                      為了使礦池能夠對礦池前后一致性指數做出貢獻,它需要在最后 3000 個區塊上以大約 1% 的哈希算力進行一致地挖掘。礦池前后一致性指數將是通過此標準的礦池的比值。

                      比如說,如果最后 100 個區塊由 50 個不同的礦池挖出,則礦池前后一致性指數將等于 0.5 ,因此貢獻 0.5 難度。

                      在這種情況下,如果攻擊者想要進行攻擊,他需要挖最后 3000 個具有不同礦工地址的區塊中的 50% 才能開始獲得與主鏈相同的礦池前后一致性指數。除此之外,我們還可以對礦池發“超速罰單”。

                      假設我們有 100 個具有相同哈希算力的礦池,我們也可以做一些統計分析。所有礦池都具有相同的“被選擇”的概率,這意味著我們可以計算最后 100 個區塊狀態的可能性,假設它們是隨機選擇的,那么我們可以對結果不太可能發生的事件進行懲罰。

                      寫在最后

                      說了這么多,我并不是說人們應該改變他們的共識算法,而是應該有一個很好的理由來推進共識算法的改進,并且在考慮任何變動之前都應該很好地研究替代方案。

                      這只是我對共識算法改進的一些思考,我的想法能降低網絡51%算力攻擊發生的可能性。

                      無論如何,礦池將成為區塊鏈網絡的一部分,所以為什么不物盡其用來為區塊鏈增加安全性呢?

                      我們仍然可以將這種方法看作一種最長鏈機制,不同之處在于我們改變了測量區塊鏈長度的方式。我更青睞于人們使用更通用的描述,例如最大區塊鏈評分規則。

                      聲明:本文為入駐“火星號”作者作品,不代表火星財經官方立場。轉載請注明出處、作者和本文鏈接

                      提示:投資有風險,入市須謹慎。本資訊不作為投資理財建議。



                      小編推薦:欲學習電腦技術、系統維護、網絡管理、編程開發和安全攻防等高端IT技術,請 點擊這里 注冊賬號,公開課頻道價值萬元IT培訓教程免費學,讓您少走彎路、事半功倍,好工作升職加薪!

                      本文出自:https://www.toutiao.com/a6667026829288669700/

                      免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!


                      鮮花

                      握手

                      雷人

                      路過

                      雞蛋

                      相關閱讀

                      最新評論

                       最新
                      返回頂部
                      新疆11选5计算公式