劉亞雪,楊小寶,劉 圓,惠小強(qiáng)
(1.西安郵電大學(xué) 電子工程學(xué)院,西安 710121; 2.西安郵電大學(xué) 物聯(lián)網(wǎng)與兩化融合研究院,西安 710061)
隨著新型智慧城市時(shí)代的到來,集約融合系統(tǒng)引起了廣泛關(guān)注,跨領(lǐng)域操作、多應(yīng)用設(shè)備逐漸成為一種新的發(fā)展趨勢[1]。集成的多應(yīng)用證書系統(tǒng)可統(tǒng)一管理多個(gè)行業(yè)的身份證書,減少多個(gè)單一系統(tǒng)的重復(fù)建設(shè)和不必要的投資,從而更好地發(fā)揮資源價(jià)值。當(dāng)前通用的證書管理系統(tǒng)是基于認(rèn)證機(jī)構(gòu)(Certification Authority,CA)的公鑰基礎(chǔ)設(shè)施(Public Key Infrastructure,PKI)體系[2]。從一些案例可以看出,由于PKI將信任極度集中于可信中心CA,導(dǎo)致其存在單點(diǎn)故障等安全性缺陷[3],若在PKI體系中建立多領(lǐng)域或應(yīng)用中的多份信任,這種問題會(huì)被成倍放大,從而導(dǎo)致嚴(yán)重的系統(tǒng)性風(fēng)險(xiǎn)。
針對(duì)PKI的單點(diǎn)故障問題,研究人員提出了一些解決方案,其中包括基于日志的PKI方法與信任網(wǎng)絡(luò)方法。在基于日志的PKI方法中,CA發(fā)布的證書由公共日志服務(wù)器監(jiān)控,任何不端行為都能被檢測到,但該方法仍依賴于中心化服務(wù)器,且無法進(jìn)行證書撤銷[4]。在信任網(wǎng)絡(luò)方法中,系統(tǒng)中所有用戶的信任關(guān)系構(gòu)成信任網(wǎng)絡(luò),用戶通過簽發(fā)他們的公鑰證書來指定某人是可信的,這是一種完全分散的方案,雖然解決了中心化難題,但是新用戶很難加入,且其通過指定用戶為撤銷者來撤銷證書的處理方式容易使無效證書受到信任[3]。
作為一種新興的分布式方案,區(qū)塊鏈技術(shù)的應(yīng)用范圍目前已擴(kuò)展到金融、物聯(lián)網(wǎng)和安全等領(lǐng)域[5]。區(qū)塊鏈技術(shù)本身的分散性能夠解決PKI固有的單點(diǎn)故障等問題,利用塊鏈?zhǔn)浇Y(jié)構(gòu)存儲(chǔ)和驗(yàn)證數(shù)據(jù),通過共識(shí)機(jī)制生成和更新數(shù)據(jù)[6],使數(shù)據(jù)能被用于構(gòu)建分布式PKI系統(tǒng),從而實(shí)現(xiàn)相應(yīng)功能。近年來,學(xué)者們通過比特幣的一種“命名-存儲(chǔ)”方式將用戶的密鑰和身份綁定到區(qū)塊鏈,實(shí)現(xiàn)分布式的PKI認(rèn)證。以Certcoin[7]、Authcoin[8]、Blockstack[9]和Cecoin[10]為代表的方案已經(jīng)被成功實(shí)施,但這些方案仍存在一定缺陷,如不能阻止非法占用用戶,無法設(shè)置更多屬性等。另外,一些研究人員試圖利用以太坊區(qū)塊鏈的智能合約來實(shí)現(xiàn)PKI功能。文獻(xiàn)[11]提出一種由智能合約控制的分散式系統(tǒng)SCPKI,利用智能合約綁定用戶的身份和標(biāo)識(shí),發(fā)布用戶希望公開的更多屬性。文獻(xiàn)[12]設(shè)計(jì)并開發(fā)一個(gè)托管在以太坊區(qū)塊鏈上的PKI系統(tǒng),通過智能合約控制CA的屬性和標(biāo)識(shí),該框架緩解了證書撤銷和CA行為不端的問題。但是,上述2種方案仍然保留了中心化的認(rèn)證服務(wù)器或CA,單點(diǎn)故障問題依然存在。
通過分析近年來的研究成果可以看出,完全分散的PKI方案無法進(jìn)行更多領(lǐng)域的操作,保留了認(rèn)證中心的改進(jìn)PKI結(jié)構(gòu)仍存在中心化等固有問題。本文針對(duì)跨行業(yè)的資源整合問題,提出一種基于區(qū)塊鏈的多應(yīng)用證書系統(tǒng)模型BMCS,利用區(qū)塊鏈去中心化、分布式的特性以及智能合約分布式應(yīng)用、易編程的特點(diǎn),代替?zhèn)鹘y(tǒng)PKI證書系統(tǒng),從而實(shí)現(xiàn)多行業(yè)身份證書的綜合管理。
PKI是一種使用公鑰密碼技術(shù)建立的安全基礎(chǔ)設(shè)施,通過定義數(shù)字證書頒發(fā)、驗(yàn)證、更新和撤銷所需的策略和過程,提供一種網(wǎng)絡(luò)中安全驗(yàn)證身份的方法[3]。公鑰PKI管理通?;赬.509v3證書標(biāo)準(zhǔn)[2],該標(biāo)準(zhǔn)提供了一些外部實(shí)體(證書認(rèn)證機(jī)構(gòu))對(duì)私有密鑰所有權(quán)的驗(yàn)證,通過在證書中綁定用戶的身份與公鑰建立所有權(quán),證書由PKI的核心組件CA用其私鑰進(jìn)行簽名。CA簽發(fā)的證書由PKI中多個(gè)組件協(xié)同管理,典型PKI系統(tǒng)由簽發(fā)證書的可信中心CA、存儲(chǔ)證書列表的證書存儲(chǔ)庫(Certificate Repository,CR)、存儲(chǔ)撤銷證書列表的證書撤銷庫(Certificate Revoke Repository,CRL)、查詢證書的目錄服務(wù)器輕量級(jí)目錄訪問協(xié)議(Lightweight Directory Access Protocol,LDAP)和在線證書狀態(tài)協(xié)議(Online Certificate Status Protocol,OCSP)等組件組成[13],PKI的功能結(jié)構(gòu)如圖1所示。
圖1 PKI的功能結(jié)構(gòu)
一個(gè)PKI體系中存在多個(gè)CA,它們之間通過證書建立信任關(guān)系,信任模型[14]是PKI創(chuàng)建和管理不同CA之間信任關(guān)系的框架,其原理如圖2所示。
圖2 PKI信任模型
單個(gè)行業(yè)內(nèi)所有CA均組成樹狀結(jié)構(gòu)且信任同一根CA,信任的建立是通過根CA或根CA認(rèn)可的下級(jí)CA簽發(fā)CA證書給其他CA來實(shí)現(xiàn)的,CA證書是CA身份受信任的證明,它包含其他CA的公鑰和身份以及上級(jí)CA的簽名。證書驗(yàn)證過程路徑的尋找和遍歷依賴于信任模型,因此,PKI對(duì)用戶證書的驗(yàn)證從信任模型的根CA公鑰開始,到獲得通信對(duì)方的可靠公鑰時(shí)結(jié)束。該驗(yàn)證方式將最多的信任集中于根CA,導(dǎo)致根CA成為單一信任點(diǎn),如果其私鑰受到攻擊,則整個(gè)系統(tǒng)都會(huì)面臨風(fēng)險(xiǎn)。在多行業(yè)內(nèi),所有CA組成多個(gè)樹結(jié)構(gòu),如果使用代理的方式將多個(gè)行業(yè)的證書系統(tǒng)建立在PKI-CA體系中,風(fēng)險(xiǎn)會(huì)提高,因?yàn)槌烁鵆A,代理CA也成了單一故障點(diǎn)。在這種多應(yīng)用PKI證書系統(tǒng)中,根CA受到攻擊時(shí)會(huì)威脅到每個(gè)CA,而代理CA受到攻擊時(shí)會(huì)威脅到每個(gè)行業(yè)。
區(qū)塊鏈技術(shù)最早由NAKAMOTO于2008年提出[15],它是以鏈表形式維護(hù)的一組稱為“塊”的文件。組成鏈的每個(gè)塊中都記錄著前一個(gè)塊的散列和一組按時(shí)間順序排列的事務(wù)數(shù)據(jù),分散對(duì)等節(jié)點(diǎn)(礦工)組成的網(wǎng)絡(luò)能夠維護(hù)這些數(shù)據(jù),并利用共識(shí)機(jī)制競爭記賬權(quán),最終執(zhí)行并記錄相同的事務(wù)。區(qū)塊鏈的本質(zhì)是一個(gè)無第三方中心控制、由多方節(jié)點(diǎn)共同維護(hù)的分布式基礎(chǔ)架構(gòu),因此,其能避免單點(diǎn)故障問題[16]。區(qū)塊鏈技術(shù)的相關(guān)概念如下:
1)區(qū)塊鏈網(wǎng)絡(luò)。區(qū)塊鏈?zhǔn)褂玫狞c(diǎn)對(duì)點(diǎn)(Peer to Peer lending,P2P)是一個(gè)分布式的應(yīng)用程序架構(gòu)[17],其本質(zhì)是一個(gè)去中心、防篡改的網(wǎng)絡(luò),其中所有節(jié)點(diǎn)都具有同等的權(quán)限和義務(wù),以相同的方式參與交易的審核,且審核者身份不可抵賴。區(qū)塊鏈網(wǎng)絡(luò)的去中心化和防篡改性由共識(shí)機(jī)制和區(qū)塊鏈副本來保證。
2)事務(wù)。事務(wù)是一種由輸入、輸出和數(shù)字簽名3個(gè)部分組成的數(shù)據(jù)結(jié)構(gòu),在一段時(shí)間內(nèi),其以Merkle樹結(jié)構(gòu)[18]的形式連接,并由組成區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點(diǎn)礦工填充到塊中,塊中已被確認(rèn)的事務(wù)不能再更改。
3)挖礦。挖礦是驗(yàn)證區(qū)塊鏈上事務(wù)的過程,礦工通過網(wǎng)絡(luò)提供的獎(jiǎng)勵(lì)獲得激勵(lì),通過計(jì)算復(fù)雜的數(shù)學(xué)難題來競爭這筆獎(jiǎng)勵(lì),獲勝者將贏得獎(jiǎng)勵(lì)并獲得將事務(wù)記錄到區(qū)塊鏈的權(quán)力,共識(shí)機(jī)制能保證所記錄事務(wù)的一致性。
4)共識(shí)機(jī)制。共識(shí)機(jī)制是一種預(yù)先確定的策略,目的是在礦工間達(dá)成要在區(qū)塊鏈上添加哪個(gè)礦工記錄的共識(shí),保證數(shù)據(jù)的一致性和不可抵賴性。共識(shí)機(jī)制要求區(qū)塊鏈中必須有超過關(guān)鍵數(shù)量的節(jié)點(diǎn)認(rèn)同的區(qū)塊數(shù)據(jù)才是有效的。區(qū)塊鏈有多種共識(shí)機(jī)制,如工作量證明(Proof of Work,POW)[15]和權(quán)益證明(Proof of Stake,POS)[19]。
以太坊是一個(gè)完全開放的分散式平臺(tái),其有助于實(shí)現(xiàn)區(qū)塊鏈上分布式應(yīng)用程序的開發(fā)[20]。智能合約用來開發(fā)分布式應(yīng)用,是以太坊區(qū)塊鏈上以計(jì)算機(jī)程序的方式締結(jié)和運(yùn)行的各種數(shù)字合同[21]。以太坊區(qū)塊鏈提供了一種復(fù)雜且有狀態(tài)的圖靈完整語言Solidity[22],可用于實(shí)現(xiàn)特定場景的智能合約。
智能合約由一組函數(shù)(合約中的可執(zhí)行代碼單元)和數(shù)據(jù)(合約的狀態(tài))組成,允許用戶將所需功能編程為函數(shù)代碼,從而描述復(fù)雜的邏輯[23]。合約函數(shù)的執(zhí)行由包含函數(shù)所需輸入?yún)?shù)的事務(wù)來觸發(fā),執(zhí)行的正確性由共識(shí)礦工保證。合約程序一旦編譯完成并成功上傳到區(qū)塊鏈網(wǎng)絡(luò),將不能再進(jìn)行更改。此外,智能合約還支持存儲(chǔ)映射和關(guān)系等更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),并對(duì)這些數(shù)據(jù)結(jié)構(gòu)的修改制定一些規(guī)則。
本節(jié)通過對(duì)區(qū)塊鏈自有的礦工節(jié)點(diǎn)、輕節(jié)點(diǎn)、智能合約以及外部的多應(yīng)用輕量級(jí)終端設(shè)備進(jìn)行設(shè)計(jì),構(gòu)建一種多行業(yè)證書的綜合管理模型BMCS,從而進(jìn)行多行業(yè)證書的申請(qǐng)、驗(yàn)證、簽發(fā)、更新和撤銷。
BMCS系統(tǒng)模型運(yùn)行在以太坊區(qū)塊鏈上,包括BMCS區(qū)塊鏈網(wǎng)絡(luò)和多應(yīng)用輕量級(jí)終端設(shè)備。BMCS區(qū)塊鏈網(wǎng)絡(luò)由所有的礦工節(jié)點(diǎn)和遠(yuǎn)程輕服務(wù)器組成,相應(yīng)行業(yè)證書的操作由行業(yè)智能合約(Industry Smart Contract,ISC)控制,其中,礦工負(fù)責(zé)執(zhí)行合約定義的操作,遠(yuǎn)程輕服務(wù)器負(fù)責(zé)在區(qū)塊鏈和設(shè)備之間建立聯(lián)系。BMCS模型針對(duì)的是網(wǎng)絡(luò)中的輕量級(jí)設(shè)備,為了更好地進(jìn)行綜合化管理和方便用戶使用多行業(yè)服務(wù),BMCS提供了一種多應(yīng)用輕量級(jí)終端設(shè)備的設(shè)計(jì)方法,該設(shè)備負(fù)責(zé)在終端存儲(chǔ)BMCS發(fā)布的多個(gè)行業(yè)證書,識(shí)別多個(gè)行業(yè)的應(yīng)用并提供相應(yīng)服務(wù)。BMCS模型包含多個(gè)組件,架構(gòu)如圖3所示。
圖3 BMCS系統(tǒng)模型架構(gòu)
BMCS系統(tǒng)模型的各組件具體如下:
1)礦工節(jié)點(diǎn)。礦工節(jié)點(diǎn)是區(qū)塊鏈網(wǎng)絡(luò)上驗(yàn)證或生成區(qū)塊事務(wù)的對(duì)等節(jié)點(diǎn),和以太坊礦工概念一致。BMCS區(qū)塊鏈的礦工可以由任何實(shí)體注冊(cè),如應(yīng)用服務(wù)器、電腦或者用戶,但前提是它與網(wǎng)絡(luò)的連接是持續(xù)的,并且有足夠的存儲(chǔ)空間和計(jì)算能力。注冊(cè)成功后的礦工節(jié)點(diǎn)信息將被同步到網(wǎng)絡(luò),該節(jié)點(diǎn)在本文方案中負(fù)責(zé)執(zhí)行ISC定義的證書操作策略,起到傳統(tǒng)CA的作用。
2)遠(yuǎn)程輕服務(wù)器。遠(yuǎn)程輕服務(wù)器是為了服務(wù)輕量級(jí)設(shè)備,輕量級(jí)設(shè)備是當(dāng)前使用廣泛的一類終端設(shè)備,如讀卡器、POS機(jī)等,這種設(shè)備在內(nèi)存和CPU方面存在局限性,很難承載和跟蹤區(qū)塊鏈網(wǎng)絡(luò)事務(wù),因此,它們不能成為區(qū)塊鏈的節(jié)點(diǎn)。遠(yuǎn)程輕服務(wù)器可以解決上述問題,它是區(qū)塊鏈網(wǎng)絡(luò)的一部分,作為遠(yuǎn)程可信輕節(jié)點(diǎn)部署在終端設(shè)備的特定區(qū)域,用來在區(qū)塊鏈網(wǎng)絡(luò)與設(shè)備之間建立連接。與礦工節(jié)點(diǎn)相同,任何合法服務(wù)器都可以注冊(cè)成為BMCS的輕服務(wù)器。但不同的是,礦工是全節(jié)點(diǎn),需要計(jì)算和執(zhí)行區(qū)塊鏈?zhǔn)聞?wù),保存區(qū)塊鏈完整信息,而輕服務(wù)器具有輕節(jié)點(diǎn)特性,不額外計(jì)算和執(zhí)行事務(wù),僅同步區(qū)塊鏈部分關(guān)鍵數(shù)據(jù)(Merkle散列根值[18]),只在更新或下載數(shù)據(jù)時(shí)才從區(qū)塊鏈獲取完整數(shù)據(jù),這一特性使得其能快速驗(yàn)證證書。部署了多應(yīng)用輕量級(jí)終端設(shè)備的區(qū)域中至少有一個(gè)輕服務(wù)器,設(shè)備管理器或管理員可以維護(hù)這樣一個(gè)遠(yuǎn)程輕節(jié)點(diǎn)。遠(yuǎn)程輕服務(wù)器在本文模型中負(fù)責(zé)驗(yàn)證設(shè)備的行業(yè)證書,并在必要時(shí)提供證書的下載和更新服務(wù)。
3)行業(yè)智能合約ISC。行業(yè)智能合約ISC相當(dāng)于區(qū)塊鏈上的行業(yè)應(yīng)用程序,它將每個(gè)行業(yè)的證書簽發(fā)、驗(yàn)證、撤銷等處理過程定義為不同的函數(shù),以程序代碼的形式獨(dú)立運(yùn)行在以太坊區(qū)塊鏈上。行業(yè)只有在區(qū)塊鏈網(wǎng)絡(luò)中部署相應(yīng)ISC,其證書管理才能被執(zhí)行,各ISC由唯一的合約地址標(biāo)識(shí),其他組件通過獲得該地址來與合約進(jìn)行交互。
4)多應(yīng)用輕量級(jí)終端設(shè)備。多應(yīng)用輕量級(jí)終端設(shè)備是一種具備讀取多行業(yè)用戶設(shè)備、存儲(chǔ)多行業(yè)證書數(shù)據(jù)能力的輕量級(jí)設(shè)備。傳統(tǒng)服務(wù)2個(gè)、3個(gè)行業(yè)的終端設(shè)備通常使用2個(gè)、3個(gè)PSAM/SAM卡存儲(chǔ)數(shù)據(jù)[24-25],這種方式占用設(shè)備空間大且難以擴(kuò)展新應(yīng)用。參考多應(yīng)用智能卡[26],本文在設(shè)備的存儲(chǔ)卡中寫入多應(yīng)用文件系統(tǒng)[27],來存儲(chǔ)BMCS模型發(fā)布的多個(gè)行業(yè)的數(shù)字證書以及其他數(shù)據(jù),從而部署能動(dòng)態(tài)擴(kuò)展更多應(yīng)用的輕量級(jí)終端設(shè)備。
本節(jié)基于傳統(tǒng)X.509v3證書標(biāo)準(zhǔn)[2]設(shè)計(jì)一種區(qū)塊鏈證書,其由區(qū)塊鏈網(wǎng)絡(luò)生成和記錄,用來證明區(qū)塊鏈網(wǎng)絡(luò)或終端設(shè)備的行業(yè)身份。區(qū)塊鏈證書修改了X.509v3證書使用者ID、頒發(fā)者ID字段的名稱和存儲(chǔ)值以及使用者和頒發(fā)者字段的存儲(chǔ)值,刪除了X.509v3證書的簽名和撤銷模塊,并利用X.509v3證書擴(kuò)展字段添加了少量與區(qū)塊鏈環(huán)境相關(guān)的信息。X.509v3證書與本文區(qū)塊鏈證書對(duì)比如圖4所示。
圖4 X.509v3證書與本文區(qū)塊鏈證書
與傳統(tǒng)X.509v3證書相比,本文區(qū)塊鏈證書主要在以下6個(gè)方面進(jìn)行了改進(jìn):
1)使用者合約ID和頒發(fā)者合約ID字段,用于保存區(qū)塊鏈的智能合約地址。使用者合約ID保存當(dāng)前區(qū)塊鏈的行業(yè)合約地址,設(shè)備的行業(yè)證書字段為空,頒發(fā)者合約ID保存簽發(fā)此證書區(qū)塊鏈的行業(yè)合約地址。
2)使用者和頒發(fā)者字段,用于保存區(qū)塊鏈層級(jí)名稱,如頒發(fā)者字段存儲(chǔ)行業(yè)i的一級(jí)區(qū)塊鏈層名稱,則使用者字段存儲(chǔ)行業(yè)i的二級(jí)區(qū)塊鏈層名稱。設(shè)備的行業(yè)證書使用者字段為設(shè)備的標(biāo)識(shí)符。
3)添加區(qū)塊鏈名字段,用于保存區(qū)塊鏈平臺(tái)的名稱,本文方案使用以太坊私有區(qū)塊鏈。
4)添加哈希算法字段,用于保存計(jì)算加載到區(qū)塊鏈中證書的散列值的相關(guān)散列算法信息。
5)省去簽名算法和簽名值模塊。傳統(tǒng)PKI通過數(shù)字簽名驗(yàn)證證書未被篡改,使得證書具有防偽性。區(qū)塊鏈自身具有不可篡改的特性,通過將生成的證書散列值記錄在區(qū)塊鏈中來代替簽名過程。驗(yàn)證過程則通過檢查在區(qū)塊鏈存儲(chǔ)中是否存在證書散列來實(shí)現(xiàn),PKI公鑰將對(duì)應(yīng)區(qū)塊鏈中證書散列存儲(chǔ)的地址。
6)省去證書撤銷檢查服務(wù)URL模塊。區(qū)塊鏈系統(tǒng)發(fā)布證書不需要OCSP響應(yīng)和CRL,本文對(duì)證書撤銷狀態(tài)的更改通過記錄證書散列到ISC的特定數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)。
為消除PKI-CA體系中信任模型的單點(diǎn)故障問題,本文在區(qū)塊鏈平臺(tái)設(shè)計(jì)一種分布式信任結(jié)構(gòu),該結(jié)構(gòu)保持了PKI中建立信任路徑的邏輯,但增加了分散性。對(duì)比PKI通過同一行業(yè)的上級(jí)CA(如根CA)向下級(jí)簽發(fā)CA證書建立信任路徑,BMCS區(qū)塊鏈網(wǎng)絡(luò)要管理多行業(yè)的證書,就要獲得各上級(jí)區(qū)塊鏈網(wǎng)絡(luò)層的證書。分布式信任結(jié)構(gòu)使用一個(gè)區(qū)塊鏈網(wǎng)絡(luò)層代替行業(yè)的一級(jí)CA,通過上級(jí)區(qū)塊鏈網(wǎng)絡(luò)層向下級(jí)區(qū)塊鏈網(wǎng)絡(luò)層簽發(fā)區(qū)塊鏈本身的行業(yè)證書建立信任路徑,最后一級(jí)獲得多個(gè)區(qū)塊鏈行業(yè)證書的是BMCS區(qū)塊鏈層。
以水(i)、電(j)行業(yè)為例的分布式信任結(jié)構(gòu)如圖5所示,使用多個(gè)區(qū)塊鏈網(wǎng)絡(luò)層代替i、j行業(yè)的多級(jí)CA,為簡化架構(gòu)并提高系統(tǒng)可拓展性,該結(jié)構(gòu)以BMCS層為主鏈、其他層為側(cè)鏈。為簡化描述且不失一般性,分布式信任結(jié)構(gòu)被分為3級(jí):行業(yè)根CA對(duì)應(yīng)的根區(qū)塊鏈層,由一級(jí)管理者維護(hù);行業(yè)根CA對(duì)應(yīng)的根區(qū)塊鏈層以下、BMCS區(qū)塊鏈以上的中間CA對(duì)應(yīng)的區(qū)塊鏈層,由相應(yīng)級(jí)別的管理者維護(hù);多行業(yè)對(duì)應(yīng)的BMCS區(qū)塊鏈層,獲得多個(gè)行業(yè)的根區(qū)塊鏈層或中間區(qū)塊鏈層信任,由最終公共管理者維護(hù)。
圖5 分布式信任結(jié)構(gòu)
PKI有CA證書和用戶證書2種類型,本文的區(qū)塊鏈平臺(tái)則有區(qū)塊鏈的行業(yè)證書和設(shè)備的行業(yè)證書。區(qū)塊鏈的行業(yè)證書是區(qū)塊鏈平臺(tái)行業(yè)身份的證明,又可分為根證書和授權(quán)證書,根證書由行業(yè)根區(qū)塊鏈層(信任源)自簽發(fā),授權(quán)證書包括從行業(yè)根區(qū)塊鏈層到BMCS區(qū)塊鏈層之間所有上級(jí)簽發(fā)給下級(jí)的證書,用來聲明持有該證書的區(qū)塊鏈層是行業(yè)根信任的,BMCS區(qū)塊鏈層擁有多個(gè)行業(yè)的授權(quán)證書。設(shè)備的行業(yè)證書由區(qū)塊鏈網(wǎng)絡(luò)頒發(fā)給終端設(shè)備。
分布式信任結(jié)構(gòu)通過證書和智能合約建立信任路徑,如圖6所示。從BMCS至根的每個(gè)區(qū)塊鏈層都至少有一個(gè)相應(yīng)的智能合約,其地址指向相應(yīng)區(qū)塊鏈網(wǎng)絡(luò)。證書的使用者ID和頒發(fā)者ID字段存儲(chǔ)合約地址,地址指向的區(qū)塊鏈合約中記錄著上級(jí)簽發(fā)的授權(quán)證書,因此,證書字段的地址和合約記錄的證書提供了行業(yè)網(wǎng)中從最終行業(yè)證書到根證書的驗(yàn)證路徑,利用該路徑能夠驗(yàn)證證書在其行業(yè)信任結(jié)構(gòu)中的可靠性。圖6給出了行業(yè)i從設(shè)備的行業(yè)證書到根證書的驗(yàn)證路徑,設(shè)備行業(yè)證書的頒發(fā)者合約ID字段指向BMCS區(qū)塊鏈網(wǎng)絡(luò)中的合約in,合約in存儲(chǔ)有行業(yè)i的授權(quán)證書,而授權(quán)證書的頒發(fā)者合約ID字段指向根區(qū)塊鏈層的合約i0,合約i0存儲(chǔ)有行業(yè)i的根證書,因此,依據(jù)此路徑能完成設(shè)備行業(yè)證書的驗(yàn)證。如果設(shè)備的行業(yè)證書不是由可信的區(qū)塊鏈層簽發(fā),則用戶端將檢測到并進(jìn)行報(bào)錯(cuò)。
圖6 證書驗(yàn)證路徑
值得注意的是,在實(shí)際操作中,使用區(qū)塊鏈代替每一級(jí)CA節(jié)點(diǎn)的方式較難普及,因此,考慮到PKI實(shí)現(xiàn)多行業(yè)要承擔(dān)較大的風(fēng)險(xiǎn),本文中只有多行業(yè)的BMCS區(qū)塊鏈層是必須部署的,其他層可根據(jù)實(shí)際情況逐步實(shí)現(xiàn)。如果其他上級(jí)CA不以圖5所示的分布式模式部署,則只需將證書的頒發(fā)者合約ID字段添加為CA的私鑰,使用者合約ID字段置空。
BMCS模型通過在以太坊區(qū)塊鏈上部署相應(yīng)ISC實(shí)現(xiàn)對(duì)多行業(yè)證書的管理,各行業(yè)ISC的內(nèi)部證書策略不盡相同,但應(yīng)包含證書全生命周期的創(chuàng)建、更新、撤銷和驗(yàn)證等基本操作。本節(jié)闡述ISC證書功能的設(shè)計(jì),ISC主要包含以下6個(gè)功能:
1)初始化。ISC由處于分布式信任結(jié)構(gòu)中的行業(yè)上級(jí)管理者部署在BMCS區(qū)塊鏈上,其本身與行業(yè)沒有關(guān)聯(lián),不具備管理行業(yè)證書的權(quán)利,因此,需要通過上級(jí)行業(yè)簽發(fā)授權(quán)證書ApproveCert(遵循區(qū)塊鏈證書格式)獲得認(rèn)可。假設(shè)每個(gè)行業(yè)有一個(gè)上級(jí)管理者節(jié)點(diǎn)(層),要求該節(jié)點(diǎn)賬戶的私鑰得到嚴(yán)格保護(hù)。如表1所示,上級(jí)管理節(jié)點(diǎn)賬戶通過createApproveCert()函數(shù)將獲得授權(quán)的行業(yè)subject、使用者合約地址subjectContractId、授權(quán)狀態(tài)isApproved等其他證書信息寫入ISC合約,存儲(chǔ)在approveCertListById[]結(jié)構(gòu)中,其中,isApproved=true表示已獲得授權(quán),subjectContractId是當(dāng)前ISC的地址。在初始化之后,ISC具有了行業(yè)唯一性。
表1 行業(yè)智能合約初始化的相關(guān)數(shù)據(jù)結(jié)構(gòu)和函數(shù)
2)行業(yè)信息注冊(cè)。在新行業(yè)關(guān)聯(lián)ISC時(shí),可通過如下方式完成在區(qū)塊鏈上的注冊(cè):如表2所示,行業(yè)系統(tǒng)將行業(yè)信息提交給BMCS區(qū)塊鏈網(wǎng)絡(luò),網(wǎng)絡(luò)中的節(jié)點(diǎn)首先要檢查信息,確定該行業(yè)未注冊(cè)(doesExist=false),然后調(diào)用合約的registerIndustry()函數(shù)將行業(yè)唯一標(biāo)識(shí)符industryId、行業(yè)名稱industryName、行業(yè)注冊(cè)狀態(tài)doesExist等相關(guān)信息寫入ISC合約,存儲(chǔ)在industryListById[]中,其中,doesExist=true表示已完成注冊(cè)。
表2 行業(yè)智能合約注冊(cè)行業(yè)信息的相關(guān)數(shù)據(jù)結(jié)構(gòu)和函數(shù)
3)創(chuàng)建行業(yè)證書。行業(yè)證書基于區(qū)塊鏈證書格式創(chuàng)建,如表3所示,結(jié)構(gòu)Certificate{}定義區(qū)塊鏈行業(yè)證書的格式。當(dāng)行業(yè)系統(tǒng)將證書申請(qǐng)信息(包含行業(yè)ID等必要數(shù)據(jù))提交給網(wǎng)絡(luò)時(shí),網(wǎng)絡(luò)中的節(jié)點(diǎn)首先審核提交的信息,確定行業(yè)身份正確(doesExist=ture),然后通過函數(shù)createCert()調(diào)用Certificate結(jié)構(gòu),將證書序列號(hào)certId、使用者合約地址subjectContractId、頒發(fā)者合約地址issuerContractId、有效期、用到的散列算法等信息以區(qū)塊鏈證書的形式進(jìn)行創(chuàng)建,其中,certId=sha256(abi.encodePacked(_subject,msg.sender)),由于行業(yè)證書是頒發(fā)給設(shè)備的,因此subjectContractId置空,issuerContractId中寫入當(dāng)前ISC合約的地址。最后,將創(chuàng)建的證書certificate存儲(chǔ)在certListById[]中,以區(qū)塊形式發(fā)布到網(wǎng)絡(luò)節(jié)點(diǎn)供設(shè)備下載,將證書的哈希存儲(chǔ)在certHashListById[]中。
表3 行業(yè)智能合約創(chuàng)建證書的相關(guān)數(shù)據(jù)結(jié)構(gòu)和函數(shù)
4)撤銷證書。對(duì)證書懷疑或證書自然過期需要撤銷已頒發(fā)的證書,由于區(qū)塊鏈上無法真正刪除信息,因此通過將證書哈希添加到撤銷數(shù)組revokedCertHashList ById[]中來標(biāo)記證書狀態(tài)為已撤銷。
5)驗(yàn)證證書。下載了證書的設(shè)備在與其他實(shí)體通信時(shí),需驗(yàn)證行業(yè)身份證書的正確性。設(shè)備證書的驗(yàn)證由部署在特定區(qū)域的遠(yuǎn)程輕服務(wù)器完成,驗(yàn)證過程中的相關(guān)數(shù)據(jù)結(jié)構(gòu)和函數(shù)如表4所示。
表4 行業(yè)智能合約驗(yàn)證證書的相關(guān)數(shù)據(jù)結(jié)構(gòu)和函數(shù)
設(shè)備提交驗(yàn)證申請(qǐng)(包含待驗(yàn)證證書tobeVerifyCert的證書序列號(hào)certId、頒發(fā)者合約地址issuerContractId等)給輕服務(wù)器,輕服務(wù)器節(jié)點(diǎn)調(diào)用地址tobeVerifyCert.issuerContractId指向的合約,通過合約的verifyCert()函數(shù)驗(yàn)證證書。verifyCert()函數(shù)對(duì)證書的驗(yàn)證分為3個(gè)步驟:
(1)輸入待驗(yàn)證證書tobeVerifyCert的證書序列號(hào)certId,檢查certListById[]中是否存在certId對(duì)應(yīng)的證書Certificate(inList=true)。
(2)若存在,則判斷證書頒發(fā)者是否獲得了授權(quán)。如前文所述,Certificate.issuerContractId字段的地址和合約approveCertListbyId[]存儲(chǔ)的授權(quán)證書形成驗(yàn)證路徑,如果當(dāng)前合約存儲(chǔ)中存在授權(quán)證書(isApproved=true),則繼續(xù)下一步。
(3)判斷證書是否在有效期內(nèi),即Certificate.issuedDate≤now≤Certificate.expiredDate且未被撤銷,即sha256(certificate)存在于certListHashById[]且不在revokedCertHashListById[]列表中(isValid=true)。
驗(yàn)證結(jié)果返回到verifyResult[]中,只有以上3個(gè)條件同時(shí)為true,才返回sha256(Certificate),其他情形都返回證書不可信的消息。設(shè)備比較返回哈希值和sha256(tobeVerifyCert),兩者一致則表示證書正確。
6)更新證書。更新證書本質(zhì)是重新簽發(fā)新證書替換原有證書,過程與創(chuàng)建新證書類似,不同的是更新證書時(shí)需要將原證書散列添加到ISC的revokedCertHashListById[]存儲(chǔ)中。
本節(jié)以居民生活中水(i)、電(j)等行業(yè)的讀卡器與智能卡認(rèn)證為例,給出BMCS模型業(yè)務(wù)流程如圖7所示,其中,多應(yīng)用讀卡器是BMCS模型中的多應(yīng)用輕量級(jí)終端設(shè)備。模型涉及行業(yè)授權(quán)以及證書的申請(qǐng)、簽發(fā)、驗(yàn)證、更新和撤銷等過程,由于更新、撤銷過程與簽發(fā)、驗(yàn)證類似,因此,在圖7中簡化了更新、撤銷操作的詳細(xì)過程。上級(jí)管理者節(jié)點(diǎn)初始化并部署其行業(yè)唯一的ISC,要求上級(jí)管理者節(jié)點(diǎn)是分布式信任結(jié)構(gòu)且從行業(yè)根開始信任的。在初始化時(shí),上級(jí)管理者將授權(quán)證書存儲(chǔ)在BMCS區(qū)塊鏈網(wǎng)絡(luò)以傳遞信任。行業(yè)后臺(tái)系統(tǒng)是行業(yè)業(yè)務(wù)的綜合服務(wù)中心,在本文模型中可以是供水公司、電力公司、供氣公司、公交公司等系統(tǒng),通過網(wǎng)絡(luò)與其他部分連接,行業(yè)后臺(tái)系統(tǒng)發(fā)送申請(qǐng)、更新或撤銷證書的請(qǐng)求信息給BMCS模型,BMCS對(duì)信息進(jìn)行處理并做出響應(yīng)。BMCS創(chuàng)建的證書簽發(fā)給多應(yīng)用讀卡器,利用多應(yīng)用文件系統(tǒng)[27]存儲(chǔ)各行業(yè)證書及其他數(shù)據(jù),其具備讀取多個(gè)行業(yè)智能卡的能力。讀卡器通過輕服務(wù)器連接到區(qū)塊鏈網(wǎng)絡(luò),在與智能卡進(jìn)行身份認(rèn)證時(shí),通過比較區(qū)塊鏈返回哈希值與計(jì)算所獲得證書的哈希值來驗(yàn)證證書的正確性。
在跨行業(yè)多應(yīng)用綜合管理中,傳統(tǒng)的中心化系統(tǒng)將多個(gè)行業(yè)的證書信息集成在一個(gè)單一的中心機(jī)構(gòu)中,證書的安全性完全依賴于中心服務(wù)器,一旦中心服務(wù)器遭受外界非法攻擊,將會(huì)影響到整個(gè)網(wǎng)絡(luò)。隨后提出的部分分散化系統(tǒng)大多保留了中心服務(wù)器的功能,將關(guān)注點(diǎn)放在了去中心化數(shù)據(jù)庫,這在一定程度上緩解了證書系統(tǒng)面臨的威脅,但極度集中信任的中心服務(wù)器仍存在局限性。
本文結(jié)合區(qū)塊鏈無中心化、集體維護(hù)、難以篡改等特點(diǎn),提出一種分布式的解決方案,在分布式區(qū)塊鏈平臺(tái)處理和存儲(chǔ)各行業(yè)的數(shù)據(jù)信息,所有節(jié)點(diǎn)共同維護(hù)系統(tǒng)中的證書操作。相比多個(gè)行業(yè)信息集中在可信中心而言,本文方案避免了單點(diǎn)故障給多行業(yè)系統(tǒng)帶來的成倍威脅,大幅提高了多應(yīng)用證書系統(tǒng)的安全性。同時(shí),區(qū)塊鏈本身存在大量分布式對(duì)等節(jié)點(diǎn),使得其能抵抗分布式拒絕服務(wù)攻擊DDoS,而CA服務(wù)器很容易通過DDoS攻擊來摧毀整個(gè)系統(tǒng)。
分布式信任結(jié)構(gòu)提供了行業(yè)的信任鏈,要求合法行業(yè)才能在BMCS模型中創(chuàng)建自己的ISC,避免了惡意合約的寫入。利用證書和智能合約建立的證書驗(yàn)證路徑,能夠保證各行業(yè)的獨(dú)立性和證書驗(yàn)證的正確性,防止惡意證書進(jìn)入。此外,BMCS模型基于區(qū)塊鏈構(gòu)建,具備區(qū)塊鏈技術(shù)的優(yōu)良特性,忽略了對(duì)其自身礦工節(jié)點(diǎn)等組件的分析,而著重分析新部署在終端特定區(qū)域的遠(yuǎn)程輕服務(wù)器。輕服務(wù)器是區(qū)塊鏈網(wǎng)絡(luò)的節(jié)點(diǎn),符合區(qū)塊鏈網(wǎng)絡(luò)對(duì)節(jié)點(diǎn)的驗(yàn)證機(jī)制,當(dāng)某個(gè)節(jié)點(diǎn)受到惡意更改時(shí),其他節(jié)點(diǎn)在驗(yàn)證過程中很快就會(huì)檢測到,因此,攻擊者很難對(duì)節(jié)點(diǎn)造成威脅。此外,輕服務(wù)器具備輕節(jié)點(diǎn)特性,依賴輕以太坊子協(xié)議[20]且僅同步區(qū)塊鏈的部分關(guān)鍵數(shù)據(jù)(Merkel散列根值[18]),這使得即使其受到攻擊,攻擊者也無法獲取完整信息。綜上,雖然輕服務(wù)器相對(duì)于設(shè)備在一定程度上形成了中心,但是該中心不會(huì)對(duì)BMCS模型的安全產(chǎn)生影響。
本節(jié)以水行業(yè)為例,搭建區(qū)塊鏈網(wǎng)絡(luò)對(duì)BMCS模型進(jìn)行驗(yàn)證和性能分析。實(shí)驗(yàn)在處理器為Intel?Pentium?CPU G645 @ 2.90 GHz的操作系統(tǒng)上完成。使用以太坊go-ethereum[28]搭建私有鏈,配置創(chuàng)世區(qū)塊,為降低挖礦難度,創(chuàng)世區(qū)塊難度設(shè)置為較小值“0x40000”,在實(shí)際使用中需根據(jù)設(shè)備性能和安全性要求合理配置。
在同一臺(tái)計(jì)算機(jī)上創(chuàng)建3個(gè)節(jié)點(diǎn)集群部署以太坊私有鏈,其中,2個(gè)節(jié)點(diǎn)以全模式啟動(dòng)geth,作為全節(jié)點(diǎn),另一個(gè)節(jié)點(diǎn)以輕模式啟動(dòng),充當(dāng)輕服務(wù)器,使用admin.addPeer()方法連接3個(gè)節(jié)點(diǎn)。使用0.4.24版solidity語言[22]在remix-ide[29]上編寫智能合約并部署在所有節(jié)點(diǎn)上。調(diào)用合約功能,實(shí)驗(yàn)結(jié)果如圖8~圖12所示。
圖8 remix-ide網(wǎng)頁端水行業(yè)管理證書的合約界面
圖9 水行業(yè)上級(jí)管理者創(chuàng)建授權(quán)證書的操作界面
圖10 注冊(cè)行業(yè)信息的操作界面
圖11 創(chuàng)建行業(yè)證書的操作界面
圖12 驗(yàn)證行業(yè)證書的操作界面
圖8顯示合約部署后的所有相關(guān)函數(shù)和數(shù)據(jù)結(jié)構(gòu),包含初始化、注冊(cè)行業(yè)信息、創(chuàng)建行業(yè)證書、驗(yàn)證證書、更新和撤銷證書等功能,其中更新和撤銷不再贅述。部署成功后水行業(yè)與該合約唯一的地址綁定。在新行業(yè)加入BMCS之前,首先需要獲得行業(yè)根的授權(quán)(如圖9所示)并注冊(cè)行業(yè)信息(如圖10所示),然后才能進(jìn)行該行業(yè)證書的管理操作。水行業(yè)上級(jí)管理節(jié)點(diǎn)通過將授權(quán)證書(根證書)存儲(chǔ)在當(dāng)前智能合約中完成授權(quán),對(duì)于其他行業(yè),則由其相應(yīng)管理節(jié)點(diǎn)寫在對(duì)應(yīng)行業(yè)合約存儲(chǔ)中。在授權(quán)證書創(chuàng)建后,利用交易地址查詢approveCertListByAdress[]中的證書序列號(hào),輸入獲得的序列號(hào)可以看到授權(quán)證書的使用者合約地址等于當(dāng)前合約地址(如圖8所示)。圖11所示為簽發(fā)給設(shè)備的行業(yè)證書,設(shè)備證書的頒發(fā)者合約地址等于授權(quán)證書(如圖9所示)的使用者合約地址。證書的驗(yàn)證通過函數(shù)verifyCert()在輕服務(wù)器節(jié)點(diǎn)執(zhí)行,圖12是對(duì)圖11所創(chuàng)建證書的驗(yàn)證。輸入圖11中證書的序列號(hào)和頒發(fā)者合約地址,驗(yàn)證結(jié)果“inList”“isApproved”“isValid”值都顯示為“true”,并返回了證書的哈希值。當(dāng)輸入其他序列號(hào)時(shí),“inList”“isApproved”“isValid”值全部顯示為“false”。只有“inList”“isApproved”“isValid”3個(gè)值都為“true”時(shí),才返回證書哈希值。實(shí)驗(yàn)結(jié)果表明,BMCS模型可通過在區(qū)塊鏈網(wǎng)絡(luò)部署各行業(yè)智能合約來管理多行業(yè)證書全生命周期的基本操作。
通過實(shí)驗(yàn)結(jié)果可以看出,BMCS模型管理證書的成本主要來源于合約的部署以及每個(gè)函數(shù)交易和執(zhí)行消耗的gas量,成本大小與函數(shù)復(fù)雜度相關(guān)。測試水行業(yè)智能合約顯示,部署合約消耗3 309 379 gas,按照當(dāng)前以太幣的價(jià)格,相當(dāng)于$12.9,授權(quán)、注冊(cè)信息、創(chuàng)建證書、驗(yàn)證和撤銷分別為$0.440、$0.326、$0.437、$0.235和$0.006,合計(jì)為$14.344。而傳統(tǒng)CA維護(hù)一個(gè)證書的成本大約在$100~$1 000不等??梢钥闯?在BMCS區(qū)塊鏈上維護(hù)一個(gè)行業(yè)證書系統(tǒng)的成本遠(yuǎn)小于傳統(tǒng)CA。因此,行業(yè)或個(gè)人在使用證書服務(wù)時(shí),無需單獨(dú)部署PKI系統(tǒng),只要加入BMCS區(qū)塊鏈網(wǎng)絡(luò),即可通過很少的費(fèi)用來獲得該模型提供的證書服務(wù),且該模型多應(yīng)用的特點(diǎn)可有效降低建設(shè)、運(yùn)行以及維護(hù)各行業(yè)PKI系統(tǒng)所需的成本。
區(qū)塊鏈平臺(tái)管理證書時(shí)主要包括簽發(fā)證書和驗(yàn)證證書2個(gè)耗時(shí)段,前者包含添加新塊、對(duì)新事務(wù)進(jìn)行共識(shí)和算法計(jì)算的時(shí)間,添加新塊約為14 s,共識(shí)時(shí)間可根據(jù)情況緊急程度來設(shè)定。區(qū)塊鏈中的證書不考慮簽名過程,僅在存儲(chǔ)時(shí)使用哈希算法,而在同等情況下,哈希算法SHA-256的計(jì)算耗時(shí)約為簽名算法如RSA-1024的1/10,綜合考慮,BMCS模型平均僅需幾分鐘便可簽發(fā)一個(gè)新證書。驗(yàn)證證書在輕服務(wù)器節(jié)點(diǎn)完成,由于輕節(jié)點(diǎn)僅同步區(qū)塊鏈部分?jǐn)?shù)據(jù)(區(qū)塊頭容量大約為80 kB),相比同步完整數(shù)據(jù)(區(qū)塊容量大約為1 MB)的全節(jié)點(diǎn),其能快速地驗(yàn)證證書,且區(qū)塊鏈網(wǎng)絡(luò)之間節(jié)點(diǎn)是同步的,無需使用發(fā)出CRL或響應(yīng)OCSP查詢的服務(wù),待驗(yàn)證的設(shè)備僅需在區(qū)塊鏈存儲(chǔ)中查詢證書序列號(hào)所對(duì)應(yīng)的散列,而無需驗(yàn)證簽名,因此,證書鏈及證書的驗(yàn)證快速高效。
分析BMCS模型可以看出,其具備動(dòng)態(tài)擴(kuò)展行業(yè)應(yīng)用的能力,多應(yīng)用終端設(shè)備的應(yīng)用更改通過增刪多應(yīng)用文件系統(tǒng)的應(yīng)用文件實(shí)現(xiàn),而BMCS區(qū)塊鏈網(wǎng)絡(luò)中應(yīng)用的更改則通過受信任的上級(jí)行業(yè)寫入其他行業(yè)合約來實(shí)現(xiàn)。此外,該模型還具備靈活的存儲(chǔ)能力,區(qū)塊鏈可以存儲(chǔ)遠(yuǎn)多于證書驗(yàn)證數(shù)據(jù)的信息,因此,可在區(qū)塊鏈上存儲(chǔ)設(shè)備訪問控制策略和其他通信策略,從而為后續(xù)的功能擴(kuò)展提供便利。
多應(yīng)用證書管理系統(tǒng)的安全性至關(guān)重要,本文基于分布式的區(qū)塊鏈技術(shù),建立一種多應(yīng)用證書系統(tǒng)模型BMCS,該模型能為多行業(yè)的證書認(rèn)證服務(wù)提供綜合管理,避免多應(yīng)用系統(tǒng)建立在PKI上引起的單點(diǎn)故障問題。在BMCS模型中,各行業(yè)信任根通過分布式信任結(jié)構(gòu)為BMCS區(qū)塊鏈網(wǎng)絡(luò)授權(quán),授權(quán)之后的網(wǎng)絡(luò)部署相應(yīng)行業(yè)合約ISC管理證書,頒發(fā)給設(shè)備的證書通過輕服務(wù)器進(jìn)行快速驗(yàn)證。同時(shí),在輕量級(jí)多應(yīng)用設(shè)備中引入的文件系統(tǒng)能夠在終端安全獨(dú)立地加載多行業(yè)證書,具有靈活擴(kuò)展行業(yè)應(yīng)用、一終端多應(yīng)用的優(yōu)點(diǎn)。實(shí)驗(yàn)結(jié)果表明,該模型在多應(yīng)用認(rèn)證服務(wù)中具有較高的安全性。下一步考慮將該模型應(yīng)用于實(shí)際中的水、電和燃?xì)獾榷鄠€(gè)跨行業(yè)領(lǐng)域,以實(shí)現(xiàn)一個(gè)讀卡端設(shè)備讀取多種行業(yè)卡的目的。