每日干货分享

用最簡單的圖文帶你看懂區塊鏈


除非過著與世隔絕的生活,否則你或多或少有聽說過比特幣和區塊鏈,畢竟,這可是當下媒體們最喜歡報道的話題,甚至連那些從未參與進來的人們也開始津津樂道了。很多不懂技術的朋友紛紛找我探聽,我猜還有不少人想弄明白區塊鏈是怎麼回事兒,所以,是時候寫篇通俗易懂的文章來解釋一下了。

為什麼我們需要區塊鏈這麼複雜的玩意兒?


區塊鏈究竟是什麼?又,為什麼我們需要用到這麼複雜的系統呢?

我想與其用一大堆專業術語來解釋,倒不如先看看它解決了什麼問題:

試想一下,你最好的兄弟小舟正在世界各地窮游,游到一半沒錢了,便打電話找你救急,你二話沒說就開始轉錢。


用最簡單的圖文帶你看懂區塊鏈

先是打電話給銀行客戶經理,叫他幫你轉1000美金到小舟賬戶上,經理收到通知后立馬查看你的賬戶是否有足夠的餘額,作為大客戶,你的存款綽綽有餘,於是他便在賬本上進行記錄:

用最簡單的圖文帶你看懂區塊鏈

註釋:為了簡化問題,這裡我們不打算涉及相關的計算機原理

然後你給小舟打電話:兄弟,我已經把錢匯過去了,請注意查收!

用最簡單的圖文帶你看懂區塊鏈

通常情況下,我們進行國際匯款時都需要經過銀行這種第三方機構,有了銀行之後你就不需要把真正的現鈔寄到海外去了,只需要通過轉賬系統把餘額的變動記錄在銀行的賬本上就可以了,這看起來似乎很方便,不過由於銀行這種中介的存在,也帶來了另外的問題:這個第三方是否真的可靠?有沒有可能出現差錯呢?

完全有可能,比如說他們留存的賬本因不可抗力因素毀掉了,再比如說你的客戶經理不小心把你轉的1000美金記成了1500美金,或者說他們背地裡圖謀不軌,營私舞弊?一旦你把雞蛋都交到了第三方的籃子里,就一點辦法都沒有了……

那有沒有可能去掉銀行這種中心環節,直接讓人們相互之間就可以轉賬呢?

有的!!!以分散式記賬系統為工作方式的區塊鏈正是來解決這個問題的,它意味著你不再需要銀行等第三方系統的代勞,就可以輕鬆完成個人與個人之間的轉賬,神奇吧!

區塊鏈運行原理

那麼,這種神奇的區塊鏈究竟是怎麼運行的呢?其背後的原理又是什麼呢?接著我們來看看其背後的簡要原理。

區塊鏈最神奇的地方在於它的運行方式——不依靠任何特定的機構運行,也就是說不依賴任何一個中心機構來記賬,而是由參與者的電腦們來共同記賬,所以只要有足夠多的參與者,它就能夠不斷地自動運行下去。

那區塊鏈系統的運行最少需要多少個參與者呢?超過3個就可以了!

我們來舉個簡單的例子,假設有10個人不想依賴第三方系統,於是有人組建了一個人人都可以複製的系統,並擬定了一份共同契約,基於這份契約,系統里的所有人都要進行公開記賬,然後每個人都可以看到其他人所記的賬戶明細。

用最簡單的圖文帶你看懂區塊鏈

其運行過程大致是這樣的:

開始的時候給每個人分配一個相同的空文件夾,人手一張空白的賬單,一支記賬專用的筆,以便記錄這個系統里發生的每一筆交易,文件夾則主要用來收集不斷產生的賬單。

當有交易發生時,比如現在2號想要轉10塊錢給9號,為了達成這筆交易,2號就需要拿個喇叭向每個人宣告:”我要轉10塊錢給9號,請大家幫忙記錄到手中的賬單上。”

用最簡單的圖文帶你看懂區塊鏈

於是每個人檢查了一下2號是否有足夠的餘額來給9號轉10塊錢。如果她有足夠的餘額,每個人就會在自己賬單的空白處記錄下這筆交易。

用最簡單的圖文帶你看懂區塊鏈

如果大家確認沒有疑議,則這筆交易即被視為完成。

