国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于區(qū)塊鏈的身份識別技術(shù)

2019-01-08 03:25:22
中興通訊技術(shù) 2018年6期
關(guān)鍵詞:以太挖礦數(shù)字簽名

鄒秀清/ZOU Xiuqing

丁勇/DING Yong

(桂林電子科技大學(xué),廣西桂林541004)

隨著互聯(lián)網(wǎng)行業(yè)的發(fā)展,越來越多新型的網(wǎng)絡(luò)平臺融入到了人們的生活,人們?nèi)粘I疃家玫教詫?、京東等交易平臺,使用支付寶、小米錢包、微信等來支付。這些平臺都有一套獨立的注冊、登錄、認證和權(quán)限管理的系統(tǒng),每一個用戶在系統(tǒng)中都充當(dāng)不同的角色,并擁有不同的權(quán)限,這種中心化系統(tǒng)給人們帶來的弊端有以下幾點:

(1)如果有多個系統(tǒng)需要進行登錄、認證,管理員的維護和管理的成本將會大幅增加,并隨著規(guī)模的增加,維護難度會增加。

(2)用戶必須記住自己的多個賬號、密碼,如果賬號很多,使用起來將非常不便捷。

(3)容易被黑客攻擊,帶來損失。

(4)中心化系統(tǒng)不可信,管理員可以隨時篡改數(shù)據(jù)。

區(qū)塊鏈技術(shù)是一種利用去中心化共識的機制維護一個完整的、分布式的、不可篡改的賬本數(shù)據(jù)庫的技術(shù),它能夠讓區(qū)塊鏈中的參與者在無需建立信任關(guān)系的前提下實現(xiàn)一個統(tǒng)一的賬本系統(tǒng)。近年來,區(qū)塊鏈以集成分布式數(shù)據(jù)存儲、點對點(P2P)傳輸、新型加密算法和共識機制等技術(shù)的特點,已越來越成為許多國家政府和國際組織研究討論的熱點,依靠互聯(lián)網(wǎng)的產(chǎn)業(yè)也紛紛加大了對其投入的力度[1],但是目前全球還沒有政府大力推廣將該技術(shù)應(yīng)用于物聯(lián)網(wǎng)的身份識別系統(tǒng)。

如今新型的區(qū)塊鏈技術(shù)給人們帶來了解決方案:區(qū)塊鏈建立了動態(tài)的P2P網(wǎng)絡(luò),沒有了中心化服務(wù),帳本均分布在每個節(jié)點中,所有的節(jié)點一同維護;帳本上記錄了該區(qū)塊鏈自創(chuàng)建以來的記下的所有交易記錄,通過密碼學(xué)的安全機制,使得所有記錄不可修改、真實可信;每個人都是一個節(jié)點,通過彼此之間的信任來建立區(qū)塊鏈的信任。區(qū)塊鏈網(wǎng)絡(luò)沒有傳統(tǒng)的中心管理員,整個網(wǎng)絡(luò)的運作由線上的電腦共同進行維護,使得運營成本大幅降低。

本設(shè)計組成的框架主要包括四大模塊:數(shù)據(jù)層模塊、網(wǎng)絡(luò)層模塊、共識層模塊和接口層模塊。通過接入到同一個區(qū)塊鏈網(wǎng)絡(luò)中,使用統(tǒng)一的接口層進行交互,同時接口層還能和網(wǎng)絡(luò)層和共識層通過底層協(xié)議進行交互,網(wǎng)絡(luò)層負責(zé)發(fā)現(xiàn)區(qū)塊鏈網(wǎng)絡(luò)中的P2P節(jié)點和數(shù)據(jù)的傳輸,共識層負責(zé)身份認證,數(shù)據(jù)層負責(zé)存儲數(shù)據(jù)。

1 關(guān)鍵技術(shù)

1.1 區(qū)塊鏈技術(shù)

1.1.1 區(qū)塊鏈技術(shù)基本原理

假設(shè)Bob要在互聯(lián)網(wǎng)上向Alice轉(zhuǎn)賬,每次轉(zhuǎn)賬都會產(chǎn)生交易記錄,將所有的交易記錄進行連接,生成總帳單,總賬單包含每個人的余額。記賬時,應(yīng)需保持公平、誠信的態(tài)度,使得雙方能夠相互信任;但記賬人可能會作假,使得雙方的信任程度降低,這是很典型的欺詐行為。區(qū)塊鏈技術(shù)則可以很好地解決這一問題,沒有人可以作假。

