龔 琴,孫學軍
(1.閩南科技學院計算機信息學院,福建 泉州 362332;2.臨沂大學費縣校區,山東 臨沂 273400)
物聯網技術也被稱為數據傳輸的第三次浪潮[1],但在使用物聯網的過程中,會出現被人盜用相關密文數據的情況,因此只能限制物聯網的普及且必須加密物聯網中的密文數據[2],無法撤銷密文數據,降低了用戶體驗感,所以必須設計出密文數據加密算法保證物聯網訪問的安全性[3]。
黃鳳鳴[4]等人提出基于霧計算中支持外包與撤銷的屬性基加密算法,該算法構建"云-霧-終端"三層系統模型,引入屬性組密鑰技術,更新動態密鑰,實現物聯網屬性基加密,降低了屬性基加密性能。曹素珍[5]等人提出基于可驗證混合存儲物聯網屬性基加密算法,通過用戶版本號和其屬性鑰的綁定方式實現撤銷,在防止不良用戶入侵密文數據時未采用雙層加密的策略,無法獲取雙倍密鑰進行加密,存在加密效率低的問題。趙志遠[6]等人提出基于密文長度恒定的物聯網可撤銷屬性基加密算法,通過每個用戶的屬性群密鑰不能通用的特性有效抵抗撤銷用戶與未撤銷用戶的合謀攻擊,結合支持多值屬性和通配符的"AND"門策略,實現物聯網屬性基加密,該算法無法增強物聯網數據加密算法的靈活度,導致屬性基加密算法的敏感程度過低。
為了解決上述問題,提出基于區塊鏈的物聯網可撤銷屬性基加密算法。
Setup(1λ):在頁面中輸入屬性區域R、生產公鑰PK、主私鑰MSK及系統安全參數λ。

KGen(PK,MSK,ω,U):在頁面中輸入系統用戶集合U,屬性集合ω,導入公共參數PK,輸出用戶屬性私鑰SKω及主私鑰MSK。
此時系統用戶若想要獲取密鑰,系統將主動為其生成專屬私鑰[7]。

2)顯示出用戶的專屬私鑰SKω=(ei)i∈ω。
記載各個屬性i∈R對應的屬性系統用戶集合Ui,同時將此集合記錄在系統數據管理服務器中。
KEKGen(U):在頁面中導入屬性用戶集合U,生成系統用戶的專屬二叉樹KEK。
第一步:在數據管理服務器中,二叉樹KEK是按照系統用戶的個數決定的,且每個用戶代表二叉樹中一個葉子節點Vj,KEKj是每個節點任意產生的相應密鑰。系統中某用戶ut的路徑密鑰是Path(ut),即ut所對應的二叉樹節點到二叉樹根部節點所經過的所有節點的集合。
第二步:KEK(Ui)是系統中含有屬性用戶集合Ui的最小集合,若集合中包含{u1,u2,u3,u4}4個用戶,其屬性用戶集合是Uj={u1,u2,u3},可知KEK(Uj)={KEK2,KEK6}。
當系統中的用戶自帶數據時,可先取得公共參數PK,按照訪問樹T的流程,并利用Enc(PK,M,T)算法加密數據M。
第二步:假設訪問樹中標記成已分配根節點值為s,除s外的所有節點均是未分配,且節點表示數據屬性。則訪問樹中從樹頂到樹根未分配的節點的運行遞歸算法如下。

(1)
求解出上述式子后回到密文C=(C0,{C1,i,C2,i}i∈T),即完成可撤銷屬性基加密算法[8]。
物聯網中除了數據因盜用需要加密外,用戶安全也是一大問題,有很多不良用戶進入系統并威脅系統安全,因此驗證用戶身份也是物聯網需要加密的一項任務。
經過上述對物聯網中的數據完成第一次加密保證了數據安全,為進一步提升物聯網系統的安全,可利用區塊鏈技術的優勢再次進行加密,并將加密數據存儲在區塊鏈中,同時通過加密方式驗證用戶身份保證物聯網系統安全。

PK=(C0,C1,p,g,h=gβ,e(g,g)α,F,H1,H2)
(2)
式中,e(g,g)代表在群G1中雙線性映射的值。則物聯網系統的主私鑰為
MK=(α,β)
(3)
Enc(PK,D,W,SKS,Γ,K1,K2)→C,MAC,I,若DO中含有n個明文文檔,用函數表示為
D={D1,D2,…,Dn}
(4)
并且需將n個明文文檔加密后并傳輸到CSP中。
1)物聯網中的文檔加密
FileEnc(D,K1,K2)→C,MAC。物聯網中自帶數據的用戶記為DO,DO數據中明文文檔的對稱加密密鑰K1可在{0,1}k中任意選取。自帶數據用戶利用密鑰K1加密文檔Di(i∈[1,n]),可獲取如下文檔
Ci={ε.EncK1(Di)|i∈[1,n]}
(5)
式中,ε代表文檔安全的對稱加密計劃,ε.Dec代表物聯網基于區塊鏈的解密過程,ε.Enc代表物聯網基于區塊鏈的加密過程。
自帶數據用戶在集合{0,1}k中選擇密鑰K2后產生的密文文檔Ci(i∈[1,n])的消息驗證碼集合為
MACCi={H2(K2,Ci)|i∈[1,n]}
(6)
同時系統用戶將其自帶數據中的所有密文文檔C={C1,C2,…,Cn}輸送給CSP。
2)密鑰加密
KeyEnc(PK,K1,Γ)→CK1,在密鑰K1中,自帶數據用戶DO規定出訪問結構為Γ,將結構Γ視為樹,其根部自下而上經過的所有節點x標記為階dx的已分配常數多項式為qx,當Γ中節點x的門限值為kx,令deg 為
deg(qx)=dx=kx-1
(7)

