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

?

基于區(qū)塊鏈3.0架構(gòu)的身份認(rèn)證系統(tǒng)

2019-12-13 03:55:44
宿州學(xué)院學(xué)報(bào) 2019年11期
關(guān)鍵詞:合約共識(shí)身份

李 嶒

安徽中澳科技職業(yè)學(xué)院信息工程與藝術(shù)設(shè)計(jì)系,安徽合肥,230041

隨著互聯(lián)網(wǎng)規(guī)模的不斷擴(kuò)大,物聯(lián)網(wǎng)終端隨處可見,云計(jì)算極大普及,各種新型網(wǎng)絡(luò)平臺(tái)層出不窮,網(wǎng)絡(luò)應(yīng)用已經(jīng)徹底地融入到人們的日常生活中[1]。當(dāng)用戶需要使用平臺(tái)服務(wù)時(shí),需要提供相應(yīng)的身份認(rèn)證信息,每一個(gè)網(wǎng)絡(luò)平臺(tái)都有各自的身份認(rèn)證方法,用戶需要記憶多個(gè)用戶名和口令,管理認(rèn)證信息變得越來越煩瑣,用戶在不同網(wǎng)站注冊(cè)賬戶也消耗了大量的網(wǎng)絡(luò)資源。為了實(shí)現(xiàn)身份信息的共享和單點(diǎn)登錄,出現(xiàn)了中心化的認(rèn)證平臺(tái)來集中管理賬戶信息,但也伴隨著認(rèn)證跨平臺(tái)難度大、隱私保護(hù)困難、認(rèn)證成本高等一系列網(wǎng)絡(luò)安全問題。

區(qū)塊鏈通過一種去中心化的共識(shí)機(jī)制讓所有區(qū)塊鏈網(wǎng)絡(luò)的參與者共同維護(hù)一個(gè)賬本系統(tǒng),具有分布式存儲(chǔ)、去中心化共識(shí)、信息不可篡改和不對(duì)稱加密等特性。將區(qū)塊鏈技術(shù)應(yīng)用到身份認(rèn)證系統(tǒng),讓用戶擁有管理身份的權(quán)利并通過智能合約傳遞身份信息,可以有效解決傳統(tǒng)中心化認(rèn)證系統(tǒng)的安全缺陷[2]。

1 傳統(tǒng)身份認(rèn)證體系結(jié)構(gòu)比較分析

1.1 獨(dú)立身份認(rèn)證

物聯(lián)網(wǎng)的普及使終端用戶多樣化,每個(gè)應(yīng)用平臺(tái)擁有獨(dú)立的身份認(rèn)證系統(tǒng),提供用戶身份標(biāo)識(shí)和用戶證書,負(fù)責(zé)對(duì)用戶的合法性進(jìn)行驗(yàn)證,這種認(rèn)證結(jié)構(gòu)簡單易行。同一個(gè)互聯(lián)網(wǎng)用戶在不同的應(yīng)用平臺(tái)上擁有多個(gè)虛擬身份,每個(gè)虛擬身份對(duì)應(yīng)著一套應(yīng)用賬戶信息,頻繁地在多個(gè)身份間切換給用戶帶來不便[3]。

1.2 集中身份認(rèn)證

微軟從1997年就開始嘗試使用身份聯(lián)盟的方式進(jìn)行集中身份認(rèn)證,加入聯(lián)盟的應(yīng)用平臺(tái)接受同區(qū)域其他平臺(tái)發(fā)出的身份標(biāo)識(shí)和授權(quán)[4]。用戶通過身份聯(lián)盟平臺(tái)的賬戶在不同的網(wǎng)站間進(jìn)行單點(diǎn)登錄,解決了用戶多次注冊(cè)和登錄的不便。身份聯(lián)盟平臺(tái)采用中心化的系統(tǒng)構(gòu)架,集中管理用戶的身份信息,合作網(wǎng)站不必開發(fā)獨(dú)立的授權(quán)和認(rèn)證系統(tǒng),身份認(rèn)證處理過程由身份聯(lián)盟平臺(tái)負(fù)責(zé)執(zhí)行,初步實(shí)現(xiàn)了身份信息的共享。身份聯(lián)盟采用中心化的結(jié)構(gòu)管理用戶身份,如果中心服務(wù)器出現(xiàn)故障,將影響用戶使用聯(lián)盟中的應(yīng)用平臺(tái),同時(shí)跨聯(lián)盟訪問技術(shù)也是身份聯(lián)盟認(rèn)證體系結(jié)構(gòu)急需解決的問題。

1.3 開放授權(quán)認(rèn)證

