劉亞雪,楊小寶,劉 圓,惠小強
(1.西安郵電大學 電子工程學院,西安 710121; 2.西安郵電大學 物聯網與兩化融合研究院,西安 710061)
隨著新型智慧城市時代的到來,集約融合系統引起了廣泛關注,跨領域操作、多應用設備逐漸成為一種新的發展趨勢[1]。集成的多應用證書系統可統一管理多個行業的身份證書,減少多個單一系統的重復建設和不必要的投資,從而更好地發揮資源價值。當前通用的證書管理系統是基于認證機構(Certification Authority,CA)的公鑰基礎設施(Public Key Infrastructure,PKI)體系[2]。從一些案例可以看出,由于PKI將信任極度集中于可信中心CA,導致其存在單點故障等安全性缺陷[3],若在PKI體系中建立多領域或應用中的多份信任,這種問題會被成倍放大,從而導致嚴重的系統性風險。
針對PKI的單點故障問題,研究人員提出了一些解決方案,其中包括基于日志的PKI方法與信任網絡方法。在基于日志的PKI方法中,CA發布的證書由公共日志服務器監控,任何不端行為都能被檢測到,但該方法仍依賴于中心化服務器,且無法進行證書撤銷[4]。在信任網絡方法中,系統中所有用戶的信任關系構成信任網絡,用戶通過簽發他們的公鑰證書來指定某人是可信的,這是一種完全分散的方案,雖然解決了中心化難題,但是新用戶很難加入,且其通過指定用戶為撤銷者來撤銷證書的處理方式容易使無效證書受到信任[3]。
作為一種新興的分布式方案,區塊鏈技術的應用范圍目前已擴展到金融、物聯網和安全等領域[5]。區塊鏈技術本身的分散性能夠解決PKI固有的單點故障等問題,利用塊鏈式結構存儲和驗證數據,通過共識機制生成和更新數據[6],使數據能被用于構建分布式PKI系統,從而實現相應功能。近年來,學者們通過比特幣的一種“命名-存儲”方式將用戶的密鑰和身份綁定到區塊鏈,實現分布式的PKI認證。以Certcoin[7]、Authcoin[8]、Blockstack[9]和Cecoin[10]為代表的方案已經被成功實施,但這些方案仍存在一定缺陷,如不能阻止非法占用用戶,無法設置更多屬性等。另外,一些研究人員試圖利用以太坊區塊鏈的智能合約來實現PKI功能。文獻[11]提出一種由智能合約控制的分散式系統SCPKI,利用智能合約綁定用戶的身份和標識,發布用戶希望公開的更多屬性。文獻[12]設計并開發一個托管在以太坊區塊鏈上的PKI系統,通過智能合約控制CA的屬性和標識,該框架緩解了證書撤銷和CA行為不端的問題。但是,上述2種方案仍然保留了中心化的認證服務器或CA,單點故障問題依然存在。
通過分析近年來的研究成果可以看出,完全分散的PKI方案無法進行更多領域的操作,保留了認證中心的改進PKI結構仍存在中心化等固有問題。本文針對跨行業的資源整合問題,提出一種基于區塊鏈的多應用證書系統模型BMCS,利用區塊鏈去中心化、分布式的特性以及智能合約分布式應用、易編程的特點,代替傳統PKI證書系統,從而實現多行業身份證書的綜合管理。
PKI是一種使用公鑰密碼技術建立的安全基礎設施,通過定義數字證書頒發、驗證、更新和撤銷所需的策略和過程,提供一種網絡中安全驗證身份的方法[3]。公鑰PKI管理通常基于X.509v3證書標準[2],該標準提供了一些外部實體(證書認證機構)對私有密鑰所有權的驗證,通過在證書中綁定用戶的身份與公鑰建立所有權,證書由PKI的核心組件CA用其私鑰進行簽名。CA簽發的證書由PKI中多個組件協同管理,典型PKI系統由簽發證書的可信中心CA、存儲證書列表的證書存儲庫(Certificate Repository,CR)、存儲撤銷證書列表的證書撤銷庫(Certificate Revoke Repository,CRL)、查詢證書的目錄服務器輕量級目錄訪問協議(Lightweight Directory Access Protocol,LDAP)和在線證書狀態協議(Online Certificate Status Protocol,OCSP)等組件組成[13],PKI的功能結構如圖1所示。

