一、區(qū)塊鏈技術(shù)演進(jìn)史; 區(qū)塊鏈源自比特幣,不過(guò)在這之前,已有多項(xiàng)跨領(lǐng)域技術(shù),皆是構(gòu)成區(qū)塊鏈的關(guān)鍵技術(shù);而現(xiàn)在的區(qū)塊鏈技術(shù)與應(yīng)用,也已經(jīng)遠(yuǎn)超過(guò)比特幣區(qū)塊鏈。 要追溯區(qū)塊鏈(Blockchain)是怎么來(lái)的,不外乎先想到比特幣(Bitcoin),比特幣是第一個(gè)采用區(qū)塊鏈技術(shù)打造出的P2P電子貨幣系統(tǒng)應(yīng)用,不過(guò)比特幣區(qū)塊鏈并非一項(xiàng)全新的技術(shù),而是將跨領(lǐng)域過(guò)去數(shù)十年所累積的技術(shù)基礎(chǔ)結(jié)合。 比特幣區(qū)塊鏈所實(shí)現(xiàn)的基于零信任基礎(chǔ)、且真正去中心化的分散式系統(tǒng),其實(shí)解決一個(gè)30多年前由Leslie Lamport等人所提出的拜占庭將軍問(wèn)題。 1982 年Leslie Lamport把軍中各地軍隊(duì)彼此取得共識(shí)、決定是否出兵的過(guò)程,延伸至運(yùn)算領(lǐng)域,設(shè)法建立具容錯(cuò)性的分散式系統(tǒng),即使部分節(jié)點(diǎn)失效仍可確保系統(tǒng)正常運(yùn) 行,可讓多個(gè)基于零信任基礎(chǔ)的節(jié)點(diǎn)達(dá)成共識(shí),并確保資訊傳遞的一致性,而2008年出現(xiàn)的比特幣區(qū)塊鏈便解決了此問(wèn)題(更多關(guān)于拜占庭將軍問(wèn)題可閱讀《區(qū)塊鏈:重塑經(jīng)濟(jì)與世界》)。 而比特幣區(qū)塊鏈中最關(guān)鍵的工作量證明機(jī)制,則是采用由Adam Back在1997年所發(fā)明Hashcash(雜湊現(xiàn)金),為一種工作量證明演算法(Proof of Work,POW),此演算法仰賴成本函數(shù)的不可逆特性,達(dá)到容易被驗(yàn)證,但很難被破解的特性,最早被應(yīng)用于阻擋垃圾郵件。 在隱私安全方面的技術(shù),可回溯到1982年David Chaum提出注重隱私的密碼學(xué)網(wǎng)路支付系統(tǒng),具有不可追蹤的特性,成為比特幣區(qū)塊鏈在隱私安全面上的雛形,之后David Chaum也基于這個(gè)理論打造出不可追蹤的密碼學(xué)網(wǎng)路支付系統(tǒng)eCash,不過(guò)eCash并非去中心化系統(tǒng)。 在區(qū)塊鏈中每筆交易,采用橢圓曲線數(shù)位簽章演算法(Elliptic Curve Digital Signature Algorithm,ECDSA),可追溯回1985年Neal Koblitz和Victor Miller分別提出橢圓曲線密碼學(xué)(Elliptic curve cryptography,ECC),首次將橢圓曲線用于密碼學(xué),建立公開(kāi)金鑰加密的演算法。相較于RSA演算法,采用ECC好處在于可以較短的金鑰,達(dá) 到相同的安全強(qiáng)度。到了1992年,由Scott Vanstone等人提出ECDSA。 區(qū)塊鏈最早源于比特幣,但區(qū)塊鏈的應(yīng)用卻不僅于此。 過(guò)去幾年也陸續(xù)出現(xiàn)許多基于區(qū)塊鏈技術(shù)的電子貨幣(統(tǒng)稱為Altcoins),不過(guò)隨著比特幣持續(xù)備受爭(zhēng)議,各國(guó)政府與金融機(jī)構(gòu)紛紛表態(tài),直到近1、2年,大家才終于意識(shí)到區(qū)塊鏈的真實(shí)價(jià)值,遠(yuǎn)超過(guò)于電子貨幣系統(tǒng)。 區(qū)塊鏈可結(jié)合認(rèn)許制,以滿足金融監(jiān)管需求 若要將比特幣與區(qū)塊鏈技術(shù)分開(kāi)來(lái)看,最大的不同之處在于,由于比特幣為虛擬貨幣應(yīng)用,因此面臨各國(guó)法規(guī)的限制,但區(qū)塊鏈現(xiàn)在已經(jīng)可結(jié)合認(rèn)許制或其他方式來(lái)管控節(jié)點(diǎn),決定讓哪些節(jié)點(diǎn)參與交易驗(yàn)證及存取所有的資料,并提供治理架構(gòu)(Governance Structure)及商業(yè)邏輯(Business Logic)兩大關(guān)鍵特性。 目前區(qū)塊鏈可分為非實(shí)名制和實(shí)名制兩種,前者如比特幣區(qū)塊鏈,后者如臺(tái)大地的GCoin區(qū)塊鏈。現(xiàn)在的區(qū)塊鏈已經(jīng)可結(jié)合認(rèn)許制 (Permissioned),來(lái)配合金融監(jiān)管所需的反洗錢 (AML) 與身份驗(yàn)證 (KYC) 規(guī)范。 而銀行和金融機(jī)構(gòu)想采用的都是實(shí)名制的區(qū)塊鏈。 區(qū)塊鏈演進(jìn)四階段 區(qū)塊鏈技術(shù)隨著比特幣出現(xiàn)后,經(jīng)歷了幾個(gè)不同的階段,常見(jiàn)的分法將比特幣視為Blockchain 1.0,為數(shù)位貨幣(Currency)應(yīng)用,Blockchain 2.0開(kāi)始出現(xiàn)如智慧資產(chǎn)(Smart Assets)、智慧契約(Smart Contracts)等貨幣以外的應(yīng)用,Blockchain3.0則是指更復(fù)雜的智慧契約,將區(qū)塊鏈用于政府、醫(yī)療、科學(xué)、文化與藝術(shù)等領(lǐng)域。 區(qū)塊鏈新創(chuàng)DTCO執(zhí)行長(zhǎng)李亞鑫基于現(xiàn)有的分法進(jìn)行補(bǔ)充,他認(rèn)為,Blockchain 2.0以彩色幣(Colored Coin)為代表,在區(qū)塊鏈上運(yùn)行Open Assets Protocal,可傳遞貨幣以外的數(shù)位資產(chǎn),如股票、債券等。 而從Blockchain 2.0之后,可再分出一類屬于Blockchain 2.5的應(yīng)用,包括代幣(貨幣橋)應(yīng)用、分散式帳本(Distributed Ledgers)、資料層區(qū)塊鏈(Data Layers Blockchain)、結(jié)合人工智慧(Artificial Intelligent),以及無(wú)交易所的國(guó)際匯款網(wǎng)路,以Ripple為代表,資料層、分散式儲(chǔ)存則以Factom、MaidSafe為代 表,Blockchain3.0則以Ethereum為代表。 他表示,Blockchain2.5跟Blockchain3.0最大的不同在于,3.0較強(qiáng)調(diào)是更復(fù)雜的智慧契約,以2.5則強(qiáng)調(diào)代幣(貨幣橋)應(yīng)用,如可用于金融領(lǐng)域聯(lián)盟制區(qū)塊鏈,如運(yùn)行1:1的美元、日?qǐng)A、歐元等法幣數(shù)位化。 由于區(qū)塊鏈協(xié)議幾乎都是開(kāi)源的,因此要取得區(qū)塊鏈協(xié)議的原始碼不是問(wèn)題,重點(diǎn)是要找到好的區(qū)塊鏈服務(wù)供應(yīng)商,協(xié)助導(dǎo)入現(xiàn)有的系統(tǒng)。而銀行或金融機(jī)構(gòu)得對(duì)區(qū)塊鏈有一定的了解,才能知道該如何選擇,并應(yīng)用于適合的業(yè)務(wù)情境。 去年金融科技(Fintech)才剛吹進(jìn)臺(tái)灣,沒(méi)想到才過(guò)幾個(gè)月,一股更強(qiáng)勁的區(qū)塊鏈技術(shù)也開(kāi)始在臺(tái)引爆,全球金融產(chǎn)業(yè)可說(shuō)是展現(xiàn)了前所未有的決心,也讓區(qū)塊鏈迅速成為各界切入金融科技的關(guān)鍵領(lǐng)域。 盡管現(xiàn)在就像是區(qū)塊鏈的戰(zhàn)國(guó)時(shí)代,不過(guò),以臺(tái)灣來(lái)看,銀行或金融機(jī)構(gòu)要從理解并接受區(qū)塊鏈,到找出一套大家都認(rèn)可的區(qū)塊鏈,且真正應(yīng)用于交易上,恐怕還需要一段時(shí)間。 這次臺(tái)灣只比國(guó)外晚了半年,引爆點(diǎn)可從臺(tái)大釋出一套自行開(kāi)發(fā)的開(kāi)源區(qū)塊鏈協(xié)議GCoin,并宣布將成立金融科技暨區(qū)塊鏈中心說(shuō)起,短短一周的時(shí)間,便引發(fā)各界高度關(guān)注,接著研討會(huì)不斷,不過(guò),由于區(qū)塊鏈具有較高的技術(shù)門檻,大家都知道它擁有許多特性跟好處,但卻遲遲處于觀望階段,就連臺(tái)灣做區(qū)塊鏈的新創(chuàng)業(yè) 者,也非常稀少。銀行業(yè)目前也還卡在門口,除了少數(shù)金控開(kāi)始分享這個(gè)議題之外,多數(shù)金融業(yè)者仍處于試圖理解技術(shù)面的階段。 技術(shù)演進(jìn):區(qū)塊鏈?zhǔn)窃趺磥?lái)的 》1982年 拜占庭將軍問(wèn)題 Leslie Lamport等人提出拜占庭將軍問(wèn)題(Byzantine Generals Problem),把軍中各地軍隊(duì)彼此取得共識(shí)、決定是否出兵的過(guò)程,延伸至運(yùn)算領(lǐng)域,設(shè)法建立具容錯(cuò)性的分散式系統(tǒng),即使部分節(jié)點(diǎn)失效仍可確保系統(tǒng)正常 運(yùn)行,可讓多個(gè)基于零信任基礎(chǔ)的節(jié)點(diǎn)達(dá)成共識(shí),并確保資訊傳遞的一致性,而2008年出現(xiàn)的比特幣區(qū)塊鏈便解決了此問(wèn)題。 David Chaum提出密碼學(xué)網(wǎng)路支付系統(tǒng) David Chaum提出注重隱私安全的密碼學(xué)網(wǎng)路支付系統(tǒng),具有不可追蹤的特性,成為之后比特幣區(qū)塊鏈在隱私安全面的雛形。 》1985年 橢圓曲線密碼學(xué) Neal Koblitz和Victor Miller分別提出橢圓曲線密碼學(xué)(Elliptic Curve Cryptography,ECC),首次將橢圓曲線用于密碼學(xué),建立公開(kāi)金鑰加密的演算法。相較于RSA演算法,采用ECC好處在于可用較短的金鑰,達(dá) 到相同的安全強(qiáng)度。 》1990年 David Chaum基于先前理論打造出不可追蹤的密碼學(xué)網(wǎng)路支付系統(tǒng),就是后來(lái)的eCash,不過(guò)eCash并非去中心化系統(tǒng)。 Leslie Lamport提出具高容錯(cuò)的一致性演算法Paxos。 》1991年 使用時(shí)間戳確保數(shù)位文件安全 Stuart Haber與W. Scott Stornetta提出用時(shí)間戳確保數(shù)位文件安全的協(xié)議,此概念之后被比特幣區(qū)塊鏈系統(tǒng)所采用。 》1992年 Scott Vanstone等人提出橢圓曲線數(shù)位簽章演算法(Elliptic Curve Digital Signature Algorithm,ECDSA) 》1997年 Adam Back發(fā)明Hashcash技術(shù) Adam Back發(fā)明Hashcash(雜湊現(xiàn)金),為一種工作量證明演算法(Proof of Work,POW),此演算法仰賴成本函數(shù)的不可逆特性,達(dá)到容易被驗(yàn)證,但很難被破解的特性, 最早被應(yīng)用于阻擋垃圾郵件。Hashcash之后成為比特幣區(qū)塊鏈所采用的關(guān)鍵技術(shù)之一。 Adam Back于2002年正式發(fā)表Hashcash論文。 》1998年 Wei Dai發(fā)表匿名的分散式電子現(xiàn)金系統(tǒng)B-money Wei Dai發(fā)表匿名的分散式電子現(xiàn)金系統(tǒng)B-money,引入工作量證明機(jī)制,強(qiáng)調(diào)點(diǎn)對(duì)點(diǎn)交易和不可竄改特性。不過(guò)在B-money中,并未采用Adam Back提出的Hashcash演算法。Wei Dai的許多設(shè)計(jì)之后被比特幣區(qū)塊鏈所采用。 Nick Szabo發(fā)表Bit Gold Nick Szabo發(fā)表去中心化的數(shù)位貨幣系統(tǒng)Bit Gold,參與者可貢獻(xiàn)運(yùn)算能力來(lái)解出加密謎題。 》2005年 可重復(fù)使用的工作量證明機(jī)制(RPOW) Hal Finney提出可重復(fù)使用的工作量證明機(jī)制(Reusable Proofs of Work,RPOW),結(jié)合B-money與Adam Back提出的Hashcash演算法來(lái)創(chuàng)造密碼學(xué)貨幣。 》2008年 Blockchain 1.0:加密貨幣 數(shù)位貨幣與支付系統(tǒng)去中心化 比特幣 Satoshi Nakamoto(中本聰)發(fā)表一篇關(guān)于比特幣的論文,描述一個(gè)點(diǎn)對(duì)點(diǎn)電子現(xiàn)金系統(tǒng),能在不具信任的基礎(chǔ)之上,建立一套去中心化的電子交易體系。 》2012年 Blockchain2.0:智慧資產(chǎn)、智慧契約 市場(chǎng)去中心化,可作貨幣以外的數(shù)位資產(chǎn)轉(zhuǎn)移,如股票、債券。如Colored Coin便是基于比特幣區(qū)塊鏈的開(kāi)源協(xié)議,可在比特幣在區(qū)塊鏈上發(fā)行多項(xiàng)資產(chǎn) 》2014年 Blockchain 3.0:更復(fù)雜的智慧契約 更復(fù)雜的智慧合約,將區(qū)塊鏈用于政府、醫(yī)療、科學(xué)、文化與藝術(shù)等領(lǐng)域 》2016年 Blockchain 2.5:金融領(lǐng)域應(yīng)用、資料層 Blockchain2.5:強(qiáng)調(diào)代幣(貨幣橋)應(yīng)用、分散式帳本、資料層區(qū)塊鏈,及結(jié)合人工智慧等金融應(yīng)用 Blockchain 3.0:更復(fù)雜的智慧契約 更復(fù)雜的智慧合約,將區(qū)塊鏈用于政府、醫(yī)療、科學(xué)、文化與藝術(shù)等領(lǐng)域。 二、區(qū)塊到底是什么? 區(qū)塊鏈(Blockchain)顧名思義就像是由無(wú)數(shù)個(gè)區(qū)塊(Block)所組成,這整個(gè)區(qū)塊鏈就像是一個(gè)共享的分散式總帳,這些一個(gè)一個(gè)的區(qū)塊到底是什么?如何讓這些區(qū)塊被串在一起,又如何確保它們無(wú)法被竄改? 每個(gè)區(qū)塊的Block Header都會(huì)包含一組Previous Block Hash值,這是將前一個(gè)區(qū)塊的Block Header進(jìn)行Hash Function而得到的值,因此每個(gè)區(qū)塊之間,都會(huì)藉由這個(gè)無(wú)形的鏈條與先前的區(qū)塊環(huán)環(huán)相扣。 區(qū)塊鏈(Blockchain)顧名思義就像是由無(wú)數(shù)個(gè)區(qū)塊(Block)所組成,以比特幣的區(qū)塊鏈來(lái)說(shuō),目前已經(jīng)產(chǎn)生超過(guò)40萬(wàn)個(gè)區(qū)塊,這整個(gè)區(qū)塊鏈就像 是一個(gè)共享的分散式總帳,由多個(gè)參與比特幣交易的運(yùn)算節(jié)點(diǎn)來(lái)共同維護(hù),每個(gè)節(jié)點(diǎn)也各自擁有一份完整的帳本備份(完整個(gè)區(qū)塊鏈資料),而其中的每個(gè)區(qū)塊,就 像是帳本中的其中一頁(yè),記錄好幾筆不同的交易資訊,這些紀(jì)錄都無(wú)法經(jīng)由其中一個(gè)節(jié)點(diǎn)來(lái)竄改。不過(guò),這只是個(gè)比喻,實(shí)際上,這些一個(gè)一個(gè)的區(qū)塊到底是什么? 如何讓這些區(qū)塊被串在一起,又如何確保它們無(wú)法被竄改,得先從分析每一個(gè)區(qū)塊所包含的資訊說(shuō)起。 在比特幣區(qū)塊鏈中,每一個(gè)區(qū)塊 (Block)所包含的資訊,包括區(qū)塊的容量大小(Block Size)、區(qū)塊頭(Block Header)、該區(qū)塊包含的交易數(shù)量(Transaction Counter),以及每一筆被包含在這個(gè)區(qū)塊中的交易資訊(Transactions)。其中,這些交易資訊都是已經(jīng)Hash過(guò)的值,而B(niǎo)lock Header則是最重要的一個(gè)部分。 每個(gè)區(qū)塊中的Block Header大小固定為80 Bytes,包含用來(lái)追蹤區(qū)塊鏈協(xié)議升級(jí)的版本號(hào)(Version),以及三組區(qū)塊中繼資料(Block Metadata)。 第一組資料為固定32 Bytes的Hash值,從前一個(gè)區(qū)塊中的Block Header所計(jì)算出來(lái)(Previous Block Header Hash),這么做可讓每一個(gè)區(qū)塊與前一個(gè)區(qū)塊資料產(chǎn)生無(wú)形的連結(jié),并能確保區(qū)塊序列及歷史紀(jì)錄的正確性,這也是形成區(qū)塊“鏈”最關(guān)鍵的連結(jié)。 實(shí)際產(chǎn)生的過(guò)程,則是當(dāng)區(qū)塊鏈網(wǎng)絡(luò)中的其中一個(gè)節(jié)點(diǎn)完成工作量證明時(shí),該節(jié)點(diǎn)會(huì)將這個(gè)新區(qū)塊廣播給其它節(jié)點(diǎn),其他節(jié)點(diǎn)會(huì)進(jìn)行驗(yàn)證,確認(rèn)這個(gè)新區(qū)塊的正確性及有效性,并將這個(gè)新區(qū)塊接上區(qū)塊鏈,這個(gè)過(guò)程就像是讓這本大家共同維護(hù)的帳本資訊同步,此時(shí),各個(gè)節(jié)點(diǎn)便會(huì)將這個(gè)新區(qū)塊的Block Header進(jìn)行Hash,得到的Hash值會(huì)被放進(jìn)下一個(gè)產(chǎn)生的區(qū)塊中,進(jìn)行下一回合的工作量證明。 這么做可讓這些被驗(yàn)證完的交易區(qū)塊一個(gè)串接一個(gè),形成區(qū)塊鏈,一旦這個(gè)Hash值不正確,便會(huì)立刻被其他節(jié)點(diǎn)驗(yàn)證出來(lái),也因此,讓區(qū)塊鏈具有無(wú)法輕易竄改的特性。 第二組是與進(jìn)行工作量證明相關(guān)的中繼資料,由Difficulty Target、Timestamp及Nonce值所組成,Difficulty Target是在工作量證明演算法過(guò)程中,Nonce則用來(lái)表示工作量證明演算法進(jìn)行的次數(shù)。這個(gè)困難值每2016個(gè)區(qū)塊會(huì)調(diào)整一次。最后第三組則是用來(lái) 匯整多筆交易紀(jì)錄的資料結(jié)構(gòu)Merkle Tree Root,這是一個(gè)由數(shù)筆被放進(jìn)區(qū)塊中的交易記錄Hash值,經(jīng)由Merkle Tree演算法所算出來(lái)的Hash值(更多區(qū)塊鏈問(wèn)題可閱讀《區(qū)塊鏈:重塑經(jīng)濟(jì)與世界》) 。 三、區(qū)塊鏈5大關(guān)鍵技術(shù); 比特幣區(qū)塊鏈的關(guān)鍵核心技術(shù),包括用Hashcash演算法來(lái)進(jìn)行工作量證明,且交易過(guò)程采用橢圓曲線數(shù)位簽章演算法來(lái)確保交易安全,并在每筆交易與每個(gè)區(qū)塊中使用多次Hash函數(shù)以及Merkle Tree,同時(shí)也使用時(shí)間戳來(lái)確保區(qū)塊序列 比特幣區(qū)塊鏈的關(guān)鍵核心技術(shù),包括采用Hashcash演算法來(lái)進(jìn)行工作量證明,讓區(qū)塊鏈中的各節(jié)點(diǎn)有機(jī)會(huì)參與驗(yàn)證,達(dá)到公正性,且交易過(guò)程采用橢圓曲線數(shù) 位簽章演算法來(lái)確保交易安全,并在每筆交易與每個(gè)區(qū)塊中使用多次Hash函數(shù)以及Merkle Tree,不只是為了節(jié)省儲(chǔ)存空間,更重要的是藉由將前一個(gè)區(qū)塊的Hash值加入新區(qū)塊中,讓每個(gè)區(qū)塊環(huán)環(huán)相扣,也因此做到所謂的可追蹤且不可竄改的特 性,同時(shí)也使用時(shí)間戳來(lái)確保區(qū)塊序列,以下便依序解釋這些關(guān)鍵技術(shù)。 關(guān)鍵技術(shù) 1 采用工作量證明達(dá)到去中心化及公正性 首先,最關(guān)鍵的便其工作量證明機(jī)制(Proof of Work,POW),這是一個(gè)可以讓每個(gè)參與的節(jié)點(diǎn)可共同參與交易驗(yàn)證的方式,來(lái)實(shí)現(xiàn)一個(gè)能多方共同維護(hù)的單一系統(tǒng),并共享同一份記錄交易的帳本,以形成一個(gè)基于零信任基礎(chǔ),卻能實(shí)現(xiàn)去中心化的P2P網(wǎng)路系統(tǒng)。 工作量證明是讓任一運(yùn)算節(jié)點(diǎn),花費(fèi)時(shí)間和運(yùn)算資源來(lái)計(jì)算出一組數(shù)學(xué)公式的結(jié)果,且要完成一次有效的工作量證明,需經(jīng)過(guò)一連串地嘗試與失敗。不過(guò),一旦這個(gè)數(shù)值被算出來(lái)后,其他參與節(jié)點(diǎn)也可用相關(guān)的數(shù)學(xué)公式,便能很容易去驗(yàn)證這個(gè)值是否有效。 比特幣區(qū)塊鏈采用Hashcash演算法(雜湊現(xiàn)金演算法)作為工作量證明,讓各節(jié)點(diǎn)經(jīng)由POW計(jì)算來(lái)產(chǎn)生每一個(gè)有效的新區(qū)塊,再經(jīng)由其他節(jié)點(diǎn)驗(yàn)證并接受。 進(jìn)行POW計(jì)算的過(guò)程也被稱作挖礦,很多人用解一道數(shù)學(xué)題、或是解一個(gè)數(shù)獨(dú)來(lái)形容,不過(guò),怎樣才是真的算出一個(gè)有效的新區(qū)塊,這些節(jié)點(diǎn)到底在算什么? 由于每個(gè)區(qū)塊中Block Header會(huì)包含許多固定的值,其中只有Nonce值為一隨機(jī)值,因此每個(gè)節(jié)點(diǎn)進(jìn)行POW計(jì)算時(shí)要算的就是,藉由不斷替換這個(gè)Nonce值,來(lái)讓這個(gè)區(qū) 塊的Block Header Hash值,小于一個(gè)被設(shè)定好的難度目標(biāo)值(Difficulty Target),至于為什么要小于這個(gè)目標(biāo)值,則是因?yàn)檫@個(gè)難度值意味著每個(gè)區(qū)塊在理論上應(yīng)該要被產(chǎn)生完成。 這里提到的難度值 (Difficulty)是指,節(jié)點(diǎn)要運(yùn)算出低于困難度目標(biāo)值的Hash值,平均需花多久時(shí)間,也就是平均要完成一次POW的時(shí)間。而比特幣區(qū)塊鏈目前設(shè) 定為,大約每10分鐘會(huì)有節(jié)點(diǎn)成功算出新的區(qū)塊,不過(guò)這10分鐘只是基于理論值,實(shí)際每個(gè)新區(qū)塊產(chǎn)生的時(shí)間,有可能只需要17秒(第407062個(gè)區(qū)塊的 實(shí)際產(chǎn)生時(shí)間),也有可能需要20分鐘以上(第407068個(gè)區(qū)塊的實(shí)際產(chǎn)生時(shí)間)。 Difficulty可動(dòng)態(tài)調(diào)整,目前每產(chǎn)生2016個(gè)區(qū)塊會(huì)調(diào)整一次難度,以每10分鐘產(chǎn)生一區(qū)塊估算,大約是每?jī)芍軙?huì)調(diào)整一次Difficulty。 由于POW具有一定的難度,因此無(wú)法預(yù)期哪個(gè)運(yùn)算節(jié)點(diǎn)可以最快算出新區(qū)塊,藉此來(lái)確保交易驗(yàn)證的公正性。 關(guān)鍵技術(shù) 2 每筆交易采橢圓曲線數(shù)位簽章演算法加密 比特幣區(qū)塊鏈便采用橢圓曲線數(shù)位簽章演算法(ECDSA),與另一種RSA演算法,都屬于公開(kāi)金鑰加密演算法(Public Key Cryptography),公開(kāi)金鑰加密技術(shù)在1970年代被發(fā)明,也稱為雙金鑰密碼安全系統(tǒng),每個(gè)使用者會(huì)擁有公開(kāi)金鑰(Public Key)與私密金鑰(Private Key)這兩把鑰匙,公開(kāi)金鑰可讓其他人知道,而私密金鑰則只有本人知道。當(dāng)A要傳送一筆訊息或交易給B時(shí),需使用B的公開(kāi)金鑰來(lái)將這份交易加密,而這這 個(gè)加密過(guò)的訊息或交易,只有使用B的私密金鑰才能解開(kāi)。 在比特幣區(qū)塊鏈中,比特幣區(qū)塊鏈便采用橢圓曲線數(shù)位簽章演算法,每一個(gè)比特幣區(qū)塊 鏈中的節(jié)點(diǎn)使用者,會(huì)同時(shí)擁有這兩把金鑰,以及一次性使用的比特幣位址(Address),公開(kāi)金鑰可讓區(qū)塊鏈網(wǎng)絡(luò)中的其他人知道,而私密金鑰則須自行保管,可用來(lái)接收貨幣、進(jìn)行電子簽章或是發(fā)送貨幣,而Address就像電子郵件一樣可用來(lái)當(dāng)作存取比特幣的地址,使用者可重復(fù)取得新的Address,且 可以在離線狀態(tài)下產(chǎn)生,不過(guò),每個(gè)Address只能使用一次。 在比特幣區(qū)塊鏈中,每一枚電子貨幣被視為一串?dāng)?shù)位簽章,使用者要進(jìn)行比特幣交易時(shí),必須將前一筆交易以及收款方的公開(kāi)金鑰經(jīng)由Hash產(chǎn)生數(shù)位簽章,加到電子貨幣那串?dāng)?shù)位簽章的后方。 RSA 加密演算法是一種非對(duì)稱的加密演算法,利用兩個(gè)質(zhì)數(shù)作為加密與解密用的兩把鑰匙,金鑰長(zhǎng)度約在40個(gè)位元到1024位元。不過(guò)比特幣所采用的ECDSA能 算出更短的金鑰長(zhǎng)度,也就是能夠使用相對(duì)較少的資源,做到與RSA相同的安全性。在ECDSA演算法中,由私密金鑰算出公開(kāi)金鑰很容易,但要從公開(kāi)金鑰推 回私密金鑰卻很困難。 關(guān)鍵技術(shù) 3 Hashcash演算法及多種Hash函數(shù)確保資料不被竄改 前面提到比特幣區(qū) 塊鏈采用Hashcash演算法來(lái)進(jìn)行工作量證明,Hashcash可將任意長(zhǎng)度的資料經(jīng)由Hash函數(shù)轉(zhuǎn)換為一組固定長(zhǎng)度的代碼,原理是基于一種密碼學(xué) 上的單向雜湊函數(shù) (One Way Hash Function),這種函數(shù)很容易被驗(yàn)證,但是卻很難破解,還回推出原本的值。先前Hashcash演算法也被用來(lái)做阻擋垃圾郵件的機(jī)制。 常使用的單向雜湊函數(shù)包括MD5、SHA-1、SHA-256、SHA-384及SHA-512等,MD5的Hash值長(zhǎng)度為128位元,雖然廣為使用,但 因長(zhǎng)度不夠較容易破解,SHA-1的Hash值長(zhǎng)度有160位元,雖比MD5好但仍然不夠安全,因此美國(guó)國(guó)家安全局(NSA)又提出多種更復(fù)雜的SHA- 2演算法,包括224、256、384、512位元長(zhǎng)度的Hash值算法。 Hashcash最早在1997年由Adam Back提出,并于2002 正式發(fā)表一篇描述雜湊現(xiàn)金系統(tǒng)的論文。比特幣區(qū)塊鏈采用Hashcash來(lái)建立一套幾乎無(wú)法被竄改的電子現(xiàn)金系統(tǒng),每個(gè)區(qū)塊的Block Header都會(huì)被Hash成一串很難被回推的代碼后,放進(jìn)下一個(gè)區(qū)塊中,來(lái)確保區(qū)塊的正確性。 關(guān)鍵技術(shù) 4 經(jīng)由Merkle Tree將大量訊息縮短成一個(gè)Hash值 在 比特幣區(qū)塊鏈中,每筆交易產(chǎn)生后,都已經(jīng)被Hash成一段代碼才廣播給各節(jié)點(diǎn),不過(guò)這樣做還不夠,因?yàn)樵诟鞴?jié)點(diǎn)的區(qū)塊中,可能包含數(shù)百筆到數(shù)千筆的交易, 因此,為節(jié)省儲(chǔ)存空間并減少資源耗費(fèi),比特幣區(qū)塊鏈的設(shè)計(jì)原理采用Merkle Tree機(jī)制,讓這些數(shù)百到數(shù)千筆的交易Hash值,經(jīng)由兩兩一組形成一個(gè)新Hash值的方式,不斷重復(fù)進(jìn)行,直到最后產(chǎn)生一組最終的Hash值,也就是 Merkle Tree Root,這個(gè)最終的Hash值便會(huì)被記錄到Block Header中,只有32 Bytes的大小。Merkle Tree機(jī)制可大幅減少資料傳輸量與運(yùn)算資源消耗,驗(yàn)證時(shí),只需驗(yàn)證這個(gè)Merkle Tree的Root值即可。 關(guān)鍵技術(shù) 5 用時(shí)間戳伺服器(Timestamp Server)確保區(qū)塊序列 比特幣采用時(shí)間戳伺服器機(jī)制(Timestamp Server),將每個(gè)區(qū)塊Hash后加上一個(gè)時(shí)間戳(Timestamp)并發(fā)布出去,這個(gè)時(shí)間戳用來(lái)證明資料在特定時(shí)間的有效性,每一個(gè)時(shí)間戳章會(huì)與 前一個(gè)戳章一起進(jìn)行Hash,這個(gè)Hash值會(huì)在與下一個(gè)時(shí)間戳章進(jìn)行Hash,因此而形成一個(gè)用來(lái)確保區(qū)塊序列的鏈條。 四、區(qū)塊鏈運(yùn)作原理大剖析 為什么區(qū)塊鏈被稱作信任機(jī)器?將多種Hash函數(shù)、Merkle Tree,橢圓曲線數(shù)位簽章、以及時(shí)間戳等技術(shù)結(jié)合Hashcash工作量證明,正是實(shí)現(xiàn)區(qū)塊鏈的關(guān)鍵。 區(qū)塊鏈(Blockchain)顯然已經(jīng)被許多人神化,好像各行各業(yè)都可以用區(qū)塊鏈技術(shù),不過(guò)某種程度上,它卻像個(gè)黑盒子,大家都知道區(qū)塊鏈具有許多特性跟好處,卻不清楚它到底怎么做到。 區(qū)塊鏈并非單一創(chuàng)新技術(shù),而是將許多跨領(lǐng)域技術(shù)湊在一起,包括密碼學(xué)、數(shù)學(xué)、演算法與經(jīng)濟(jì)模型,并結(jié)合點(diǎn)對(duì)點(diǎn)網(wǎng)路關(guān)系,利用數(shù)學(xué)基礎(chǔ)就能建立信任效果,成為 一個(gè)不需基于彼此信任基礎(chǔ)、也不需仰賴單一中心化機(jī)構(gòu)就能夠運(yùn)作的分散式系統(tǒng),而比特幣便是第一個(gè)采用區(qū)塊鏈技術(shù)而打造出的一套P2P電子現(xiàn)金系統(tǒng),用來(lái) 實(shí)現(xiàn)一個(gè)可去中心化,并確保交易安全性、可追蹤性的數(shù)位貨幣體系。 不過(guò),區(qū)塊鏈究竟是如何運(yùn)作,其中又包含了哪些關(guān)鍵技術(shù),使其被稱作信任機(jī)器(Trust Machine),一筆交易到底要如何在一個(gè)彼此互不信任的P2P網(wǎng)路中,不經(jīng)由傳統(tǒng)的信任機(jī)構(gòu)(如銀行、證券交易所、第三方機(jī)構(gòu)等中心化機(jī)構(gòu)),就能完成交易驗(yàn)證? 要搞懂區(qū)塊鏈運(yùn)作原理,可先區(qū)分出交易(Transaction)與區(qū)塊(Block)兩個(gè)部分,這里我們分別從區(qū)塊鏈中一筆交易產(chǎn)生到完成驗(yàn)證的流程,以 及圖解一個(gè)區(qū)塊,來(lái)了解區(qū)塊鏈的運(yùn)作原理,并進(jìn)一步拆解5大區(qū)塊鏈關(guān)鍵技術(shù),看它到底怎么做到大家口中的基于零信任基礎(chǔ)、去中心化、可追蹤又不可竄改。 從一筆交易看區(qū)塊鏈運(yùn)作流程 在比特幣區(qū)塊鏈中,當(dāng)一筆交易經(jīng)由某個(gè)節(jié)點(diǎn)或錢包產(chǎn)生時(shí),這筆交易需要被傳送給其它節(jié)點(diǎn)來(lái)作驗(yàn)證。做法是將交易資料經(jīng)由數(shù)位簽章加密并經(jīng)由Hash函數(shù)得出 一串代表此交易的唯一Hash值后,再將這個(gè)Hash值廣播(Broadcast)給比特幣區(qū)塊鏈網(wǎng)絡(luò)中的其它參與節(jié)點(diǎn)進(jìn)行驗(yàn)證。 產(chǎn)生一筆新交易 一筆新交易產(chǎn)生時(shí),會(huì)先被廣播到區(qū)塊鏈網(wǎng)絡(luò)中的其它參與節(jié)點(diǎn) 各節(jié)點(diǎn)將數(shù)筆新交易放進(jìn)區(qū)塊 每個(gè)節(jié)點(diǎn)會(huì)將數(shù)筆未驗(yàn)證的交易Hash值收集到區(qū)塊中,每個(gè)區(qū)塊可以包含數(shù)百筆或上千筆交易。 決定由誰(shuí)來(lái)驗(yàn)證這些交易 各節(jié)點(diǎn)進(jìn)行工作量證明的計(jì)算來(lái)決定誰(shuí)可以驗(yàn)證交易,由最快算出結(jié)果的節(jié)點(diǎn)來(lái)驗(yàn)證交易,這就是取得共識(shí)的做法。 取得驗(yàn)證權(quán)的節(jié)點(diǎn)將區(qū)塊廣播給所有節(jié)點(diǎn) 最快完成POW的節(jié)點(diǎn),會(huì)將自己的區(qū)塊廣播給其他節(jié)點(diǎn)。 各節(jié)點(diǎn)驗(yàn)證并接上新區(qū)塊 其他節(jié)點(diǎn)會(huì)確認(rèn)這個(gè)區(qū)塊所包含的交易是否有效,確認(rèn)沒(méi)被重復(fù)花費(fèi)且具有效數(shù)位簽章后,接受該區(qū)塊,此時(shí)區(qū)塊才正式接上區(qū)塊鏈,無(wú)法再竄改資料。 交易驗(yàn)證完成 所有節(jié)點(diǎn)一旦接受該區(qū)塊后,先前沒(méi)算完P(guān)OW工作的區(qū)塊會(huì)失效,各節(jié)點(diǎn)會(huì)重新建立一個(gè)區(qū)塊,繼續(xù)下一回POW計(jì)算工作。 來(lái)源:集微網(wǎng) |
|
來(lái)自: CharlseShan > 《區(qū)塊鏈》