開放授權(quán)是相對(duì)于封閉授權(quán)來講的,封閉授權(quán)是指在本地計(jì)算機(jī)或局域網(wǎng)內(nèi)的認(rèn)證授權(quán),互聯(lián)網(wǎng)應(yīng)用之間的授權(quán)即是開放授權(quán)。開放授權(quán)認(rèn)證是通過一定的開放規(guī)則,由用戶授權(quán)第三方應(yīng)用訪問該用戶在某一個(gè)網(wǎng)絡(luò)平臺(tái)上保存的身份信息,而無需將賬戶信息提供給第三方應(yīng)用[5]。通過授權(quán),用戶無須在第三方應(yīng)用平臺(tái)中注冊(cè)信息,第三方應(yīng)用也無法獲取用戶的隱私信息,授權(quán)平臺(tái)在收到用戶的授權(quán)請(qǐng)求后,向第三方應(yīng)用發(fā)送認(rèn)證結(jié)果。開放授權(quán)中,用戶在一定程度上掌握了身份信息的使用權(quán)利。

1.4 認(rèn)證體系分析比較

上文描述的三種認(rèn)證體系中,獨(dú)立身份認(rèn)證是最容易實(shí)現(xiàn)且擴(kuò)展性較好,但對(duì)于用戶的負(fù)擔(dān)較大,無法實(shí)現(xiàn)單點(diǎn)登錄;身份聯(lián)盟內(nèi)部共享認(rèn)證信息,實(shí)現(xiàn)了用戶單點(diǎn)登錄,用戶身份由中心服務(wù)器集中存儲(chǔ)和管理;開放授權(quán)認(rèn)證允許應(yīng)用之間單項(xiàng)傳遞認(rèn)證結(jié)果,用戶掌握了授權(quán)結(jié)果的使用權(quán)利,但用戶仍然沒有身份信息的管理權(quán)。因此三種認(rèn)證體系在用戶體驗(yàn)和技術(shù)實(shí)現(xiàn)上仍不完美。

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

區(qū)塊鏈技術(shù)是去中心化系統(tǒng),不需要高成本的中心信息架構(gòu),個(gè)別節(jié)點(diǎn)的故障不會(huì)影響整個(gè)區(qū)塊鏈系統(tǒng)的正常運(yùn)行,幾乎不存在系統(tǒng)癱瘓的風(fēng)險(xiǎn)。

區(qū)塊鏈技術(shù)實(shí)現(xiàn)了鏈狀區(qū)塊結(jié)構(gòu)、全網(wǎng)共享賬本和非對(duì)稱加密技術(shù),具有去中心化、不可篡改、公開透明等特點(diǎn),具有很強(qiáng)的抵御網(wǎng)絡(luò)攻擊能力。其發(fā)展經(jīng)歷三個(gè)階段:區(qū)塊鏈1.0,起源于比特幣,是以實(shí)現(xiàn)虛擬貨幣支付和管理為主要應(yīng)用的區(qū)塊鏈;區(qū)塊鏈2.0,以太坊的典型應(yīng)用,構(gòu)建了一個(gè)可編程的智能合約開發(fā)平臺(tái),其應(yīng)用領(lǐng)域從數(shù)字貨幣拓展到了其他金融領(lǐng)域;區(qū)塊鏈3.0,其應(yīng)用完全超出了金融經(jīng)濟(jì)領(lǐng)域,成為了一種通用的解決方案[6]。區(qū)塊鏈技術(shù)從1.0到3.0的主要技術(shù)特征和應(yīng)用領(lǐng)域描述見表1。

表1 區(qū)塊鏈技術(shù)主要技術(shù)特征和應(yīng)用領(lǐng)域

2.1 區(qū)塊鏈3.0體系架構(gòu)

在區(qū)塊鏈3.0的架構(gòu)中,超越了金融的應(yīng)用范疇,而將區(qū)塊鏈技術(shù)作為一種通用的解決方案,應(yīng)用到各行各業(yè),因此架構(gòu)中需要具備企業(yè)級(jí)屬性,如身份認(rèn)證、許可授權(quán)、加密傳輸?shù)取^(qū)塊鏈體系架構(gòu)如圖1所示。

圖1 區(qū)塊鏈3.0體系架構(gòu)圖

區(qū)塊鏈體系架構(gòu)包含以下組成部分[7]:

(1)核心數(shù)據(jù)層:區(qū)塊結(jié)構(gòu)決定了區(qū)塊鏈數(shù)據(jù)存儲(chǔ)形式,區(qū)塊結(jié)構(gòu)由區(qū)塊頭、交易數(shù)據(jù)和區(qū)塊數(shù)據(jù)三個(gè)部分組成,不同區(qū)塊的區(qū)塊頭通過哈希指針串聯(lián)起來,形成整個(gè)區(qū)塊鏈底層數(shù)據(jù)的鏈表,Mekel樹描述了區(qū)塊鏈中節(jié)點(diǎn)的層次結(jié)構(gòu),合約容器為智能合約的開發(fā)提供了專用存儲(chǔ)空間;

