區(qū)塊鏈入門基本概念

導(dǎo)語:本文主要介紹了區(qū)塊鏈的基本概念,對(duì)基本術(shù)語進(jìn)行解析,有利于初學(xué)者更好地了解什么是區(qū)塊鏈,區(qū)塊鏈核心的技術(shù)有哪些,為后面深入學(xué)習(xí)打下理論基礎(chǔ)。

區(qū)塊鏈的三個(gè)基本構(gòu)成

交易:一次賬本的操作,導(dǎo)致賬本狀態(tài)的一次改變

區(qū)塊:一段時(shí)間內(nèi)的所有交易和狀態(tài)結(jié)果,共識(shí)機(jī)制生成新的區(qū)塊

鏈:區(qū)塊按順序串鏈,是整個(gè)賬本的日志記錄


區(qū)塊鏈如何工作?(以比特幣為例)

比特幣客戶端發(fā)起一筆交易,廣播到比特幣網(wǎng)絡(luò)中等待確認(rèn)

網(wǎng)絡(luò)中所有節(jié)點(diǎn)將一段時(shí)間內(nèi)收到的所有等待確認(rèn)的記錄打包,包含前一個(gè)區(qū)塊頭部的hash值,組成一個(gè)候選的區(qū)塊。

通過找到一個(gè)合適的隨機(jī)值放到候選區(qū)塊中,是的候選區(qū)塊的hash結(jié)果滿足一定的條件。找到這個(gè)合適hash值的過程,稱之為“挖礦”;而尋找這個(gè)合適hash值的人或組織機(jī)構(gòu),稱之為“礦工”;由于這一個(gè)過程需要花費(fèi)大量的算力,自熱而然就出現(xiàn)了“礦池”。而這種基于算力尋找合適隨機(jī)串的共識(shí)機(jī)制,被稱之為工作量證明PoW(Proof of Work)。

候選區(qū)塊在網(wǎng)絡(luò)中廣播,其他節(jié)點(diǎn)收到候選區(qū)塊,進(jìn)行驗(yàn)證,符合約定條件的區(qū)塊將會(huì)被添加到自己維護(hù)的區(qū)塊鏈上。

當(dāng)大部分節(jié)點(diǎn)都將候選區(qū)塊添加到自己的維護(hù)的區(qū)塊鏈上,該區(qū)塊就會(huì)被網(wǎng)絡(luò)所接受,區(qū)塊中的所有交易就會(huì)得到確認(rèn)。


區(qū)塊鏈的分類

共有鏈:任何人都可以參與和維護(hù),信息完全公開,例如比特幣

私有鏈:只有授權(quán)的部分人可以使用,信息不公開

聯(lián)盟鏈:介于兩者之間,有若干組織一起合作維護(hù),帶有權(quán)限的訪問。

目前,私有鏈和聯(lián)盟鏈在現(xiàn)實(shí)生活中的商戶場景中得到更多的應(yīng)用和落地。



分布式核心問題

一致性問題:一致性并不代表結(jié)果正確與否,而是系統(tǒng)對(duì)外呈現(xiàn)的狀態(tài)一致與否。分為:強(qiáng)一致性和弱一致性(順序一致性;線性一致性)。

共識(shí)算法:分布式系統(tǒng)中多個(gè)節(jié)點(diǎn)之間,批次對(duì)某個(gè)狀態(tài)達(dá)成一致結(jié)果的過程。

常見的共識(shí)算法:

(1)CFT:Crash Fault Tolerance

(2)BFT:Byzantine Fault Tolerance

FLP不可能原理:在網(wǎng)絡(luò)可靠,但允許節(jié)點(diǎn)失效(即便只有一個(gè))的最小化異步模型系統(tǒng)中,不存在一個(gè)可以解決一致性問題的確定性共識(shí)算法。(不要浪費(fèi)時(shí)間,去為異步分布式系統(tǒng)設(shè)計(jì)在任意場景下都能實(shí)現(xiàn)共識(shí)的算法)

CAP原理

(1)一致性(consistency):任務(wù)操作都是原子的。

? ?(2)可用性(availability):在有限的時(shí)間內(nèi),任何失敗的節(jié)點(diǎn)都能應(yīng)答請(qǐng)求。

? ?(3)分區(qū)容忍性(partition):網(wǎng)絡(luò)可能發(fā)生分區(qū),即網(wǎng)絡(luò)節(jié)點(diǎn)間的通信不可保障

? ? ? ? ? ?簡單的理解:在網(wǎng)絡(luò)可能出現(xiàn)分區(qū)的情況下,是無法同時(shí)保證一致性和可用性的。要么犧牲可用性,要么犧牲一致性。

?ACID原則

