《圖解區塊鏈》原理篇(中)Part 1
上一篇《圖解區塊鏈》原理篇(上)從華爾街中心化清算業務演化的故事切入,到說明區塊鏈去中心化交易常見的問題「分岔」和「雙花」。
而這篇文章將延續上一篇最後的內容,針對去中心化交易背後運作原理做閱讀分享。
就讓我們一起來看區塊鏈背後如何運作的吧!
分享運作原理前,先針對區塊鏈的核心概念做間單的分享。
區塊 ( Block )
區塊鏈 ( Blockchain ) 顧名思義是由複數個區塊 ( Block ) 所組成,所以區塊鏈的基本結構是以區塊為單位,而區塊由包含了元資料 ( Metadata ) 的區塊頭 ( Block Header )和包含交易資料的區塊體 ( Block Body ) 所構成。
區塊頭 ( Block Header ): 包含了三種元資料 ( Metadata )
- 用於連接前面的區塊和索引自父區塊的雜湊值/哈希值 ( hash of previous block header ) 資料。
- 時間戳 ( Timestamp )、Nonce ( 數字,用於工作量證明演算法的計數器 ) 以及挖礦難度 ( Difficulty Target,工作量證明演算法的困難值 )。
- 當前區塊中的交易經由「默克爾樹」( Merkle Tree ) 演算法所算出的默克爾樹根 ( Merkle Tree Root ) 節點的雜湊值/哈希值。
區塊體 ( Block Body )
交易紀錄 ( Transactions ): 以默克爾樹 ( Merkle Tree ) 形式表示產生該區塊的所有交易資料。
記錄中包含了生成時間、引用交易的Hash值、交易記錄索引編號、比特幣支出地址等等的數據。而每一筆收支交易記錄都有一個 Merkle 節點 Hash 值,這也是 Merkle Tree 的一部份,決定了每一個地址都不能夠重複交易或被偽造。
部分內容引述以及參考自:
雜湊演算法 ( Hash Algorithm )
雜湊演算法是一種從任何資料中建立「數位指紋」( Digital fingerprint ) 的方法,可以將任何長度的資料轉換/壓縮成一組由數字和字母所組成長度較短且不可逆的散列字串,也就是「雜湊值」( Hash value ),又稱為「訊息摘要」( MD:Message Digest )。
用於保證交易訊息不被篡改的單向機制,另外雜湊演算法不是加密 ( Encryption )哦!想知道為啥不是解密可以參考 [ 雜湊不是加密,雜湊不是加密,雜湊不是加密。]。
特色一
雜湊值不可逆,無法透過輸出的散列資料倒推原本的明文資料。
特色二
輸入的明文資料與散列資料相互對應,只要明文資料一有變化,都會導致輸出的散列資料產生變化。所以雜湊值沒變也就意味著區塊中資料沒有被篡改。
公鑰 ( Public Key ) 和私鑰 ( Private Key )
「非對稱式加密」( Asymmetric Encryption ) 是「對稱式加密」( Symmetric Encryption ) 的加強版,非對稱加密就是透過公鑰和私鑰來實踐。
信息發送方:
用私鑰進行數位簽章,使用訊息接收方的公鑰對訊息加密。
信息接收方:
用信息發送者的公鑰驗證訊息發送方的身份,使用私鑰對加密的信息進行解密。
公鑰 ( Public Key )
公開的,可以輕易取得,常用於加密私鑰、驗證數位簽章等數據。
私鑰 ( Private Key )
非公開的,由使用者嚴密保管,不提供給出去給任何人或單位。
完整介紹可以參考:
時間戳 ( Timestamp )
區塊鏈中的時間戳從區塊生成的那一刻起就存在於區塊中,所對應的是每一次交易紀錄的認證,用於證明交易紀錄的真實性。
每一個時間戳會將前一個時間戳也納入雜湊值中,這個過程不斷重複使用,依次相連,最後生成一個完整的鏈。
默克爾樹( Merkle Tree )
區塊鏈用默克爾樹的資料結構存放資料訊息的雜湊值於葉子節點 ( 也就是沒有子節點的節點 ) ,並以此為基礎生成一個統一的雜湊值。非葉子節點儲存的是對其下面所有葉子節點組合所進行雜湊運算後所得到的雜湊值。
同樣,區塊中任意一個資料更動都會導致默克爾樹結構產生變化。交易訊息驗證比對的過程中,默克爾樹結構能大大減少資料的計算量,也只需要驗證默克爾樹結構生成的統一雜湊值即可。