區塊鏈基礎知識筆記

目錄

一、分佈式系統核心問題

二、密碼學和安全技術

三、比特幣

四、以太坊

五、超級賬本


一、分佈式系統核心問題

1、一致性問題:對於分佈式系統中的多個服務節點,給定一系列操作,在給定協議的保障下,使他們對處理結果達到“某種程度”的認同

2、一致性要求

    可終止性:一致的結果在有限的時間內能完成

    約同性:不同節點最終完成決策的結果是相同的

    合法性:決策的結果必須是某個節點提出的提案

——》越強的一致性要求往往造成越弱的處理線性能力,以及越差的可擴展性

——》強一致性包括:順序一致性和線性一致性

 

3、共識算法

    一致性指分佈式系統中多個副本對外呈現的數據的狀態。

4、一致性和共識算法並不完全相同:
(1)一致性描述多個節點對數據狀態的維護的能力。而共識算法描述多個節點之間,彼此對某個狀態達成一致性結果的過程。

(2)一致性描述的是結果狀態,共識則是一種手段

(3)達成某種共識並不意味這保障了一致性

5、常見共識算法:

(1)解決非拜占庭的普通錯誤——》Crash Fault Tolerance(CFT)類算法——》包括Paxos,Raft及變種——》性能較好,處理快,容忍不超過一般的故障點

(2)容忍拜占庭錯誤——》Byzantine Fault Tolerance(BFT)類算法——》包括PBFT代表的確定性算法、PoW代表的概率算法——》性能較差,容忍不超過1/3故障節點

——》確定性算法,達成結果的共識就不可逆轉,即共識就是最終結果

——》概率類算法,共識結果是臨時的,隨着時間的推移或者某種強化,共識結果被推翻的概率越來越小

6、FLP不可能原理(測不準原理)

(1)定義:在網絡可靠,但允許節點失敗(即便只有一個)的最小化異步模型系統中,不存在一個可以解決一致性問題的確定性共識算法。

——》不要浪費時間去爲異步分佈式系統設計在任意場景下都能實現共識的算法

(2)同步和異步

同步:指系統中各個節點的時鐘誤差存在上限,且消息傳遞必須在一定時間內完成,同時各個節點完成處理消息的時間是一定的。——》容易判斷消息是否丟失

異步:系統中各個節點可能存在較大的始終差異,且消息傳輸時間是任意長的,各節點對消息處理的時間也可能是任意長的。——》無法判斷消息沒被響應是在哪裏處理問題(節點故障還是傳輸故障?)。現實中的系統往往都是異步系統

7、CAP原理

(1)定義:分佈式系統中不可能同時確保一下三種特性:一致性(Consistency)、可用性(Availability)和分區容忍性(Partition)

——》一致性:任何操作都是原子的,此時指強一致性

——》可用性:在有限時間內,任何非失敗節點都能應答請求

——》分區容忍性:網絡可能發生分區,即節點之間的通信不可保障

由於大多數時候網絡被認爲是可靠的,因此係統可以提供一致可靠的服務

當網絡不可靠時,系統要麼犧牲掉一致性(多數場景下),要麼犧牲掉可用性。

 

8、ACID原則——》描述一致性原則

(1)定義:Atomicity(原子性)、Consistency(一致性)、Isolation(隔離性)、Durability(持久性)

(2)ACID描述分佈式數據庫需要滿足一致性需求時,同時允許付可用性的代價。

(3)BASE原則:犧牲掉一致性的約束(最終實現一致性),來換取一定的可用性

(4)ACID和BASE是相對的,他們分別是對CAP三特性的不同取捨

 

二、密碼學和安全技術

  1. Hash:Hash值在應用中常被稱爲指紋或摘要,經Hash計算後結果相同,則有極大概率認爲文件內容與原內容文件相同
  2. 衝突避免:很難找到兩段內容不同的明文,使他們的Hash值一樣(發生碰撞)