(2)網(wǎng)關(guān)控制層:區(qū)塊鏈的網(wǎng)絡(luò)結(jié)構(gòu)是典型的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò),區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點(diǎn)參與數(shù)據(jù)的維護(hù),當(dāng)某個(gè)節(jié)點(diǎn)請(qǐng)求對(duì)區(qū)塊數(shù)據(jù)進(jìn)行操作時(shí),其他節(jié)點(diǎn)參與身份認(rèn)證和數(shù)據(jù)驗(yàn)證。通過認(rèn)證的節(jié)點(diǎn)和驗(yàn)證后的數(shù)據(jù)才會(huì)被添加到賬本中;

(3)共識(shí)機(jī)制層:區(qū)塊鏈網(wǎng)絡(luò)利用工作量證明(PoW)和權(quán)益證明(PoS)來阻止網(wǎng)絡(luò)攻擊,以保證數(shù)據(jù)的合法和安全,防止信息被篡改。在區(qū)塊鏈3.0中,為了匹配各行業(yè)的使用需求,共識(shí)機(jī)制不是固定的,用戶可以根據(jù)需要去選用配置;

(4)擴(kuò)展接口層:區(qū)塊鏈3.0提供了開發(fā)平臺(tái)和應(yīng)用程序編程接口(API),包含了智能合約開發(fā)語言、圖形化開發(fā)工具、文件操作系統(tǒng)、數(shù)據(jù)存儲(chǔ)查詢和工作流引擎等技術(shù)。

2.2 區(qū)塊鏈的加密技術(shù)

非對(duì)稱加密是區(qū)塊鏈交易過程的一個(gè)重要組成部分。傳統(tǒng)的對(duì)稱加密算法中,加密和解密使用同一個(gè)密鑰。而非對(duì)稱加密算法,加密和解密使用不同的密鑰,加密時(shí)使用的密鑰是公開的,稱為公鑰;解密時(shí)使用的密鑰是節(jié)點(diǎn)私有的,稱為私鑰。非對(duì)稱加密保證了在節(jié)點(diǎn)間傳遞的信息始終是加密的,解密所有的私鑰掌握在信息所有節(jié)點(diǎn)中,參與驗(yàn)證的其他節(jié)點(diǎn)無法對(duì)其解密[8]。公鑰和私鑰總是成對(duì)使用的,通過私鑰可以計(jì)算出對(duì)應(yīng)的公鑰,而通過公鑰不能計(jì)算出對(duì)應(yīng)的私鑰。區(qū)塊鏈中的加密解密過程如圖2所示。

圖2 非對(duì)稱加密過程圖

2.3 區(qū)塊鏈3.0的共識(shí)機(jī)制和智能合約

去中心化是區(qū)塊鏈技術(shù)的最重要特點(diǎn),它采用了P2P的網(wǎng)絡(luò)結(jié)構(gòu)。參與區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點(diǎn)既是服務(wù)器又是客戶端,當(dāng)節(jié)點(diǎn)產(chǎn)生交易時(shí),其他節(jié)點(diǎn)需要對(duì)交易進(jìn)行驗(yàn)證,達(dá)成共識(shí)后交易信息才會(huì)寫入?yún)^(qū)塊鏈賬本。為了達(dá)成共識(shí),產(chǎn)生交易的節(jié)點(diǎn)需要對(duì)自己所做的工作進(jìn)行證明[9],常見的共識(shí)機(jī)制有工作量證明(PoW)、股權(quán)證明機(jī)制(PoS)、授權(quán)股權(quán)證明機(jī)制(DPoS)、拜占庭容錯(cuò)機(jī)制(BFT)和實(shí)用拜占庭容錯(cuò)機(jī)制(PBFT)等。不同的共識(shí)機(jī)制有自己的特點(diǎn)。在區(qū)塊鏈3.0應(yīng)用中,共識(shí)機(jī)制不再被封裝在底層不可更改,用戶可以根據(jù)實(shí)際需要來選擇使用共識(shí)機(jī)制或共識(shí)機(jī)制的組合。智能合約是運(yùn)行在區(qū)塊鏈中的條件約定,當(dāng)數(shù)據(jù)環(huán)境達(dá)到合約規(guī)定的條件后,合約會(huì)自動(dòng)執(zhí)行,無須人工觸發(fā)[10]。在區(qū)塊鏈3.0的技術(shù)架構(gòu)中,完全支持智能合約的定制開發(fā),編寫好的智能合約可以方便地部署在區(qū)塊鏈網(wǎng)絡(luò)中。