圖1 PKI的功能結構
一個PKI體系中存在多個CA,它們之間通過證書建立信任關系,信任模型[14]是PKI創建和管理不同CA之間信任關系的框架,其原理如圖2所示。

圖2 PKI信任模型
單個行業內所有CA均組成樹狀結構且信任同一根CA,信任的建立是通過根CA或根CA認可的下級CA簽發CA證書給其他CA來實現的,CA證書是CA身份受信任的證明,它包含其他CA的公鑰和身份以及上級CA的簽名。證書驗證過程路徑的尋找和遍歷依賴于信任模型,因此,PKI對用戶證書的驗證從信任模型的根CA公鑰開始,到獲得通信對方的可靠公鑰時結束。該驗證方式將最多的信任集中于根CA,導致根CA成為單一信任點,如果其私鑰受到攻擊,則整個系統都會面臨風險。在多行業內,所有CA組成多個樹結構,如果使用代理的方式將多個行業的證書系統建立在PKI-CA體系中,風險會提高,因為除了根CA,代理CA也成了單一故障點。在這種多應用PKI證書系統中,根CA受到攻擊時會威脅到每個CA,而代理CA受到攻擊時會威脅到每個行業。
區塊鏈技術最早由NAKAMOTO于2008年提出[15],它是以鏈表形式維護的一組稱為“塊”的文件。組成鏈的每個塊中都記錄著前一個塊的散列和一組按時間順序排列的事務數據,分散對等節點(礦工)組成的網絡能夠維護這些數據,并利用共識機制競爭記賬權,最終執行并記錄相同的事務。區塊鏈的本質是一個無第三方中心控制、由多方節點共同維護的分布式基礎架構,因此,其能避免單點故障問題[16]。區塊鏈技術的相關概念如下:
1)區塊鏈網絡。區塊鏈使用的點對點(Peer to Peer lending,P2P)是一個分布式的應用程序架構[17],其本質是一個去中心、防篡改的網絡,其中所有節點都具有同等的權限和義務,以相同的方式參與交易的審核,且審核者身份不可抵賴。區塊鏈網絡的去中心化和防篡改性由共識機制和區塊鏈副本來保證。
2)事務。事務是一種由輸入、輸出和數字簽名3個部分組成的數據結構,在一段時間內,其以Merkle樹結構[18]的形式連接,并由組成區塊鏈網絡的節點礦工填充到塊中,塊中已被確認的事務不能再更改。
3)挖礦。挖礦是驗證區塊鏈上事務的過程,礦工通過網絡提供的獎勵獲得激勵,通過計算復雜的數學難題來競爭這筆獎勵,獲勝者將贏得獎勵并獲得將事務記錄到區塊鏈的權力,共識機制能保證所記錄事務的一致性。
4)共識機制。共識機制是一種預先確定的策略,目的是在礦工間達成要在區塊鏈上添加哪個礦工記錄的共識,保證數據的一致性和不可抵賴性。共識機制要求區塊鏈中必須有超過關鍵數量的節點認同的區塊數據才是有效的。區塊鏈有多種共識機制,如工作量證明(Proof of Work,POW)[15]和權益證明(Proof of Stake,POS)[19]。
以太坊是一個完全開放的分散式平臺,其有助于實現區塊鏈上分布式應用程序的開發[20]。智能合約用來開發分布式應用,是以太坊區塊鏈上以計算機程序的方式締結和運行的各種數字合同[21]。以太坊區塊鏈提供了一種復雜且有狀態的圖靈完整語言Solidity[22],可用于實現特定場景的智能合約。
智能合約由一組函數(合約中的可執行代碼單元)和數據(合約的狀態)組成,允許用戶將所需功能編程為函數代碼,從而描述復雜的邏輯[23]。合約函數的執行由包含函數所需輸入參數的事務來觸發,執行的正確性由共識礦工保證。合約程序一旦編譯完成并成功上傳到區塊鏈網絡,將不能再進行更改。此外,智能合約還支持存儲映射和關系等更復雜的數據結構,并對這些數據結構的修改制定一些規則。
本節通過對區塊鏈自有的礦工節點、輕節點、智能合約以及外部的多應用輕量級終端設備進行設計,構建一種多行業證書的綜合管理模型BMCS,從而進行多行業證書的申請、驗證、簽發、更新和撤銷。
BMCS系統模型運行在以太坊區塊鏈上,包括BMCS區塊鏈網絡和多應用輕量級終端設備。BMCS區塊鏈網絡由所有的礦工節點和遠程輕服務器組成,相應行業證書的操作由行業智能合約(Industry Smart Contract,ISC)控制,其中,礦工負責執行合約定義的操作,遠程輕服務器負責在區塊鏈和設備之間建立聯系。BMCS模型針對的是網絡中的輕量級設備,為了更好地進行綜合化管理和方便用戶使用多行業服務,BMCS提供了一種多應用輕量級終端設備的設計方法,該設備負責在終端存儲BMCS發布的多個行業證書,識別多個行業的應用并提供相應服務。BMCS模型包含多個組件,架構如圖3所示。