(1)原子性(atomicity):每次操作都是原子的,要么成功,要么不執(zhí)行

(2)一致性(consistency):最終狀態(tài)是一致的,沒有中間態(tài)

(3)隔離性(isolation):各個(gè)操作之間是互不影響的

(4)持久性(durability):狀態(tài)的改變是持久的,不可改變

Paxos 算法與 Raft算法(系統(tǒng)中存在故障,但不存在惡意節(jié)點(diǎn))

(1)paxos算法

提案者(proposer):提出一個(gè)提案,等待大家批準(zhǔn)為結(jié)案

接受者(acceptor):負(fù)責(zé)對(duì)提案進(jìn)行投票,接受提案

學(xué)習(xí)者(learner):獲取批準(zhǔn)結(jié)果,并可以幫忙傳播,不參與投票過程

(2)raft算法

領(lǐng)導(dǎo)者(leader):選舉

候選領(lǐng)導(dǎo)者(candidate):

跟隨者(fllower):

拜占庭問題與算法(系統(tǒng)中存在故障,且存在惡意節(jié)點(diǎn))

N >= 3F+1,其中N為節(jié)點(diǎn)數(shù),叛變將軍數(shù)為F

可靠性指標(biāo)

(1)服務(wù)的可用性

服務(wù)承諾SLA

服務(wù)指標(biāo)SLI

服務(wù)目標(biāo)SLO

(2)兩個(gè)核心時(shí)間

MTBF: 平均故障隔間時(shí)間,反映故障發(fā)生的頻率

MTTR: 平均修復(fù)時(shí)間,反映故障發(fā)生后恢復(fù)的時(shí)間

密碼學(xué)與安全技術(shù)

hash算法:能將任意長度的明文,映射為固定長度的二進(jìn)制串

[x]正向快速

[x]逆向困難

[x]輸入敏感

[x]沖突避免:hash碰撞

常見算法:MD5和SHA系列算法,目前MD5和SHA1算法已經(jīng)被破解,一般推薦至少用SHA-256或更安全的算法

hash攻擊與保護(hù)

(1)hash算法并不是一種加密算法,不能用于對(duì)信息的保護(hù)。

(2)主要的攻擊包括字典攻擊和彩虹表攻擊(只保存一條has鏈的首尾值,相對(duì)字典攻擊可用節(jié)省存儲(chǔ)空間)

(3)防范措施:加鹽,hash結(jié)果和鹽分別存放在不同的地方,只要不是兩者同時(shí)泄漏,攻擊者就很難破解


數(shù)字摘要

數(shù)字摘要是對(duì)數(shù)字內(nèi)容進(jìn)行hash運(yùn)算,獲取唯一的摘要值來替代原始完整的數(shù)字內(nèi)容


加解密算法

[x]對(duì)稱加密算法:加密和解密的密鑰匙相同

優(yōu)點(diǎn):加密效率和強(qiáng)度高

缺點(diǎn):參與方都需要維護(hù)密鑰,在不安全通道中分發(fā)密鑰也是一個(gè)問題(可通過Diffie-Helman協(xié)議或非堆成加密方式解決)

基本原理:分組密碼(DES,3DES,AES,IDEA)和序列密碼

適用場景:大量數(shù)據(jù)加解密,提前分發(fā)密鑰匙短板

[x]非對(duì)稱加密算法:加密和解密的密鑰匙不相同

優(yōu)點(diǎn):公鑰可用在不安全通道中分發(fā)缺點(diǎn):加解密速度慢,加密強(qiáng)度不如對(duì)稱加密,依賴數(shù)學(xué)問題保證安全性(大數(shù)質(zhì)因子分解,離散對(duì)數(shù),橢圓曲線)

基本原理:公鑰加密,私有解密

代表算法:RSA,Diffie-Helman密鑰交換,ELGamal,橢圓曲線算法,SM2

適用場景:簽名和密鑰協(xié)商,不適用于大量數(shù)據(jù)加解密

[x]混合加密算法:利用非堆成加密協(xié)商一個(gè)對(duì)成加密密鑰,然后再通過對(duì)稱加密算法對(duì)數(shù)據(jù)加密



消息認(rèn)證碼

含義:消息認(rèn)證碼匙給予對(duì)成加密,可用用于對(duì)消息完整性進(jìn)行保護(hù)。包括三個(gè)要素:K為提前共享的對(duì)成密鑰;H為協(xié)商的hash算法;M為消息內(nèi)容

場景:證明身份

代表算法:HMAC



數(shù)字簽名

含義:基于非對(duì)稱加密,既可以用于證實(shí)數(shù)字內(nèi)容的完整性,又同時(shí)可用確認(rèn)來源,具有不可抵賴性。

