書名: 區塊鏈社會:區塊鏈助力國家治理能力現代化作者名: 王煥然等本章字數: 4964字更新時間: 2021-03-23 16:36:27
1.2 比特幣技術原理
區塊鏈是密碼學、分布式網絡和數據存儲、共識算法等技術的集合創新,下面從八個方面詳細介紹比特幣的技術原理,以比特幣為案例深入解析區塊鏈技術。
1.2.1 非對稱加密算法
非對稱加密算法是一種密鑰的保密方法。非對稱加密算法需要兩個密鑰:公開密鑰(Public Key,簡稱公鑰)和私有密鑰(Private Key,簡稱私鑰)。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。
非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰并將公鑰公開,需要向甲方發送信息的其他角色(乙方)使用該密鑰(甲方的公鑰)對機密信息進行加密后再發送給甲方;甲方再用自己的私鑰對加密后的信息進行解密。甲方想要回復乙方時正好相反,使用乙方的公鑰對數據進行加密,同理,乙方使用自己的私鑰來進行解密。另一方面,甲方可以使用自己的私鑰對機密信息進行簽名后再發送給乙方;乙方再用甲方的公鑰對甲方發送回來的數據進行驗簽。甲方只能用其私鑰解密由其公鑰加密后的任何信息。非對稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的需要(見圖1-1)。

圖1-1 對稱與非對稱加密算法原理
公鑰和私鑰符合嚴格數學關系的一對一對應,一個公鑰有且只有一個對應的私鑰。公鑰加密的信息只有相應的私鑰才能解密,私鑰簽名的內容只有相應的公鑰才能解密。私鑰簽名—公鑰解密通常用在數字簽名中(證明文件是由私鑰擁有者認證的)。
常見的非對稱加密算法有:RSA、ECC(移動設備用)、Diffie-Hellman、El Gamal、DSA(數字簽名用)。
非對稱加密在區塊鏈中的使用方式如下(見圖1-2):
公鑰用于生產比特幣錢包地址;
私鑰用于對交易數據簽名,確認交易不可偽造、不可抵賴;
公鑰驗證某交易的簽名,確認交易發起方的真實性。

圖1-2 非對稱加密算法在比特幣中的應用
1.2.2 哈希與默克爾樹
哈希(Hash)是信息的提煉函數,通常其運算結果長度要比信息小得多,且為一個固定長度。加密性強的哈希一定是“不可逆的”,這就意味著通過哈希運算結果無法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將導致哈希運算結果的明顯變化,這被稱為“雪崩效應”。哈希還應該是“防沖突的”,即找不出具有相同哈希運算結果的兩條不同信息。具有這些特性的哈希運算結果就可以用于驗證信息是否被修改。
默克爾(Merkle)樹是一種哈希二叉樹,用于快速校驗大規模數據的完整性。其葉子節點上的值通常為數據塊的哈希值,而非葉子節點上的值是該節點的所有子節點的組合結果的哈希值(見圖1-3)。

圖1-3 默克爾樹示例圖
默克爾樹大多用來進行完整性驗證處理。在處理完整性驗證的應用場景中,特別是在分布式環境下進行這樣的驗證時,默克爾樹會大大減少數據的傳輸量及計算的復雜度。
哈希和默克爾樹的應用可以快速定位數據錯誤(數據篡改)以及快速校驗部分數據是否在原始數據中,從而在算法上保證區塊內部數據的不可篡改。
1.2.3 UTXO記賬方式
UTXO是英文“Unspent Transaction Output”的縮寫,意為“未花費的交易輸出”,它是比特幣交易生成及驗證的主要方式。
與“比特幣”這個名稱的直觀概念不同,比特幣并沒有一個真實的數字貨幣形式或者載體,也不像傳統的銀行賬戶一樣保存賬戶余額。比特幣僅僅通過分布式共享賬本記錄了每一筆交易,類似財務記賬的會計分錄。因此,實質上沒有“比特幣”,只有UTXO共享賬本(見圖1-4)。

圖1-4 UTXO共享賬本在比特幣中的應用
比特幣的設計中采用UTXO的記賬方式,基于如下幾點考慮:
1)UTXO確保了比特幣的匿名性和隱私性,一個用戶的比特幣余額是錢包軟件聚合用戶的UTXO計算出來的,如果用戶啟用了新的地址用于轉賬和交易,新地址與原地址之間的關系很難被追蹤,更好地保證用戶的隱私,而傳統的賬戶余額模型無法做到。
2)UTXO模型通過鏈式的方式組織所有交易的輸入和輸出,每一筆交易的輸出最終都能追尋到比特幣被挖出時的區塊的第一筆交易,使得“每一個幣”(最小單位是聰,即億分之一)的來源都可以追溯,確保比特幣的信用基礎。3)UTXO由于只記錄有用的交易信息,大大簡化數據的存儲。比特幣運行近10年,其賬本數據規模才200GB左右。
4)UTXO結構有利于并行處理交易,提升了系統的交易驗證速度。
1.2.4 區塊與鏈
區塊鏈是一個鏈式存儲結構,區塊就是鏈式存儲結構中的數據元素,區塊記錄交易信息,所有區塊按照時間順序連接形成單向鏈式結構,其中第一個區塊被稱為創世區塊(見圖1-5)。

