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

?

一種去中心化的身份認(rèn)證模型的設(shè)計(jì)與實(shí)現(xiàn)

2020-01-15 00:54徐濟(jì)成
關(guān)鍵詞:以太賬本合約

李 嶒 ,徐濟(jì)成,

(1.安徽中澳科技職業(yè)學(xué)院 信息工程與藝術(shù)設(shè)計(jì)系,合肥 230041;2.安徽農(nóng)業(yè)大學(xué) 信息與計(jì)算機(jī)學(xué)院,合肥 230036)

傳統(tǒng)的身份認(rèn)證系統(tǒng)由中心服務(wù)器存儲(chǔ)和管理身份信息,認(rèn)證服務(wù)器軟硬件故障和遭受網(wǎng)絡(luò)攻擊的事件屢見(jiàn)不鮮[1]。為了徹底解決身份認(rèn)證系統(tǒng)的安全威脅,迫切需要找到一種去中心化、數(shù)據(jù)安全性高、能有效抵抗網(wǎng)絡(luò)攻擊、能滿足認(rèn)證系統(tǒng)運(yùn)行需求的技術(shù)解決方案。以太坊是區(qū)塊鏈技術(shù)的典型應(yīng)用,它作為比特幣應(yīng)用的升級(jí)版,應(yīng)用場(chǎng)景不再局限在數(shù)字貨幣,支持智能合約開發(fā)和應(yīng)用程序接口,適合開發(fā)各種去中心化的應(yīng)用平臺(tái)。以太坊體系架構(gòu)中區(qū)塊數(shù)據(jù)的鏈?zhǔn)浇Y(jié)構(gòu)保證了所有交易的可追溯,對(duì)等網(wǎng)狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)能實(shí)現(xiàn)應(yīng)用系統(tǒng)的去中心化,數(shù)據(jù)寫入共識(shí)機(jī)制可以有效抵御網(wǎng)絡(luò)攻擊。本文提出了在以太坊技術(shù)架構(gòu)上設(shè)計(jì)身份認(rèn)證系統(tǒng)模型的思路,通過(guò)任務(wù)集合和關(guān)系向量來(lái)形式化的描述認(rèn)證系統(tǒng)模型。開發(fā)本地應(yīng)用程序,編制以太坊智能合約,搭建以太坊網(wǎng)絡(luò)環(huán)境,最終實(shí)現(xiàn)身份認(rèn)證模型部署和運(yùn)行。此模型的成功實(shí)施可以徹底解決傳統(tǒng)中心化認(rèn)證系統(tǒng)的安全缺陷。

1 身份認(rèn)證系統(tǒng)功能分析

1.1 認(rèn)證系統(tǒng)的主要功能

認(rèn)證系統(tǒng)的主要作用是為應(yīng)用系統(tǒng)提供用戶身份認(rèn)證服務(wù),一個(gè)完整的認(rèn)證系統(tǒng)分為認(rèn)證授權(quán)子系統(tǒng)、身份管理子系統(tǒng)和應(yīng)用管理子系統(tǒng)。認(rèn)證授權(quán)子系統(tǒng)是認(rèn)證系統(tǒng)的核心,它通過(guò)將保存在認(rèn)證系統(tǒng)中的用戶信息和應(yīng)用系統(tǒng)進(jìn)行關(guān)聯(lián),對(duì)合法用戶進(jìn)行授權(quán);身份管理子系統(tǒng)允許用戶注冊(cè)賬戶,對(duì)用戶信息進(jìn)行維護(hù)、更新和刪除;應(yīng)用管理子系統(tǒng)對(duì)應(yīng)用系統(tǒng)的權(quán)限列表和授權(quán)策略進(jìn)行管理,同時(shí)可以記錄、監(jiān)控和審計(jì)認(rèn)證系統(tǒng)的數(shù)據(jù)操作行為。認(rèn)證系統(tǒng)主要功能如圖1所示。

1.2 傳統(tǒng)認(rèn)證的實(shí)現(xiàn)方式

根據(jù)第三方應(yīng)用系統(tǒng)在認(rèn)證系統(tǒng)保存的認(rèn)證策略,認(rèn)證系統(tǒng)負(fù)責(zé)對(duì)用戶的認(rèn)證請(qǐng)求進(jìn)行響應(yīng)處理,向合法用戶發(fā)放令牌。令牌即用戶訪問(wèn)操作應(yīng)用系統(tǒng)的通行證,它保存了用戶信息、權(quán)限信息和數(shù)字簽名。取得令牌的用戶可以對(duì)第三方應(yīng)用系統(tǒng)進(jìn)行訪問(wèn)和操作,未取得令牌的用戶將被拒絕訪問(wèn)。認(rèn)證的實(shí)現(xiàn)方式如圖2所示。

1.3 傳統(tǒng)認(rèn)證系統(tǒng)存在的問(wèn)題

