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