谷 良,宮 鑫,黃達成,任曉剛,張萌楠,陳永樂
(1.國網山西省電力公司 信息通信分公司,山西 太原 030021;2.山西聯拓科技有限公司,山西 太原 030021;3.太原理工大學 信息與計算機學院,山西 晉中 030600)
隨著物聯網技術的普及和5G技術的發展,大量資源受限的節點需要通過開放的物理網絡環境接入服務系統。而現有的物聯網密鑰管理方案中,集中式的密鑰管理方式普遍存在單點負荷過大、密鑰分發開銷大、接入數量受限以及第三方信任危機等問題[1]。分布式密鑰管理利用相互監督協同合作的優點,提高了密鑰管理的靈活性和安全性,因此成為實現海量節點靈活接入與密鑰管理的首選。
然而,現有的基于分布式的密鑰管理方案存在安全和效率的權衡問題,為了解決現有物聯網密鑰管理方案中密鑰分發不靈活、協議設計復雜和身份信息一致性維護開銷大的問題,本文從物聯網的場景應用出發,利用智能合約,結合IBC和PKI方法中身份驗證和密鑰分發靈活的優勢,提出一種分布式輕量級動態密鑰管理方案:
(1)設計了一種去中心化的基于身份驗證的輕量級動態密鑰管理方案,密鑰發送無需安全通道,提高了密鑰分發的靈活性;
(2)利用智能合約和雙線性對加密算法,通過負荷重分配,實現了去中心化的輕量級動態密鑰管理,實驗結果表明該方案相比于其它工作,在不增加身份信息一致性維護開銷的前提下,保證了協議安全;
(3)通過安全性形式化分析證明了密鑰分發和更新過程能夠抵擋目前常見的攻擊,如假冒攻擊、惡意服務器攻擊、中間人攻擊和重放攻擊等,相比于現有方案,安全性更高。
現有的分布式密鑰管理研究分別在以下3個方面做了相應的改進。①通過分布式監督和存儲方案避免單點故障和內部篡改問題。現有研究利用分布式控制、門限密鑰共享、多方共管和區塊鏈等方法實現繁重認證的分流降載,避免了單點故障攻擊和內部篡改攻擊[2-7];但因需要對身份信息一致性維護,增加了額外負荷,文獻[2]需要密鑰分發中心時刻監測每個智能終端的密鑰變更。在文獻[3]中終端間跨域通信過于復雜。文獻[4]未能解決天然密鑰托管的局限性。文獻[6]雖然采用了分布式管理,但仍然不能避免內部篡改問題。文獻[7]在每一次終端會話中都需要認證服務器完成一次上鏈,計算開銷過大。②通過引入身份標識增加系統的安全性,簡化了公鑰管理。文獻[8,9]在認證過程中添加身份標識驗證,提高協議的安全性,降低密鑰分發的通信耗損。但由于計算負荷高,無法應用于硬件簡單的物聯網環境。盡管文獻[9]通過采用身份標識和雙線性對算法簡化安全信道的設計,但能夠使用該算法的終端有限,因此該方案適用范圍受限。③通過采用ECC橢圓曲線運算、hash哈希函數等輕量級加密算法替代橢圓曲線雙線性對的復雜運算。文獻[10-16]采用ECC等輕量級加密方法,降低運算負荷;但結構簡單,無法實現安全密鑰管理,文獻[10-13]均沒有降低密鑰分發的耗損,無法滿足網絡拓撲結構的靈活性需求。文獻[14]中由于每一次密鑰更新都需要更新自己的主私鑰和變動點及以下的所有分支節點,增大了額外開銷。基于雙線性對運算的文獻[15]可以方便管制合法用戶的證書版本,避免由于證書更新和撤銷不及時而無法保證密鑰安全性的情況,但無法抵擋普通攻擊,例如安全管理節點SMN的密鑰信息沒有包括身份信息,因此惡意攻擊者替換SMN發送的信息,獲取協商的會話密鑰。文獻[16]采用哈希算法實現密鑰生成,所需的計算開銷和通信開銷小,但其模擬樹形結構中父子節點關系,層間密鑰生成是利用上一級產生下一級密鑰的迭代方式,因此如果出現惡意服務器攻擊,即Ⅱ類攻擊,通過密鑰生成算法獲取下級所有成員的私鑰信息,導致協議出現第三方信任危機。
物聯網安全場景包括3個部分,終端層、網關和數據應用層。終端層包含多個資源受限的物聯網設備,用于數據收集,并與數據應用層中的密鑰管理服務器KMS協商自身的密鑰信息,保護自身隱私;網關負責信息傳輸路徑導向;數據應用層由多個密鑰管理服務器KMS組成,這些密鑰管理服務器KMS作為連接終端設備和區塊數據的中介,每個KMS都參與負責終端設備的注冊認證和統一密鑰管理,這些KMS聯合搭建出身份平等的共治環境,實現密鑰操作的安全性,其中負責接收終端注冊認證請求的密鑰管理服務器KMS為代理密鑰管理服務器PKMS,而共治環境中的密鑰管理服務器群為KMSC。具體如圖1所示。
在該認證場景下,本文首先設計了基于智能合約的身份驗證模型。基于該模型,本文進一步提出了分布式的輕量級動態密鑰管理方案。
根據應用場景分析,終端首先通過動態密鑰生成模型生成自身密鑰信息,避免了密鑰托管中心的可信任危機和動態更新困難的問題;之后在多個密鑰管理服務器KMS組成的共治環境中,終端的密鑰操作請求需要先后通過代理服務器PKMS和服務器群KMSC的身份一致性驗證,這個過程為身份一致性維護。
因此該模型包括兩個部分:①重新設計新的動態密鑰生成模型,實現終端密鑰保護;②搭建基于區塊鏈模型的共治環境,重新設計新的智能合約,維護數據應用層中的身份一致性。
為了保證終端密鑰安全和密鑰分發靈活,本文設計了終端與密鑰管理服務器KMS共同參與的密鑰生成模型。