傳統(tǒng)的身份認(rèn)證系統(tǒng)采用中心化的技術(shù)架構(gòu),用戶的身份信息和應(yīng)用系統(tǒng)的授權(quán)信息集中保存在中心服務(wù)器中,用戶信息的所有權(quán)屬于身份認(rèn)證系統(tǒng)中心服務(wù)器,用戶僅能在認(rèn)證系統(tǒng)的授權(quán)下使用身份信息。在中心化的環(huán)境下,用戶合法性的認(rèn)證和應(yīng)用程序的訪問(wèn)授權(quán)過(guò)分依賴中心服務(wù)器,存在一定的安全隱患。

1)在中心化技術(shù)框架下,服務(wù)器出現(xiàn)故障會(huì)影響整個(gè)系統(tǒng)的正常運(yùn)行,導(dǎo)致用戶不能使用和操作身份信息,應(yīng)用程序無(wú)法正確識(shí)別合法用戶。

2)第三方應(yīng)用程序?yàn)榱藬U(kuò)大用戶范圍需要在多個(gè)認(rèn)證系統(tǒng)中注冊(cè)授權(quán)信息,一旦其中一個(gè)認(rèn)證系統(tǒng)信息泄露,第三方應(yīng)用的安全性將受到威脅,導(dǎo)致合法用戶遭受損失。

3)認(rèn)證系統(tǒng)中管理員具有高于普通用戶的信息操作權(quán)限[2],可以不加約束的查詢、更新和刪除用戶信息,普通用戶身份信息的安全性得不到保證。

為了能使用戶獲得身份信息的所有權(quán),徹底解決因中心化結(jié)構(gòu)導(dǎo)致的安全隱患,需要尋找一個(gè)去中心化的解決方案,將身份信息分布地存儲(chǔ)在客戶機(jī)中,并以安全可信的方式傳遞和管理身份信息。

2 以太坊技術(shù)

2.1 區(qū)塊鏈技術(shù)特點(diǎn)

區(qū)塊鏈技術(shù)是“比特幣”應(yīng)用的底層數(shù)據(jù)處理技術(shù),它通過(guò)塊狀數(shù)據(jù)的鏈?zhǔn)疥P(guān)聯(lián)方式將數(shù)據(jù)交易的過(guò)程信息完整地存儲(chǔ)在分布式層次數(shù)據(jù)庫(kù)中,原始數(shù)據(jù)和數(shù)據(jù)的操作過(guò)程均被記錄在由節(jié)點(diǎn)共同維護(hù)的“賬本”中,保證了數(shù)據(jù)的真實(shí)性和可追溯性。

1)點(diǎn)對(duì)點(diǎn)的底層網(wǎng)絡(luò)結(jié)構(gòu)

區(qū)塊鏈網(wǎng)絡(luò)拓?fù)涫屈c(diǎn)對(duì)點(diǎn)的網(wǎng)狀結(jié)構(gòu),網(wǎng)狀結(jié)構(gòu)的特點(diǎn)是節(jié)點(diǎn)間可以不借助中心節(jié)點(diǎn)直接進(jìn)行通信,其中一個(gè)節(jié)點(diǎn)或線路的故障不影響整個(gè)網(wǎng)絡(luò)的正常運(yùn)行。

2)去中心化的數(shù)據(jù)存儲(chǔ)和操作

在區(qū)塊鏈技術(shù)框架下,數(shù)據(jù)以區(qū)塊的結(jié)構(gòu)由鏈串鏈在一起,形成了一個(gè)樹形的共享層次數(shù)據(jù)庫(kù),共享數(shù)據(jù)庫(kù)分布的存儲(chǔ)在節(jié)點(diǎn)中,由全體節(jié)點(diǎn)共同維護(hù)。某個(gè)節(jié)點(diǎn)請(qǐng)求對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,需要其他節(jié)點(diǎn)根據(jù)共識(shí)算法共同驗(yàn)證,保證了數(shù)據(jù)的安全。

3)操作過(guò)程可追溯

在區(qū)塊鏈技術(shù)框架下,所有的對(duì)共享數(shù)據(jù)庫(kù)的操作被完整的記錄下來(lái),所有的交易不允許被刪除。嚴(yán)格意義上講,區(qū)塊鏈網(wǎng)絡(luò)中只有數(shù)據(jù)的寫入,沒(méi)有數(shù)據(jù)的更新和刪除,當(dāng)前數(shù)據(jù)的狀態(tài)是通過(guò)交易信息寫入來(lái)實(shí)現(xiàn)的。

4)公平可信的記賬權(quán)獲取機(jī)制

