1.一種云存儲(chǔ)中基于KCB樹和布隆過(guò)濾器的高效密文檢索方法,其特征在于,包括以下幾個(gè)步驟:
(1)、初始化方案所需的密鑰
利用密鑰生成算法Gen(1k)→K,初始化本發(fā)明所需的密鑰K1和K2,其中1k是系統(tǒng)安全參數(shù),在安全參數(shù)1k下,生成偽隨機(jī)函數(shù)的密鑰K1以及對(duì)稱加密算法的密鑰K2;
(2)、利用算法BuildIndex(F,W,K)為明文文件集構(gòu)造文件索引樹T
文件索引樹T實(shí)質(zhì)是一顆未加密的KCB樹(Keyword Complete Binary Tree),輸入明文文件集合F={f1,…,fn}和關(guān)鍵字集合W={w1,w2,…,wm},其中,n是文件集合中文件的個(gè)數(shù),m是關(guān)鍵字集合中關(guān)鍵字的個(gè)數(shù),n和m的個(gè)數(shù)均可增減,我們通過(guò)如下步驟構(gòu)造KCB樹:
a)、KCB樹的葉節(jié)點(diǎn)對(duì)應(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層的序號(hào),在節(jié)點(diǎn)uab上存儲(chǔ)二元組(id(uab),dataab),id(uab)為節(jié)點(diǎn)標(biāo)識(shí)符,dataab為一個(gè)長(zhǎng)度為m的數(shù)組,dataab的第i位定義為dataab[i],其中i∈{1,…,m};
若節(jié)點(diǎn)uab是葉子節(jié)點(diǎn):將id(uab)定義為該節(jié)點(diǎn)對(duì)應(yīng)的文檔fj的文檔標(biāo)識(shí)符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的對(duì)應(yīng)位置dataab[i]置為11,若只有其左孩子存在包含關(guān)鍵字wi的葉節(jié)點(diǎn),則將該內(nèi)部節(jié)點(diǎn)數(shù)組dataab的對(duì)應(yīng)位置dataab[i]置為10,若只有其右孩子存在包含關(guān)鍵字wi的葉節(jié)點(diǎn),則將該內(nèi)部節(jié)點(diǎn)數(shù)組dataab的對(duì)應(yīng)位置dataab[i]置為01,若其左孩子和右孩子都不存在包含關(guān)鍵字wi的葉節(jié)點(diǎn),則將該內(nèi)部節(jié)點(diǎn)數(shù)組dataab的對(duì)應(yīng)位置dataab置為00;
KCB樹能保證在最差的情況下操作時(shí)間為O(logn),盡管KCB樹高效查找的優(yōu)勢(shì)能夠?qū)崿F(xiàn)關(guān)鍵字的快速檢索,但若將完全二叉樹T的2n-1個(gè)節(jié)點(diǎn)都存儲(chǔ)到云服務(wù)器上,又將給服務(wù)器帶來(lái)巨大的存儲(chǔ)開銷,因此本發(fā)明利用布隆過(guò)濾器再次對(duì)索引結(jié)構(gòu)進(jìn)行優(yōu)化,加快關(guān)鍵字的檢索效率,降低服務(wù)器的存儲(chǔ)開銷;
(3)、由文件索引樹T生成加密索引I
利用布隆過(guò)濾器將文件索引樹T生成加密索引I,輸入密鑰K,文件集合F={f1,…,fn},文件索引T,之后執(zhí)行以下步驟:
a)、對(duì)文件索引樹T中所有節(jié)點(diǎn)uab(1≤a≤l,1≤b≤2(a-1))以及所有的關(guān)鍵字wi(1≤i≤m),計(jì)算并利用y個(gè)相互獨(dú)立的哈希函數(shù)映射到布隆過(guò)濾器上:
b)、為了防止云服務(wù)器上數(shù)據(jù)丟失,將文件索引樹T保留在本地服務(wù)器,服務(wù)器上存儲(chǔ)加密索引I;
由于文件索引T采用的是完全二叉樹結(jié)構(gòu),該結(jié)構(gòu)上的每一個(gè)節(jié)點(diǎn)標(biāo)識(shí)符可以通過(guò)計(jì)算得到,從u11節(jié)點(diǎn)起,服務(wù)器能夠知道下一個(gè)要訪問(wèn)的節(jié)點(diǎn)標(biāo)識(shí)符,因此無(wú)需上傳KCB結(jié)構(gòu),只需將加密文件和加密索引上傳到云端;
當(dāng)可以承受一些誤報(bào)時(shí),布隆過(guò)濾器擁有很大的空間優(yōu)勢(shì),對(duì)于一個(gè)有1%誤報(bào)率的布隆過(guò)濾器而言,存儲(chǔ)所有元素只需要(9.6m(2n-1))bits(其中m為關(guān)鍵字個(gè)數(shù),n為文件個(gè)數(shù));
(4)、利用算法SrchToken生成搜索令牌
當(dāng)用戶需要對(duì)某個(gè)關(guān)鍵字進(jìn)行檢索時(shí),利用算法SrchToken(K,wi)→τ,輸入密鑰K和關(guān)鍵字wi,輸出搜索令牌
(5)、服務(wù)器接收搜索令牌τ,利用算法Search對(duì)加密關(guān)鍵字進(jìn)行檢索
服務(wù)器接收搜索令牌τ,通過(guò)加密索引I對(duì)密文文件進(jìn)行檢索,返回滿足條件的密文文件集合C(x,y),執(zhí)行步驟如下所示:
設(shè)判斷符π1=00、π2=01、π3=10、π4=11,從u11開始,根據(jù)命中的判斷符的值計(jì)算接下來(lái)要檢索的節(jié)點(diǎn)的標(biāo)識(shí)符id(uab),接著進(jìn)行遞歸查找,直至找到滿足查詢條件的密文文件集合;
將標(biāo)識(shí)符id(uab)、和πi(1≤i≤4)做以下運(yùn)算:
當(dāng)前檢索的是內(nèi)部節(jié)點(diǎn):
a)、若π1命中,表示不存在含有關(guān)鍵字wi的文件,云服務(wù)器向用戶返回沒(méi)有找到;
b)、若π2命中,表示當(dāng)前節(jié)點(diǎn)的右孩子存在包含關(guān)鍵字wi的文件,計(jì)算接下來(lái)要檢索的節(jié)點(diǎn)為u(a+1)(2b);
c)、若π3命中,表示當(dāng)前節(jié)點(diǎn)的左孩子存在包含關(guān)鍵字wi的文件,計(jì)算接下來(lái)要檢索的節(jié)點(diǎn)為u(a+1)(2b-1);
d)、若π4命中,表示當(dāng)前節(jié)點(diǎn)的左孩子和右孩子都存在包含關(guān)鍵字wi的文件,計(jì)算接下來(lái)要檢索的節(jié)點(diǎn)為u(a+1)(2b-1)和u(a+1)(2b);
當(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ù)器上找到與搜索令牌對(duì)應(yīng)的密文文件集合C(x,y)。