什麼是51%攻擊?

在上篇文章(http://www.javashuo.com/article/p-uvikgbew-cp.html)發出後,有人提出一個疑問「若是其中一我的是正確的,其餘人聯合搞欺詐,是要怎樣的條件」。這篇文章就來聊聊這個問題。api

 

ll本文內容依舊翻譯自Authorito Capital CEO的博文《WTF is The Blockchain?》和《Who Owns Blcockchain》,略有刪減。網絡

ll原文連接:區塊鏈

https://medium.com/@mohitmamoria/who-owns-the-blockchain-9b3af7a2ab76加密

https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348.net

 

在上篇文章中,咱們把區塊鏈假設爲一個帳本,每一個區塊就是每頁帳本頁,當一頁帳本頁記滿賬的時候,就須要把它用「密碼」(哈希值)封印起來,並把這頁內容存到一個文件夾中。翻譯

 

如今想象一下,在這個文件夾中已經存有5頁內容了,全部的頁面都被一個「封印密碼」封印起來。若是我回到第二頁,修改了其中一些交易數據,來使我得到利益,會怎樣?封印密碼會讓全部人發現交易的不一致性,對不對?若是我爲已修改的內容從新算一個封印密碼,並將其標記在頁面上,又會怎樣呢?blog

 

這有個小把戲保護封印密碼不被修改遊戲

 

還記得我以前告訴你們的嗎?有兩個盒子,一個盒子裏包含數字20893,另外一個盒子是空的,等待玩家計算一個數值,使得兩個盒子裏的內容相加,得出咱們要求的結果。開發

 

實際上,計算區塊鏈的封印密碼更爲複雜,它須要三個盒子而不是兩個盒子。這三個盒子中的兩個已提早包含內容,其中一個盒子包含本頁中的全部交易列表,另外一個盒子包含前一頁通過「魔法機器」(哈希加密)加工後輸出的結果,第三個盒子要裝的是玩家本身計算得出的封印密碼。當三個盒子中都裝滿東西,並輸入進機器中時,從機器右邊輸出的結果必須知足咱們預設的條件。get

區塊鏈中這個巧妙的「小把戲」,可以確保每一頁的密封都須要依靠它的前一頁。所以,若是有人想修改已經被封印起來的某頁內容,他就必須修改這頁以前的全部頁面內容和封印密碼,以保證鏈條的一致性和連續性。

 

在上篇文章的最開始,咱們假設有10個玩家,若是這些玩家中的某我的試圖欺騙你們,修改某頁帳本中的內容,他就不得不修改不少頁的內容並從新計算這些頁面上的封印密碼。咱們都知道計算封印密碼有多難!從他修改的那頁開始,他就得在網絡中從新創建另一條鏈。可是這條鏈永遠追不上另外9我的維護的那條誠實的鏈的,由於一我的的工做能力和速度是趕不上9我的合在一塊兒的工做能力和速度的。所以,保證了最長的那條鏈是「誠實的」鏈。所以,在這局遊戲中,1個不誠實的傢伙是打不過9個誠實的玩家的,他是不可能修改爲功的。

若是不是一我的,而是六我的變得不誠實呢?

 

這種狀況,用專業術語來講就是「51%攻擊」。

 

若是網絡中的大部分人變得不誠實並欺騙網絡中的其餘人時,那這個區塊鏈協議就會面臨失敗。雖然這幾乎不可能發生,但咱們也要知道區塊鏈系統的脆弱之處,它是創建在「羣體中的大多數老是誠實的」假設之上的。

 

所以,在區塊鏈中,若是一我的能掌握系統51%的算力,他就能重寫區塊鏈中的數據,從而讓本身獲利。

 

「系統中51%的算力」是什麼意思?

系統中的玩家爲記帳和計算「封印密碼」所花費的CPU耗能和電力,就是咱們所說的算力。

 

如何解決這個問題

 

如今已經有人提出一些解決辦法,好比不依靠電腦算力的「權益證實(proof of stake)」方法。權益證實是指系統中的玩家不用解決數學難題來算出「封印密碼」,而是將他們手中持有的幣做爲賭注壓在他們提出的解決方案上。若是大部分人都贊成這個方案,那這個玩家就能獲得獎勵。若是大部分人不一樣意,那這個玩家以前押注的幣就會被從他的錢包扣除。這個方法引入了懲罰方案。

 

但這個方法也存在問題。雖然不誠實的傢伙會受到懲罰,但也會致使系統中的玩家「富者更富,窮者更窮」。若是我此次贏得了賭注並獲得獎勵,下次會押上更多的幣,再次贏得賭注和獎金,再押入更多的資產。循環往復,最後,區塊鏈中的大部分資產就會彙集到不多的人手中。若是掌握了多數財富的這幾我的想要改寫區塊鏈,那他們就能辦到。

 

不管何種狀況,只要少數幾我的掌握了區塊鏈,那麼區塊鏈中的大多數人就處於風險之中。

 

在Twitter上有一段Vitalik和其餘人的對話:

Bug Spencer:銀行指定規則和核心開發者指定規則有什麼不一樣嗎?這二者都要依靠他人。

Vitalik Buterin:若是你發現JP Morgan濫用權力欺騙了你,你和其餘對JP Morgan不滿意的客戶會分離出一個「JP Morgan經典」嗎?

 

Vitalik的觀點是:若是一個區塊鏈中有對其規則不滿意的用戶,那這些用戶能夠分離出來從新建立一個分叉的鏈,就像以太經典區塊鏈和以太坊區塊鏈同樣。

 

這個方法雖然不徹底適用,但也是一個方法。

 

還有更好的方案嗎?確定會有,畢竟有那麼多的區塊鏈愛好者在爲之付出。若是你有更好的方法或對區塊鏈有更棒的觀點,歡迎投稿給咱們。

相關文章
相關標籤/搜索