現(xiàn)把賬單模型進行縮小,規(guī)定:每次更新、修改數(shù)據(jù)必須在原有的賬單中進行,并且新賬單包含時間戳、前一個賬單的哈希值等數(shù)據(jù)。將這些帳本累加起來稱為總帳本,總帳本將所有的塊鏈接起來,組成區(qū)塊鏈,圖1表示一條區(qū)塊鏈中的3個區(qū)塊。

1.1.2 區(qū)塊鏈的去中心化

在2008年的金融危機中,比特幣的創(chuàng)始人中本聰發(fā)明了比特幣,它成為了第一個去中心化的數(shù)字貨幣。區(qū)塊鏈是一個分布式網(wǎng)絡(luò),每個節(jié)點都會存放所有交易的副本,并自動同步。節(jié)點可以是用戶的電腦、手機,或是其他設(shè)備。如圖2所示,區(qū)塊鏈網(wǎng)絡(luò)節(jié)點是扁平化的,每個節(jié)點的地位相等、公平,并以扁平拓撲的方式向相鄰節(jié)點進行數(shù)據(jù)交互[2]。

假設(shè)Bob想給他人轉(zhuǎn)賬,Bob就得向全網(wǎng)廣播他要轉(zhuǎn)賬的消息,并需全網(wǎng)達成共識,才能認為他的消息是合法的,且每個節(jié)點都會保存他轉(zhuǎn)賬信息。全網(wǎng)沒有中心服務(wù)器,沒有人能擁有管理的權(quán)力,只要規(guī)則定好了,就必須照著規(guī)則做,沒有人可以改變,這其實就是區(qū)塊鏈去中心化的魅力所在。

所有節(jié)點都相當(dāng)于“校驗員”,它們無時無刻不在檢查區(qū)塊中的交易信息是否正確,并且在檢查交易的時候,不斷嘗試產(chǎn)生隨機數(shù),計算哈希值,使數(shù)據(jù)具有很強的安全性,黑客無法入侵,無法修改賬戶余額。隨著用戶的增加,越來越多的后續(xù)節(jié)點(用戶)加入到了比特幣網(wǎng)絡(luò)中,共同完成共識的過程[3];而整個過程中網(wǎng)絡(luò)中每個節(jié)點的地位是相同的。比特幣不是憑空產(chǎn)生,而是通過消耗了電力、物力并應(yīng)運算而產(chǎn)生的,因此具有價值,可以兌換成現(xiàn)有的貨幣。

圖2 去中心化的節(jié)點圖

1.2 加密哈希函數(shù)和哈希指針

哈希函數(shù)也叫做哈希算法,不論輸入字符串的長短,生成簽名的長度都是固定的,因此可以作為一段數(shù)據(jù)的數(shù)字指紋,便于區(qū)分每個消息。生成的摘要可作為簽名,以確保數(shù)據(jù)的真實性。賬戶的創(chuàng)建需要一個非對稱加密密鑰對,以太坊選擇的是橢圓曲線加密算法(ECC)中的Secp256k1,依據(jù)速度、安全性等參數(shù)確定賬戶的地址,具體的方法如下:

(1)創(chuàng)建一個隨機私鑰,由64個十六進制的字符構(gòu)成;

(2)從私鑰中導(dǎo)出公鑰;

(3)從公鑰中導(dǎo)出地址。

使用Secp256k1生成256位公鑰/密鑰,然后編譯成64位長度的十六進制字符串;采用公鑰的Keccak-256哈希算法,得到一個32字節(jié)的字十六進制字符串,接下來對該字符串進行取截,取字符串的最后20個字節(jié)(即刪除前12個字節(jié)),得到了40個字節(jié)的字符串,在簽名加上0x前綴,就可以得到一個42個字節(jié)長的地址,該地址就是以太坊用戶全網(wǎng)唯一的賬號。

1.3 Merkle樹

Merkle樹在區(qū)塊鏈中尤其重要,相當(dāng)于用大量的數(shù)據(jù)塊來進行哈希運算。Merkle樹將2個相鄰的認證請求進行哈希計算,逐步堆積到Markle樹根。這種哈希算法的好處就是讓歷史數(shù)據(jù)不可篡改、真實可信[4]。節(jié)點的值是它相連2個葉子節(jié)點的哈希,這就導(dǎo)致整個Merkle樹中的數(shù)據(jù)都是互相關(guān)聯(lián)的,改動其中一個數(shù)據(jù),將會徹底改變整個區(qū)塊的結(jié)構(gòu),因此給身份的證明提供了一個非常簡潔的機制。