圖3 BMCS系統模型架構
BMCS系統模型的各組件具體如下:
1)礦工節點。礦工節點是區塊鏈網絡上驗證或生成區塊事務的對等節點,和以太坊礦工概念一致。BMCS區塊鏈的礦工可以由任何實體注冊,如應用服務器、電腦或者用戶,但前提是它與網絡的連接是持續的,并且有足夠的存儲空間和計算能力。注冊成功后的礦工節點信息將被同步到網絡,該節點在本文方案中負責執行ISC定義的證書操作策略,起到傳統CA的作用。
2)遠程輕服務器。遠程輕服務器是為了服務輕量級設備,輕量級設備是當前使用廣泛的一類終端設備,如讀卡器、POS機等,這種設備在內存和CPU方面存在局限性,很難承載和跟蹤區塊鏈網絡事務,因此,它們不能成為區塊鏈的節點。遠程輕服務器可以解決上述問題,它是區塊鏈網絡的一部分,作為遠程可信輕節點部署在終端設備的特定區域,用來在區塊鏈網絡與設備之間建立連接。與礦工節點相同,任何合法服務器都可以注冊成為BMCS的輕服務器。但不同的是,礦工是全節點,需要計算和執行區塊鏈事務,保存區塊鏈完整信息,而輕服務器具有輕節點特性,不額外計算和執行事務,僅同步區塊鏈部分關鍵數據(Merkle散列根值[18]),只在更新或下載數據時才從區塊鏈獲取完整數據,這一特性使得其能快速驗證證書。部署了多應用輕量級終端設備的區域中至少有一個輕服務器,設備管理器或管理員可以維護這樣一個遠程輕節點。遠程輕服務器在本文模型中負責驗證設備的行業證書,并在必要時提供證書的下載和更新服務。
3)行業智能合約ISC。行業智能合約ISC相當于區塊鏈上的行業應用程序,它將每個行業的證書簽發、驗證、撤銷等處理過程定義為不同的函數,以程序代碼的形式獨立運行在以太坊區塊鏈上。行業只有在區塊鏈網絡中部署相應ISC,其證書管理才能被執行,各ISC由唯一的合約地址標識,其他組件通過獲得該地址來與合約進行交互。
4)多應用輕量級終端設備。多應用輕量級終端設備是一種具備讀取多行業用戶設備、存儲多行業證書數據能力的輕量級設備。傳統服務2個、3個行業的終端設備通常使用2個、3個PSAM/SAM卡存儲數據[24-25],這種方式占用設備空間大且難以擴展新應用。參考多應用智能卡[26],本文在設備的存儲卡中寫入多應用文件系統[27],來存儲BMCS模型發布的多個行業的數字證書以及其他數據,從而部署能動態擴展更多應用的輕量級終端設備。
本節基于傳統X.509v3證書標準[2]設計一種區塊鏈證書,其由區塊鏈網絡生成和記錄,用來證明區塊鏈網絡或終端設備的行業身份。區塊鏈證書修改了X.509v3證書使用者ID、頒發者ID字段的名稱和存儲值以及使用者和頒發者字段的存儲值,刪除了X.509v3證書的簽名和撤銷模塊,并利用X.509v3證書擴展字段添加了少量與區塊鏈環境相關的信息。X.509v3證書與本文區塊鏈證書對比如圖4所示。

