區塊鏈技術

檸柒柒發表於2020-12-29

1、區塊鏈關鍵技術

區塊鏈是一種開放式的、擁有共識演算法的鏈式分散式資料庫技術,是一種去中心化的、透明的、不可篡改的分散式記錄的資料結構,其網路中的所有節點都有同等的地位,都能進行資料的處理、儲存和校驗。

1.1密碼學

(1)雜湊演算法

Hash(雜湊)演算法又稱單項雜湊演算法,它能將任意長度的輸入資料對映成為長度固定且較短的二進位制串輸出,輸出資料稱為Hash值或數字摘要,不同的明文被對映成的摘要是不同的。Hash函式通常記為h=Hash(M),其中,h是通過計算得到的固定長度的雜湊值,M是任意長度的輸入資訊。
以SHA256演算法為例:

import hashlib

with open('1229.txt','r') as f:
    a1 = f.read()
    print(a1)
a = a1.encode("utf-8")
h256 = hashlib.sha256(a).hexdigest()
print('SHA256:',h256)
print()

------
20201229日,星期五,氣溫2℃,小雪!
SHA256: 6f7e30a2197ea292fb417b09205640811861c7949074a2787192aaf9b1f15f72

Hash演算法具有以下特徵:
1)單向性:由輸入資訊能夠很容易的得到輸出資訊,但不能由輸出資訊反推輸入資訊;
2)隨機性:輸入資訊的微小改變都會使輸出資訊產生較大差異,幾乎不可能出現不同輸入資訊產生相同雜湊值的情況;
3)定時性:對於不同長度的輸入,雜湊過程消耗的時間大約相同;
4)定長性:任意不同長度的輸入,經過雜湊演算法都會生成相同長度的輸出。
在區塊鏈技術中使用最多的是SHA256演算法,該演算法將任意長度的輸入值對映為固定長度為256位(32位元組)的二進位制輸出值,即雜湊值。SHA256演算法具有巨大的空間和抗碰撞特性,能夠滿足目前區塊鏈的需求。

(2)非對稱加密演算法

區塊鏈技術中的重要加密演算法是非對稱加密演算法,其安全性比對稱加密演算法更高。非對稱加密演算法在加密和解密兩個不同的過程中使用不同的金鑰,其中金鑰的公開部分是公開金鑰(public key),簡稱公鑰,非公開部分是私有金鑰(private key),簡稱私鑰。公鑰和私鑰構成一個金鑰對(key pair),它們一一對應,如果資料是用公鑰進行加密的,則只能用對應的私鑰才能解密;如果資料是用私鑰進行加密的,則只能用對應的公鑰才能解密。金鑰對中的公鑰可以向外界公開,但是對於私鑰必須進行保密,因為通過公鑰很難推算出私鑰,但是通過私鑰可以推算出公鑰。
非對稱加密演算法機制如下圖所示,甲方生成一對金鑰,將其公鑰向其他方公開;乙方使用甲方的公鑰對明文資訊進行加密,將密文傳送給甲方;甲方用自己的私鑰對接收到的密文進行解密。

在區塊鏈中,公私鑰對可以用於對交易進行簽名,區塊鏈中規定交易必須由發起者進行有效簽名才能最終通過校驗並儲存在區塊中。私鑰的私密性保證了區塊鏈中交易的安全性,只有擁有發起交易的使用者私鑰才能對交易進行簽名,同時也能防止使用者對自己發起的交易進行否認或抵賴自己的過往行為。
常用的非對稱加密演算法有RSA、EIGamal、橢圓曲線密碼(ECC)等,其中ECC的抗攻擊性強,CPU佔用少,內容使用少,網路消耗低。

1.2共識機制

共識是指網路節點遵守一個共同的規則,通過非同步互動對某些問題達成一致結果的過程。區塊鏈的共識機制主要用於使網路節點對區塊生成和利益分配等達成一致。不同區塊鏈網路之間最大的區別即在於使用的共識機制不同,因而區塊鏈網路呈現出的特點、效能也有所不同。目前,比特幣網路中使用的是工作量證明機制PoW,權益證明機制PoS,實用拜占庭容錯協議PBFT。此外,還有委託授權權益證明機制DPoS和瑞波共識機制RPCA。

PoW機制是以犧牲算力為代價進行共識,為了防止女巫攻擊,該機制要求網路中的節點通過一定的工作量來證明他們的真實身份。在PoW中該項工作為解決一個密碼學問題,網路中的節點通過改變區塊頭中的隨機數不停地計算新區塊的區塊頭雜湊值,來尋找一個小於難度目標值的隨機數解,這個過程被稱為挖礦。網路中最先計算出正確解的節點最先得到新區塊生成權利,並獲得一定的挖礦獎勵。若網路中的惡意節點想要篡改資料或獲取挖礦獎勵,則必須耗費大量的算力資源與其他節點進行競爭,最終得不償失。PoW的優勢是完全的去中心化,節點可以自由進出。缺點是目前世界範圍內有很大一部分的算力已經被吸收進了比特幣系統,其他使用PoW共識的基於區塊鏈的應用如果想獲得同等的算力以保障自身安全會比較困難,而且挖礦這個過程也會造成資源浪費。由於共識週期較長,PoW共識機制不適合商業應用。