在給定明文下,無法找到與之碰撞的其他明文,則算法具有“弱抗碰撞性”

無法找到任意兩個發生Hash碰撞的明文,則算法具有“強抗碰撞性”

  1. 常見Hash算法:

MD4:輸出128位

MD5:輸入512位進行分組,輸出128位,不具“強抗碰撞性”

SHA-1:輸出長度160位,抗窮舉性更好,不具備“強抗碰撞性”

 

  1. 加解密算法

對稱加密:密鑰相同;計算效率高;需提前共享密鑰,易泄露;DES、3DES、AES、IDEA

非對稱加密:密鑰不想管;計算效率低,存在中間人攻擊;RSA、ELGamal、橢圓曲線系列算法

  1. 對稱密碼分爲兩種:分組密碼和序列密碼

分組密碼:DES、3DES、AES、IDEA

DES:64位明文加密爲64位密文,密鑰長度64位(實際長度是56位)

3DES: 三重DES操作:加密-》解密-》加密

AES:分組長度爲128、192、256位三種,密鑰長度是128位

IDEA:類似於3DES,密鑰長度增加到128位

序列密碼(流密碼):RC4

對稱密碼適用於大量數據的加解密過程,不能用於簽名

  1. 非對稱加密:基於大數質因子分解、離散對數、橢圓曲線等數學難題

代表算法:RSA、ELGamal、橢圓曲線(ECC)、SM2

私鑰通過隨機數算法生成,公鑰根據私鑰生成;加密強度往往不如對稱加密算法

RSA:經典公鑰算法

Diffie-Hellman密鑰交換:基於離散對數無法快速求解,雙方協商一個公共密鑰

ELGamal:利用模運算下離散對數困難特性

橢圓曲線算法(ECC):具備較高的安全性,但加解密比較費時

SM2:國家商用密碼,基於橢圓曲線算法,加密強度優於RSA

非對稱加密算法一般適用於簽名和密鑰協商

  1. 混合加密機制:TLS協議
  2. DH密鑰交換協議:

基於離散對數問題,原根知識

  1. 消息認證碼和數字簽名:消息防篡改和身份認證

 

消息認證碼:基於對稱加密,用於對完整性進行保護

HMAC的三個要素(K,H,Message):K爲共享對稱密鑰,H爲提供的Hash算法,Message爲要處理的消息內容

消息認證碼使用共享密鑰,當密鑰被多方擁有時,無法確定某個確切身份,反之,採用非對稱加密方式,就可以追溯身份來源,即數字簽名

 

