本發(fā)明屬于云計(jì)算、信息安全領(lǐng)域,尤其涉及一種云計(jì)算中安全最近鄰檢索方法。
背景技術(shù):
最近鄰查詢(xún)是很多領(lǐng)域中的基礎(chǔ)問(wèn)題之一,隨著云計(jì)算和大數(shù)據(jù)時(shí)代的到來(lái),把數(shù)據(jù)外包到云服務(wù)器變得非常流行,但是存儲(chǔ)在云中的數(shù)據(jù)有可能被泄露和篡改,給數(shù)據(jù)的安全和隱私帶來(lái)了巨大威脅,因此如何安全高效地進(jìn)行最近鄰查詢(xún)是迫切需要解決的難題。在現(xiàn)有技術(shù)中,如基于保序加密的安全最近鄰查詢(xún)方法、一種非對(duì)稱(chēng)數(shù)量積保持的加密方法(aspe)等,都不可以抵抗選擇性明文攻擊,數(shù)據(jù)的安全與隱私得不到保證;還有一類(lèi)方法基于非對(duì)稱(chēng)加密并且需要線性級(jí)的查詢(xún)時(shí)間,有的方法執(zhí)行一次查詢(xún)需要用戶(hù)和云服務(wù)器進(jìn)行多次通訊,隨著數(shù)據(jù)量的增大,查詢(xún)所需時(shí)間會(huì)越來(lái)越長(zhǎng),給用戶(hù)帶來(lái)不好的體驗(yàn),還有一類(lèi)方法需要依賴(lài)于安全的硬件,使得這類(lèi)方法很難被推廣。
綜上所述,現(xiàn)有技術(shù)存在的問(wèn)題是:現(xiàn)有的技術(shù)無(wú)法同時(shí)保證安全性和高效性。安全最近鄰查詢(xún)的主要難點(diǎn)在于:為了保證數(shù)據(jù)安全性,數(shù)據(jù)擁有者需要先對(duì)數(shù)據(jù)進(jìn)行編碼和加密,然后外包給云服務(wù)器。用戶(hù)在需要查詢(xún)數(shù)據(jù)的時(shí)候,同樣需要對(duì)查詢(xún)條件進(jìn)行加密,云服務(wù)器需要在密文條件下進(jìn)行計(jì)算,最后返回給用戶(hù)加密的查詢(xún)結(jié)果。由于數(shù)據(jù)量非常大,需要設(shè)計(jì)安全高效的索引結(jié)構(gòu),構(gòu)建出不可區(qū)分的加密索引?,F(xiàn)有的技術(shù)不能夠保證安全性和高效性的原因一方面是其數(shù)據(jù)結(jié)構(gòu)和算法不夠安全,攻擊者能通過(guò)選擇性明文攻擊等方式獲取數(shù)據(jù)信息或者查詢(xún)信息,另一方面就是其索引不夠高效,執(zhí)行查詢(xún)操作的時(shí)間復(fù)雜度高,導(dǎo)致用戶(hù)在查詢(xún)數(shù)據(jù)的時(shí)候需要很長(zhǎng)時(shí)間。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)存在的問(wèn)題,本發(fā)明提供了一種云計(jì)算中安全最近鄰檢索方法。
本發(fā)明是這樣實(shí)現(xiàn)的,一種云計(jì)算中安全最近鄰檢索方法,所述云計(jì)算中安全最近鄰檢索方法采用voronoi圖對(duì)2-d空間劃分;采用兩個(gè)數(shù)組構(gòu)建單窩布魯姆過(guò)濾器和多窩魯姆過(guò)濾器兩種安全數(shù)據(jù)結(jié)構(gòu),用多窩布魯姆過(guò)濾器來(lái)構(gòu)建不可區(qū)分的索引,單窩布魯姆過(guò)濾器用來(lái)構(gòu)建陷門(mén),從而實(shí)現(xiàn)亞線性級(jí)的查詢(xún)時(shí)間,并達(dá)到ind-cpa的安全要求;
所述voronoi圖對(duì)2-d空間劃分記2-d空間數(shù)據(jù)集s={d1,d2,···,dn},2-d空間為ω;具體包括:
第一步,根據(jù)已有數(shù)據(jù)集s,構(gòu)建出voronoi圖v,v由n個(gè)不相交的凸多邊形構(gòu)成,記為{p1,p2,···,pn};
第二步,待劃分的區(qū)域?yàn)閞,r的初始值為ω,隨機(jī)選取x維或者y維,把r劃分為兩個(gè)矩形r1和r2,保證max(p(r1∩ω),p(r2∩ω))最小,其中p(ri∩ω)表示ω中被ri覆蓋的凸多邊形的個(gè)數(shù),i=1或i=2;
第三步,遞歸執(zhí)行第二步,對(duì)于每個(gè)矩形r,和劃分后的矩形r1,r2滿(mǎn)足以下條件:max(p(r1∩ω),p(r2∩ω))=p(r),則終止劃分,其中p(r)表示ω中被r覆蓋的凸多邊形的個(gè)數(shù);
采用q和d表示兩個(gè)數(shù)組,長(zhǎng)度都為nc,q用來(lái)構(gòu)建布魯姆過(guò)濾器,d用來(lái)構(gòu)建布魯姆過(guò)濾器,sq表示待存入q中的元素集合,sd表示待存入d中的元素集合;nc≥1.2×|sq|;用h1,h2,···,hm表示m個(gè)hash函數(shù)(m≥2),對(duì)于一個(gè)輸入的元素,每個(gè)hash函數(shù)都輸出[0,nc-1]中的一個(gè)位置id,用h1,h2,···,hk表示另外k個(gè)不同的hash函數(shù),對(duì)于一個(gè)輸入的元素,輸出[0,w-1]中的一個(gè)位置id,其中w表示一個(gè)整數(shù)的位數(shù)。
進(jìn)一步,所述q的構(gòu)建方法如下:
第一步,把q中的每個(gè)單元qi都初始化為0;
第二步,對(duì)于sq中的每個(gè)元素ei,計(jì)算出h1(ei),h2(ei),···,hm(ei),即ei的m個(gè)可能存儲(chǔ)的位置,其中,0≤i<|sq|;
第三步,建立一個(gè)從sq到q的二部圖bigraph,利用匈牙利算法,為sq中的每一個(gè)元素找到在q中的一個(gè)唯一的位置;
第四步,對(duì)于q中的每個(gè)單元qi,如果
進(jìn)一步,所述d的構(gòu)建方法如下:
第一步,把d中的每個(gè)單元di都初始化為0;
第二步,對(duì)于sd中的每個(gè)元素ei,計(jì)算出h1(ei),h2(ei),···,hm(ei),其中,0≤i<|sq|;
第三步,對(duì)于d中的每個(gè)單元di,如果
進(jìn)一步,采用安全索引構(gòu)建方法,構(gòu)建出索引樹(shù),具體包括:
第一步,對(duì)于待劃分的區(qū)域r,用前面介紹的2-d空間劃分方法劃分,r被按t維劃分為r1和r2,t為x或者y,r1和r2在t維上的范圍為r1:
第二步,對(duì)r1和r2分別繼續(xù)執(zhí)行第一步。
進(jìn)一步,給定一個(gè)查詢(xún)q={qx,qy},生成對(duì)應(yīng)的陷門(mén),具體包括:
第一步,把qx和qy轉(zhuǎn)為為兩個(gè)前綴集合f(qx)和f(qy);
第二步,把f(qx)中的每一個(gè)前綴和x維的標(biāo)簽連接起來(lái),把f(qy)中的每一個(gè)前綴和y維的標(biāo)簽連接起來(lái),運(yùn)用前面提出的single-homing布魯姆過(guò)濾器的構(gòu)建方法,創(chuàng)建出布魯姆過(guò)濾器
進(jìn)一步,給定一個(gè)q,客戶(hù)端利用陷門(mén)生成方法生成對(duì)應(yīng)的陷門(mén)
輸入:索引樹(shù)i,陷門(mén)
輸出:q的最近鄰。
進(jìn)一步包括:
(1)首先計(jì)算
(2)如果i是葉子節(jié)點(diǎn),輸出i.left->data,否則,把i.left作為索引,執(zhí)行(1);
(3)如果i是葉子節(jié)點(diǎn),輸出i.right->data,否則,把i.right作為索引,執(zhí)行(1)。
本發(fā)明的優(yōu)點(diǎn)及積極效果為:為了保證數(shù)據(jù)的安全性,將2-d安全最近鄰查詢(xún)問(wèn)題轉(zhuǎn)為判斷點(diǎn)是否在某個(gè)范圍內(nèi)的問(wèn)題,進(jìn)而轉(zhuǎn)化為了兩個(gè)集合是否相交的問(wèn)題。本發(fā)明基于voronoi圖的2-d空間劃分方案、單窩布魯姆過(guò)濾器和多窩布魯姆過(guò)濾器兩種數(shù)據(jù)結(jié)構(gòu),保證服務(wù)器在不知道數(shù)據(jù)真實(shí)值和查詢(xún)的真實(shí)值的情況下進(jìn)行最近鄰查詢(xún),滿(mǎn)足了ind-cpa安全要求,并且達(dá)到亞線性級(jí)查詢(xún)時(shí)間(在1000萬(wàn)條數(shù)據(jù)的情況下查詢(xún)時(shí)間小于1毫秒),現(xiàn)有的方法無(wú)法滿(mǎn)足ind-cpa安全級(jí)別,同時(shí)需要較長(zhǎng)的查詢(xún)時(shí)間(如一種現(xiàn)有的基于非對(duì)稱(chēng)加密的技術(shù),對(duì)于一個(gè)僅有1萬(wàn)條數(shù)據(jù)記錄的數(shù)據(jù)集,查詢(xún)時(shí)間就需要幾個(gè)小時(shí))。
附圖說(shuō)明
圖1是本發(fā)明實(shí)施例提供的云計(jì)算中安全最近鄰檢索方法流程圖。
圖2是本發(fā)明實(shí)施例提供的云計(jì)算中安全最近鄰檢索方法具體應(yīng)用示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
下面結(jié)合附圖對(duì)本發(fā)明的應(yīng)用原理作詳細(xì)的描述。
如圖1所示,本發(fā)明實(shí)施例提供的云計(jì)算中安全最近鄰檢索方法包括以下步驟:
s101:采用voronoi圖對(duì)2-d空間劃分;
s102:采用兩個(gè)數(shù)組構(gòu)建單窩(single-homing)布魯姆過(guò)濾器和多窩(multi-homingzh)布魯姆過(guò)濾器兩種安全數(shù)據(jù)結(jié)構(gòu);
s103:構(gòu)建出一顆索引樹(shù),保證實(shí)現(xiàn)亞線性級(jí)的查詢(xún)時(shí)間;
s104:采用安全最近鄰查詢(xún)算法,客戶(hù)端利用陷門(mén)生成方法生成對(duì)應(yīng)的陷門(mén),發(fā)送給服務(wù)器,服務(wù)器通過(guò)計(jì)算返回給客戶(hù)端加密的最近鄰點(diǎn)。
本發(fā)明實(shí)施例提供的云計(jì)算中安全最近鄰檢索方法具體包括以下步驟:
(1)首先提出了基于voronoi圖的2-d空間劃分方案:
記2-d空間數(shù)據(jù)集s={d1,d2,···,dn},2-d空間為ω;
第一步,根據(jù)已有數(shù)據(jù)集s,構(gòu)建出voronoi圖v,v由n個(gè)不相交的凸多邊形構(gòu)成,記為{p1,p2,···,pn};
第二步,設(shè)待劃分的區(qū)域?yàn)閞,r的初始值為ω,隨機(jī)選取x維或者y維,把r劃分為兩個(gè)矩形r1和r2,保證max(p(r1∩ω),p(r2∩ω))最小,其中p(ri∩ω)表示ω中被ri覆蓋的凸多邊形的個(gè)數(shù)(i=1或i=2);
第三步,遞歸執(zhí)行第二步,對(duì)于每個(gè)矩形r,如果和劃分后的矩形r1,r2滿(mǎn)足以下條件:max(p(r1∩ω),p(r2∩ω))=p(r),則終止劃分,其中p(r)表示ω中被r覆蓋的凸多邊形的個(gè)數(shù)。
(2)其次,提出單窩(single-homing)布魯姆過(guò)濾器和多窩(multi-homingzh)布魯姆過(guò)濾器兩種安全數(shù)據(jù)結(jié)構(gòu)。本發(fā)明用q和d表示兩個(gè)數(shù)組,長(zhǎng)度都為nc,q用來(lái)構(gòu)建single-homing布魯姆過(guò)濾器,d用來(lái)構(gòu)建multi-homing布魯姆過(guò)濾器,sq表示待存入q中的元素集合,sd表示待存入d中的元素集合;本發(fā)明設(shè)置nc≥1.2×|sq|.用h1,h2,···,hm表示m個(gè)hash函數(shù)(m≥2),對(duì)于一個(gè)輸入的元素,每個(gè)hash函數(shù)都輸出[0,nc-1]中的一個(gè)位置id,用h1,h2,···,hk表示另外k個(gè)不同的hash函數(shù),對(duì)于一個(gè)輸入的元素,輸出[0,w-1]中的一個(gè)位置id,其中w表示一個(gè)整數(shù)的位數(shù)。
q的構(gòu)建方法如下:
第一步:把q中的每個(gè)單元qi都初始化為0;
第二步,對(duì)于sq中的每個(gè)元素ei,計(jì)算出h1(ei),h2(ei),···,hm(ei),即ei的m個(gè)可能存儲(chǔ)的位置,其中,0≤i<|sq|;
第三步,建立一個(gè)從sq到q的二部圖bigraph,利用匈牙利算法,為sq中的每一個(gè)元素找到在q中的一個(gè)唯一的位置;
第四步,為了做到不可區(qū)分性,對(duì)于q中的每個(gè)單元qi,如果
d的構(gòu)建方法如下:
第一步:把d中的每個(gè)單元di都初始化為0;
第二步,對(duì)于sd中的每個(gè)元素ei,計(jì)算出h1(ei),h2(ei),···,hm(ei),其中,0≤i<|sq|;
第三步,對(duì)于d中的每個(gè)單元di,如果
(3)再次,提出安全索引構(gòu)建方法,構(gòu)建出一顆索引樹(shù),用來(lái)保證本發(fā)明實(shí)現(xiàn)亞線性級(jí)的查詢(xún)時(shí)間。
第一步,對(duì)于待劃分的區(qū)域r,用前面介紹的2-d空間劃分方法劃分,r被按t維劃分為r1和r2(t為x或者y),r1和r2在t維上的范圍為r1:
第二步,對(duì)r1和r2分別繼續(xù)執(zhí)行第一步。
然后,提出了陷門(mén)生成方法,給定一個(gè)查詢(xún)q={qx,qy},生成對(duì)應(yīng)的陷門(mén)。
第一步,把qx和qy轉(zhuǎn)為為兩個(gè)前綴集合f(qx)和f(qy);
第二步,把f(qx)中的每一個(gè)前綴和x維的標(biāo)簽連接起來(lái),把f(qy)中的每一個(gè)前綴和y維的標(biāo)簽連接起來(lái),然后運(yùn)用前面提出的single-homing布魯姆過(guò)濾器的構(gòu)建方法,創(chuàng)建出一個(gè)single-homing布魯姆過(guò)濾器
(4)最后,提出了安全最近鄰查詢(xún)查詢(xún)算法。給定一個(gè)q,客戶(hù)端利用陷門(mén)生成方法生成對(duì)應(yīng)的陷門(mén)
輸入:索引樹(shù)i,陷門(mén)
輸出:q的最近鄰;
step1:首先計(jì)算
step2:如果i是葉子節(jié)點(diǎn),輸出i.left->data,否則,把i.left作為索引,執(zhí)行step1;
step3:如果i是葉子節(jié)點(diǎn),輸出i.right->data,否則,把i.right作為索引,執(zhí)行step1。
下面結(jié)合具體實(shí)施例對(duì)本發(fā)明的應(yīng)用原理作進(jìn)一步的描述。
如圖2所示:
(1)數(shù)據(jù)擁有者將數(shù)據(jù)集按照所提出的安全索引構(gòu)建方案生成加密的索引;
(2)數(shù)據(jù)擁有者將加密的索引發(fā)送給云服務(wù)器,并將秘鑰發(fā)送給授權(quán)用戶(hù);
(3)用戶(hù)利用提出的陷門(mén)生成方法,生成查詢(xún)條件對(duì)應(yīng)的陷門(mén),向云服務(wù)器發(fā)起最近鄰查詢(xún)請(qǐng)求;
(4)云服務(wù)器收到用戶(hù)的請(qǐng)求后,運(yùn)行提出的安全最近鄰查詢(xún)算法,將查詢(xún)后加密的結(jié)果返回給用戶(hù);
(5)用戶(hù)將加密的查詢(xún)結(jié)果解密,得到明文下的結(jié)果。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。