區塊鏈是如何實現的?(初探)

前言

  隨着比特幣的起起伏伏,區塊鏈技術越來越受到關注。區塊鏈和比特幣是當下和人工智能一樣風靡的領域。人們開始尋找區塊鏈技術的用武之地,已經有了不少的嘗試。但是區塊鏈的價值所在衆說紛紜,特別是一些媒體胡亂吹噓或者是故意貶低,給大家都帶來了不小的困惑。其實作爲一名技術人員只需要理解其底層實現原理和運行機制,之後其應用場景和發展前景相信都會有自己的見解。

區塊鏈和比特幣

  首先要理清楚區塊鏈和比特幣的區別和聯繫,區塊鏈可以理解爲一種有特點的數據存儲結構或者說是協議,能夠解決一些列的安全、穩定等方面的問題;而比特幣是利用區塊鏈技術實現的一種數字貨幣系統,比特幣也是目前唯一一個成熟的區塊鏈應用,這也是二者容易混淆的原因之一。比特幣起始於2008年名爲中本聰(Satoshi Nakamoto)的人發表的一篇論文《比特幣:一種點對點的電子現金系統》(Bitcoin: A Peer-to-Peer Electronic Cash System原文 譯文

  區塊鏈是一種新型去中心化協議,能安全地存儲比特幣交易或其它數據,信息不可僞造和篡改,可以自動執行智能合約,無需任何中心化機構的審覈。交易既可以是比特幣這樣的數字貨幣,也可以是債權、股權、版權等數字資產,區塊鏈技術解決了拜占庭將軍問題,大大降低了現實經濟的信任成本與會計成本,重新定義了互聯網時代的產權制度。

  中本聰提出了提出了這個具有創造力的構想並實現了比特幣系統,在越來越多的支持者的參與下,比特幣系統穩定運行,在2017年迎來了爆發式的發展,一枚比特幣的價格曾經一度突破2萬美元大關。越來越多的技術人員、投資者、金融從業者開始關注區塊鏈技術,並試圖拓展其應用領域,體現其特點和價值。當前區塊鏈技術在金融領域還在繼續深耕,其他領域也開始了不錯的嘗試,例如遊戲,安全等。

  下面通過以下幾個方面進行逐一討論和分析:

  • 區塊的基本結構
  • 去中心化與點對點網絡
  • 數據的不可修改性
  • 共識機制
  • 雙重花費和拜占庭將軍問題
  • 隱私保護

區塊的基本結構

  區塊的結構並不複雜,包含了一些字段,整體上看一個區塊的結構類似於雙向鏈表中的節點。可以先直觀的感受比特幣系統中第505156個區塊的頭信息。

  這些字段相當一部分可以通過字面意思來理解,對於較爲重要的字段進行一一列舉。

  • Number Of Transactions:此區塊中所包含的交易數量,網頁下方顯示了846個交易的詳細信息,也稱爲區塊體
  • Difficulty:難度係數,爲了控制區塊產生的速度,難度係數代表當前區塊產生的難度
  • Version:區塊鏈的版本
  • Nonce:工作量,在當前難度係數下計算了1683386125次才生成了此區塊
  • Hash:此區塊的Hash簽名,唯一且不可更改
  • Previous Block:前一個區塊的Hash簽名,有且只有一個
  • Next Block(s):後一個區塊的Hash簽名,可以有多個(區塊鏈存在分叉的情況)
  • Merkle Root:默克爾樹根,默克爾樹是存儲交易簽名的數據結構,在Git中也有應用

  這些關鍵字段的正確維護是區塊鏈實現的基礎,也是區塊鏈去中心化,解決雙花和拜占庭將軍問題的基本結構。有了關鍵的數據結構,還需要相輔相成的規則和算法才能運行起來。理清楚整個流程之後再回過頭看區塊結構就能一目瞭然了。

 

  通過結構的觀察可以得出結論:

  • 一個區塊寫入後Hash唯一且不可更改,除非把整個區塊鏈中所有區塊的Hash,Previous Block,Next Block(s)全部做相應更改
  • 一個區塊的內容更改後Hash隨之更改

 

去中心化與點對點網絡

  去中心化是區塊鏈的核心思想,這也是與其他分佈式產品的最大區別,去中心化保證了公平性和安全性。點對點網絡就是在去中心化的框架下的互聯網,類比現實社會,當今的社會制度就是中心化的,國家的中心是政府,金融系統的中心是央行。假如政府腐敗、央行作弊,那麼整個社會就無公平可言,所有的數據也是不可信任的。也許去中心化也是人類社會制度發展的終極目標。只要擁有一臺電腦就能加入點對點網絡成爲一個節點,每個節點都能擁有整個區塊鏈的信息(目前達到了上百GB),而且在不斷的更新和同步。每一個區塊的寫入都會廣播到整個網絡。點對點網絡中每個點擁有相同的權利和義務,都是對等的,以CPU作爲算力單位每個點都可以參與投票、計算和打包數據,也擁有同步區塊信息的權利。

 

數據的不可修改性

  在區塊的基本結構中得出了區塊內容一旦寫入則不可修改的結論。原因非常容易理解,首先一個區塊的通過Hash=SHA256(區塊頭)得出,因此每個區塊的Hash都是唯一的。並且區塊頭中包含Merkle Root字段,區塊體中的交易數據存儲在默克爾樹的葉子節點中,因此Merkle Root可以看做是此區塊體中所有交易數據的唯一簽名。基於以上事實,不管是對交易數據的修改還是對區塊元信息的修改都會導致區塊的Hash字段改變,由於除了第一個個最後一個區塊外所有節點同時具有Previous Block,Next Block(s)字段,會引起連鎖反應。修改一個區塊數據的代價是要修改區塊鏈中所有區塊的Hash、Previous Block,Next Block(s)字段爲相應值。如果不是同時擁有全網一半以上的算力是不可能做到的。因此可以說區塊數據一旦寫入區塊鏈就是永久寫入不可修改。這也保證了數據的安全性和可信任度。

 

 

共識機制

  共識機制是區塊鏈中最重要的特點,共識是指對區塊數據的認同,也可以看做是投票。只有點對點網絡中半數以上的都認爲區塊數據是真實可靠的才能達成共識。目前有幾種主要的共識機制:工作量證明(PoW)、權益證明機制(PoS)、授權股權證明機制(DPOS)和拜占庭共識算法(PBFT)。其中工作量證明是比特幣採用的機制。在比特幣中工作量證明就是所謂的“挖礦”。

  由於每個節點都要去同步最新的區塊鏈數據,所以區塊產生的速度不能太快,不然大部分節點根本來不及同步。中本聰爲此設計了難度係數調節機制,在區塊結構中維護了Nonce和Difficulty兩個字段,分別代表計算的次數和難度係數,區塊產生設計速度是每10min產生一個,隨着算力的提高,這個速度可能會加快,如果區塊的產生速度大於設計速度那麼下一個區塊的難度係數就會增加。因此可以保證區塊的產生時間間隔圍繞在10min左右。所以在比特幣中隨着時間推移挖礦會越來越難。

  如果有兩個區塊同時加入區塊鏈,那麼區塊鏈就會分叉。哪一個分支長度先達到6個就會把哪一個當做主幹,確認交易,另一個分支就會被拋棄(選中大多數節點的共識)。因此確認一次交易的時間要1個小時左右。

 

 

雙重花費和拜占庭將軍問題

  雙重花費是指把同一筆資產花費到兩個不同的交易中,例如,節點A一共有1個比特幣,節點A幾乎同時提交了兩個交易:向節點B支付1個比特幣,向節點C支付一個比特幣。在交易記錄之前這兩筆交易可能都是合法的,可能會有不同的節點將其記錄到區塊中,如果同時產生了兩個區塊,那麼就按照工作量證明的共識機制來選擇。區塊鏈不通過第三方也可以解決雙花問題。

  拜占庭帝國想要進攻一個強大的敵人,爲此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵禦5支常規拜占庭軍隊的同時襲擊。基於一些原因,這10支軍隊不能集合在一起單點突破,必須在分開的包圍狀態下同時攻擊。他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通信兵相互通信來協商進攻意向及進攻時間。困擾這些將軍的問題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者進攻時間。在這種狀態下,拜占庭將軍們能否找到一種分佈式的協議來讓他們能夠遠程協商,從而贏取戰鬥?這就是著名的拜占庭將軍問題。

  拜占庭將軍問題再區塊鏈中的描述應該是,在不知道具體的誠實節點的情況下怎麼能夠達到共識,在區塊鏈中使用主流的共識機制(工作量證明(PoW)、權益證明機制(PoS)、授權股權證明機制(DPOS)和拜占庭共識算法(PBFT))就可以解決拜占庭將軍問題。

 隱私保護

   由於在區塊鏈中,所有節點都由全網唯一的SHA256簽名代表,這個簽名也不能被反向推出信息,因此即使簽名在全網廣播也不能得到某個節點的信息。基於這一點在所有交易中節點都相當於是匿名的,很好的保護了用戶的隱私。但這也是編寫勒索軟件的黑客們常用的勒索支付方式。

 小結

  基於以上對區塊鏈的理解,可以得出結論,區塊鏈技術是去中心化的,區塊的結構特點可以很好的保證數據的安全和節點之間的公平性,也可以利用共識機制來解決雙花和拜占庭將軍等類似問題,比特幣的發展也體現出了對區塊鏈價值的認同。但爲了實現這些特點,也付出了不小的時間和空間成本:每個節點都需要實時同步整個區塊鏈信息(目前已經達到上百GB);每個區塊的容量有限;平均每10min才能生成一個區塊,每小時才能確認一次交易,交易處理速度目前來看是遠遠不夠的。

  到目前爲止區塊鏈的應用場景非常有限,在目前的技術水平下成熟的嘗試還侷限在金融貨幣領域。判斷區塊鏈是否能運用到某一個領域只需要判斷三點即可:不需要管理中心,不要求數據的實時性,付出的成本小於收益。現在看來區塊鏈帶來的改變雖然不足以和人工智能相提並論,但區塊鏈的思想非常值得去研究和參考。

  從技術的角度看,任何一個新技術都不是憑空產生的,一定是在已有的技術基礎上加以改進和創新得來的。區塊鏈也不例外,如果你對分佈式計算(分佈式事務,Paxos算法等)和密碼學(對稱加密,非對稱加密,數字簽名)稍微有一些瞭解的話研究區塊鏈時就會非常輕鬆,區塊鏈和Git的實現也有一些相似的地方(比如都使用了默克爾樹)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章