終端生成的公鑰輔助信息Pk內容如下
M1=[a]P2
(1)
(2)

代理服務器PKMS接收到M1和M2后,利用如下算式
(3)
判斷密鑰申請信息的合法性和一致性。
該模型修改了IBC經典算法中密鑰信息的生成公式,將其中主私鑰信息s代替為終端動態生成的隨機信息a。并利用雙線性對算法,密鑰管理服務器KMS通過雙線性對運算,將其與主私鑰信息s進行運算,得到的結果作為證書保存到鏈中,為合法節點間的通信提供合法保障。
本方案基于Authcoin[17]框架平臺,將密鑰管理服務器KMS作為成員節點,既是交易發起者,也是交易驗證者,負責將密鑰相關操作作為一條交易保存在區塊鏈上,其中交易信息包括用戶注冊和密鑰更新。在該模型中,當物聯網終端進入管轄域請求密鑰注冊或更新時,接收到請求的代理服務器PKMS需要驗證該物聯網終端身份,并在通過密鑰管理服務器群KMSC的身份一致性驗證后,生成交易信息,然后該交易信息需要通過共識機制實現系統中51%以上的成員驗證,成功上鏈。該區塊鏈可以實現快速交易查詢和輕便存儲功能。
3.2.1 交易結構
由于區塊鏈成員身份是平等的,本文采用統一的格式設計交易結構。本文區塊鏈中最主要的操作是交易寫入和交易查詢。密鑰操作信息作為一條交易,具有單個輸入和單個輸出的特點,用于記錄密鑰信息的注冊和更新的流向。交易寫入需要共識算法,交易查詢則只需要查詢鏈上最近的區塊內容,這些內容在時效上是新鮮的,無需設置證書吊銷列表CRL。交易結構中包含了代理密鑰管理服務器PKMS的地址;輸入信息有:注冊者ID、注冊者的舊公鑰輔助信息old_pk和群內驗證信息verify_pk;輸出信息有:注冊者新公鑰輔助信息new_pk。具體交易結構如圖2所示。