圖4 X.509v3證書與本文區塊鏈證書
與傳統X.509v3證書相比,本文區塊鏈證書主要在以下6個方面進行了改進:
1)使用者合約ID和頒發者合約ID字段,用于保存區塊鏈的智能合約地址。使用者合約ID保存當前區塊鏈的行業合約地址,設備的行業證書字段為空,頒發者合約ID保存簽發此證書區塊鏈的行業合約地址。
2)使用者和頒發者字段,用于保存區塊鏈層級名稱,如頒發者字段存儲行業i的一級區塊鏈層名稱,則使用者字段存儲行業i的二級區塊鏈層名稱。設備的行業證書使用者字段為設備的標識符。
3)添加區塊鏈名字段,用于保存區塊鏈平臺的名稱,本文方案使用以太坊私有區塊鏈。
4)添加哈希算法字段,用于保存計算加載到區塊鏈中證書的散列值的相關散列算法信息。
5)省去簽名算法和簽名值模塊。傳統PKI通過數字簽名驗證證書未被篡改,使得證書具有防偽性。區塊鏈自身具有不可篡改的特性,通過將生成的證書散列值記錄在區塊鏈中來代替簽名過程。驗證過程則通過檢查在區塊鏈存儲中是否存在證書散列來實現,PKI公鑰將對應區塊鏈中證書散列存儲的地址。
6)省去證書撤銷檢查服務URL模塊。區塊鏈系統發布證書不需要OCSP響應和CRL,本文對證書撤銷狀態的更改通過記錄證書散列到ISC的特定數據結構來實現。
為消除PKI-CA體系中信任模型的單點故障問題,本文在區塊鏈平臺設計一種分布式信任結構,該結構保持了PKI中建立信任路徑的邏輯,但增加了分散性。對比PKI通過同一行業的上級CA(如根CA)向下級簽發CA證書建立信任路徑,BMCS區塊鏈網絡要管理多行業的證書,就要獲得各上級區塊鏈網絡層的證書。分布式信任結構使用一個區塊鏈網絡層代替行業的一級CA,通過上級區塊鏈網絡層向下級區塊鏈網絡層簽發區塊鏈本身的行業證書建立信任路徑,最后一級獲得多個區塊鏈行業證書的是BMCS區塊鏈層。
以水(i)、電(j)行業為例的分布式信任結構如圖5所示,使用多個區塊鏈網絡層代替i、j行業的多級CA,為簡化架構并提高系統可拓展性,該結構以BMCS層為主鏈、其他層為側鏈。為簡化描述且不失一般性,分布式信任結構被分為3級:行業根CA對應的根區塊鏈層,由一級管理者維護;行業根CA對應的根區塊鏈層以下、BMCS區塊鏈以上的中間CA對應的區塊鏈層,由相應級別的管理者維護;多行業對應的BMCS區塊鏈層,獲得多個行業的根區塊鏈層或中間區塊鏈層信任,由最終公共管理者維護。