圖1-5 區塊鏈的鏈式數據結構
區塊是儲存數據的單位,可分為主體和頭。主體包括記錄的數據或者交易的具體內容。區塊鏈的功能主要由區塊頭實現。區塊頭數據結構說明如圖1-6所示。
哈希算法的特性和區塊鏈接機制保證所有上鏈數據不可篡改。其中本區塊默克爾根節點哈希值(Hash Merkle Root)用于驗證本區塊記錄的交易的完整性,如有任何數據篡改則無法通過哈希驗證。前一區塊哈希值(Hash Prevrious Block)用于保證時序鏈結構的完整性,任何時序鏈結構的替換或者篡改都無法通過哈希驗證。


圖1-6 區塊頭數據結構
1.2.5 P2P分布式網絡
區塊與鏈的結構僅保證了單個節點數據存儲的完整性與數據可驗證性。要實現數據不可篡改的目標,需要基于P2P分布式網絡實現數據的分布式共享存儲,在P2P網絡的每一個節點都保存數據的備份,只要存在經驗證沒有被篡改的數據,就可以對真實數據進行全網恢復。
P2P分布式網絡又稱對等互聯網絡技術,依賴網絡中所有參與者的計算能力和帶寬,而不是依賴較少的幾臺中心化服務器。在P2P的網絡中,所有網絡節點都是同等地位,沒有服務端和客戶端之分,每一個節點既是服務端也是客戶端(見圖1-7)。