隨著時間的逝去,系統中將會有更多的人需要轉賬,於是大家便會重複之前的步驟:交易者不斷地對外廣播,其他人不斷地進行檢查和記錄,直到手頭的那張賬單用完。假設一張賬單能夠記下10筆交易,一旦第十筆交易達成,就需要把整張記錄好的賬單收進文件夾中保存,並準備一張新的賬單。

用最簡單的圖文帶你看懂區塊鏈

將賬單收進文件夾之前,我們需要在其底部粘上一種附有數字的特殊封印,它的兩面都具有強大的附著力,不僅能牢牢附著在這張賬單上,還能把下一張賬單吸附在其上面,這樣一來,一旦後續的賬單貼上之後,前面的賬單就很難再被做手腳了,因為所有的賬單被牢牢地粘在一起了,偷偷篡改的話很可能將賬單撕爛!所以,一旦賬單記完並且所有人確認無誤后,大家就會給它戳上這種封印並放到文件夾中封存起來,並且時間越久篡改難度越大,這種封存的方式正是區塊鏈的關鍵所在。

註釋:這一過程稱為確保當前數據安全的封裝行為,行業內稱為挖礦,為了簡明起見,我們且稱之為賬單的封存,由於後續的賬單會包含上一張賬單的簡單摘要,無形之中就將所有帳單銜接起來了,所以要篡改某張賬單的話,其後所有的賬單也需要跟著進行更改,為此我們勉強用具有雙面膠性質的封印作個簡單的類比,以說明區塊鏈中的區塊是怎樣串聯在一起的

以上就是區塊鏈系統大致的運行原理,早前我們還需要第三方系統來替我們擔保交易記錄,現在卻只需運行一下這種去中心化的分散式系統,便足以提供安全一萬倍的保障,神奇吧!

區塊鏈如何封存交易記錄

那麼封存數據的具體原理是什麼呢?就讓我們來研究一下裡面的黑科技吧!

在我們了解賬單的封存之前,我們先要知道封存的具體原理,作為區塊鏈系統的主要功能,我們可以把它想象成一個翻譯裝置,姑且稱之為翻譯黑箱吧,你甩給它一句話,它會立馬吐出另外一句翻譯好的話。

註釋:這個裝置其實叫做哈希函數,由於涉及到專業的數學及密碼學知識,在此我們暫不展開

用最簡單的圖文帶你看懂區塊鏈

我們餵給它4這個數字,它便會吐出 ‘dcbea’ 這一串加密字元,你可能會好奇它是怎樣將數字4轉化成這串內容的呢?由於裡面涉及大量複雜的運算,具體細節我們在此沒必要了解,只需知道這是一個不可逆的過程即可,也就是說如果只知道 ‘dcbea’ 這串字元,我們是很難反向推導出4的。不過當我們得知輸入4即可得到 ‘dcbea’ 后,驗證起來是非常簡單的。不管你輸入多少次4這個數字,這個裝置都將吐出 ‘dcbea’ 這串字元,幾乎不可能有其它的輸入也能得到相同的結果。

用最簡單的圖文帶你看懂區塊鏈

讓我們試試別的數字吧,如26?

用最簡單的圖文帶你看懂區塊鏈

嗯,我們可以看到輸出的是 ’94c8e’,有點意思,輸出的字元串也可以包含數字。那麼問題來了:假設有一串輸出是以 000 為開頭,比如 000ab 或 00098 或者其它以三個0開頭的字元,我們有沒有可能推導出其可能的輸入呢?

用最簡單的圖文帶你看懂區塊鏈

前面我們說過這種裝置的特性——幾乎無法通過結果推導出原文,那我們又如何來解決這個問題呢?目前只能想到一種土辦法,那就是一個一個地試,直到試出來為止……

用最簡單的圖文帶你看懂區塊鏈

經過了數千次的嘗試,我們總算找出一個符合要求的數字 72533。

註釋: “以三個0為開頭”只是作為一個例子,用來說明哈希函數是如何工作的,由於只限定輸出的前三位數是0,所以符合要求的當然也可以是別的數字,但同樣需要經過大量的嘗試才能得到。實際上,區塊鏈具體的運算任務要比我們這邊假設的例子複雜得多

用最簡單的圖文帶你看懂區塊鏈

可見通過給定的輸出來推算輸入是非常困難的,不過驗證起來卻是極其的簡單,只要有人試出答案,其他人即刻便可完成驗證,因為一種輸出幾乎只對應一種輸入。比如說有人試出只要輸入 72533 這個數字,便會得到一串以三個0為開頭的字元,為了核實他的說法,我們只需要將 72533 這個數字丟進裝置里便可立即知道結果是否如他宣稱的那樣。