場景:數(shù)字簽名

代表算法:DSA,ECSDA



數(shù)字證書

數(shù)字證書的出現(xiàn)是未來解決非對(duì)稱加密算法及數(shù)字簽名中公鑰分發(fā)帶來的安全風(fēng)險(xiǎn)。根據(jù)保護(hù)公鑰的用戶,可分為兩類

[x]加密數(shù)字證書:保護(hù)用于加密信息的公鑰

[x]簽名驗(yàn)證數(shù)字證書:保護(hù)用于解密簽名進(jìn)行身份驗(yàn)證的公鑰



PKI體系

CA:負(fù)責(zé)證書的頒發(fā)和作廢,接受來自RA的請(qǐng)求

RA:對(duì)用戶身份進(jìn)行驗(yàn)證,校驗(yàn)數(shù)據(jù)合法性,負(fù)責(zé)登記,審核通過了就發(fā)給CA

證書數(shù)據(jù)庫:存放證書



Merkle樹

主要特點(diǎn):

(1)最下面的葉子節(jié)點(diǎn)包含存儲(chǔ)數(shù)據(jù)或hash值

(2)非葉子節(jié)點(diǎn)都是它的兩個(gè)孩子節(jié)點(diǎn)內(nèi)容的hash值

應(yīng)用場景:

(1)快速比較大量數(shù)據(jù):只需要比較根節(jié)點(diǎn)hash值是否相同

(2)快速定位修改:某個(gè)節(jié)點(diǎn)的數(shù)值變化

(3)零知識(shí)證明



布隆過濾器:某個(gè)元素是否在某個(gè)集合中

1)基于hash的快速查找

(2)更高效的布隆過濾器:基于多個(gè)hash函數(shù),提高空間利用率,可用使用較少的空間來表示較大集合的存在關(guān)系

同態(tài)加密

對(duì)密文直接進(jìn)行處理,根對(duì)明文處理后再對(duì)處理結(jié)果加密,得到的結(jié)果相同??梢员WC實(shí)現(xiàn)處理者無法訪問數(shù)據(jù)自身的信息。



比特幣原理和設(shè)計(jì)

?基本交易過程

一筆合法的交易,引用某些已存在的交易的UTXO作為交易的輸入,并生成新的輸出。轉(zhuǎn)賬方通過簽名腳本來證明自己的事UTXO的合法使用者,并指定輸出腳本來限制未來的交易的使用者為收款方。每筆交易總輸入不能低于總輸出,總輸入多于總輸出的部分稱為交易費(fèi)用,為生成包含該交易區(qū)塊的礦工所得。

重要概念

賬戶/地址:比特幣賬戶地址其實(shí)就是用戶公鑰經(jīng)過一系列hash(hash160,或先進(jìn)行sha256,然后進(jìn)行ripemd160)及編碼運(yùn)算后生成的160位(20字節(jié))的字符串。


?? ?交易


?? ?交易腳本:腳本是保障交易完成的核心機(jī)制,主要用于教研交易是否合法。包括輸出腳本和認(rèn)領(lǐng)腳本:輸出腳本一般又付款方對(duì)交易設(shè)置鎖定,用戶對(duì)能動(dòng)用這筆交易輸出的對(duì)象(收款方)進(jìn)行權(quán)限控制;認(rèn)領(lǐng)腳本用來證明自己可以滿足交易輸出腳本的鎖定條件。

?區(qū)塊:對(duì)完整區(qū)塊的驗(yàn)證,只需要驗(yàn)證區(qū)塊頭即可


?? ?避免作惡:利用經(jīng)濟(jì)博弈論,來規(guī)避作惡。礦工首先要付出挖礦的代價(jià),進(jìn)行算力消耗,越想拿到新區(qū)塊的決定權(quán),意味著抵押的算力越多,一旦失敗,這些算力就會(huì)被沒收掉,稱為沉沒成本。


?? ?負(fù)反饋調(diào)節(jié):比特幣網(wǎng)絡(luò)中的礦工越多,比特幣網(wǎng)絡(luò)就越穩(wěn)定,比特幣的價(jià)值就越高,但挖到礦的概率就越低。反之,比特幣中的礦工越少,比特幣網(wǎng)絡(luò)就越不安全,比特幣價(jià)值就越低,但挖礦的概率會(huì)提高。


