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

?

基于區(qū)塊鏈的身份托管模型研究

2020-02-18 15:17鄧小鴻朱年紅王智強(qiáng)王俊彬
關(guān)鍵詞:公鑰合約密碼

鄧小鴻,朱年紅,黃 磊,王智強(qiáng),王俊彬

1.江西理工大學(xué) 應(yīng)用科學(xué)學(xué)院,江西 贛州341000

2.江西理工大學(xué) 信息工程學(xué)院,江西 贛州341000

1 引言

互聯(lián)網(wǎng)和移動(dòng)應(yīng)用的飛速發(fā)展,產(chǎn)生了大量涉及各行各業(yè)的應(yīng)用系統(tǒng),人們?cè)絹碓搅?xí)慣通過計(jì)算機(jī)或移動(dòng)設(shè)備享受社交、理財(cái)、購(gòu)物等應(yīng)用系統(tǒng)帶來的便利。通常情況下,人們需要進(jìn)行虛擬身份登錄以便獲取所需的服務(wù)。然而隨著系統(tǒng)應(yīng)用的多元化發(fā)展,人們?cè)诿恳粋€(gè)系統(tǒng)登記的獨(dú)立身份信息越來越多,并且為了安全性考慮,很多系統(tǒng)要求用戶設(shè)置的密碼越來越復(fù)雜,造成記憶難度增大。越來越多的身份信息意味著管理難度增大,維護(hù)成本增加,忘記或者遺失身份信息給人們?cè)斐奢^大的困擾。因此,對(duì)用戶在不同系統(tǒng)留下的身份信息進(jìn)行安全管理具有重要意義。

現(xiàn)有的身份管理都在中心化存儲(chǔ)環(huán)境下,用戶的密碼經(jīng)哈希加密存儲(chǔ)在系統(tǒng)對(duì)應(yīng)的中心化數(shù)據(jù)庫中,登錄的時(shí)候?qū)⒂脩籼峁┑拿艽a哈希加密之后再與數(shù)據(jù)庫中的數(shù)據(jù)比對(duì)登錄。這種身份托管機(jī)制在實(shí)際應(yīng)用中面臨以下幾個(gè)問題:(1)用戶數(shù)據(jù)由服務(wù)器完全掌控,服務(wù)器出現(xiàn)問題將導(dǎo)致用戶數(shù)據(jù)丟失;(2)各個(gè)系統(tǒng)的信息形成數(shù)據(jù)孤島,難以交互,且有中心化系統(tǒng)帶來的數(shù)據(jù)泄露風(fēng)險(xiǎn);(3)同一個(gè)用戶在登錄不同系統(tǒng)的時(shí)候都需要進(jìn)行繁瑣的賬號(hào)密碼驗(yàn)證過程,不同的應(yīng)用系統(tǒng)都需要為此維護(hù)一個(gè)用戶賬號(hào)數(shù)據(jù)庫,對(duì)中心化數(shù)據(jù)庫的頻繁訪問,加大了數(shù)據(jù)泄露的風(fēng)險(xiǎn)和運(yùn)維成本。為了解決同一個(gè)用戶登錄不同應(yīng)用系統(tǒng)需要進(jìn)行多次身份驗(yàn)證的問題,研究者們提出使用一個(gè)通用賬號(hào)來登錄不同系統(tǒng)。Lin[1]提出了一種基于Chebyshev混沌映射的獨(dú)立多服務(wù)器動(dòng)態(tài)ID認(rèn)證方案,該方案不依賴于注冊(cè)中心的存在,每個(gè)用戶只需要保留一個(gè)密碼即可訪問不同服務(wù)器的資源,適用于不可信多服務(wù)器環(huán)境。在同一域中,單點(diǎn)登錄是另外一種登錄方案,能夠?qū)崿F(xiàn)在多個(gè)系統(tǒng)中,用戶登錄一次便可以訪問所有互相信任的應(yīng)用系統(tǒng),這種方式一般使用共享Cookie或Session的方式來實(shí)現(xiàn)。例如黃琛等人[2]提出一種兼容多種身份認(rèn)證的Web單點(diǎn)登錄方案,利用ticket代理技術(shù)實(shí)現(xiàn)兼容多認(rèn)證方式,并基于證書鏈信任關(guān)系建立認(rèn)證信任鏈以實(shí)現(xiàn)跨域范圍的單點(diǎn)登錄,具備高強(qiáng)度的安全性。李小標(biāo)等人[3]則基于公鑰基礎(chǔ)設(shè)施(Public Key Infrastructure,PKI)和權(quán)限管理基礎(chǔ)設(shè)施(Privilege Management Infrastructure,PMI),服務(wù)端以中間件的方式實(shí)現(xiàn)認(rèn)證、鑒權(quán)、審計(jì)功能,客戶端采用安全cookie、共享內(nèi)存與ticket技術(shù)實(shí)現(xiàn)跨域單點(diǎn)登錄,解決了多模式應(yīng)用的單點(diǎn)登錄問題。這樣的登錄驗(yàn)證方案可以實(shí)現(xiàn)一個(gè)賬號(hào)登錄多個(gè)系統(tǒng),但是沒有辦法同步賬號(hào)附帶的信息。由于缺少一個(gè)安全的賬號(hào)密碼存儲(chǔ)系統(tǒng),如果一個(gè)系統(tǒng)的密碼被破解,那么其他所有使用同一賬號(hào)的身份信息泄露,存在重大安全隱患。而且使用一個(gè)賬號(hào)登錄不同的系統(tǒng),需要對(duì)現(xiàn)有不同的系統(tǒng)進(jìn)行重構(gòu),工作量巨大,而且這種方式不能夠存儲(chǔ)用戶的喜好以及在不同系統(tǒng)的附屬信息。

