區(qū)塊鏈中的不變性是什么意思
不變性一詞已經(jīng)成為了區(qū)塊鏈的同義詞。字典將不變性定義為“不可變性”。該詞指的是區(qū)塊鏈的特征,即寫入?yún)^(qū)塊鏈的任何數(shù)據(jù)都不能被更改或修改。
如何更好地理解它呢?我們可以將其與谷歌電子表格進(jìn)行比較。后者具有行和列,您可以隨時(shí)添加、編輯或刪除這些行和列。而當(dāng)您在區(qū)塊鏈中輸入任何數(shù)據(jù)時(shí),除非達(dá)成一致協(xié)議,否則您不能改動(dòng)這些數(shù)據(jù)。因此,雖然區(qū)塊鏈中的數(shù)據(jù)不是100%不可變的,但是需要更改它是非常復(fù)雜的。
如果區(qū)塊鏈非完全不可觸摸,為什么它被稱為不可變?為了避免混淆和誤解,我們需要討論兩個(gè)與不可變性密切相關(guān)的單詞——防篡改和篡改明顯。
當(dāng)某些東西被篡改明顯時(shí),每個(gè)人都會(huì)注意到每一個(gè)小變化和修改。另一方面,防篡改意味著物體確實(shí)是無法觸及的。要找到防篡改的東西是不可能的,因?yàn)閹缀跛械臇|西都容易發(fā)生變化。然而,有些東西極難被改變。
牙膏就是一個(gè)例子。當(dāng)有人從牙膏管里擠出牙膏時(shí),無論你多么努力地想把管子恢復(fù)到原來的狀態(tài),都是困難的。
這就是防篡改的意義所在。雖然你可以觸摸或改變一些東西,但這很難做到,因?yàn)橐呀?jīng)做過的改變是非常明顯的。區(qū)塊鏈也是一樣; 因此,我們可以說區(qū)塊鏈?zhǔn)欠来鄹亩皇谴鄹拿黠@。因此,存儲(chǔ)在區(qū)塊鏈中的任何數(shù)據(jù)都被認(rèn)為是安全合法的。
區(qū)塊鏈中不變性是如何工作?
既然我們已經(jīng)確定了區(qū)塊鏈?zhǔn)遣豢勺兊?,因?yàn)槿绻淮鄹乃鼤?huì)出現(xiàn)很明顯的證據(jù),那么下一個(gè)問題是: 區(qū)塊鏈在多大程度上是不可變的?
為了理解不變性是如何工作的,我們必須討論哈希。哈希是一組創(chuàng)建數(shù)字簽名(也稱為校驗(yàn)和)的數(shù)學(xué)操作。它的工作原理類似于您的真實(shí)簽名,但是您將數(shù)字簽名附加到任何數(shù)字?jǐn)?shù)據(jù)上,而不是紙上。
大多數(shù)現(xiàn)代編程語言都有各種散列函數(shù)。其中之一是安全哈希算法2或SHA-2。在這個(gè)哈希函數(shù)下,有更多類型的實(shí)現(xiàn),其中最流行的是SHA-256。嘗試輸入一組字節(jié),哈希函數(shù)將產(chǎn)生唯一的校驗(yàn)和。
作為一個(gè)例子,讓我們使用這三行Python代碼,它可以訪問SHA-256和其他SHA-2實(shí)現(xiàn)。使用這個(gè)算法,我們將輸入字符串“this is magic”。
》》》 import hashlib
》》》 h = hashlib.sha256(‘this is magic…’)
》》》 h.hexdigest()
‘49240b3cc693fd281422bbcabb5f207ae2
這個(gè)hashlib將提供一個(gè)由64個(gè)字符組成的字符串——不多也不少。無論您的輸入是大是小,它都將生成具有相同字符數(shù)的校驗(yàn)和。為了證明這一點(diǎn),讓我們輸入一個(gè)更長的字符串:
》》》 h = hashlib.sha256(‘humpty dumpty sat on a wall, humpty dumpty had a great fall’)
》》》 h.hexdigest()
‘518e3f99fb2b26b4613c8597b371d11543
如果計(jì)算校驗(yàn)和,總共是64個(gè)字符,但是校驗(yàn)和是惟一的。惟一性是哈希函數(shù)最顯著的屬性之一。因此,即使您計(jì)算兩個(gè)看起來相同的文件,當(dāng)您計(jì)算它們的數(shù)字簽名或校驗(yàn)和時(shí),您也會(huì)發(fā)現(xiàn)是否有任何不同。即使變化很小而且您看不到它,但是哈希不會(huì)說謊,它會(huì)告訴您差異。
在第一個(gè)哈希輸入“this is magic…”中,校驗(yàn)和是“49240b3cc693fd281422bbcabb5f207ae2a390003534989fb55080799ee08d8c”。
如果你在句子中再加一個(gè)句號(hào),就會(huì)得到另一個(gè)結(jié)果。計(jì)算:
》》》 h = hashlib。sha256(this is magic.。.. ‘)
》 》 》 h.hexdigest ()
“6 c3e6636db1eb2fa8fcf8d4fdbf33bff4129ccb985c24848ef25311d506dde73”
通過向字符串添加一個(gè)額外的字符(句點(diǎn)),它產(chǎn)生了一個(gè)不同的哈希輸出。哈希輸出的另一個(gè)迷人的特性是“計(jì)算上不可能”返回并確定是哪種輸入影響了這個(gè)惟一的輸出。
即使你要求經(jīng)驗(yàn)豐富的開發(fā)人員找出創(chuàng)建的輸入值,他們也會(huì)告訴你這是不可能的。另一方面,如果你要求同一個(gè)開發(fā)人員從“this is magic 。..”字符串中給你一個(gè)SHA-256簽名,他將為你提供相同的值。
區(qū)塊鏈上的事實(shí)有多安全有效?
區(qū)塊鏈由鏈接數(shù)據(jù)塊組成,創(chuàng)建一個(gè)鏈。每個(gè)塊由多個(gè)事務(wù)或事實(shí)組成。軟件將計(jì)算每個(gè)塊的校驗(yàn)和。饋入計(jì)算的數(shù)據(jù)包含大量信息,其中包括前一個(gè)塊和當(dāng)前塊的校驗(yàn)和。這些因素都將包含在新塊的計(jì)算中,這就是為什么重寫區(qū)塊鏈幾乎是不可能的。
每次有一個(gè)新事務(wù)時(shí),它都會(huì)直接進(jìn)入一個(gè)事務(wù)池,等待被寫入?yún)^(qū)塊鏈。如果有足夠的交易,比特幣節(jié)點(diǎn)將處理每筆交易以創(chuàng)建一個(gè)新的塊,然后將其添加到鏈中。這些將成為區(qū)塊鏈中的永久記錄。
區(qū)塊鏈中的校驗(yàn)和格式以零開頭。每次記錄校驗(yàn)和并將其添加到區(qū)塊鏈時(shí),都會(huì)向散列輸出添加更多的零。如果有人想要更改區(qū)塊鏈的歷史記錄并添加一個(gè)新的事務(wù),那么他必須回到Block 1并計(jì)算一個(gè)全新的Block 1散列輸出。這樣的過程將需要大量的計(jì)算能力以及時(shí)間、金錢和精力。