Merkle樹的最初應(yīng)用是在比特幣中,即使用了Merkle樹來存儲每個區(qū)塊的交易。每個Merkle樹從塊到根都是由哈希的分支組成,如圖3所示。由于Merkle樹采用了非常強的哈希算法,且哈希后的摘要求逆幾乎不可能實現(xiàn),因此Merkle樹提供了真實可信的數(shù)據(jù)驗證方法。

每個區(qū)塊頭包含如圖4所示的內(nèi)容。將相連的數(shù)據(jù)區(qū)塊的數(shù)據(jù)進行相連,通過上一區(qū)塊的哈希值和當(dāng)前區(qū)塊的哈希值將所有的區(qū)塊請求進行關(guān)聯(lián)。如果修改了其中一個數(shù)據(jù),將影響所有在當(dāng)前區(qū)塊鏈網(wǎng)絡(luò)上的區(qū)塊,因此數(shù)據(jù)不可能被篡改,所有的認證請求不可偽造,極大提高了區(qū)塊鏈的安全性。

1.4 ECDSA

ECDSA是數(shù)字簽名算法(DSA)的其中一個例子。和非對稱加密算法(RSA)進行對比,在相同的安全強度下,ECDSA可以使用的密鑰更短,從而節(jié)省網(wǎng)絡(luò)和存儲空間,具有較高的研究價值[5]。

圖3 Merkle樹的結(jié)構(gòu)

圖4 數(shù)據(jù)區(qū)塊頭的結(jié)構(gòu)

在本設(shè)計方案中,首先要避免數(shù)據(jù)明文傳輸?shù)臉O大不安全因素,同時要保證交互雙方的身份真實性,因此需要利用公鑰加密算法中非對稱加密的優(yōu)勢。使用本設(shè)計方案進行數(shù)據(jù)傳輸時,將服務(wù)器的公鑰輸出在客戶端,客戶端使用公鑰加密,在信息交互時數(shù)據(jù)以密文方式傳給服務(wù)器端,再由相應(yīng)私鑰得到明文數(shù)據(jù)[6]。

Alice將要給Bob發(fā)送一條消息,要求消息包含數(shù)字簽名來進行身份識別,那么可以定義一組參數(shù)(CURVE,G,n),其中CURVE表示橢圓曲線的點域以及它所使用的幾何方程,G表示橢圓曲線基點,大素數(shù)n是橢圓曲線的階數(shù)[7]。接下來我們介紹數(shù)字簽名的具體過程和驗證數(shù)字簽名的具體過程。

(1)數(shù)字簽名的過程

如果Alice要發(fā)出認證請求,她希望能對消息m進行簽名,因此將橢圓曲線的參數(shù)設(shè)計為D=(p,a,b,G,n,h),其中對應(yīng)的密鑰對為(k,Q),Q為公鑰,k為私鑰。Alice將按照如下步驟進行簽名:

1) 產(chǎn) 生 一 個 隨 機 數(shù)d,1≤d≤n-1;

2)計算dG=(x1,y1),將x1轉(zhuǎn)化為整數(shù)-x1;

3)計算r=-x1modn,若r=0,則轉(zhuǎn)向第1步;

4)計算d-1modn;

5)計算哈希值H(m),并將得到的比特串轉(zhuǎn)化為整數(shù)e;

6)計 算s=d-1(e+kr)modn,若s=0,則轉(zhuǎn)向第1步;

7)(r,s)即為Alice對消息m進行的簽名。

(2)驗證數(shù)字簽名的過程

如果Bob收到消息m之后,他需要驗證消息m的簽名(r,s),在得到橢圓曲線參數(shù)和Q之后,將按以下步驟操作來驗證數(shù)字簽名[8]:

1)首先驗證r和s是區(qū)間[1,n-1]上的整數(shù);

2)計算H(m)并將其進行轉(zhuǎn)化變?yōu)檎麛?shù)e;

3)計算w=s-1modn;

4) 計 算u1=ewmodn以 及u2=rwmodn;

5)計算X=u1G+u2Q;