區(qū)塊鏈技術(shù)是一種去中心化的密碼學(xué)安全的分布式存儲(chǔ)技術(shù)。區(qū)塊鏈為許多傳統(tǒng)行業(yè)帶來新的應(yīng)用模式。隨著近年來越來越多基于區(qū)塊鏈的應(yīng)用落地,區(qū)塊鏈已經(jīng)成為和人工智能、物聯(lián)網(wǎng)等并肩的前沿技術(shù)。錢衛(wèi)寧等人[4]針對(duì)區(qū)塊鏈在可信數(shù)據(jù)管理方面的研究表明,區(qū)塊鏈滿足可信數(shù)據(jù)管理的要求,能為可信數(shù)據(jù)管理提供一種新的方法。區(qū)塊鏈天然的不可篡改、分布式等特性,能夠滿足身份信息的安全存儲(chǔ)要求。因此,本文提出一種基于區(qū)塊鏈的身份托管模型。模型使用區(qū)塊鏈的分布式存儲(chǔ)方案解決了單點(diǎn)失效帶來的安全隱患,并使用橢圓曲線簽名算法來進(jìn)行登錄驗(yàn)證、接管賬號(hào)登錄和存儲(chǔ)業(yè)務(wù),有效解決了中心化身份認(rèn)證存在的問題,并方便用戶管理諸多密碼和便捷地進(jìn)行相關(guān)系統(tǒng)登錄驗(yàn)證。

2 相關(guān)知識(shí)介紹

2.1 區(qū)塊鏈存儲(chǔ)結(jié)構(gòu)

區(qū)塊鏈?zhǔn)且环N典型的鏈?zhǔn)浇Y(jié)構(gòu),其數(shù)據(jù)存儲(chǔ)在首尾相連的區(qū)塊中,其存儲(chǔ)結(jié)果如圖1所示。區(qū)塊通常包含區(qū)塊頭和區(qū)塊體兩部分。以比特幣[5]為例,區(qū)塊頭中存儲(chǔ)了上一個(gè)區(qū)塊的哈希值、版本號(hào)、時(shí)間戳、交易指紋、挖礦的難度系數(shù)和一個(gè)隨機(jī)數(shù),區(qū)塊體中存儲(chǔ)著交易的詳細(xì)信息,所有的交易以Merkle樹(一種哈希二叉樹)的結(jié)構(gòu)存儲(chǔ)。這種結(jié)構(gòu)將同一時(shí)間段內(nèi)的交易按順序排列,每?jī)晒P交易串聯(lián)進(jìn)行哈希計(jì)算得到父節(jié)點(diǎn)哈希值,以此類推,最終在樹的頂點(diǎn)處得到這一時(shí)間段內(nèi)所有交易的數(shù)字指紋,將其存儲(chǔ)至區(qū)塊頭,在現(xiàn)有的區(qū)塊鏈架構(gòu)體系中大多保留了這種交易存儲(chǔ)結(jié)構(gòu)。區(qū)塊鏈網(wǎng)絡(luò)中的每一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)都存儲(chǔ)有完全相同的一份交易數(shù)據(jù),這些交易數(shù)據(jù)與區(qū)塊鏈當(dāng)前的狀態(tài)和歷史記錄被存儲(chǔ)在LevelDB、CouchDB等鍵值數(shù)據(jù)庫中。

2.2 智能合約

圖1 區(qū)塊鏈存儲(chǔ)結(jié)構(gòu)

