文|焦鋒
基于網(wǎng)絡(luò)交易的區(qū)塊鏈安全技術(shù)研究
文|焦鋒
若干年前,比特幣誕生了,當(dāng)時(shí)的技術(shù)和經(jīng)濟(jì)環(huán)境還沒(méi)有對(duì)它引起足夠的重視,然而現(xiàn)在比特幣的價(jià)值已經(jīng)在3萬(wàn)元人民幣一個(gè)左右。為什么它的存在能有這么大的價(jià)值,作為一種數(shù)字貨幣,它所存在的意義又是什么呢?比特幣作為眾多數(shù)字貨幣中的一種,之所以有這么大的價(jià)值,是因?yàn)樗褂昧艘环N可以代替第三方作為信任機(jī)構(gòu)的技術(shù),就是區(qū)塊鏈技術(shù)。時(shí)下盛行的二維碼支付,各種第三方網(wǎng)絡(luò)支付機(jī)構(gòu)的出現(xiàn),無(wú)現(xiàn)金文化的提倡等等,涌現(xiàn)出了支付安全問(wèn)題。區(qū)塊鏈技術(shù)開(kāi)始被人們所重視,尤其是京東、阿里這種巨無(wú)霸的網(wǎng)購(gòu)平臺(tái)。
從網(wǎng)購(gòu)誕生到現(xiàn)在為止,站在人們面前最為嚴(yán)重的問(wèn)題就是信任問(wèn)題。為了解決這個(gè)問(wèn)題,京東提出了自營(yíng)策略,希望通過(guò)自身的信譽(yù)來(lái)解決客戶(hù)的信任問(wèn)題。阿里則通過(guò)支付寶第三方擔(dān)保的手段,試圖解決該問(wèn)題。然而,這些方法無(wú)法從根源上解決信任危機(jī)。因此,就有了本文要研究的區(qū)塊鏈技術(shù),也就是當(dāng)前最火的比特幣所使用的技術(shù)。下面重點(diǎn)對(duì)區(qū)塊鏈技術(shù)進(jìn)行說(shuō)明。
簡(jiǎn)單來(lái)說(shuō),區(qū)塊鏈就是一種分布式的賬本技術(shù)。它采用密碼學(xué)的方法,確保自身的數(shù)據(jù)不會(huì)被篡改,然后又使用共識(shí)算法來(lái)對(duì)新增數(shù)據(jù)達(dá)成共識(shí)。
1、區(qū)塊鏈?zhǔn)且粋€(gè)放在非安全環(huán)境中的分布式數(shù)據(jù)庫(kù)
首先,這是一個(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)就是第二種,又叫分布式賬本;以太坊是第三種。第三種可以支持智能合約。用比特幣舉例的話,它是一個(gè)完全去中心化的系統(tǒng);它放在一個(gè)非安全的環(huán)境,并不要求所有使用比特幣的人都沒(méi)有惡意。
2、區(qū)塊鏈采用密碼學(xué)的方法來(lái)保證已有數(shù)據(jù)不可能被篡改。
這個(gè)部分的兩個(gè)核心要點(diǎn)是:密碼學(xué)哈希函數(shù);非對(duì)稱(chēng)加密。兩個(gè)都是密碼學(xué)的基礎(chǔ)概念:
已有關(guān)于研究農(nóng)業(yè)機(jī)械化水平評(píng)價(jià)指標(biāo)的文獻(xiàn)中,主要考察的指標(biāo)是農(nóng)業(yè)機(jī)械化程度[3-4]。由于我國(guó)畜牧業(yè)機(jī)械化統(tǒng)計(jì)數(shù)據(jù)的缺失,本文畜牧業(yè)機(jī)械化水平也通過(guò)畜牧機(jī)械在畜牧生產(chǎn)過(guò)程中的應(yīng)用程度來(lái)反映,因此擬通過(guò)加權(quán)各家畜種類(lèi)在畜牧生產(chǎn)過(guò)程中的主要關(guān)鍵環(huán)節(jié)的機(jī)械化應(yīng)用程度來(lái)計(jì)算其機(jī)械化水平。
(密碼學(xué))哈希函數(shù):一個(gè)函數(shù)Y=H(X),有如下性質(zhì):有X可以很容易算出Y;有Y不可能算出X;有Y不可能找到另一個(gè)X'使得H(X')=Y;如果X和X'相差很小,H(X)和H(X')則完全不相關(guān)。這東西主要用于驗(yàn)證信息完整性——在一個(gè)信息后面放上這個(gè)信息的哈希值,這個(gè)值很小,例如256bit,而且計(jì)算方便。收到信息之后收信人再算一遍哈希值,對(duì)比兩者就知道這條信息是否被篡改過(guò)了。如果被篡改過(guò),哪怕只有1數(shù)字1bit,整個(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ò)。
區(qū)塊鏈把交易(數(shù)據(jù))寫(xiě)在區(qū)塊里:第一個(gè)區(qū)塊叫創(chuàng)世區(qū)塊,內(nèi)容隨意。從第二個(gè)區(qū)塊開(kāi)始,每個(gè)區(qū)塊的第一部分有前一區(qū)塊的哈希值。此外,區(qū)塊里的每一筆交易(數(shù)據(jù)),都有發(fā)起人的數(shù)字簽名來(lái)保證真實(shí)性和合法性。于是,先前區(qū)塊里的任何數(shù)據(jù)都不可被篡改。這個(gè)數(shù)據(jù)庫(kù)并不是靜止的啊。數(shù)據(jù)庫(kù)的數(shù)據(jù)是會(huì)增加的,而每次增加的數(shù)據(jù),就是一個(gè)區(qū)塊,于是這些生成時(shí)間不同的區(qū)塊,就以這種形式鏈在一起了。
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)。
公有鏈,以比特幣,以太坊和所有虛擬貨幣為代表,都采用比特幣共識(shí),共識(shí)算法基本上都采用工作證明機(jī)制,也就是挖礦,這種機(jī)制其他回答里已經(jīng)講得夠清楚了。工作證明機(jī)制一切都好,除了費(fèi)電……費(fèi)多少電呢?比特幣的話,差不多和一個(gè)百萬(wàn)人級(jí)別的城市那么多。此外以太坊的創(chuàng)始人特別喜歡權(quán)益證明,似乎很快要小范圍投入使用(100個(gè)區(qū)塊里一個(gè)用權(quán)益證明)。但是目前為止,大家對(duì)它的可靠性還持觀望態(tài)度。
私有鏈和聯(lián)盟鏈。以IBM的hyperledger-fabric,以及一大堆其他的類(lèi)似于tendermint,甚至R3 corda和ripple為代表,都用BFT共識(shí)。其實(shí)這方面的應(yīng)用已經(jīng)很多了,問(wèn)題是,目前基本上所有應(yīng)用給人的感覺(jué)都還是為了做區(qū)塊鏈而區(qū)塊鏈,真的覺(jué)得這東西好到不可或缺的應(yīng)用還基本沒(méi)有。
安全且沒(méi)有中央大賬本,所以無(wú)法銷(xiāo)毀(不是一臺(tái)電腦可以控制的),無(wú)法作弊,每個(gè)人都有相同的賬本,能確保賬本記錄過(guò)程是公開(kāi)透明的。
全民記賬效率也會(huì)提高沒(méi)有中心化的中介機(jī)構(gòu)存在,讓所有的東西都通過(guò)預(yù)先設(shè)定的程序自動(dòng)運(yùn)行,能夠大大降低成本,提高效率。
解決了中介信用的問(wèn)題以前兩個(gè)人合作,若是不信任對(duì)方,就必須依靠第三方,就像轉(zhuǎn)賬必須通過(guò)銀行。但通過(guò)區(qū)塊鏈技術(shù),人們就可以實(shí)現(xiàn)在沒(méi)有中介機(jī)構(gòu)的情況下雙方相互轉(zhuǎn)賬,比如比特幣,它就是區(qū)塊鏈的實(shí)際應(yīng)用之一。
區(qū)塊鏈的主要技術(shù)應(yīng)用就是在金融上,然而還是存在不少的問(wèn)題需要去解決:
1、區(qū)塊鏈作為一個(gè)記賬系統(tǒng),如何解決金融體系的底層線下摩擦。
2、比特幣在支付方面,當(dāng)前比特幣網(wǎng)絡(luò)確認(rèn)的交易是每秒最多7筆,而支付寶每秒則達(dá)到上萬(wàn)筆的交易確認(rèn)。便捷性上來(lái)看,的確不如微信和支付寶,這個(gè)毋庸置疑,不過(guò)側(cè)鏈和閃電網(wǎng)絡(luò)正在攻克這些技術(shù)問(wèn)題。
3、銀行開(kāi)戶(hù)的成本是比較高昂的,但也無(wú)法避免。因?yàn)樯婕暗娇缇持Ц?,像目前?duì)于不同的機(jī)構(gòu),做賬對(duì)不上這些問(wèn)題,其實(shí)都會(huì)涉及到支付成本。而區(qū)塊鏈要怎么給出實(shí)際的解決方法,都是很現(xiàn)實(shí)的問(wèn)題。
區(qū)塊鏈技術(shù)雖然目前被看好,然而由于是新技術(shù),且成熟案例非常有限,可借鑒的案例幾乎沒(méi)有,因此,還需要不斷的去探索和嘗試,解決所遇到的各種坑和一些現(xiàn)實(shí)問(wèn)題。
作者單位:湖南省汽車(chē)技師學(xué)院