6)若X=0,則拒絕該簽名的有效性,否則將X的x坐標(biāo)x1轉(zhuǎn)化為整數(shù)并計算

7)當(dāng)且僅當(dāng)v=r時,簽名驗證可以通過。

利用ECDSA算法,將認證信息進行數(shù)字簽名,確保了每條認證消息都是由正確的用戶發(fā)表的,防止他人假冒,還可以保證數(shù)據(jù)的完整性。在整個認證請求中,將不會有人對數(shù)據(jù)包進行惡意篡改。

每個節(jié)點用戶再發(fā)起認證請求時,都會利用自己的私鑰簽名,其他節(jié)點收到認證請求,也會一同參與簽名認證的操作。如果認證成功,將會將賬單記錄下來,完成認證;否則將拒絕認證請求。

1.5 共識方法

1.5.1 Gas——以太坊系統(tǒng)計算工作量的單位

Gas是以太坊系統(tǒng)中執(zhí)行交易所需要的計算工作量單位。所有的交易不論是轉(zhuǎn)賬交易,還是執(zhí)行智能合約,都要消耗Gas。Gas的價格由交易的發(fā)起人和礦工的工作量決定,交易打包進區(qū)塊中需要礦工們進行哈希運算,礦工們付出了勞動,因此需要收取一定的費用。如果交易發(fā)起人設(shè)置的Gas價格過低,礦工們基本不會將交易打包進區(qū)塊里;如果交易設(shè)定較高的Gas,該交易將會得到較高的優(yōu)先級。

1.5.2 以太坊的工作量證明和挖礦原理

工作量證明(PoW)的目的是阻止網(wǎng)絡(luò)攻擊,如當(dāng)今網(wǎng)絡(luò)環(huán)境下常出現(xiàn)的分布式拒絕服務(wù)攻擊(DDoS),就是用來發(fā)送許多假的請求以耗盡計算機網(wǎng)絡(luò)系統(tǒng)資源,導(dǎo)致服務(wù)器宕機,真正的用戶則無法登錄到中心服務(wù)器上[9]。

PoW被定義為花費計算機算力來進行數(shù)據(jù)校對的要求,俗稱“挖礦”。挖礦的目的有以下幾點:

(1)驗證交易的合法性,避免出現(xiàn)多重交易的情況;

(2)用來獎勵礦工所做出的計算工作;

(3)維護以太坊系統(tǒng)的正常安全運轉(zhuǎn)。

通過挖礦的方式解決PoW的數(shù)學(xué)難題具有不可逆的特征。從技術(shù)角度來說,挖礦的過程就是一個不斷進行的哈希運算過程,它通過嘗試產(chǎn)生隨機數(shù),找到滿足條件的隨機數(shù)后立即將區(qū)塊進行打包并全網(wǎng)廣播,找到該隨機數(shù)的節(jié)點也是贏得本輪記賬權(quán)利的節(jié)點。該區(qū)塊將在整個區(qū)塊鏈網(wǎng)絡(luò)廣播,進行共識的達成。如果達成共識,每個節(jié)點將會將該區(qū)塊添加到自己的區(qū)塊鏈中,同時該礦工將會得到以太幣獎勵。

隨機數(shù)的條件取決于系統(tǒng)設(shè)定的難度,例如:要求整個區(qū)塊加上隨機數(shù)計算出的哈希值要小于給定的值才算成功;而哈希值的產(chǎn)生沒有規(guī)律可循,只有算力越高的計算機才能更快得到符合條件的隨機數(shù)。

2 核心框架

2.1 數(shù)據(jù)層

2.1.1 數(shù)據(jù)區(qū)塊和鏈式結(jié)構(gòu)

首先,區(qū)塊是以太坊網(wǎng)絡(luò)的核心,所有的交易、數(shù)據(jù)存儲都是在區(qū)塊頭中進行的。不同的區(qū)塊頭之間通過頭指針(ParentHash)函數(shù)指向前一個區(qū)塊的頭指針,將它們串聯(lián)起來,形成單項鏈表。

區(qū)塊結(jié)構(gòu)分為區(qū)塊頭和區(qū)塊的數(shù)據(jù)部分這2個部分,源碼在以太坊的/core/types/block.go中,數(shù)據(jù)層的函數(shù)關(guān)系圖如圖5所示。

圖5 數(shù)據(jù)層函數(shù)關(guān)系圖

