區(qū)塊鏈構(gòu)架就是造房子,10分鐘帶你走遍構(gòu)建全程
軍備競(jìng)賽的一部分——黑客在逆向推演哈希函數(shù)方面做得越來(lái)越好,因此密碼學(xué)家總是得想出更強(qiáng)大的哈希函數(shù)。
除此之外,難題友好屬性使區(qū)塊鏈難以篡改。如果我想替換像“我喜歡冰淇淋”這樣的項(xiàng),我不可能在沒(méi)有其他參與者知道的情況下做到。
被加密哈希函數(shù)散列后,輸入的微小變化也會(huì)導(dǎo)致輸出的顯著不同,從而達(dá)到防篡改的目的。
加密哈希函數(shù)看起來(lái)是隨機(jī)的(因此沒(méi)有碰撞),無(wú)法逆轉(zhuǎn),并隱匿輸入,但同時(shí)它們又是完全確定的。這就是它們有用的原因!
這就是加密哈希函數(shù)的基礎(chǔ)知識(shí),下面我們來(lái)談?wù)勅绾斡眠@些哈希函數(shù)來(lái)構(gòu)建區(qū)塊鏈。
區(qū)塊鏈內(nèi)的傳遞哈希函數(shù)
上面關(guān)于哈希函數(shù)的部分實(shí)際上只是對(duì)如何散列單個(gè)信息(例如書(shū)籍或密碼中的單詞)的詳細(xì)介紹。
如果你想要散列數(shù)據(jù)集合(如一堆文檔或一系列交易),該怎么辦?
讓我們從「連續(xù)散列的線性序列」講起。首先從一些數(shù)據(jù)A開(kāi)始,然后將其散列以獲得A#。
現(xiàn)在你想“混入”數(shù)據(jù)B。所以只需要添加B(A#+ B)并獲取整個(gè)數(shù)據(jù)的哈希值。現(xiàn)在你有了一個(gè)新的哈希(B#),它包含一些關(guān)于A(來(lái)自你使用的哈希A#)和B的信息。
你得到的是一個(gè)改變A或B的任何東西都會(huì)產(chǎn)生不同的最終哈希值的哈希函數(shù)。這是一個(gè)傳遞哈希函數(shù)。
當(dāng)人們談起區(qū)塊鏈,其中一個(gè)被大量提到的詞是“信任最小化”。
一般而言,哈希,特別是哈希指針,是區(qū)塊鏈信任最小化屬性的核心組件。哈希指針只是指向某些其他數(shù)據(jù)結(jié)構(gòu)(如前一個(gè)區(qū)塊)的哈希。
這是一個(gè)了不起的組件,因?yàn)樗苋菀卓闯鍪欠裼腥舜鄹臄?shù)據(jù)。
假設(shè)我們有一個(gè)包含100個(gè)區(qū)塊的區(qū)塊鏈,而第十個(gè)區(qū)塊包含整個(gè)《戰(zhàn)爭(zhēng)與和平》文本的哈希,我在文本中更改了一個(gè)字母,它將改變?cè)搮^(qū)塊和所有后續(xù)區(qū)塊中的哈希指針。
哈希指針確保分類(lèi)帳的完整性(即不被修改)。區(qū)塊鏈被稱(chēng)為三重登帳(triple entry accounting)的原因是哈希指針這種數(shù)據(jù)結(jié)構(gòu)難以被篡改。
例如,如果有兩個(gè)人在一個(gè)項(xiàng)目上進(jìn)行協(xié)作,而一個(gè)人試圖回去修改某些東西以便他們能賺更多的錢(qián),那么他們的合作伙伴就會(huì)立即獲悉他們正在作弊——他們最終得到的哈希是不同的。
Merkle樹(shù)
現(xiàn)在,我們想要散列的不僅僅是一個(gè)線性序列,而是一系列集合,比如比特幣在其區(qū)塊序列中的交易集合。那么就需要構(gòu)建的是遍歷每組數(shù)據(jù)的規(guī)則,通過(guò)再次減少問(wèn)題以加密連續(xù)的一系列事物(A#,B#等)。
這里就引出了Merkle樹(shù)。Merkle樹(shù)允許你對(duì)數(shù)據(jù)區(qū)塊進(jìn)行分組并將它們一起散列到一個(gè)樹(shù)枝結(jié)構(gòu)中。
與區(qū)塊鏈一樣,只要我們知道樹(shù)的“根”處的哈希點(diǎn),我們就可以知道樹(shù)中任何數(shù)據(jù)是否被篡改過(guò)。
如果一個(gè)交易中的一個(gè)比特被更改,那么它會(huì)更改后續(xù)的每個(gè)哈希并顯示篡改。
使用Merkle樹(shù)優(yōu)于僅使用記錄所有交易的摘要,因?yàn)樗芨旄?jiǎn)單地檢測(cè)某特殊交易是否包含在所有交易的集合中。
區(qū)塊鏈
在上文中,我們提到了哈希函數(shù)以及它的三個(gè)屬性:抗碰撞性,確定隱匿性和難題友好性。那么接下來(lái),我們就將加密哈希函數(shù)連接在一起以創(chuàng)建傳遞加密哈希函數(shù)。
首先,當(dāng)我們將一個(gè)Merkle樹(shù)添加到傳遞加密哈希函數(shù)時(shí),會(huì)得到一個(gè)區(qū)塊鏈。每個(gè)區(qū)塊包含一組“merkleized”交易,并且這些區(qū)塊被鏈接在一起。
區(qū)塊鏈工作量證明
中本聰?shù)膫ゴ笤谟谒贫艘粋€(gè)新規(guī)則:你必須先解決一個(gè)非常困難的數(shù)學(xué)問(wèn)題,才能將一組新交易(即一個(gè)區(qū)塊)添加到現(xiàn)有鏈中。
這就是“礦工”的工作。他們需要解決一個(gè)非常困難的數(shù)學(xué)問(wèn)題,在解決問(wèn)題后他們會(huì)收到相應(yīng)的獎(jiǎng)勵(lì)。這也被稱(chēng)作“工作量證明”,它是解決問(wèn)題所消耗計(jì)算量的證明。
“區(qū)塊鏈工作量證明”的發(fā)明是中本聰?shù)淖畲髣?chuàng)新。
由于使用工作量證明,像比特幣這樣的區(qū)塊鏈變得更有價(jià)值,礦工憑此賺到更多的錢(qián),同時(shí)它激勵(lì)更多的礦工進(jìn)入網(wǎng)絡(luò),當(dāng)然也會(huì)增加數(shù)學(xué)問(wèn)題的難度。
任何人都可以在他們的計(jì)算機(jī)上下載區(qū)塊鏈,并且連續(xù)驗(yàn)證每個(gè)區(qū)塊是否可以正確地散列。
他們還可以通過(guò)讀取每個(gè)區(qū)塊的難度并驗(yàn)證礦工的解決方案來(lái)計(jì)算生成此數(shù)據(jù)所需的計(jì)算量。
具有最多累積工作量證明的區(qū)塊鏈(即最困難和最昂貴的)被認(rèn)為是真正的區(qū)塊鏈。
如果你擁有包含整個(gè)當(dāng)前比特幣區(qū)塊鏈的磁盤(pán),你可以快速地估算出用于構(gòu)建這些數(shù)據(jù)所消耗的巨大能量。
這樣做的好處是如果沒(méi)有達(dá)到相應(yīng)的算力,沒(méi)有人可以“偽造”比特幣區(qū)塊鏈
至2018年中,如果從頭開(kāi)始構(gòu)建比特幣區(qū)塊鏈,可能需要花費(fèi)數(shù)十億美元購(gòu)買(mǎi)計(jì)算機(jī)和電力。
數(shù)字簽名(即私鑰/公鑰加密)
數(shù)字簽名是架構(gòu)區(qū)塊鏈的最后基元。可行的數(shù)字簽名方案與手寫(xiě)簽名大致相同,它們都具有兩個(gè)核心屬性。
首先是可驗(yàn)證性。如果我使用私鑰簽署交易,則其他人必須能夠使用我的公鑰對(duì)其進(jìn)行驗(yàn)證。類(lèi)似的,只有你自己可以簽署自己的簽名,但任何人都可以看到它是你簽署的。
私鑰和公鑰匹配為密鑰對(duì)。私鑰不與其他人共享,它用于簽署并證明交易。
公鑰則可以提供給每個(gè)人,他們用公鑰驗(yàn)證你的簽名,而無(wú)需他們自己簽名。
你的公鑰是私鑰的哈希值。而你的地址(例如接收比特幣的地址)是你的公鑰的哈希值。
如下所示:
私鑰==散列==>公鑰==散列==>地址
由于加密哈希函數(shù)的隱匿性,你可以毫無(wú)顧慮地發(fā)布自己的地址,其他人可以向你發(fā)送比特幣、以太幣等加密貨幣,卻無(wú)法反向找出你的私鑰。
第二個(gè)屬性是不可偽造性。你的簽名與特定文檔相關(guān)聯(lián)。自然地,你不會(huì)希望其他人能夠從一個(gè)文件中“剪掉”你的簽名再將其粘貼到另一個(gè)文件的底部。
比特幣使用橢圓曲線數(shù)字簽名算法(Elliptic Curve Digital Signature Algorithm)來(lái)實(shí)現(xiàn)這兩個(gè)屬性。其他區(qū)塊鏈和數(shù)字加密貨幣使用不同的數(shù)字簽名方案,但都具有可驗(yàn)證性和不可偽造性這兩個(gè)屬性。
區(qū)塊鏈類(lèi)似于書(shū)籍
我認(rèn)為將區(qū)塊鏈視作書(shū)籍可能是研究它的最簡(jiǎn)單的方法。一本書(shū)是一系列頁(yè)面:
數(shù)據(jù)——每頁(yè)上的文字。
元數(shù)據(jù)——元數(shù)據(jù)是信息本身。在每一頁(yè)的頂部或底部,有一些關(guān)于書(shū)籍的信息,如書(shū)名,章節(jié)標(biāo)題和頁(yè)碼。
區(qū)塊鏈?zhǔn)且幌盗械膮^(qū)塊:
數(shù)據(jù)——區(qū)塊的內(nèi)容
元數(shù)據(jù)——對(duì)前一個(gè)區(qū)塊的引用和該區(qū)塊中包含的數(shù)據(jù)的哈希。
即便你撕下書(shū)中所有頁(yè)面,你仍可以重新按照頁(yè)碼組合它們。
同樣,在區(qū)塊鏈中,每個(gè)區(qū)塊都引用前一個(gè)區(qū)塊的哈希值,從而可以驗(yàn)證交易發(fā)生的順序。
哈希實(shí)際上比頁(yè)碼更強(qiáng)大,因?yàn)楣0擁?yè)面的所有數(shù)據(jù)。而撕下一本書(shū)中的某一頁(yè)并涂改其他相關(guān)頁(yè)碼是有可能騙過(guò)你的。
然而在區(qū)塊鏈“書(shū)”中執(zhí)行相同的操作是及其困難的,因?yàn)楦捻?yè)面上的任何一個(gè)字母都會(huì)改變哈希值。
區(qū)塊鏈技術(shù)的演變
現(xiàn)在,讓我們組合這些基元,看看它們?nèi)绾螛?gòu)建簡(jiǎn)單的區(qū)塊鏈。
以下這些類(lèi)型的區(qū)塊鏈?zhǔn)潜忍貛藕鸵蕴坏葦?shù)字加密貨幣的基礎(chǔ)。了解它們的工作原理對(duì)理解其他所有區(qū)塊鏈和數(shù)字加密貨幣都有幫助。
Goofy Coin
GoofyCoin是我們可以設(shè)想的最簡(jiǎn)單的區(qū)塊鏈。
Goofy可以隨時(shí)創(chuàng)造新的虛擬貨幣,并且這些新創(chuàng)造的虛擬貨幣歸他所有。每一個(gè)幣有Goofy用私鑰簽名的唯一ID,這樣所有人都可以使用Goofy的公鑰來(lái)確認(rèn)幣是有效的GoofyCoin。
擁有Goofycoin的人可以通過(guò)加密操作將其轉(zhuǎn)移給其他人。如果Goofy想要將一枚虛擬貨幣轉(zhuǎn)移給Alice,他會(huì)創(chuàng)建一個(gè)交易,說(shuō)“將這筆錢(qián)(this coin)交給Alice”。
因?yàn)镚oofycoin只能通過(guò)加密操作發(fā)送,所以“this”是指向所討論虛擬貨幣的哈希指針。Goofy用他的私鑰簽署此交易,使其成為有效的交易。任何人都可以通過(guò)確認(rèn)Goofy的簽名來(lái)檢查它是否為有效的交易。
但是,事實(shí)上GoofyCoin存在安全問(wèn)題,Alice可以用她剛獲得的虛擬貨幣進(jìn)行一項(xiàng)交易,比如向Bob支付三明治的費(fèi)用。
但是,如果Alice又使用它來(lái)購(gòu)買(mǎi)Chuck的奶昔呢?
Bob和Chuck都會(huì)認(rèn)為他們現(xiàn)在擁有一枚GoofyCoin。它們看起來(lái)都像是有效的交易,因?yàn)镃huck和Bob可以看到Alice的簽名并在區(qū)塊鏈上追蹤它,并發(fā)現(xiàn)它是有效貨幣。
這種情況被稱(chēng)為雙重支付攻擊。我們當(dāng)然不能容忍用同一枚虛擬貨幣既買(mǎi)到三明治又買(mǎi)到奶昔。
雙重支付攻擊是功能性加密貨幣需要防范的主要問(wèn)題之一。
為了解決雙重支付問(wèn)題,我們需要?jiǎng)?chuàng)建一個(gè)名為ScroogeCoin的新虛擬貨幣。
ScroogeCoin
ScroogeCoin類(lèi)似于GoofyCoin,但有做出了一些不同的改變。
與GoofyCoin不同的是,Scrooge發(fā)布了一個(gè)包含所有交易歷史的區(qū)塊鏈。
Scrooge會(huì)簽署區(qū)塊鏈中每個(gè)區(qū)塊的哈希指針。那么任何人都可以通過(guò)檢查區(qū)塊上的Scrooge簽名來(lái)驗(yàn)證交易是否有效。
因?yàn)镾crooge查看過(guò)每筆交易,所以他可以確保沒(méi)有人雙重支付。如果Alic
責(zé)任編輯:售電衡衡
-
5大重點(diǎn)任務(wù)11個(gè)重點(diǎn)細(xì)分 河北加快構(gòu)建省級(jí)能源大數(shù)據(jù)中心
-
能源互聯(lián)網(wǎng)注入數(shù)字經(jīng)濟(jì)新動(dòng)能 電力大數(shù)據(jù)實(shí)現(xiàn)更多價(jià)值
-
中國(guó)首個(gè)100%利用清潔能源運(yùn)營(yíng)的大數(shù)據(jù)產(chǎn)業(yè)園投運(yùn)
2020-07-21清潔能源,清潔能源消納,青海
-
探索大數(shù)據(jù) 區(qū)塊鏈實(shí)現(xiàn)與能源互聯(lián)網(wǎng)良好契合
2020-06-09區(qū)塊鏈,電力行業(yè),能源互聯(lián)網(wǎng) -
基于區(qū)塊鏈的含安全約束分布式電力交易方法
-
區(qū)塊鏈在能源交易與協(xié)同調(diào)度的應(yīng)用前景:提升電力交易的自由度和實(shí)時(shí)響應(yīng)效率
2019-11-04區(qū)塊鏈在能源交易與協(xié)同