智能合約的概念最早于1995年由學(xué)者Szabo[6]提出。智能合約是由參與方共同制定、嚴(yán)格遵守,并在計(jì)算機(jī)上運(yùn)行的一串二進(jìn)制代碼,最初是設(shè)計(jì)用來在沒有可信第三方情況下,保證事先定義好的合約條款,以計(jì)算機(jī)程序的形式如約運(yùn)行。受限于當(dāng)時(shí)計(jì)算機(jī)技術(shù)發(fā)展緩慢,智能合約難以找到足夠安全可靠的運(yùn)行環(huán)境,因而沒有得到進(jìn)一步的發(fā)展。比特幣系統(tǒng)的出現(xiàn),帶動(dòng)了區(qū)塊鏈技術(shù)的發(fā)展,而智能合約在區(qū)塊鏈的實(shí)現(xiàn)促進(jìn)了區(qū)塊鏈在各種場(chǎng)景的應(yīng)用。智能合約的實(shí)現(xiàn),本質(zhì)上是通過賦予對(duì)象(如資產(chǎn)、市場(chǎng)、系統(tǒng)、行為等)數(shù)字特性,即將對(duì)象程序化并部署在區(qū)塊鏈上,成為全網(wǎng)共享的資源,再通過外部事件觸發(fā)合約的自動(dòng)生成與執(zhí)行,進(jìn)而改變區(qū)塊鏈網(wǎng)絡(luò)中數(shù)字對(duì)象的狀態(tài)(如分配、轉(zhuǎn)移)和數(shù)值[7]。歐陽麗煒等人[8]提出了由基礎(chǔ)設(shè)施層、合約層、運(yùn)維層、智能層、表現(xiàn)層和應(yīng)用層組成的智能合約基礎(chǔ)模型,很好地歸納了智能合約的特點(diǎn)。Christidis等人[9]對(duì)智能合約在物聯(lián)網(wǎng)方向應(yīng)用的研究表明,區(qū)塊鏈和物聯(lián)網(wǎng)通過智能合約融合,可以在多個(gè)行業(yè)實(shí)現(xiàn)重大變革轉(zhuǎn)換,為新的業(yè)務(wù)模型和新穎的分布式應(yīng)用鋪平了道路。以太坊是最早支持智能合約部署的區(qū)塊鏈架構(gòu)之一。Cruz等人[10]提出一個(gè)智能合約實(shí)現(xiàn)的基于角色的訪問控制,使用區(qū)塊鏈標(biāo)識(shí)訪問控制中的信任和認(rèn)可關(guān)系,在以太坊智能合約平臺(tái)已經(jīng)構(gòu)建實(shí)現(xiàn)。同樣的還有張帥等人[11]在以太坊智能合約平臺(tái)部署的眾籌智能合約,實(shí)現(xiàn)了眾籌項(xiàng)目的自治化和可靠性,而且提高了項(xiàng)目可信性和公信力。圖2給出了智能合約的工作原理,在區(qū)塊鏈網(wǎng)絡(luò)中,智能合約在每個(gè)節(jié)點(diǎn)的一個(gè)獨(dú)立空間運(yùn)行,智能合約負(fù)責(zé)區(qū)塊鏈網(wǎng)絡(luò)的權(quán)限控制,對(duì)區(qū)塊鏈數(shù)據(jù)的存儲(chǔ),以及對(duì)數(shù)據(jù)的訪問,只有滿足智能合約的條款才能對(duì)數(shù)據(jù)進(jìn)行操作。另外,智能合約也是區(qū)塊鏈網(wǎng)絡(luò)與外界交互的接口,一般提供區(qū)塊鏈內(nèi)部訪問SDK等,便于用戶獲取鏈上數(shù)據(jù)。

圖2 智能合約原理圖

2.3 橢圓曲線加密算法

RSA是目前應(yīng)用最普遍也是最經(jīng)典的非對(duì)稱加密算法,在智能卡遠(yuǎn)程口令認(rèn)證[12]、電子現(xiàn)金[13]等領(lǐng)域被廣泛使用。RSA算法的安全性由對(duì)極大整數(shù)做因數(shù)分解的難度來決定。一般來說,只要RSA算法的密鑰足夠長(zhǎng),那么用RSA算法加密的信息是無法被破解的,與此同時(shí)密鑰過長(zhǎng)帶來的問題是加密計(jì)算量過大,導(dǎo)致速度慢。

橢圓曲線加密算法(Elliptic Curve Cryptography,ECC)被認(rèn)為是RSA的替代算法,因其更高的安全性,更短的密鑰長(zhǎng)度,所以具有更高的安全強(qiáng)度,例如160位ECC與1 024位RSA、DSA有相同的安全強(qiáng)度,同時(shí)計(jì)算量小,私鑰處理速度快,存儲(chǔ)空間占用小,適用于內(nèi)存受限的設(shè)備[14]。這些優(yōu)點(diǎn)使得ECC具有廣闊的應(yīng)用前景。比特幣底層的區(qū)塊鏈就使用了ECC算法來生成密鑰,現(xiàn)在大多的區(qū)塊鏈架構(gòu)如Hyperledger Fabric等也將ECC算法用于背書簽名等場(chǎng)景。非對(duì)稱加密的解密過程通常計(jì)算量大,橢圓曲線算法本就比RSA算法計(jì)算量小,而一些資源受限的物聯(lián)網(wǎng)設(shè)備,計(jì)算能力通常有限,Lara-Nino等人[15]提出ECC算法的輕量化標(biāo)準(zhǔn),并確定了實(shí)際應(yīng)用解決方案,使其可以更好地在物聯(lián)網(wǎng)小型設(shè)備上工作。

本文使用橢圓曲線數(shù)字簽名算法(Elliptic Curve Digital Signature Algorithm,ECDSA)來實(shí)現(xiàn)登錄驗(yàn)證。設(shè)公鑰、私鑰為Pk、Sk,對(duì)明文M進(jìn)行橢圓曲線簽名,算法流程如圖3所示。