2.4 區(qū)塊數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)

區(qū)塊(Block)和鏈表是區(qū)塊鏈的核心數(shù)據(jù)結(jié)構(gòu),其中區(qū)塊數(shù)據(jù)包含區(qū)塊頭和區(qū)塊體兩個(gè)部分,區(qū)塊頭的作用是和其他區(qū)塊形成一個(gè)鏈表,區(qū)塊體則保存認(rèn)證系統(tǒng)所提供的身份數(shù)據(jù)。區(qū)塊鏈的數(shù)據(jù)庫體系是由一系列節(jié)點(diǎn)組成的二叉樹,葉子節(jié)點(diǎn)的Hash值合在一起成為了父節(jié)點(diǎn)的Hash值,一直到根節(jié)點(diǎn)。區(qū)塊數(shù)據(jù)存儲(chǔ)在levelDB中,數(shù)據(jù)以鍵值對(duì)進(jìn)行存儲(chǔ)。在鏈?zhǔn)浇Y(jié)構(gòu)中有兩個(gè)鏈表,一個(gè)是由所有的區(qū)塊數(shù)據(jù)形成的主鏈,另一個(gè)則是所有區(qū)塊頭數(shù)據(jù)形成的區(qū)塊頭鏈表。一般情況下,將區(qū)塊頭鏈表看成區(qū)塊鏈的一個(gè)部分。交易是區(qū)塊體的重要數(shù)據(jù)結(jié)構(gòu),交易被節(jié)點(diǎn)加密簽名形成一段指令,然后提交給區(qū)塊鏈。

區(qū)塊頭的儲(chǔ)存結(jié)構(gòu)為:

type Header struct {

ParentHash common.Hash

UncleHash common.Hash

Coinbase common.Address

Root common.Hash

TxHash common.Hash

ReceiptHash common.Hash

....

}

區(qū)塊體中包含了用于形成鏈表結(jié)構(gòu)的區(qū)塊頭信息,存儲(chǔ)結(jié)構(gòu)如下:

type Block struct {

header *Header//區(qū)塊頭

uncles []*Header//前置區(qū)塊頭數(shù)組

transactions Transactions//交易名稱

hash atomic.Value//自動(dòng)產(chǎn)生hash值

size atomic.Value//區(qū)塊數(shù)據(jù)大小

td *big.Int//封裝到該區(qū)塊的儲(chǔ)存層次

ReceivedAt time.Time//區(qū)塊數(shù)據(jù)被認(rèn)可的時(shí)間

ReceivedFrom interface{}//共識(shí)接口

}

3 基于區(qū)塊鏈3.0的認(rèn)證系統(tǒng)設(shè)計(jì)

3.1 認(rèn)證系統(tǒng)需求分析

3.1.1 傳統(tǒng)認(rèn)證系統(tǒng)功能分析

傳統(tǒng)的身份認(rèn)證系統(tǒng)采用中心化的結(jié)構(gòu),用戶的身份信息保存在底層數(shù)據(jù)庫中,一個(gè)完整的認(rèn)證系統(tǒng)需要包含身份認(rèn)證、身份注冊(cè)、身份更新和運(yùn)行維護(hù)四大基本功能[11]。身份認(rèn)證是將用戶提交的信息和保存在系統(tǒng)中的身份信息進(jìn)行比對(duì),判斷用戶是否合法;身份注冊(cè)允許用戶根據(jù)需要新建一個(gè)身份信息,由管理員審核后寫入數(shù)據(jù)庫;身份更新功能允許用戶對(duì)身份信息的非關(guān)鍵數(shù)據(jù)進(jìn)行修改,管理員審核后對(duì)數(shù)據(jù)庫進(jìn)行更新;運(yùn)行維護(hù)是認(rèn)證系統(tǒng)對(duì)功能模塊進(jìn)行運(yùn)行監(jiān)控、事件采集和數(shù)據(jù)維護(hù),提高系統(tǒng)的安全性和運(yùn)行效率。認(rèn)證系統(tǒng)功能示意如圖3所示。

圖3 認(rèn)證系統(tǒng)功能示意圖

3.1.2 基于區(qū)塊鏈技術(shù)的認(rèn)證系統(tǒng)可行性分析

根據(jù)傳統(tǒng)身份認(rèn)證系統(tǒng)的功能需求,結(jié)合區(qū)塊鏈技術(shù)的工作原理和技術(shù)架構(gòu),分析設(shè)計(jì)認(rèn)證系統(tǒng)功能需求在區(qū)塊鏈3.0技術(shù)下的實(shí)現(xiàn)方式,具體的功能的實(shí)現(xiàn)方式見表2。