在區(qū)塊鏈應(yīng)用系統(tǒng)中,所有的節(jié)點(diǎn)用戶地位平等,沒(méi)有管理員用戶和普通用戶之分。節(jié)點(diǎn)用戶的記賬權(quán)由全網(wǎng)節(jié)點(diǎn)共同計(jì)算驗(yàn)證,這種驗(yàn)證過(guò)程稱為共識(shí),共識(shí)算法的公平性決定了區(qū)塊鏈網(wǎng)絡(luò)的安全性和可信度。

2.2 區(qū)塊鏈數(shù)據(jù)操作方式

當(dāng)節(jié)點(diǎn)需要對(duì)區(qū)塊鏈數(shù)據(jù)進(jìn)行操作時(shí),需要生成一個(gè)交易,同時(shí)向全網(wǎng)廣播交易請(qǐng)求,其他節(jié)點(diǎn)通過(guò)共識(shí)算法共同計(jì)算驗(yàn)證,只有交易信息通過(guò)了驗(yàn)證,節(jié)點(diǎn)獲取當(dāng)前交易的記賬權(quán),才能將交易信息寫入共享賬本,未通過(guò)共識(shí)的交易將被拒絕寫入賬本。為了保證數(shù)據(jù)的安全,數(shù)據(jù)在傳遞過(guò)程中一直是加密的,區(qū)塊鏈采用的是非對(duì)稱加密技術(shù),加密過(guò)程使用公鑰,解密過(guò)程使用私鑰[3]。私鑰的所有者為生成交易信息的節(jié)點(diǎn),只有生成交易的節(jié)點(diǎn)才能解密交易內(nèi)容,保證了其他節(jié)點(diǎn)在共識(shí)計(jì)算中無(wú)法獲取交易的內(nèi)容,防止作弊行為。區(qū)塊鏈數(shù)據(jù)操作方式如圖3所示。

2.3 以太坊技術(shù)架構(gòu)

以太坊是“比特幣”的高級(jí)版本,其應(yīng)用場(chǎng)景不再局限于數(shù)字貨幣,已經(jīng)成為了一種去中心化的系統(tǒng)解決方案。以太坊平臺(tái)的核心技術(shù)點(diǎn)是允許用戶編寫能操作共享賬本的智能合約,智能合約可以直接向區(qū)塊鏈網(wǎng)絡(luò)發(fā)送交易寫入請(qǐng)求,同時(shí)可以接收共享賬本中返回的狀態(tài)數(shù)據(jù),它封裝了對(duì)區(qū)塊鏈賬本操作的代碼,本地程序可以通過(guò)調(diào)用智能合約的函數(shù)來(lái)使用這些代碼。

以太坊平臺(tái)包含了智能合約開發(fā)和編譯工具,提供了面向?qū)ο蟮哪_本語(yǔ)言,支持區(qū)塊鏈網(wǎng)絡(luò)共識(shí)機(jī)制的定制和修改,以太坊平臺(tái)的Geth工具用于裝載和部署編譯后的智能合約[4],智能合約虛擬機(jī)提供了智能合約運(yùn)行的環(huán)境,應(yīng)用程序接口實(shí)現(xiàn)了區(qū)塊鏈賬本和本地腳本程序的數(shù)據(jù)交換。以太坊的技術(shù)架構(gòu)如圖4所示。

3 身份認(rèn)證模型設(shè)計(jì)

3.1 身份認(rèn)證功能實(shí)現(xiàn)的可行性

傳統(tǒng)的身份認(rèn)證平臺(tái)應(yīng)包含身份認(rèn)證、身份管理和行為審計(jì)三個(gè)核心功能模塊,其中身份認(rèn)證模塊是整個(gè)平臺(tái)的核心,它負(fù)責(zé)收集用戶提供的身份信息,提取系統(tǒng)中的數(shù)據(jù)信息,將信息進(jìn)行比對(duì)后確定是否允許或拒絕登錄;身份管理模塊允許用戶注冊(cè)身份信息、更新身份信息和注銷身份信息,在傳統(tǒng)認(rèn)證平臺(tái)中需要管理員對(duì)用戶的操作進(jìn)行核實(shí)驗(yàn)證;行為審計(jì)模塊記錄身份認(rèn)證平臺(tái)用戶的操作,監(jiān)控包括管理員在內(nèi)的所有用戶的行為,以便及時(shí)發(fā)現(xiàn)非法操作,保證信息安全。

在中心化的技術(shù)框架上,中心服務(wù)器負(fù)責(zé)管理身份信息和處理用戶請(qǐng)求,系統(tǒng)管理員具有高于普通用戶的權(quán)限,身份認(rèn)證的各種功能有非常成熟的實(shí)現(xiàn)方式。區(qū)塊鏈技術(shù)建立在對(duì)等網(wǎng)絡(luò)環(huán)境上,通過(guò)共識(shí)算法實(shí)現(xiàn)共享數(shù)據(jù)庫(kù)的管理,其數(shù)據(jù)存儲(chǔ)和操作方式不同于傳統(tǒng)C/S中心化網(wǎng)絡(luò)環(huán)境,節(jié)點(diǎn)計(jì)算機(jī)擁有平等的身份信息操作權(quán)限,沒(méi)有中心服務(wù)器和管理員賬戶,因此需要對(duì)身份認(rèn)證功能進(jìn)行梳理分析,探討其在區(qū)塊鏈技術(shù)架構(gòu)上實(shí)現(xiàn)的可行性。具體可行性分析結(jié)果如表1所示。