?? ?挖礦:參與維護(hù)比特幣網(wǎng)絡(luò)的節(jié)點(diǎn),并協(xié)助生成新區(qū)塊來獲取一定新增比特幣的過程。礦工綜合上一個(gè)區(qū)塊的hash值,上一個(gè)區(qū)塊生成之后的新的驗(yàn)證過的交易內(nèi)容,用自己的猜測的一個(gè)隨機(jī)數(shù),一起打包到一個(gè)候選新區(qū)塊,讓新區(qū)塊的hash值小于比特幣網(wǎng)絡(luò)中給定的一個(gè)數(shù)。算力一般以每秒多少次hash計(jì)算位單位,記為h/s 。

?共識(shí)機(jī)制

(1)工作量證明PoW

? ? 最長鏈

(2)權(quán)益證明PoS

閃電網(wǎng)絡(luò):解決比特幣交易網(wǎng)絡(luò)性能問題:全網(wǎng)每秒7筆左右的交易速度;同時(shí),等待6個(gè)區(qū)塊的可信確認(rèn)將導(dǎo)致約1個(gè)小時(shí)的最終確認(rèn)時(shí)間。引入智能合約的思想來完善鏈下的交易渠道。

(1)RSMC :可撤銷的順序成熟合同,類似于資金池機(jī)制。保障兩個(gè)人之間的直接交易可以在鏈下完成。

(2)HTLC ?:哈希的帶時(shí)鐘的合約。保證任意兩個(gè)人之間的轉(zhuǎn)賬都可以通過一條支付通道來完成。

?側(cè)鏈:

側(cè)鏈協(xié)議允許資產(chǎn)在比特幣區(qū)塊鏈和其他區(qū)塊鏈之間互轉(zhuǎn)。比特幣區(qū)塊鏈作為主鏈,其他區(qū)塊鏈作為側(cè)鏈,二者雙向掛鉤,實(shí)現(xiàn)比特幣從主鏈轉(zhuǎn)移到側(cè)鏈進(jìn)行流通。

? ? (1)簡單支付驗(yàn)證證明SPV Proof:SPV客戶端只需要下載所有區(qū)塊的區(qū)塊頭,并進(jìn)行簡單的定位和計(jì)算工作,就可以給出驗(yàn)證結(jié)論。

(2)雙向掛鉤:實(shí)現(xiàn)比特幣在主鏈和側(cè)鏈之間的轉(zhuǎn)移和返回,主鏈和側(cè)鏈需要對(duì)對(duì)方的特定交易做SPV驗(yàn)證。

Trade -off

?? ?(1)區(qū)塊上限 1MB:更大的區(qū)塊容量可以帶來更大的交易吞吐量,但會(huì)增加挖礦的成本,帶來中心化的風(fēng)險(xiǎn),同時(shí)增大存儲(chǔ)的成本。

?? ?(2)出塊間隔時(shí)間:更短的出塊時(shí)間可以縮短交易的確認(rèn)時(shí)間,但也可能導(dǎo)致分叉增多,降低網(wǎng)絡(luò)可用性。

?? ?(3)腳本支持程度:更強(qiáng)大的腳本指令集可以帶來更多的靈活性,但也可能帶來更多的安全風(fēng)險(xiǎn)。

?分叉:比特幣網(wǎng)絡(luò)的升級(jí)會(huì)帶來分叉

? ? (1)軟分叉:舊節(jié)點(diǎn)能夠接受新節(jié)點(diǎn)產(chǎn)生的交易和區(qū)塊

?? ?(2)硬分叉:舊節(jié)點(diǎn)不能接受新節(jié)點(diǎn)產(chǎn)生的交易和區(qū)塊



以太坊的核心概念

1.智能合約

? ? 以計(jì)算機(jī)程序來運(yùn)行各種締結(jié)和合約。通過圖靈完備的高級(jí)語言,包括solidity,serpent,viper等來開發(fā)智能合約,智能合約運(yùn)行在以太坊虛擬機(jī)中。

2.賬戶

? ? 比特幣中沒有賬戶的概念,而是通過采用UTXO模型記錄整個(gè)系統(tǒng)的狀態(tài)。通過交易歷史來推算用戶的余額信息,而以太坊采用賬戶來記錄系統(tǒng)的狀態(tài),每個(gè)賬戶存儲(chǔ)余額信息,智能合約代碼和內(nèi)部數(shù)據(jù)出存儲(chǔ)等。具體可分為兩種類型:

(1)合約賬戶:存儲(chǔ)智能合約代碼

(2)外部賬戶:以太幣擁有者賬戶,對(duì)應(yīng)到某公鑰。

3.以太幣:主要用于購買燃料,支付給礦工,以維護(hù)以太坊網(wǎng)絡(luò)運(yùn)行智能合約的費(fèi)用。

4.燃料:控制某次交易執(zhí)行指令的上限。沒執(zhí)行一條合約指定會(huì)消耗固定的燃料。

超級(jí)賬本—面向企業(yè)的分布式賬本

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容