區塊鏈——區塊鏈是什麼?一文讀懂70%區塊鏈入門知識

引言

區塊鏈是比特幣的底層技術,不等同於比特幣。有人說比特幣就是一場泡沫,甚至放話“比特幣是傳銷”。區塊鏈作爲繼互聯網後的新一波技術浪潮,本身無罪,況且炒幣只是區塊鏈裏最初級的玩法。讀完這篇文章,我們就能弄懂大部分區塊鏈基礎知識,從而離保守和狹隘遠一點。

一、區塊鏈是一個去中心化的分佈式賬本

區塊鏈的英文叫做 Blockchain,用比較官方的話來說,區塊鏈是一種集分佈式數據存儲、點對點傳輸、共識機制、加密算法等計算機技術於一體的新型應用模式。簡單來說,它就是一個分佈式記賬的應用模型,通過去中心化、去信任的方式集中維護一個可靠的數據庫。你可以把它理解爲:我們每個人都有一個小的賬本(小的數據庫),會記錄下來我們所有的數據。通過網絡將所有人的小數據庫連接到一起,形成一個分佈式的大數據庫,由每個人共同來維護、更新、分享數據。我們首先需要弄清“去中心化”和“分佈式賬本”兩個概念。去中心化相對“中心化”而言。借用PG Two買夾克和熊本熊借錢的例子,我們來看看中心化和去中心化體系的區別。
在這裏插入圖片描述

網購夾克的整個流程依託於支付寶展開,因此,這個買賣過程是中心化的。無論是PG TWO還是賣家君,在這點上只能完全信任支付寶和它背後的馬雲。往大了說,中心化系統由資金雄厚和技術實力強大的機構、企業做信任背書。

二、中心化體系和去中心化體系優劣

中心化體系具備管理高效的優勢,但它的不足也比較明顯。仍以支付寶爲例,全部交易記錄和賬本都存儲在支付寶服務器上,假設某天所有相關的服務器不幸被壞蛋搗毀,那麼PG TWO付的款(或賣家君還沒有到手的夾克錢),還有其他買家、賣家的資金,甚至你我存在餘額寶的錢,都會消失在這個互聯網世界裏,連灰都不剩。該找誰說理去?就算我氣洶洶地找到支付寶對質:“我還有5萬在餘額寶裏面!” 可中心賬本已經被徹底破壞,誰又能證明我的話爲真呢?若得不到有效證明,最終我也只能忍着淚跟這沓錢say goodbye了。這時,去中心化系統的優勢就凸顯出來了。設想一下,如果全網絡存在許多的記賬節點,能夠共同記錄支付寶上每一筆交易、轉賬和提現等,也就是說支付寶所有賬本在全世界有很多備份;就算服務器被黑客攻擊,相同的賬本副本也都好好地保存在其他節點上。在區塊鏈的世界裏,不需要大企業做信用背書。

三、區塊鏈是一個分佈式賬本

因此,我們也可以說:作爲分佈式賬本,區塊鏈是創造信任的工具。從字面上理解,“分佈式”是指分佈在不同的地方、各節點分開幹活。我們先把問題簡單化,用借錢舉個例子,講講分佈式賬本的工作原理。

在這裏插入圖片描述

  1. 比卡丘借給熊本熊10塊錢。
  2. 比卡丘和熊本熊分別在賬本上記下:“比卡丘 → 熊本熊:10円”
  3. 比卡丘把這條交易信息廣播給其他節點;
  4. 區塊鏈上其他節點驗證這條交易信息,確認無誤後便記在各自賬本上。

在第2步,如果借錢方熊本熊爲了買零食,在自己的賬本上虛報5円呢?想賴賬不容易,因爲接下來比卡丘會把 這條“比卡丘 → 熊本熊:10円” 的交易信息廣播給全網節點,接着各節點再去驗證。通過驗證的信息一旦記在區塊鏈上,就很難篡改了,除非——熊本熊有一臺超過全網總算力51%的超級計算機(文末還會提及這個問題)。那爲什麼是比卡丘廣播,而不是熊本熊去廣播?節點協助記賬,是爲了防止欠債人耍賴等損害信任的情況出現;一般來講,誰把錢借出去,誰到最後可能遭受財產損失,誰廣播。到了約定的還款日,如果熊本熊食言說沒有借錢,比卡丘就可以祭出區塊鏈了,拿賬本上的交易信息來對質。

四、密碼學確保區塊鏈數據庫(幾乎)無法篡改

弄懂了去中心化分佈式賬本,我們繼續探究區塊鏈技術中的兩個密碼學概念:哈希函數非對稱加密。顛覆性的區塊鏈技術當然不止這些,但區塊鏈入門要求我們需要先掌握這兩個概念。
只有先了解哈希函數和非對稱加密,後面我們納入相關定義解釋區塊鏈的運作原理時,大家纔不會一臉蒙圈。

1、哈希函數

哈希也可以寫作hash,哈希函數屬於密碼學範疇,用來驗證交易信息是否被人動過手腳。哈希函數具備以下特徵(如果看不明白可跳過這段):

  • 如果明文A對應的哈希值爲H(A),那麼,通過A可以算出H(A),而通過H(A)無法逆推出A;
  • 如果明文A ≠ 明文B,那麼,H(A) ≠ H(B);
  • 如果對明文A做了可以忽略不計的篡改,那麼,計算出的哈希值與原H(A)完全不一樣。

上文中,明文好比我們登錄知乎時輸入的賬號、密碼,它們是可以看懂的一串字符。而哈希值是一個長度固定、由數字和字母組成的字符串。根據以上特徵,下方的例子能幫助你理解:

