黑客如何進行區塊鏈51%攻擊(雙重攻擊或雙重花費)

51%攻擊或雙重攻擊是區塊鏈中的礦工或礦工羣體試圖在該區塊鏈上花費兩次數字加密貨幣。他們試圖「雙重花費」,所以得名。這樣作的目的並不老是加倍花費數字加密貨幣,但更常見的是經過影響其完整性來對某個加密數字貨幣或區塊鏈進行攻擊。php

這是一個簡單的例子:假設我在豪華車上花了10比特幣。幾天後汽車交付,個人比特幣從個人帳戶轉帳到汽車公司。經過對比特幣區塊鏈進行51%的攻擊,我如今能夠嘗試撤銷這種比特幣轉帳。若是我成功了,我將擁有豪華車和比特幣,我還能夠再次使用這些比特幣。從自治的民主區塊鏈的角度來看,51%攻擊的概念彷佛是顯而易見的,但對其運做方式存在一種常見的誤解。這篇簡短的文章將嘗試對51%的攻擊如何更詳細地進行清晰的解釋。若是你不知道礦工們如何向區塊鏈添加交易,我建議你先閱讀礦工如何經過七個步驟向區塊鏈添加交易,由於只須要五分鐘的就能夠了。若是你不知道區塊鏈是如何工做的,我建議你從這裏開始。java

區塊鏈=治​​理

在詳細瞭解51%的攻擊以前,重要的是要了解區塊鏈協議基本上是一種治理形式。區塊鏈管理數據的分類賬,例如交易數據。因爲區塊鏈協議能夠爲咱們管理,咱們再也不須要第三方來執行此操做,例如政府或銀行。這就是(大多數)區塊鏈去中心化的緣由。比特幣區塊鏈的協議基於民主自治制度,這意味着網絡上的大多數參與者(礦工)將決定哪一種版本的區塊鏈表明真相。node

51%的攻擊如何發揮做用

當比特幣全部者在交易中籤字時,它會被放入未經證明的交易的本地池中。礦工從這些池中選擇交易以造成交易塊。爲了將這個交易塊添加到區塊鏈中,他們須要找到解決很是困難的數學問題的方法。他們試圖使用計算能力找到這個解決方案。這稱爲哈希( 在此處閱讀有關哈希算法的更多信息 )。礦工的計算能力越強,在其餘礦工找到解決方案以前找到解決方案的機會就越大。當礦工找到解決方案時,它將與其餘礦工一塊兒廣播(連同他們的區塊),而且只有當區塊內的全部交易根據區塊鏈上的現有交易記錄有效時,他們纔會驗證它。請注意,即便是惡意的礦工也永遠不會爲其餘人建立交易,由於他們須要該人的數字簽名才能這樣作(他們的私鑰)。所以,若是不訪問相應的私鑰,就沒法從其餘人的賬戶發送比特幣。python

偷挖採礦——創造區塊鏈的後代

如今要注意了。然而,惡意礦工能夠嘗試逆轉現有交易。當一個礦工找到一個解決方案,它應該被廣播給全部其餘礦工,以便他們能夠在塊被添加到區塊鏈以後進行驗證(礦工達成共識)。然而,惡意礦工能夠經過不將其塊的解決方案廣播到網絡的其他部分來建立區塊鏈的後代。如今有兩個版本區塊鏈。android

如今有兩種版本的區塊鏈。紅色區塊鏈能夠被認爲是「偷挖」模式。程序員

一個版本正在被無瑕疵的礦工跟隨,一個被惡意的礦工跟隨。惡意礦工如今正在研究他本身的區塊鏈版本,而不是將其廣播到網絡的其餘部分。網絡的其他部分沒有接受這個鏈,由於畢竟它尚未被廣播。它與網絡的其餘部分隔離。惡意礦工如今能夠把他全部的比特幣花在區塊鏈的真實版本上,這是全部其餘礦工正在研究的版本。比方說,他把它花在蘭博基尼身上。在真實的區塊鏈上,他的比特幣如今已經用完了。同時,他沒有將這些交易包含在他的隔離版區塊鏈中。在他的孤立版區塊鏈上,他仍然擁有那些比特幣。web

與此同時,他仍在挑選區塊,他在隔離版的區塊鏈上自行驗證了全部這些。這就是全部麻煩開始的地方......區塊鏈被編程爲遵循民主治理模式,即大多數。區塊鏈經過始終跟隨最長的(實際上最重的,但不要讓事情太複雜化)鏈來實現這一點,畢竟,大多數礦工比其餘網絡更快地將塊添加到他們的區塊鏈版本中( 因此最長鏈=多數 )。這就是區塊鏈肯定其鏈條的哪一個版本是真實的,以及錢包的全部餘額所依據的。一場比賽如今開始了。擁有最多哈希能力的人將更快地爲他們的連接版本添加塊。算法

競賽——經過廣播新鏈來扭轉現有交易

