什么是區(qū)塊鏈技術(shù)它的基本原理是什么
一、區(qū)塊鏈技術(shù)
1.什么是區(qū)塊鏈?
去中心化的、分布式的、區(qū)塊化存儲的數(shù)據(jù)庫
存儲全部賬戶余額及交易流水的總賬本
每個節(jié)點有完整的賬本數(shù)據(jù)
賬本數(shù)據(jù)記錄了全部的歷史交易數(shù)據(jù)
交易數(shù)據(jù)存儲在區(qū)塊上
每個區(qū)塊包含前一區(qū)塊ID及HASH,形成鏈
2.區(qū)塊鏈基本原理
如果把區(qū)塊鏈作為一個狀態(tài)機,則每次交易就是試圖改變一次狀態(tài),而每次共識生成的區(qū)塊,就是參與者對于區(qū)塊中所有交易內(nèi)容導(dǎo)致狀態(tài)改變的結(jié)果進行確認。
交易(Transaction):一次操作,導(dǎo)致賬本狀態(tài)的一次改變,如添加一條記錄
區(qū)塊(Block):記錄一段時間內(nèi)發(fā)生的交易和狀態(tài)結(jié)果,是對當(dāng)前賬本狀態(tài)的一次共識
鏈(Chain):由一個個區(qū)塊按照發(fā)生順序串聯(lián)而成,是整個狀態(tài)變化的日志記錄。
3.區(qū)塊鏈要解決的問題
如何去中心化地共享數(shù)據(jù)?
如何確保賬戶不被冒用?
如何確保賬戶余額足夠?
如何確保交易記錄不被篡改?
誰負責(zé)記賬?
怎么保障記賬者的可信?
怎么保障記賬者的積極性?
4.區(qū)塊鏈特性
去中心化
開放性(沒有限制,開源,數(shù)據(jù)公開)
去信任(僅信任機器)
自治性,集體維護
可靠的數(shù)據(jù)庫(不可更改,永遠可訪問)
匿名性,隱私保護
5.核心技術(shù)
P2P網(wǎng)絡(luò)、數(shù)字簽名、區(qū)塊化數(shù)據(jù)庫,競爭記賬權(quán)、共識算法、交易回溯。
二、P2P網(wǎng)絡(luò)及通信技術(shù)(分布式計算網(wǎng)絡(luò))
1.自動發(fā)現(xiàn)
通過種子文件,獲取初始節(jié)點(地址及端口)
連接初始節(jié)點,獲取初始節(jié)點知道的Peer
把自己的地址及端口廣播給各個Peer
接收各個Peer廣播的地址信息,構(gòu)建出網(wǎng)絡(luò)的全貌或片段
2. 技術(shù)領(lǐng)域
分布式存儲、分布式計算、分布式協(xié)同
組播
流媒體
搜索引擎
3.通信協(xié)議
napster 、Gnutella、eDonkey、 Bittorrent(文件分發(fā)協(xié)議)
XMPP、Jabber(即時通信協(xié)議)
Paxos 、Gossip(分布式系統(tǒng)狀態(tài)同步協(xié)議)
JXTA
4.使用HASH算法及非對稱加密及簽名技術(shù)
每個節(jié)點、每個人有唯一的一對公鑰及私鑰
公鑰同時也是每個節(jié)點、個人的地址和賬號
私鑰是證明”我就是我“的唯一手段
HASH算法對數(shù)據(jù)進行規(guī)整
5.算法
RSA、Elgamal、D-H、ECC
SHA256、 RIMPED160
6.通常使用橢圓曲線算法生成密鑰對
比特幣密鑰長度:256位
公鑰哈希值=RIMPED160(SHA256(公鑰))
比特幣地址=1+Base58(0+公鑰哈希值+校驗碼)
校驗碼=前四字節(jié)(SHA256(SHA256(0+公鑰哈希值)))
7. 加密
發(fā)送方使用接收方的公鑰加密數(shù)據(jù)
接收方使用本方的私鑰解密數(shù)據(jù)
通常使用本方面交換對稱加密的Key
8.簽名
發(fā)送方使用HASH算法計算數(shù)據(jù)的HASH值
發(fā)送方使用本方的私鑰加密HASH值,得到簽名
接收方使用HASH算法計算數(shù)據(jù)的HASH值
接收方使用發(fā)送方的公鑰解密簽名得到發(fā)送的HASH值
比較兩個HASH值的一致性
9.參考
ElGamal算法,是一種較為常見的加密算法,它是基于1984年提出的公鑰密碼體制和橢圓曲線加密體系。既能用于數(shù)據(jù)加密也能用于數(shù)字簽名,其安全性依賴于計算有限域上離散對數(shù)這一難題。在加密過程中,生成的密文長度是明文的兩倍,且每次加密后都會在密文中生成一個隨機數(shù)K,在密碼中主要應(yīng)用離散對數(shù)問題的幾個性質(zhì):求解離散對數(shù)(可能)是困難的,而其逆運算指數(shù)運算可以應(yīng)用平方-乘的方法有效地計算。也就是說,在適當(dāng)?shù)娜篏中,指數(shù)函數(shù)是單向函數(shù)。
橢圓曲線密碼體制是目前已知的公鑰體制中,對每比特所提供加密強度最高的一種體制。解橢圓曲線上的離散對數(shù)問題的最好算法是Pollard rho方法,其時間復(fù)雜度為,是完全指數(shù)階的。其中n為等式(2)中m的二進制表示的位數(shù)。當(dāng)n=234, 約為2117,需要1.6×1023 MIPS 年的時間。而我們熟知的RSA所利用的是大整數(shù)分解的困難問題,目前對于一般情況下的因數(shù)分解的最好算法的時間復(fù)雜度是子指數(shù)階的,當(dāng)n=2048時,需要2x1020MIPS年的時間。也就是說當(dāng)RSA的密鑰使用2048位時,ECC的密鑰使用234位所獲得的安全強度還高出許多。它們之間的密鑰長度卻相差達9倍,當(dāng)ECC的密鑰更大時它們之間差距將更大。更ECC密鑰短的優(yōu)點是非常明顯的,隨加密強度的提高,密鑰長度變化不大。
DH Diffie-Hellman算法(D-H算法),密鑰一致協(xié)議,是由公開密鑰密碼體制的奠基人Diffie和Hellman所提出的一種思想。簡單的說就是允許兩名用戶在公開媒體上交換信息以生成”一致”的、可以共享的密鑰。換句話說,就是由甲方產(chǎn)出一對密鑰(公鑰、私鑰),乙方依照甲方公鑰產(chǎn)生乙方密鑰對(公鑰、私鑰)。以此為基線,作為數(shù)據(jù)傳輸保密基礎(chǔ),同時雙方使用同一種對稱加密算法構(gòu)建本地密鑰(SecretKey)對數(shù)據(jù)加密。這樣,在互通了本地密鑰(SecretKey)算法后,甲乙雙方公開自己的公鑰,使用對方的公鑰和剛才產(chǎn)生的私鑰加密數(shù)據(jù),同時可以使用對方的公鑰和自己的私鑰對數(shù)據(jù)解密。不單單是甲乙雙方兩方,可以擴展為多方共享數(shù)據(jù)通訊,這樣就完成了網(wǎng)絡(luò)交互數(shù)據(jù)的安全通訊!該算法源于中國的同余定理——中國馀數(shù)定理。
三、區(qū)塊鏈化數(shù)據(jù)庫
1.典型特征
去中心化的、分布式的、區(qū)塊化存儲的數(shù)據(jù)庫
區(qū)塊(Header + Body)
鏈
隨機數(shù)
時間戳
包含父區(qū)塊創(chuàng)建之后、本區(qū)塊創(chuàng)建之前的全部交易;
滿足某個條件的區(qū)塊HASH;
a) SHA256(SHA256(version + prev_hash + merkle_root + nTIme + nbits + x )) 《 TARGET
b) Target值由動態(tài)的難度系數(shù)確定,Target越小,難度越高;
2. 參考
默克爾樹是一種二叉樹,由一組葉節(jié)點、一組中間節(jié)點和一個根節(jié)點構(gòu)成。最下面的大量的葉節(jié)點包含基礎(chǔ)數(shù)據(jù),每個中間節(jié)點是它的兩個子節(jié)點的哈希,根節(jié)點也是由它的兩個子節(jié)點的哈希,代表了默克爾樹的頂部。默克爾樹的目的是允許區(qū)塊的數(shù)據(jù)可以零散地傳送:節(jié)點可以從一個源下載區(qū)塊頭,從另外的源下載與其有關(guān)的樹的其它部分,而依然能夠確認所有的數(shù)據(jù)都是正確的。
默克爾樹協(xié)議對比特幣的長期持續(xù)性可以說是至關(guān)重要的。在2014年4月,比特幣網(wǎng)絡(luò)中的一個全節(jié)點-存儲和處理所有區(qū)塊的全部數(shù)據(jù)的節(jié)點-需要占用15GB的內(nèi)存空間,而且還以每個月超過1GB的速度增長。簡化支付確認(SPV)協(xié)議允許另一種節(jié)點存在,這樣的節(jié)點被成為“輕節(jié)點”,它下載區(qū)塊頭,使用區(qū)塊頭確認工作量證明,然后只下載與其交易相關(guān)的默克爾樹“分支”。這使得輕節(jié)點只要下載整個區(qū)塊鏈的一小部分,就可以安全地確定任何一筆比特幣交易的狀態(tài)和賬戶的當(dāng)前余額。
四、記賬權(quán)競爭及獎勵制度(挖礦)
1.概述
為防止可預(yù)期的記賬節(jié)點被控制或攻擊,導(dǎo)致錯誤記賬行為,區(qū)塊鏈技術(shù)采用競爭記賬權(quán)的做法:
任何一個節(jié)點均可以參與記賬,因而記賬節(jié)點無法預(yù)期,也就不容易被控
競爭的過程就是看誰最先計算出滿足條件的HASH值
每次計算必須以最后1個有效的區(qū)塊為起點,必須消耗大量的計算機CPU,增加偽造記賬數(shù)據(jù)的成本
計算的結(jié)果必須得到大部分節(jié)點的認可(共識算法),才會成為新的區(qū)塊。實際算法中,如果該區(qū)塊位于最長的區(qū)塊鏈上,則為正式被認可的區(qū)塊,也即大部分節(jié)點認可計算結(jié)果,并愿意在該結(jié)果下繼續(xù)計算
這個過程被稱為挖礦,或工作量證明(POW)。參與挖礦的節(jié)點稱為礦工,協(xié)同挖礦的礦工聯(lián)合體稱為礦池
a ) 以前1區(qū)塊為起點,計算滿足條件的HASH值;
b ) 將計算的結(jié)果廣播給其他節(jié)點;
c ) 其他節(jié)點驗證計算結(jié)果無誤時,認可該結(jié)果,并以該結(jié)果為起點重新進行計算;
d ) 單位時間內(nèi)達到共識認可要求時,該區(qū)塊成為正式認可的區(qū)塊。
這個過程被稱系統(tǒng)為鼓勵挖礦的積極性,給予競爭成功的記賬節(jié)點獎勵
a ) 給予每個區(qū)塊挖礦者直接的“現(xiàn)金”獎勵。例如,比特幣網(wǎng)絡(luò)給予25個比特幣,以太坊給予5個以太幣;
b ) 以太坊:納入該區(qū)塊的交易的手續(xù)費,由發(fā)起節(jié)點和記賬節(jié)點分成(發(fā)起75%,記賬25%)。
2. 參考
比特幣使用的SHA256算法,會有2^256種輸出,如果我們進行2^256+1次輸入,那么必然會產(chǎn)生一次碰撞;甚至從概率的角度看,進行2^130次輸入就會有99%的可能發(fā)生一次碰撞。不過我們可以計算一下,假設(shè)一臺計算機以每秒10000次的速度進行哈希運算,要經(jīng)過10^27年才能完成2^128次哈希!這時要考慮一種情況:如果同時有兩個礦工各自得到一個正確答案,并各自生成了一個區(qū)塊廣播出去會發(fā)生什么呢?這時候在區(qū)塊鏈上同一個位置就有了兩個區(qū)塊,所謂的“分叉”就出現(xiàn)了。分叉是絕對不允許的,所以當(dāng)?shù)V工發(fā)現(xiàn)區(qū)塊鏈分叉之后,會選擇最長的一條繼續(xù)計算,短的那條區(qū)塊鏈會被丟棄。這里的長短,不是簡單意義上的長短,而是工作量證明合計值最大的那個鏈。