為了實(shí)現(xiàn)去中心化,身份認(rèn)證系統(tǒng)需要遵循區(qū)塊鏈的運(yùn)行原理和操作規(guī)范,區(qū)塊鏈3.0技術(shù)架構(gòu)中的共識(shí)算法和智能合約在系統(tǒng)運(yùn)行中起到重要作用,分布式賬本的操作需要在達(dá)成共識(shí)的情況下進(jìn)行。區(qū)塊鏈3.0最重要的特征就是可編程智能合約和可設(shè)定共識(shí)機(jī)制,智能合約主要控制身份信息查詢和系統(tǒng)維護(hù),身份注冊(cè)和更新需要全網(wǎng)節(jié)點(diǎn)共同參與驗(yàn)證,通過共識(shí)算法判斷交易的合法性。在系統(tǒng)功能設(shè)計(jì)中,考慮到認(rèn)證操作的頻繁,賬本的查詢可以由智能合約直接驅(qū)動(dòng),無須其他節(jié)點(diǎn)達(dá)成共識(shí),提高了身份信息的查詢效率?;趨^(qū)塊鏈3.0的認(rèn)證系統(tǒng)功能如圖4所示。

表2 區(qū)塊鏈技術(shù)的認(rèn)證系統(tǒng)實(shí)現(xiàn)方式

3.2 認(rèn)證系統(tǒng)技術(shù)架構(gòu)

認(rèn)證系統(tǒng)建立在區(qū)塊鏈網(wǎng)絡(luò)之上,遵循區(qū)塊鏈3.0技術(shù)規(guī)范和操作規(guī)則,建立在區(qū)塊鏈技術(shù)架構(gòu)上。最底層為區(qū)塊鏈技術(shù)環(huán)境,主要是支持區(qū)塊鏈工作的網(wǎng)絡(luò)拓?fù)?、密碼學(xué)、節(jié)點(diǎn)設(shè)置、計(jì)算方法和數(shù)據(jù)結(jié)構(gòu);第二層為區(qū)塊鏈核心層,是區(qū)塊鏈3.0技術(shù)應(yīng)用的基礎(chǔ),包括區(qū)塊鏈核心支撐、共識(shí)機(jī)制、區(qū)塊數(shù)據(jù)操作規(guī)范、網(wǎng)絡(luò)操作規(guī)范,區(qū)塊鏈3.0采用的是可設(shè)置共識(shí),共識(shí)算法作為一個(gè)獨(dú)立模塊可選擇、可組合;第三層是區(qū)塊鏈3.0智能合約運(yùn)行和網(wǎng)絡(luò)操作調(diào)用的支持環(huán)境,認(rèn)證系統(tǒng)的智能合約運(yùn)行在虛擬機(jī)之上,認(rèn)證系統(tǒng)的各種操作通過過程調(diào)用協(xié)議和區(qū)塊鏈網(wǎng)絡(luò)之間進(jìn)行通信;第四層是智能合約層,該層是整個(gè)技術(shù)架構(gòu)的關(guān)鍵,身份認(rèn)證系統(tǒng)的邏輯操作通過智能合約和區(qū)塊鏈進(jìn)行交互,區(qū)塊鏈3.0允許用戶通過腳本語言編寫智能合約;最上層就是最終實(shí)現(xiàn)的區(qū)塊鏈3.0應(yīng)用身份認(rèn)證系統(tǒng),它包含身份認(rèn)證、身份注冊(cè)、身份更新和運(yùn)行維護(hù)四個(gè)模塊。身份認(rèn)證系統(tǒng)技術(shù)架構(gòu)如圖5所示。

圖5 認(rèn)證系統(tǒng)技術(shù)架構(gòu)圖

3.3 認(rèn)證系統(tǒng)業(yè)務(wù)邏輯設(shè)計(jì)

對(duì)認(rèn)證系統(tǒng)包含的四個(gè)功能模塊之間和自身業(yè)務(wù)處理邏輯進(jìn)行設(shè)計(jì),其中運(yùn)行維護(hù)功能不需要和用戶進(jìn)行交互,其他功能均需要根據(jù)用戶錄入信息和用戶的選擇進(jìn)行業(yè)務(wù)邏輯的流轉(zhuǎn)。具體模塊的業(yè)務(wù)邏輯流程如圖6所示。

圖6 認(rèn)證系統(tǒng)業(yè)務(wù)邏輯示意圖

3.3.1 運(yùn)行維護(hù)模塊