數字簽名:基於非對稱加密,可證明內容的完整性,並確定數據來源(即不可抵賴

簽名過程:對數據內容進行摘要,然後用自己的私鑰進行加密(簽名),然後將文件和簽名值都發送給對方。

驗證過程:用公鑰解密簽名,得到數字摘要,與收到文件進行摘要後的結果進行比較。

典型的數字簽名算法:DSA和ECDSA

  1. 數字證書:加密數字證書 和 簽名驗證數字證書

加密數字證書——用於加密信息的公鑰

簽名驗證數字證書——用於解密簽名進行身份驗證的公鑰

  1. 公鑰通過證書機制來進行保護

證書的生成、分發、撤銷等過程遵循PKI體系

  1. PKI基本組件:

CA:證書的頒發和作廢,接收來自RA的請求

RA:對用戶身份進行驗證,負責登記,審覈過了就發給CA

證書數據庫:存放證書,多采用X.500系列

流程:用戶通過RA登記申請證書,提供身份和認證信息;CA審覈後將證書發送給用戶。需要撤銷證書需向CA發出申請

10、證書籤發的兩種形式:

簽發證書實質:對用戶的公鑰,用CA私鑰進行簽名,故所有人都可以用CA的公鑰驗證簽名

①由CA生成證書(含公鑰)和對應的私鑰發送給用戶

②用戶自己生成公鑰和私鑰,由CA對公鑰內容進行簽名(保證私鑰的私密性)

 

三、比特幣

1、比特幣:非對稱加密算法,用戶保留私鑰,對自己發出的交易進行簽名,並公開公鑰

比特幣賬戶——用戶公鑰經過一系列Hash及編碼運算後生成的160位(20字節)字符串

2、負反饋調節:

   比特幣網絡中礦工越多,系統越穩定,比特幣價值越高,但挖礦概率會降低

    反之,礦工減少,系統更容易被攻擊,比特幣價值降低,但挖礦概率會提高

  1. PoW共識機制

不實現面向最終確認的共識,而是基於概率、隨時間逐步增強確認的共識。現在達成的結果在理論上是可以被推翻的,只要攻擊者付出的代價隨時間而指數級上升,被推翻的可能性隨之指數級下降

 

  1. 挖礦:

是參與維護比特幣網絡的節點,通過協助生成新區塊來獲取一定量新增比特幣的過程

  1. 挖礦過程

參與者綜合上一個區塊的Hash值,上一個區塊生成之後的新的驗證過的交易內容,再加上自己猜測的一個隨機數X,一起打包到一個候選新區塊,讓新區塊的Hash值小於比特幣網絡中給定的一個數。這個數越小,計算出來就越難。

區塊鏈技術和安全的過程使得陌生人之間在沒有被信任的第三方時產生信任。

  1. 閃電網絡

將大量交易放到比特幣區塊鏈之外進行,只把關鍵環節放到鏈上進行確認。

 

四、以太坊

1、以太坊:智能合約、基於賬戶的交易、以太幣和燃料

(1)智能合約:接收來自外部的交易請求和事件,通過觸發運行提前編寫好的邏輯代碼,生成新的交易和事件,進一步調用其他智能合約

(2)賬戶:

    合約賬戶:存儲執行智能合約代碼,只能被外部賬戶調用激活

    外部賬戶:以太幣擁有者賬戶,對應到某公鑰,由個人來控制

(3)交易:在以太坊中從一個賬戶到另一個賬戶的消息數據(以太幣或者合約執行參數)

2、共識機制

    以太坊採用成熟的Pow共識變種算法Ethash協議。與原始PoW的密集型Hash計算不同,Ethash執行時只消耗大量內存,而跟計算效率關係不大

3、降低攻擊

    以太坊降低攻擊的核心思想是:通過經濟激勵機制防止少數人作惡

4、可擴展性

    通過分片機制提高整個網絡的擴展性。分片是一組維護和執行同一批智能合約的節點組成的子網絡。

    分片後,同一片內的合約處理是同步的,彼此達成共識。不同分片之間是異步的,從而提高網絡整體的可擴展性。

5、編寫智能合約和DApp的IDE,如Truffle、Embark、Remix

 

五、超級賬本

1、Fabric項目——引入權限管理支持,基於Go語言,支持可插拔、可擴展

2、Sawtooth項目——基於python語言,實現低功耗的PoET共識機制,支持交易族

3、Iroha項目——基於C++語言,設計類似Fabric,提供基於C++的開發環境

4、Blockchain Explorer項目——是區塊鏈平臺的瀏覽器,基於Node.js語言,提供Web操作界面,可用來快速查看區塊鏈平臺的運行信息

5、Cello項目——區塊鏈管理平臺,提供區塊鏈即服務,實現區塊鏈環境的快速部署,主要開發語言爲Python和JavaScript,

6、Indy項目——打造一個基於區塊鏈和分佈式賬本技術的數字中心管理平臺,支持去中心化,支持跨區塊鏈和跨應用操作,實現全球化的身份管理;基於Python語言

7、Composer項目——由NodeJs語言開發,使用JavaScript語言定義應用邏輯

8、Burrow項目——基於Go語言實現,支持以太坊虛擬機的智能合約區塊鏈平臺,支持Proof-of-Stake共識機制和權限管理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章