本發(fā)明涉及一種面向加密圖的帶約束近似最短距離查詢方法,屬于云計算安全領(lǐng)域。
背景技術(shù):
:近年來,基于圖結(jié)構(gòu)的應(yīng)用蓬勃發(fā)展,如在線社交網(wǎng)絡(luò)圖、城市道路交通圖、web圖、生物網(wǎng)絡(luò)圖以及通信網(wǎng)絡(luò)圖。因此,在工業(yè)界和學(xué)術(shù)界產(chǎn)生了諸多管理、查詢、分析圖數(shù)據(jù)的系統(tǒng)。同時,隨著云計算的發(fā)展,圖數(shù)據(jù)持有者期望將圖數(shù)據(jù)外包到云端,以節(jié)約本地的存儲和計算成本。然而,由于云服務(wù)器不可信,這帶來了嚴(yán)重的隱私問題,因為云端服務(wù)器能夠竊取用戶的圖數(shù)據(jù)敏感信息。為了克服這種隱私泄露問題,一種直觀的解決方案是首先將圖數(shù)據(jù)進行加密,然后再將其外包到云端服務(wù)器。然而不幸的是,加密操作使得圖數(shù)據(jù)的有效利用成為了一個棘手的難題,因為在加密數(shù)據(jù)上很難執(zhí)行在明文圖上的一些查詢操作。最短距離查詢作為一種最基本的圖查詢操作,它在給定源點和目的地點時,在圖上尋找兩點之間的最短距離。目前,已經(jīng)有不少有價值的工作能夠支持在圖上執(zhí)行隱私保護的最短距離查詢操作。這些方法通常采用了一種新穎的被稱為距離預(yù)言機的數(shù)據(jù)結(jié)構(gòu)來回答任意兩個圖頂點的查詢。然而,在實際應(yīng)用中,用戶通常在進行最短距離查詢時需要考慮其他額外的約束。例如,在城市交通道路上,用戶期望知道在交通費不超過一定限額時,從當(dāng)前位置到目的地點的最短交通時間(或最短交通距離)。這種問題可以被歸類到帶約束的最短距離查詢問題。在帶約束最短距離查詢方面已經(jīng)都大量的研究工作,不過這些工作全部關(guān)注于非加密圖上的查詢。這些方法在執(zhí)行帶約束最短距離查詢時涉及到諸多復(fù)雜操作,倘若這些操作不經(jīng)過特殊的設(shè)計,則無法應(yīng)用到加密圖上。此外,針對已存在的加密圖上的最短距離查詢方案,由于其不能在云服務(wù)器端執(zhí)行代價約束過濾操作,因此也不能夠應(yīng)用到帶約束最短距離查詢的語境中。技術(shù)實現(xiàn)要素:為了實現(xiàn)加密圖上的帶約束最短距離查詢,本發(fā)明充分利用了對稱密碼學(xué)技術(shù),在很好的保證了查詢的高效性的同時完整的給出了在加密圖上進行帶約束最短距離查詢的方法。本發(fā)明關(guān)注的圖為有向圖,具有一個頂點集和邊集。每一條邊具有兩個權(quán)重,為了后續(xù)描述方便,現(xiàn)考慮一個權(quán)重為距離,另外一個權(quán)重為代價,也即約束條件。帶約束最短距離查詢就是尋找兩點之間,滿足代價約束的最短距離。本發(fā)明關(guān)聯(lián)的系統(tǒng)模型涉及兩個實體對象:用戶和云服務(wù)器。本發(fā)明的核心工作流程如下:步驟1:用戶端建立安全的圖索引。步驟1.1預(yù)先通過已有的方法對輸入圖建立非加密兩跳覆蓋標(biāo)簽索引。非加密的圖索引包含兩部分,一部分是out_label標(biāo)簽集,一部分是in_label標(biāo)簽集。對于每一個頂點u,都關(guān)聯(lián)一個out_label標(biāo)簽集合和一個in_label標(biāo)簽集合。out_label標(biāo)簽集合中的元素(頂點υ,距離d,代價c)對象表示從頂點u到頂點υ的距離為d,代價為c。in_label標(biāo)簽集合中的元素(頂點υ,距離d,代價c)對象表示從頂點υ到頂點u的距離為d,代價為c。步驟1.2給定安全參數(shù),隨機生成兩個二進制比特串作為安全的加密密鑰k1和k2。步驟1.3由加密密鑰k1和k2生成用來加密圖上距離權(quán)重的密鑰kd和加密圖上代價的密鑰kc。密鑰kd和kc的生成采用密碼學(xué)上帶密鑰的偽隨機函數(shù)。其中,kd是通過以k2為密鑰,以k1拼接數(shù)字1作為輸入來生成;kc是通過以k2為密鑰,以k1拼接數(shù)字2作為輸入來生成。步驟1.4初始化兩個字典iout和iin。其中,iout與out_label標(biāo)簽集對應(yīng),用來存儲加密out_label標(biāo)簽集索引的結(jié)果;iin與in_label標(biāo)簽集對應(yīng),用來存儲加密in_label標(biāo)簽集索引的結(jié)果。步驟1.5針對輸入圖中的每一個頂點u,初始化一個計數(shù)器ω為0,并且初始化用來加密頂點u對應(yīng)的out_label標(biāo)簽集和in_label標(biāo)簽集索引對象的子密鑰sout,u、tout,u、sin,u、tin,u。初始化子密鑰過程通過密碼學(xué)上的偽隨機函數(shù)來實現(xiàn),其中,子密鑰sout,u是以k2為密鑰,頂點u拼接數(shù)字1為輸入來生成;子密鑰tout,u是以k2為密鑰,頂點u拼接數(shù)字2為輸入來生成;子密鑰sin,u是以k2為密鑰,頂點u拼接數(shù)字3為輸入來生成;子密鑰tin,u是以k2為密鑰,頂點u拼接數(shù)字4為輸入來生成;針對頂點u,執(zhí)行步驟1.6、1.7和1.8。步驟1.6構(gòu)建加密頂點u對應(yīng)的out_label標(biāo)簽集索引。針對out_label標(biāo)簽集索引中的每一個對象(頂點υ,距離d,代價c),執(zhí)行下列子步驟:步驟1.6.1使用密碼學(xué)上的帶密鑰偽隨機函數(shù)加密頂點υ,得到的輸出結(jié)果作為加密后的頂點描述符v。加密過程使用密鑰k2,且以頂點υ拼接數(shù)字0作為輸入。步驟1.6.2計算加密距離和代價。針對距離d,首先通過對稱密碼學(xué)算法加密,如使用aes,加密過程使用k1作為密鑰,得到加密結(jié)果然后用保序加密算法加密距離,以kd為密鑰,得到加密結(jié)果針對代價c,使用保序加密算法加密,以kc為密鑰,得到加密結(jié)果cu,v。步驟1.6.3將子步驟1.6.1和1.6.2中得到的加密的頂點描述符v,加密的距離加密的距離以及加密的代價cu,v進行拼接,得到結(jié)果這里的符號“||”表示數(shù)據(jù)拼接。將該結(jié)果與對應(yīng)的密文掩碼進行異或操作。密文掩碼利用偽隨機函數(shù)來生成,其中sout,u為輸入密鑰,計數(shù)器ω的值為輸入。最后,將異或操作得到的結(jié)果存儲到字典iout中。其中,存儲的位置是通過利用密碼學(xué)上的偽隨機函數(shù)計算得到。這里,以tout,u為輸入密鑰,以計數(shù)器ω的值為輸入。步驟1.7加密頂點u對應(yīng)的in_label標(biāo)簽集索引。針對in_label標(biāo)簽集索引中的每一個對象(頂點υ,距離d,代價c),執(zhí)行下列子步驟:步驟1.7.1使用密碼學(xué)上的帶密鑰偽隨機函數(shù)加密頂點υ,得到的輸出結(jié)果作為加密后的頂點描述符v。加密過程使用密鑰k2,且以頂點υ拼接數(shù)字0作為輸入。步驟1.7.2計算加密距離和代價。針對距離d,首先通過對稱密碼學(xué)算法加密,如使用aes,加密過程使用k1作為密鑰,得到加密結(jié)果然后用保序加密算法加密距離,以kd為密鑰,得到加密結(jié)果針對代價c,使用保序加密算法加密,以kc為密鑰,得到加密結(jié)果cu,v。步驟1.7.3將子步驟1.7.1和1.7.2中得到的加密的頂點描述符v,加密的距離加密的距離以及加密的代價cuv進行拼接,得到結(jié)果這里的符號“||”表示數(shù)據(jù)拼接。將該結(jié)果與對應(yīng)的密文掩碼進行異或操作。密文掩碼利用偽隨機函數(shù)來生成,其中sin,u為輸入密鑰,計數(shù)器ω的值為輸入。最后,將異或操作得到的結(jié)果存儲到字典iin中。其中,存儲的位置是通過利用密碼學(xué)上的偽隨機函數(shù)計算得到。這里,以tin,u為輸入密鑰,以計數(shù)器ω的值為輸入。步驟1.8將計數(shù)器ω的值增加1。步驟1.9輸出字典iout和iin作為安全的加密圖索引。針對原始輸入圖,采用任意的加密算法進行加密,如aes算法。步驟2:將加密的圖索引和加密的圖外包到云服務(wù)器端。步驟3:生成用戶查詢令牌。用戶的查詢包括起始點,目標(biāo)點,代價約束值,期待服務(wù)器返回結(jié)果數(shù)量。對每一個這樣的用戶查詢,通過下列子步驟生成安全的查詢令牌:步驟3.1利用密碼學(xué)上的偽隨機函數(shù)生成查詢子密鑰sout,s、tout,s、sin,t、tin,t、kc。其中,子密鑰sout,s的生成以k2為密鑰,以起始點拼接數(shù)字1為輸入。其中,子密鑰tout,s的生成以k2為密鑰,以起始點拼接數(shù)字2為輸入。其中,子密鑰sin,t的生成以k2為密鑰,以目標(biāo)點拼接數(shù)字3為輸入。其中,子密鑰tin,t的生成以k2為密鑰,以目標(biāo)點拼接數(shù)字4為輸入。其中,子密鑰kc的生成以k2為密鑰,以密鑰k1拼接數(shù)字2為輸入。步驟3.2構(gòu)建代價約束樹對于給定的查詢代價約束值θ,使用密鑰kc構(gòu)建具有指定深度的代價約束樹tθ。代價約束樹中的節(jié)點分別是θ/2,θ/4,3θ/4等一系列有規(guī)則值的加密密文。該樹中每一個節(jié)點(圓圈表示的節(jié)點)的值為保序加密算法密文,該過程用密鑰kc進行加密。步驟3.3假設(shè)設(shè)置返回結(jié)果數(shù)量為r,那么輸出結(jié)果(sout,s,tout,s,sin,t,tin,t,tθ,r)作為用戶的查詢令牌。步驟4:云服務(wù)器端利用查詢算法回答用戶查詢。步驟4.1獲得查詢起始點對應(yīng)的索引元素集合。初始化一個集合ls,用于存儲起始點對應(yīng)的索引元素。初始化一個計數(shù)器ω的值為0。步驟4.2根據(jù)步驟1.6.3相同的密碼學(xué)上的偽隨機函數(shù),以用戶查詢令牌中的tout,s為密鑰,計數(shù)器ω的值為輸入,得到輸出,以該輸出的值為位置索引,在字典iout中判斷是否存在對應(yīng)的值。如果不存在,跳轉(zhuǎn)至步驟4.4。否則,執(zhí)行步驟4.3:步驟4.3根據(jù)步驟1.6.3相同的密碼學(xué)上的偽隨機函數(shù),以用戶查詢令牌中的sout,s為密鑰,計數(shù)器ω的值為輸入,得到起始點對應(yīng)的密文掩碼。然后使用該掩碼與上述字典中對應(yīng)的值進行異或操作,得到最初的加密密文,也即這里的符號“||”表示數(shù)據(jù)拼接。將該結(jié)果加入到集合ls中。更新計數(shù)器ω,使其值增加1。轉(zhuǎn)向執(zhí)行步驟4.2。步驟4.4獲得查詢目標(biāo)點對應(yīng)的索引元素集合。初始化一個集合lt,用于存儲起始點對應(yīng)的索引元素。初始化一個計數(shù)器ω的值為0。步驟4.5使用同步驟1.7.3相同的密碼學(xué)上的偽隨機函數(shù),以用戶查詢令牌中的tin,t為密鑰,計數(shù)器ω的值為輸入,得到輸出,以該輸出的值為位置索引,在字典iin中判斷是否存在對應(yīng)的值。如果不存在,跳轉(zhuǎn)至步驟4.7。否則,執(zhí)步驟4.6:步驟4.6根據(jù)步驟1.7.3相同的密碼學(xué)上的偽隨機函數(shù),以用戶查詢令牌中的sin,t為密鑰,計數(shù)器ω的值為輸入,得到起始點對應(yīng)的密文掩碼。然后使用該掩碼與上述字典中對應(yīng)的值進行異或操作,得到最初的加密密文,也即這里的符號“||”表示數(shù)據(jù)拼接。將該結(jié)果加入到集合lt中。更新計數(shù)器ω,使其值增加1。轉(zhuǎn)向執(zhí)行步驟4.5。步驟4.7初始化一個集合y。對每一個既在ls又在lt中的加密的頂點描述符v,云服務(wù)器利用代價約束樹tθ來執(zhí)行代價約束過濾操作。對于滿足代價約束條件的元素,添加到集合y中,對于無法確定是否滿足代價約束的元素,也添加到集合y中?;诩用艿拇鷥r值判斷其是否滿足代價約束的過程如下述子步驟,考慮兩個保序加密的代價密文cs,v和cv,t,分別基于代價約束樹進行類似二叉搜索的操作:步驟4.7.1初始化一個計數(shù)器ω的值為1以及兩個空二進制串cx和cy。步驟4.7.2如果計數(shù)器ω的值超過代價約束樹tθ的深度,或者已能夠確定cs,v+cv,t與代價約束值的大小關(guān)系,則轉(zhuǎn)步驟4.7.1進而迭代判斷下一個代價對,否則轉(zhuǎn)步驟4.7.3。步驟4.7.3針對cs,v,訪問代價約束樹tθ的第ω層,如果cs,v大于當(dāng)前節(jié)點值,則對cx拼接“1”,轉(zhuǎn)向當(dāng)前節(jié)點的右子樹。否則,則對cx拼接“0”,轉(zhuǎn)向當(dāng)前節(jié)點的左子樹。步驟4.7.4針對cv,t,訪問代價約束樹tθ的第ω層,如果cv,t大于當(dāng)前節(jié)點值,則對cy拼接“1”,轉(zhuǎn)向當(dāng)前節(jié)點的右子樹。否則,則對cy拼接“0”,轉(zhuǎn)向當(dāng)前節(jié)點的左子樹。步驟4.7.5如果cx和cy的和大于等于2w,則丟棄掉該代價對,并轉(zhuǎn)向步驟4.7.1,判斷下一個代價對。否則,執(zhí)行步驟4.7.6。步驟4.7.6如果cx和cy的和小于等于2w-2,則將該代價對加入到集合y。并轉(zhuǎn)向步驟4.7.1,判斷下一個代價對。否則,執(zhí)行步驟4.7.7。步驟4.7.7將計數(shù)器ω的值增加1。轉(zhuǎn)向步驟4.7.2。步驟4.8初始化一個集合w。對每一個在集合y中的元素對象,云服務(wù)器執(zhí)行距離過濾操作,將那些具有更小距離的元素加入到集合w中,對于那些無法判斷的元素,也添加到集合w中。距離過濾操作基于下述數(shù)學(xué)規(guī)則:假設(shè)對應(yīng)距離對(a,b)和(c,d),如果a≥c且b≥d,那么a+b≥c+d;如果a≥d且b≥c,那么a+b≥c+d。步驟4.9云服務(wù)器端隨機從集合w中挑選用戶查詢令牌指定的r個結(jié)果返回給用戶。步驟5:用戶解密獲得滿足代價約束的最短距離。用戶利用密鑰kd解密每一個云服務(wù)器返回的距離對得到解密后的結(jié)果(ds,v,dv,t),然后選取最小的ds,v+dv,t作為最終的查詢結(jié)果。其中,子密鑰kd是利用密碼學(xué)上的偽隨機函數(shù),以k2為密鑰,以密鑰k1拼接數(shù)字1位輸入得到的輸出結(jié)果。有益效果本發(fā)明充分利用了對稱密碼學(xué)技術(shù),鑒于對稱密碼學(xué)技術(shù)固有的高效屬性,使得本發(fā)明提出的加密圖上的帶約束最短距離查詢方案在有效地保護圖隱私的情況下,仍然具有極高的查詢效率。本發(fā)明提出的加密圖上的帶約束近似最短距離查詢方法,能夠應(yīng)用于云環(huán)境下,在保證圖數(shù)據(jù)隱私的同時,保留圖查詢操作的功能。附圖說明圖1.系統(tǒng)模型圖;圖2.代價約束樹圖;圖3.輸入示例有向圖;圖4δout加密結(jié)果;圖5δin加密結(jié)果;具體實施過程本發(fā)明的具體系統(tǒng)模型如圖1所示。本發(fā)明查詢過程中涉及的代價約束樹如圖2所示。本發(fā)明能夠?qū)崿F(xiàn)安全的圖數(shù)據(jù)外包功能,能夠基于加密的圖數(shù)據(jù)實現(xiàn)帶約束近似最短距離查詢功能。根據(jù)步驟1,用戶端建立安全的圖索引:假設(shè)用戶具有如圖3描述的輸入有向圖g,圖g具有5個頂點,分別是a、b、c、d、e。每條邊上標(biāo)注有對應(yīng)的距離d和代價c。例如頂點a和頂點b之間的邊上的權(quán)重d=2和c=3分別表示從頂點a和到頂點b的距離是2,代價是3。然后,如步驟1.1所述,利用已有的方法對輸入圖處理,獲得對應(yīng)的非加密兩跳覆蓋標(biāo)簽索引,具體索引結(jié)構(gòu)如下表1和表2所示。表中每一行δout(u)中的元素(v,d,c)表示從頂點u到頂點v的距離為d,代價為c;表中每一行δin(u)中的元素(v,d,c)表示從頂點v到頂點u的距離為d,代價為c;表1示例圖g對應(yīng)的兩跳覆蓋標(biāo)簽索引δoutδout(a)(a,0,0)(b,5,3)(e,5,1)(e,3,7)δout(b)(b,0,0)δout(c)(c,0,0)δout(d)(d,0,0)(d,1,4)δout(e)(e,0,0)表2示例圖g對應(yīng)的兩跳覆蓋標(biāo)簽索引δinδin(a)(a,0,0)δin(b)(b,0,0)(e,2,1)δin(c)(b,1,1)(c,0,0)(e,2,6)(e,3,2)δin(d)(a,2,3)(d,0,0)δin(e)(e,0,0)然后如步驟1.2至1.9所述,對非加密兩跳覆蓋標(biāo)簽索引δout和δin進行加密。這里簡單地選取128比特的字符串“01234567891234560123456789123456”作為密鑰k1,選取“0123456789abcdef0123456789abcdef”作為密鑰k2。然后,利用步驟1.3描述的過程,生成加密圖上距離權(quán)重的密鑰kd和加密圖上代價的密鑰kc。計算方式如下:kd=h(k2,k1||1)kc=h(k2,k1||2)其中,h表示密碼學(xué)上的偽隨機函數(shù)。最終得到的輸出結(jié)果kd為“d1e0133758e8930124b4f286e9e94d02”,kc為“e5b0d3998bd1428ebaae0e10748c4ede”。接下來,對表1和表2所示的非加密兩跳覆蓋標(biāo)簽索引進行加密。針對每一個頂點,依照步驟1.6到步驟1.8加密其對應(yīng)的out_label標(biāo)簽集和in_label標(biāo)簽集。加密結(jié)果如下圖4和圖5所示?,F(xiàn)在,假設(shè)用戶查詢輸入圖上頂點a到頂點c的最短距離,且需滿足代價不超過4。假設(shè)密碼學(xué)上的偽隨機函數(shù)為f(),也就是說,明文m對應(yīng)的加密輸出為f(m),假設(shè)保序加密算法為e(),也就是說,明文m對應(yīng)的保序加密密文為e(m)。為了表示簡便,這里的f(m)和e(m)均省略密鑰的輸入。那么,依據(jù)步驟4.1至4.6,最終得到的起始點a對應(yīng)的索引元素集合ls和目標(biāo)點c點對應(yīng)的索引元素集合lt分別為:ls={(f(a),e(0),e(0)),(f(b),e(5),e(3)),(f(e),e(5),e(1)),(f(e),e(3),e(7))}lt={(f(b),e(1),e(1)),(f(c),e(0),e(0)),(f(e),e(3),e(2))}依據(jù)步驟4.7,初始化一個集合y,對每一個既在ls又在lt中的加密的頂點描述符v,云服務(wù)器利用代價約束樹tθ來執(zhí)行代價約束過濾操作。代價約束樹tθ如圖2所示。對于滿足代價約束條件的元素,添加到集合y中,對于無法確定是否滿足代價約束的元素,也添加到集合y中。具體操作過程如下,這里加上從用戶端接受到的代價約束樹包含一個節(jié)點,即e(2):第一,觀察集合ls和lt,發(fā)現(xiàn)共同出現(xiàn)的加密頂點描述符的值是f(b)和f(e)。第二,針對f(b),在ls中對應(yīng)的元素是(f(b),e(5),e(3)),在lt中對應(yīng)的元素是(f(b),e(1),e(1))。因為加密代價值e(3)≥e(2),e(1)≤e(2),因此無法判斷通過頂點b的這條路徑的代價是否滿足約束,則將其加入要集合y,此時,y={<(f(b),e(5)),(f(b),e(1))>}第三,針對f(e),在ls中對應(yīng)的元素是(f(e),e(5),e(1)),在lt中對應(yīng)的元素是(f(e),e(3),e(2))。因為加密代價值e(1)≤e(2),e(1)≤e(2),因此,能夠判斷通過頂點e的這條路徑的代碼滿足約束,則將其加入到集合y,此時,y={<(f(b),e(5)),(f(b),e(1))>,<(f(e),e(5)),(f(e),e(3))>}依照步驟4.8,初始化一個集合w。對每一個在集合y中的元素對象,云服務(wù)器執(zhí)行距離過濾操作,將那些具有更小距離的元素加入到集合w中,對于那些無法判斷的元素,也添加到集合w中。具體操作過程如下:對于y中的兩個元素,f(b)對應(yīng)的距離分別是e(5)和e(1),f(e)對應(yīng)的距離分別是e(5)和e(3)。因為e(5)≥e(5)且e(3)≥e(1),因此可以斷定f(e)對應(yīng)的路徑的距離要大于f(b)對應(yīng)的距離,故丟棄掉f(e)對應(yīng)的距離對,將f(b)對應(yīng)的距離對加入到集合w。由于集合w僅僅剩余一個元素,故將該元素返回給用戶。根據(jù)步驟5:用戶解密獲得滿足代價約束的最短距離。用戶一旦收到云服務(wù)器端返回的元素(f(b),e(5)),(f(b),e(1)),解密后得到((b,5),(b,1)),用戶計算5+1=6,將6作為本次查詢的最終結(jié)果。本發(fā)明解決了對圖數(shù)據(jù)加密后外包到云服務(wù)器端執(zhí)行帶約束最短距離查詢的困難,能夠安全地在云服務(wù)器端實現(xiàn)帶約束最短距離查詢功能。當(dāng)前第1頁12