李 嶒 ,徐濟成,
(1.安徽中澳科技職業(yè)學院 信息工程與藝術設計系,合肥 230041;2.安徽農業(yè)大學 信息與計算機學院,合肥 230036)
傳統(tǒng)的身份認證系統(tǒng)由中心服務器存儲和管理身份信息,認證服務器軟硬件故障和遭受網(wǎng)絡攻擊的事件屢見不鮮[1]。為了徹底解決身份認證系統(tǒng)的安全威脅,迫切需要找到一種去中心化、數(shù)據(jù)安全性高、能有效抵抗網(wǎng)絡攻擊、能滿足認證系統(tǒng)運行需求的技術解決方案。以太坊是區(qū)塊鏈技術的典型應用,它作為比特幣應用的升級版,應用場景不再局限在數(shù)字貨幣,支持智能合約開發(fā)和應用程序接口,適合開發(fā)各種去中心化的應用平臺。以太坊體系架構中區(qū)塊數(shù)據(jù)的鏈式結構保證了所有交易的可追溯,對等網(wǎng)狀網(wǎng)絡拓撲結構能實現(xiàn)應用系統(tǒng)的去中心化,數(shù)據(jù)寫入共識機制可以有效抵御網(wǎng)絡攻擊。本文提出了在以太坊技術架構上設計身份認證系統(tǒng)模型的思路,通過任務集合和關系向量來形式化的描述認證系統(tǒng)模型。開發(fā)本地應用程序,編制以太坊智能合約,搭建以太坊網(wǎng)絡環(huán)境,最終實現(xiàn)身份認證模型部署和運行。此模型的成功實施可以徹底解決傳統(tǒng)中心化認證系統(tǒng)的安全缺陷。
認證系統(tǒng)的主要作用是為應用系統(tǒng)提供用戶身份認證服務,一個完整的認證系統(tǒng)分為認證授權子系統(tǒng)、身份管理子系統(tǒng)和應用管理子系統(tǒng)。認證授權子系統(tǒng)是認證系統(tǒng)的核心,它通過將保存在認證系統(tǒng)中的用戶信息和應用系統(tǒng)進行關聯(lián),對合法用戶進行授權;身份管理子系統(tǒng)允許用戶注冊賬戶,對用戶信息進行維護、更新和刪除;應用管理子系統(tǒng)對應用系統(tǒng)的權限列表和授權策略進行管理,同時可以記錄、監(jiān)控和審計認證系統(tǒng)的數(shù)據(jù)操作行為。認證系統(tǒng)主要功能如圖1所示。
根據(jù)第三方應用系統(tǒng)在認證系統(tǒng)保存的認證策略,認證系統(tǒng)負責對用戶的認證請求進行響應處理,向合法用戶發(fā)放令牌。令牌即用戶訪問操作應用系統(tǒng)的通行證,它保存了用戶信息、權限信息和數(shù)字簽名。取得令牌的用戶可以對第三方應用系統(tǒng)進行訪問和操作,未取得令牌的用戶將被拒絕訪問。認證的實現(xiàn)方式如圖2所示。
傳統(tǒng)的身份認證系統(tǒng)采用中心化的技術架構,用戶的身份信息和應用系統(tǒng)的授權信息集中保存在中心服務器中,用戶信息的所有權屬于身份認證系統(tǒng)中心服務器,用戶僅能在認證系統(tǒng)的授權下使用身份信息。在中心化的環(huán)境下,用戶合法性的認證和應用程序的訪問授權過分依賴中心服務器,存在一定的安全隱患。
1)在中心化技術框架下,服務器出現(xiàn)故障會影響整個系統(tǒng)的正常運行,導致用戶不能使用和操作身份信息,應用程序無法正確識別合法用戶。
2)第三方應用程序為了擴大用戶范圍需要在多個認證系統(tǒng)中注冊授權信息,一旦其中一個認證系統(tǒng)信息泄露,第三方應用的安全性將受到威脅,導致合法用戶遭受損失。
3)認證系統(tǒng)中管理員具有高于普通用戶的信息操作權限[2],可以不加約束的查詢、更新和刪除用戶信息,普通用戶身份信息的安全性得不到保證。
為了能使用戶獲得身份信息的所有權,徹底解決因中心化結構導致的安全隱患,需要尋找一個去中心化的解決方案,將身份信息分布地存儲在客戶機中,并以安全可信的方式傳遞和管理身份信息。
區(qū)塊鏈技術是“比特幣”應用的底層數(shù)據(jù)處理技術,它通過塊狀數(shù)據(jù)的鏈式關聯(lián)方式將數(shù)據(jù)交易的過程信息完整地存儲在分布式層次數(shù)據(jù)庫中,原始數(shù)據(jù)和數(shù)據(jù)的操作過程均被記錄在由節(jié)點共同維護的“賬本”中,保證了數(shù)據(jù)的真實性和可追溯性。
1)點對點的底層網(wǎng)絡結構
區(qū)塊鏈網(wǎng)絡拓撲是點對點的網(wǎng)狀結構,網(wǎng)狀結構的特點是節(jié)點間可以不借助中心節(jié)點直接進行通信,其中一個節(jié)點或線路的故障不影響整個網(wǎng)絡的正常運行。
2)去中心化的數(shù)據(jù)存儲和操作
在區(qū)塊鏈技術框架下,數(shù)據(jù)以區(qū)塊的結構由鏈串鏈在一起,形成了一個樹形的共享層次數(shù)據(jù)庫,共享數(shù)據(jù)庫分布的存儲在節(jié)點中,由全體節(jié)點共同維護。某個節(jié)點請求對數(shù)據(jù)庫進行操作,需要其他節(jié)點根據(jù)共識算法共同驗證,保證了數(shù)據(jù)的安全。
3)操作過程可追溯
在區(qū)塊鏈技術框架下,所有的對共享數(shù)據(jù)庫的操作被完整的記錄下來,所有的交易不允許被刪除。嚴格意義上講,區(qū)塊鏈網(wǎng)絡中只有數(shù)據(jù)的寫入,沒有數(shù)據(jù)的更新和刪除,當前數(shù)據(jù)的狀態(tài)是通過交易信息寫入來實現(xiàn)的。
4)公平可信的記賬權獲取機制
在區(qū)塊鏈應用系統(tǒng)中,所有的節(jié)點用戶地位平等,沒有管理員用戶和普通用戶之分。節(jié)點用戶的記賬權由全網(wǎng)節(jié)點共同計算驗證,這種驗證過程稱為共識,共識算法的公平性決定了區(qū)塊鏈網(wǎng)絡的安全性和可信度。
當節(jié)點需要對區(qū)塊鏈數(shù)據(jù)進行操作時,需要生成一個交易,同時向全網(wǎng)廣播交易請求,其他節(jié)點通過共識算法共同計算驗證,只有交易信息通過了驗證,節(jié)點獲取當前交易的記賬權,才能將交易信息寫入共享賬本,未通過共識的交易將被拒絕寫入賬本。為了保證數(shù)據(jù)的安全,數(shù)據(jù)在傳遞過程中一直是加密的,區(qū)塊鏈采用的是非對稱加密技術,加密過程使用公鑰,解密過程使用私鑰[3]。私鑰的所有者為生成交易信息的節(jié)點,只有生成交易的節(jié)點才能解密交易內容,保證了其他節(jié)點在共識計算中無法獲取交易的內容,防止作弊行為。區(qū)塊鏈數(shù)據(jù)操作方式如圖3所示。
以太坊是“比特幣”的高級版本,其應用場景不再局限于數(shù)字貨幣,已經(jīng)成為了一種去中心化的系統(tǒng)解決方案。以太坊平臺的核心技術點是允許用戶編寫能操作共享賬本的智能合約,智能合約可以直接向區(qū)塊鏈網(wǎng)絡發(fā)送交易寫入請求,同時可以接收共享賬本中返回的狀態(tài)數(shù)據(jù),它封裝了對區(qū)塊鏈賬本操作的代碼,本地程序可以通過調用智能合約的函數(shù)來使用這些代碼。
以太坊平臺包含了智能合約開發(fā)和編譯工具,提供了面向對象的腳本語言,支持區(qū)塊鏈網(wǎng)絡共識機制的定制和修改,以太坊平臺的Geth工具用于裝載和部署編譯后的智能合約[4],智能合約虛擬機提供了智能合約運行的環(huán)境,應用程序接口實現(xiàn)了區(qū)塊鏈賬本和本地腳本程序的數(shù)據(jù)交換。以太坊的技術架構如圖4所示。
傳統(tǒng)的身份認證平臺應包含身份認證、身份管理和行為審計三個核心功能模塊,其中身份認證模塊是整個平臺的核心,它負責收集用戶提供的身份信息,提取系統(tǒng)中的數(shù)據(jù)信息,將信息進行比對后確定是否允許或拒絕登錄;身份管理模塊允許用戶注冊身份信息、更新身份信息和注銷身份信息,在傳統(tǒng)認證平臺中需要管理員對用戶的操作進行核實驗證;行為審計模塊記錄身份認證平臺用戶的操作,監(jiān)控包括管理員在內的所有用戶的行為,以便及時發(fā)現(xiàn)非法操作,保證信息安全。
在中心化的技術框架上,中心服務器負責管理身份信息和處理用戶請求,系統(tǒng)管理員具有高于普通用戶的權限,身份認證的各種功能有非常成熟的實現(xiàn)方式。區(qū)塊鏈技術建立在對等網(wǎng)絡環(huán)境上,通過共識算法實現(xiàn)共享數(shù)據(jù)庫的管理,其數(shù)據(jù)存儲和操作方式不同于傳統(tǒng)C/S中心化網(wǎng)絡環(huán)境,節(jié)點計算機擁有平等的身份信息操作權限,沒有中心服務器和管理員賬戶,因此需要對身份認證功能進行梳理分析,探討其在區(qū)塊鏈技術架構上實現(xiàn)的可行性。具體可行性分析結果如表1所示。
表1 身份認證功能的實現(xiàn)方式比較
區(qū)塊鏈網(wǎng)絡環(huán)境下認證系統(tǒng)的運行不依賴中心服務器和中心數(shù)據(jù)庫,身份信息的管理權歸區(qū)塊鏈節(jié)點所有,數(shù)據(jù)存儲在節(jié)點共同維護的分布式共享賬本中。為了實現(xiàn)數(shù)據(jù)防篡改,保證信息的安全可信,區(qū)塊鏈網(wǎng)絡中每個節(jié)點都保存了一個賬本副本[5],交易信息在節(jié)點間達成共識后,區(qū)塊鏈網(wǎng)絡節(jié)點同步更新賬本。區(qū)塊鏈環(huán)境下的身份認證操作流程如圖5所示。
身份認證模型的核心是對身份信息的存儲和管理,所有對賬本的操作需要在本地處理后向區(qū)塊鏈網(wǎng)絡發(fā)布交易寫入廣播,節(jié)點通過共識算法共同驗證交易的合法性,共識驗證后的交易才允許寫入賬本。節(jié)點本地程序無法直接訪問共享賬本,而是通過調用通過智能合約對交易進行封裝、加密、廣播、解密和返回結果[6]。身份認證模型數(shù)據(jù)操作方式如圖6所示。
1) 模型表示方法
基于以太坊的身份認證系統(tǒng)實現(xiàn)的功能由若干個操作任務組成,任務是身份認證模型的基本組成單位,任務分為本地任務和共識任務兩種類型,其中本地任務是在節(jié)點計算機本地進行操作的任務,任務本身和共享賬本不進行數(shù)據(jù)交換,不需要其他節(jié)點進行共識驗證,數(shù)據(jù)寫入前的合法性驗證和數(shù)據(jù)讀取后的本地處理均屬于本地任務;共識任務是需要通過智能合約對共享賬本進行讀取和寫入的操作,這種操作需要其他節(jié)點共同參與計算驗證,達成共識后才能完成該操作。本地任務的集合構成了運行在操作系統(tǒng)上的本地應用,共識任務由智能合約函數(shù)集合來實現(xiàn)。
一個認證模型M={T,F},T=LT∪CT,LT∩CT=Φ,其中T是任務的集合,F(xiàn)是任務關系的集合,T有兩個子集:①不對共享賬本操作的本地任務集合LT,②需要操作共享賬本的共識任務集合CT。任務和任務之間的先后關系稱為弧,弧分為順序弧和選擇弧,順序弧是指兩個任務之間是順序執(zhí)行的先后關系,用向量f=(任務1,任務2)表示;選擇弧用向量f=(任務1,布爾值,任務2)表示,用于分別表示判斷條件為true和false的先后關系。認證模型的圖形表示方法為:用矩形表示任務,用箭頭表示弧。圖7是一個任務間關系的圖形表示方法,其形式化表示為M={{a,b,b},{(a,b),(b,false,a),(b,true,c)}}。
2) 認證模型任務分析
根據(jù)認證系統(tǒng)功能模塊的劃分,認證模型的主要操作有認證、注冊、更新和注銷,將這些操作細分為若干個任務,其中共識任務需要區(qū)塊鏈網(wǎng)絡節(jié)點共同驗證,共識不成功的任務直接轉入操作失敗頁面,表示用戶身份存在問題,無法取得記賬權。認證模型任務流程如圖8所示,具體的任務描述如下:
①注冊操作的任務描述
用戶在注冊頁面錄入身份信息,本地程序對錄入的信息進行規(guī)范性判斷,符合規(guī)范的信息調用智能合約函數(shù)請求查詢共享賬本,對注冊信息進行重復性判斷,注冊信息重復的將被拒絕,不符合規(guī)范的信息也將要求重新注冊;符合規(guī)范且沒有重復的信息由智能合約向區(qū)塊鏈網(wǎng)絡發(fā)布交易請求,達成共識后寫入共享賬本。
②認證操作的任務描述
用戶在登錄頁面輸入認證信息,本地程序對認證信息的完整性進行判斷,認證信息錄入完整后由智能合約向區(qū)塊鏈網(wǎng)絡發(fā)布查詢交易請求,返回的身份信息和用戶提供的信息進行比對,合法用戶登錄成功,進入認證系統(tǒng)操作列表,可以選擇操作或轉向第三方應用;信息錄入不完整和比對不通過將返回至登錄頁面。
③更新操作的任務描述
用戶登錄系統(tǒng)后,在身份信息更新頁面錄入新信息,本地程序對新信息進行校驗,通過校驗后的信息由智能合約向區(qū)塊鏈網(wǎng)絡發(fā)布修改身份交易請求,交易經(jīng)過共識后寫入共享賬本,隨后轉向操作列表;未通過信息校驗將返回至修改頁面,未通過共識驗證的轉入交易失敗頁面。
④注銷操作的任務描述
在區(qū)塊鏈技術框架下,為了保證操作過程的可追溯性,不能直接刪除數(shù)據(jù),而是通過寫入身份注銷交易,用標記來表示某個身份信息的不可用。用戶登錄后選擇注銷個人賬戶信息,智能合約請求查詢身份信息的關聯(lián)數(shù)據(jù),無應用關聯(lián)的賬戶信息由智能合約向區(qū)塊鏈網(wǎng)絡發(fā)布注銷身份交易,共識后的注銷交易允許寫入賬本;有應用關聯(lián)的身份信息將被要求退出應用,共識失敗的交易也會被拒絕。
3) 認證建模
根據(jù)身份認證模型的任務描述,將任務和任務之間的關系進行分析梳理。為了形式化描述身份認證模型,需要對每一個任務進行編碼,以便在以太坊平臺中實現(xiàn)身份模型。在身份認證模型的實現(xiàn)過程中,本地任務通過本地函數(shù)封裝代碼實現(xiàn),共識任務需要在本地函數(shù)中調用智能合約函數(shù),因此需要在給編碼時區(qū)分任務的類型。認證模型中任務和其后續(xù)任務的關系類型也要在編碼時確定,以便進行形式化的描述。根據(jù)圖8所描述的認證模型操作任務流程圖,任務編碼如表2所示。
表2 身份認證模型任務編碼表
根據(jù)身份認證模型的形式化定義方法,結合表2的任務編碼,任務集合T的描述如下:
T=LT∪CT,其中LT={t1,t2,t5,t6,t8,t9,t10,t12,t15},CT={t3,t4,t7,t11,t13,t14}。
順序弧的形式化描述為兩個先后順序的任務組合而成的向量,選擇弧形式化描述向量為先后順序關系的兩個任務中間加上一個布爾值。根據(jù)任務編碼表中的關系類型和任務流程圖,關系集合(弧集合)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)}
1) 認證模型的實現(xiàn)方式
用戶對共享賬本操作時,需要通過本地變量對合約變量賦值,利用本地函數(shù)調用合約函數(shù),返回值通過合約變量取回至本地。以太坊平臺提供了過程調用協(xié)議,可以在本地script函數(shù)中調用智能合約狀態(tài)變量和合約函數(shù),實現(xiàn)交易的生成和發(fā)布,通過全網(wǎng)共同驗證后獲取操作共享賬本的記賬權[7],認證模型在以太坊平臺中的實現(xiàn)方式如圖9所示。
2) 智能合約
認證模型的共識任務需要調用智能合約中的相應函數(shù)來完成,由于對賬本的操作都需要進行生成交易、加密交易、提交共識和返回結果,認證模型中的增、刪、查、改任務本質上都是請求向賬本寫入交易,共識任務在智能合約中可以表示為一個交易函數(shù),任務編碼和操作內容通過函數(shù)參數(shù)來傳遞,在交易函數(shù)中需要對操作內容進行加工處理,生成交易并完成加密。在以太坊平臺中,編寫智能合約使用Solidity語言,Solidity語言是面向對象的以太坊智能合約編程語言,它提供了豐富的數(shù)據(jù)類型和結構控制語句,Solidity 源碼文件經(jīng)過編譯后產生智能合約字節(jié)碼文件[8],以太坊虛擬機是智能合約字節(jié)碼文件的運行環(huán)境。身份認證的信息的核心任務偽代碼如下:
contract user_account {
hash workID;//任務編碼
address note;//產生交易節(jié)點的地址
mapping(address=>ID) account;//身份信息在賬本中的地址
string msg;//合約函數(shù)執(zhí)行返回信息
function set_workID(hash id) {//設定任務編碼
workID = id;
}
function get_workID(hash id) returns (hash id) {//獲取任務編碼
return workID;
}
function account_create(account info){//注冊(寫入)身份信息任務函數(shù)
if(account.Registered==true){
console.log("fail ");
}else{
account_creater(info);//向賬本中寫入身份信息
}
function account_select(account info){//認證操作(查詢)任務函數(shù)
if(account.full){
console.log("fail ");
}
else{
account_select(info);//查詢身份信息并和本地數(shù)據(jù)比對
}
function account_delete(account info){//注銷身份信息
....
}
function account_update(account info){//更新身份信息
....
}
.....
}
Solidity語言編寫的智能合約需要編程成字節(jié)碼,同時產生二進制的智能合約接口規(guī)范,智能合約字節(jié)碼部署到以太坊平臺中,用JavaScript編寫的外部本地程序可以用web3.js和二進制接口來調用合約函數(shù)完成共享賬本的操作[9],這種調用過程如圖10所示。
3) 模型注冊
認證模型中定義的任務和任務關系需要使用流程引擎來具體實現(xiàn),流程引擎需要兼容本地程序編輯語言和運行環(huán)境。Bigbross Bossa流程引擎是按照嵌入式設計的,可以作為本地DApp的一個組件來直接調用,將模型中t1至t15任務定義為活動,通過設置活動的后續(xù)活動來表達活動之間的關系。定義活動和設置關系的偽代碼如下:
function create_case(String msg){
/*建立一個流程引擎*/
Bossa caseFactory=
bossaFactory.defaultBossa();
/*聲明一個模型*/
CaseType case=new CaseType();
/*聲明任務t1至t15,并定義任務操作流程*/
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任務之間的關系,并表示出順序弧和選擇弧*/
t1.outPut(t2);//任務間的關系,該弧(t1,t2)為順序弧
t2.outPut(t3,true);//選擇弧(t2,true,t3),定義條件成立的后續(xù)任務
t2.outPut(t1,false);//選擇弧(t2,false,t1),定義條件不成立的后續(xù)任務
t3.outPut(t4,true);
t3.outPut(t1,false);
....
t14.outPut(t15,false);
}
1) 網(wǎng)絡環(huán)境搭建
以太坊技術平臺運行在點對點網(wǎng)狀網(wǎng)絡環(huán)境中,建立一個點對點的網(wǎng)絡環(huán)境是成功實施認證模型的關鍵。建立P2P網(wǎng)絡連接需要進行網(wǎng)絡通訊方式的初始化,將加入網(wǎng)絡的節(jié)點地址保存在節(jié)點堆棧中[10],設置網(wǎng)絡連接狀態(tài)信息和錯誤審計,對通訊狀態(tài)信息進行同步處理。在網(wǎng)絡中要支持節(jié)點發(fā)布交易廣播,網(wǎng)絡要能接受新節(jié)點并同步處理新節(jié)點的網(wǎng)絡互聯(lián)請求。搭建網(wǎng)絡環(huán)境的主要命令如下:
if exist config_File del config_File;//刪除原有的網(wǎng)絡配置文件
set init_Socket = (P2P_Protocol_File) ;//將P2P協(xié)議作為初始網(wǎng)絡通訊方式
set init_Connection= (peer[]); //網(wǎng)絡連接初始化
int32[] peer=sockets.push(IP[]);//將網(wǎng)絡節(jié)點加入到節(jié)點堆棧中
set init_Message=Handler(p);//設置提示信息
goto Error_Tracer(msg);//網(wǎng)絡錯誤狀態(tài)審計
printf(p,broadcast_Msg(hash Trantion));//向P2P網(wǎng)絡廣播交易地址
do sync_Message_Handler(msg); //同步處理通訊狀態(tài)信息
do Error_Message_Handler = (msg);//對網(wǎng)絡通訊錯誤進行實時處理
connect newPeers = (newP) ; //處理新加入的節(jié)點
2) 合約部署
部署合約需要一個Ether賬戶,且該賬戶必須解鎖。通過賬戶裝載智能合約,編譯后得到應用程序接口信息,通過本地程序調用web3 deploy進行挖礦確認,在本地程序中通過abi獲取合約對象,完成合約的部署,最后根據(jù)任務需要來調用合約。智能合約部署過程如圖11所示。
智能合約部署需要使用以太坊的Geth工具,按照智能合約的部署過程,需要新建一個賬戶,該賬戶在默認情況下包含用戶名和密碼兩個字段,新賬戶需要通過挖礦激活,獲得以太坊的賬戶的注冊權,解鎖在以太坊注冊的賬戶,以便執(zhí)行后續(xù)部署命令。利用web3 js來裝載應用程序接口,通過接口生成一個智能合約變量,用于保存實例化后的智能合約對象,部署完成后就可以調用智能合約執(zhí)行身份模型中定義的任務函數(shù)[11]。部署和調用智能合約的主要命令如下:
personal user=personal.newAccount(′user′,’password′)//新建一個賬戶信息
miner.start()&miner.stop()//開始挖礦,獲得ether的注冊權
personal.unlockAccount(user)//解鎖ether賬戶
myAPI = web3.ether.contract(abi)//裝載interface
Contract MyEtherContract= myAPI.new()//生成一個默認的智能合約對象
MyEtherContract = ether.contract(abi)//獲取合約對象
myEtherContract= MyEtherContract.at(hash(address))//合約對象實例化
myEtherContract.multiply.call(function T1)//調用合約對象,執(zhí)行模型任務
區(qū)塊鏈技術和中心化的數(shù)據(jù)庫管理系統(tǒng)在數(shù)據(jù)存儲和操作方式有很多不同之處,傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)采用關系數(shù)據(jù)庫存儲數(shù)據(jù),利用開放數(shù)據(jù)連接實現(xiàn)對數(shù)據(jù)庫的操作,而以太坊應用數(shù)據(jù)存儲在分布式共享層次數(shù)據(jù)庫中,利用智能合約實現(xiàn)數(shù)據(jù)的寫入,數(shù)據(jù)審核不依賴系統(tǒng)管理員,而通過共識機制由節(jié)點共同驗證。鑒于以太坊框架的技術特點,身份認證模型需要對任務類型進行分類,本地任務的數(shù)據(jù)處理在本地完成,共識任務需要考慮共識計算過程。身份認證模型實施時采用任務流程引擎對任務及任務關系進行描述,任務的具體實現(xiàn)代碼利用函數(shù)來封裝運行,認證模型任務需要對共享賬本操作時,通過在本地函數(shù)中調用以太坊智能合約來完成操作。本文論述的建模和實現(xiàn)方法不但適用于身份認證系統(tǒng)的設計和開發(fā),對其他類型的去中心化應用也具有借鑒意義。文中使用的身份認證模型案例所包含的功能為認證系統(tǒng)最基本的功能,不同應用領域的身份認證模型還需要根據(jù)實際需求進行必要的功能擴展,操作任務的劃分也需要進一步細化,本地程序的實現(xiàn)需要根據(jù)程序設計語言和程序運行環(huán)境做必要的修改,流程引擎選擇時要注意與開發(fā)語言的匹配。