表1 身份認(rèn)證功能的實(shí)現(xiàn)方式比較

3.2 區(qū)塊鏈環(huán)境下身份信息管理

區(qū)塊鏈網(wǎng)絡(luò)環(huán)境下認(rèn)證系統(tǒng)的運(yùn)行不依賴中心服務(wù)器和中心數(shù)據(jù)庫(kù),身份信息的管理權(quán)歸區(qū)塊鏈節(jié)點(diǎn)所有,數(shù)據(jù)存儲(chǔ)在節(jié)點(diǎn)共同維護(hù)的分布式共享賬本中。為了實(shí)現(xiàn)數(shù)據(jù)防篡改,保證信息的安全可信,區(qū)塊鏈網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)都保存了一個(gè)賬本副本[5],交易信息在節(jié)點(diǎn)間達(dá)成共識(shí)后,區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)同步更新賬本。區(qū)塊鏈環(huán)境下的身份認(rèn)證操作流程如圖5所示。

身份認(rèn)證模型的核心是對(duì)身份信息的存儲(chǔ)和管理,所有對(duì)賬本的操作需要在本地處理后向區(qū)塊鏈網(wǎng)絡(luò)發(fā)布交易寫入廣播,節(jié)點(diǎn)通過(guò)共識(shí)算法共同驗(yàn)證交易的合法性,共識(shí)驗(yàn)證后的交易才允許寫入賬本。節(jié)點(diǎn)本地程序無(wú)法直接訪問(wèn)共享賬本,而是通過(guò)調(diào)用通過(guò)智能合約對(duì)交易進(jìn)行封裝、加密、廣播、解密和返回結(jié)果[6]。身份認(rèn)證模型數(shù)據(jù)操作方式如圖6所示。

3.3 認(rèn)證系統(tǒng)建模

1) 模型表示方法

基于以太坊的身份認(rèn)證系統(tǒng)實(shí)現(xiàn)的功能由若干個(gè)操作任務(wù)組成,任務(wù)是身份認(rèn)證模型的基本組成單位,任務(wù)分為本地任務(wù)和共識(shí)任務(wù)兩種類型,其中本地任務(wù)是在節(jié)點(diǎn)計(jì)算機(jī)本地進(jìn)行操作的任務(wù),任務(wù)本身和共享賬本不進(jìn)行數(shù)據(jù)交換,不需要其他節(jié)點(diǎn)進(jìn)行共識(shí)驗(yàn)證,數(shù)據(jù)寫入前的合法性驗(yàn)證和數(shù)據(jù)讀取后的本地處理均屬于本地任務(wù);共識(shí)任務(wù)是需要通過(guò)智能合約對(duì)共享賬本進(jìn)行讀取和寫入的操作,這種操作需要其他節(jié)點(diǎn)共同參與計(jì)算驗(yàn)證,達(dá)成共識(shí)后才能完成該操作。本地任務(wù)的集合構(gòu)成了運(yùn)行在操作系統(tǒng)上的本地應(yīng)用,共識(shí)任務(wù)由智能合約函數(shù)集合來(lái)實(shí)現(xiàn)。

一個(gè)認(rèn)證模型M={T,F},T=LT∪CT,LT∩CT=Φ,其中T是任務(wù)的集合,F(xiàn)是任務(wù)關(guān)系的集合,T有兩個(gè)子集:①不對(duì)共享賬本操作的本地任務(wù)集合LT,②需要操作共享賬本的共識(shí)任務(wù)集合CT。任務(wù)和任務(wù)之間的先后關(guān)系稱為弧,弧分為順序弧和選擇弧,順序弧是指兩個(gè)任務(wù)之間是順序執(zhí)行的先后關(guān)系,用向量f=(任務(wù)1,任務(wù)2)表示;選擇弧用向量f=(任務(wù)1,布爾值,任務(wù)2)表示,用于分別表示判斷條件為true和false的先后關(guān)系。認(rèn)證模型的圖形表示方法為:用矩形表示任務(wù),用箭頭表示弧。圖7是一個(gè)任務(wù)間關(guān)系的圖形表示方法,其形式化表示為M={{a,b,b},{(a,b),(b,false,a),(b,true,c)}}。

2) 認(rèn)證模型任務(wù)分析