為了提高區(qū)塊鏈網(wǎng)絡(luò)的執(zhí)行效率和數(shù)據(jù)處理能力,在智能合約中設(shè)定啟動(dòng)網(wǎng)絡(luò)緩存清理、區(qū)塊鏈賬本優(yōu)化和節(jié)點(diǎn)狀態(tài)重置等維護(hù)函數(shù)觸發(fā)的條件,當(dāng)認(rèn)證系統(tǒng)在節(jié)點(diǎn)計(jì)算機(jī)啟動(dòng)后自動(dòng)執(zhí)行智能合約,對(duì)優(yōu)化條件進(jìn)行檢查,滿足條件則執(zhí)行維護(hù)操作,之后轉(zhuǎn)入認(rèn)證界面,不滿足條件則直接轉(zhuǎn)入認(rèn)證界面。

3.3.2 身份認(rèn)證模塊

身份認(rèn)證模塊是認(rèn)證系統(tǒng)的核心功能模塊,主要工作原理是根據(jù)用戶的認(rèn)證請(qǐng)求,將保存在區(qū)塊鏈賬本中的身份信息和用戶提供的信息進(jìn)行比對(duì),結(jié)果一致則返回成功認(rèn)證信息,結(jié)果不一致則返回認(rèn)證界面或轉(zhuǎn)入注冊(cè)界面。身份認(rèn)證功能僅執(zhí)行查詢操作,不對(duì)區(qū)塊鏈賬本進(jìn)行寫入和更新,且查詢僅限于區(qū)塊信息擁有節(jié)點(diǎn)自身數(shù)據(jù),不查詢其他節(jié)點(diǎn)的區(qū)塊信息,為了提高查詢效率,降低節(jié)點(diǎn)計(jì)算機(jī)資源消耗,利用區(qū)塊鏈3.0技術(shù)架構(gòu)中的可設(shè)置共識(shí)機(jī)制,身份認(rèn)證功能模塊直接通過智能合約查詢區(qū)塊鏈賬本,無須其他節(jié)點(diǎn)參與驗(yàn)證。

3.3.3 身份注冊(cè)模塊

參與區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點(diǎn)計(jì)算機(jī)注冊(cè)身份,產(chǎn)生一個(gè)新增區(qū)塊數(shù)據(jù)交易,將身份信息寫入?yún)^(qū)塊鏈共享賬本,身份信息的擁有者就是產(chǎn)生交易的節(jié)點(diǎn)。用戶進(jìn)入注冊(cè)界面,輸入身份信息,由頁面內(nèi)置script函數(shù)根據(jù)設(shè)定的規(guī)則判斷信息的合法性,如果信息不合法,提示用戶修改,信息合法,則產(chǎn)生一個(gè)交易,并調(diào)用智能合約寫入函數(shù),向全網(wǎng)發(fā)送交易廣播,區(qū)塊鏈網(wǎng)絡(luò)的其他節(jié)點(diǎn)參與交易的驗(yàn)證,調(diào)用共識(shí)算法對(duì)交易進(jìn)行計(jì)算,全網(wǎng)達(dá)成共識(shí)后將區(qū)塊信息寫入?yún)^(qū)塊鏈共享賬本。

3.3.4 身份更新模塊

身份更新功能和身份注冊(cè)功能類似,都需要對(duì)區(qū)塊數(shù)據(jù)進(jìn)行修改。身份更新需要在身份認(rèn)證完成后由用戶選擇進(jìn)入身份信息修改頁面,由智能合約調(diào)用相應(yīng)函數(shù)對(duì)賬本中保存的身份信息進(jìn)行查詢,并將可修改的信息顯示在修改頁面的表單控件上,用戶輸入信息合法的情況下,產(chǎn)生一個(gè)區(qū)塊數(shù)據(jù)修改交易,調(diào)用智能合約,全網(wǎng)節(jié)點(diǎn)根據(jù)共識(shí)算法共同驗(yàn)證并認(rèn)可交易,最終對(duì)區(qū)塊鏈共享賬本進(jìn)行更新。

4 認(rèn)證系統(tǒng)的實(shí)現(xiàn)

4.1 P2P網(wǎng)絡(luò)的構(gòu)建

區(qū)塊鏈的網(wǎng)絡(luò)結(jié)構(gòu)是典型的P2P對(duì)等網(wǎng)絡(luò),構(gòu)建身份認(rèn)證平臺(tái)的網(wǎng)絡(luò)環(huán)境,需要定義P2P網(wǎng)絡(luò)的通信方式,將待接入的節(jié)點(diǎn)壓入已連接的節(jié)點(diǎn)堆棧,實(shí)現(xiàn)節(jié)點(diǎn)的初始化連接。建立連接后,對(duì)節(jié)點(diǎn)的錯(cuò)誤狀態(tài)進(jìn)行跟蹤,利用節(jié)點(diǎn)發(fā)出的廣播報(bào)文,同步實(shí)現(xiàn)錯(cuò)誤信息的處理。最后同步區(qū)塊鏈信息,如果鏈路狀態(tài)信息有更新,就向其他節(jié)點(diǎn)廣播交易信息,目標(biāo)節(jié)點(diǎn)接收到報(bào)文后產(chǎn)生交易驗(yàn)證數(shù)據(jù)。信息平臺(tái)網(wǎng)絡(luò)構(gòu)建命令行如下:

