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