這再次說明了這種裝置最重要的特性,即正向推導驗證容易,反向推導非常困難。那麼,基於此類特性,我們該如何利用這種封存裝置來封存一段數據呢

先來看一個問題,假設我們手裡有兩段字元要輸入,一段是數據 20893 ,另一段未知,如何才能推導出一串以三個0為開頭的字元呢?

用最簡單的圖文帶你看懂區塊鏈

可見通過給定的輸出來推算輸入是非常困難的,不過驗證起來卻是極其的簡單,只要有人試出答案,其他人即刻便可完成驗證,因為一種輸出幾乎只對應一種輸入。比如說有人試出只要輸入 72533 這個數字,便會得到一串以三個0為開頭的字元,為了核實他的說法,我們只需要將 72533 這個數字丟進裝置里便可立即知道結果是否如他宣稱的那樣。

這再次說明了這種裝置最重要的特性,即正向推導驗證容易,反向推導非常困難。那麼,基於此類特性,我們該如何利用這種封存裝置來封存一段數據呢

先來看一個問題,假設我們手裡有兩段字元要輸入,一段是數據 20893 ,另一段未知,如何才能推導出一串以三個0為開頭的字元呢?

用最簡單的圖文帶你看懂區塊鏈

在這種情況下,21191 這段數即被視為數據 20983 的特定封印。假設有一張紙上記錄的是 20983 這段數據,為了封存這張紙(也就是說沒有人能篡改裡面的內容),我們需要在上面給它蓋一個 ‘21191’ 的封印,一旦這個封印戳上去,這張紙便被視為已封存。

用最簡單的圖文帶你看懂區塊鏈

註釋:封存號碼在區塊鏈中叫做”工作量證明”,用來證明某人為了試出該號碼所做的計算,這種計算需要消耗大量的計算機算力及其運行所需的電力

如果有人想要驗證這張紙上的數據是否被篡改過,他僅需將數據和封存號碼一起丟進裝置中,只要吐出的字元跟先前宣稱的數字一樣就能說明該數據是原始數據,如果不是則說明它已經被人動過手腳了,只能丟掉。

接下來,我們將使用同樣的原理來封存所有的賬單,我們可以把 21191 這段數據想象成是一整張賬單,為了封存這張賬單,我們需要算出一個數字——當它被附加到賬單上並交給裝置時,我們將得到一串以三個0開頭的字元。

用最簡單的圖文帶你看懂區塊鏈

在耗費許多算力和電力把封存號碼算出來后,賬單將會被這段號碼封存,也即意味著賬單中的交易記錄無法篡改,網路中的所有人都能通過封存號碼驗證交易記錄是否準確。嗯,現在我們終於知道了賬單是如何封存的了!

區塊鏈的獎勵機制以及安全性

我們知道,為了封存賬單需要耗費大量的算力和電力,那麼大家為什麼有動力去參與這種運算呢?這種運算機制又有什麼弱點呢?接下來我們就一起來詳細分析一下。

先回過頭來看看當一張賬單記錄下第10筆交易后的情況,這時每個人手中的賬單都記滿了,為了封存這張賬單,我們需要計算這張賬單的封存號碼,但因為計算過程費時費力,大家都沒有動力去計算。於是系統推出了一套激勵機制——第一個算出封存號碼的人可以得到系統產生的額外獎勵,比如5號第一個算出並宣布了封存號碼,其他人驗證無誤后,系統自動在5號的賬戶上增加了50個比特幣。

註釋:比特幣的獎勵機制被設計為速度遞減模式,大約每四年獎勵會減少一半,最初時為50個,2012年11月減半為25個,目前再次減半為12.5個……隨著使用比特幣人數的增加,比特幣的價值也將大幅攀升,雖然獎勵幣數變少,但實際的價值並不會減少

用最簡單的圖文帶你看懂區塊鏈

這也即是比特幣存在的意義——它是基於區塊鏈的首個交易貨幣(系統中的通貨),作為回報,參與其中運算的人將獲得比特幣作為獎勵。當足夠多的人持有時,比特幣開始變得有價值,使得其他人也想要獲得比特幣;而當更多的人想要比特幣時,比特幣將變得更有價值(物以稀為貴),如此一來,基於區塊鏈系統的比特幣將越來越有價值……