(8)
式中,att(y)代表區塊鏈屬性值,s代表任意數。
3)生成索引
IndexGen(PK,W,SKs)→I。自帶數據用戶DO在其數據文檔D={D1,D2,…,Dn}內選取出關鍵詞,若關鍵詞集合為W={w1,w2,…,wm},由于每個關鍵詞都屬于集合W,因此DO所選取的大小為n的空數組DB(wi)也屬于集合W,其中,當空數組DB(wi)內的第j個文檔含有關鍵詞wi,則DB(wi)[j]=1,除此之外的DB(wi)[j]=0。


4)上傳數據
自帶數據用戶DO利用安全信息傳輸通道把K2、MAC={MACC1,MACC2,…,MACCn}及SKS上傳給TA。

(9)
通過TA可以給予DU信息驗證碼集合MAC={MACC1,MACC2,…,MACCn}、認證密鑰K2和搜索密鑰SKS三種信息,當存在不相同的DU時,除屬性私鑰SKU為不相同,其余皆相同。
Search(I,Tkw)→CK1,DB(kw)。DU利用交易TXT把搜索令牌Tkw傳送到搜索合約地址Adds,并借用智能合約的addIndex()函數將其發送到搜索令牌Tkw中進行搜索[11]。
在智能合約中檢索出DB(kw)及CK1,并把CK1傳送至借用合約DU中。因為區塊鏈中的所有數據皆為公開使用,因此用戶和云服務器都可隨時獲取DB(kw),聯合智能合約進行搜索還可降低云服務器的存儲負擔及成本[12]。
在保證云服務器結果是最正確的條件下,用戶最終獲取的密文文檔一定是正確的,因此不再需要驗證,隨之降低了成本。
Dec(SKU,CK1,Ckw)→Dkw,用戶得到正確的密文文檔后通過驗證其是否含有解密功能,即驗證出其具有解密功能后,可立即進行解密并獲取明文文檔,否則反之。
1)認證密鑰:Test(SKU,CK1)→K1,當用戶獲取密文Ck1后立即檢測密文的訪問計劃Γ是否匹配其屬性私鑰SKU,若匹配,則根據從上到下的遞歸算法進行運算,并獲取A=e(g,g)rs,否則回到第一步重新運算,經上述運算用戶即可還原其對稱密鑰為:

=[K1e(g,g)αse(g,g)rs]/e(g,g)s(r+α)
(10)
2)物聯網用戶解密Dec(Ckw,K1)→Dkw,通過解密獲取對稱密鑰K1、含有查詢關鍵詞的明文文檔及密文文檔,即Dj={ε.Dec(K1,Ci)|i∈[1,j]}。
為了驗證所提算法的整體有效性,在某公司信息安全傳輸系統中的Hadoop平臺進行加密復雜程度、加密效率和密鑰敏感程度測試。
密鑰越短數據加密復雜度越低,由圖1中的數據可知,其它兩種算法安全等級越高密鑰越長,文獻[5]算法的密鑰長度甚至高于7200,而所提算法在同一安全等級下的密鑰長度最短,且無論多大等級其長度始終不超過300,因為所提算法利用可撤銷加密算法和區塊鏈加密算法形成混合加密算法后對物聯網數據進行加密,大大提高加密性能,從而降低加密復雜度。

圖1 不同算法的加密復雜度
比較三種算法在加密過程中不同階段所消耗的時間,分析圖2可知,在任何階段所提算法的時間消耗都是最低的,將所有階段的所需時間加在一起形成加密時間消耗,發現所提算法的加密時間消耗僅用3.56s,文獻[4]算法用時7.58s,文獻[5]算法的加密時間已經超過10s,證明所提算法最優,這是由于所提算法在實現物聯網數據信息加密時采用雙層加密的策略,獲取雙倍密鑰進行加密,加快加密速度,減少加密時間,提高加密效率。

圖2 三種算法不同階段的時間消耗
加密算法的對稱加密算法及公鑰加密算法組成了明文敏感性,因此若明文發生變化,則密文數據隨之發生改變,改變越大說明算法越敏感,由圖3可知,利用所提算法、文獻[4]算法和文獻[5]算法經多次實驗比較其敏感程度,所提算法的敏感程度經多次迭代其敏感程度一直保持50%以上,而文獻[4]算法和文獻[5]算法的敏感程度都過低,因為所提算法首先設計出帶有密鑰加密密鑰的可撤銷加密算法再進行物聯網數據加密,以加強物聯網數據加密算法的靈活度,從而提升算法的敏感程度。

圖3 密鑰敏感程度
針對當前算法的不足,提出基于區塊鏈的物聯網可撤銷屬性基加密算法。該算法設計出可對密鑰進行加密的互聯網可撤銷屬性基的加密算法,再利用區塊鏈技術設計出物聯網數據的加密算法,中和兩種加密算法,實現物聯網數據加密。經試驗表明,所提算法加密復雜度低、加密效率高和密鑰敏感程度高,由于部分物聯網在云環境下需要加收用戶驗證費用,因此接下來以平衡用戶與服務器之間費用問題展開研究。