圖3 橢圓曲線簽名算法流程

發(fā)送方對(duì)明文信息簽名,過程如下:

(1)使用SHA算法生成明文M的消息摘要H(M);

(2)使用私鑰對(duì)消息摘要H(M)簽名,得到簽名結(jié)果為一對(duì)大整數(shù)S(r,s);

(3)將明文M和簽名結(jié)果S(r,s)發(fā)送到接收方。

接收方對(duì)簽名進(jìn)行驗(yàn)證,過程如下:

(1)對(duì)明文M進(jìn)行哈希運(yùn)算得到H1(M);

(2)使用發(fā)送方的公鑰Pk對(duì)簽名S(r,s)進(jìn)行驗(yàn)證,得到哈希值H2(M);

(3)若H2(M)=H1(M),則簽名驗(yàn)證成功,即證明明文M屬于發(fā)送方,否則驗(yàn)證失敗。

3 基于區(qū)塊鏈的賬號(hào)托管模型

基于區(qū)塊鏈的賬號(hào)托管模型,主要由賬號(hào)存儲(chǔ)系統(tǒng)和身份驗(yàn)證兩部分構(gòu)成,分別解決身份存儲(chǔ)管理和身份認(rèn)證兩個(gè)關(guān)鍵問題。其中賬號(hào)存儲(chǔ)系統(tǒng)使用區(qū)塊鏈搭建,身份驗(yàn)證采用橢圓曲線簽名算法實(shí)現(xiàn)。

3.1 身份管理系統(tǒng)模型

根據(jù)區(qū)塊鏈應(yīng)用的基本框架,結(jié)合身份托管的流程,設(shè)計(jì)了基于區(qū)塊鏈的身份托管原型系統(tǒng),其結(jié)構(gòu)如圖4所示。

(1)應(yīng)用層和合約層的交互

圖4 身份托管系統(tǒng)結(jié)構(gòu)

用戶在應(yīng)用層對(duì)身份信息進(jìn)行非對(duì)稱加密簽名,將簽名發(fā)到區(qū)塊鏈。智能合約提供身份上鏈服務(wù),將簽名信息保存到區(qū)塊鏈。在用戶登錄的時(shí)候,合約使用公鑰對(duì)簽名信息進(jìn)行驗(yàn)證,返回結(jié)果。同時(shí),智能合約還負(fù)責(zé)區(qū)塊鏈上所有的數(shù)據(jù)狀態(tài)監(jiān)控和管理,將狀態(tài)改變和交易背書信息記錄在賬本中。

(2)共識(shí)層

分布式系統(tǒng)節(jié)點(diǎn)眾多,決策權(quán)分散,難以達(dá)成共識(shí),區(qū)塊鏈中的共識(shí)層解決了這一問題。在身份托管系統(tǒng)中,應(yīng)用層和合約層是業(yè)務(wù)處理核心,負(fù)責(zé)將身份信息正確地傳到區(qū)塊鏈中,而共識(shí)層將這些身份信息按照共識(shí)算法進(jìn)行統(tǒng)一,依次打包同步到區(qū)塊鏈網(wǎng)絡(luò)中的所有分布式節(jié)點(diǎn)中,保證數(shù)據(jù)的一致性。

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

在身份托管系統(tǒng)中,每一組身份信息存儲(chǔ)在區(qū)塊鏈中被視為一筆交易,按照時(shí)間順序存儲(chǔ)在賬本數(shù)據(jù)庫中。每一定量的交易被打包成一個(gè)區(qū)塊,鏈接到前一區(qū)塊,由此形成一條記錄歷史數(shù)據(jù)的完整區(qū)塊鏈,不可篡改且可追溯。

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

區(qū)塊鏈中每一個(gè)節(jié)點(diǎn)都是平等的,因而節(jié)點(diǎn)間通信采用對(duì)等網(wǎng)絡(luò)(Peer to Peer network,P2P網(wǎng)絡(luò)),以扁平式拓?fù)浣Y(jié)構(gòu)相互連通,不存在中心化的特殊節(jié)點(diǎn)。P2P網(wǎng)絡(luò)使用的是Gossip數(shù)據(jù)分發(fā)協(xié)議,能夠優(yōu)化區(qū)塊鏈網(wǎng)絡(luò)性能,滿足區(qū)塊鏈網(wǎng)絡(luò)安全可靠、可擴(kuò)展的要求,并且保證數(shù)據(jù)分發(fā)的完整性和一致性。在身份托管系統(tǒng)中,網(wǎng)絡(luò)層保障節(jié)點(diǎn)間的共識(shí)通信和數(shù)據(jù)分發(fā)。

3.2 身份信息區(qū)塊鏈存儲(chǔ)結(jié)構(gòu)

身份信息區(qū)塊鏈存儲(chǔ)結(jié)構(gòu)如圖5所示。

圖5 區(qū)塊鏈身份存儲(chǔ)結(jié)構(gòu)