圖5 分布式信任結構
PKI有CA證書和用戶證書2種類型,本文的區塊鏈平臺則有區塊鏈的行業證書和設備的行業證書。區塊鏈的行業證書是區塊鏈平臺行業身份的證明,又可分為根證書和授權證書,根證書由行業根區塊鏈層(信任源)自簽發,授權證書包括從行業根區塊鏈層到BMCS區塊鏈層之間所有上級簽發給下級的證書,用來聲明持有該證書的區塊鏈層是行業根信任的,BMCS區塊鏈層擁有多個行業的授權證書。設備的行業證書由區塊鏈網絡頒發給終端設備。
分布式信任結構通過證書和智能合約建立信任路徑,如圖6所示。從BMCS至根的每個區塊鏈層都至少有一個相應的智能合約,其地址指向相應區塊鏈網絡。證書的使用者ID和頒發者ID字段存儲合約地址,地址指向的區塊鏈合約中記錄著上級簽發的授權證書,因此,證書字段的地址和合約記錄的證書提供了行業網中從最終行業證書到根證書的驗證路徑,利用該路徑能夠驗證證書在其行業信任結構中的可靠性。圖6給出了行業i從設備的行業證書到根證書的驗證路徑,設備行業證書的頒發者合約ID字段指向BMCS區塊鏈網絡中的合約in,合約in存儲有行業i的授權證書,而授權證書的頒發者合約ID字段指向根區塊鏈層的合約i0,合約i0存儲有行業i的根證書,因此,依據此路徑能完成設備行業證書的驗證。如果設備的行業證書不是由可信的區塊鏈層簽發,則用戶端將檢測到并進行報錯。

圖6 證書驗證路徑
值得注意的是,在實際操作中,使用區塊鏈代替每一級CA節點的方式較難普及,因此,考慮到PKI實現多行業要承擔較大的風險,本文中只有多行業的BMCS區塊鏈層是必須部署的,其他層可根據實際情況逐步實現。如果其他上級CA不以圖5所示的分布式模式部署,則只需將證書的頒發者合約ID字段添加為CA的私鑰,使用者合約ID字段置空。
BMCS模型通過在以太坊區塊鏈上部署相應ISC實現對多行業證書的管理,各行業ISC的內部證書策略不盡相同,但應包含證書全生命周期的創建、更新、撤銷和驗證等基本操作。本節闡述ISC證書功能的設計,ISC主要包含以下6個功能:
1)初始化。ISC由處于分布式信任結構中的行業上級管理者部署在BMCS區塊鏈上,其本身與行業沒有關聯,不具備管理行業證書的權利,因此,需要通過上級行業簽發授權證書ApproveCert(遵循區塊鏈證書格式)獲得認可。假設每個行業有一個上級管理者節點(層),要求該節點賬戶的私鑰得到嚴格保護。如表1所示,上級管理節點賬戶通過createApproveCert()函數將獲得授權的行業subject、使用者合約地址subjectContractId、授權狀態isApproved等其他證書信息寫入ISC合約,存儲在approveCertListById[]結構中,其中,isApproved=true表示已獲得授權,subjectContractId是當前ISC的地址。在初始化之后,ISC具有了行業唯一性。

表1 行業智能合約初始化的相關數據結構和函數
2)行業信息注冊。在新行業關聯ISC時,可通過如下方式完成在區塊鏈上的注冊:如表2所示,行業系統將行業信息提交給BMCS區塊鏈網絡,網絡中的節點首先要檢查信息,確定該行業未注冊(doesExist=false),然后調用合約的registerIndustry()函數將行業唯一標識符industryId、行業名稱industryName、行業注冊狀態doesExist等相關信息寫入ISC合約,存儲在industryListById[]中,其中,doesExist=true表示已完成注冊。