根據(jù)認(rèn)證系統(tǒng)功能模塊的劃分,認(rèn)證模型的主要操作有認(rèn)證、注冊(cè)、更新和注銷,將這些操作細(xì)分為若干個(gè)任務(wù),其中共識(shí)任務(wù)需要區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)共同驗(yàn)證,共識(shí)不成功的任務(wù)直接轉(zhuǎn)入操作失敗頁(yè)面,表示用戶身份存在問(wèn)題,無(wú)法取得記賬權(quán)。認(rèn)證模型任務(wù)流程如圖8所示,具體的任務(wù)描述如下:

①注冊(cè)操作的任務(wù)描述

用戶在注冊(cè)頁(yè)面錄入身份信息,本地程序?qū)︿浫氲男畔⑦M(jìn)行規(guī)范性判斷,符合規(guī)范的信息調(diào)用智能合約函數(shù)請(qǐng)求查詢共享賬本,對(duì)注冊(cè)信息進(jìn)行重復(fù)性判斷,注冊(cè)信息重復(fù)的將被拒絕,不符合規(guī)范的信息也將要求重新注冊(cè);符合規(guī)范且沒(méi)有重復(fù)的信息由智能合約向區(qū)塊鏈網(wǎng)絡(luò)發(fā)布交易請(qǐng)求,達(dá)成共識(shí)后寫入共享賬本。

②認(rèn)證操作的任務(wù)描述

用戶在登錄頁(yè)面輸入認(rèn)證信息,本地程序?qū)φJ(rèn)證信息的完整性進(jìn)行判斷,認(rèn)證信息錄入完整后由智能合約向區(qū)塊鏈網(wǎng)絡(luò)發(fā)布查詢交易請(qǐng)求,返回的身份信息和用戶提供的信息進(jìn)行比對(duì),合法用戶登錄成功,進(jìn)入認(rèn)證系統(tǒng)操作列表,可以選擇操作或轉(zhuǎn)向第三方應(yīng)用;信息錄入不完整和比對(duì)不通過(guò)將返回至登錄頁(yè)面。

③更新操作的任務(wù)描述

用戶登錄系統(tǒng)后,在身份信息更新頁(yè)面錄入新信息,本地程序?qū)π滦畔⑦M(jìn)行校驗(yàn),通過(guò)校驗(yàn)后的信息由智能合約向區(qū)塊鏈網(wǎng)絡(luò)發(fā)布修改身份交易請(qǐng)求,交易經(jīng)過(guò)共識(shí)后寫入共享賬本,隨后轉(zhuǎn)向操作列表;未通過(guò)信息校驗(yàn)將返回至修改頁(yè)面,未通過(guò)共識(shí)驗(yàn)證的轉(zhuǎn)入交易失敗頁(yè)面。

④注銷操作的任務(wù)描述

在區(qū)塊鏈技術(shù)框架下,為了保證操作過(guò)程的可追溯性,不能直接刪除數(shù)據(jù),而是通過(guò)寫入身份注銷交易,用標(biāo)記來(lái)表示某個(gè)身份信息的不可用。用戶登錄后選擇注銷個(gè)人賬戶信息,智能合約請(qǐng)求查詢身份信息的關(guān)聯(lián)數(shù)據(jù),無(wú)應(yīng)用關(guān)聯(lián)的賬戶信息由智能合約向區(qū)塊鏈網(wǎng)絡(luò)發(fā)布注銷身份交易,共識(shí)后的注銷交易允許寫入賬本;有應(yīng)用關(guān)聯(lián)的身份信息將被要求退出應(yīng)用,共識(shí)失敗的交易也會(huì)被拒絕。

3) 認(rèn)證建模

根據(jù)身份認(rèn)證模型的任務(wù)描述,將任務(wù)和任務(wù)之間的關(guān)系進(jìn)行分析梳理。為了形式化描述身份認(rèn)證模型,需要對(duì)每一個(gè)任務(wù)進(jìn)行編碼,以便在以太坊平臺(tái)中實(shí)現(xiàn)身份模型。在身份認(rèn)證模型的實(shí)現(xiàn)過(guò)程中,本地任務(wù)通過(guò)本地函數(shù)封裝代碼實(shí)現(xiàn),共識(shí)任務(wù)需要在本地函數(shù)中調(diào)用智能合約函數(shù),因此需要在給編碼時(shí)區(qū)分任務(wù)的類型。認(rèn)證模型中任務(wù)和其后續(xù)任務(wù)的關(guān)系類型也要在編碼時(shí)確定,以便進(jìn)行形式化的描述。根據(jù)圖8所描述的認(rèn)證模型操作任務(wù)流程圖,任務(wù)編碼如表2所示。

表2 身份認(rèn)證模型任務(wù)編碼表

根據(jù)身份認(rèn)證模型的形式化定義方法,結(jié)合表2的任務(wù)編碼,任務(wù)集合T的描述如下:

T=LT∪CT,其中LT={t1,t2,t5,t6,t8,t9,t10,t12,t15},CT={t3,t4,t7,t11,t13,t14}。