其中每一組身份數(shù)據(jù)均至少包含表1所示的三部分。

表1 身份信息區(qū)塊鏈存儲(chǔ)結(jié)構(gòu)

在身份托管系統(tǒng)中,交易ID被用來查找一組唯一的身份信息,對(duì)應(yīng)一個(gè)系統(tǒng)唯一的一個(gè)用戶身份。身份信息是存儲(chǔ)在區(qū)塊鏈中的一個(gè)用戶身份明文信息,用來與公鑰對(duì)簽名驗(yàn)證的結(jié)果進(jìn)行比對(duì)來確認(rèn)用戶的身份。簽名信息是使用非對(duì)稱加密對(duì)一組身份信息的簽名結(jié)果信息,用戶登錄系統(tǒng)使用公鑰對(duì)其進(jìn)行驗(yàn)證。

3.3 智能合約

本模型涉及到的區(qū)塊鏈賬本操作均通過智能合約完成。智能合約主要完成兩部分功能:身份信息上鏈和身份信息驗(yàn)證。

身份信息上鏈的智能合約如下所示:

Input:(1)Username(用戶名);(2)Password(密碼);(3)Sys-Token(系統(tǒng)標(biāo)識(shí));(4)Signature(簽名結(jié)果);(5)Operation(合約操作符)

Output:(1)InvokeResult(合約調(diào)用結(jié)果)

1.InputData←PackageInfo(Username,Password,SysToken,Signature);//打包所有準(zhǔn)備上鏈的信息為固定格式

2.ArgsValidation←CheckArgs(InputData);//檢查參數(shù)函數(shù),返回檢查結(jié)果

3.IdentifyToken←GenerateIdentifyToken(Username,Sys-Token);//將用戶名和系統(tǒng)標(biāo)識(shí)整合為一條身份標(biāo)識(shí)

4.Function ChaincodeInvoke(Operation,InputData);//開始調(diào)用合約

5.if Operation=Storage;//合約操作確定為存儲(chǔ)操作

6. ArgsValidation=CheckArgs(InputData);//先檢查用戶名、簽名等信息的合法性

7. if ArgsValidation=True:

8. StorageAccount(IdentifyToken,InputData);//以[身份標(biāo)識(shí):賬號(hào)信息]鍵值對(duì)存儲(chǔ)到區(qū)塊鏈

9. Return InvokeResult←上鏈成功;

10. else;

11. Return InvokeResult←上鏈?zhǔn)。?/p>

12. end if

13.end if

身份驗(yàn)證智能合約如下所示:

Input:(1)Username(用戶名);(2)SysToken(系統(tǒng)標(biāo)識(shí));(3)PublicKey(公鑰);(4)Operation(合約操作符)

Output:(1)InvokeResult(登錄驗(yàn)證結(jié)果)

1.ArgsValidation←CheckArgs(InputData);//檢查參數(shù)函數(shù),返回檢查結(jié)果

2.IdentifyToken←GenerateIdentifyToken(Username,Sys-Token);//將用戶名和系統(tǒng)標(biāo)識(shí)整合為一條身份標(biāo)識(shí)

3.Username,SysToken,PublicKey←SeparateArgs(Input-Data);//驗(yàn)證參數(shù)拆解函數(shù)

4.HashData←Hash(Password);//哈希加密函數(shù)

5.DecryptoData←Decrypto(PublicKey,Signature);//公鑰驗(yàn)證簽名返回結(jié)果

6.Function ChaincodeInvoke(Operation,InputData);//開始調(diào)用合約

7.if Operation=Verify;//合約操作確定為驗(yàn)證操作

8. ArgsValidation=CheckArgs(InputData);

9. if ArgsValidation=True;

10. Username,SysToken,PublicKey=SeparateArgs(InputData);//拆解參數(shù)得到用戶名、系統(tǒng)標(biāo)識(shí)和簽名

11. IdentifyToken=GenerateIdentifyToken(Username,SysToken);

12. Password,Signature=QueryData(IdentifyToken);//從區(qū)塊鏈查詢身份和簽名信息

13. HashData=Hash(Password);

14. DecryptoData=Decrypto(PublicKey,Signature);

15. if HashData=DecryptoData;

16. Return InvokeResult←驗(yàn)證成功;

17. else;

18. Return InvokeResult←驗(yàn)證失?。?/p>

19. end if

20. end if

21.end if

4 仿真實(shí)驗(yàn)

為了測(cè)試所提出基于區(qū)塊鏈身份托管模型的可行性,使用Hyperledger Fabric聯(lián)盟鏈架構(gòu)搭建賬號(hào)存儲(chǔ)系統(tǒng),使用橢圓曲線簽名模擬驗(yàn)證登錄,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于區(qū)塊鏈的身份托管系統(tǒng)。實(shí)驗(yàn)思路為:將用戶在不同應(yīng)用系統(tǒng)的多個(gè)賬號(hào)使用橢圓曲線簽名存儲(chǔ)在區(qū)塊鏈中,在登錄應(yīng)用系統(tǒng)時(shí),區(qū)塊鏈網(wǎng)絡(luò)通過使用用戶提供的公鑰來檢驗(yàn)簽名的合法性,并將檢驗(yàn)結(jié)果返回給應(yīng)用系統(tǒng),以此實(shí)現(xiàn)用戶的登錄驗(yàn)證。實(shí)驗(yàn)機(jī)器配置為系統(tǒng)macOS10.14.5,處理器1.8 GHz Intel Core i5,內(nèi)存8 GB,1 600 MHz DDR3。實(shí)驗(yàn)環(huán)境為Hyperledger Fabric1.4。使用Golang編程語言完成橢圓曲線簽名和智能合約驗(yàn)證算法。