其中,區(qū)塊的結(jié)構(gòu)體定義為:

type Block struct

2.1.2 Merkle樹的使用

在以太坊中使用的是Merkle樹的改進樹(MPT),也是二叉樹的一種。節(jié)點的值是它相連2個葉子節(jié)點值的哈希。Merkle樹用于所有交易正確性的驗證,而MPT則大大提高了查找效率。樹的構(gòu)造代碼在以太坊源碼的trie/trie.go中,關(guān)鍵代碼如下。

首先是從根節(jié)點進行遍歷:

if(t.db==nil){...}//如果數(shù)據(jù)已經(jīng)存在數(shù)據(jù),返回

return t.CommitTo(t.db)//父節(jié)點沒有數(shù)據(jù),就調(diào)用下面的函數(shù)寫數(shù)據(jù)

查找、插入、刪除都是在trie/trie.go里進行使用的。

2.1.3 數(shù)據(jù)存儲的實現(xiàn)

以太坊的數(shù)據(jù)存放在StateDB中。StateDB是以太坊的數(shù)據(jù)庫,負責(zé)本地存儲數(shù)據(jù)及業(yè)務(wù),還負責(zé)連接到底層的數(shù)據(jù)庫,它使用二級緩存機制來存儲賬戶的相關(guān)數(shù)據(jù)。

StateDB的相關(guān)代碼在core/state/statedb.go中,其定義的結(jié)構(gòu)體以及作用為:DataBase類型的DB用于存放數(shù)據(jù),Tire類型的tire用于存放MPT樹,stateObject表示以太坊賬戶,其中在stateObject中也有二級緩存機制,主要用來緩存和更新以太坊帳戶。

整個以太坊網(wǎng)絡(luò)的運作結(jié)構(gòu)如圖6所示。

圖6 以太坊網(wǎng)絡(luò)的運作結(jié)構(gòu)

2.2 網(wǎng)絡(luò)層

2.2.1 網(wǎng)絡(luò)層傳輸協(xié)議

當(dāng)一個節(jié)點有新的數(shù)據(jù)區(qū)塊產(chǎn)生,該節(jié)點將會進行全網(wǎng)廣播,其他收到請求的節(jié)點將會進行驗證。一個節(jié)點創(chuàng)建一個新的區(qū)塊,該新區(qū)塊很快會被發(fā)到網(wǎng)絡(luò)上所有的節(jié)點,然后每個節(jié)點都要驗證這個新的區(qū)塊,驗證其真實性。經(jīng)驗證后,每個節(jié)點才會添加這個新的區(qū)塊到區(qū)塊鏈,區(qū)塊鏈網(wǎng)絡(luò)中的所有節(jié)點達成共識,一起決定哪個區(qū)塊有效而哪個無效,擅自篡改的區(qū)塊會被網(wǎng)絡(luò)上其他節(jié)點拒絕[10]。

在節(jié)點之間傳播數(shù)據(jù)時,采用加密網(wǎng)絡(luò)和傳輸協(xié)議(RLPx)加密握手協(xié)議。該協(xié)議在網(wǎng)絡(luò)層的上層,在以太坊網(wǎng)絡(luò)中新的節(jié)點建立后,首先進行端口監(jiān)測偵聽、節(jié)點間連接及通信交互,當(dāng)節(jié)點間都建立了連接,將會通過Msg的格式進行通信。每次在通信的過程中,都會做出如圖7所示的判斷,以確保握手協(xié)議運作正常,如果運作不正常,將會失去對該節(jié)點的連接。

RLPx加密握手協(xié)議的具體流程如圖8所示。

2.2.2 數(shù)據(jù)驗證機制

P2P網(wǎng)絡(luò)中的每個節(jié)點,只要在線,都在隨時監(jiān)測偵聽其他節(jié)點的認證請求,驗證區(qū)塊數(shù)據(jù)的具體一些步驟如下:

(1)負責(zé)識別網(wǎng)絡(luò)中廣播的數(shù)據(jù)和區(qū)塊;

(2)如果接收到相鄰節(jié)點發(fā)來的認證,將會對認證請求進行分析,將檢查數(shù)據(jù)的完整性、語法的規(guī)范性、數(shù)字簽名是否正確等方面來校驗交易數(shù)據(jù)是否有效;

圖7 RLPx加密握手協(xié)議的建立

圖8 RLPx加密握手協(xié)議的流程