所以,這種獎勵使得大家一直在網路上計算下去,每當大家把記滿的賬單放入文件夾封存后,便會拿出一張空白的賬單重複之前的整個過程,並一直持續下去,這即是區塊鏈的本質。

註釋:把區塊鏈中每一個記錄交易的區塊想象成一張賬單,把整個串起來的區塊想象成文件夾,通俗一點我們可以把區塊鏈想像成一個分佈在大家電腦中的大賬本,由參與者共同記賬維護

嗯,這樣的機制看起來確實不錯,可是如果有人(比方說7號)質疑這一封存號碼的正確性呢?系統出現這樣的情況不在少數,不過通常的原因主要有以下幾點:

– 可能7號收到的交易數據有誤

– 可能7號記錄的交易數據有誤

– 可能7號為了一己私利而篡改了交易記錄

不論何種原因,7號只有一種選擇——放棄自己記錄的賬單並複製其他人的賬單,不然的話沒人相信他以後所記的賬,畢竟系統的原則是少數服從多數,不管封存號碼是什麼,只要大多數人認同了,它便是最可靠的封存號碼。這也引出了我們之前的另外一個疑問——區塊鏈的運算機制存在什麼弱點?

為了回答這個問題,我們先來想象一個場景:

假設現在大家的文件夾中已經有五張封存完畢的賬單了,如果我為了個人利益去篡改第二張賬單上的交易記錄,勢必導致封存號碼與交易記錄的不一致,很容易被別人發現。先前也講過封存賬單的原理——為了封存賬單,我們輸入裝置的有兩組內容,一組是包含交易記錄的賬單,另一組為封存號碼。所以,只要我能動用了算力強大的計算機根據篡改后的交易記錄重新算出了一組封存號碼,便可以瞞天過海了。

可實際上,為了阻止某個算力強大的個人回去篡改交易記錄和封存號碼,區塊鏈採用了更為巧妙的封存計算方式——摘取前一張封存賬單的部分輸出作為第三組的內容,與另外兩組一道作為輸入。

用最簡單的圖文帶你看懂區塊鏈

通過這種精巧的設計,我們確保了每張賬單都是基於前一張賬單而封存的,因此,如果有人想要篡改歷史記錄,則需要連同某張賬單以後的所有賬單一同更改,並重新計算這些賬單的封存號碼,方才能保持整個賬本的一致性。我們已經知道算出一張賬單的封存號碼有多難了,更不用說要連續算出一連串的賬單,簡直不敢想象……

更何況,在這個系統中某個單一個人的工作量和速度是遠遠敵不過其它9個人的累計工作量和速度的,因此,就算有人在某張賬單之後重新算出一連串的新賬單,也幾乎是不可能趕上原來那串賬單的記賬速度的。

用最簡單的圖文帶你看懂區塊鏈

除非出現另外一種情況,即系統中超過一半以上的人共同篡改賬單,這種情況下,原先的那串賬單將被廢棄,然後大多數人轉移到另外一串新的賬單上記賬。這也是區塊鏈系統的唯一弱點,儘管這種情況不太可能發生,但我們還是要了解這種機制的不足,以便於防患於未然。

註釋:這種情況即是所謂的”51%算力攻擊”,即當網路中的大部分人決定欺騙其他人時,原先的協議將無法達成

以上就是區塊鏈的主要原理,看完之後相信大家就不難理解比特幣的發明者中本聰在2009年發表的預言:基於區塊鏈的比特幣一旦流行開來,其現實意義將會變得非同凡響,就像自證預言一樣,越多的人相信,這種自製體經濟就越有可能變成現實

註釋:什麼是自證預言?[羅伯特·莫頓教授](http://goo.gl/iuz03)發現了這種現象,並將其命名為[自證預言](http://goo.gl/RyWB),即如果人們相信某件事情會發生(事實上其原本並不見得一定會發生),那麼這件事情最終真的會發生。比如,一家銀行本來運作得很正常,但不知什麼原因,出現了「這家銀行要倒閉」的流言。流言越傳越廣,導致越來越多的人信以為真,有人為防意外而跑到銀行把自己的存款提走。恐慌情緒蔓延,並且變得愈加真實,更多的人衝進銀行提走自己的存款……最終,擠兌發生了,銀行真的倒閉了

本文轉載自區塊網