表2 行業智能合約注冊行業信息的相關數據結構和函數
3)創建行業證書。行業證書基于區塊鏈證書格式創建,如表3所示,結構Certificate{}定義區塊鏈行業證書的格式。當行業系統將證書申請信息(包含行業ID等必要數據)提交給網絡時,網絡中的節點首先審核提交的信息,確定行業身份正確(doesExist=ture),然后通過函數createCert()調用Certificate結構,將證書序列號certId、使用者合約地址subjectContractId、頒發者合約地址issuerContractId、有效期、用到的散列算法等信息以區塊鏈證書的形式進行創建,其中,certId=sha256(abi.encodePacked(_subject,msg.sender)),由于行業證書是頒發給設備的,因此subjectContractId置空,issuerContractId中寫入當前ISC合約的地址。最后,將創建的證書certificate存儲在certListById[]中,以區塊形式發布到網絡節點供設備下載,將證書的哈希存儲在certHashListById[]中。

表3 行業智能合約創建證書的相關數據結構和函數
4)撤銷證書。對證書懷疑或證書自然過期需要撤銷已頒發的證書,由于區塊鏈上無法真正刪除信息,因此通過將證書哈希添加到撤銷數組revokedCertHashList ById[]中來標記證書狀態為已撤銷。
5)驗證證書。下載了證書的設備在與其他實體通信時,需驗證行業身份證書的正確性。設備證書的驗證由部署在特定區域的遠程輕服務器完成,驗證過程中的相關數據結構和函數如表4所示。

表4 行業智能合約驗證證書的相關數據結構和函數
設備提交驗證申請(包含待驗證證書tobeVerifyCert的證書序列號certId、頒發者合約地址issuerContractId等)給輕服務器,輕服務器節點調用地址tobeVerifyCert.issuerContractId指向的合約,通過合約的verifyCert()函數驗證證書。verifyCert()函數對證書的驗證分為3個步驟:
(1)輸入待驗證證書tobeVerifyCert的證書序列號certId,檢查certListById[]中是否存在certId對應的證書Certificate(inList=true)。
(2)若存在,則判斷證書頒發者是否獲得了授權。如前文所述,Certificate.issuerContractId字段的地址和合約approveCertListbyId[]存儲的授權證書形成驗證路徑,如果當前合約存儲中存在授權證書(isApproved=true),則繼續下一步。
(3)判斷證書是否在有效期內,即Certificate.issuedDate≤now≤Certificate.expiredDate且未被撤銷,即sha256(certificate)存在于certListHashById[]且不在revokedCertHashListById[]列表中(isValid=true)。
驗證結果返回到verifyResult[]中,只有以上3個條件同時為true,才返回sha256(Certificate),其他情形都返回證書不可信的消息。設備比較返回哈希值和sha256(tobeVerifyCert),兩者一致則表示證書正確。
6)更新證書。更新證書本質是重新簽發新證書替換原有證書,過程與創建新證書類似,不同的是更新證書時需要將原證書散列添加到ISC的revokedCertHashListById[]存儲中。
本節以居民生活中水(i)、電(j)等行業的讀卡器與智能卡認證為例,給出BMCS模型業務流程如圖7所示,其中,多應用讀卡器是BMCS模型中的多應用輕量級終端設備。模型涉及行業授權以及證書的申請、簽發、驗證、更新和撤銷等過程,由于更新、撤銷過程與簽發、驗證類似,因此,在圖7中簡化了更新、撤銷操作的詳細過程。上級管理者節點初始化并部署其行業唯一的ISC,要求上級管理者節點是分布式信任結構且從行業根開始信任的。在初始化時,上級管理者將授權證書存儲在BMCS區塊鏈網絡以傳遞信任。行業后臺系統是行業業務的綜合服務中心,在本文模型中可以是供水公司、電力公司、供氣公司、公交公司等系統,通過網絡與其他部分連接,行業后臺系統發送申請、更新或撤銷證書的請求信息給BMCS模型,BMCS對信息進行處理并做出響應。BMCS創建的證書簽發給多應用讀卡器,利用多應用文件系統[27]存儲各行業證書及其他數據,其具備讀取多個行業智能卡的能力。讀卡器通過輕服務器連接到區塊鏈網絡,在與智能卡進行身份認證時,通過比較區塊鏈返回哈希值與計算所獲得證書的哈希值來驗證證書的正確性。
在跨行業多應用綜合管理中,傳統的中心化系統將多個行業的證書信息集成在一個單一的中心機構中,證書的安全性完全依賴于中心服務器,一旦中心服務器遭受外界非法攻擊,將會影響到整個網絡。隨后提出的部分分散化系統大多保留了中心服務器的功能,將關注點放在了去中心化數據庫,這在一定程度上緩解了證書系統面臨的威脅,但極度集中信任的中心服務器仍存在局限性。
本文結合區塊鏈無中心化、集體維護、難以篡改等特點,提出一種分布式的解決方案,在分布式區塊鏈平臺處理和存儲各行業的數據信息,所有節點共同維護系統中的證書操作。相比多個行業信息集中在可信中心而言,本文方案避免了單點故障給多行業系統帶來的成倍威脅,大幅提高了多應用證書系統的安全性。同時,區塊鏈本身存在大量分布式對等節點,使得其能抵抗分布式拒絕服務攻擊DDoS,而CA服務器很容易通過DDoS攻擊來摧毀整個系統。
分布式信任結構提供了行業的信任鏈,要求合法行業才能在BMCS模型中創建自己的ISC,避免了惡意合約的寫入。利用證書和智能合約建立的證書驗證路徑,能夠保證各行業的獨立性和證書驗證的正確性,防止惡意證書進入。此外,BMCS模型基于區塊鏈構建,具備區塊鏈技術的優良特性,忽略了對其自身礦工節點等組件的分析,而著重分析新部署在終端特定區域的遠程輕服務器。輕服務器是區塊鏈網絡的節點,符合區塊鏈網絡對節點的驗證機制,當某個節點受到惡意更改時,其他節點在驗證過程中很快就會檢測到,因此,攻擊者很難對節點造成威脅。此外,輕服務器具備輕節點特性,依賴輕以太坊子協議[20]且僅同步區塊鏈的部分關鍵數據(Merkel散列根值[18]),這使得即使其受到攻擊,攻擊者也無法獲取完整信息。綜上,雖然輕服務器相對于設備在一定程度上形成了中心,但是該中心不會對BMCS模型的安全產生影響。
本節以水行業為例,搭建區塊鏈網絡對BMCS模型進行驗證和性能分析。實驗在處理器為Intel?Pentium?CPU G645 @ 2.90 GHz的操作系統上完成。使用以太坊go-ethereum[28]搭建私有鏈,配置創世區塊,為降低挖礦難度,創世區塊難度設置為較小值“0x40000”,在實際使用中需根據設備性能和安全性要求合理配置。
在同一臺計算機上創建3個節點集群部署以太坊私有鏈,其中,2個節點以全模式啟動geth,作為全節點,另一個節點以輕模式啟動,充當輕服務器,使用admin.addPeer()方法連接3個節點。使用0.4.24版solidity語言[22]在remix-ide[29]上編寫智能合約并部署在所有節點上。調用合約功能,實驗結果如圖8~圖12所示。