順序弧的形式化描述為兩個(gè)先后順序的任務(wù)組合而成的向量,選擇弧形式化描述向量為先后順序關(guān)系的兩個(gè)任務(wù)中間加上一個(gè)布爾值。根據(jù)任務(wù)編碼表中的關(guān)系類型和任務(wù)流程圖,關(guān)系集合(弧集合)F的值如下:

F={(t1,t2),(t2,true,t3),(t2,false,t1),(t3,true,t4),(t3,false,t1),(t4,true,t5),(t4,false,t15),(t5,t6),(t6,true,t7),(t6,false,t5),(t7,true,t8),(t7,false,t15),(t8,t9),(t8,t12),(t9,t10),(t10,true,t11),(t10,false,t9),(t11,true,t8),(t11,false,t15),(t12,t13),(t13,true,t14),(t13,false,t15),(t14,true,t1),(t14,false,t15)}

3.4 認(rèn)證模型在以太坊平臺(tái)中的實(shí)現(xiàn)

1) 認(rèn)證模型的實(shí)現(xiàn)方式

用戶對(duì)共享賬本操作時(shí),需要通過(guò)本地變量對(duì)合約變量賦值,利用本地函數(shù)調(diào)用合約函數(shù),返回值通過(guò)合約變量取回至本地。以太坊平臺(tái)提供了過(guò)程調(diào)用協(xié)議,可以在本地script函數(shù)中調(diào)用智能合約狀態(tài)變量和合約函數(shù),實(shí)現(xiàn)交易的生成和發(fā)布,通過(guò)全網(wǎng)共同驗(yàn)證后獲取操作共享賬本的記賬權(quán)[7],認(rèn)證模型在以太坊平臺(tái)中的實(shí)現(xiàn)方式如圖9所示。

2) 智能合約

認(rèn)證模型的共識(shí)任務(wù)需要調(diào)用智能合約中的相應(yīng)函數(shù)來(lái)完成,由于對(duì)賬本的操作都需要進(jìn)行生成交易、加密交易、提交共識(shí)和返回結(jié)果,認(rèn)證模型中的增、刪、查、改任務(wù)本質(zhì)上都是請(qǐng)求向賬本寫入交易,共識(shí)任務(wù)在智能合約中可以表示為一個(gè)交易函數(shù),任務(wù)編碼和操作內(nèi)容通過(guò)函數(shù)參數(shù)來(lái)傳遞,在交易函數(shù)中需要對(duì)操作內(nèi)容進(jìn)行加工處理,生成交易并完成加密。在以太坊平臺(tái)中,編寫智能合約使用Solidity語(yǔ)言,Solidity語(yǔ)言是面向?qū)ο蟮囊蕴恢悄芎霞s編程語(yǔ)言,它提供了豐富的數(shù)據(jù)類型和結(jié)構(gòu)控制語(yǔ)句,Solidity 源碼文件經(jīng)過(guò)編譯后產(chǎn)生智能合約字節(jié)碼文件[8],以太坊虛擬機(jī)是智能合約字節(jié)碼文件的運(yùn)行環(huán)境。身份認(rèn)證的信息的核心任務(wù)偽代碼如下:

