我們假想太平洋上有一個與世隔絕的海島,名叫桃花島。在桃花島上,每個家庭擁有定規(guī)模的資產, 這些資產以糧食、蔬菜、日用品、房地產等形式存在。島上的物質交換只在島內居民之間進行。所有的交易都由這個島上唯一能寫會算的人一 島主黃老邪記錄。每天隨著島內交易的進行,交易信息都在不斷增長,黃老邪將所有的交易信息都記錄在一本賬本中, 并由自己來保管。
但是,由黃老邪一人記賬的模式出現了諸多問題,隨著島上居民的交易行為日益頻繁,每天要記的賬目越來越多,黃老邪的記賬壓力也越來越大。為了緩解自己的工作壓力,黃老邪將記賬技能傳授給島上的所有居民,使他們都參與到記賬過程中來。黃老邪要求居民將交易金額及交易時間等信息都記錄下來,并且每一筆交易記錄經交易雙方簽字后方可生效。黃老邪還為島上每一個家庭分配了各自獨立的信箱,只有該家庭的成員才能使用鑰匙打開自家的信箱,查看信箱中儲存的賬目信息。有了信箱以后,島上的記賬模式發(fā)生了翻天覆地的變化:當新的交易記錄產生時,交易人將一-頁記載了新的交易信息的記錄放入每家每戶的信箱中。這些交易信息按照放入信箱的先后順序形成了一個天然的賬本,每一戶居民都可以打開信箱進行查看。
在這種情況下,即使有個別人將信箱中的信息進行篡改,整體的交易記錄依舊不會出現偏差。居民只要拿出每個人那里保存的賬本,根據多數原則確定統(tǒng)-的交 易歷史,并糾正個別人手中錯誤的賬本頁目,就可以在無需島主黃老邪監(jiān)管的情況下完成記賬。經過黃老邪改變后的分布式記賬方式與我們下文所要闡述的區(qū)塊鏈有異曲同工之妙。
什么是區(qū)塊鏈
區(qū)塊鏈本質上是一個分布式賬本技術。如果以數學函數來類比的話,我們可以將分布式網絡、共識機制、去中心化、加密算祛、智能合約、權限許可、價值和資產等要素理解為函數中的變量或因子。這些變量和因子的有機組合形成了區(qū)塊鏈有別于傳統(tǒng)技術的些新的技術特征。 在對 區(qū)塊鏈進行更加深入的技術解 讀前,我們需要先對區(qū)塊鏈中的一些核心概念進行梳理 。
分布式賬本技術函數見下圖
區(qū)塊鏈是一個動態(tài)的點對點網絡
區(qū)塊鏈的動態(tài)點對點網絡
上文的故事中,由黃老邪一人記賬的時期與我們如今的社會生活類似,都是由銀行等中心化機構來對信息進行記錄。相對應地,黃老邪改變記賬模式后,島上的居民都可以參與到記賬環(huán)節(jié)中,每個居民之間都可以發(fā)生交易并自行進行記賬,這與區(qū)塊鏈點對點的特性很相似。
與傳統(tǒng)的中心化集中式架構相比,區(qū)塊鏈弱化了中央服務器的概念。各個節(jié)點不再區(qū)分服務器和客戶端的關系,每個節(jié)點既可請求服務也可提供服務,各個節(jié)點可以直接交換資源而不再需要通過服務器的橋接,用戶與用戶之間可以實現資源的直接分享與利用。在區(qū)塊鏈分布式網絡中,所有節(jié)點的地位都是同等的。一筆剛通過驗證且被傳遞到區(qū)塊鏈網絡中任意節(jié)點的交易會被發(fā)送到周邊的相鄰節(jié)點,而每一個相鄰節(jié)點又會將交易發(fā)送到其他的相鄰節(jié)點。以此類推,在短時間之內,一筆有效的交易就會傳播到網絡中的各個角落,直到所有連接到網絡的節(jié)點都接收到它。
區(qū)塊鏈也是一個動態(tài)的網絡,不斷有新節(jié)點的加入和原區(qū)塊鏈網絡中節(jié)點的退出。新節(jié)點的不斷加入為系統(tǒng)引入新的資源,整個網絡由此得以構建和發(fā)展,資源的豐富性與多樣性隨之擴充,點對點網絡的分散性、健壯性、可用性與整體性能也將隨著節(jié)點的數量增加而增強。
區(qū)塊鏈是一個分布式賬本
區(qū)塊鏈的分布式賬本結構
在桃花島上,由黃老邪一人記賬的時期,整座島上只有一本賬本來對所有的信息進行記錄。改變記賬模式后, 島上的每一戶人家都擁有一本賬本,這就相當于區(qū)塊鏈這個分布式的公共賬本。
區(qū)塊鏈推翻了傳統(tǒng)的記賬模式。與傳統(tǒng)記賬模式不同,區(qū)塊鏈中的交易信息不再由單個機構來記錄,而是由其中的每一個節(jié)點共同參與記賬。在這個分布式網絡上,每個節(jié)點都有賬本的完整備份。如果有人想篡改賬本上的記錄,他必須改動各節(jié)點存儲的賬本備份,這就使篡改賬本記錄的行為難以實現。
區(qū)塊鏈用哈希算法實現信息的不可篡改
隨著新交易的不斷產生,桃花島每家每戶賬本里記錄的交易信息也快速增長,越來越多的記錄信息頁會保存到信箱中。類似地,在區(qū)塊鏈中,一個又一個新產生的區(qū)塊會不斷鏈接到現有區(qū)塊鏈的尾端。如何能夠保證這個記錄信息頁的每一頁,以及區(qū)塊鏈賬本中的每一個區(qū)塊都是真實準確、沒有被篡改過的呢?
設想一下, 如果我們通過一種算法對賬本信息進行加密,給區(qū)塊鏈上第一個區(qū)塊打上一個唯一的標簽, 之后的每一個區(qū)塊也通過加密后打上一個唯一標簽,同時又能夠包含前一個區(qū)塊鏈的標簽。這時,只要采用一種方法保證這個標簽無法被輕易替換更改,那么就能保證這個區(qū)塊記錄的信息沒有被篡改過。
哈希算法就是上面提到的區(qū)塊鏈中保證交易信息不可篡改的單向密碼體制。該算法的思想是接收一段明文, 以一種不可逆的方式將它轉化成一段長度較短、位數固定的輸出做列。這個加密過程是不可逆的,這就意味著無法通過輸出散列的內容推斷出任何與原文有關的信息。任何輸入信息的變化,哪怕僅僅是一~位數字的更改,都將導致散列結果的明顯變化。基于輸出散列與輸人原文一 一對應的特性,哈希算法可以被用于驗證信息是否被修改。通過哈希算法可對一個交易區(qū)塊的所有交易信息進行加密,并把記賬內容壓縮成一串數字和字母組成的字符串,這個字符串無法反推出原來的內容。區(qū)塊鏈的哈希值可以唯一、準確地標識--個區(qū)塊,并且任何節(jié)點通過簡單地對區(qū)塊頭進行哈希計算都可以獨立地獲取該區(qū)塊哈希值。如果想要確認區(qū)塊的內容是否被篡改,那么利用哈希算法重新進行計算,記賬信息沒有變化,計算出的哈希值也將不會產生變化。
在區(qū)塊鏈中,通常使用SHA-256的哈希算法進行區(qū)塊的加密,該算法的輸出長度為256位,即生成長度為32字節(jié)的隨機散列。
區(qū)塊鏈用公鑰、私鑰來標識身份
在區(qū)塊鏈中,信息的傳播按照公鑰加私鑰的方式進行。公鑰相當于桃花島上每家每戶居民的信箱地址,當別人獲知你的公鑰時,可以與你通信。相應地,私鑰相當于信箱的鑰匙,只有擁有私鑰的人才能查看信箱中的信件信息。在區(qū)塊鏈中,數字簽名可以用于驗證信息發(fā)送者的身份,用戶可以公布自己的公鑰,然后發(fā)送可以被公鑰所驗證的、已經通過私鑰加密過的信息。如果信息的接收者能夠使用公鑰解密加密過的信息,即可證明這條信息發(fā)送者的身份屬實。上述過程可以用圖3-4 表示:區(qū)塊鏈中有兩個用戶Alic和Bob,Alicc想讓Bob知道自己是真實的Alice,而不是他人冒充的。Alice 只需要使用私鑰對文件簽名并發(fā)送給Bob, Bob 使用Alice的公鑰對文件進行簽名驗證,如果驗證成功,則該文件一定是使用Alice的私鑰加密的。由于Alice的私鑰只由Alice一人持有,Bob 就可以確定文件的發(fā)送者正是Alice本人。
此外,公鑰與私鑰還可以保證分布式網絡中點對點信息傳遞的安全。我們不妨假想這樣一個情形: Alice想在分布式網絡中發(fā)送一封情書給Bob。但由于分布式網絡的信息傳遞特性,這封情書將被發(fā)送至每一個用戶手中。Alice 不希望情書的內容被其他用戶看到,因此Alice使用Bob的公鑰對情書進行加密。網絡中除Bob外的其他用戶接收到這封經過加密的情書,看到的只是一段密文。只有Bob可以使用自己的私鑰對密文進行解密,得到一份情書的明文。通過這個加密與解密的過程,Alice與Bob之間實現了點對點的數據傳遞。
在區(qū)塊鏈的信息傳遞過程中,信息傳遞雙方的公私鑰加密與解密往往是成對出現的,即信息發(fā)送方使用私鑰對信息簽名、使用信息接收方公鑰對信息加密,信息接收方使用對方公鑰驗證信息發(fā)送方的身份、使用私鑰對加密信息解密。
區(qū)塊鏈用Merkle樹結構簡化驗證程序
Merkle樹是區(qū)塊鏈的基本組成部分,Merkle樹的葉子節(jié)點存儲的是數據文件的哈希值,非葉子節(jié)點存儲的是對其下面所有的葉子節(jié)點值的組合結果進行哈希計算后得出的哈希值。區(qū)塊鏈利用Merkle樹這種數據結構存放所有葉子節(jié)點的哈希值,并以此為基礎生成一個統(tǒng)一的哈希值。區(qū)塊中的任何一筆交易的發(fā)生和交易信息的變動都會使Merkle樹發(fā)生改變。在交易信息的處理、比對及驗證的過程中,尤其是在分布式環(huán)境下進行比對或驗證時,Merkle 樹會大大減少數據的傳輸量和計算的復雜度。
Merkle 樹結構圖
區(qū)塊鏈為每一筆交易蓋上時間戳
黃老邪在傳授記賬方法時,要求居民將發(fā)生在桃花島上的每一筆交易都記錄下來,并且要求他們將交易發(fā)生的時間也一并記錄在賬本上,這就相當于區(qū)塊鏈為每- -筆交易在發(fā)生時蓋上了時間戳。
在區(qū)塊鏈中,時間戳的應用是對每一次交易記錄的認證,它就像交易合同公證一樣,能夠顯示交易記錄的真實性。時間戳作為區(qū)塊元數據的一部分,具有天然的時間特性。從某種意義上講,區(qū)塊鏈的本質可以被理解為構造了一個永不停息、無堅不摧的時間戳系統(tǒng)。
在現實經濟交易中,常常會出現信息欺詐等虛假交易現象。為了減少這些不法行為給交易中誠實守信的一方帶來的損失,人們通常會尋求有公信力的第三方機構對交易進行核驗。區(qū)塊鏈通過時間戳來保證分布式賬本的唯一一性, 避免雙花問題的產生。時間戳從區(qū)塊生成的一刻起就存在于區(qū)塊之中,它扮演了區(qū)塊鏈中的公證人的角色。與現有的公證機制相比,基于時間截的公證系統(tǒng)更為經濟,并且完全可信。
區(qū)塊鏈中的時間截比傳統(tǒng)的公證制度更為可信,是因為時間簽名是直接寫在區(qū)塊鏈上的,區(qū)塊鏈中已經生成的區(qū)塊不能以任何方式進行修改。一旦區(qū)塊被修改,生成的哈希值就無法匹配,操縱行為也將由此而被系統(tǒng)檢測到。區(qū)塊鏈根據分布式的協(xié)議,構建了一個分布式的開放結構體系,交換的信息可以通過分布式記賬的方式確定信息數據內容,加蓋時間戳后生成區(qū)塊數據,再通過分布式廣播發(fā)送給各個節(jié)點,最終實現分布式存儲。
對數據應用安全散列算法加蓋時間戳,并將該隨機哈希值在全網中進行廣播能夠證實一組數據在某一 -時刻是真實存在的,因為數據只有在該時刻的確存在,才能獲取相應的隨機哈希值。每個時間戳會將前一個時間戳納入其隨機哈希值之中, 每一個后面位置的時間截都會對前面的時間戳進行增強,這過程不斷重復、依次推進,最終形成一個完整 的鏈條。時間戳與哈希算法、Merkle樹共同作用,增強了區(qū)塊鏈的安全性能。
時間戳證明存在性的功能可能是區(qū)塊鏈的另一種用途,它或許會徹底改變人類的未來。由于區(qū)塊哈希值的不可偽造性,一個區(qū)塊能提供出哈希值即可證明區(qū)塊哈希值存在于該區(qū)塊生成時刻之后,就像你在一張白紙上寫下了一串數字,說明的是數字出現的時間晚于白紙 這也稱為時間點后向證明。時間點前向證明則需要構造一個包含數字摘要的交易,當該交易進入區(qū)塊后,便可以證明你在該區(qū)塊時刻之前擁有該數字摘要。
區(qū)塊鏈使智能合約成為現實
1994年,密碼學家尼克薩博(Nick Szabo)首次提出了智能合約的理念。 然而在過去的中心化體系下,智能合約幾乎是沒有意義的,因為保存在中心化系統(tǒng)中的合約可以被系統(tǒng)所有者隨時修改甚至刪除。但是有了區(qū)塊鏈以后,智能合約可以被事先寫入到區(qū)塊鏈的分右式網絡體系中。當合約中的某一事項發(fā)生時, 智能合約就會被觸發(fā)并自動執(zhí)行相應的合約條款。在這個過程中,某一個人或者某一個機構都不能夠修改或刪除合約,也無法阻礙智能合約的自動執(zhí)行。
智能合約指的是一段部署在分布式賬本中的代碼,它可以處理信息,接收、儲存和發(fā)送價值,是一個能夠自動執(zhí)行合約條款的計算機程序。從本質上講,智能合約的工作原理類似于計算機程序中的if-then判斷語句,智能合約以這樣一種方式 與現實世界里的資產進行交互。
智能合約見圖3-6。
智能合約擁有自治、自足和分布式的特點,它由代碼定義并獨立執(zhí)行。智能合約的執(zhí)行流程從雙方達成合約協(xié)定時開始,通過將合約中的內容進行數字化編碼并寫入區(qū)塊鏈中實現對合約內容的形式化。合約中約定的條件事項的發(fā)生將自動觸發(fā)合約的執(zhí)行程序。借助區(qū)塊鏈技術,智能合約可能會在未來對人們的生活帶來極大的改變。智能合約能夠使得人與人之間的價值交易過程自動化和信任化,通過智能合約實現價值交易不僅節(jié)省了時間和金錢,還提高了交易的效率。在區(qū)塊鏈技術中,智能合約在分布式交易所、金融衍生品、身份認證、醫(yī)療健康和科學發(fā)現等領域均有著廣泛的應用。