4.1 區(qū)塊鏈系統(tǒng)架構(gòu)設(shè)計(jì)

在局域網(wǎng)中模擬6個(gè)區(qū)塊鏈節(jié)點(diǎn),代表6個(gè)不同的組織,同一組織下有若干應(yīng)用系統(tǒng),以初始兩個(gè)組織為例進(jìn)行說明,設(shè)計(jì)組織架構(gòu)如表2所示。

表2 區(qū)塊鏈組織

組織中包含的初始節(jié)點(diǎn)如表3所示,每個(gè)組織各包含兩個(gè)初始節(jié)點(diǎn),分別為主節(jié)點(diǎn)、備份節(jié)點(diǎn)。主節(jié)點(diǎn)兼背書節(jié)點(diǎn),對(duì)區(qū)塊鏈上的每一筆交易進(jìn)行背書。新增加的節(jié)點(diǎn)通過CA服務(wù)器發(fā)布證書,連接區(qū)塊鏈網(wǎng)絡(luò)。

表3 區(qū)塊鏈節(jié)點(diǎn)

4.2 系統(tǒng)配置

設(shè)定好組織和節(jié)點(diǎn)之后,創(chuàng)建配置文件,寫入創(chuàng)始?jí)K配置和賬本配置,然后根據(jù)配置文件生成系統(tǒng)組織架構(gòu)。區(qū)塊鏈的第一個(gè)區(qū)塊稱為創(chuàng)始?jí)K,Hyperledger Fabric中的第一個(gè)區(qū)塊是需要手動(dòng)生成的,因此需要定義一個(gè)配置文件來寫入初始配置信息,并由此生成創(chuàng)始?jí)K。準(zhǔn)備證書和創(chuàng)始?jí)K完畢之后,就可以啟動(dòng)節(jié)點(diǎn)了,然后安裝智能合約到節(jié)點(diǎn)中。所有的操作通過Hyperledger Fabric提供的5個(gè)模塊命令cryptogen、peer、orderer、configtxgen、configtxlator來完成。

4.3 身份信息上鏈過程模擬

身份信息上鏈過程如圖6所示。假設(shè)某用戶在應(yīng)用系統(tǒng)System1中的賬號(hào)是“znh”,密碼是“ZHU1234567#”,在應(yīng)用系統(tǒng)System2中的賬號(hào)是“zhu01”,密碼是“pick987456”,使用該用戶的一對(duì)密鑰對(duì)密碼簽名并存儲(chǔ)到區(qū)塊鏈系統(tǒng)。

圖6 身份信息上鏈

(1)用戶獲取密鑰對(duì)

通過Golang提供的ecdsa包編寫密鑰生成程序模擬密鑰分發(fā)機(jī)構(gòu),獲得一對(duì)公鑰和私鑰,并將它們使用pem編碼分別保存在公私鑰文件中,由用戶保存到磁盤,內(nèi)容如下。

私鑰:

-----BEGIN ecdsa private key-----

MHcCAQEEIKDKHMK7rxKeM6MJLdtM7K21SgLwhY FQ946Gbz+a/tO1oAoGCCqGSM49Aw EHoUQDQgAEPeSyb YXmje9w4vC9bOz9aFoYNr+1TjkqK535Car11Qs5rjWExRmm

3rkY9ID/FhuNOM4avOUw4DsyCm4uNH5HhA==

-----END ecdsa private key-----

公鑰:

-----BEGIN ecdsa public key-----

MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPeSy bYXmje9w4vC9bOz9aFoYNr+1

TjkqK535Car11Qs5rjWExRmm3rkY9ID/FhuNOM4avOU w4DsyCm4uNH5HhA==

-----END ecdsa public key-----

(2)對(duì)密碼簽名

用戶分別對(duì)系統(tǒng)System1和System2的密碼進(jìn)行哈希運(yùn)算得到散列值,用戶用私鑰對(duì)該散列值加密運(yùn)算得到簽名S(r,s),r和s是一對(duì)大整數(shù)。然后將簽名S和賬戶密碼發(fā)送給系統(tǒng)。

(3)身份信息上鏈

系統(tǒng)將簽名S、賬戶密碼Password加上自己的系統(tǒng)ID(SysToken)發(fā)送到區(qū)塊鏈網(wǎng)絡(luò),智能合約對(duì)其進(jìn)行驗(yàn)證并保存,結(jié)構(gòu)如下所示。