contract user_account {

hash workID;//任務(wù)編碼

address note;//產(chǎn)生交易節(jié)點(diǎn)的地址

mapping(address=>ID) account;//身份信息在賬本中的地址

string msg;//合約函數(shù)執(zhí)行返回信息

function set_workID(hash id) {//設(shè)定任務(wù)編碼

workID = id;

}

function get_workID(hash id) returns (hash id) {//獲取任務(wù)編碼

return workID;

}

function account_create(account info){//注冊(cè)(寫入)身份信息任務(wù)函數(shù)

if(account.Registered==true){

console.log("fail ");

}else{

account_creater(info);//向賬本中寫入身份信息

}

function account_select(account info){//認(rèn)證操作(查詢)任務(wù)函數(shù)

if(account.full){

console.log("fail ");

}

else{

account_select(info);//查詢身份信息并和本地?cái)?shù)據(jù)比對(duì)

}

function account_delete(account info){//注銷身份信息

....

}

function account_update(account info){//更新身份信息

....

}

.....

}

Solidity語(yǔ)言編寫的智能合約需要編程成字節(jié)碼,同時(shí)產(chǎn)生二進(jìn)制的智能合約接口規(guī)范,智能合約字節(jié)碼部署到以太坊平臺(tái)中,用JavaScript編寫的外部本地程序可以用web3.js和二進(jìn)制接口來(lái)調(diào)用合約函數(shù)完成共享賬本的操作[9],這種調(diào)用過(guò)程如圖10所示。

3) 模型注冊(cè)

認(rèn)證模型中定義的任務(wù)和任務(wù)關(guān)系需要使用流程引擎來(lái)具體實(shí)現(xiàn),流程引擎需要兼容本地程序編輯語(yǔ)言和運(yùn)行環(huán)境。Bigbross Bossa流程引擎是按照嵌入式設(shè)計(jì)的,可以作為本地DApp的一個(gè)組件來(lái)直接調(diào)用,將模型中t1至t15任務(wù)定義為活動(dòng),通過(guò)設(shè)置活動(dòng)的后續(xù)活動(dòng)來(lái)表達(dá)活動(dòng)之間的關(guān)系。定義活動(dòng)和設(shè)置關(guān)系的偽代碼如下:

function create_case(String msg){

/*建立一個(gè)流程引擎*/

Bossa caseFactory=

bossaFactory.defaultBossa();

/*聲明一個(gè)模型*/

CaseType case=new CaseType();

/*聲明任務(wù)t1至t15,并定義任務(wù)操作流程*/

Transition t1=case.register_Transition(function() t1);

Transition t2=case.register_Transition(function() t2);

Transition t3=case.register_Transition(function() t3);

Transition t4=case.register_Transition(function() t4);

......

Transition t15=case.register_Transition(function() t15);

/*定義t1至t15任務(wù)之間的關(guān)系,并表示出順序弧和選擇弧*/

t1.outPut(t2);//任務(wù)間的關(guān)系,該弧(t1,t2)為順序弧

t2.outPut(t3,true);//選擇弧(t2,true,t3),定義條件成立的后續(xù)任務(wù)

t2.outPut(t1,false);//選擇弧(t2,false,t1),定義條件不成立的后續(xù)任務(wù)

t3.outPut(t4,true);

t3.outPut(t1,false);

....

t14.outPut(t15,false);

}

3.5 部署和運(yùn)行

1) 網(wǎng)絡(luò)環(huán)境搭建

以太坊技術(shù)平臺(tái)運(yùn)行在點(diǎn)對(duì)點(diǎn)網(wǎng)狀網(wǎng)絡(luò)環(huán)境中,建立一個(gè)點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)環(huán)境是成功實(shí)施認(rèn)證模型的關(guān)鍵。建立P2P網(wǎng)絡(luò)連接需要進(jìn)行網(wǎng)絡(luò)通訊方式的初始化,將加入網(wǎng)絡(luò)的節(jié)點(diǎn)地址保存在節(jié)點(diǎn)堆棧中[10],設(shè)置網(wǎng)絡(luò)連接狀態(tài)信息和錯(cuò)誤審計(jì),對(duì)通訊狀態(tài)信息進(jìn)行同步處理。在網(wǎng)絡(luò)中要支持節(jié)點(diǎn)發(fā)布交易廣播,網(wǎng)絡(luò)要能接受新節(jié)點(diǎn)并同步處理新節(jié)點(diǎn)的網(wǎng)絡(luò)互聯(lián)請(qǐng)求。搭建網(wǎng)絡(luò)環(huán)境的主要命令如下:

if exist config_File del config_File;//刪除原有的網(wǎng)絡(luò)配置文件

set init_Socket = (P2P_Protocol_File) ;//將P2P協(xié)議作為初始網(wǎng)絡(luò)通訊方式

set init_Connection= (peer[]); //網(wǎng)絡(luò)連接初始化

int32[] peer=sockets.push(IP[]);//將網(wǎng)絡(luò)節(jié)點(diǎn)加入到節(jié)點(diǎn)堆棧中

set init_Message=Handler(p);//設(shè)置提示信息

goto Error_Tracer(msg);//網(wǎng)絡(luò)錯(cuò)誤狀態(tài)審計(jì)

printf(p,broadcast_Msg(hash Trantion));//向P2P網(wǎng)絡(luò)廣播交易地址

do sync_Message_Handler(msg); //同步處理通訊狀態(tài)信息

do Error_Message_Handler = (msg);//對(duì)網(wǎng)絡(luò)通訊錯(cuò)誤進(jìn)行實(shí)時(shí)處理

connect newPeers = (newP) ; //處理新加入的節(jié)點(diǎn)

2) 合約部署

部署合約需要一個(gè)Ether賬戶,且該賬戶必須解鎖。通過(guò)賬戶裝載智能合約,編譯后得到應(yīng)用程序接口信息,通過(guò)本地程序調(diào)用web3 deploy進(jìn)行挖礦確認(rèn),在本地程序中通過(guò)abi獲取合約對(duì)象,完成合約的部署,最后根據(jù)任務(wù)需要來(lái)調(diào)用合約。智能合約部署過(guò)程如圖11所示。