(3)如果數(shù)據(jù)有效,將會把數(shù)據(jù)放入存儲池中,即將認證請求記錄到本地,同時向相鄰節(jié)點轉(zhuǎn)發(fā)數(shù)據(jù);

(4)如果數(shù)據(jù)無效,將會立即放棄該數(shù)據(jù),確保數(shù)據(jù)不會在區(qū)塊鏈網(wǎng)絡(luò)中傳播。

2.2.3 P2P網(wǎng)絡(luò)的具體實現(xiàn)

以太坊的P2P網(wǎng)絡(luò)主要使用以下幾個工具實現(xiàn)。

(1)Discover:使用了 Kademlia協(xié)議,用于使用UDP的P2P節(jié)點發(fā)現(xiàn)的協(xié)議;

(2)discv5:用于發(fā)現(xiàn)新節(jié)點;

(3)nat:網(wǎng)絡(luò)地址轉(zhuǎn)換工具;

(4)netutil:有關(guān)網(wǎng)絡(luò)連接的工具;

(5)simulations:P2P網(wǎng)絡(luò)測試工具。

P2P網(wǎng)絡(luò)非常復(fù)雜,如果要使用它,就必須要包含節(jié)點查找、節(jié)點維護、節(jié)點建立連接的功能。在database.go文件中,newNodeDB函數(shù)用來存儲節(jié)點數(shù)據(jù),存儲節(jié)點數(shù)據(jù)采用了Keccak-256的簽名哈希算法。以下是一些關(guān)鍵函數(shù)。

(1)查找節(jié)點的函數(shù):func(db*nodeDB)node(id NodeID)*Node;

(2)插入數(shù)據(jù)的函數(shù):func(db*nodeDB)updateNode(node*Node);

(3)刪除數(shù)據(jù)的函數(shù):func(db*nodeDB)deleteNode(id NodeID)。

連接超時的處理辦法,即如果發(fā)現(xiàn)有個節(jié)點接收消息的時間超出了設(shè)定的值,那么就刪除節(jié)點不再連接,關(guān)鍵代碼如下:

2.3 共識層

2.3.1 PoW的機制

PoW通過計算機進行數(shù)學(xué)運算得到記賬權(quán),但是每次要達成全網(wǎng)共識,都需要全網(wǎng)一起參與運算。本設(shè)計系統(tǒng)作了以下規(guī)定,使認證步驟準確進行:

(1)所有連接到以太坊網(wǎng)絡(luò)的地址都應(yīng)該分為已被認證的和未被認證的;

(2)已認證的節(jié)點可以變成沒有經(jīng)過認證的,沒有經(jīng)過認證的節(jié)點也可以變成已認證的;

(3)一條認證請求包括認證的地址、認證的狀態(tài)等;

(4)認證成功之后不能再進行第2次認證。

2.3.2 共識記賬的設(shè)計方案

本設(shè)計方案的認證流程如下:

(1)請求的生成。以太坊的客戶端持續(xù)監(jiān)測偵聽,如果網(wǎng)站調(diào)用了認證請求,那么客戶端將會向全網(wǎng)進行廣播。Alice使用她的私鑰對認證請求進行簽名,并在認證請求的末尾處添加簽名,以便能夠讓其他節(jié)點來進行校驗。

(2)請求的廣播。Alice將認證的請求向全網(wǎng)節(jié)點廣播,其他的節(jié)點將會收到并將共同參與數(shù)字簽名的校驗。若正確,則將其納入到礦工自己的區(qū)塊中;若不正確,則丟棄。

(3)區(qū)塊的生成。每當(dāng)間隔一段時間,所有的節(jié)點通過挖礦進行PoW,通過解決數(shù)學(xué)難題來贏得記賬的權(quán)利,此過程也是所有節(jié)點進行區(qū)塊同步校對的過程。

(4)區(qū)塊的廣播。如果有節(jié)點通過算力找到了符合條件的隨機數(shù),將會向全網(wǎng)廣播,該節(jié)點將是下個區(qū)塊的創(chuàng)建者,并會獲得獎勵;

(5)區(qū)塊寫入賬本。將對所有節(jié)點成功解出數(shù)學(xué)難題的廣播答案進行驗證,如果正確,它會將該區(qū)塊納入自己的賬本中,每個節(jié)點同步進行;否則,將丟棄該區(qū)塊。

