黃逸翔,王亞威,陳文軒,張子蛟
(1.鄭州大學(xué) 軟件學(xué)院,河南 鄭州 450000;2. 鄭州大學(xué) 網(wǎng)絡(luò)管理中心,河南 鄭州 450000)
由于計(jì)算機(jī)只能通過識(shí)別用戶的數(shù)字身份來進(jìn)行身份驗(yàn)證,所有對(duì)用戶的授權(quán)操作都依賴于針對(duì)用戶數(shù)字身份的授權(quán)[1]。身份認(rèn)證技術(shù)就起到了決定性作用。公鑰基礎(chǔ)設(shè)施(public key infrastructure,PKI)作為互聯(lián)網(wǎng)安全基礎(chǔ)設(shè)施,從多個(gè)方面為身份驗(yàn)證提供安全服務(wù)。文獻(xiàn)[2]闡明了PKI提供安全保障服務(wù)的完整過程。對(duì)數(shù)字證書的集中管理,進(jìn)行在證書頒發(fā)機(jī)構(gòu)(certificate authority,CA)上。CA是證書的簽發(fā)機(jī)構(gòu),它是PKI的核心,是信任的起點(diǎn)。認(rèn)證中心CA進(jìn)行證書簽發(fā)、證書更新、證書撤銷等操作,并負(fù)責(zé)定期將過期證書發(fā)布到證書廢除列表CRL中[3]。它為每個(gè)使用公開密鑰的用戶發(fā)放一個(gè)數(shù)字證書,該證書是不能偽造和篡改的。信任某CA所頒發(fā)的數(shù)字證書的前提是信任該CA。
但是,由于傳統(tǒng)PKI體系結(jié)構(gòu)是樹形結(jié)構(gòu)的,在特定應(yīng)用中PKI技術(shù)存在一些缺陷。處于核心地位的CA顯得十分薄弱,一旦遭受攻擊,CA根證書以及該CA已經(jīng)簽發(fā)的證書都不能再作為信任錨點(diǎn),各種單點(diǎn)故障問題暴露無遺。同時(shí)用戶配置證書和安裝證書到目標(biāo)設(shè)備過程極其復(fù)雜,在需要批量配置時(shí)效率極低,要求極高的成本和管理開銷。當(dāng)用戶涉及到多個(gè)CA的時(shí)候,不同CA之間的無法驗(yàn)證的問題又使得用戶操作變得十分繁瑣,存在多CA互信難的問題。
文獻(xiàn)[4,5]闡述了區(qū)塊鏈技術(shù)優(yōu)勢和應(yīng)用前景。研究表明區(qū)塊鏈有利于在人工智能和人類增強(qiáng)領(lǐng)域得到應(yīng)用。隨著區(qū)塊鏈技術(shù)在身份認(rèn)證領(lǐng)域的應(yīng)用研究,區(qū)塊鏈技術(shù)將會(huì)解決傳統(tǒng)PKI體系中遇到的問題。
本文設(shè)計(jì)了一種基于區(qū)塊鏈的PKI系統(tǒng),并對(duì)系統(tǒng)進(jìn)行了架構(gòu)和網(wǎng)絡(luò)拓?fù)涞脑O(shè)計(jì),同時(shí)使用一套鏈上證書管理方案,將證書及證書操作記錄存儲(chǔ)到區(qū)塊鏈上。通過標(biāo)準(zhǔn)驗(yàn)證和區(qū)塊鏈驗(yàn)證相結(jié)合的方式來實(shí)現(xiàn)證書驗(yàn)證。在查詢證書時(shí),可以向區(qū)塊鏈中的任意一個(gè)節(jié)點(diǎn)查詢,從而避免單點(diǎn)故障問題。采用聯(lián)盟鏈作為模型結(jié)構(gòu),通過對(duì)X.509數(shù)字證書進(jìn)行改進(jìn),使用實(shí)體雙向認(rèn)證來實(shí)現(xiàn)跨域認(rèn)證,同時(shí)從證書鏈入手,簡化證書路徑,降低跨域認(rèn)證的復(fù)雜度,減少簽名次數(shù),提高跨域認(rèn)證效率,解決上述問題。并在最后進(jìn)行模擬實(shí)驗(yàn)對(duì)模型進(jìn)行分析。
文獻(xiàn)[6,7]分析了比特幣的信任機(jī)制和數(shù)字貨幣功能,使用區(qū)塊鏈技術(shù)保證交易和操作的正確性成為了可能。區(qū)塊鏈協(xié)議固有的特性限制了交易的吞吐量和延遲,文獻(xiàn)[8]提出了基于Bitcoin的可擴(kuò)展協(xié)議,使用比特幣的共享信任模型,提高了交易實(shí)時(shí)性,并且具有容錯(cuò)性和魯棒性。當(dāng)合同發(fā)生違約或中止時(shí),去中心化區(qū)塊鏈能夠確保實(shí)施相應(yīng)的賠償政策,然而現(xiàn)有的交易系統(tǒng)缺乏對(duì)用戶的隱私保護(hù),所有的交易信息可通過區(qū)塊鏈進(jìn)行查詢,文獻(xiàn)[9]提出了一種去中心化智能合約系統(tǒng),間接存儲(chǔ)區(qū)塊鏈交易數(shù)據(jù),達(dá)到了保護(hù)用戶隱私的目的。因此區(qū)塊鏈技術(shù)具有不可比擬的獨(dú)特優(yōu)勢,把區(qū)塊鏈技術(shù)運(yùn)用到公鑰基礎(chǔ)設(shè)施中正好可以解決上述問題。所以本文設(shè)計(jì)基于區(qū)塊鏈技術(shù)的PKI系統(tǒng),利用區(qū)塊鏈的特性解決PKI的單點(diǎn)故障問題,同時(shí)把不同域的根CA加入到聯(lián)盟鏈中,使得各個(gè)CA中心之間無障礙互信,解決了多CA互信難的問題,并提高證書部署的實(shí)際效率。
伴隨著區(qū)塊鏈技術(shù)在各行各業(yè)的應(yīng)用研究,在身份認(rèn)證領(lǐng)域,區(qū)塊鏈的引入對(duì)PKI體系的發(fā)展也起到了積極作用。2014年,美國學(xué)者Conner提出了第一個(gè)將區(qū)塊鏈技術(shù)與PKI相結(jié)合的例子Certcoin,使用區(qū)塊鏈的分布式賬本來記錄域名和公鑰,通過區(qū)塊鏈的交易來實(shí)現(xiàn)證書管理,使用Merkle樹記錄的Hash值來實(shí)現(xiàn)身份的驗(yàn)證。但由于區(qū)塊鏈中的信息都是公開透明的,所以在Certcoin中,用戶的隱私不受到保護(hù)。隨后,文 獻(xiàn)[10,11]提出了新的PB-PKI(privacy-awareness in blockchain-based PKI)模型,該模型使用不同密鑰的方式對(duì)用戶隱私進(jìn)行了保護(hù),同時(shí)設(shè)置多種用戶隱私等級(jí),減少了用戶隱私被泄露的風(fēng)險(xiǎn)。文獻(xiàn)[12,13]提出了一種及時(shí)響應(yīng)的PKI框架IKP(instant karma PKI),通過利用智能合約和基于區(qū)塊鏈的共識(shí)機(jī)制,對(duì)IKP的權(quán)力進(jìn)行分散,利用自動(dòng)激勵(lì)措施,針對(duì)檢測器進(jìn)行獎(jiǎng)勵(lì)和對(duì)違法CA的懲罰來保證體系安全??缬蛘J(rèn)證是通過不同域之間建立信任關(guān)系,來實(shí)現(xiàn)一個(gè)域請(qǐng)求另一個(gè)域中的資源。
Kerberos系統(tǒng)是最早出現(xiàn)的跨域認(rèn)證案例,使用非對(duì)稱密碼技術(shù)建立,但該技術(shù)僅適用于特定的Kerbers域中。文獻(xiàn)[14]提出了一種基于公鑰的分布式身份認(rèn)證模型,該模型具有良好的可擴(kuò)展性,為后續(xù)的拓展研究提供了基礎(chǔ)。文獻(xiàn)[15]以基于身份的密碼體制為基礎(chǔ),提出了一種基于身份的多信任域認(rèn)證模型,但因其用戶需要多次完成雙線性對(duì)運(yùn)算,導(dǎo)致計(jì)算開銷過大。在跨域認(rèn)證方面,文獻(xiàn)[16]提出了一種基于PKI域和IBC域之間的異構(gòu)跨域認(rèn)證密鑰協(xié)商方案,該方案可以保證較高的安全性和效率,但該方案只針對(duì)EIM環(huán)境下的異構(gòu)企業(yè)之間。文獻(xiàn)[17]提出一種基于區(qū)塊鏈的跨異構(gòu)域認(rèn)證方案,采用將IBC域中的區(qū)塊鏈域代理服務(wù)器和PKI域區(qū)塊鏈證書服務(wù)器加入到聯(lián)盟鏈中方法,實(shí)現(xiàn)了IBC域和PKI域之間的跨異構(gòu)域認(rèn)證,并且降低用戶終端的計(jì)算量,但因?yàn)閰^(qū)塊鏈系統(tǒng)中數(shù)據(jù)只增不刪,引起存儲(chǔ)數(shù)據(jù)而帶來的系統(tǒng)的開銷浪費(fèi)。
根據(jù)區(qū)塊鏈的開放對(duì)象的不同,參與者和權(quán)限的差異,區(qū)塊鏈的應(yīng)用模式被分為以下3種類型:公有區(qū)塊鏈(public blockchain)、行業(yè)區(qū)塊鏈(consortium blockchain)、私有區(qū)塊鏈(private blockchain)。這里考慮到一方面要符合用戶、CA中心等多域間跨域認(rèn)證需要,另一方面由于區(qū)塊鏈公式算法不同,聯(lián)盟鏈效率較高,系統(tǒng)可擴(kuò)展性強(qiáng)的特點(diǎn),選用其為原型。
出于對(duì)未來實(shí)用化時(shí)方便拓展和改進(jìn)的準(zhǔn)備,本文使用模塊化思想進(jìn)行PKI系統(tǒng)的概念設(shè)計(jì),基于區(qū)塊鏈的PKI系統(tǒng)的架構(gòu)設(shè)計(jì)如圖1所示。
圖1 基于區(qū)塊鏈的PKI系統(tǒng)架構(gòu)
架構(gòu)中基本要素包括:
證書用戶:指PKI系統(tǒng)中證書的實(shí)際擁有者。
PKI系統(tǒng):用于完成傳統(tǒng)PKI體系中RA中心功能的注冊中心RA,負(fù)責(zé)審核用戶的數(shù)字證書申請(qǐng),并將用戶申請(qǐng)轉(zhuǎn)交給證書頒發(fā)機(jī)構(gòu)CA;負(fù)責(zé)證書發(fā)放和證書生命周期管理的證書頒發(fā)機(jī)構(gòu)CA;包括共識(shí)機(jī)制策略管理、節(jié)點(diǎn)管理和智能合約管理的區(qū)塊鏈管理部分,負(fù)責(zé)將PKI系統(tǒng)產(chǎn)生的數(shù)字證書和證書操作過程寫入到區(qū)塊鏈中。
區(qū)塊鏈平臺(tái):結(jié)合以太坊(ethereum,ETH)設(shè)計(jì)靈活、適應(yīng)性強(qiáng)、對(duì)智能合約支持能力強(qiáng)大等特點(diǎn)。它支持任何人在上面創(chuàng)建和使用通過區(qū)塊鏈技術(shù)運(yùn)行的去中心化應(yīng)用(decentralized application,DApp)。
針對(duì)基于區(qū)塊鏈的PKI系統(tǒng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)設(shè)計(jì),區(qū)塊鏈網(wǎng)絡(luò)中主要部署了背書節(jié)點(diǎn)、記賬節(jié)點(diǎn)、主節(jié)點(diǎn)和排序服務(wù)節(jié)點(diǎn)。設(shè)計(jì)背書交易、成塊交易、提交與確認(rèn)等交易流程來實(shí)現(xiàn)PKI證書在區(qū)塊鏈上進(jìn)行存儲(chǔ)。將所有有關(guān)證書的操作,都視為區(qū)塊鏈平臺(tái)中的一筆交易進(jìn)行處理,來實(shí)現(xiàn)基于區(qū)塊鏈的PKI系統(tǒng)的證書管理。
在證書使用者和證書依賴方之間建立信任關(guān)系,采用將數(shù)字證書和證書操作記錄存儲(chǔ)到區(qū)塊鏈中的方式,使得用戶在查詢證書時(shí),可以向區(qū)塊鏈中的任意一個(gè)節(jié)點(diǎn)查詢,從而避免單點(diǎn)故障問題。實(shí)際驗(yàn)證過程在保證標(biāo)準(zhǔn)的CA證書驗(yàn)證過程的基礎(chǔ)上,當(dāng)中間證書服務(wù)器或根證書服務(wù)器發(fā)生故障的情況下,才使用區(qū)塊鏈上的驗(yàn)證過程。其核心操作是,對(duì)證書進(jìn)行哈希運(yùn)算,得到一個(gè)哈希值并以此為關(guān)鍵參數(shù),將對(duì)證書的驗(yàn)證轉(zhuǎn)換為對(duì)交易的驗(yàn)證,用戶到區(qū)塊鏈平臺(tái)上查詢證書的合法性。驗(yàn)證過程如圖2所示。
圖2 基于區(qū)塊鏈改進(jìn)后的CA證書驗(yàn)證過程
通過分析信任列表信任模型、交叉認(rèn)證信任模型、根CA信任模型和橋CA信任模型等多個(gè)模型的安全屬性,確定出基于聯(lián)盟鏈的跨域認(rèn)證模型,如圖3所示。由根CA、CA、用戶、聯(lián)盟鏈平臺(tái)等組成,把每個(gè)域內(nèi)的根CA加入到聯(lián)盟鏈網(wǎng)絡(luò)中,共同構(gòu)建多中心的聯(lián)盟鏈平臺(tái)。
圖3 本文聯(lián)盟鏈跨域認(rèn)證模型
認(rèn)證思路如下:PKI使用的信任模型是基于CA域來描述的,獨(dú)立的CA認(rèn)證中心及其所管理的范圍構(gòu)成一個(gè)CA信任域,并以其為單位進(jìn)行跨域通信。將A域用戶和B域用戶的鏈證書的哈希值存儲(chǔ)到區(qū)塊鏈中,當(dāng)A域用戶請(qǐng)求訪問B域的資源時(shí),A域的用戶將自己的簽名、區(qū)塊鏈證書和隨機(jī)數(shù)發(fā)送給B域的認(rèn)證服務(wù)器,B域認(rèn)證服務(wù)器對(duì)收到的信息進(jìn)行驗(yàn)證,驗(yàn)證A域用戶的根CA區(qū)塊鏈證書的哈希值,如果驗(yàn)證通過,則A域用戶被允許跨域訪問B域服務(wù)器資源。
CA對(duì)傳輸數(shù)據(jù)的加密、解密、數(shù)字簽名和身份驗(yàn)證等操作都是依賴數(shù)字證書,PKI體系就是依據(jù)數(shù)字證書實(shí)現(xiàn)的。本文通過以X.509證書為基礎(chǔ)進(jìn)行改進(jìn),來設(shè)計(jì)一種區(qū)塊鏈證書,并將其存儲(chǔ)于聯(lián)盟鏈中,作為跨域認(rèn)證模型的信任憑證。區(qū)塊鏈證書結(jié)構(gòu)如圖4所示。
圖4 本文設(shè)計(jì)的區(qū)塊鏈證書
設(shè)計(jì)方案如下:
(1)去除頒布者標(biāo)識(shí)和主體標(biāo)識(shí)
傳統(tǒng)X.509數(shù)字證書中,證書頒布者和證書擁有者的唯一標(biāo)識(shí)屬于可選項(xiàng),一句具體應(yīng)用需要來確定是否使用。在區(qū)塊鏈上信任域中的實(shí)體對(duì)象有效,頒布節(jié)點(diǎn)和持有節(jié)點(diǎn)可以驗(yàn)證證書的唯一性,所以直接去掉這兩項(xiàng)以簡化證書數(shù)據(jù)。
(2)去除CA簽名項(xiàng)
由于區(qū)塊鏈天然的具有不可篡改性,證書相關(guān)數(shù)據(jù)一旦上傳至區(qū)塊鏈就得到了保護(hù),同時(shí)在通過交易的方式產(chǎn)生證書時(shí),證書的頒布者已經(jīng)被進(jìn)行了記錄,所以頒布者再用自己的私鑰對(duì)證書進(jìn)行簽名和驗(yàn)證顯得重復(fù)。
(3)更改有效期標(biāo)識(shí)為有效時(shí)長
區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)中包含有時(shí)間戳項(xiàng),每產(chǎn)生一個(gè)新的區(qū)塊都會(huì)被打上時(shí)間標(biāo)志,通過記錄有效時(shí)長與時(shí)間戳項(xiàng)相結(jié)合可以直觀得到S證書有效期。
(4)去除證書撤銷檢查服務(wù)的UPL項(xiàng)
區(qū)塊鏈上的數(shù)據(jù)是隨時(shí)可查的,查詢存儲(chǔ)在其中的證書狀態(tài)也變得十分簡單。
對(duì)證書寫入?yún)^(qū)塊鏈的接口定義
write(station,Hash(Cert))
(1)
其中,write、station、Hash(Cert)分別表示寫入、證書的狀態(tài)、對(duì)證書進(jìn)行哈希計(jì)算;證書的狀態(tài)包括發(fā)布和撤銷。
針對(duì)存儲(chǔ)在區(qū)塊鏈上的區(qū)塊鏈證書,通過索引技術(shù)和大數(shù)據(jù)技術(shù)設(shè)計(jì)了一種查詢證書狀態(tài)的方案,實(shí)現(xiàn)對(duì)區(qū)塊鏈證書狀態(tài)的查詢。
對(duì)證書查詢的查詢接口定義
query(Hash(Cert))
(2)
其中,query表示證書查詢操作,證書狀態(tài)station有3種:publish、revocation、null(為該證書不存在或被篡改)。需要驗(yàn)證某一證書時(shí),節(jié)點(diǎn)首先將所查證書進(jìn)行哈希運(yùn)算,再將哈希結(jié)果值在區(qū)塊鏈上進(jìn)行查詢,通過區(qū)塊鏈返回該證書的最新Station結(jié)果和該存儲(chǔ)區(qū)塊的時(shí)間戳來進(jìn)行合法性驗(yàn)證。
驗(yàn)證CA證書的合法性,主要通過:①該證書是否在有效期內(nèi);②發(fā)行方CA是否可靠;③驗(yàn)證公鑰是否正確,通過能否解開證書發(fā)行者簽名確定;④證書名稱是否對(duì)應(yīng)擁有者真實(shí)名稱;⑤證書是否在證書吊銷列表(CRL)中。其中第①、②、④項(xiàng)包含在證書內(nèi)部,不需要進(jìn)行線上驗(yàn)證;③、⑤兩項(xiàng)需要線上訪問發(fā)行證書的CA來進(jìn)行確認(rèn)。一旦證書服務(wù)器故障,則無法進(jìn)行③和⑤的過程,證書驗(yàn)證失敗。
3.3.1 執(zhí)行的前提
加入?yún)^(qū)塊鏈中的節(jié)點(diǎn)必須是可信任的,之后對(duì)需要跨域認(rèn)證的兩個(gè)實(shí)體的根CA區(qū)塊鏈證書取哈希值并存儲(chǔ)到區(qū)塊鏈中,作為跨域認(rèn)證的信任憑證。
協(xié)議的主體包括A域用戶(UA)和B域用戶(UB)、用戶證書服務(wù)器(CAA、CAB)、認(rèn)證服務(wù)器(ASA、ASB)。用戶證書服務(wù)器用來查詢證書的當(dāng)前狀態(tài),認(rèn)證服務(wù)器用來對(duì)證書信息進(jìn)行驗(yàn)證。
本模型的區(qū)塊鏈只存儲(chǔ)根CA的哈希值,在每個(gè)獨(dú)立的信任域內(nèi)部,仍然保持傳統(tǒng)的認(rèn)證方式實(shí)現(xiàn)用戶和認(rèn)證服務(wù)器的認(rèn)證,保證臨節(jié)點(diǎn)認(rèn)證效率。進(jìn)行多域間的跨域認(rèn)證時(shí),本域的認(rèn)證服務(wù)器先請(qǐng)求目標(biāo)域的區(qū)塊鏈根證書,正在對(duì)得到的證書進(jìn)行哈希運(yùn)算得到唯一的哈希值,將其與區(qū)塊鏈上數(shù)據(jù)進(jìn)行對(duì)比,驗(yàn)證通過則可以建立信任。通過兩個(gè)步驟來實(shí)現(xiàn)兩個(gè)域間用戶與用戶的雙向?qū)嶓w認(rèn)證:首先依靠本域用戶和對(duì)方域服務(wù)器的建立認(rèn)證信任,然后對(duì)方域服務(wù)器與對(duì)方域用戶建立認(rèn)證信任。
3.3.2 認(rèn)證過程
協(xié)議流程執(zhí)行的具體過程分為傳統(tǒng)CA認(rèn)證階段和區(qū)塊鏈CA認(rèn)證階段,大致如圖5所示。步驟(1)、步驟(2)代表了傳統(tǒng)域內(nèi)用戶認(rèn)證階段;使用步驟(1)~步驟(10)實(shí)現(xiàn)B域?qū)域的跨域認(rèn)證,同理重復(fù)步驟(1)~步驟(10)實(shí)現(xiàn)A域?qū)域的跨域認(rèn)證,從而達(dá)到A、B兩域的雙向認(rèn)證。其中跨域初次認(rèn)證區(qū)塊鏈CA認(rèn)證階段步驟(8)、步驟(9)如下:
圖5 協(xié)議流程
(1)ASB→BC
B域CA認(rèn)證服務(wù)器查詢聯(lián)盟鏈節(jié)點(diǎn),驗(yàn)證A域CA認(rèn)證服務(wù)器證書BCertAA的有效性,結(jié)合區(qū)塊鏈時(shí)間戳和有效時(shí)長解析其有效性,并檢查隨機(jī)數(shù)N2是否正確。
(2)BC→ASB
聯(lián)盟鏈節(jié)點(diǎn)將驗(yàn)證結(jié)果返回給B域CA認(rèn)證服務(wù)器。若A域的CA認(rèn)證服務(wù)器證書可信且有效,生成跨域證書。
(3)ASB→UA
B域認(rèn)證服務(wù)器ASB將跨域證書發(fā)送給A用戶。
初次認(rèn)證結(jié)束,再進(jìn)行跨域通信時(shí),A域內(nèi)用戶UA只需直接把跨域區(qū)塊鏈證書BCertAA發(fā)送給B域認(rèn)證服務(wù)器ABS。B域認(rèn)證服務(wù)器ABS收到區(qū)塊鏈證書BCertAA后,計(jì)算該證書的哈希值,并查詢區(qū)塊鏈,進(jìn)行有效性確認(rèn)(步驟(8)、步驟(9))。
通過對(duì)比分析發(fā)現(xiàn),公有鏈中節(jié)點(diǎn)可以自由加入,當(dāng)節(jié)點(diǎn)數(shù)量變多時(shí),交易速度就會(huì)變慢,如若應(yīng)用到PKI體系中,會(huì)影響認(rèn)證效率;私有鏈又存在數(shù)據(jù)共享性差的問題;聯(lián)盟鏈的多中心結(jié)構(gòu),適合于將PKI域中的根CA加入到聯(lián)盟鏈中,使得每個(gè)信任域內(nèi)保持原有的邏輯關(guān)系不變,綜合考慮選用聯(lián)盟鏈作為模型結(jié)構(gòu)。
跨域認(rèn)證模型的系統(tǒng)架構(gòu)主要包括聯(lián)盟鏈平臺(tái)部分和PKI信任域部分,各個(gè)PKI信任域包含非驗(yàn)證節(jié)點(diǎn)(non-validating peer,NVP)、PKI系統(tǒng)和人員系統(tǒng)3個(gè)部分,聯(lián)盟鏈通過多個(gè)驗(yàn)證節(jié)點(diǎn)(validating peer,VP)構(gòu)成?;诼?lián)盟鏈的跨域認(rèn)證系統(tǒng)架構(gòu)如圖6所示。
圖6 系統(tǒng)架構(gòu)
3.4.1 PKI信任域
非驗(yàn)證節(jié)點(diǎn)(NVP)是那些在區(qū)塊鏈中只參與記賬的節(jié)點(diǎn),不參與共識(shí)驗(yàn)證操作,只包含驗(yàn)證節(jié)點(diǎn)的部分功能,需要鏈接驗(yàn)證節(jié)點(diǎn),為驗(yàn)證節(jié)點(diǎn)分擔(dān)部分工作。本文中非驗(yàn)證節(jié)點(diǎn)承擔(dān)用戶注冊、認(rèn)證等操作。非驗(yàn)證節(jié)點(diǎn)驗(yàn)證本域發(fā)起交易的簽名的正確性,并將交易按照時(shí)間戳的先后順序廣播給驗(yàn)證節(jié)點(diǎn)。非驗(yàn)證節(jié)點(diǎn)由認(rèn)證服務(wù)器擔(dān)任。
PKI系統(tǒng)和人員系統(tǒng)的其它部分與現(xiàn)存PKI體系完全相同。
3.4.2 聯(lián)名鏈平臺(tái)
驗(yàn)證節(jié)點(diǎn)(VP)是參與共識(shí)驗(yàn)證的節(jié)點(diǎn)。驗(yàn)證節(jié)點(diǎn)中包含鏈碼執(zhí)行環(huán)境,可以獨(dú)立處理接收到的交易信息,并可以通過共識(shí)機(jī)制,將新區(qū)塊存儲(chǔ)到鏈上。同時(shí)由于區(qū)塊鏈的特性,每個(gè)節(jié)點(diǎn)又同時(shí)存儲(chǔ)著當(dāng)前完整的賬本記錄。驗(yàn)證節(jié)點(diǎn)由每個(gè)PKI信任域的根CA服務(wù)器承擔(dān)。
驗(yàn)證節(jié)點(diǎn)將根CA生成自簽名的區(qū)塊鏈證書的哈希值存儲(chǔ)到區(qū)塊鏈中。非驗(yàn)證節(jié)點(diǎn)通過查詢區(qū)塊鏈中區(qū)塊鏈證書的哈希值,完成跨域認(rèn)證。
(1)基礎(chǔ)系統(tǒng)環(huán)境
本文模擬實(shí)驗(yàn)通過Hyper-V 2.0虛擬機(jī)來完成,模擬3臺(tái)主機(jī)簡稱:nodeA、nodeB、nodeC成為3個(gè)實(shí)驗(yàn)節(jié)點(diǎn)。并修改c:Windowssystem32driversetchosts文件,完成主機(jī)名到IP地址的解析。
(2)安裝部署以太坊系統(tǒng)
先安裝以太坊客戶端,在實(shí)驗(yàn)節(jié)點(diǎn)上分別使用geth account new命令,然后創(chuàng)建區(qū)塊鏈測試賬戶。
(3)通信配置
1)查看集群節(jié)點(diǎn)
>admin.peers
結(jié)果顯示:[]。表明未與其它節(jié)點(diǎn)進(jìn)行通訊。
2)獲取節(jié)點(diǎn)信息
分別在節(jié)點(diǎn)的console上執(zhí)行admin.nodeInfo.enode得到3個(gè)節(jié)點(diǎn)的公鑰信息。
3)組建聯(lián)盟鏈
在nodeA上執(zhí)行admin.addPeer命令,將nodeB加入nodeA。同理,把nodeC加入nodeA,分別對(duì)nodeB、nodeC執(zhí)行相同操作。至此聯(lián)盟鏈已經(jīng)組建完成。
安裝配置OpenSSL,在nodeA、nodeC上安裝一套CA服務(wù)軟件。通過OpenSSL中rand語句創(chuàng)建隨機(jī)數(shù)文件,使用隱私增強(qiáng)郵件(privacy enbanced mail,PEM)格式保存私鑰,使用genrsa命令,以AES256加密方式生成2048 bits的私鑰。接著創(chuàng)建根證書簽發(fā)申請(qǐng)文件,得到簽發(fā)根證書rootca.cer。出于OpenSSL產(chǎn)生的數(shù)字證書不能在java等語言環(huán)境中直接使用的原因,將其轉(zhuǎn)換為PKCS#12編碼格式,PKCS#12為個(gè)人信息交換文件格式,可以作為密鑰庫或信任庫使用,可使用keytool查看該密鑰庫的詳細(xì)信息。此時(shí),根證書rootca.car的創(chuàng)建已完成,后續(xù)可使用其簽發(fā)證書,本模擬實(shí)驗(yàn)以簽發(fā)服務(wù)器證書和客戶端證書為例。
步驟與創(chuàng)建根證書相似,首先創(chuàng)建私鑰,接著申請(qǐng)簽發(fā)服務(wù)器證書,通過命令簽發(fā)服務(wù)器證書servera.car,并對(duì)其進(jìn)行格式轉(zhuǎn)化,最后驗(yàn)證證書可使用性,表明該證書沒有問題。
接著創(chuàng)建一個(gè)客戶端證書用于驗(yàn)證準(zhǔn)備。至此單個(gè)節(jié)點(diǎn)的CA中心已搭建完畢,并簽發(fā)了服務(wù)器證書和客戶端證書,依次在其它節(jié)點(diǎn)上按照相同步驟搭建CA證書中心。
出于本文對(duì)CA證書的驗(yàn)證等操作超出了現(xiàn)有CA標(biāo)準(zhǔn)體系和流程考慮,無法使用現(xiàn)有的標(biāo)準(zhǔn)CA證書驗(yàn)證軟件進(jìn)行,本實(shí)驗(yàn)編制了專用的CA證書驗(yàn)證程序。
CA證書驗(yàn)證程序使用Delphi 2007編程實(shí)現(xiàn),其核心函數(shù)或進(jìn)程包括:獲取文件簽名、獲取證書接口、執(zhí)行文件簽名、對(duì)文件簽名進(jìn)行驗(yàn)證、對(duì)簽名信息進(jìn)行分解、附加簽名信息等。
基于先前“基于區(qū)塊鏈的PKI系統(tǒng)架構(gòu)”所設(shè)計(jì),調(diào)用智能合約實(shí)現(xiàn)證書簽發(fā)、證書更新和證書撤銷等操作。核心內(nèi)容包括標(biāo)準(zhǔn)的聯(lián)盟鏈和證書智能合約的實(shí)現(xiàn)。其中智能合約調(diào)用在專用證書驗(yàn)證程序中也有體現(xiàn)。
在nodeA上配置IIS服務(wù)器,提供根證書下載和證書吊銷列表(CRL)下載服務(wù)。吊銷列表失效時(shí)間設(shè)置為10 min。把noseA的服務(wù)器證書servera.cer復(fù)制到一臺(tái)client機(jī)器上安裝,斷開nodeA網(wǎng)卡服務(wù)10 min,在client機(jī)器上再次打開servera.cer,由于無法獲取有效的證書吊銷列表,所以無法訪問該網(wǎng)站。通過調(diào)用智能合約對(duì)證書servera.cer進(jìn)行驗(yàn)證,結(jié)果顯示可以獲得證書吊銷列表,同時(shí)確認(rèn)該證書的有效性,表明本實(shí)驗(yàn)完成了基于區(qū)塊鏈的KPI身份認(rèn)證功能。
以節(jié)點(diǎn)nodeB為中心做CA跨域認(rèn)證實(shí)驗(yàn),實(shí)驗(yàn)配置見表1。
表1 CA跨域認(rèn)證的實(shí)驗(yàn)配置
在nodeA上安裝rootca.cer,并允許訪問nodeA的證書吊銷列表,可以完成對(duì)證書serverb.car的證書簽名校驗(yàn)。不在nodeA上安裝nodeC 頒發(fā)的根證書PKI-BlockChainC-CA.cer,并不允許訪問nodeC的證書吊銷列表,不能對(duì)證書cert_b.cer的數(shù)字簽名校驗(yàn)。驗(yàn)證結(jié)果表明,不能依據(jù)nodeA的根證書rootca.cer驗(yàn)證nodeC頒發(fā)的證書cert_b.cer。也就是說,在標(biāo)準(zhǔn)的PKI體系和框架下,不能實(shí)現(xiàn)CA證書的跨域認(rèn)證。
當(dāng)調(diào)用智能合約對(duì)證書cert_b.car進(jìn)行驗(yàn)證時(shí),可以成功完成證書簽名校驗(yàn),實(shí)驗(yàn)結(jié)果如圖7 所示。表明本文提出的基于聯(lián)盟鏈的跨域認(rèn)證模型合理,達(dá)到期望目標(biāo)。
圖7 調(diào)用智能合約后對(duì)證書cert_b.cer的驗(yàn)證結(jié)果
4.7.1 安全性分析
(1)證書安全性
本文對(duì)區(qū)塊鏈數(shù)字證書的關(guān)鍵操作步驟是將數(shù)值證書文件進(jìn)行哈希運(yùn)算得到哈希值,并將其作為區(qū)塊鏈資產(chǎn)以交易的方式將哈希值存儲(chǔ)到區(qū)塊鏈中。關(guān)于哈希運(yùn)算的兩個(gè)特性:
單向性:哈希運(yùn)算是一個(gè)從明文到密文的不可逆的映射,只有加密過程,沒有解密過程。對(duì)于給定的Hash值m,通過其運(yùn)算過程Hash(n)=m,來推導(dǎo)出被運(yùn)算信息n是不可能的。
抗碰撞性:一是對(duì)于給定Hash函數(shù),給出一條消息,找出一條消息y使Hash(x)=Hash(y)是計(jì)算上不可行的(弱抗沖突),二是找出任意兩條消息x、y,使Hash(x)=Hash(y)也是計(jì)算上不可行的(強(qiáng)抗沖突)。
由此可見基于單向性和抗碰撞性,將PKI中各個(gè)信任域的根CA的數(shù)字證書進(jìn)行哈希運(yùn)算,可以得到唯一的哈希值。將其存儲(chǔ)到不可篡改的區(qū)塊鏈中,具有極高的安全性。
(2)認(rèn)證安全性
本模型中只將各域的根CA證書信息哈希值體現(xiàn)在區(qū)塊鏈中。通過將原有認(rèn)證方式和雙向?qū)嶓w認(rèn)證方式聯(lián)合使用,利用區(qū)塊鏈的高安全等級(jí)和哈希存儲(chǔ)的唯一性等特性,提高認(rèn)證雙方安全性的同時(shí),也提升了跨域認(rèn)證的效率。
(3)體系安全性
區(qū)塊鏈技術(shù)作為一個(gè)分布式數(shù)據(jù)庫,各個(gè)節(jié)點(diǎn)是對(duì)等存在的,每個(gè)節(jié)點(diǎn)都參與鏈上數(shù)據(jù)維護(hù)的同時(shí)也存儲(chǔ)了相關(guān)信息,即使單個(gè)節(jié)點(diǎn)被攻擊導(dǎo)致失效,也不影響其它節(jié)點(diǎn),可以有效克服多種單點(diǎn)故障導(dǎo)致的安全問題。
傳統(tǒng)的PKI體系通過區(qū)塊鏈中共識(shí)機(jī)制達(dá)成分布式場景下的一致性,使得一些常見的身份攻擊變得不再可行,區(qū)塊鏈的可追溯性杜絕了中間人攻擊的可能,同時(shí)也對(duì)各域CA認(rèn)證中心進(jìn)行了側(cè)面監(jiān)管。
4.7.2 效率分析
通過模擬實(shí)驗(yàn)結(jié)果,分析協(xié)議的計(jì)算開銷,并與文獻(xiàn)[18]方案作比較。本文模擬實(shí)驗(yàn)過程與文獻(xiàn)[18]方案的聯(lián)盟數(shù)類似,其聯(lián)盟數(shù)為2,本實(shí)驗(yàn)聯(lián)盟數(shù)為3。進(jìn)行效率對(duì)比結(jié)果見表2,單位為運(yùn)算次數(shù),表中記錄分步次數(shù)合計(jì)值。
表2 開銷對(duì)比
與文獻(xiàn)[18,19]方案相比,本文方案減少了公鑰的加解密操作。在聯(lián)盟數(shù)量相似的情況下,本文使用哈希算法次數(shù)也少于二者;基于聯(lián)盟鏈的特殊優(yōu)勢,不受盟員的增加而導(dǎo)致跨域認(rèn)證時(shí)使用公鑰算法次數(shù)的增加,實(shí)際結(jié)果只會(huì)更好于模擬實(shí)驗(yàn)對(duì)比分析結(jié)果;隨著多個(gè)域間認(rèn)證工作量的大量增加,本文總體哈希次數(shù)也會(huì)隨之增長,但本方案使用的SHA-256單次計(jì)算耗時(shí)僅為RSA-1023的1/10,在哈希計(jì)算步驟效率遠(yuǎn)高于公鑰加密,本文方案的實(shí)際效率與負(fù)載能力在多域聯(lián)盟環(huán)境下也是值得肯定的。文獻(xiàn)[18]通過將公鑰證書的發(fā)放過程轉(zhuǎn)換為區(qū)塊鏈網(wǎng)絡(luò)中的智能合約的交易過程,在一定程度上解決了安全的通信信道和抵抗DDos攻擊的問題,但其選用的合約方式需要節(jié)點(diǎn)過去參與操作,帶來了不小的時(shí)延,并沒有發(fā)展為公共機(jī)制的能力,僅適合一定范圍或私有機(jī)構(gòu)內(nèi)部使用。
文獻(xiàn)[19]采用的添加獨(dú)立于CA的信任中間人的方式無疑是安全性極高的,可以檢測到PKI攻擊并區(qū)分攻擊和錯(cuò)誤,達(dá)到異常的精確管理。但其信任中間人的建議方式也帶來了極高的開銷支出,等同于多一個(gè)進(jìn)行雙重CA驗(yàn)證,同時(shí)該模型建立于Hyperledger fabric上,節(jié)點(diǎn)子集30個(gè)時(shí)達(dá)到最優(yōu)配置更限制了其模型智能應(yīng)用在私有領(lǐng)域。綜上所述,本文設(shè)計(jì)的哈希存儲(chǔ)與區(qū)塊鏈數(shù)據(jù)結(jié)合方案,使用部分現(xiàn)有技術(shù)和以太坊相結(jié)合,提高安全性的同時(shí)又不帶來過多的負(fù)載壓力,對(duì)于參與對(duì)象與數(shù)量沒有限制,也不存在節(jié)點(diǎn)數(shù)量對(duì)系統(tǒng)性能影響的可能性,并且伴隨著區(qū)塊鏈的特性,參與用戶越多會(huì)促使體系的安全性越高。是一種比較適合現(xiàn)有網(wǎng)絡(luò)模式下的安全PKI體系應(yīng)用方案。
本文提出一種基于區(qū)塊鏈的PKI跨域認(rèn)證模型。利用區(qū)塊鏈的去中心化、去信任、不可篡改等特征,在證書使用者和證書依賴者之間建立信任關(guān)系,將數(shù)字證書和證書管理的一系列操作都記錄在區(qū)塊鏈中,使得查詢變得簡單高效,同時(shí)解決了傳統(tǒng)PKI體系高度中心化帶來的單點(diǎn)故障問題,提高了PKI體系的魯棒性。通過區(qū)塊鏈交易方式將證書管理一系列操作變得十分簡單高效。對(duì)X.509證書的改進(jìn)實(shí)現(xiàn)了將PKI體系中每個(gè)信任域內(nèi)信任錨的區(qū)塊鏈證書哈希值存儲(chǔ)在鏈上,保證了每個(gè)信任域中原有信任結(jié)構(gòu)不變,并實(shí)現(xiàn)了CA的跨域認(rèn)證。本文針對(duì)傳統(tǒng)PKI體系存在的問題,選用比較新興的區(qū)塊鏈技術(shù)來解決PKI問題,工作具有現(xiàn)實(shí)意義和研究價(jià)值。
作為一門新興技術(shù),區(qū)塊鏈技術(shù)仍有改進(jìn)空間,在針對(duì)本文研究的問題上,本文仍有進(jìn)步空間。目前所有基于區(qū)塊鏈的設(shè)計(jì)原理都是基于現(xiàn)有的區(qū)塊鏈平臺(tái),區(qū)塊鏈系統(tǒng)在特定共識(shí)機(jī)制下無休止地自動(dòng)成塊,導(dǎo)致嚴(yán)重的資源浪費(fèi),如何讓其按需成塊值得深究。由于區(qū)塊鏈中的數(shù)據(jù)公開透明,下一步可以從隱私保護(hù)入手,可以考慮隱藏用戶和用戶公鑰的對(duì)應(yīng)關(guān)系,提高用戶隱私的安全性。同時(shí),區(qū)塊鏈的核心是在共識(shí)機(jī)制,是否可以尋找一套針對(duì)PKI體系的特有共識(shí)機(jī)制,成為今后研究方向。如何進(jìn)一步完善本文提出的一種基于聯(lián)盟鏈的PKI跨域認(rèn)證模型,使之適用于國內(nèi)PKI認(rèn)證體系現(xiàn)狀,值得進(jìn)一步研究。如何用區(qū)塊鏈全面替換PKI體系,使其全面承載PKI的功能,值得進(jìn)一步探討。