區塊鏈是什么?
“區塊鏈”技術最初是由一位化名中本聰的人為比特幣(一種數字貨幣)而設計出的一種特殊的數據庫技術,它基于密碼學中的橢圓曲線數字簽名算法(ECDSA)來實現去中心化的P2P系統設計。但區塊鏈的作用不僅僅局限在比特幣上。現在,人們在使用“區塊鏈”這個詞時,有的時候是指數據結構,有時是指數據庫,有時則是指數據庫技術,但無論是哪種含義,都和比特幣沒有必然的聯系。
從數據的角度來看:區塊鏈是一種分布式數據庫(或稱為分布式共享總賬,DistributedShared Ledger),這里的“分布式”不僅體現為數據的分布式存儲,也體現為數據的分布式記錄(即由系統參與者來集體維護)。簡單的說,區塊鏈能實現全球數據信息的分布式記錄(可以由系統參與者集體記錄,而非由一個中心化的機構集中記錄)與分布式存儲(可以存儲在所有參與記錄數據的節點中,而非集中存儲于中心化的機構節點中)。
從效果的角度來看:區塊鏈可以生成一套記錄時間先后的、不可篡改的、可信任的數據庫,這套數據庫是去中心化存儲且數據安全能夠得到有效保證的。
結論:區塊鏈是一種把區塊以鏈的方式組合在一起的數據結構,它適合存儲簡單的、有先后關系的、能在系統內驗證的數據,用密碼學保證了數據的不可篡改和不可偽造。它能夠使參與者對全網交易記錄的事件順序和當前狀態建立共識。
如今的區塊鏈技術概括起來是指通過去中心化和去信任的方式集體維護一個可靠數據庫的技術。其實,區塊鏈技術并不是一種單一的、全新的技術,而是多種現有技術(如加密算法、P2P文件傳輸等)整合的結果,這些技術與數據庫巧妙地組合在一起,形成了一種新的數據記錄、傳遞、存儲與呈現的方式。簡單的說,區塊鏈技術就是一種大家共同參與記錄信息、存儲信息的技術。過去,人們將數據記錄、存儲的工作交給中心化的機構來完成,而區塊鏈技術則讓系統中的每一個人都可以參與數據的記錄、存儲。區塊鏈技術在沒有中央控制點的分布式對等網絡下,使用分布式集體運作的方法,構建了一個P2P的自組織網絡。通過復雜的校驗機制,區塊鏈數據庫能夠保持完整性、連續性和一致性,即使部分參與人作假也無法改變區塊鏈的完整性,更無法篡改區塊鏈中的數據。
區塊鏈技術涉及的關鍵點包括:去中心化(Decentralized)、去信任(Trustless)、集體維護(Collectively maintain)、可靠數據庫(ReliableDatabase)、時間戳(Time stamp)、非對稱加密(AsymmetricCryptography)等。
區塊鏈技術重新定義了網絡中信用的生成方式:在系統中,參與者無需了解其他人的背景資料,也不需要借助第三方機構的擔保或保證,區塊鏈技術保障了系統對價值轉移的活動進行記錄、傳輸、存儲,其最后的結果一定是可信的。
區塊鏈技術原理的來源可歸納為一個數學問題:拜占庭將軍問題。拜占庭將軍問題延伸到互聯網生活中來,其內涵可概括為:在互聯網大背景下,當需要與不熟悉的對手方進行價值交換活動時,人們如何才能防止不會被其中的惡意破壞者欺騙、迷惑從而做出錯誤的決策。進一步將拜占庭將軍問題延伸到技術領域中來,其內涵可概括為:在缺少可信任的中央節點和可信任的通道的情況下,分布在網絡中的各個節點應如何達成共識。區塊鏈技術解決了聞名已久的拜占庭將軍問題——它提供了一種無需信任單個節點、還能創建***絡的方法。
區塊鏈技術的本質是一種互聯網協議。
設想一下,如果現在我們想要在互聯網世界中建立一套全球通用的數據庫,那么我們會面臨三個亟待解決的問題,這三個問題也是設計區塊鏈技術的核心所在:
問題一:如何建立一個嚴謹的數據庫,使得該數據庫能夠存儲下海量的信息,同時又能在沒有中心化結構的體系下保證數據庫的完整性?
問題二:如何記錄并存儲下這個嚴謹的數據庫,使得即便參與數據記錄的某些節點崩潰,我們仍然能保證整個數據庫系統的正常運行與信息完備?
問題三:如何使這個嚴謹且完整存儲下來的數據庫變得可信賴,使得我們可以在互聯網無實名背景下成功防止詐騙?
針對這三個核心問題,區塊鏈構建了一整套完整的、連貫的數據庫技術來達成目的,解決這三個問題的技術也成為了區塊鏈最核心的三大技術。此外,為了保證區塊鏈技術的可進化性與可擴展性,區塊鏈系統設計者還引入了“腳本”的概念來實現數據庫的可編程性。我們認為,這四大技術構成了區塊鏈的核心技術。
核心技術1:區塊+鏈
關于如何建立一個嚴謹數據庫的問題,區塊鏈的辦法是:將數據庫的結構進行創新,把數據分成不同的區塊,每個區塊通過特定的信息鏈接到上一區塊的后面,前后順連來呈現一套完整的數據,這也是“區塊鏈”這三個字的來源。
區塊(block):在區塊鏈技術中,數據以電子記錄的形式被永久儲存下來,存放這些電子記錄的文件我們就稱之為“區塊(block)”。區塊是按時間順序一個一個先后生成的,每一個區塊記錄下它在被創建期間發生的所有價值交換活動,所有區塊匯總起來形成一個記錄合集。
區塊結構(BlockStructure):區塊中會記錄下區塊生成時間段內的交易數據,區塊主體實際上就是交易信息的合集。每一種區塊鏈的結構設計可能不完全相同,但大結構上分為塊頭(header)和塊身(body)兩部分。塊頭用于鏈接到前面的塊并且為區塊鏈數據庫提供完整性的保證,塊身則包含了經過驗證的、塊創建過程中發生的價值交換的所有記錄。
區塊結構有兩個非常重要的特點:第一,每一個區塊上記錄的交易是上一個區塊形成之后、該區塊被創建前發生的所有價值交換活動,這個特點保證了數據庫的完整性。第二,在絕大多數情況下,一旦新區塊完成后被加入到區塊鏈的最后,則此區塊的數據記錄就再也不能改變或刪除。這個特點保證了數據庫的嚴謹性,即無法被篡改。
顧名思義,區塊鏈就是區塊以鏈的方式組合在一起,以這種方式形成的數據庫我們稱之為區塊鏈數據庫。區塊鏈是系統內所有節點共享的交易數據庫,這些節點基于價值交換協議參與到區塊鏈的網絡中來。
區塊鏈是如何做到的呢?由于每一個區塊的塊頭都包含了前一個區塊的交易信息壓縮值,這就使得從創世塊(第一個區塊)到當前區塊連接在一起形成了一條長鏈。由于如果不知道前一區塊的“交易縮影”值,就沒有辦法生成當前區塊,因此每個區塊必定按時間順序跟隨在前一個區塊之后。這種所有區塊包含前一個區塊引用的結構讓現存的區塊集合形成了一條數據長鏈。“區塊+鏈”的數據存儲結構如下圖所示。
我們引用《區塊鏈:互聯網金融的終局》(肖風)的一段話來總結區塊鏈的基本結構:“人們把一段時間內生成的信息(包括數據或代碼)打包成一個區塊,蓋上時間 戳,與上一個區塊銜接在一起,每下一個區塊的頁首都包含了上一個區塊的索引數據,然后再在本頁中寫入新的信息,從而形成新的區塊,首尾相連,最終形成了區塊鏈。”這個結構的神奇之處:區塊(完整歷史)+ 鏈(完全驗證)= 時間戳
“區塊+鏈”的結構為我們提供了一個數據庫的完整歷史。從第一個區塊開始,到最新產生的區塊為止,區塊鏈上存儲了系統全部的歷史數據。
區塊鏈為我們提供了數據庫內每一筆數據的查找功能。區塊鏈上的每一條交易數據,都可以通過“區塊鏈”的結構追本溯源,一筆一筆進行驗證。
區塊+鏈=時間戳,這是區塊鏈數據庫的最大創新點。區塊鏈數據庫讓全網的記錄者在每一個區塊中都蓋上一個時間戳來記賬,表示這個信息是這個時間寫入的,形成了一個不可篡改、不可偽造的數據庫。我們認為,時間戳是區塊鏈中一項偉大的技術創新,它可以證明什么呢?
核心技術2:分布式結構——開源的、去中心化的協議
我們有了區塊+鏈的數據之后,接下來就要考慮記錄和存儲的問題了。我們應該讓誰來參與數據的記錄,又應該把這些蓋了時間戳的數據存儲在哪里呢?在現如今中心化的體系中,數據都是集中記錄并存儲于中央電腦上。但是區塊鏈結構設計精妙的地方就在這里,它并不贊同把數據記錄并存儲在中心化的一臺或幾臺電腦上,而是讓每一個參與數據交易的節點都記錄并存儲下所有的數據。
1.關于如何讓所有節點都能參與記錄的問題,區塊鏈的辦法是:構建一整套協議機制,讓全網每一個節點在參與記錄的同時也來驗證其他節點記錄結果的正確性。只有當全網大部分節點(或甚至所有節點)都同時認為這個記錄正確時,或者所有參與記錄的節點都比對結果一致通過后,記錄的真實性才能得到全網認可,記錄數據才允許被寫入區塊中。
2.關于如何存儲下“區塊鏈”這套嚴謹數據庫的問題,區塊鏈的辦法是:構建一個分布式結構的網絡系統,讓數據庫中的所有數據都實時更新并存放于所有參與記錄的網絡節點中。這樣即使部分節點損壞或被黑客攻擊,也不會影響整個數據庫的數據記錄與信息更新。
區塊鏈根據系統確定的開源的、去中心化的協議,構建了一個分布式的結構體系,讓價值交換的信息通過分布式傳播發送給全網,通過分布式記賬確定信息數據內容,蓋上時間戳后生成區塊數據,再通過分布式傳播發送給各個節點,實現分布式存儲。
分布式記賬——會計責任的分散化(Distributedaccountability)
從硬件的角度講,區塊鏈的背后是大量的信息記錄儲存器(如電腦等)組成的網絡,這一網絡如何記錄發生在網絡中的所有價值交換活動呢?區塊鏈設計者沒有為專業的會計記錄者預留一個特定的位置,而是希望通過自愿原則來建立一套人人都可以參與記錄信息的分布式記賬體系,從而將會計責任分散化,由整個網絡的所有參與者來共同記錄。
區塊鏈中每一筆新交易的傳播都采用分布式的結構,根據P2P網絡層協議,消息由單個節點被直接發送給全網其他所有的節點。
區塊鏈技術讓數據庫中的所有數據均存儲于系統所有的電腦節點中,并實時更新。完全去中心化的結構設置使數據能實時記錄,并在每一個參與數據存儲的網絡節點中更新,這就極大的提高了數據庫的安全性。
通過分布式記賬、分布式傳播、分布式存儲這三大“分布”我們可以發現,沒有人、沒有組織、甚至沒有哪個國家能夠控制這個系統,系統內的數據存儲、交易驗證、信息傳輸過程全部都是去中心化的。在沒有中心的情況下,大規模的參與者達成共識,共同構建了區塊鏈數據庫。可以說,這是人類歷史上第一次構建了一個真正意義上的去中心化體系。甚至可以說,區塊鏈技術構建了一套永生不滅的系統——只要不是網絡中的所有參與節點在同一時間集體崩潰,數據庫系統就可以一直運轉下去。
我們現在已經有了一套嚴謹的數據庫,也有了記錄并存儲這套數據庫的可用協議,那么當我們將這套數據庫運用于實際社會時,我們要解決最核心的一個問題(問題三)是:如何使這個嚴謹且完整存儲下來的數據庫變得可信賴,使得我們可以在互聯網無實名背景下成功防止詐騙?
核心技術3:非對稱加密算法
什么是非對稱加密?簡單來說,它讓我們在“加密”和“解密”的過程中分別使用兩個密碼,兩個密碼具有非對稱的特點:(1)加密時的密碼(在區塊鏈中被稱為“公鑰”)是公開全網可見的,所有人都可以用自己的公鑰來加密一段信息(信息的真實性);(2)解密時的密碼(在區塊鏈中被稱為“私鑰”)是只有信息擁有者才知道的,被加密過的信息只有擁有相應私鑰的人才能夠解密(信息的安全性)。
簡單的總結:區塊鏈系統內,所有權驗證機制的基礎是非對稱加密算法。常見的非對稱加密算法包括RSA、Elgamal、D-H、ECC(橢圓曲線加密算法)等。在非對稱加密算法中,如果一個“密鑰對”中的兩個密鑰滿足以下兩個條件:1、對信息用其中一個密鑰加密后,只有用另一個密鑰才能解開;2、其中一個密鑰公開后,根據公開的密鑰別人也無法算出另一個,那么我們就稱這個密鑰對為非對稱密鑰對,公開的密鑰稱為公鑰,不公開的密鑰稱為私鑰。在區塊鏈系統的交易中,非對稱密鑰的基本使用場景有兩種:1、公鑰對交易信息加密,私鑰對交易信息解密。私鑰持有人解密后,可以使用收到的價值。2、私鑰對信息簽名,公鑰驗證簽名。通過公鑰簽名驗證的信息確認為私鑰持有人發出。
我們可以看出,從信任的角度來看,區塊鏈實際上是數學方法解決信任問題的產物。過去,人們解決信任問題可能依靠熟人社會的“老鄉”,政黨社會的“同志”,傳統互聯網中的交易平臺“支付寶”。而區塊鏈技術中,所有的規則事先都以算法程序的形式表述出來,人們完全不需要知道交易的對手方是“君子”還是“小人”,更不需要求助中心化的第三方機構來進行交易背書,而只需要信任數學算法就可以建立互信。區塊鏈技術的背后,實質上是算法在為人們創造信用,達成共識背書。
核心技術4:腳本
腳本可以理解為一種可編程的智能合約。如果區塊鏈技術只是為了適應某種特定的交易,那腳本的嵌入就沒有必要了,系統可以直接定義完成價值交換活動需要滿足的條件。然而,在一個去中心化的環境下,所有的協議都需要提前取得共識,那腳本的引入就顯得不可或缺了。有了腳本之后,區塊鏈技術就會使系統有機會去處理一些無法預見到的交易模式,保證了這一技術在未來的應用中不會過時,增加了技術的實用性。
一個腳本本質上是眾多指令的列表,這些指令記錄在每一次的價值交換活動中,價值交換活動的接收者(價值的持有人)如何獲得這些價值,以及花費掉自己曾收到的留存價值需要滿足哪些附加條件。通常,發送價值到目標地址的腳本,要求價值的持有人提供以下兩個條件,才能使用自己之前收到的價值:一個公鑰,以及一個簽名(證明價值的持有者擁有與上述公鑰相對應的私鑰)。腳本的神奇之處在于,它具有可編程性:(1)它可以靈活改變花費掉留存價值的條件,例如腳本系統可能會同時要求兩個私鑰、或幾個私鑰、或無需任何私鑰等;(2)它可以靈活的在發送價值時附加一些價值再轉移的條件,例如腳本系統可以約定這一筆發送出去的價 值以后只能用于支付中信證券的手續費、或支付給政府等。
-
區塊鏈
+關注
關注
112文章
15565瀏覽量
107185
原文標題:區塊鏈技術原理
文章出處:【微信號:C_Expert,微信公眾號:C語言專家集中營】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論