智能合約部署需要使用以太坊的Geth工具,按照智能合約的部署過(guò)程,需要新建一個(gè)賬戶,該賬戶在默認(rèn)情況下包含用戶名和密碼兩個(gè)字段,新賬戶需要通過(guò)挖礦激活,獲得以太坊的賬戶的注冊(cè)權(quán),解鎖在以太坊注冊(cè)的賬戶,以便執(zhí)行后續(xù)部署命令。利用web3 js來(lái)裝載應(yīng)用程序接口,通過(guò)接口生成一個(gè)智能合約變量,用于保存實(shí)例化后的智能合約對(duì)象,部署完成后就可以調(diào)用智能合約執(zhí)行身份模型中定義的任務(wù)函數(shù)[11]。部署和調(diào)用智能合約的主要命令如下:

personal user=personal.newAccount(′user′,’password′)//新建一個(gè)賬戶信息

miner.start()&miner.stop()//開始挖礦,獲得ether的注冊(cè)權(quán)

personal.unlockAccount(user)//解鎖ether賬戶

myAPI = web3.ether.contract(abi)//裝載interface

Contract MyEtherContract= myAPI.new()//生成一個(gè)默認(rèn)的智能合約對(duì)象

MyEtherContract = ether.contract(abi)//獲取合約對(duì)象

myEtherContract= MyEtherContract.at(hash(address))//合約對(duì)象實(shí)例化

myEtherContract.multiply.call(function T1)//調(diào)用合約對(duì)象,執(zhí)行模型任務(wù)

4 總結(jié)

區(qū)塊鏈技術(shù)和中心化的數(shù)據(jù)庫(kù)管理系統(tǒng)在數(shù)據(jù)存儲(chǔ)和操作方式有很多不同之處,傳統(tǒng)數(shù)據(jù)庫(kù)管理系統(tǒng)采用關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),利用開放數(shù)據(jù)連接實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作,而以太坊應(yīng)用數(shù)據(jù)存儲(chǔ)在分布式共享層次數(shù)據(jù)庫(kù)中,利用智能合約實(shí)現(xiàn)數(shù)據(jù)的寫入,數(shù)據(jù)審核不依賴系統(tǒng)管理員,而通過(guò)共識(shí)機(jī)制由節(jié)點(diǎn)共同驗(yàn)證。鑒于以太坊框架的技術(shù)特點(diǎn),身份認(rèn)證模型需要對(duì)任務(wù)類型進(jìn)行分類,本地任務(wù)的數(shù)據(jù)處理在本地完成,共識(shí)任務(wù)需要考慮共識(shí)計(jì)算過(guò)程。身份認(rèn)證模型實(shí)施時(shí)采用任務(wù)流程引擎對(duì)任務(wù)及任務(wù)關(guān)系進(jìn)行描述,任務(wù)的具體實(shí)現(xiàn)代碼利用函數(shù)來(lái)封裝運(yùn)行,認(rèn)證模型任務(wù)需要對(duì)共享賬本操作時(shí),通過(guò)在本地函數(shù)中調(diào)用以太坊智能合約來(lái)完成操作。本文論述的建模和實(shí)現(xiàn)方法不但適用于身份認(rèn)證系統(tǒng)的設(shè)計(jì)和開發(fā),對(duì)其他類型的去中心化應(yīng)用也具有借鑒意義。文中使用的身份認(rèn)證模型案例所包含的功能為認(rèn)證系統(tǒng)最基本的功能,不同應(yīng)用領(lǐng)域的身份認(rèn)證模型還需要根據(jù)實(shí)際需求進(jìn)行必要的功能擴(kuò)展,操作任務(wù)的劃分也需要進(jìn)一步細(xì)化,本地程序的實(shí)現(xiàn)需要根據(jù)程序設(shè)計(jì)語(yǔ)言和程序運(yùn)行環(huán)境做必要的修改,流程引擎選擇時(shí)要注意與開發(fā)語(yǔ)言的匹配。

猜你喜歡
以太賬本合約
以太萬(wàn)物理論概述
數(shù)說(shuō):重慶70年“賬本”展示
丟失的紅色賬本
大樹爺爺?shù)馁~本
車易鏈:做汽車業(yè)的“以太坊”
丟失的紅色賬本
A Study on the Contract Research Organization
以太互聯(lián) 高效便捷 經(jīng)濟(jì)、可靠、易用的小型可編程控制器
合約必守,誰(shuí)能例外!——對(duì)“情勢(shì)變更”制度不可寄于過(guò)高期望
西城区| 客服| 泽州县| 洛宁县| 依安县| 华阴市| 文成县| 广河县| 潞城市| 商洛市| 建昌县| 陇南市| 七台河市| 泸州市| 乌海市| 融水| 海城市| 涡阳县| 舞钢市| 永泰县| 青田县| 方正县| 城步| 册亨县| 镇巴县| 剑川县| 新安县| 石景山区| 砚山县| 广丰县| 额敏县| 苏州市| 阜康市| 青阳县| 聂荣县| 治多县| 奉化市| 浠水县| 桂阳县| 新兴县| 南昌县|