藉助Hash計算工具,我輸入明文123456,得到相應的哈希值(按SHA256)
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
在這裏插入圖片描述
目前,人類還沒有辦法逆推這個亂七八糟的字符串;也就是說任何人都無法推算出這個哈希值對應明文123456。再接着我在明文框輸入:1234567;雖然只增加了一個7,得到的哈希值卻完全不一樣了:8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414建議你親自嘗試,3秒鐘就能明白以上內容:移步 哈希計算工具 :輸入一串明文(連“我愛你”也可以加密哦),關注第三列SHA256的結果即可;再改動其中一個字符,對比兩次出現的哈希值結果。

2、非對稱加密

這是相對於對稱加密來說的,對稱加密指你有一把密鑰,通過密鑰可以加密一段信息;想要破解這個信息,只有拿到你手中這把密鑰。從始至終加密、解密用的是同一把密鑰,因此稱“對稱加密”。而在區塊鏈世界裏,每個人都擁有兩把獨一無二的密鑰——公鑰私鑰,其中公鑰可以簡單理解爲銀行卡號是可以給別人看的;而私鑰相當於銀行卡密碼,必須拼死保密,只能自己知道。再記2條規則:

  • 私鑰能生成公鑰和地址(有了地址,對方纔能給你打錢);
  • 私鑰加密,公鑰解密(加密、解密不是同一把密鑰,因此稱“非對稱加密”);

爲了確保通信方是正確的對象同時防止對明文進行篡改(如即確保這個信件的發件人一定是我),用的私鑰加密公鑰解密;而公鑰加密私鑰解密是爲了加密內容不被第三方獲取到

3、無法篡改的交易數據

仍然以“比卡丘借給熊本熊10塊錢”爲例,我們來看看比卡丘具體是怎樣向熊本熊的地址打錢的。

  1. 比卡丘對明文 “比卡丘 → 熊本熊:10円” 進行哈希加密,得到一個64位的字符串;
  2. 比卡丘用自己的私鑰對這個字符串再次加密,獲得另一個字符串,這叫做“數字簽名”;
  3. 比卡丘把以下交易信息打包發給熊本熊,並廣播給全網記賬節點:此次交易明文、比卡丘的公鑰和數字簽名;
  4. 熊本熊和其他節點收到這條打包消息;
  5. 熊本熊和其他節點對明文進行哈希計算,得到哈希值字符串H(A);
  6. 熊本熊和其他節點用比卡丘的公鑰解密數字簽名,得到字符串H(B);
  7. 熊本熊和其他節點驗證 H(A)= H(B),交易信息爲真;
  8. 交易完成。

比卡丘的公鑰能夠解開私鑰加密過的數字簽名,證明了這個公鑰和私鑰是一對,而且都屬於比卡丘,說明這條交易信息是比卡丘創建的。也就是說,熊本熊欠的是比卡丘的錢,而不是可達鴨還是其他誰的錢;而字符串 H(A)= H(B),則說明在區塊鏈網絡中傳遞時,交易信息未被篡改。進行下一節前,我們總結一下,在公開、複雜的區塊鏈網絡中,哈希函數和非對稱加密確保了交易記錄沒有被篡改以及確保了交易記錄由正確的人發起

五、 區塊鏈上的區塊

區塊鏈是由挖礦產生的區塊按照時間順序連接起來的,本身是一個可以不斷增長的賬本數據庫。具體挖礦是什麼,可以參考之前寫的《比特幣挖礦是什麼?礦工是怎樣挖到比特幣的?》,工作原理上可通用,都是通過計算能力挖出區塊。由於系統的初始設定,不同區塊鏈產生區塊的速度不一樣。比如比特幣區塊鏈大概每10分鐘挖出一個區塊,而以太坊區塊鏈的出塊時間約14秒。每個區塊包含這段時間內產生的所有交易記錄,如一個新挖出的比特幣區塊就包含了前10分鐘內的交易信息。除此之外,還包含時間戳和前一個區塊的哈希值,等等(關於區塊的組成,我們在後續文章再詳細瞭解,這裏先把握基礎知識)。這是很聰明的設計:每誕生一個新的區塊,就會被蓋上相應的時間戳,新產生的區塊按照區塊挖出的時間順序連接到鏈條上去。這樣,區塊鏈無限延長,賬本數據庫也能無限擴大、容納無窮盡的交易信息。更令人拍案叫絕的是,新區塊裏的每一筆交易數據,都由相應的交易發起方進行數字簽名,鏈上所有人都可以用交易發起方的公鑰(上文說過,公鑰是公開的)驗證該數字簽名的真實性。此外,之前挖出的區塊裏的交易數據將永久記錄在區塊鏈上,幾乎無法篡改。一個區塊內含衆多交易信息,然而根據哈希函數的特徵,就算你只對其中一條交易數據移動一個小數點,生成的哈希值都會完全不一樣,整個區塊及其包含的所有交易信息都會變成無效數據。另一方面,篡改數據難於上青天,成本極高。有意者必須足夠財大氣粗,並且擁有至少全網51%的算力。而要達到這樣的計算能力,知乎李佔亮同學表示:礦機成本+電費+其他,成本約5.5億RMB。綜上, 在這樣一個充滿不信任感、危機四伏的網絡環境裏,區塊鏈或許是當前解決信任問題的最佳方案(之一)。

總結

最後,我們來總結區塊鏈的核心理念:

  1. 賬本分佈存儲於全網的節點上,某個節點賬本的破壞,不會影響任何其他節點正常運作;
  2. 各節點均可參與記賬、共同維護區塊鏈數據庫;
  3. 各節點相互監督,構建trustless(免信任的)系統。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章