2.3.3 共識記賬的實現(xiàn)

共識層的代碼在consensus/路徑中,本節(jié)具體介紹共識記賬的實現(xiàn)。

prepare函數(shù)主要用來處理區(qū)塊頭部信息,其定義如下:

diff=(parent_diff+(parent_diff/2048 * max(1- (block_timestampparent_timestamp)/10,-99)))+ 2^(periodCount-2)

其中parent_diff表示上一區(qū)塊的難度;block_timestamp表示當(dāng)前區(qū)塊的時間戳;parent_timestamp表示上一區(qū)塊的時間戳;periodCount表示區(qū)塊數(shù)量。

結(jié)合官方的文檔,在測試階段,調(diào)節(jié)區(qū)塊難度的值為一個較低的值,讓登錄認證的交易盡快被礦工打包,避免用戶長時間等待,同時方便調(diào)試和使用。難度設(shè)定需基于創(chuàng)世區(qū)塊(創(chuàng)世區(qū)塊是指區(qū)塊鏈的第1個區(qū)塊,它是構(gòu)建整個區(qū)塊鏈系統(tǒng)的基礎(chǔ))。

seal函數(shù)用于處理挖礦的工作,需要一直遞歸調(diào)用,直到解決問題,解決問題之后退出。seal函數(shù)具有以下幾點作用:

(1)根據(jù)區(qū)塊頭部的信息中的挖礦難度系數(shù)來處理計算目標(biāo)值。

(2)選取隨機數(shù)和區(qū)塊頭的哈希值,進行哈希運算。如果結(jié)果小于目標(biāo)值,那么表示挖礦成功,自動退出;否則,則繼續(xù)循環(huán)進行哈希運算。

(3)如果從外部收到了這個塊,表示其他人已經(jīng)挖礦成功并且已經(jīng)得到了塊,那么就會馬上放棄打包當(dāng)前塊。

(4)Finalize函數(shù)表示挖礦成功之后獎勵的事,它可以計算礦工的獎勵,使礦工得到獎勵。

verifyHeader函數(shù)主要用來校驗區(qū)塊的時間戳、校驗難度值、校驗區(qū)塊的gas。

VerifySeal函數(shù)主要用來驗證區(qū)塊頭部的簽名信息。

2.4 接口層

本設(shè)計系統(tǒng)使用的是以太坊的go-ethereum客戶端來連接到自己搭建的以太坊私有網(wǎng)絡(luò),它提供的應(yīng)用程序編程接口(API)可以給本設(shè)計系統(tǒng)進行調(diào)用,并用來創(chuàng)建新地址,驗證數(shù)字簽名、支付和轉(zhuǎn)賬、查看余額等。接口層包含了以太坊智能合約腳本、分布式計算、驗證加密簽名和數(shù)據(jù)存儲的技術(shù)。所有的請求數(shù)據(jù)通過post傳遞,使用json參數(shù)傳遞。

解析一個請求的具體的實現(xiàn)步驟如下:

(1)首先要對json數(shù)據(jù)進行實例化,使用NewJSONCodec編碼器;

(2)通過NewJSONCodec編碼器將請求轉(zhuǎn)換為jsonRequest,并且獲取參數(shù)有關(guān)服務(wù)名(service_name)、服務(wù)方法(service_method)和 數(shù) 據(jù) 片 段(params);

(3)通過服務(wù)名(service_name)和服務(wù)方法(service_method),查找已經(jīng)注冊的rpc服務(wù);

(4)向rpc服務(wù)進行請求,之后的操作都在rpc服務(wù)中進行;

(5)rpc返回結(jié)果,接著對json序列化,返回結(jié)果值。

例如:本設(shè)計系統(tǒng)使用Ethereum客戶端賬,在向rpc服務(wù)發(fā)送請求時,設(shè)定service_name為指定以太坊的服務(wù)名,并設(shè)定service_method為sendRawTransaction,通過調(diào)用 rpc服務(wù),返回的結(jié)果是TxnHash字符串的json數(shù)據(jù)。

3 結(jié)束語

本設(shè)計方案最大的創(chuàng)新之處在于身份識別系統(tǒng)基于以太坊智能合約技術(shù),立足于傳統(tǒng)互聯(lián)網(wǎng)行業(yè)的現(xiàn)狀,解決了中心化管理的麻煩,以及用戶信息容易被篡改、被黑客盜用,中心服務(wù)器被攻擊等事關(guān)國家信息安全痛點的問題。