惡意礦工如今會嘗試將塊添加到他的隔離區塊鏈中,比其餘礦工更快地將塊添加到他們的區塊鏈(真實的)。一旦惡意礦工建立了更長的區塊鏈,他就會忽然將此版本的區塊鏈廣播到網絡的其餘部分。網絡的其他部分如今將檢測到區塊鏈的這個(惡意)版本實際上比他們正在處理的版本更長,而且根據協議強制它們切換到這個鏈。mongodb

惡意區塊鏈如今被視爲真實的區塊鏈,而且此鏈中未包含的全部交易將當即被撤銷。攻擊者以前已經將他的比特幣用在了蘭博基尼上,但這筆交易並無包含在他的隱形鏈中,這條鏈如今已經被掌控,因此他如今又一次控制着那些比特幣。他可以再次花費它們。編程

這就是一次雙重攻擊。它一般被稱爲51%攻擊,由於惡意礦工將須要比網絡其他部分組合更多的哈希能力(所以具備51%的哈希能力),以便更快地將塊添加到他的版塊的區塊鏈中,最終容許他要創建一個更長的鏈條。

那麼比特幣如何防範這種狀況呢?

實際上,這些攻擊很是難以執行。如前所述,礦工將須要比網絡其餘部分更多的哈希能力來實現這一目標。考慮到比特幣區塊鏈上甚至可能有成千上萬的礦工,惡意礦工將不得不花費大量資金在採礦硬件上與網絡的其餘部分競爭。即便是地球上最強大的計算機也沒法與該網絡上的總計算能力直接競爭。還有無數其餘反對進行51%攻擊的論點。例如,被捕和被起訴的風險,以及電費,租用全部採礦硬件的空間和存儲,覆蓋你的軌道和洗錢。像這樣的操做只是爲了給攻擊者的回報須要付出太多努力,至少在比特幣區塊鏈的狀況是這樣的。

其餘區塊鏈是否容易受到攻擊?

另外一個有趣的故事是,不管執行此類攻擊的難度如何,過去實際上已經發生了屢次51%的攻擊。事實上,最近(2018年4月)在Verge(XVG)區塊鏈上進行了攻擊。在這種特定狀況下,攻擊者在邊緣區塊鏈協議的代碼中發現了一個錯誤,該錯誤容許他以極快的速度生成新的塊,使他可以在短期內建立更長版本的Verge區塊鏈。此示例說明了一個能夠觸發51%攻擊的事件,儘管很是罕見,而且一般歸功於協議代碼中的錯誤。一個可靠的區塊鏈開發人員團隊可能會注意到這樣的錯誤,並防止它被濫用。

在檢查這個「工做證實量」POW算法(挖掘算法)時,它告訴咱們更多的主動哈希/計算能力能夠提升51%攻擊的安全性。儘管像小型山寨幣同樣操做這種算法的較小區塊鏈可能會更容易受到這種攻擊,由於攻擊者沒有那麼多的計算能力來競爭。這就是爲何51%的攻擊一般發生在小型區塊鏈(例如比特幣黃金)上,若是它們發生的話。比特幣區塊鏈之前從未成爲51%攻擊的犧牲品。

ASIC挖掘——加強的採礦硬件

這也帶給咱們最近關於區塊鏈的最新熱門話題之一:ASIC挖掘。ASIC採礦是一種由各類早期比特幣礦業公司開發的採礦技術,用於加強採礦硬件,使其更增強大。如今不少業內人士都在爭論ASIC礦工是否會使某些採礦我的或集團過於強大。Monero(XMR)區塊鏈最近實施了一項協議更新,阻止了ASIC挖掘在其區塊鏈上的使用。結果,網絡上的總哈希功率降低了驚人的80% (見下文)!

在ASIC挖掘被阻止後,XMR網絡的計算能力降低了80%!

這代表Monero網絡的功率掌握在ASIC礦工手中。若是網絡上的全部參與者都使用ASIC挖掘硬件,那麼這也不必定是個問題。但問題是,像Bitmain這樣的大型礦業公司被懷疑控制着大量的ASIC採礦業務。即便這些組織也將此技術分發給我的,但他們可能只是在本身長期使用它以後才這樣作。區塊鏈中的一些人爭論這是否會使他們太強大。理想狀況下,區塊鏈應由儘量多的個體礦工管理。這就是讓它更加去中心化的緣由。

看看Bitmain位於中國內蒙古的採礦設施。

另外一個大型採礦設施。

======================================================================

分享一些以太坊、EOS、比特幣等區塊鏈相關的交互式在線編程實戰教程:

  • java以太坊開發教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智能合約開發交互,進行帳號建立、交易、轉帳、代幣開發以及過濾器和交易等內容。
  • 以太坊入門教程,主要介紹智能合約與dapp應用開發,適合入門。
  • 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括帳戶管理、狀態與交易、智能合約開發與交互、過濾器和交易等。
  • EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、帳戶與錢包、發行代幣、智能合約開發與部署、使用代碼與智能合約交互等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
  • java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Java代碼中集成比特幣支持功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
  • php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中集成比特幣支持功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
  • tendermint區塊鏈開發詳解,本課程適合但願使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操代碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。

匯智網原創翻譯,轉載請標明出處。這裏是原文黑客如何進行區塊鏈51%攻擊(雙重攻擊)

相關文章
相關標籤/搜索