圖8 remix-ide網頁端水行業管理證書的合約界面

圖9 水行業上級管理者創建授權證書的操作界面

圖10 注冊行業信息的操作界面

圖11 創建行業證書的操作界面

圖12 驗證行業證書的操作界面
圖8顯示合約部署后的所有相關函數和數據結構,包含初始化、注冊行業信息、創建行業證書、驗證證書、更新和撤銷證書等功能,其中更新和撤銷不再贅述。部署成功后水行業與該合約唯一的地址綁定。在新行業加入BMCS之前,首先需要獲得行業根的授權(如圖9所示)并注冊行業信息(如圖10所示),然后才能進行該行業證書的管理操作。水行業上級管理節點通過將授權證書(根證書)存儲在當前智能合約中完成授權,對于其他行業,則由其相應管理節點寫在對應行業合約存儲中。在授權證書創建后,利用交易地址查詢approveCertListByAdress[]中的證書序列號,輸入獲得的序列號可以看到授權證書的使用者合約地址等于當前合約地址(如圖8所示)。圖11所示為簽發給設備的行業證書,設備證書的頒發者合約地址等于授權證書(如圖9所示)的使用者合約地址。證書的驗證通過函數verifyCert()在輕服務器節點執行,圖12是對圖11所創建證書的驗證。輸入圖11中證書的序列號和頒發者合約地址,驗證結果“inList”“isApproved”“isValid”值都顯示為“true”,并返回了證書的哈希值。當輸入其他序列號時,“inList”“isApproved”“isValid”值全部顯示為“false”。只有“inList”“isApproved”“isValid”3個值都為“true”時,才返回證書哈希值。實驗結果表明,BMCS模型可通過在區塊鏈網絡部署各行業智能合約來管理多行業證書全生命周期的基本操作。
通過實驗結果可以看出,BMCS模型管理證書的成本主要來源于合約的部署以及每個函數交易和執行消耗的gas量,成本大小與函數復雜度相關。測試水行業智能合約顯示,部署合約消耗3 309 379 gas,按照當前以太幣的價格,相當于$12.9,授權、注冊信息、創建證書、驗證和撤銷分別為$0.440、$0.326、$0.437、$0.235和$0.006,合計為$14.344。而傳統CA維護一個證書的成本大約在$100~$1 000不等。可以看出,在BMCS區塊鏈上維護一個行業證書系統的成本遠小于傳統CA。因此,行業或個人在使用證書服務時,無需單獨部署PKI系統,只要加入BMCS區塊鏈網絡,即可通過很少的費用來獲得該模型提供的證書服務,且該模型多應用的特點可有效降低建設、運行以及維護各行業PKI系統所需的成本。
區塊鏈平臺管理證書時主要包括簽發證書和驗證證書2個耗時段,前者包含添加新塊、對新事務進行共識和算法計算的時間,添加新塊約為14 s,共識時間可根據情況緊急程度來設定。區塊鏈中的證書不考慮簽名過程,僅在存儲時使用哈希算法,而在同等情況下,哈希算法SHA-256的計算耗時約為簽名算法如RSA-1024的1/10,綜合考慮,BMCS模型平均僅需幾分鐘便可簽發一個新證書。驗證證書在輕服務器節點完成,由于輕節點僅同步區塊鏈部分數據(區塊頭容量大約為80 kB),相比同步完整數據(區塊容量大約為1 MB)的全節點,其能快速地驗證證書,且區塊鏈網絡之間節點是同步的,無需使用發出CRL或響應OCSP查詢的服務,待驗證的設備僅需在區塊鏈存儲中查詢證書序列號所對應的散列,而無需驗證簽名,因此,證書鏈及證書的驗證快速高效。
分析BMCS模型可以看出,其具備動態擴展行業應用的能力,多應用終端設備的應用更改通過增刪多應用文件系統的應用文件實現,而BMCS區塊鏈網絡中應用的更改則通過受信任的上級行業寫入其他行業合約來實現。此外,該模型還具備靈活的存儲能力,區塊鏈可以存儲遠多于證書驗證數據的信息,因此,可在區塊鏈上存儲設備訪問控制策略和其他通信策略,從而為后續的功能擴展提供便利。
多應用證書管理系統的安全性至關重要,本文基于分布式的區塊鏈技術,建立一種多應用證書系統模型BMCS,該模型能為多行業的證書認證服務提供綜合管理,避免多應用系統建立在PKI上引起的單點故障問題。在BMCS模型中,各行業信任根通過分布式信任結構為BMCS區塊鏈網絡授權,授權之后的網絡部署相應行業合約ISC管理證書,頒發給設備的證書通過輕服務器進行快速驗證。同時,在輕量級多應用設備中引入的文件系統能夠在終端安全獨立地加載多行業證書,具有靈活擴展行業應用、一終端多應用的優點。實驗結果表明,該模型在多應用認證服務中具有較高的安全性。下一步考慮將該模型應用于實際中的水、電和燃氣等多個跨行業領域,以實現一個讀卡端設備讀取多種行業卡的目的。