在本設(shè)計中,認證請求者向系統(tǒng)提出認證請求,服務(wù)器節(jié)點在收到請求后,采用認證方案對識別認證者的請求,同時將認證信息加入到認證區(qū)塊鏈中。這個過程解決了分布式賬本的一致性和安全性問題,不需要第三方中介的引入。

該系統(tǒng)具有以下創(chuàng)新特點:

(1)去中心化,防止偽造。根據(jù)當(dāng)今互聯(lián)網(wǎng)產(chǎn)業(yè)的需求,本系統(tǒng)使用P2P技術(shù),改善了數(shù)據(jù)的存儲。所有的數(shù)據(jù)通過分布式存儲保存在各個節(jié)點,每個用戶都是一個節(jié)點,通過節(jié)點的共識,完成身份識別,不依賴第三方。

(2)數(shù)據(jù)校驗,真實可信。結(jié)合以太坊改進之后的MPT樹,以及通過RLPx加密握手協(xié)議,并充分利用ECDSA的非對稱加密的優(yōu)勢,避免了黑客通過網(wǎng)絡(luò)傳輸作弊的行為。整個認證過程由節(jié)點們共同完成,使數(shù)據(jù)真實可信。

(3)安全性高,黑客止步?;趨^(qū)塊鏈的去中心化特點,每個節(jié)點的地位都是對等的,即使某個或者部分節(jié)點被摧毀都不會影響整個系統(tǒng)的安全,也不會造成數(shù)據(jù)的丟失。黑客如果想篡改數(shù)據(jù),需要攻擊、修改一半以上的節(jié)點數(shù)據(jù),這幾乎是無法實現(xiàn)的。

(4)調(diào)用方便,拓展性高。本系統(tǒng)設(shè)計的接口層,通過json傳遞參數(shù)到以太坊客戶端,基于接口層方便調(diào)用的特點,可快速搭建更多不同開發(fā)語言的網(wǎng)站和程序,同時客戶端支持多個網(wǎng)站和程序,并調(diào)用獲取賬號的信息,實現(xiàn)了賬號的統(tǒng)一身份認證。

(5)部署簡單,用途廣泛。本設(shè)計方案可以部署在企業(yè)、政府機構(gòu)、教育結(jié)構(gòu)等,例如:在企業(yè)中,多個部門可以使用同一套以太坊網(wǎng)絡(luò),無需在每個部門都進行部署,支持跨多個部門,適合部署在大型企業(yè)中。

本設(shè)計仍然有很多的可拓展之處,除了身份認證,還可以通過以太坊智能合約開發(fā)更多功能,例如:房屋出租、契約、貸款平臺等,能給使用者帶來顯著的安全效益、經(jīng)濟效益、管理效益、科研效益。

猜你喜歡
以太挖礦數(shù)字簽名
以太極為旗,開啟新時代“黃河大合唱”
少林與太極(2023年7期)2023-08-25 05:27:52
合力攻堅 全面治理高校“挖礦”
多措并舉 全流程整治“挖礦”
淺析計算機安全防護中數(shù)字簽名技術(shù)的應(yīng)用
挖礦木馬的攻擊手段及防御策略研究
挖礦的史蒂夫
車易鏈:做汽車業(yè)的“以太坊”
汽車觀察(2018年9期)2018-10-23 05:46:24
基于數(shù)字簽名的QR碼水印認證系統(tǒng)
百通推出入門級快速工業(yè)以太網(wǎng)絡(luò)交換器系列
以太互聯(lián) 高效便捷 經(jīng)濟、可靠、易用的小型可編程控制器
自動化博覽(2014年6期)2014-05-29 09:40:16
三明市| 涡阳县| 溆浦县| 大理市| 名山县| 上犹县| 阿瓦提县| 馆陶县| 汕头市| 永泰县| 安康市| 杭锦旗| 綦江县| 牡丹江市| 祁阳县| 堆龙德庆县| 闽侯县| 天峨县| 汶上县| 张家港市| 苍山县| 胶南市| 休宁县| 包头市| 彩票| 大洼县| 曲周县| 玉门市| 秭归县| 广宗县| 德格县| 英山县| 庄河市| 日喀则市| 赣州市| 金沙县| 东至县| 樟树市| 徐州市| 沁水县| 胶南市|