var initP2PServer = () ; //定義P2P通信模式

var initConnection = (ws); //初始化連接

sockets.push(ws); //壓入已連接的節(jié)點(diǎn)堆棧

initMessageHandler(ws);

initErrorTracer(ws);//錯(cuò)誤狀態(tài)跟蹤

write(ws,responseLatestMsg());//廣播

var initMessageHandler = (ws); //同步信息處理

var initErrorHandler = (ws); //錯(cuò)誤信息處理

var handleNum = (message);

var connectToPeers = (newPeers) ; //連接新節(jié)點(diǎn)

4.2 智能合約開發(fā)

智能合約是基于區(qū)塊鏈技術(shù)的應(yīng)用開發(fā)的核心,它存儲(chǔ)在區(qū)塊鏈網(wǎng)絡(luò)上的一個(gè)特殊地址(合約容器)上,區(qū)塊鏈3.0技術(shù)提供了智能合約開發(fā)、調(diào)試和運(yùn)行的環(huán)境,智能合約是去中心化應(yīng)用業(yè)務(wù)邏輯的載體,是身份認(rèn)證系統(tǒng)和區(qū)塊鏈底層交互的紐帶。智能合約的開發(fā)和普通可執(zhí)行程序開發(fā)有所區(qū)別,不需要考慮如何在操作系統(tǒng)和特定網(wǎng)絡(luò)環(huán)境中獨(dú)立運(yùn)行,但要遵循區(qū)塊鏈數(shù)據(jù)操作規(guī)范和虛擬機(jī)運(yùn)行條件約束。一個(gè)完整的合約由一組狀態(tài)變量和合約函數(shù)組成。

在編寫智能合約時(shí),首先定義存儲(chǔ)用戶身份信息的結(jié)構(gòu)體數(shù)據(jù)類型,定義結(jié)構(gòu)體的代碼如下:

struct UserIfo{//定義身份信息結(jié)構(gòu)體

string UserName;//用戶名

int32 UserPassword;//用戶密碼

string UserRole;//用戶角色

bool Registered;//注冊(cè)狀態(tài)

bool Enable;//可用狀態(tài)

bool Logined;//登錄狀態(tài)

...

}

身份認(rèn)證系統(tǒng)智能合約主要功能實(shí)現(xiàn)邏輯偽代碼如下:

contract identification {

uint numRegistrants;//已注冊(cè)數(shù)量

mapping(address=>user) users;//用戶身份信息的地址映射

string tag;//執(zhí)行結(jié)果

function set_numRegistrants(uint i) {//設(shè)定注冊(cè)數(shù)

numRegistrants = i;

}

function get_numRegistrants() constant returns (uint v) {//查詢注冊(cè)數(shù)

return numRegistrants;

}

function register(UserIfo user){//身份注冊(cè)操作函數(shù)

if(user.Registered){

tag=fail;

}

else{

Register( user);//調(diào)用注冊(cè)事件(網(wǎng)絡(luò)廣播、共識(shí)計(jì)算、寫入賬本)

}

function login(user user){//身份認(rèn)證操作函數(shù)

if(user.Logined){

tag=fail;

}

else{

Login( user);//調(diào)用認(rèn)證事件(查詢身份信息數(shù)據(jù))

}

function update(UserIfo newUser){//身份更新操作函數(shù)

....

}

.....

}

4.3 部署和運(yùn)行

區(qū)塊鏈3.0應(yīng)用開發(fā)完成后,需要使用Geth工具來啟動(dòng)和部署。智能合約虛擬機(jī)是智能合約的運(yùn)行環(huán)境。智能合約需要編譯產(chǎn)生可以運(yùn)行在虛擬機(jī)上的二進(jìn)制代碼,獲得合約區(qū)塊鏈地址和合約接口的二進(jìn)制表示。運(yùn)行在虛擬機(jī)內(nèi)部的代碼被封裝起來,不能和操作系統(tǒng)、網(wǎng)絡(luò)環(huán)境和文件系統(tǒng)有任何的信息交換,其內(nèi)部定義的變量和函數(shù)也是嚴(yán)格的設(shè)定調(diào)用條件。Geth在8545端口提供了過程調(diào)用協(xié)議接口RPC API,協(xié)議中數(shù)據(jù)傳輸采用JSON格式。

本文設(shè)計(jì)的認(rèn)證系統(tǒng)分為區(qū)塊鏈數(shù)據(jù)操作部分和交互界面部分,采用了去中心化的結(jié)構(gòu),沒有中心服務(wù)器,交互界面客戶端通過分發(fā)安裝在每一個(gè)區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)計(jì)算機(jī)上,區(qū)塊鏈操作部分是認(rèn)證系統(tǒng)的核心,其運(yùn)行原理完全遵循區(qū)塊鏈操作機(jī)制。當(dāng)一個(gè)交易產(chǎn)生時(shí),通過過程調(diào)用協(xié)議啟動(dòng)智能合約,并向區(qū)塊鏈網(wǎng)絡(luò)發(fā)送廣播,區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)接收到廣播中的交易信息,從交易信息中提取智能合約的參數(shù),通過本地虛擬機(jī)運(yùn)行智能合約進(jìn)行運(yùn)算,根據(jù)共識(shí)算法互相驗(yàn)證數(shù)據(jù),達(dá)成共識(shí)的數(shù)據(jù)作為區(qū)塊數(shù)據(jù)寫入賬本。身份認(rèn)證系統(tǒng)的運(yùn)行原理如圖7所示。