1.{

2."_id":"system1_znh",

3."_rev":"2-ccb581de9d1b0e17b53b9b74e605809d",

4."Password":"ZHU1234567#",

5."SysToken":"system1_znh",

6."r":"4DDD135559679110647118042865DDDDDD55 11146286028623055625653706849051060181145122657883",

7."s":"7905390495780267907304610411337128067536 1090163383359880313399688887901448672",

8."~version":"u0000CgMBMgA="

9.}

其中id為系統(tǒng)Token和用戶名組合而成。Password為用戶密碼明文,r和s為用戶對(duì)密碼私鑰簽名得到的兩個(gè)大整數(shù)。

4.4 身份驗(yàn)證過程模擬

以用戶登錄系統(tǒng)System1和System2為例,分別使用System1和System2的用戶名和公鑰通過區(qū)塊鏈進(jìn)行登錄驗(yàn)證。登錄驗(yàn)證流程如圖7所示。

圖7 登錄驗(yàn)證流程

(1)用戶發(fā)送公鑰和用戶名給系統(tǒng)。

(2)系統(tǒng)將用戶名、系統(tǒng)Token(系統(tǒng)的唯一標(biāo)識(shí)符)用下劃線拼接為身份索引id發(fā)送到區(qū)塊鏈網(wǎng)絡(luò)。

(3)智能合約根據(jù)id查詢到相應(yīng)的密碼,使用公鑰對(duì)簽名驗(yàn)證。過程為:智能合約對(duì)密碼進(jìn)行哈希運(yùn)算得到散列值,智能合約使用公鑰解密簽名獲得散列值,兩者進(jìn)行對(duì)比驗(yàn)證,將結(jié)果返回給應(yīng)用系統(tǒng)。

(4)客戶端收到結(jié)果,驗(yàn)證成功則登錄成功,否則登錄失敗。

5 實(shí)驗(yàn)結(jié)果及分析

實(shí)驗(yàn)完成了一個(gè)基于區(qū)塊鏈的身份信息存儲(chǔ)系統(tǒng),并模擬了使用公鑰驗(yàn)證橢圓曲線簽名來登錄應(yīng)用系統(tǒng)的過程。驗(yàn)證了用戶通過一對(duì)密鑰來登錄不同應(yīng)用系統(tǒng)的可行性,從而解決了用戶面對(duì)不同應(yīng)用系統(tǒng)需要記住大量賬戶密碼的問題。

(1)安全性分析

Hyperledger Fabric是一種聯(lián)盟鏈架構(gòu),對(duì)數(shù)據(jù)的訪問操作全部通過智能合約控制,只要在智能合約中設(shè)置合理的權(quán)限,數(shù)據(jù)就無法被非法訪問,這樣就保證了區(qū)塊鏈數(shù)據(jù)的安全。在區(qū)塊鏈之外,由于用戶是使用賬號(hào)和公鑰來登錄系統(tǒng),不需要暴露密碼,因而不存在密碼泄露的安全問題。基于區(qū)塊鏈的身份托管模型的安全性主要依賴區(qū)塊鏈系統(tǒng)的安全性。對(duì)區(qū)塊鏈的攻擊有兩方面:一是對(duì)區(qū)塊鏈系統(tǒng)可用性的攻擊,惡意使區(qū)塊鏈停止處理交易;二是對(duì)區(qū)塊鏈智能合約的攻擊,利用智能合約的規(guī)則漏洞產(chǎn)生惡意的交易,這也是破壞性最大的攻擊。本實(shí)驗(yàn)基于最小原型區(qū)塊鏈系統(tǒng)設(shè)計(jì)的智能合約主要分為兩部分功能:數(shù)據(jù)存儲(chǔ)和登錄驗(yàn)證。數(shù)據(jù)存儲(chǔ)嚴(yán)格按照格式存儲(chǔ),登錄驗(yàn)證為簽名的解密過程,只要設(shè)計(jì)合理的校驗(yàn)函數(shù),就能規(guī)避利用智能合約被攻擊的風(fēng)險(xiǎn)。

(2)性能分析

性能不足是區(qū)塊鏈面臨的挑戰(zhàn)之一。區(qū)塊鏈的性能指標(biāo)主要有交易吞吐量和交易時(shí)延兩個(gè)。交易吞吐量是指在固定時(shí)間區(qū)塊鏈網(wǎng)絡(luò)能處理的交易數(shù)量,而交易時(shí)延是區(qū)塊鏈對(duì)交易的響應(yīng)和處理時(shí)間。本實(shí)驗(yàn)使用Caliper對(duì)身份托管系統(tǒng)中的區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行綜合性能測(cè)試,從數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)查詢兩方面,得到相關(guān)測(cè)試數(shù)據(jù),如表4所示。

相對(duì)于比特幣每秒7筆交易的吞吐量,本實(shí)驗(yàn)搭建的區(qū)塊鏈網(wǎng)絡(luò)吞吐量為存儲(chǔ)操作每秒13.2筆交易,查詢操作每秒51.4筆交易,有一定的提升,但是在面對(duì)高并發(fā)登錄的情況時(shí),有待進(jìn)一步改善。

