
我們首先要搞清一個(gè)問(wèn)題——比特幣是區(qū)塊鏈,但是區(qū)塊鏈并不是比特幣。
于是,在區(qū)塊鏈的這個(gè)問(wèn)題回答里,提到“礦工”,“挖礦”,“最長(zhǎng)鏈”,“分叉”等等詞的,其實(shí)都不準(zhǔn)確。
具體到什么是區(qū)塊鏈的問(wèn)題,小馬目前沒(méi)有看到很好的定義和介紹,更多的是大而化之地講區(qū)塊鏈的意義在哪里的空泛文章,要不然就是一水的礦工和挖礦。所以巨推學(xué)院{www.jutuiedu.com}小馬來(lái)從純理論角度說(shuō)一下我個(gè)人對(duì)區(qū)塊鏈的定義:
1,區(qū)塊鏈?zhǔn)且粋€(gè)放在非安全環(huán)境中的分布式數(shù)據(jù)庫(kù)(系統(tǒng))。
這里的要點(diǎn)有兩個(gè):(1)分布式,(2)非安全環(huán)境。
首先,這是一個(gè)分布式的,去中心化的系統(tǒng)。所以,有一個(gè)中心服務(wù)器或者節(jié)點(diǎn)的,不是區(qū)塊鏈。節(jié)點(diǎn)都是安全的,無(wú)惡意的,那這不是區(qū)塊鏈。同理,從應(yīng)用的角度講,如果你的應(yīng)用必須要使用中心節(jié)點(diǎn)(例如要用超級(jí)計(jì)算機(jī)做深度學(xué)習(xí))或者沒(méi)必要考慮節(jié)點(diǎn)不安全的情況(例如某個(gè)安全的工廠里的傳感器),那么并不需要考慮區(qū)塊鏈技術(shù)。
至于后面的詞“數(shù)據(jù)庫(kù)”,目前大部分成熟的區(qū)塊鏈都是數(shù)據(jù)庫(kù),例如比特幣就是一個(gè)分布式賬本,而賬本其實(shí)就是數(shù)據(jù)。然后,根據(jù)數(shù)據(jù)的格式,又可以分三種——1,數(shù)據(jù)是完全不相關(guān)的,只是達(dá)成的共識(shí),沒(méi)有有效無(wú)效之分;2,數(shù)據(jù)有某些邏輯結(jié)構(gòu),例如賬本中,一筆交易實(shí)際上除了金額,還有輸入和輸出,連接到之前的交易,這些數(shù)據(jù)需要通過(guò)邏輯驗(yàn)證(例如交易中,節(jié)點(diǎn)需要驗(yàn)證輸入的交易是否有效);3,數(shù)據(jù)擁有圖靈完備的邏輯,而驗(yàn)證的時(shí)候需要通過(guò)節(jié)點(diǎn)使用算力運(yùn)算,每筆交易可以有不同的輸出和狀態(tài),每個(gè)節(jié)點(diǎn)要做的不僅僅是驗(yàn)證交易的真實(shí)性和輸入的正確性,還要根據(jù)交易里的邏輯讀入數(shù)值,進(jìn)行驗(yàn)算然后再驗(yàn)證結(jié)果。
比特幣的系統(tǒng)就是第二種,又叫分布式賬本;以太坊是第三種。第三種可以支持智能合約。
用比特幣舉例的話,1,它是一個(gè)完全去中心化的系統(tǒng),2,它放在一個(gè)非安全的環(huán)境,它并不要求所有使用比特幣的人都沒(méi)有惡意。
2,區(qū)塊鏈采用密碼學(xué)的方法來(lái)保證已有數(shù)據(jù)不可能被篡改。
這個(gè)是誤解最多的部分,因?yàn)楹芏嗳艘惶岬絽^(qū)塊鏈就只覺(jué)得是這個(gè)。誠(chéng)然,這部分很重要,而且確實(shí)區(qū)塊鏈也因此得名,但這只是區(qū)塊鏈的定義的一部分。
這個(gè)部分的兩個(gè)核心要點(diǎn)是:(1)密碼學(xué)哈希函數(shù),(2)非對(duì)稱(chēng)加密。
兩個(gè)都是密碼學(xué)的基礎(chǔ)概念,網(wǎng)上都有非常清晰的定義,我只簡(jiǎn)單說(shuō)下:
(密碼學(xué))哈希函數(shù):一個(gè)函數(shù)Y=H(X),有如下性質(zhì):1,有X可以很容易算出Y;2,有Y不可能算出X;3,有Y不可能找到另一個(gè)X'使得H(X')=Y;3.5,如果X和X'相差很小,H(X)和H(X')則完全不相關(guān)。
這東西主要用于驗(yàn)證信息完整性——在一個(gè)信息后面放上這個(gè)信息的哈希值,這個(gè)值很小,例如256bit,而且計(jì)算方便。收到信息之后收信人再算一遍哈希值,對(duì)比兩者就知道這條信息是否被篡改過(guò)了。如果被篡改過(guò),哪怕只有一bit,整個(gè)哈希值也會(huì)截然不同。而根據(jù)哈希函數(shù)的性質(zhì),沒(méi)有人能夠偽造出另一個(gè)消息具有同樣的哈希值,也就是說(shuō)篡改過(guò)的數(shù)據(jù)完全不可能通過(guò)哈希校驗(yàn)。
非對(duì)稱(chēng)加密:這東西很好理解——對(duì)稱(chēng)加密就是有個(gè)密鑰,可以理解成保險(xiǎn)箱鑰匙,你把消息加密變成密文,沒(méi)有人能看懂這是啥,然后同一把鑰匙解密成原來(lái)的消息。
非對(duì)稱(chēng)加密就是有兩把鑰匙,一把叫公鑰,一把叫私鑰,用其中一把加密的話,只能用另一把解密,反之亦然。另一個(gè)重要的性質(zhì)是,給你密文,明文和其中一把鑰匙,你還是解不出來(lái)另一把鑰匙是啥。原理基本上是基于一些困難數(shù)學(xué)問(wèn)題,例如因數(shù)分解和離散對(duì)數(shù),常用的有RSA,Diffie-Hellman和ECC(橢圓曲線),比特幣用的是橢圓曲線。
非對(duì)稱(chēng)加密除了和對(duì)稱(chēng)加密一樣用于信息加密之外,還有另一個(gè)用途,就是身份驗(yàn)證。因?yàn)橥ǔG闆r我們假設(shè)一對(duì)公私鑰,公鑰是公開(kāi)的,而私鑰只有本人有,于是一個(gè)人如果有對(duì)應(yīng)的私鑰,我們就可以認(rèn)定他是本人。其中一個(gè)重要的應(yīng)用就是數(shù)字簽名——某個(gè)消息后面,發(fā)信人對(duì)這個(gè)消息做哈希運(yùn)算,然后用私鑰加密。接著收信人首先對(duì)消息進(jìn)行哈希運(yùn)算,接著用相應(yīng)的公鑰解密數(shù)字簽名,再對(duì)比兩個(gè)哈希值,如果相同,就代表這個(gè)消息是本人發(fā)出的而且沒(méi)有被篡改過(guò)。
以是基礎(chǔ)知識(shí),至于區(qū)塊鏈怎么實(shí)現(xiàn)的,很簡(jiǎn)單:
交易(數(shù)據(jù))寫(xiě)在區(qū)塊里。
先進(jìn)個(gè)區(qū)塊叫創(chuàng)世區(qū)塊,寫(xiě)啥都行。
從第二個(gè)區(qū)塊開(kāi)始,每個(gè)區(qū)塊的先進(jìn)部分有前一區(qū)塊的哈希值。此外,區(qū)塊里的每一筆交易(數(shù)據(jù)),都有發(fā)起人的數(shù)字簽名來(lái)保證真實(shí)性和合法性。于是,先前區(qū)塊里的任何數(shù)據(jù)都不可被篡改,原因見(jiàn)上。
到這為止有人可能會(huì)問(wèn):為什么要弄個(gè)鏈啊?直接所有數(shù)據(jù)加個(gè)哈希值不就行了?
因?yàn)?mdash;—這個(gè)數(shù)據(jù)庫(kù)并不是靜止的啊。
數(shù)據(jù)庫(kù)的數(shù)據(jù)是會(huì)增加的,而每次增加的數(shù)據(jù),就是一個(gè)區(qū)塊,于是這些生成時(shí)間不同的區(qū)塊,就以這種形式鏈在一起了。
至于如何增加區(qū)塊,就涉及到第三個(gè)部分——共識(shí)算法。
3,區(qū)塊鏈采用共識(shí)算法來(lái)對(duì)于新增數(shù)據(jù)達(dá)成共識(shí)。
共識(shí)算法的目的,就是讓所有節(jié)點(diǎn)對(duì)于新增區(qū)塊達(dá)成共識(shí),也就是說(shuō),所有人都要認(rèn)可新增的區(qū)塊。對(duì)于有中心的系統(tǒng),這事很簡(jiǎn)單,中心說(shuō)什么大家同意就好了,但是放到去中心化系統(tǒng)里,尤其是當(dāng)有些節(jié)點(diǎn)有惡意的時(shí)候,這東西非常復(fù)雜,計(jì)算機(jī)科學(xué)里有個(gè)相應(yīng)的問(wèn)題,叫做“拜占庭將軍問(wèn)題”或者“拜占庭容錯(cuò)”(BFT)。
有很多用Lamport給出的那個(gè)例子來(lái)講BFT的東西,我在這里換一個(gè)角度。
Lamport大神當(dāng)年提出這個(gè)問(wèn)題的時(shí)候在斯坦福研究中心給NASA做項(xiàng)目,他提出這個(gè)問(wèn)題的原因并不是考慮類(lèi)似比特幣的應(yīng)用場(chǎng)景(整個(gè)互聯(lián)網(wǎng)成千上萬(wàn)個(gè)用戶(hù)),而是考慮特殊背景下的一個(gè)簡(jiǎn)單的系統(tǒng)——
航天飛機(jī)的控制系統(tǒng)。
如果有航空背景的同學(xué)可能知道,飛機(jī)有三套獨(dú)立的控制系統(tǒng),為什么呢?因?yàn)槿魏蜗到y(tǒng)都不可能完全不出故障,就算飛機(jī)控制系統(tǒng)的故障率已經(jīng)極低了,還是有飛到一半這東西壞了的可能。于是我們可以弄兩套獨(dú)立的系統(tǒng),同時(shí)壞掉的幾率就會(huì)大大降低。
可是兩套獨(dú)立的系統(tǒng)還是不足以容下一個(gè)系統(tǒng)的錯(cuò)誤——一架飛機(jī)迎面飛來(lái),兩套系統(tǒng)一個(gè)說(shuō)要躲,一個(gè)說(shuō)不躲,那到底是躲還是不躲呢?所以我們需要三臺(tái)獨(dú)立的系統(tǒng),這樣,如果有一個(gè)系統(tǒng)有故障了,還有兩臺(tái)能正常工作,能少數(shù)服從多數(shù)給出正確的結(jié)果。學(xué)過(guò)糾錯(cuò)碼的同學(xué)對(duì)這個(gè)應(yīng)該不陌生,這個(gè)系統(tǒng)的輸出之間的漢明間距是3,所以可以糾正一位的錯(cuò)誤。
然而,對(duì)于航天飛機(jī),在冷戰(zhàn)的背景下,萬(wàn)一某個(gè)系統(tǒng)不是壞掉了,而是被敵人控制了呢?三套系統(tǒng)還夠嗎?
答案是否定的,因?yàn)椴煌趩渭冎皇菈牡舻墓?jié)點(diǎn),惡意節(jié)點(diǎn)可以做一些別的事來(lái)阻止整個(gè)系統(tǒng)達(dá)成共識(shí)。
這個(gè)部分略復(fù)雜要講的話要單開(kāi)一帖,所以我們只說(shuō)最簡(jiǎn)單的情況(無(wú)簽名同步系統(tǒng))。
我們管三個(gè)系統(tǒng)叫ABC,正常工作流程是三個(gè)人每次得出結(jié)果就互相告訴一下,然后每個(gè)人選多數(shù)人同意的結(jié)果。這是個(gè)沒(méi)有中央節(jié)點(diǎn)的分布式系統(tǒng),也就是說(shuō)三人不能聚在一起開(kāi)個(gè)會(huì)啥的,仨人只能兩兩通信。這個(gè)時(shí)候,假設(shè)C有惡意,它的目標(biāo)是破壞這個(gè)系統(tǒng)。于是,假設(shè)正確的讀數(shù)是1,A和B都得出了1這個(gè)結(jié)果,這個(gè)時(shí)候C這個(gè)小婊砸告訴A說(shuō)“我的結(jié)果是0,B也覺(jué)得是0”,同時(shí)打個(gè)電話跟B說(shuō)“哎我覺(jué)得是0,A也這么說(shuō)”,于是A和B就懵逼了。假設(shè)你是A,你聽(tīng)到了兩個(gè)不同版本的B的答案,B說(shuō)自己選了1,C說(shuō)B選了0,可是A這個(gè)時(shí)候沒(méi)法知道B和C誰(shuí)才是那個(gè)騙了自己的小婊砸,因?yàn)槿绻鸅真的告訴A選了1然后告訴C是0,他聽(tīng)到的結(jié)果和現(xiàn)在是一模一樣的。
于是結(jié)論是,拜占庭容錯(cuò),也就是需要容下一個(gè)惡意系統(tǒng)而非錯(cuò)誤系統(tǒng),需要4個(gè)獨(dú)立系統(tǒng)。
(當(dāng)然,簽名可以解決這個(gè)問(wèn)題,但是這只是同步系統(tǒng)的情況,在異步系統(tǒng)里這問(wèn)題會(huì)變得更加復(fù)雜,原因是正常節(jié)點(diǎn)的回答有延遲,而惡意節(jié)點(diǎn)可以不回復(fù),所以,正常節(jié)點(diǎn)一方面要等另一個(gè)節(jié)點(diǎn)的回復(fù),但是它又不知道對(duì)方會(huì)不會(huì)回復(fù)因?yàn)閷?duì)方有可能會(huì)有惡意,而在收到回復(fù)之前,它完全沒(méi)法判斷對(duì)方是正常節(jié)點(diǎn)還是惡意節(jié)點(diǎn),這個(gè)問(wèn)題叫異步BFT,也是BFT的最復(fù)雜的情況,這里不再做更多的解釋?zhuān)挛奶岬降腂FT算法,其實(shí)都是異步BFT的算法)
Lamport提出這個(gè)問(wèn)題之后,有無(wú)數(shù)的算法被提出來(lái),統(tǒng)稱(chēng)BFT(拜占庭容錯(cuò))算法,其中最有代表性的叫PBFT,然后由于最近區(qū)塊鏈的熱度,無(wú)數(shù)針對(duì)區(qū)塊鏈應(yīng)用場(chǎng)景優(yōu)化過(guò)的BFT算法也涌現(xiàn)出來(lái),但是一個(gè)重要的問(wèn)題是,所有目前的BFT算法,都只能應(yīng)用在小型網(wǎng)絡(luò)里。原因很簡(jiǎn)單——因?yàn)锽FT這個(gè)問(wèn)題是設(shè)計(jì)給類(lèi)似于航天飛機(jī)控制系統(tǒng)這樣的場(chǎng)景的,早期的算法考慮的也主要是這種場(chǎng)景。PBFT論文里考慮的就是一個(gè)5個(gè)節(jié)點(diǎn)的系統(tǒng)。就算算上新提出的BFT算法,也最多應(yīng)用在不超過(guò)100個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)里。
這個(gè)問(wèn)題被擱置了很久,直到比特幣的誕生——中本聰從某種意義上簡(jiǎn)化了這個(gè)問(wèn)題,在比特幣中,同樣是共識(shí)問(wèn)題,中本聰引入了一個(gè)重要的假設(shè)——獎(jiǎng)勵(lì),他之所以能這樣做的原因是,他考慮的是一個(gè)數(shù)字貨幣,也就是說(shuō)共識(shí)這個(gè)東西是有價(jià)值的。
于是在這樣的系統(tǒng)上,他提出了工作證明機(jī)制。
最后,小馬給大家介紹一下我們巨推傳媒旗下的巨推鏈:www.jutuilian.com,巨推鏈?zhǔn)蔷尥苽髅狡煜碌馁Y訊網(wǎng)站,里面有各路大咖討論關(guān)于區(qū)塊鏈的問(wèn)題,還有巨推學(xué)院:www.jutuiedu.com,里面是各個(gè)講師在里面的課程,也歡迎大家來(lái)看看。
以上就是小馬對(duì)于區(qū)塊鏈的個(gè)人定義了,如果大家還有什么問(wèn)題或者想和我探討的可以加我的微信:15594963298,歡迎大家一起來(lái)談?wù)搮^(qū)塊鏈。