圖2 交易結構
3.2.2 智能合約設計
區塊鏈上的智能合約具有去中心化、不可篡改、過程透明、可追蹤等優勢,為建立去中心化的應用提供了極大便利。由于在本鏈中區塊鏈成員個數較少,基于工作量或者股份證明的共識機制容易遭受惡意攻擊者的攻擊,不能保證密鑰操作的一致性,因此,本文重新設計了智能合約內容,在每次交易上鏈之前完成交易參與者的身份證明和一致性驗證。
如圖3所示,在物聯網認證場景中,終端將申請信息發送給代理服務端PKMS,代理服務器PKMS通過對信息進行合法性驗證,決定是否向服務器群KMSC發送上鏈請求;當服務器群KMSC收到代理服務器PKMS的請求后,需要驗證申請信息與代理服務器PKMS身份信息是否一致,在確定一致的前提下,向終端發送交易確認挑戰,完成上鏈驗證的最后一步。整個過程分別由交易請求、交易驗證和交易確認3個智能合約負責,需要終端、代理服務器PKMS和服務器群KMSC參與。

圖3 智能合約場景
本文首先采用簡化的密鑰共享方法,為網絡中各個密鑰管理服務器KMS分配公私密鑰信息。需要共享的秘密如下
C=∏si,S=∑si
(4)
式中:si為密鑰管理服務器KMS的私鑰,C和S為共享的密鑰,上述公式為私鑰和共享密鑰之間的關系。本文采用橢圓曲線數乘運算,獲取如下公開信息,發送給每個密鑰管理服務器KMS