圖7 身份認(rèn)證系統(tǒng)運(yùn)行原理圖

5 結(jié) 語

傳統(tǒng)身份認(rèn)證系統(tǒng)采用中心化的結(jié)構(gòu),中心服務(wù)器作為身份信息的所有者,負(fù)責(zé)身份信息的存儲(chǔ)和管理,用戶僅有對(duì)身份信息的部分操作權(quán)限。目前,區(qū)塊鏈技術(shù)的應(yīng)用完全超出了金融領(lǐng)域,區(qū)塊鏈3.0提供的可設(shè)置共識(shí)和可編程智能合約使區(qū)塊鏈在其他領(lǐng)域應(yīng)用成為可能。根據(jù)區(qū)塊鏈技術(shù)的去中心化思想,對(duì)身份認(rèn)證系統(tǒng)的系統(tǒng)架構(gòu)進(jìn)行重新設(shè)計(jì),讓區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)共同維護(hù)和管理身份信息,區(qū)塊鏈底層的樹型數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)了操作信息的可追溯,保證了身份信息的安全可靠。P2P的網(wǎng)絡(luò)結(jié)構(gòu)讓參與節(jié)點(diǎn)在網(wǎng)絡(luò)中擁有對(duì)等的地位,區(qū)塊鏈網(wǎng)絡(luò)中信息交換和數(shù)據(jù)驗(yàn)證建立在平等公平的基礎(chǔ)上。區(qū)塊鏈提供的共識(shí)算法,讓參與節(jié)點(diǎn)共同驗(yàn)證交易信息,可以有效地抵御網(wǎng)絡(luò)攻擊造成的信息惡意篡改。智能合約定義了對(duì)身份信息進(jìn)行操作的函數(shù),通過過程調(diào)用協(xié)議實(shí)現(xiàn)了交互界面和底層數(shù)據(jù)的實(shí)時(shí)交換?;趨^(qū)塊鏈3.0架構(gòu)的身份認(rèn)證系統(tǒng)解決了中心化認(rèn)證服務(wù)的產(chǎn)生的各種問題,但在系統(tǒng)的易用性、可移植性和運(yùn)行效率上還需要攻關(guān)突破,可以采用封裝技術(shù)來將智能合約、合約虛擬機(jī)和客戶端統(tǒng)一分發(fā)安裝在節(jié)點(diǎn)計(jì)算機(jī)上,通過改進(jìn)的共識(shí)算法來提高運(yùn)行效率。

猜你喜歡
合約共識(shí)身份
共識(shí) 共進(jìn) 共情 共學(xué):讓“溝通之花”綻放
論思想共識(shí)凝聚的文化向度
商量出共識(shí)
跟蹤導(dǎo)練(三)(5)
他們的另一個(gè)身份,你知道嗎
互換身份
別讓“PX共識(shí)”在爆炸中瓦解
放松一下 隱瞞身份
今日教育(2014年1期)2014-04-16 08:55:32
合約必守,誰能例外!——對(duì)“情勢(shì)變更”制度不可寄于過高期望
惠安县| 岳普湖县| 文登市| 东兴市| 宜良县| 稻城县| 雷州市| 普陀区| 高台县| 石首市| 汪清县| 湄潭县| 曲阳县| 江山市| 西昌市| 高碑店市| 永顺县| 浏阳市| 西乡县| 杭锦后旗| 仪陇县| 尖扎县| 尼木县| 叶城县| 广平县| 连城县| 洛阳市| 抚州市| 苏尼特左旗| 穆棱市| 马公市| 惠来县| 阿城市| 新宁县| 中阳县| 刚察县| 芜湖市| 岫岩| 抚松县| 砀山县| 金寨县|