區塊鏈加密算法(迅搜區塊鏈科普系列03 區塊鏈的加密算法和共識機制)
區塊鏈中用到的加密算法和共識機制是兩個非常重要的組成部分,有人把它們比喻成人體的骨骼和靈魂。
加密算法
首先我們來理解什么是區塊鏈的加密算法?區塊鏈中用到的加密算法一般主要分為兩類:非對稱加密算法和哈希函數。非對稱加密算法是相對于對稱加密算法來理解的,所謂的對稱加密算法是加密和解密用的都是同一套秘鑰,類似于我們看的諜戰片里面所用到的密碼,任何一方拿到了對方的密碼表,就可以破譯對方諜戰人員傳送的加密信息,將加密信息解讀為原文。
非對稱的加密算法
也稱作公開的加密算法,它有兩把秘鑰,其中一把可以公開,另外一把私有,這兩把秘鑰可以分別用來加密和解密,而這種加密算法,非常適合用于區塊鏈的賬戶體系,一個能充當賬戶,另一個充當密碼。比較知名的非對稱加密算法有RSA算法(大整數分解算法)、ECC算法(橢圓曲線算法),具體的算法證明過程,感興趣的同學可以自己查找相關的資料進一步學習。有個例子可以明顯地區別這兩個算法:破解228比特的RSA秘鑰需要的能量可以煮沸一湯匙的水,而破解228比特的ECC秘鑰的能量可以煮沸地球上所有的水。在一定程度上也顯示了ECC的安全性。
哈希函數
哈希函數本質上是一種映射關系,能將任意長度的信息(消息)壓縮成固定長度的二進制的串,換成計算機語言就是哈希函數能實現任意大小信息轉換成唯一對應的數字ID,這個特點主要被用到區塊鏈的存證。哈希函數在比特幣中主要用在梅克爾樹、區塊指針和比特幣挖礦中發揮作用,哈希函數包括SHAJ家族的SHA-1、SHA-256等等。
接下來具體介紹一下加密算法在區塊鏈中的是如何應用的,如圖
圖1
在非對稱加密算法中可以通過非對稱加密函數導出公開的秘鑰(即公鑰 ),私鑰可以推導出公鑰,但是公鑰不能反向推導出私鑰,所以公鑰是可以公開的,私鑰可以作為驗證工具,用以驗證并導出公鑰,也就是說私鑰和公鑰之間存在映射關系。換言之,私鑰和公鑰可以作為區塊鏈賬本中的密碼和賬戶的功能外,同時,我們在發送交易時,私鑰可以作為驗證自己的信息的簽名,也就是用私鑰將某段信息進行加密,生成了自己的數字簽名,而該數字簽名可以用公鑰來非常簡單的進行解密,也即驗證。在比特幣中公鑰是一串很長的數字,在進行比特幣轉賬時,是打款給對方的收款地址,而這個地址是結合公鑰用哈希函數得到的。
總結:私鑰持有者可以通過私鑰可以生成屬于自己獨有的數字簽名(加密信息),由于公鑰是全網公開的,其他人(接收著)可以通過公鑰來驗證我的身份。
比特幣是如何將哈希生成區塊的呢?由于哈希函數的特性(極大地輸入映射成唯一極小的輸出—驗證ID),且區塊的組成內容是礦工對一段時間內所有交易的記錄,為了生成該區塊,它的頭哈希(上節內容)就相當于這個區塊的唯一ID,然后利用梅克爾樹這樣的結構,將大量的交易數據通過層次化的哈希,遞歸生成根哈希值(父哈希),記錄在區塊頭中,具體的過程如下圖所示
圖2
共識機制
分布式記賬者群體對交易的記錄達成一致,換言之,分布式數據節點對記錄的數據達成一致,具備相同的狀態。共識機制里面有個著名的“拜占庭將軍問題”,感興趣的同學可以查閱資料深入了解。這個問題衍生出來的就是分布式系統的一致性問題,如圖
圖3
非拜占庭容錯模型,一般是沒有攻擊者的,一般認為節點安全可靠,它通常用于互聯網的通信傳輸模型或者分布式服務器的模型中;拜占庭容錯模型,它存在攻擊者,最后一個是經濟模型。在區塊鏈中,我們需要綜合考慮這些模型。在利用這些模型時,我們需要知道兩個定理
FLP定理:在網絡可靠、存在節點失效的最小化異步模型系統中,不存在一個可以解決一致性問題的確定算法
節點失效、異步分布式系統,無法完全一致
CAP定理:一致性、可用性、分區容錯性,三者不可兼得
一致性:所有節點訪問同一份最新的數據副本
可用性:每次請求都能獲取到非錯的響應
分區容錯性:因為網絡故障導致的系統分區不影響系統的正常運行
根據以上定理,我們可以知道在一個區塊鏈的異步分布式系統中是不可能達成一個強一致性的,為了解決這個問題,就要引入共識機制,根據不同的模型,也會設計不同的共識機制,如下
非拜占庭容錯——適用于分布式數據庫
共識機制:Paxos、Raft等等
特點:性能較高、容錯性較差
拜占庭容錯——適用于分布式賬本(區塊鏈)
共識機制:PoW、PoS、DPoS、PBFT
特點:容錯性較高、性能較差
思路:1)提高惡意節點的犯錯成本,降低錯誤出現的概率
2)允許一定比例惡意節點出現,依然實現賬本一致
那么結合以上的知識,我們就可以總結出共識機制特點:
隨機性
隨機選擇記賬者(將軍),提高作惡者的成本(連續作惡、大比例作惡)
隨機數不可被預測、不可被操控
抗女巫攻擊
抵抗刷小號來提高被選中概率的作惡手法
增加門檻:計算力(工作量證明)、資源(權益證明)
獎勵機制
獎勵誠實的參與者(比特幣)
不誠實參與者的反激勵機制
綜上所述,在這些特性下,加固了區塊鏈的安全性,提高作惡者的門檻,我們用三張圖來詳細講述不同共識機制的區塊鏈項目
PoW機制
PoS機制
DPoS機制
最后我們簡單的介紹一下
實用拜占庭容錯算法(PBTF)
解決拜占庭問題目前最有的辦法,1999年提出,2008年圖靈獎
將算法復雜度由指數級降低為多項式級
可容忍少于1/3節點作惡,節點數量越多,難度越大,性能越差
適用于強一致性要求的聯盟鏈、私有鏈,或者節點數固定的公鏈,如DPoS公鏈
代表:EOS、Cosmos
這個共識機制最大的特點是:各節點對賬本唯一狀態的一致認同,不存在分叉。
以上是這節的內容,歡迎各位探討和指正。