本發(fā)明屬于云存儲中數(shù)據(jù)安全技術(shù)領(lǐng)域,應(yīng)用于高效檢索密文數(shù)據(jù)。具體地講,是一種云存儲中基于KCB樹和布隆過濾器的高效密文檢索方法。
背景技術(shù):
云存儲是以云計(jì)算為基礎(chǔ)逐漸發(fā)展起來的,通過將加密數(shù)據(jù)存儲在云服務(wù)器上而為用戶提供更便捷、更高效的訪問與管理。因此,云存儲被廣泛的應(yīng)用在各個(gè)領(lǐng)域,具有十分廣闊的市場應(yīng)用前景,但其中的安全問題也引起了用戶的關(guān)注。
對于用戶而言,云服務(wù)器并不是完全可信的。為了保護(hù)數(shù)據(jù)的隱私,用戶通常會在數(shù)據(jù)傳輸?shù)皆品?wù)器之前對重要數(shù)據(jù)進(jìn)行加密。這樣一來,利用明文的關(guān)鍵字搜索技術(shù)就失效了。因此如何對云服務(wù)器上存儲的密文文件進(jìn)行關(guān)鍵字檢索就成為了一個(gè)難題。為了解決這一問題,可搜索加密(Searchable Encryption,SE)技術(shù)便應(yīng)運(yùn)而生。
SE是一個(gè)新的密碼學(xué)原語,在保護(hù)存儲在不可信第三方實(shí)體上的數(shù)據(jù)機(jī)密性的同時(shí),還能對密文數(shù)據(jù)進(jìn)行高效地檢索。SE可描述為如下過程:數(shù)據(jù)擁有者利用關(guān)鍵字集合生成加密關(guān)鍵字索引,并將所有的加密文件和加密關(guān)鍵字索引上傳到云服務(wù)器;當(dāng)用戶需要檢索關(guān)鍵字時(shí),利用陷門函數(shù)為關(guān)鍵字生成查詢令牌,并發(fā)送給云服務(wù)器;服務(wù)器使用該令牌對加密關(guān)鍵字索引進(jìn)行檢索;服務(wù)器將包含該關(guān)鍵字的密文集合返回給用戶,用戶利用密鑰解密返回的密文文件。從安全性而言,利用該技術(shù)進(jìn)行關(guān)鍵字檢索,除了會暴露用戶的“搜索模式”(即猜測出任意兩個(gè)搜索語句是否包含相同的關(guān)鍵字)、“訪問模式”(即每次檢索的結(jié)果)、文件密文信息和一些搜索憑證之外,不會暴露任何有關(guān)文檔和關(guān)鍵字的信息。從訪問效率而言,利用SE機(jī)制,用戶不必檢索、下載和解密不包含關(guān)鍵字的密文文件,節(jié)約了大量的網(wǎng)絡(luò)開銷和計(jì)算開銷。
盡管SE機(jī)制的出現(xiàn)極大的提高了用戶訪問效率,但研究表明,不同的SE索引結(jié)構(gòu)也將影響關(guān)鍵字的檢索效率。2003年,Goh提出了安全索引的概念,利用布隆過濾器(Bloom Filter,BF)為每個(gè)文件構(gòu)造一個(gè)索引。當(dāng)用戶需要對某個(gè)關(guān)鍵字進(jìn)行檢索時(shí),將該關(guān)鍵字的陷門發(fā)送給云端,再由云服務(wù)器利用陷門與每個(gè)文件的BF進(jìn)行匹配。在時(shí)間代價(jià)上,云服務(wù)器逐個(gè)檢索所有密文文件,關(guān)鍵字查詢時(shí)間為O(n)(n是文件集合中文件的個(gè)數(shù)),效率較低。2006年,Curtmola等人改進(jìn)了Goh的方案,首次采用倒排索引的方法。該方案為每個(gè)關(guān)鍵字構(gòu)造一個(gè)關(guān)鍵字鏈表,每一條鏈表節(jié)點(diǎn)加密的存放文件標(biāo)識符、下一個(gè)節(jié)點(diǎn)的指針和下一個(gè)節(jié)點(diǎn)的解密密鑰。在此改進(jìn)下,關(guān)鍵字搜索時(shí)間減少到了O(r)(r是包含該關(guān)鍵字文件的個(gè)數(shù)),但由于每次訪問時(shí)都需要對當(dāng)前節(jié)點(diǎn)進(jìn)行解密計(jì)算,因此計(jì)算開銷較大。
2011年,Chai提出了一種類似于字典樹的加密索引結(jié)構(gòu)。在該方案中,關(guān)鍵字查詢時(shí)間與最長關(guān)鍵字的長度成正比。雖然此方案效率較高,并能夠檢測服務(wù)器的欺騙行為,但不能抵御字典攻擊,安全性差。2013年Kamara等人利用關(guān)鍵字紅黑樹(KRB樹)為文件構(gòu)造加密索引,提出了并行動態(tài)對稱可搜索加密方案。該方案在p個(gè)處理機(jī)的情況下,關(guān)鍵字檢索時(shí)間為O((r/p)logn);當(dāng)p=logn時(shí),平行關(guān)鍵字檢索時(shí)間為O(r);當(dāng)p=r時(shí),關(guān)鍵字檢索時(shí)間為O(logn),即與r的大小無關(guān)。雖然基于KRB樹的密文索引結(jié)構(gòu)能夠提高了關(guān)鍵字的檢索效率,但由于KRB樹中所有節(jié)點(diǎn)的存儲結(jié)構(gòu)均為關(guān)鍵字哈希表,即是通過關(guān)鍵碼值(key,value)訪問數(shù)據(jù)的。且每一個(gè)節(jié)點(diǎn)都存儲了兩個(gè)m比特的向量,空間復(fù)雜度至少為O(2m2(2n-1))bits(與mn成正比,其中m為關(guān)鍵字個(gè)數(shù),n為文件個(gè)數(shù)),這無疑增大了云服務(wù)器的存儲開銷。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于結(jié)合關(guān)鍵字完全二叉樹和布隆過濾器在空間和時(shí)間方面的巨大優(yōu)勢,提出一種高效的SE索引結(jié)構(gòu),在實(shí)現(xiàn)關(guān)鍵字高效檢索的同時(shí),降低加密索引在服務(wù)器上的存儲開銷。
在描述發(fā)明內(nèi)容之前,我們先定義幾個(gè)基礎(chǔ)的密碼學(xué)基元:
1.一個(gè)確定性偽隨機(jī)函數(shù):P:{0,1}k×{0,1}n→{0,1}m;
2.y個(gè)相互獨(dú)立的哈希函數(shù):H={hi:{0,1}k×{0,1}n→{1,x}m}(1≤i≤y)。
為了闡明本發(fā)明的步驟,首先定義以下四個(gè)算法:
(1)、Gen(1k)→K
初始化方案所需的密鑰,1k是系統(tǒng)安全參數(shù),作為函數(shù)的輸入。在安全參數(shù)1k下,生成偽隨機(jī)函數(shù)的密鑰K1以及對稱加密算法的密鑰K2。算法輸出密鑰K=(K1,K2)。
(2)、BuildIndex(F,W,K)→I
1)、構(gòu)造關(guān)鍵字完全二叉樹(Keyword Complete Binary Tree,KCB)
輸入明文文件集合F={f1,…,fn}和關(guān)鍵字集合W={w1,w2,…,wm},其中,n是文件集合中文件的個(gè)數(shù),m是關(guān)鍵字集合中關(guān)鍵字的個(gè)數(shù),n和m的個(gè)數(shù)均可增減。我們通過如下步驟構(gòu)造KCB樹:
a)KCB樹的葉節(jié)點(diǎn)對應(yīng)文件集合F中的所有文件,因此KCB樹的層數(shù)l可由文件個(gè)數(shù)n決定,即完全二叉樹的葉節(jié)點(diǎn)個(gè)數(shù)為若則用空節(jié)點(diǎn)填充剩余葉節(jié)點(diǎn)。
b)定義KCB樹的節(jié)點(diǎn)為uab(1≤a≤l,1≤b≤2(a-1))。其中a為節(jié)點(diǎn)uab所在的層數(shù),b為節(jié)點(diǎn)uab在第a層的序號。在節(jié)點(diǎn)uab上存儲二元組(id(uab),dataab)。id(uab)為節(jié)點(diǎn)標(biāo)識符。dataab為一個(gè)長度為m的數(shù)組。dataab的第i位定義為dataab[i],其中i∈{1,…,m}。
若節(jié)點(diǎn)uab是葉子節(jié)點(diǎn):將id(uab)定義為該節(jié)點(diǎn)對應(yīng)的文檔fj的文檔標(biāo)識符IDj。定義dataab[i]=11(1≤i≤m),當(dāng)且僅當(dāng)文件fj中包含關(guān)鍵字wi;定義dataab[i]=00,當(dāng)且僅當(dāng)文件fj中不包含該關(guān)鍵字wi;若該葉節(jié)點(diǎn)為填充節(jié)點(diǎn),則設(shè)置dataab[i]=10。
若節(jié)點(diǎn)uab是非葉子節(jié)點(diǎn):若其左孩子和右孩子都存在包含關(guān)鍵字wi的葉節(jié)點(diǎn),則將該內(nèi)部節(jié)點(diǎn)數(shù)組dataab的對應(yīng)位置dataab[i]置為11;若只有其左孩子存在包含關(guān)鍵字wi的葉節(jié)點(diǎn),則將該內(nèi)部節(jié)點(diǎn)數(shù)組dataab的對應(yīng)位置dataab[i]置為10;若只有其右孩子存在包含關(guān)鍵字wi的葉節(jié)點(diǎn),則將該內(nèi)部節(jié)點(diǎn)數(shù)組dataab的對應(yīng)位置dataab[i]置為01;若其左孩子和右孩子都不存在包含關(guān)鍵字wi的葉節(jié)點(diǎn),則將該內(nèi)部節(jié)點(diǎn)數(shù)組dataab的對應(yīng)位置dataab[i]置為00。
文件索引T實(shí)質(zhì)是一顆未加密的KCB樹,完全二叉查找樹能保證在最差的情況下操作時(shí)間為O(logn)。盡管KCB樹高效查找的優(yōu)勢能夠?qū)崿F(xiàn)關(guān)鍵字的快速檢索,但若將完全二叉樹T的2n-1個(gè)節(jié)點(diǎn)都存儲到云服務(wù)器上,又將給服務(wù)器帶來巨大的存儲開銷。因此本發(fā)明利用布隆過濾器再次對索引結(jié)構(gòu)進(jìn)行優(yōu)化,加快關(guān)鍵字的檢索效率,降低服務(wù)器的存儲開銷。
2)、由文件索引樹T生成加密索引I
利用布隆過濾器將文件索引樹T生成加密索引I。輸入密鑰K,文件集合F={f1,…,fn},文件索引T。之后執(zhí)行以下步驟:
a)對文件索引樹T中所有節(jié)點(diǎn)uab(1≤a≤l,1≤b≤2(a-1))以及所有的關(guān)鍵字wi(1≤i≤m),計(jì)算并利用y個(gè)相互獨(dú)立的哈希函數(shù)映射到布隆過濾器上:
b)為了防止云服務(wù)器上數(shù)據(jù)丟失,將文件索引樹T保留在本地服務(wù)器。服務(wù)器上存儲加密索引I。
由于文件索引T采用的是完全二叉樹結(jié)構(gòu),該結(jié)構(gòu)上的每一個(gè)節(jié)點(diǎn)標(biāo)識符可以通過計(jì)算得到。從u11節(jié)點(diǎn)起,服務(wù)器能夠知道下一個(gè)要訪問的節(jié)點(diǎn)標(biāo)識符。因此無需上傳KCB結(jié)構(gòu),只需將加密文件和加密索引上傳到云端。
當(dāng)可以承受一些誤報(bào)時(shí),布隆過濾器擁有很大的空間優(yōu)勢。對于一個(gè)有1%誤報(bào)率的布隆過濾器而言,存儲所有元素只需要(9.6m(2n-1))bits(其中m為關(guān)鍵字個(gè)數(shù),n為文件個(gè)數(shù))。
(3)、SrchToken(K,wi)→τ
使用查詢關(guān)鍵字生成搜索令牌。輸入密鑰K和關(guān)鍵字wi,輸出搜索令牌
(4)、Search(C,I,τ)→C(x,y)
服務(wù)器接收搜索令牌τ,通過加密索引I對密文文件進(jìn)行檢索,返回滿足條件的密文文件集合C(x,y)。
當(dāng)用戶需要對某個(gè)關(guān)鍵字進(jìn)行檢索時(shí),通過陷門函數(shù)生成該關(guān)鍵字的搜索令牌。從節(jié)u11點(diǎn)開始,將節(jié)點(diǎn)標(biāo)識符、搜索令牌和判斷符映射到布隆過濾器上。根據(jù)判斷符的值計(jì)算接下來將要檢索的節(jié)點(diǎn)標(biāo)識符,接著進(jìn)行遞歸檢索,直至找到滿足搜索條件的加密文件集合。當(dāng)判斷符表明不存在含有關(guān)鍵字wi的文件時(shí),服務(wù)器向用戶返回沒有找到。
本發(fā)明的發(fā)明目的是這樣實(shí)現(xiàn)的:
本發(fā)明云存儲中基于KCB樹和布隆過濾器的高效密文檢索方法,是一種利用關(guān)鍵字完全二叉樹查詢時(shí)間快和布隆過濾器空間效率高的特點(diǎn),提出的一種高效SE索引結(jié)構(gòu)。關(guān)鍵字完全二叉樹能夠?qū)㈥P(guān)鍵字的搜索時(shí)間維持在O(logn),與現(xiàn)有的最優(yōu)的方案效率相當(dāng)。在此基礎(chǔ)上,本發(fā)明利用布隆過濾器再次對文件索引樹T進(jìn)行優(yōu)化,通過將KCB樹的所有節(jié)點(diǎn)映射到布隆過濾器上,避免將完全二叉樹T的2n-1個(gè)節(jié)點(diǎn)信息都存儲到云服務(wù)器上。在實(shí)現(xiàn)關(guān)鍵字高效檢索的同時(shí),降低加密索引在服務(wù)器上的存儲開銷。
附圖說明
圖1是可搜索加密示意圖;
圖2是本發(fā)明利用關(guān)鍵字紅黑樹結(jié)構(gòu)構(gòu)造的文件索引樹T;
圖3是本發(fā)明將文件索引T映射到布隆過濾器的示意圖;
圖4是本發(fā)明是本發(fā)明一種云存儲中基于KCB樹和布隆過濾器的高效密文檢索方法的技術(shù)方案圖,也是本發(fā)明的摘要附圖;
具體實(shí)施方式
下面結(jié)合附圖對本發(fā)明的實(shí)施方案進(jìn)行詳細(xì)的描述,以便本領(lǐng)域的技術(shù)人員能夠更好的理解本發(fā)明。
本發(fā)明利用關(guān)鍵字完全二叉樹的結(jié)構(gòu)為文件集合構(gòu)造文件索引樹T,再利用哈希函數(shù)將T映射到布隆過濾器上構(gòu)造加密索引I,具體方案如下:
(1)、首先,利用密鑰生成算法Gen,初始化本發(fā)明所需的密鑰K1和K2。
(2)、數(shù)據(jù)擁有者對明文文件進(jìn)行加密,得到密文文件集合C={c1,…,cn}。
(3)、接著利用算法BuildIndex(F,W,K)為明文文件集F={f1,…,fn}構(gòu)造文件索引T,如圖2。將得到的文件索引T的所有節(jié)點(diǎn)uab以及所有關(guān)鍵字wi映射到布隆過濾器上。如圖3,得到加密索引I。
(4)、當(dāng)用戶需要對關(guān)鍵字進(jìn)行檢索時(shí),利用算法SrchToken生成搜索令牌并發(fā)送給云服務(wù)器。
(5)、服務(wù)器接收搜索令牌τ,利用算法Search對加密關(guān)鍵字索引I進(jìn)行檢索,找到對應(yīng)的密文文件。
設(shè)判斷符π1=00、π2=01、π3=10、π4=11。從u11開始,根據(jù)命中的判斷符的值計(jì)算接下來要檢索的節(jié)點(diǎn)的標(biāo)識符id(uab),接著進(jìn)行遞歸查找,直至找到滿足查詢條件的密文文件集合。
將標(biāo)識符id(uab)、和πi(1≤i≤4)做以下運(yùn)算:
1)、當(dāng)前檢索的是內(nèi)部節(jié)點(diǎn):
a)若π1命中,表示不存在含有關(guān)鍵字wi的文件。云服務(wù)器向用戶返回沒有找到。
b)若π2命中,表示當(dāng)前節(jié)點(diǎn)的右孩子存在包含關(guān)鍵字wi的文件,計(jì)算接下來要檢索的節(jié)點(diǎn)為u(a+1)(2b)。
c)若π3命中,表示當(dāng)前節(jié)點(diǎn)的左孩子存在包含關(guān)鍵字wi的文件,計(jì)算接下來要檢索的節(jié)點(diǎn)為u(a+1)(2b-1)。
d)若π4命中,表示當(dāng)前節(jié)點(diǎn)的左孩子和右孩子都存在包含關(guān)鍵字wi的文件,計(jì)算接下來要檢索的節(jié)點(diǎn)為u(a+1)(2b-1)和u(a+1)(2b)。
2)、當(dāng)前檢索的是葉子節(jié)點(diǎn):
a)若π1命中,表示文件fj不含關(guān)鍵字wi。
b)若π4命中,表示文件fj含有關(guān)鍵字wi。
c)若π3命中,表示該葉節(jié)點(diǎn)為填充節(jié)點(diǎn)。
根據(jù)以上步驟,從云服務(wù)器上找到與搜索令牌對應(yīng)的密文文件集合C(x,y)。
(6)、解密密文文件集C(x,y),得到對應(yīng)的明文文件集F(x,y)。