(5)
式中:Ppub是密鑰管理服務器KMS的公鑰信息,PNpub是密鑰管理服務器KMS在以太網中的公鑰信息。密鑰管理服務器KMS通過自己的公私鑰信息和其它服務器KMS的公私鑰信息可以生成共享密鑰,實現雙向的身份認證。
隨后根據完整的密鑰注冊流程,依次描述3個智能合約的具體內容:
(1)智能合約1(交易請求):終端發送交易請求給代理服務器PKMS時,代理服務器PKMS需要執行智能合約1(交易請求),驗證請求的合法性。
智能合約1(交易請求)由代理服務器PKMS執行。VR函數首先需要驗證終端交易請求信息的合法性,根據驗證公式,判斷終端是否具有密鑰操作的合法身份以及信息是否完整。判斷成功后,調用PAUTH函數。該函數負責驗證代理服務器PKMS的身份,該函數需要驗證代理服務器PKMS是否擁有合法的密鑰信息,確保其具有轉發終端交易請求的權力。該智能合約具體偽代碼如下:
智能合約1:交易請求
輸入:合法性驗證公式f,終端交易請求信息x,代理服務器的PNipub1,PNipub2以及密鑰信息si
輸出:合法性驗證結果result
(1)functionVR(f,x,PNipub1,PNipub2,si)
(2)result←f(x)
(3) ifresult==1 then
(4)result←0
(5)result←PAUTH(PNipub1,PNipub2,si)
(6) end if
(7) returnresult
(8)end function
(9)
(10)functionPAUTH(PNipub1,PNipub2,si)
(11)f←(PNipub1+siP2==SP2)∩(e(siP1,PNipub2)==e(P1,P2)C)
(12)result←f(PNipub1,PNipub2,si)
(13) returnresult
(14)end function
(2)智能合約2(交易驗證):在代理服務器PKMS通過交易請求后,將整合的消息發送給密鑰管理服務器群KMSC。在密鑰管理服務器群KMSC接收到代理服務器PKMS轉發的交易請求信息后,執行智能合約2(交易驗證),并將計算后的驗證挑戰信息發送給終端。
智能合約2(交易驗證)負責驗證交易中參與者的身份一致性以及交易請求的合法性。VV函數負責驗證代理服務器PKMS轉發的用戶操作請求信息與代理服務器PKMS身份信息之間的一致性,確保代理服務器PKMS沒有惡意篡改或偽造終端交易請求內容。判斷成功后調用SAUTH函數,該函數需要完成服務器群KMSC內所有服務器KMS的身份驗證和挑戰信息的生成:確定該交易已被所有服務器KMS驗證通過,并根據終端動態生成的終端公鑰信息,生成挑戰信息給終端。該智能合約具體偽代碼如下:
智能合約2:交易驗證
輸入:合法性驗證公式f,代理服務器轉發的注冊信息x,服務器群的Arraypub1[PN1pub1,PN2pub1,…,PNnpub1] 以及密鑰信息Arrays[s1,s2,…,sn]
輸出:合法性驗證結果result, 終端核實信息m1,m2
(1)functionVV(f,x,PNipub1,si,i∈(1,2,…,n))
(2)result←f(x)
(3)m1,m2←0
(4) ifresult==1 then
(5)result←0
(6) (result,m1,m2)←SAUTH(Arraypub1,Arrays)
(7) end if
(8) returnresult,m1,m2
(9)end function
(10)
(11)functionSAUTH(Arraypub1,Arrays)
(12)result←(∑PNipub1==S(n-1)P2)
(13)M←∏(siaPNipub1)
(14)m1,m2←0
(15) ifresult==1 then
(16)m1←M-b
(17)m2←abP2
(18) end if
(19) returnresult,m1,m2
(20)end function
(3)智能合約3(交易確認):當密鑰管理服務器群KMSC接收到終端發送的挑戰回應,需要執行智能合約3(交易確認),完成交易上鏈。
智能合約3:交易確認
輸入:終端確認信息M和ID信息
輸出:合法性驗證結果result
(1)functionVC(M,ID)
(2)f←(e(M,aP2+H(agents)P2)==e(P1,P2)CH(ID)
(3)result←f(M,ID)
(4) ifresult==1 then
(5) 交易上鏈
(6) end if
(7) returnresult
(8)end function
智能合約3(交易確認)負責確認交易請求信息中的挑戰回應內容和挑戰是否保持一致,確定交易從注冊到成功上鏈路徑上的所有節點都沒有遭受惡意攻擊。
在基于智能合約的身份驗證模型,本文設計了密鑰管理方案的密鑰注冊和密鑰更新兩個部分。

初始化后的設備在準備進入系統時,需要向密鑰管理服務器KMS驗證自己的身份信息和注冊自己的密鑰信息。


(5)服務器群KMSC接收終端確認消息后,啟動智能合約3(交易確認)。
用戶可以在證書有效性結束的情況下,執行密鑰更新協議,確保網絡系統的安全性。

(3)在驗證成功后,服務器群KMSC發送交易驗證信息給終端A。
(5)服務器群KMSC執行智能合約3(交易確認)。
本文考慮兩類攻擊者:A1代表惡意終端,可以假冒合法終端進行密鑰更新詢問;A2代表惡意服務器,擁有系統部分私鑰,試圖猜測用戶密鑰信息。對攻擊者能力做出如下假設:
(1)攻擊者可以獲取設備與網關之間的通信信息,并可以完成篡改、重發、截獲等操作。
(2)攻擊者無法克隆一個物理設備節點屬性,來偽造合法節點的設備指紋信息。
(3)服務群KMSC內部合法節點可以在參與注冊或更新密鑰過程中,通過篡改、截獲方式阻礙終端的合法操作。
(4)假定系統采用現有還未破解的加密算法完成加解密操作,因此加密算法是計算安全的,攻擊者在密鑰有效期內無法通過現有技術破解獲取明文。
本文的安全性證明使用到以下難題假設:

(6)
在DL假設,對于任意的多項式時間算法Α概率AdvDL(A) 是可忽略的。
引理1 智能合約可以檢驗代理服務器PKMS的身份信息,避免出現惡意服務器攻擊。
證明:參與智能合約的所有KMS節點都有自己的公鑰和私鑰信息,根據式(4)的密鑰共享關系,KMS節點可以通過收集其它所有KMS節點的公鑰信息,結合本節點私鑰信息可獲得初始化參數SP2=PNipub1+siP2。 且該計算內容需要自身私鑰作為參數。而根據橢圓曲線離散對數DL問題求解困難性,私鑰無法猜測。因此,可以驗證代理服務器的身份信息。同時服務器群KMSC所有KMS成員需要貢獻自己的私鑰信息,最終獲得∏siaP2=aCP2, 作為申請信息的公共簽名。而假冒密鑰管理代理服務器APKMS無法提供正確的密鑰信息。
引理2 注冊密鑰的安全性。A1敵手無法通過截獲的明文信息,推測出合法用戶的密鑰信息或者修改合法用戶的密鑰信息。

因此惡意攻擊者A1需要通過簡單的橢圓曲線乘法運算,拼湊出符合協議設計的內容格式。A1截獲合法用戶的注冊信息,通過ECC運算,可以獲得(1÷(a+H(ID)))P1。 如果攻擊者需要獲得1÷(a+H(ID)), 就必須克服橢圓曲線離散對數DL問題,但該問題是NP困難問題,因此無法構造出更新密鑰中的M′1,M′2,M′3, 假冒合法用戶,無法完成更新操作。
引理3 管理密鑰的安全性。A2敵手不能成功偽造合法用戶的公鑰輔助信息,也不能推測相關的會話密鑰信息。

引理4 密鑰版本的安全性。當舊密鑰泄露后,這兩種敵手只能獲取已經發送的信息,而不會更改新的密鑰;也不能使用舊的密鑰信息與其它參與者完成對話。
證明:由于密鑰隱私信息是通過隨機函數獲得,新的隱私和舊的隱私信息沒有任何聯系,以及注冊密鑰和更新密鑰的安全性證明,惡意攻擊者無法獲取新的密鑰信息內容或者更換新的密鑰信息。
借助區塊鏈的線性關系和分布式特點,同一個終端申請的新注冊信息會成功覆蓋舊的密鑰注冊信息,其它的終端都可以快速的在本地KMS服務器中查詢到會話對象的有效公鑰信息,避免本地存儲和遠端KMS服務器的數據不一致性。
本節將本文協議與文獻[4,6,8,15,16]進行比較,評估本文協議和其它文獻的計算開銷和安全性能。
本文根據多個攻擊方法:假冒攻擊、重放攻擊、惡意服務器攻擊、中間人攻擊、密鑰的前向安全性、密鑰的后向安全性和單點故障,對本文方法和其它文獻的安全性能進行對比,具體結果見表1。

表1 協議安全分析
針對這些攻擊,本文方法安全性能分析如下:
(1)假冒攻擊:針對于一類敵手的假冒攻擊,敵手需要獲取被假冒終端的自身私鑰信息,但由于橢圓曲線離散對數DL問題求解困難性,敵手很難獲取相應信息,因此無法完成密鑰更新,替換掉未知終端的自身私鑰信息a。針對于二類敵手的假冒攻擊,敵手需要獲取被假冒服務器的自身私鑰信息si,但由于橢圓曲線離散對數DL問題求解困難性,敵手很難獲取相應信息,因此敵手無法偽造假的終端或者修改合法終端的注冊信息。
(2)重放攻擊:本文方案借助區塊鏈的時效性,在獲取密鑰注冊操作時,需要查找鏈上相關信息,避免重復循環注冊。
(3)惡意服務器攻擊:本文重新設計的智能合約在區塊鏈原有的共識機制上加強了安全保護,在數據上鏈前,共治環境需要驗證環境中每個服務器是否是合法正常的,即遵守Shamir的(t,n) 門限方案。惡意攻擊者想要實現惡意攻擊,需要控制共治環境內所有的服務器,這對攻擊者而言,需要承擔的代價太大。
(4)中間人攻擊:本文方案在數據上鏈前,需要提出一個挑戰發送給終端,這個挑戰需要所有服務器的密鑰信息。因此中間人雖然可能會欺騙服務器群完成上鏈,但是它不能欺騙終端,獲取終端的私鑰信息。
(5)密鑰的前向安全性和后向安全性:由于終端自身私鑰信息是采用隨機選擇的方法生成的,因此在一旦密鑰生成,那么它參與的保密通話仍然有效。
(6)單點故障:本文采用分布式結構完成多個服務器共治實現終端密鑰安全操作,可以避免單個服務器需要服務所有的終端請求或者單個服務器掌握所有終端的隱私信息。
通過表1分析。其它文獻沒有考慮到:惡意服務器可以更新用戶的密鑰信息,從而與其它用戶建立對話的情況。本文方法針對于惡意服務器攻擊,即二類攻擊,重新設計了智能合約,在保證終端與注冊信息的身份一致性的前提下,還證明代理服務器和服務器群內沒有出現惡意偽造行為。因此本文方法在抵擋現有的攻擊和密鑰安全性方面,安全性較高,可以抵擋假冒攻擊、重放攻擊、惡意服務器攻擊、中間人攻擊以及密鑰的前后向安全性。
為直觀比較各個文獻的計算開銷,本文抽取了多個對協議運算開銷有較大影響的運算,TP表示雙線性對運算,M1表示基于雙線性對數乘運算,F表示區塊鏈查詢延時,Fc表示區塊鏈上鏈延時;Mc表示多項式運算;H表示哈希運算。通過統計每個文獻中各個運算的個數,完成計算開銷的比較。表2從終端和整個協議兩個角度,分別統計密鑰注冊和更新兩個過程中的計算開銷和通信開銷,對多個文獻進行分析對比。

表2 協議性能分析
同時基于現有的區塊鏈結構Hyperledger[18]和優化的Authcoin結構,本文參考github中的Authcoin模型,模擬現有文獻方案。實驗環境配置為:①CPU為Intel-i5(2.4 GHZ);②內存為12 GB DDR3 1600 MHz;③操作系統為Centos OS 64位。模擬在N(=1000)個終端的情況下,不同服務器數量n(5個~75個)組成的服務群KMSC內,終端平均密鑰注冊計算開銷模擬,具體如圖4所示。

圖4 不同方案密鑰注冊計算開銷
結合圖4和表2分析,在實現密鑰自主生成和可更新的前提下,文獻[9]所需要的計算開銷和通信開銷更小;而不考慮身份密鑰信息時,文獻[16]所需的計算開銷和通信開銷更小,采用哈希算法實現密鑰生成,與其它文獻相比是毫秒數據級。
相比較下,本文方法在保證協議安全的條件下,計算效率仍保持在可接受范圍內(10 ms~40 ms):①終端的計算開銷在其它文獻中比較少,降低了終端負荷,適合終端資源受限的物聯網環境;②服務器群KMSC通過智能合約完成終端身份信息、終端私鑰信息和代理服務器信息的監督驗證,此過程需要通過n次數乘運算驗證服務器群內所有參與驗證的服務器身份合法,相比于文獻[15],將m次雙線性對運算簡單為n次數乘運算,降低了身份一致性維護的復雜度。
輕量級密鑰管理是物聯網設備安全接入的研究熱點,本文提出了一種基于智能合約的輕量級動態密鑰管理方案,通過設計新的智能合約實現多方共同監督,完成終端節點、代理服務器和服務器群之間的身份一致性驗證,避免合法節點的惡意攻擊,同時降低了身份一致性維護開銷;采用PKI和IBC融合方法,設計動態密鑰生成模型,實現終端節點自主完成公私密鑰生成,實現終端隱私保護和密鑰分發靈活。最后對其安全模型和性能進行分析,結果證明了該協議可以正確實現注冊密鑰的安全性、更新密鑰的安全性和身份信息維護的一致性,同時能夠抵擋本文設計的攻擊者模型。