劉天野, 張艷碩,2, 石 鈺, 朱倩倩
1. 北京電子科技學(xué)院 密碼科學(xué)與技術(shù)系, 北京100070
2. 密碼科學(xué)技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室, 北京100878
公鑰密碼體制自1976 年由Diffie 和Hellman 兩位學(xué)者提出[1]后, 40 余年來(lái)得到了長(zhǎng)足的發(fā)展與改進(jìn). 作為組成這一體制重要一環(huán)的密鑰生命周期在傳統(tǒng)PKI 架構(gòu)、基于身份的密碼體制和無(wú)證書(shū)公鑰密碼系統(tǒng)中均扮演著特殊角色. 然而在現(xiàn)如今的主流應(yīng)用中, 密鑰生命周期并沒(méi)有引起高度重視, 也沒(méi)有對(duì)密鑰生命周期進(jìn)行專(zhuān)業(yè)性、模塊化的設(shè)計(jì)與管理, 以至于在密鑰生成、更新、注銷(xiāo)和歸檔等方面產(chǎn)生了諸多問(wèn)題.
現(xiàn)階段, 密鑰生命周期主要是指公私鑰對(duì)以及相關(guān)證書(shū)的創(chuàng)建、頒發(fā)及取消等過(guò)程. 在傳統(tǒng)的PKI 架構(gòu)中, 密鑰的生命周期主要以LDAP (Lightweight Directory Access Protocol) 服務(wù)器進(jìn)行管理維護(hù), 其安全性已經(jīng)受到了李瀾等[2]業(yè)界專(zhuān)業(yè)人士的質(zhì)疑. 針對(duì)LDAP 目錄服務(wù)的威脅主要有針對(duì)認(rèn)證信息的攻擊、針對(duì)數(shù)據(jù)通信的攻擊和針對(duì)訪問(wèn)權(quán)限的攻擊等[3]. 如何應(yīng)用新技術(shù)破解密鑰生命周期的管理與維護(hù)難題已成為一項(xiàng)亟待解決的重要工作.
區(qū)塊鏈技術(shù)也被稱(chēng)為分布式賬簿技術(shù)[4](Distributed Ledger Technology), 用于在分布式的網(wǎng)絡(luò)中構(gòu)建起節(jié)點(diǎn)之間的共識(shí). 區(qū)塊鏈技術(shù)具有去中心化、時(shí)序數(shù)據(jù)、集體維護(hù)、準(zhǔn)匿名性、安全可信和可編程性等特點(diǎn). 通過(guò)運(yùn)用區(qū)塊鏈技術(shù), 能夠有效解決中心節(jié)點(diǎn)易受攻擊、數(shù)據(jù)庫(kù)易篡改等現(xiàn)實(shí)問(wèn)題.
應(yīng)用區(qū)塊鏈技術(shù), 針對(duì)密鑰生命周期這一應(yīng)用場(chǎng)景, 對(duì)傳統(tǒng)密鑰生命周期進(jìn)行重新設(shè)計(jì), 解決了現(xiàn)存的實(shí)際問(wèn)題, 同時(shí)有諸多益處: 利用區(qū)塊鏈的不可更改的特性來(lái)解決公鑰密碼體制中的公鑰認(rèn)證問(wèn)題; 通過(guò)將系統(tǒng)中的運(yùn)算和存儲(chǔ)能力分散到網(wǎng)絡(luò)中的眾多節(jié)點(diǎn)中去, 實(shí)現(xiàn)在各個(gè)節(jié)點(diǎn)達(dá)成共識(shí); 利用分布式系統(tǒng)的優(yōu)勢(shì)提供對(duì)查詢(xún)請(qǐng)求的快速響應(yīng); 當(dāng)部分節(jié)點(diǎn)被惡意節(jié)點(diǎn)攻擊, 由于節(jié)點(diǎn)中存有的信息多數(shù)為公開(kāi)信息,所以不會(huì)影響系統(tǒng)的正常運(yùn)作.
密鑰生命周期[5]是指一組密鑰從產(chǎn)生到銷(xiāo)毀所經(jīng)歷的一系列狀態(tài), 決定著密碼系統(tǒng)的安全可靠, 具有重要意義. 典型的密鑰生命周期如圖1 所示[6].
以傳統(tǒng)的PKI 架構(gòu)為例, 密鑰的生命周期包含以下12 個(gè)環(huán)節(jié)[7]:
(1) 用戶(hù)登記: 一個(gè)用戶(hù)通過(guò)申請(qǐng)成為保密域里的一個(gè)授權(quán)成員, 主要過(guò)程包括獲取、創(chuàng)建或交換口令、PIN 等身份認(rèn)證信息;
(2) 用戶(hù)初始化: 用戶(hù)初始它的保密系統(tǒng)(硬件或軟件), 使其在密鑰安裝后能夠立即投入使用, 且符合安全標(biāo)準(zhǔn);
(3) 密鑰產(chǎn)生: 采用適當(dāng)?shù)乃惴óa(chǎn)生密鑰, 或從可信的地方獲取密鑰, 此過(guò)程要保證密鑰的隨機(jī)性, 可通過(guò)真隨機(jī)數(shù)發(fā)生器采集物理噪聲進(jìn)行隨機(jī)密鑰的生成;
(4) 密鑰安裝: 將密鑰安裝在保密系統(tǒng)的軟件或硬件中, 常見(jiàn)的安裝方法有輸入口令或PIN, 讀取磁盤(pán)、只讀存儲(chǔ)器、芯片卡等;
(5) 密鑰登記: 在安裝密鑰時(shí), 賦予密鑰一個(gè)特定的名稱(chēng)并將其記錄下來(lái). 例如, 對(duì)于公開(kāi)密鑰, 公開(kāi)密鑰授權(quán)機(jī)構(gòu)產(chǎn)生一個(gè)密鑰, 然后放到一個(gè)公共目錄上, 以便他人使用. 通常采用證書(shū)的形式來(lái)對(duì)公鑰和身份實(shí)體信息進(jìn)行綁定;
圖1 密鑰的生命周期Figure 1 Key life cycle
(6) 密鑰的正常使用: 密鑰被用戶(hù)系統(tǒng)使用, 直到使用期滿(mǎn)為止;
(7) 密鑰備份: 將密鑰存貯在一個(gè)獨(dú)立的、安全的存儲(chǔ)介質(zhì)上, 以便日后恢復(fù)使用, 在雙證書(shū)體制中,加密證書(shū)的私鑰通常在KMC (Key Management Center) 進(jìn)行備份;
(8) 密鑰更新: 密鑰使用一段時(shí)間后, 泄漏的風(fēng)險(xiǎn)就會(huì)加大, 需要產(chǎn)生新的密鑰來(lái)代替舊的密鑰;
(9) 密鑰歸檔: 一組密鑰長(zhǎng)時(shí)間不再被用戶(hù)使用, 但該密鑰日后仍有使用的需求, 可以將其存儲(chǔ)在安全的檔案文件中以保證其機(jī)密性和完整性;
(10) 密鑰注銷(xiāo)和銷(xiāo)毀: 用戶(hù)確定未來(lái)不再會(huì)需要使用該組密鑰, 或由于一些特殊原因?qū)е旅荑€泄露,就可從系統(tǒng)中注銷(xiāo)該組密鑰, 同時(shí)消除與之有關(guān)的一切記錄;
(11) 密鑰恢復(fù): 當(dāng)密鑰以安全的方式被丟失(如設(shè)備故障、忘記口令), 可以從密鑰備份中找回該密鑰,此項(xiàng)功能通常由KMC 提供;
(12) 密鑰撤回: 如果感覺(jué)使用中的密鑰有危險(xiǎn), 就可以把密鑰撤回, 從系統(tǒng)中暫時(shí)刪除該密鑰, 并將它先歸檔.
針對(duì)現(xiàn)實(shí)中的不同場(chǎng)景, 選用了上述12 個(gè)環(huán)節(jié)的密鑰生命周期, 并基于此進(jìn)行演示設(shè)計(jì).
本節(jié)詳細(xì)說(shuō)明密碼生命周期在傳統(tǒng)PKI 架構(gòu)、基于身份的密碼體制和無(wú)證書(shū)公鑰密碼系統(tǒng)中面臨的安全問(wèn)題.
(1)PKI 架構(gòu)下的密鑰生命周期
在PKI 體制下用戶(hù)自己生成公私鑰對(duì), 由認(rèn)證機(jī)構(gòu)頒發(fā)證書(shū)以實(shí)現(xiàn)用戶(hù)與公鑰信息的綁定. PKI 架構(gòu)采用的層級(jí)結(jié)構(gòu)構(gòu)建, 由上層認(rèn)證機(jī)構(gòu)為下層認(rèn)證機(jī)構(gòu)頒發(fā)證書(shū), 系統(tǒng)的安全性基于用戶(hù)對(duì)上層認(rèn)證機(jī)構(gòu)的信任[8]. 林璟鏘、荊繼武等人[9]明確指出, 雖然PKI 技術(shù)已經(jīng)較為成熟、進(jìn)入大規(guī)模應(yīng)用的階段,但是隨著在實(shí)際應(yīng)用系統(tǒng)中的大量部署、各種重要應(yīng)用領(lǐng)域采納PKI 技術(shù), 近年來(lái)陸續(xù)出現(xiàn)了大量應(yīng)用推廣部署中的種種難題. 在PKI 體制中, CA (Certificate Authority) 作為證書(shū)頒發(fā)機(jī)構(gòu), 管理著密鑰從產(chǎn)生到注銷(xiāo)的全生命周期, 屬于體制中的核心角色. 荊繼武[10]針對(duì)入侵容忍的CA 方案提出了6 點(diǎn)假設(shè), 充分證明了PKI 架構(gòu)中CA 是一個(gè)薄弱環(huán)節(jié), 一旦CA 被入侵后, 可能存在一系列針對(duì)密鑰生命周期的安全問(wèn)題:
a. 被入侵的認(rèn)證機(jī)構(gòu)濫發(fā)證書(shū)或該認(rèn)證機(jī)構(gòu)被注銷(xiāo), 從而導(dǎo)致該機(jī)構(gòu)下層的所有認(rèn)證機(jī)構(gòu)均不被信任;
b. 其頒發(fā)的證書(shū)也無(wú)法正常使用, 使正常用戶(hù)對(duì)系統(tǒng)產(chǎn)生信任危機(jī).
(2) 基于身份的密碼體制中的密鑰生命周期
基于身份的密碼體制是一種將用戶(hù)信息作為公鑰, 以實(shí)現(xiàn)用戶(hù)和公鑰信息綁定的方案[11]. 但由于用戶(hù)私鑰由PKG (Private Key Generator) 產(chǎn)生這一特點(diǎn), 引發(fā)了一些新的問(wèn)題[12], 密鑰生命周期的安全也會(huì)受到威脅:
a. 在PKG 向用戶(hù)傳輸私鑰的過(guò)程中, 攻擊者可以通過(guò)竊聽(tīng)獲取用戶(hù)的私鑰, 甚至還可以利用中間人攻擊, 偽造用戶(hù)私鑰;
b. 所有用戶(hù)的私鑰均由PKG 生成, 這就不可避免的產(chǎn)生密鑰托管的問(wèn)題, 用戶(hù)必須絕對(duì)地?zé)o條件信任PKG, 且要承擔(dān)PKG 閱讀用戶(hù)的秘密通信或偽造簽名的風(fēng)險(xiǎn).
c. 由于PKG 掌握所有用戶(hù)的私鑰信息, 一旦攻擊者成功入侵PKG 的中心數(shù)據(jù)庫(kù), 攻擊者就能破解所有用戶(hù)的私鑰;
d. 由于沒(méi)有公鑰管理設(shè)施, 基于身份的密碼體制中的密鑰生命周期管理成為一項(xiàng)短板. 當(dāng)用戶(hù)私鑰泄露或被攻擊者以某種方式獲得時(shí), 用戶(hù)無(wú)法及時(shí)對(duì)公私鑰對(duì)進(jìn)行及時(shí)的注銷(xiāo). 即使在公鑰中預(yù)設(shè)了密鑰有效期, 但在攻擊成功后到密鑰自動(dòng)注銷(xiāo)這一期間內(nèi)攻擊者的攻擊行為是不受任何約束的.
(3) 無(wú)證書(shū)公鑰密碼體制中的密鑰生命周期
無(wú)證書(shū)公鑰密碼體制是在充分吸收基于身份的密碼體制和PKI 的優(yōu)點(diǎn)后提出的一種解決方案[13].無(wú)證書(shū)公鑰系統(tǒng)中存在一個(gè)中心節(jié)點(diǎn), 稱(chēng)為KGC (Key Generation Center), KGC 利用主密鑰和節(jié)點(diǎn)的信息生成部分私鑰發(fā)送給用戶(hù), 用戶(hù)利用接收到的部分密鑰和自己的秘密數(shù)在本地生成私鑰, 再利用秘密數(shù)和KGC 選取的系統(tǒng)參數(shù)生成對(duì)應(yīng)的公鑰. KGC 不再掌握用戶(hù)的私鑰信息, 證書(shū)管理問(wèn)題和密鑰托管問(wèn)題也因此得以解決. 但與此同時(shí)也帶來(lái)了一些關(guān)于密鑰生命周期的安全問(wèn)題[14]:
a. 用戶(hù)的公鑰由用戶(hù)生成, 需要通過(guò)其他方法來(lái)解決公鑰認(rèn)證的問(wèn)題;
b. 密鑰對(duì)的生成方式復(fù)雜, 需要較多的信息, 要求密鑰生成算法存在多個(gè)可分離的運(yùn)算步驟;
c. 較為復(fù)雜的加密算法存在設(shè)計(jì)缺陷的概率也較高, 使得加密效果無(wú)法達(dá)到預(yù)定目標(biāo).
綜上所述, 在現(xiàn)行的三種系統(tǒng)中, 密鑰生命周期都沒(méi)有得到安全有效的保護(hù). 本文結(jié)合區(qū)塊鏈技術(shù), 設(shè)計(jì)提出了基于區(qū)塊鏈技術(shù)的密鑰生命周期演示設(shè)計(jì), 利用其去中心化、集體維護(hù)、安全可信、可編程和防篡改等特點(diǎn), 有效解決了密鑰生命周期的安全問(wèn)題. 方案主要對(duì)密鑰生命周期的存儲(chǔ)安全和認(rèn)證安全進(jìn)行設(shè)計(jì), 可應(yīng)用于上述三種密碼體制中, 有效解決其中的密鑰生命周期的管理問(wèn)題, 為密碼系統(tǒng)的安全提供保障.
區(qū)塊鏈起源于化名為中本聰[15](Satoshi Nakamoto) 的學(xué)者在2008 年發(fā)表的奠基性論文: “比特幣:一種點(diǎn)對(duì)點(diǎn)電子現(xiàn)金系統(tǒng)”. 狹義來(lái)講, 區(qū)塊鏈?zhǔn)且环N按照時(shí)間順序?qū)?shù)據(jù)區(qū)塊以順序相連的方式組合成一種鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu), 并以密碼學(xué)方式保證不可篡改和不可偽造的分布式賬本. 廣義來(lái)講, 區(qū)塊鏈?zhǔn)抢脡K鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來(lái)驗(yàn)證與存儲(chǔ)數(shù)據(jù), 利用分布式節(jié)點(diǎn)共識(shí)算法來(lái)生成和更新數(shù)據(jù), 利用密碼學(xué)方式保證數(shù)據(jù)傳輸和訪問(wèn)的安全, 利用由自動(dòng)化腳本代碼組成的智能合約來(lái)編程和操作數(shù)據(jù)的一種全新的分布式基礎(chǔ)架構(gòu)與計(jì)算范式[16].
區(qū)塊鏈技術(shù)具有去中心化等特點(diǎn),可根據(jù)應(yīng)用場(chǎng)景和設(shè)計(jì)體系不同分為: 公有鏈(Public Blockchain)、聯(lián)盟鏈(Consortium Blockchain) 和私有鏈(Private Blockchain). 公有鏈的各個(gè)節(jié)點(diǎn)可以自由加入和退出網(wǎng)絡(luò), 并參加鏈上數(shù)據(jù)的讀寫(xiě), 運(yùn)行時(shí)以扁平的拓?fù)浣Y(jié)構(gòu)互聯(lián)互通, 網(wǎng)絡(luò)中不存在任何中心化的服務(wù)端節(jié)點(diǎn). 聯(lián)盟鏈的各個(gè)節(jié)點(diǎn)通常有與之對(duì)應(yīng)的實(shí)體機(jī)構(gòu)組織, 通過(guò)授權(quán)后才能加入與退出網(wǎng)絡(luò), 各機(jī)構(gòu)組織組成利益相關(guān)的聯(lián)盟, 共同維護(hù)區(qū)塊鏈的健康運(yùn)轉(zhuǎn). 私有鏈各個(gè)節(jié)點(diǎn)的寫(xiě)入權(quán)限收歸內(nèi)部控制, 而讀取權(quán)限可視需求選擇性地對(duì)外開(kāi)放, 同時(shí)私有鏈仍然具備區(qū)塊鏈多節(jié)點(diǎn)運(yùn)行的通用結(jié)構(gòu), 適用于特定機(jī)構(gòu)的內(nèi)部數(shù)據(jù)管理與審計(jì).
區(qū)塊鏈科學(xué)研究所創(chuàng)始人Melanie Swan[17]按照應(yīng)用范圍和發(fā)展階段將區(qū)塊鏈應(yīng)用分為1.0、2.0 和3.0 三個(gè)階段. 區(qū)塊鏈1.0 支撐虛擬貨幣應(yīng)用, 一般用于支付, 其典型特征[17]有: 鏈狀數(shù)據(jù)塊結(jié)構(gòu)、全網(wǎng)共享賬本、非對(duì)稱(chēng)加密和源代碼開(kāi)源.
區(qū)塊鏈2.0 支撐智能合約應(yīng)用, 并考慮使用區(qū)塊鏈將其他類(lèi)型的資產(chǎn)轉(zhuǎn)移到貨幣之外, 典型特征有:智能合約、分布式應(yīng)用、虛擬機(jī). 其核心理念是把區(qū)塊鏈作為一個(gè)可編程的分布式信用基礎(chǔ)設(shè)施, 支持智能合約應(yīng)用. 當(dāng)前主流區(qū)塊鏈應(yīng)用仍處于1.0 和2.0 階段, 區(qū)塊鏈3.0 的定義和代表應(yīng)用在業(yè)界仍有爭(zhēng)議.故在構(gòu)建區(qū)塊鏈應(yīng)用時(shí)采用經(jīng)典的區(qū)塊鏈2.0 架構(gòu), 區(qū)塊鏈2.0 技術(shù)架構(gòu)如圖2 所示. 在應(yīng)用層以下的底層架構(gòu)主要分為數(shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層、激勵(lì)層和智能合約層. 本文在設(shè)計(jì)構(gòu)建時(shí)采用了標(biāo)準(zhǔn)的區(qū)塊鏈2.0 層級(jí)架構(gòu), 在網(wǎng)絡(luò)層采用的是Kademlia 協(xié)議進(jìn)行P2P 網(wǎng)絡(luò)的構(gòu)建, 共識(shí)層采用的是PoW+PBFT 的混合共識(shí)機(jī)制.
圖2 區(qū)塊鏈2.0 技術(shù)架構(gòu)Figure 2 Blockchain 2.0 technology architecture
區(qū)塊鏈技術(shù)具有去中心化、安全透明、智能合約和可追溯等特點(diǎn)[18]. 其分布式特性保證了每個(gè)節(jié)點(diǎn)擁有均等的權(quán)利和義務(wù), 單個(gè)節(jié)點(diǎn)對(duì)整體影響會(huì)非常小, 從而形成去中心化的可信任的系統(tǒng). 而且滿(mǎn)足安全性和所有權(quán)驗(yàn)證.
去中心化. 傳統(tǒng)網(wǎng)絡(luò)數(shù)據(jù)通常有中心數(shù)據(jù)庫(kù), 區(qū)塊鏈技術(shù)的最大創(chuàng)新就是將數(shù)據(jù)庫(kù)去中心化[19], 無(wú)需任何第三方機(jī)構(gòu)的介入, 在本系統(tǒng)中只要密鑰申請(qǐng)方和密鑰簽發(fā)方雙方達(dá)成共識(shí), 就可以產(chǎn)生信用體系,以最小的成本獲得信任. 正是因?yàn)檫@個(gè)特質(zhì), 所有的簽發(fā)均可以在雙方達(dá)成共識(shí)后瞬間完成, 而雙方的賬本信息同樣也可以實(shí)現(xiàn)即時(shí)更新, 達(dá)到了歸檔的目的.
信息透明化. 區(qū)塊鏈數(shù)據(jù)庫(kù)是去中心化的數(shù)據(jù)庫(kù), 是向所有用戶(hù)開(kāi)放. 任何人均可以通過(guò)相關(guān)節(jié)點(diǎn)來(lái)查詢(xún)或獲取相關(guān)數(shù)據(jù)信息, 并依照這些信息開(kāi)發(fā)新的應(yīng)用程序. 換言之, 本系統(tǒng)雖然基于聯(lián)盟鏈框架, 普通用戶(hù)不能直接參與區(qū)塊共識(shí)的過(guò)程, 但仍然能夠查詢(xún)聯(lián)盟區(qū)塊鏈中的所有數(shù)據(jù), 透明度是比較高的.
安全性強(qiáng). 在去中心化網(wǎng)絡(luò)下, 單個(gè)節(jié)點(diǎn)的安全防護(hù)能力與中心化網(wǎng)絡(luò)相比較而言相對(duì)較差, 容易受到攻擊[20]. 然而在本系統(tǒng)中, 基于聯(lián)盟鏈的準(zhǔn)入標(biāo)準(zhǔn), 節(jié)點(diǎn)的安全防護(hù)能力相對(duì)較強(qiáng), 并且篡改其中任何一個(gè)節(jié)點(diǎn)的數(shù)據(jù)均是無(wú)效的, 除非人為的能夠控制全網(wǎng)51% 的算力, 但這幾乎不可能實(shí)現(xiàn). 同時(shí), 在區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)是點(diǎn)對(duì)點(diǎn)相連, 沒(méi)有中心服務(wù)器, 也不存在中心接口, 對(duì)任何單一接口攻擊是無(wú)效的, 安全系數(shù)比較高.
合約智能化. 智能合約是執(zhí)行合約條款的程序代碼, 用智能合約替代傳統(tǒng)紙質(zhì)合約可以大大地減少在合約制定、控制協(xié)議和執(zhí)行效能上的人工花費(fèi)與計(jì)算成本[21]. 當(dāng)一個(gè)預(yù)先編好的條件被觸發(fā)時(shí), 智能合約執(zhí)行相應(yīng)的合同條款. 數(shù)據(jù)擁有者設(shè)定數(shù)據(jù)共享的范圍、時(shí)限等約束條件, 使用計(jì)算機(jī)語(yǔ)言代替法律條款來(lái)規(guī)范數(shù)據(jù)訪問(wèn)者行為. 這些約束條件通過(guò)計(jì)算機(jī)腳本語(yǔ)言在加入聯(lián)盟鏈的節(jié)點(diǎn)上自動(dòng)執(zhí)行, 保證數(shù)據(jù)共享的合法性和公平性. 在本系統(tǒng)中, 密鑰的生命周期被預(yù)先寫(xiě)入智能合約中, 當(dāng)條件觸發(fā)時(shí), 合約自動(dòng)執(zhí)行, 提高了系統(tǒng)的自動(dòng)化程度.
可追溯性. 區(qū)塊鏈中的每一個(gè)區(qū)塊都包含上一個(gè)區(qū)塊的Hash 值, 以Hash 值為索引將每一個(gè)區(qū)塊都依次順序相連. 在本系統(tǒng)中, 每一個(gè)證書(shū)區(qū)塊均包含一段時(shí)間內(nèi)的證書(shū)信息, 任何證書(shū)信息的改動(dòng)都將使Hash 值發(fā)生改變, 從而改變之后的所有區(qū)塊. 這種設(shè)計(jì)從底層上保障了數(shù)據(jù)的可追溯性和不可篡改性[22].
完整的區(qū)塊鏈網(wǎng)絡(luò)分為數(shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層、激勵(lì)層、合約層和應(yīng)用層. 方案在設(shè)計(jì)時(shí)考慮到密鑰生命周期的現(xiàn)實(shí)應(yīng)用場(chǎng)景, 其對(duì)于數(shù)據(jù)的安全性和可靠性有著特殊的需求, 所以在數(shù)據(jù)層和共識(shí)層進(jìn)行了創(chuàng)新設(shè)計(jì).
(1) 混合共識(shí)機(jī)制
比特幣電子現(xiàn)金系統(tǒng)采用了PoW(工作量證明機(jī)制) 來(lái)保證節(jié)點(diǎn)間的共識(shí). 其安全性已經(jīng)得到了公認(rèn),但其交易的高延遲和對(duì)計(jì)算資源、電力資源的浪費(fèi)也一直受到業(yè)界的批評(píng). 為此以太坊初期應(yīng)用PoW 機(jī)制, 同時(shí)將出塊速度控制在15 s 左右, 但由此引發(fā)了區(qū)塊鏈分叉概率高、區(qū)塊廣播時(shí)間大于出塊時(shí)間等問(wèn)題, 因此不得不引入GHOST (Greedy Heaviest Observed Subtree) 協(xié)議激勵(lì)礦工來(lái)解決這些問(wèn)題. 在IBM 主導(dǎo)的Hyperledger Fabric 項(xiàng)目中使用了PBFT(實(shí)用拜占庭容錯(cuò)機(jī)制) 來(lái)作為共識(shí)機(jī)制, 但由于PBFT 共識(shí)機(jī)制中的主節(jié)點(diǎn)的存在, 使得其偽去中心化的特點(diǎn)一直受到質(zhì)疑.
結(jié)合密鑰生命周期的現(xiàn)實(shí)應(yīng)用場(chǎng)景,需要同時(shí)滿(mǎn)足其安全性、可靠性和高效性,故設(shè)計(jì)了PoW+PBFT的混合共識(shí)機(jī)制來(lái)應(yīng)對(duì)現(xiàn)實(shí)需要,同時(shí)將應(yīng)用場(chǎng)景設(shè)定在聯(lián)盟鏈的環(huán)境中,規(guī)定聯(lián)盟鏈的節(jié)點(diǎn)準(zhǔn)入機(jī)制,并提供對(duì)外的公鑰查詢(xún)接口. 這樣既保證了公鑰信息的公開(kāi), 又避免了區(qū)塊鏈網(wǎng)絡(luò)受到女巫攻擊的安全隱患.
首先進(jìn)行主節(jié)點(diǎn)的選取, 最快計(jì)算出有效工作量證明的節(jié)點(diǎn)將成為當(dāng)前共識(shí)過(guò)程的主節(jié)點(diǎn), 其余為從節(jié)點(diǎn), 關(guān)于此過(guò)程構(gòu)造的區(qū)塊將在下一節(jié)進(jìn)行詳細(xì)解釋. 接下來(lái)采用PBFT 機(jī)制進(jìn)行公鑰信息的接收、驗(yàn)證和上鏈. PBFT 機(jī)制的流程如圖3 所示[23].
圖3 PBFT 共識(shí)流程Figure 3 Consensus process of PBFT
其中C 為客戶(hù)端, N0-N3表示服務(wù)節(jié)點(diǎn), 特別的, N0為主節(jié)點(diǎn), N3為故障節(jié)點(diǎn). 假設(shè)故障節(jié)點(diǎn)數(shù)為f 個(gè), 整個(gè)服務(wù)節(jié)點(diǎn)數(shù)為|R|=3f +1 個(gè), 整個(gè)協(xié)議的基本過(guò)程如下:
a. 客戶(hù)端發(fā)送請(qǐng)求, 激活主節(jié)點(diǎn)的服務(wù)操作;
b. 當(dāng)主節(jié)點(diǎn)接收請(qǐng)求后, 啟動(dòng)三階段的協(xié)議以向各從節(jié)點(diǎn)廣播請(qǐng)求;
c. 序號(hào)分配階段, 主節(jié)點(diǎn)給請(qǐng)求賦值一個(gè)序列號(hào)n, 廣播序號(hào)分配消息和客戶(hù)端的請(qǐng)求消息m, 并將構(gòu)造PRE-PREPARE 消息給各從節(jié)點(diǎn);
d. 交互階段, 從節(jié)點(diǎn)接收PRE-PREPARE 消息, 向其他服務(wù)節(jié)點(diǎn)廣播PREPARE 消息;
e. 序號(hào)確認(rèn)階段, 各節(jié)點(diǎn)對(duì)視圖內(nèi)的請(qǐng)求和次序進(jìn)行驗(yàn)證后, 廣播COMMIT 消息, 執(zhí)行收到的客戶(hù)端的請(qǐng)求并給客戶(hù)端以響應(yīng);
f. 客戶(hù)端等待來(lái)自不同節(jié)點(diǎn)的響應(yīng), 以f +1 個(gè)相同的響應(yīng)結(jié)果作為請(qǐng)求的處理結(jié)果.
(2) 區(qū)塊結(jié)構(gòu)
由于采用了PoW+PBFT 的混合共識(shí)機(jī)制, 故區(qū)塊結(jié)構(gòu)也應(yīng)進(jìn)行相應(yīng)的創(chuàng)新設(shè)計(jì). 使用了PoW 鏈和PBFT 鏈來(lái)記錄區(qū)塊鏈網(wǎng)絡(luò)中的數(shù)據(jù). PoW 鏈記錄競(jìng)爭(zhēng)區(qū)塊, PBFT 鏈記錄證書(shū)區(qū)塊, 區(qū)塊內(nèi)容如圖4 所示. 值得注意的是兩條鏈中的Hash 值進(jìn)行了相互引用, 實(shí)現(xiàn)了雙重確認(rèn), 進(jìn)一步提高了數(shù)據(jù)的安全性和完整性. 由于競(jìng)爭(zhēng)區(qū)塊中會(huì)引用證書(shū)區(qū)塊的Hash 值, 而且競(jìng)爭(zhēng)區(qū)塊和證書(shū)區(qū)塊之間的生成是異步操作,因此創(chuàng)世競(jìng)爭(zhēng)區(qū)塊和id = 1 的競(jìng)爭(zhēng)區(qū)塊中的證書(shū)區(qū)塊Hash 值為預(yù)設(shè)的空值, 創(chuàng)世證書(shū)區(qū)塊的Hash 值會(huì)被id=2 的競(jìng)爭(zhēng)區(qū)塊引用.
圖4 區(qū)塊結(jié)構(gòu)Figure 4 Structure of block
針對(duì)現(xiàn)實(shí)應(yīng)用場(chǎng)景, 對(duì)密鑰生成、公鑰查詢(xún)、密鑰更新、密鑰注銷(xiāo)和密鑰歸檔5 個(gè)核心功能進(jìn)行了方案設(shè)計(jì), 有效地完成了基于區(qū)塊鏈的密鑰生命周期演示設(shè)計(jì). 對(duì)于諸如用戶(hù)登記等其他7 個(gè)環(huán)節(jié), 使用區(qū)塊鏈技術(shù)的必要性不強(qiáng), 這里不做贅述. 本方案設(shè)計(jì)流程如圖5 所示.
(1) 密鑰生成
用戶(hù)在本地客戶(hù)端產(chǎn)生公私鑰對(duì), 其中公鑰信息包含用戶(hù)ID、用戶(hù)公鑰、時(shí)間戳和公鑰的有效起止時(shí)間[24]. 系統(tǒng)將根據(jù)相關(guān)信息構(gòu)建X509_REQ 證書(shū)請(qǐng)求消息, 同時(shí)將請(qǐng)求消息轉(zhuǎn)為DER 編碼的格式發(fā)送給CA 請(qǐng)求生成證書(shū), CA 確認(rèn)用戶(hù)信息后進(jìn)行密鑰簽名生成證書(shū), 并將該證書(shū)發(fā)送到區(qū)塊鏈主節(jié)點(diǎn).主節(jié)點(diǎn)將該證書(shū)進(jìn)行編號(hào)轉(zhuǎn)發(fā)給其他節(jié)點(diǎn), 節(jié)點(diǎn)間對(duì)該證書(shū)進(jìn)行廣播, 校驗(yàn)完成后廣播COMMIT 消息,證書(shū)上鏈并向CA 回復(fù)SUCCESS 消息. CA 在接收到f +1 個(gè)SUCCESS 信息后, 確認(rèn)將證書(shū)發(fā)送給客戶(hù)端.
(2) 公鑰查詢(xún)
圖5 方案流程圖Figure 5 Flowchart of scheme
公鑰查詢(xún)模塊我們利用區(qū)塊鏈的快速查找技術(shù), 構(gòu)建區(qū)塊鏈應(yīng)用查詢(xún)優(yōu)化流程模型[25], 建立證書(shū)索引樹(shù), 以證書(shū)的關(guān)鍵信息作為結(jié)點(diǎn)建立層級(jí)樹(shù)形索引, 葉子節(jié)點(diǎn)存儲(chǔ)證書(shū)在底層區(qū)塊鏈的Merkle 樹(shù)路徑,最大程度上滿(mǎn)足在大數(shù)據(jù)量下數(shù)據(jù)的查詢(xún)、訪問(wèn)需求. 當(dāng)用戶(hù)向節(jié)點(diǎn)請(qǐng)求公鑰信息時(shí), 節(jié)點(diǎn)先在本地證書(shū)索引樹(shù)中尋找是否存在用戶(hù)請(qǐng)求的公鑰. 若在索引樹(shù)中未查到信息則節(jié)點(diǎn)從區(qū)塊鏈主鏈的末端開(kāi)始向前查詢(xún), 遇到有效的信息就結(jié)束查詢(xún). 如果本地存在相應(yīng)用戶(hù)的信息, 直接將公鑰信息返回給用戶(hù), 并更新索引樹(shù). 當(dāng)本地不存在對(duì)應(yīng)用戶(hù)的信息時(shí), 節(jié)點(diǎn)在區(qū)塊鏈網(wǎng)絡(luò)中請(qǐng)求公鑰信息. 收到請(qǐng)求的區(qū)塊鏈節(jié)點(diǎn)檢查本地存儲(chǔ)的公鑰信息. 若存儲(chǔ)有相應(yīng)公鑰信息, 節(jié)點(diǎn)會(huì)返回對(duì)應(yīng)的公鑰信息以及包含公鑰信息的區(qū)塊和Merkle 樹(shù)分支信息. 發(fā)起請(qǐng)求的節(jié)點(diǎn)在收到公鑰信息后, 通過(guò)多個(gè)節(jié)點(diǎn)返回的公鑰信息和Merkle 樹(shù)分支之間交叉驗(yàn)證來(lái)確認(rèn)公鑰信息正確性.
(3) 密鑰更新
密鑰使用一段時(shí)間后, 泄漏的風(fēng)險(xiǎn)就加大, 需要產(chǎn)生新的密鑰來(lái)代替舊的密鑰. 這里考慮到一些安全風(fēng)險(xiǎn), 如密鑰泄露后竊密者將舊密鑰更新為自己控制的新密鑰從而進(jìn)行身份偽造攻擊, 故在此模塊設(shè)計(jì)兩種密鑰更新方式.
方式一: 由于用戶(hù)已經(jīng)擁有一個(gè)可用的公鑰, 更新密鑰可以不經(jīng)過(guò)CA 的簽名. 當(dāng)用戶(hù)需要更新密鑰時(shí), 在本地客戶(hù)端生成新的密鑰對(duì), 用舊的私鑰對(duì)新證書(shū)進(jìn)行簽名, 并發(fā)布到區(qū)塊鏈網(wǎng)絡(luò), 網(wǎng)絡(luò)確認(rèn)后將SUCCESS 信息發(fā)給客戶(hù)端, 同時(shí)轉(zhuǎn)發(fā)新證書(shū)給CA, CA 進(jìn)行證書(shū)更新. 然而以此方式進(jìn)行密鑰更新存在一定的安全風(fēng)險(xiǎn), 故設(shè)置更新等待時(shí)間, 區(qū)塊鏈網(wǎng)絡(luò)運(yùn)行智能合約, 等待期結(jié)束后進(jìn)行密鑰更新, 等待期內(nèi)用戶(hù)可對(duì)更新操作進(jìn)行撤銷(xiāo), 合約終止. 由于密鑰更新并非緊急操作, 而且密鑰更新期舊密鑰可以繼續(xù)使用, 所以必要的等待期是可以容忍的, 不會(huì)降低用戶(hù)的體驗(yàn).
方式二: 如果用戶(hù)需要緊急對(duì)密鑰進(jìn)行更新, 可以采用上述的密鑰生成過(guò)程, 由CA 進(jìn)行實(shí)體身份認(rèn)證后更新操作立即生效.
在進(jìn)行證書(shū)查詢(xún)時(shí), 系統(tǒng)將從最新的區(qū)塊向前遍歷, 并反饋給用戶(hù)最新的有效密鑰, 舊密鑰在新密鑰生效后將自動(dòng)失效, 成為無(wú)效公鑰. 即使一個(gè)區(qū)塊體內(nèi)的所有公鑰均被確認(rèn)為無(wú)效公鑰后, 為保證歷史信息的可溯源, 以及密鑰歸檔的需要, 區(qū)塊鏈系統(tǒng)也不會(huì)將其拋棄.
(4) 密鑰注銷(xiāo)
當(dāng)用戶(hù)確定未來(lái)不會(huì)再需要自己的密鑰, 或用戶(hù)私鑰被竊取, 這時(shí)需要從系統(tǒng)中注銷(xiāo)該組密鑰. 證書(shū)注銷(xiāo)的流程為: 客戶(hù)端使用私鑰簽署一個(gè)空消息, 發(fā)布到區(qū)塊鏈網(wǎng)絡(luò), 經(jīng)區(qū)塊確認(rèn)后區(qū)塊鏈網(wǎng)絡(luò)將DELETE 信息發(fā)給客戶(hù)端, 該密鑰作廢. 同時(shí)轉(zhuǎn)發(fā)消息給CA, CA 更新CRL 列表. 此模塊設(shè)計(jì)無(wú)需考慮攻擊情況, 因?yàn)槿绻荑€泄露, 惡意實(shí)體的意圖是利用竊取的私鑰進(jìn)行非法操作, 而非對(duì)已竊取的密鑰進(jìn)行注銷(xiāo), 這樣做對(duì)惡意實(shí)體而言沒(méi)有實(shí)際意義.
(5) 密鑰歸檔
密鑰注銷(xiāo)后, 如果不對(duì)密鑰進(jìn)行有效歸檔, 那么對(duì)于已經(jīng)被該密鑰加密過(guò)的數(shù)據(jù)將面臨著無(wú)法解密的風(fēng)險(xiǎn), 密鑰歸檔的重要性不言而喻. 密鑰注銷(xiāo)時(shí), 用戶(hù)需將私鑰通過(guò)保密專(zhuān)線網(wǎng)絡(luò)傳遞至CA, CA 將以密文的方式將私鑰發(fā)布至私有區(qū)塊鏈網(wǎng)絡(luò)中進(jìn)行確認(rèn). 各節(jié)點(diǎn)間均存有一份密態(tài)的完整賬本, 且各節(jié)點(diǎn)間密鑰互不相同, 采用BLS12-381 加密算法[26]進(jìn)行數(shù)據(jù)加密. 節(jié)點(diǎn)間會(huì)定期進(jìn)行輪詢(xún), 采用時(shí)空證明的方式驗(yàn)證各節(jié)點(diǎn)數(shù)據(jù)的完整.
時(shí)空證明(Proof of Space Time), 證明該時(shí)間段內(nèi)節(jié)點(diǎn)存儲(chǔ)了相應(yīng)的賬本數(shù)據(jù)[27]. PoST 證明是驗(yàn)證者V 向證明者P 提供獨(dú)特的數(shù)據(jù)證明, 以說(shuō)服P 自己在一段時(shí)間t 內(nèi)存儲(chǔ)了數(shù)據(jù)的一個(gè)備份R, 這一證明是專(zhuān)門(mén)為P 提起的挑戰(zhàn)的應(yīng)答C.
PoST 協(xié)議可以通過(guò)多項(xiàng)式復(fù)雜度算法元組實(shí)現(xiàn):
a. 初始化
初始化函數(shù)使用可驗(yàn)證時(shí)延加密方法. 其中, λ 是安全參數(shù), 通過(guò)它我們可以調(diào)整時(shí)延加密的安全參數(shù), λ 越大, 時(shí)延越長(zhǎng). 調(diào)整它, 系統(tǒng)可以控制加密算法在效率和安全性能之間找到平衡. SP和SV是驗(yàn)證時(shí)需要的參數(shù), R 是生成的副本.
b. 生成證明函數(shù)其中, c 是隨機(jī)挑戰(zhàn)矢量, 包含N 個(gè)隨機(jī)挑戰(zhàn), t 是時(shí)間戳矢量, 對(duì)應(yīng)每一個(gè)隨機(jī)挑戰(zhàn)的時(shí)間戳. 證明者P為驗(yàn)證者V 生成c 的應(yīng)答πc, 它是與c 和t 對(duì)應(yīng)的應(yīng)答.
c. 驗(yàn)證
用來(lái)檢測(cè)證明是否正確. PoST.Verify 由驗(yàn)證者V 運(yùn)行并使得V 相信P 在t 時(shí)段內(nèi)存儲(chǔ)了R.
基于區(qū)塊鏈技術(shù)的密鑰生命周期演示設(shè)計(jì)方案, 通過(guò)利用區(qū)塊鏈的安全性來(lái)保障運(yùn)行于區(qū)塊鏈上公鑰的安全. 對(duì)于區(qū)塊鏈系統(tǒng)潛在的威脅和系統(tǒng)運(yùn)行效率均進(jìn)行了比較深入的分析, 特別是在哈希碰撞, 篡改公鑰信息方面進(jìn)行了詳細(xì)的理論分析證明, 同時(shí)分析了聯(lián)盟鏈技術(shù)框架下系統(tǒng)的安全性和運(yùn)行效率.
(1) 哈希碰撞
區(qū)塊鏈系統(tǒng)的安全性主要由哈希函數(shù)的安全性作為保障, 利用哈希函數(shù)的抗碰撞性來(lái)避免攻擊者尋找到一個(gè)和攻擊目標(biāo)具有相同哈希值的數(shù)據(jù)來(lái)篡改信息. 在本文提出的設(shè)計(jì)方案中, 使用哈希函數(shù)主要從3個(gè)方面保護(hù)系統(tǒng)的安全穩(wěn)定: 驗(yàn)證競(jìng)爭(zhēng)區(qū)塊是否合法、尋找前驅(qū)區(qū)塊、驗(yàn)證Merkle 樹(shù)分支的合法性. 其中驗(yàn)證區(qū)塊合法要求計(jì)算得到的哈希值小于目標(biāo)值. 后兩個(gè)功能要求目標(biāo)哈希和計(jì)算得到的哈希保持一致, 即需要攻擊者構(gòu)建一個(gè)哈希碰撞. 目前根據(jù)王小云院士的理論研究, 攻擊者已經(jīng)能夠?qū)^弱的哈希函數(shù)(如MD5[28]和SHA-1[29]) 構(gòu)建碰撞攻擊. 使用改進(jìn)后的Shattered 算法構(gòu)建一個(gè)SHA-1 的哈希碰撞需進(jìn)行263次SHA-1 運(yùn)算, 需要耗費(fèi)單一GPU 一年的運(yùn)算量[30]. 目前對(duì)于SHA-2 等較強(qiáng)哈希函數(shù)并沒(méi)有提出可行的碰撞算法, 可以認(rèn)為只能通過(guò)暴力猜測(cè)進(jìn)行破解, 因此在現(xiàn)有條件下可以認(rèn)為構(gòu)建一個(gè)較強(qiáng)哈希函數(shù)的哈希碰撞是不可行的. 攻擊者即便可通過(guò)第二原像攻擊[31]等方式降低攻擊難度, 但攻擊成本對(duì)于攻擊者而言仍然較高. 基于上述理論與實(shí)踐基礎(chǔ), 可以認(rèn)為方案中, 在競(jìng)爭(zhēng)主節(jié)點(diǎn)的過(guò)程中, 攻擊者無(wú)法通過(guò)任何方式來(lái)簡(jiǎn)化構(gòu)造小于目標(biāo)難度區(qū)塊的過(guò)程, 在構(gòu)造證書(shū)區(qū)塊時(shí), 攻擊者也無(wú)法構(gòu)造一個(gè)哈希值相同, 且有實(shí)際意義的區(qū)塊.
(2) 篡改公鑰信息
攻擊者篡改的成功率與攻擊者控制的運(yùn)算力之間的關(guān)系如圖6 所示. 當(dāng)q >0.5 時(shí), 由于攻擊者獲得新的區(qū)塊的速度大于正常節(jié)點(diǎn), 攻擊者一定能夠篡改成功, 因此圖中不包含q >0.5 的部分. 可以看出攻擊成功率和攻擊者控制的運(yùn)算力成正相關(guān)的關(guān)系, 和區(qū)塊在區(qū)塊鏈系統(tǒng)中延遲確認(rèn)的時(shí)間成負(fù)相關(guān)關(guān)系.即使當(dāng)攻擊者控制了系統(tǒng)中25% 的算力時(shí), 選擇適當(dāng)?shù)难訒r(shí)區(qū)塊延遲確認(rèn)時(shí)間(如延遲10 個(gè)區(qū)塊確認(rèn)信息) 仍能夠?qū)⒐舻某晒β式档偷捷^低的范圍(1%). 當(dāng)攻擊者控制運(yùn)算能力比例較低時(shí), 攻擊的成功率會(huì)極大下降.
(3) 聯(lián)盟鏈
黃欣沂等[32]研究了區(qū)塊鏈應(yīng)用的安全隱私問(wèn)題后指出, 區(qū)塊鏈技術(shù)不依賴(lài)于某個(gè)特定的中心節(jié)點(diǎn),系統(tǒng)中的每個(gè)區(qū)塊鏈節(jié)點(diǎn)分別獨(dú)立存儲(chǔ)數(shù)據(jù)和處理數(shù)據(jù), 有效避免了單點(diǎn)失敗的問(wèn)題. 然而, 為了達(dá)到公開(kāi)驗(yàn)證, 區(qū)塊鏈中所有數(shù)據(jù)必須公開(kāi), 這將導(dǎo)致隱私泄露問(wèn)題. 因此方案中利用了聯(lián)盟鏈的優(yōu)勢(shì), 即針對(duì)某個(gè)特定群體的成員和有限第三方, 其內(nèi)部指定多個(gè)預(yù)選節(jié)點(diǎn)為記賬人, 每個(gè)區(qū)塊數(shù)據(jù)的生成由所有的預(yù)選節(jié)點(diǎn)共同決定, 其他節(jié)點(diǎn)可以參與交易, 但不過(guò)問(wèn)記賬過(guò)程. 對(duì)于公有鏈, 任何人都可以隨時(shí)進(jìn)入和記賬,而在聯(lián)盟鏈中, 外部方只可通過(guò)授權(quán)開(kāi)放的API 進(jìn)行數(shù)據(jù)查詢(xún).
圖6 P 與q 的關(guān)系Figure 6 Relationship between P and q
在聯(lián)盟鏈中, 新區(qū)塊上鏈只需要幾個(gè)權(quán)重較高的節(jié)點(diǎn)確定. 同時(shí), 聯(lián)盟鏈中的每個(gè)節(jié)點(diǎn)都有屬于自己的私鑰, 每個(gè)節(jié)點(diǎn)的自產(chǎn)數(shù)據(jù)信息相互獨(dú)立, 節(jié)點(diǎn)間數(shù)據(jù)只讀共享, 如若需要數(shù)據(jù)交換, 則需要通過(guò)對(duì)方節(jié)點(diǎn)的私鑰進(jìn)行. 此外, 聯(lián)盟鏈能夠在確保在信息流通過(guò)程中避免節(jié)點(diǎn)隱私泄露. 由于聯(lián)盟鏈的節(jié)點(diǎn)數(shù)量通常不多, 所以相比公有鏈而言, 聯(lián)盟鏈的維護(hù)成本也相對(duì)較低. 因此, 在聯(lián)盟鏈框架中進(jìn)行攻擊, 其攻擊成功的難度將更加巨大, 同時(shí)也可以有效地避免隱私數(shù)據(jù)泄露問(wèn)題.
(1) 與基于LDAP 的方案對(duì)比
傳統(tǒng)的PKI 系統(tǒng)普遍采用基于LDAP 的方案進(jìn)行證書(shū)管理, LDAP 目錄是以樹(shù)狀結(jié)構(gòu)存放和管理數(shù)據(jù), 支持層次結(jié)構(gòu), 可以建立快速查詢(xún)體系. 然而就底層數(shù)據(jù)而言, LDAP 并沒(méi)有特殊的完整性保護(hù)措施. 于此對(duì)比本方案在底層數(shù)據(jù)方面采用了區(qū)塊鏈的方式來(lái)保障數(shù)據(jù)的完整性, 但由于區(qū)塊鏈?zhǔn)且枣準(zhǔn)浇Y(jié)構(gòu)進(jìn)行存儲(chǔ), 在信息檢索速度方面存在一定問(wèn)題. 但在本方案中, 可以建立證書(shū)索引樹(shù), 以證書(shū)的關(guān)鍵信息作為結(jié)點(diǎn)建立層級(jí)樹(shù)形索引, 葉子節(jié)點(diǎn)存儲(chǔ)證書(shū)在底層區(qū)塊鏈的Merkle 樹(shù)路徑, 以滿(mǎn)足快速檢索的需要.因此本方案在數(shù)據(jù)安全性和快速檢索方面表現(xiàn)更加優(yōu)異.
(2) 與其他基于區(qū)塊鏈的密鑰管理方案對(duì)比
劉敬浩等[24]提出了一種基于區(qū)塊鏈的分布式公鑰管理方案, 并對(duì)密鑰生成、公鑰查詢(xún)、密鑰更新和密鑰注銷(xiāo)4 個(gè)功能進(jìn)行了設(shè)計(jì). 在充分分析了這一方案的安全性后, 提出了一種新型的密鑰生命周期管理方案. 原方案在密鑰更新階段存在一定的安全風(fēng)險(xiǎn), 由于密鑰更新操作需要由用戶(hù)自主發(fā)布區(qū)塊鏈信息進(jìn)行更新, 存在著惡意實(shí)體使用泄露私鑰發(fā)布證書(shū)進(jìn)行更新的問(wèn)題, 對(duì)此本方案設(shè)計(jì)了兩條密鑰更新途徑, 有效降低了此類(lèi)安全風(fēng)險(xiǎn). 原方案沒(méi)有涉及密鑰歸檔的環(huán)節(jié), 本文提出了一種在私鏈上使用時(shí)空證明的方法來(lái)保證密鑰的安全歸檔. 原方案使用了PoW 共識(shí)機(jī)制, 公鑰確認(rèn)時(shí)間較長(zhǎng), 本文提出了一種PoW+PBFT 的混合共識(shí)機(jī)制, 在保證安全性的同時(shí)大大提高了證書(shū)的確認(rèn)速度.
本演示設(shè)計(jì)方案思路清晰, 邏輯縝密, 易于進(jìn)行軟件實(shí)現(xiàn). 作者根據(jù)設(shè)計(jì)方案, 結(jié)合當(dāng)下主流的區(qū)塊鏈開(kāi)發(fā)技術(shù)棧實(shí)現(xiàn)了基于區(qū)塊鏈技術(shù)的密鑰生命周期演示設(shè)計(jì)原型系統(tǒng), 可實(shí)現(xiàn)局域網(wǎng)下的密鑰生成、證書(shū)頒發(fā)、證書(shū)更新、證書(shū)注銷(xiāo)、密鑰管理、公鑰查詢(xún)和密鑰歸檔等功能, 系統(tǒng)功能完善, 操作便捷高效, 用戶(hù)體驗(yàn)良好.
4.5.1 實(shí)現(xiàn)技術(shù)
(1) QT
本系統(tǒng)在實(shí)現(xiàn)技術(shù)上應(yīng)用了Qt 應(yīng)用程序開(kāi)發(fā)框架. 具有良好的跨平臺(tái)特性,系統(tǒng)可部署到Windows、Linux 等主流操作系統(tǒng), 提高了系統(tǒng)的可移植性. 應(yīng)用signals/slots 的安全類(lèi)型來(lái)替代callback, 使得各個(gè)元件之間的協(xié)同工作變得簡(jiǎn)單, 且邏輯清晰、安全可靠.
(2) Golang
在區(qū)塊鏈節(jié)點(diǎn)系統(tǒng), 我們采用Golang 進(jìn)行技術(shù)實(shí)現(xiàn). 能有效的提高系統(tǒng)運(yùn)行的高效性和可維護(hù)性.Go 語(yǔ)言是Google 公司于2009 發(fā)布的開(kāi)源編程語(yǔ)言. Go 語(yǔ)言有以下特點(diǎn):
a. 高效性. Go 語(yǔ)言專(zhuān)門(mén)針對(duì)多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化, 使用Go 編譯的程序可以媲美C/C++ 代碼的速度. 在我們的使用中, Go 一般比Python 要快30 倍, 同時(shí)與Java 相比也有很大程度的提升.
b. 并發(fā)性. Go 語(yǔ)言最大的特色就是在語(yǔ)言層面支持并發(fā), 天生支持并發(fā)編程, 可以充分利用CPU 的多核心架構(gòu), 開(kāi)發(fā)并發(fā)應(yīng)用程序. 協(xié)程機(jī)制使得編寫(xiě)高并發(fā)的服務(wù)端軟件變得相當(dāng)容易, 且創(chuàng)建協(xié)程的成本很低, 只需幾千個(gè)字節(jié)的額外內(nèi)存, 正因如此, 才使得同時(shí)運(yùn)行數(shù)百個(gè)甚至數(shù)千個(gè)協(xié)程成為可能.
c. 基于消息傳遞的通信方式. Channel 是Go 語(yǔ)言在語(yǔ)言級(jí)別提供給進(jìn)程內(nèi)協(xié)程間的通信方式, 簡(jiǎn)單易用且線程安全. 在異步的并發(fā)編程過(guò)程中, 協(xié)程之間的消息通信可以使各個(gè)協(xié)程之間協(xié)同配合, 可以輕松實(shí)現(xiàn)TCP 連接池和限流等功能.
(3) GMSSL
本系統(tǒng)整體采用GMSSL 進(jìn)行數(shù)據(jù)加解密和網(wǎng)絡(luò)通信, 系統(tǒng)安全可靠, 符合國(guó)家標(biāo)準(zhǔn). 同時(shí), 由于GmSSL 項(xiàng)目是OpenSSL 項(xiàng)目的分支, 并與OpenSSL 保持接口兼容. 因此GmSSL 可以替代應(yīng)用中的OpenSSL 組件, 并使應(yīng)用自動(dòng)具備基于國(guó)密的安全能力. 針對(duì)當(dāng)前現(xiàn)實(shí)應(yīng)用環(huán)境, 可以快捷的進(jìn)行接口的更新與替換, 大幅減輕了系統(tǒng)開(kāi)發(fā)人員的工作負(fù)擔(dān).
4.5.2 架構(gòu)設(shè)計(jì)
方案在實(shí)現(xiàn)時(shí)采用了分層結(jié)構(gòu)和模塊化設(shè)計(jì), 并參照以太坊的架構(gòu)進(jìn)行系統(tǒng)實(shí)現(xiàn). 從底層到上層分為網(wǎng)絡(luò)層、服務(wù)層和應(yīng)用層, 基本架構(gòu)如圖7 所示. 區(qū)塊鏈節(jié)點(diǎn)啟動(dòng)P2P 網(wǎng)絡(luò), 將各種服務(wù)注冊(cè)到P2P 網(wǎng)絡(luò)中以進(jìn)行實(shí)例化. 如此設(shè)計(jì)的優(yōu)勢(shì)在于可以動(dòng)態(tài)調(diào)整服務(wù), 系統(tǒng)的可拓展性較強(qiáng).
圖7 系統(tǒng)架構(gòu)Figure 7 System architecture
4.5.3 效果演示
參考當(dāng)下主流的區(qū)塊鏈應(yīng)用開(kāi)發(fā)技術(shù), 方案使用QT+Golang+GMSSL 進(jìn)行了原型系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā). 系統(tǒng)效果展示如圖8、圖9 和圖10 所示:
圖8 CA 服務(wù)器主界面Figure 8 Main interface of CA server
圖9 證書(shū)申請(qǐng)界面Figure 9 Interface of certificate application
基于區(qū)塊鏈技術(shù)的密鑰生命周期演示設(shè)計(jì)方案合理、高效, 可快速部署在現(xiàn)實(shí)應(yīng)用場(chǎng)合. 目前許多專(zhuān)家、學(xué)者針對(duì)不同場(chǎng)景提出了多種基于區(qū)塊鏈的身份認(rèn)證方案. 崔志華等針對(duì)物聯(lián)網(wǎng)環(huán)境提出了一種基于混合區(qū)塊鏈的多WSN (Wireless Sensor Networks) 身份認(rèn)證方案[33]. 本文提出的密鑰生命周期演示設(shè)計(jì)方案可應(yīng)用到上述身份認(rèn)證方案中, 為身份認(rèn)證過(guò)程中的密鑰提供更好的管理. 本文中的CA 節(jié)點(diǎn)可以對(duì)應(yīng)到文獻(xiàn)[33] 中的Base Station, 為各節(jié)點(diǎn)簽發(fā)身份證書(shū), 本文的聯(lián)盟區(qū)塊鏈網(wǎng)絡(luò)可對(duì)應(yīng)為Cluster Head Node, 本文的用戶(hù)可以對(duì)應(yīng)為Ordinary Node. 文獻(xiàn)[33] 中提出的集群私有區(qū)塊鏈, 在本文中可以理解為聯(lián)盟鏈中的輕節(jié)點(diǎn), 其存儲(chǔ)了區(qū)塊頭和與其集群相關(guān)的區(qū)塊體, 節(jié)約存儲(chǔ)資源的同時(shí)也能提高集群內(nèi)部用戶(hù)間的身份認(rèn)證的效率. 綜上所述, 本文設(shè)計(jì)的密鑰生命周期管理方案擴(kuò)展性良好, 可以應(yīng)用到物聯(lián)網(wǎng)環(huán)境下的身份認(rèn)證方案. 同時(shí)為進(jìn)一步滿(mǎn)足現(xiàn)實(shí)環(huán)境的需要, 我們?cè)诜桨冈O(shè)計(jì)之初便在可熱插拔的共識(shí)機(jī)制、云部署和優(yōu)化空間緩存等方面進(jìn)行了底層設(shè)計(jì), 使得市場(chǎng)應(yīng)用范圍更加廣闊.
圖10 區(qū)塊鏈網(wǎng)絡(luò)確認(rèn)區(qū)塊Figure 10 Blockchain network confirm block
隨著區(qū)塊鏈技術(shù)的發(fā)展, 適用于不同場(chǎng)景的共識(shí)機(jī)制相繼被提出, 劉建偉[34]等研究總結(jié)了當(dāng)下區(qū)塊鏈的主流共識(shí)機(jī)制, 如: PoW、PBFT 等. 雖然共識(shí)機(jī)制種類(lèi)繁多, 但傳統(tǒng)區(qū)塊鏈應(yīng)用的共識(shí)機(jī)制一旦確定則不可更改, 無(wú)法適應(yīng)現(xiàn)代社會(huì)的發(fā)展. 本系統(tǒng)參照IBM 公司主導(dǎo)的Hyperledger Fabric 項(xiàng)目[35], 提出了可熱插拔的共識(shí)機(jī)制, 構(gòu)造共識(shí)機(jī)制接口, 只要按照接口的定義實(shí)現(xiàn)相關(guān)函數(shù), 即可將新共識(shí)機(jī)制引入系統(tǒng). 定義共識(shí)機(jī)制更新協(xié)議, 實(shí)現(xiàn)區(qū)塊鏈網(wǎng)絡(luò)各節(jié)點(diǎn)協(xié)商共識(shí)機(jī)制的更新時(shí)機(jī), 同時(shí)在區(qū)塊頭中預(yù)留共識(shí)機(jī)制數(shù)據(jù)塊, 即可實(shí)現(xiàn)系統(tǒng)的不停機(jī)更新.
云計(jì)算作為一項(xiàng)分布式計(jì)算, 通過(guò)網(wǎng)絡(luò)“云” 將巨大的數(shù)據(jù)計(jì)算處理程序分解成無(wú)數(shù)個(gè)小程序, 然后,通過(guò)多部服務(wù)器組成的系統(tǒng)進(jìn)行處理和分析這些小程序得到結(jié)果并返回給用戶(hù). 云計(jì)算正在成為信息技術(shù)產(chǎn)業(yè)發(fā)展的戰(zhàn)略重點(diǎn). 依托云計(jì)算技術(shù), 將本系統(tǒng)遷移至云平臺(tái), 實(shí)現(xiàn)云部署, 可以極大程度上解決機(jī)器宕機(jī)而帶來(lái)的系統(tǒng)運(yùn)行不穩(wěn)定的問(wèn)題, 保障系統(tǒng)的穩(wěn)定性, 同時(shí)也可以減輕系統(tǒng)設(shè)計(jì)者的負(fù)擔(dān), 區(qū)塊鏈設(shè)計(jì)者只要設(shè)計(jì)業(yè)務(wù)邏輯機(jī)制, 服務(wù)器架構(gòu)、硬件設(shè)施、配置實(shí)現(xiàn)資源則交由云平臺(tái)服務(wù)商進(jìn)行統(tǒng)一管理,這樣對(duì)于促進(jìn)整個(gè)區(qū)塊鏈行業(yè)的創(chuàng)新也會(huì)更有利. 區(qū)塊鏈部署在云上必將成為區(qū)塊鏈的未來(lái)發(fā)展趨勢(shì).
根據(jù)郭靜[36]提出的私有云業(yè)務(wù)遷移部署方案, 系統(tǒng)可快速進(jìn)行云端遷移, 解決一系列不確定因素所造成的系統(tǒng)運(yùn)行不穩(wěn)定問(wèn)題.
隨著時(shí)間的推移, 區(qū)塊鏈系統(tǒng)將會(huì)出現(xiàn)數(shù)據(jù)高度冗余的情況, 如目前比特幣的主鏈的區(qū)塊數(shù)據(jù)高達(dá)200G. 為緩解此現(xiàn)象, 降低區(qū)塊鏈系統(tǒng)的運(yùn)行成本以及準(zhǔn)入門(mén)檻, 本系統(tǒng)設(shè)置了區(qū)塊鏈全節(jié)點(diǎn)和輕節(jié)點(diǎn)[37], 以應(yīng)對(duì)現(xiàn)實(shí)場(chǎng)景中的各種應(yīng)用環(huán)境, 優(yōu)化了全網(wǎng)絡(luò)的運(yùn)行負(fù)載. 全節(jié)點(diǎn)負(fù)載存儲(chǔ)所有的區(qū)塊頭和區(qū)塊體, 可以對(duì)外提供完整的公鑰查詢(xún)功能. 輕節(jié)點(diǎn)可以只存儲(chǔ)區(qū)塊頭, 也可以存儲(chǔ)區(qū)塊頭和部分區(qū)塊體. 能夠參與主節(jié)點(diǎn)的競(jìng)爭(zhēng)和證書(shū)的確認(rèn)和轉(zhuǎn)發(fā), 也可對(duì)外提供部分公鑰查詢(xún), 滿(mǎn)足了證書(shū)的分層管理的設(shè)計(jì)理念.
本文設(shè)計(jì)了一種基于區(qū)塊鏈技術(shù)的密鑰生命周期演示設(shè)計(jì)方案. 探索了區(qū)塊鏈技術(shù)在PKI 等領(lǐng)域中的應(yīng)用, 針對(duì)現(xiàn)實(shí)應(yīng)用場(chǎng)景, 對(duì)密鑰生成、公鑰查詢(xún)、密鑰更新、密鑰注銷(xiāo)和密鑰歸檔五個(gè)核心功能進(jìn)行了方案設(shè)計(jì). 利用區(qū)塊鏈的去中心化的特性, 構(gòu)建去中心化的網(wǎng)絡(luò)對(duì)并發(fā)的請(qǐng)求能夠有更高的響應(yīng)效率, 具有去中心化、集體維護(hù)、安全可信、可溯源和防篡改等突出優(yōu)勢(shì). 有效解決了傳統(tǒng)的密鑰生命周期管理中的癥結(jié)與痛點(diǎn).
目前本系統(tǒng)在現(xiàn)有條件下可應(yīng)用于局域網(wǎng)中的密鑰生成、證書(shū)頒發(fā)、證書(shū)更新、證書(shū)注銷(xiāo)和密鑰管理, 數(shù)據(jù)在區(qū)塊鏈網(wǎng)絡(luò)和CA 端, 極大程度的降低了客戶(hù)端的負(fù)荷數(shù)據(jù)量, 客戶(hù)端雖然有緩存, 但是可以通過(guò)清除緩存, 來(lái)釋放占用的磁盤(pán), 清除后想再次獲取數(shù)據(jù)可以通過(guò)動(dòng)態(tài)請(qǐng)求. 私鑰以PEM 格式加密在客戶(hù)端進(jìn)行存儲(chǔ). 若區(qū)塊鏈網(wǎng)絡(luò)利用公網(wǎng)IP, 則可以在互聯(lián)網(wǎng)環(huán)境下使用該系統(tǒng), 兼容性、可移植性強(qiáng), 不限定特殊環(huán)境, 可以為很多用戶(hù)提供可靠安全的密鑰生命周期管理服務(wù).