比特幣如何利用密碼學和安全雜湊算法 (SHA) 來連結區塊鏈中的記錄?
我想知道比特幣如何使用密碼學和安全雜湊算法(如 SHA256)來連結區塊鏈中的記錄。如果可能的話,我認為如果有一個區塊鏈圖形的展示,它會讓我更好地理解。
比特幣塊是聚合所有交易的容器資料結構。該塊由一個標頭(包含元數據)組成,後面是包含在該塊中的一長串交易。區塊頭由默克爾樹根、前一個區塊頭雜湊、時間戳以及其他元數據組成。
簡單來說,默克爾樹根包括使用默克爾樹的塊中所有交易的摘要。塊中的每筆交易都被序列化並雜湊兩次
SHA256
以獲得交易 id 或txid
. 然後將塊中所有交易的這些txid
s 成對地進行雙重雜湊處理SHA256
,直到頂部只有一個節點,稱為默克爾根。由於這個 merkle 根是由塊中的所有交易本身建構的,因此可以認為該根包含包含所有交易的摘要。Merkle 根計算的一個說明性範例如下所示:塊的頭部部分被雜湊兩次
SHA256
以獲得塊頭部雜湊(在探勘過程中)。該塊頭雜湊總是在該previousblockhash
欄位的下一個塊中引用。因此,每個塊都使用其標頭雜湊連結到前一個塊,形成一個連結,該連結一直回到創世塊,如下圖所示:由於
SHA256
是單向數學函式,因此無法僅通過查看雜湊來對數據進行逆向工程。SHA256
也是確定性的,從某種意義上說,特定數據總是會給出特定的雜湊值。稍微改變數據將完全改變雜湊輸出。因此,如果一方想要更改包含在區塊鏈某處某個塊中的交易中的某些數據,它將更改該塊的默克爾根。由於 merkle root 構成了塊頭的一部分,因此更改 merkle root 將完全改變塊頭雜湊。由於該雜湊在下一個塊中被引用,目前雜湊將與被引用的雜湊不兼容,因此該塊將不會被接受。
這就是採礦工作證明發揮關鍵作用的地方。正如我上面所說,更改塊中的數據會完全改變塊頭。因此,如果您想更改過去區塊中的數據,則必須重新探勘所有後續區塊。因此,您將不得不花費電力和計算成本來重新探勘所有區塊,並通過形成最長的鏈來超越網路。執行此類操作的成本非常高,並且可能不會超過您從中獲得的收益,從而為比特幣提供了固有的安全性。
另外,我想指出,您不能隨心所欲地更改交易資料結構。每筆交易都使用包含整個交易數據作為消息的私鑰進行簽名。因此,稍微更改交易數據將導致交易無效,並且將此類無效交易包含在塊中將導致塊無效。因此,簡而言之,您所能做的就是在之前的區塊中包含/排除某些交易,或進行輕微的外觀更改(如 ECDSA 簽名延展性)。