PoS利用權益證明代替工作量證明,由具有最高權益的節點進行新區塊生成和獲取獎勵。在PoS中,節點的權益表示節點對一定數目的數字貨幣的所有權。權益的衡量基於幣齡,而幣齡是指節點所擁有的貨幣數目與節點對這些貨幣的持有時間的乘積,數字貨幣持有時間指從上次交易距今的時間長度。PoS機制中競爭難度與交易中所耗費的幣齡成反比,即節點願意消耗的幣齡越多則越容易成為記賬節點,獲得區塊記賬權和獎勵。PoS使得網路中任何惡意節點想要進行攻擊,都必須擁有比主鏈代表的幣齡更大的成本。由於不用再進行算力計算,POS能夠在一定範圍內縮短共識達成的週期,但其仍需要挖礦,本質上並沒有解決商業應用的痛點。

DPoS是PoS的演化版本,網路節點根據其所擁有的股份享有對應的投票權力,並通過投票選出一定數量的受託人對區塊鏈系統進行維護。受託人按照規定的順序輪流負責生成區塊,並將獲得的總交易費用的10%平分給所有受託人作為激勵。在DPoS中區塊鏈系統的信任由全體節點集中到了所有受託人中,節點發起交易後無需等待一定數量的未授信節點確認,因此能夠大大縮短交易確認時間。當然所有受託人在進行受託人資格競爭之前需繳納一定的保證金以保證不做惡意破壞活動,這樣區塊鏈網路便能夠保證所有受託人的合法身份。DPoS能夠降低參與驗證的節點數量,從而縮短共識時間。但是由於整個區塊鏈系統仍需要依賴代幣執行,因而商業應用範圍不大。

PBFT是基於訊息傳遞的一致性演算法,演算法通過三個階段達成一致性。共識過程中網路節點選出一輪共識的主節點,通過主節點與其他備份節點之間進行pre-prepare、prepare和commit三個階段後完成對交易的共識並由主節點生成和釋出區塊。另外在應用PBFT的Fabric系統中設有成員管理機制,對節點加入網路和交易處理進行許可權管理,以彌補拜占庭容錯協議在容錯方面較其他區塊鏈網路相比略低的容錯率。在PBFT中不需要經濟激勵機制,系統的安全性由業務的參與方或監管者保證。然而由於其通訊流程過長,尤其是為了確保所有節點達到prepared狀態而設計的commit階段以及其中複雜的判斷語句和通訊流程,導致其很難支援大規模網路節點。同時,由於其共識啟動的條件是每個驗證節點中記錄的驗證節點總數、最大容錯數量等引數是固定相同,因而當有新節點想要加入時,所有節點必須重新啟動,這在實際應用中是不現實的。

dBFT是在PBFT的基礎上實現的一種改進的拜占庭容錯協議。該協議首先在網路中選出記賬節點,對PBFT進行流程簡化後,記賬節點之間進行共識。該共識機制較PBFT相比精簡了共識流程,提升了效率,但卻保留了PBFT所有優良效能。

2、區塊鏈工作機制

2.1區塊鏈資料結構

區塊鏈的各區塊之間利用雜湊演算法的數字指標連結彼此,單個區塊分別包括:區塊頭和區塊體兩個部分。區塊頭主要包含區塊編號、上一區塊的雜湊值(即父區塊的雜湊值)、時間戳和Merkle根等資訊,其中區塊編號是區塊的唯一身份標識。區塊體是分散式資料的主要載體,以區塊頭中的Merkle函式為根,形成由上至下的“倒樹狀”資料儲存模式,按照雜湊函式加密的方式將交易資料資訊儲存在區塊體,供系統使用者進行資料的查詢和呼叫。區塊的組成結構示意圖如下圖所示。
在這裡插入圖片描述

區塊結構有以下兩個特點。其一,上一個區塊形成之後,到該區塊被建立之前,期間發生的所有價值交換活動,都會被記錄在每一個區塊上,這確保了資料庫的完整性。其二,在大多數情況下,新區塊在完成後,就會立即被新增到區塊鏈的末尾,而這個區塊中的資料記錄不可再更改或者刪除。這確保了資料庫的不可篡改性。
從資料結構來看,區塊鏈中的每一個區塊都記錄了用來唯一指定上一個區塊的雜湊值,這樣就在各個區塊之間形成了一條連結。區塊鏈內部資料結構如下圖所示。
在這裡插入圖片描述

2.2 區塊鏈的工作流程

(1)傳送節點向整個網路廣播最新的資料記錄。每個傳送資料的節點均具有區塊鏈地址,這個地址是解決公鑰長度過長的方案。利用橢圓加密演算法(ECC)生成公鑰和私鑰,並且可以通過私鑰來計算公鑰。可以通過一系列數字簽名運算,得到公鑰的值從而進一步獲得區塊鏈地址。
(2)接收節點校驗所接收到的資料記錄資訊,比如,如果記錄資訊是合法的,則資料記錄將在通過校驗之後被寫入到區塊中。
區塊中記錄著區塊生成周期內的交易資料,其中,區塊頭連結到前面的區塊,可以為區塊鏈資料庫提供防篡改、完整性的保障。區塊體中包含了區塊建立過程中,經過驗證的並且產生了價值交換的所有記錄。
(3)接收到資料的節點使用某種共識演算法對區塊執行共識,最終使資料一致。常用的共識演算法有PoW、PoS、PBFT等。
(4)經過共識後的區塊會被全網節點接受,正式寫入區塊鏈中。全網的節點必須記錄這個區塊後,才能進行下一次共識。
為了防止區塊鏈分叉,節點始終都將最長的區塊鏈視為正確的鏈,並且以此為基礎驗證和延長它。如果發生了兩個節點同時在廣播不相同的新區塊,那麼其他節點會根據接收區塊的時間先後差別,在更早收到的區塊上開始工作。為了防止錯誤,會同時保留另外一個鏈。如果進一步執行共識演算法後,之前錯判的鏈被證實為是正確的較長的一條,則節點立即在另一條鏈上開始工作,進行修正。

相關文章