圖1-7 P2P網絡結構示意圖
P2P網絡的特點:
去中心化:網絡中的資源和服務分散在所有節點上,信息的傳輸和服務直接在節點之間進行,無須中間環節和中心化服務器的介入與存在。
健壯性:耐攻擊,高容錯,服務和信息分散在各個節點之間進行,部分節點和網絡遭到破壞對網絡整體影響很小。
1.2.6 共識機制
由于P2P網絡下存在較高的網絡延遲,各個節點收到數據的先后順序不可能完全一致。因此,區塊鏈系統需要設計一種機制,對在差不多時間內發生的事務的先后順序達成共識。這種對一個時間窗口內的事務的先后順序達成共識的算法被稱為“共識機制”。“共識機制”既是認定一個區塊產生的一致性和有效性的手段,也是防止對全網數據進行篡改的手段。
目前主要的共識機制包括概率性共識機制及確定性共識機制。所謂概率性共識機制,是指在區塊鏈形成過程中,可能存在多個節點同時記賬的情況,在一段時間后通過比較機制來確定記賬的有效性。因此,節點記賬是否有效存在不確定性。確定性共識機制是指在開始記賬之前先確定當次負責記賬的節點,然后再開始記賬過程,記賬節點的記賬行為確定是有效的。
常見的基本共識機制包括:POW(Proof of Work,工作量證明機制)、POS(Proof of Stake,權益證明機制)、DPOS(Delegated Proof of Stake,委托權益證明機制)、PBFT(Practical Byzantine Fault Tolerance,實用拜占庭容錯算法)等。其中POW屬于概率性共識機制,其他屬于確定性共識機制。
1.POW工作量證明機制
系統中每個節點為整個系統提供計算能力(簡稱算力)。通過一個競爭機制,讓計算工作完成最出色的節點獲得系統的獎勵,即完成區塊的生成和數據的記錄,同時該節點將得到新生成貨幣的分配,簡單理解就是多勞多得。比特幣、萊特幣等貨幣型區塊鏈就是應用POW機制的。
優點:完全去中心化,節點自由進出,算法簡單容易實現,破壞系統花費的成本巨大,只要網絡破壞者的算力不超過網絡總算力的50%,網絡的交易狀態就能達成一致。
缺點:最大的缺點是浪費能源;區塊的確認時間難以縮短,如比特幣每秒只能做七筆交易,不適合商業應用;對節點的性能與網絡環境要求較高;容易產生分叉。另外,POW作為一種概率性共識機制,在確定最長鏈之前,記賬工作不能確定,確定最長鏈之后,非最長鏈的工作將被廢棄,造成工作浪費。
2.POS權益證明機制
與要求每個節點執行一定量的計算工作不同,權益證明要求節點提供一定數量虛擬貨幣的所有權證明。權益證明機制的運作方式是:當創造一個新區塊時,節點需要創建一個“幣權”交易,交易會按照預先設定的比例把一些虛擬貨幣發送給節點本身。
優點:相對于POW更加節能,不需要耗費大量能源去計算。POS根據每個節點擁有虛擬貨幣的比例和時間,依據算法等比例地降低節點的計算難度,從而加快了尋找隨機數的速度,能在一定程度上縮減達成共識的時間;同時和POW一樣,破壞系統的成本較高。
缺點:POS模式下,虛擬貨幣只能通過融資方式發行,無法保障持有者不因受利益誘惑而拋售,同時這種模式的信用基礎不夠牢固,也并沒有從根本上解決難以應用于商業領域的問題。
3.DPOS委托權益證明機制
DPOS是POS的進化方案,DPOS類似于現代董事會的投票機制,通過選舉代表來進行投票和決策。被選舉出的N個記賬節點來做新區塊的創建、驗證、簽名和相互監督,這樣就極大地減少了區塊創建和確認所需要消耗的時間和算力成本。
優點:大幅縮小參與驗證和記賬節點的數量,能耗更低,同時極大地縮短了共識驗證需要的時間,可以達到秒級的共識驗證;由全體節點投票選擇節點代表的機制理論上比POW/POS更加不容易被操縱。
缺點:DPOS理論上更加去中心化,但由于大部分節點因為種種原因投票積極性不高或不便投票,共識掌握在少數節點代表手中,對于一些節點代表作惡的行為也不能夠及時響應,有較大的安全隱患。
4.PBFT實用拜占庭容錯算法
實用拜占庭容錯算法是一種采用“許可投票、少數服從多數”來選舉領導者并進行記賬的共識機制,該共識機制允許拜占庭容錯,允許強監督節點參與,具備權限分級能力,性能更高,耗能更低,而且每輪記賬都會由全網節點共同選舉領導者,容錯率為33%。實用拜占庭容錯機制特別適合聯盟鏈的應用場景。
優點:效率高;容錯性高;節能環保。
缺點:當網絡不穩定或參與者數量增多時,系統的穩定性和效率會顯著下降。
共識機制的設計隱含了分布式網絡去中心化的程度,根據去中心化程度不同,區塊鏈技術分為公鏈、聯盟鏈和私鏈。
1.2.7 挖礦發行與激勵機制
比特幣挖礦是將一段時間內比特幣系統中發生的交易進行確認,并且形成新區塊記錄在區塊鏈上的過程。挖礦的人(機器設備)叫作礦工。簡單說,挖礦就是比特幣記賬的過程。
礦工是記賬員,區塊鏈就是賬本,成功搶到記賬權的礦工會獲得系統新生的比特幣獎勵。因此,挖礦也就是生產比特幣的過程,中本聰最初設計比特幣時規定每產生21萬個區塊比特幣獎勵減半一次,直至比特幣不能再被細分。因為比特幣和黃金一樣總量有限,所以比特幣被稱為數字黃金。
實質上,挖礦是用計算機解決一項復雜的數學問題,來保證數字貨幣網絡分布式記賬系統的一致性。數字貨幣網絡會自動調整數學問題的難度,系統自動生成新的數字貨幣作為獎勵,激勵礦工參與記賬,每十分鐘全體礦工一起計算一道問題,形象地說,這個過程就像做搶答題——在很多人同時使用這個程序的過程中,最先算出答案的礦工就獲得記一頁賬的權利。記賬完成后,該名礦工將自動獲得一定量的數字貨幣。這就是新增幣的發行過程。不過,參與“挖礦”的人數越來越多,解開“密碼箱”的難度也越來越大。
礦工挖礦過程中可以獲得挖礦獎勵。在項目初期,沒有人愿意支付礦工服務費的時候,挖礦激勵機制確保了礦工對比特幣網絡的自主投入和長期維護。挖礦發行和激勵機制奠定了區塊鏈通證經濟(參見第10章“通證經濟”相關內容)的最初雛形。比特幣通過減少發行量的通縮機制來刺激比特幣價格上漲的辦法,也在后續的虛擬貨幣發行中被廣泛抄襲沿用。
1.2.8 智能合約
比特幣提出并實現了智能合約的初步想法。
所謂智能合約,簡單意義上,是一段計算機程序,滿足可準確自動執行即可。因此自動售賣機也是智能合約的一種實現。從系統角度,智能合約不只是一個可以自動執行的計算機程序,它本身就是一個系統參與者,對接收到的信息進行回應,可以接收和儲存價值,也可以向外發送信息和價值。智能合約就像一個可以被信任的人,可以臨時保管資產,總是按照事先的規則執行操作。區塊鏈各個節點實時監控智能合約的狀態、核查外部數據源、確認滿足特定條件時激活并執行合約。
智能合約與傳統合約相比具有許多優勢:
不依賴第三方執行合約,消除中間人,大大減少了花費在合約上的成本。消除第三方意味著合約驗證和執行的整個過程隨著用戶間的直接交易而變得快速。
合約條款不能更改,不受各種人為干預,用戶受騙的風險較小。
合約會永遠保存在網絡上,不存在放錯或丟失的風險。
比特幣的智能合約僅提供了部分函數調用功能,功能有限,因此不是圖靈完備的。以太坊首次實現了圖靈完備的智能合約。