智能合約控制著區(qū)塊鏈數(shù)據(jù)的存儲(chǔ)和查詢,其運(yùn)行效率直接決定數(shù)據(jù)交易處理的性能。本實(shí)驗(yàn)使用Benchmark測(cè)試框架單獨(dú)對(duì)智能合約進(jìn)行壓力測(cè)試。一共進(jìn)行5輪測(cè)試,每輪的加密簽名過程測(cè)試10 000次,驗(yàn)證簽名測(cè)試5 000次,得到每次加解密操作的耗時(shí)數(shù)據(jù),繪制折線如圖8所示。

由實(shí)驗(yàn)數(shù)據(jù)可知,每次簽名操作耗時(shí)平均為113.721 2 ms(約0.000 11 s),每次驗(yàn)證簽名操作耗時(shí)平均為278.803 2 ms(約0.000 28 s)。相對(duì)來說解密操作比加密操作耗時(shí),但這兩種操作均低于1 ms,具有較高的時(shí)間效率。

表4 區(qū)塊鏈網(wǎng)絡(luò)性能指數(shù)

圖8 智能合約加解密性能

(3)可行性分析

基于區(qū)塊鏈的身份托管系統(tǒng)模型主要由區(qū)塊鏈存儲(chǔ)系統(tǒng)和登錄驗(yàn)證流程智能合約組成。區(qū)塊鏈存儲(chǔ)系統(tǒng)基于Hyperledger Fabric已經(jīng)實(shí)現(xiàn),以Golang開發(fā)的智能合約對(duì)簽名進(jìn)行校驗(yàn),能正確地驗(yàn)證用戶身份信息,結(jié)果表明是可行的。由于應(yīng)用系統(tǒng)的復(fù)雜多樣性,實(shí)驗(yàn)只模擬了在客戶端用戶對(duì)密碼進(jìn)行加密簽名的過程,實(shí)際應(yīng)用可以在系統(tǒng)中增設(shè)一個(gè)加密接口,用來對(duì)密碼簽名。區(qū)塊鏈登錄接口可以使用中間件或者微服務(wù)的形式實(shí)現(xiàn)。這些都有成熟的技術(shù)架構(gòu),能夠很好地滿足需求?;谝陨戏治?,本文提出的區(qū)塊鏈身份托管模型是可行的。

6 結(jié)束語

本文提出了一個(gè)基于區(qū)塊鏈技術(shù)的身份托管系統(tǒng)模型,將用戶的賬號(hào)密碼存儲(chǔ)在區(qū)塊鏈之后,用戶僅需使用用戶名和同一個(gè)公鑰即可完成不同應(yīng)用系統(tǒng)的登錄校驗(yàn),為應(yīng)用系統(tǒng)的訪問提供一種新的身份驗(yàn)證模式。實(shí)驗(yàn)過程設(shè)計(jì)了基于區(qū)塊鏈的身份存儲(chǔ)數(shù)據(jù)結(jié)構(gòu),以及相關(guān)智能合約,完成對(duì)身份信息的存儲(chǔ)和校驗(yàn),在登錄驗(yàn)證環(huán)節(jié),采用橢圓曲線簽名算法進(jìn)行賬號(hào)驗(yàn)證,解決了一個(gè)用戶需要記住多個(gè)不同應(yīng)用系統(tǒng)不同密碼的問題。本文實(shí)驗(yàn)?zāi)M登錄部分,是在本地局域網(wǎng)環(huán)境完成,實(shí)際應(yīng)用可能會(huì)有高并發(fā)的請(qǐng)求,因此可將智能合約使用公鑰驗(yàn)證簽名部分轉(zhuǎn)移到中間件接口,以降低高并發(fā)的計(jì)算量,減輕區(qū)塊鏈網(wǎng)絡(luò)壓力,加快登錄驗(yàn)證過程。以上問題將在后續(xù)研究中進(jìn)行深入探索。

猜你喜歡
公鑰合約密碼
密碼里的愛
密碼抗倭立奇功
一種基于混沌的公鑰加密方案
神奇的公鑰密碼
P2X7 receptor antagonism in amyotrophic lateral sclerosis
密碼藏在何處
SM2橢圓曲線公鑰密碼算法綜述
奪命密碼
合約必守,誰能例外!——對(duì)“情勢(shì)變更”制度不可寄于過高期望
巴马| 烟台市| 巩留县| 青阳县| 广平县| 桑日县| 漳州市| 历史| 东阳市| 苍梧县| 武威市| 连城县| 海口市| 丹凤县| 正镶白旗| 武宁县| 福州市| 佳木斯市| 磐安县| 延寿县| 嫩江县| 温宿县| 东方市| 济南市| 南汇区| 共和县| 梁河县| 孟州市| 满城县| 鹿邑县| 台北市| 泰顺县| 五家渠市| 罗山县| 青铜峡市| 定南县| 綦江县| 金塔县| 历史| 哈密市| 大渡口区|