一種云存儲中支持多用戶的可搜索加密方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及云計(jì)算和應(yīng)用密碼學(xué)的交叉技術(shù)領(lǐng)域,具體是一種云存儲中支持多用 戶的可搜索加密方法。
【背景技術(shù)】
[0002] 隨著云計(jì)算的發(fā)展,越來越多的公司將數(shù)據(jù)存儲在云端,這樣不僅為用戶節(jié)省存 儲成本,而且云端服務(wù)器可以為用戶提供計(jì)算服務(wù),但是同時也帶來了一些問題:用戶存儲 在云端的數(shù)據(jù)得不到安全保障,充滿好奇心的服務(wù)器擁有者可能會查看用戶的數(shù)據(jù),因此 在外包數(shù)據(jù)之前需要對其進(jìn)行加密處理,從而使數(shù)據(jù)發(fā)送者和其授權(quán)檢索者之外的其他人 即使獲得數(shù)據(jù)也無法獲知其內(nèi)容。
[0003] 然而,傳統(tǒng)的加密技術(shù)雖然可以保證數(shù)據(jù)的安全性和完整性,但是隨著大量的數(shù) 據(jù)被上傳到云端,用戶對數(shù)據(jù)的檢索效率又出現(xiàn)了新的問題。使用傳統(tǒng)的加密技術(shù),用戶需 要下載所有上傳在云端的數(shù)據(jù),然后對其解密,最后才能從中查找出用戶想要的數(shù)據(jù)。但是 這樣做效率太低,浪費(fèi)了大量的時間和帶寬,不能滿足實(shí)際需求,為了找到一種高效、可靠 的檢索技術(shù),提出了 "可搜索加密"這一概念。
[0004] 可搜索加密就是用戶可以直接對密文進(jìn)行檢索,接收到密文后再對其解密,從而 得到用戶想要的數(shù)據(jù),而不是下載所有密文,然后全部解密之后才能檢索自己需要的內(nèi)容, 這樣用戶可以節(jié)省大量的時間和計(jì)算工作量,實(shí)現(xiàn)了對云端數(shù)據(jù)的高效控制。
[0005] 可搜索加密技術(shù)分為對稱可搜索加密和非對稱可搜索加密,分別利用傳統(tǒng)密碼學(xué) 中的對稱加密和非對稱加密技術(shù),都是針對關(guān)鍵字進(jìn)行檢索,但非對稱可搜索加密由于計(jì) 算開銷較大、算法比較復(fù)雜、速率低等缺點(diǎn),不適合大型文件數(shù)據(jù)的加密和共享,因此涉及 大量的數(shù)據(jù)在云端存儲時,非對稱可搜索加密效率不高。
【發(fā)明內(nèi)容】
[0006] 為解決上述問題,本發(fā)明提出一種新型的云存儲中基于多用戶的可搜索加密方 法,實(shí)現(xiàn)使不同用戶對同一個文件的不同訪問權(quán)限,同時可以動態(tài)添加和刪除授權(quán)用戶,而 不需要在添加或刪除用戶時重新分配所有用戶的密鑰,最終解決傳統(tǒng)多用戶可搜索加密技 術(shù)中動態(tài)管理授權(quán)用戶和對文件的訪問控制的問題。
[0007] 為此,本發(fā)明采用的技術(shù)方案包括以下步驟:
[0008] 步驟一、系統(tǒng)初始化;數(shù)據(jù)擁有者初始化系統(tǒng)參數(shù),生成密鑰和偽隨機(jī)函數(shù),接下 來生成用戶表并將用戶表發(fā)送到云端服務(wù)器;
[0009] 步驟二、添加用戶;數(shù)據(jù)擁有者將新用戶的身份信息發(fā)送給云端服務(wù)器的用戶表, 并把密鑰和偽隨機(jī)函數(shù)發(fā)送給新用戶,用來生成陷門和解密文件;
[0010] 步驟三、文件加密;數(shù)據(jù)擁有者對關(guān)鍵字和文件進(jìn)行加密,并為文件的關(guān)鍵字創(chuàng)建 關(guān)鍵字索引鏈表,以關(guān)鍵字為表頭節(jié)點(diǎn),將包含該關(guān)鍵字的文件添加到關(guān)鍵字索引鏈表中, 然后為每個文件創(chuàng)建權(quán)限鏈表,將授權(quán)訪問文件的用戶加入對應(yīng)文件的權(quán)限鏈表以完成、 授權(quán),并將加密后的文件、關(guān)鍵字索引鏈表和權(quán)限鏈表一起上傳到云端服務(wù)器;
[0011] 步驟四、生成陷門,用戶使用密鑰和想要檢索的關(guān)鍵字生成該關(guān)鍵字的陷門,用來 匹配關(guān)鍵字;
[0012] 步驟五、文件檢索;用戶使用生成的關(guān)鍵字陷門向云端服務(wù)器發(fā)起檢索請求,服務(wù) 器首先查詢用戶表中有無該用戶,如果沒有則拒絕提供檢索;否則,根據(jù)上傳的陷門檢索關(guān) 鍵字索引,如果沒有匹配到對應(yīng)的關(guān)鍵字,返回FALSE ;否則繼續(xù)查詢關(guān)鍵字索引鏈表中第 一個文件的權(quán)限鏈表中有無該用戶,如果有該用戶,則將文件加入到檢索結(jié)果中,然后繼續(xù) 查詢關(guān)鍵字索引表中下一個文件,直到所有包含該關(guān)鍵字的文件均查詢完,最后將檢索結(jié) 果發(fā)送給用戶;
[0013] 步驟六、文件解密;用戶使用解密密鑰對接收到的密文進(jìn)行解密,得到明文;
[0014] 步驟七、刪除用戶;數(shù)據(jù)擁有者將用戶信息從用戶表中直接刪除。
[0015] 其中,步驟一中系統(tǒng)初始化具體過程為:
[0016] S11、數(shù)據(jù)擁有者生成密鑰K'和K"、偽隨機(jī)函數(shù)f和F、分組密碼E,并且根據(jù)關(guān) 鍵字個數(shù)生成偽隨機(jī)流S 1, S2,…,Sn,其中η為待加密關(guān)鍵字個數(shù);
[0017] S12、生成分組密碼Κ,用于加密文件;
[0018] S13、對于分組密碼Κ,利用IDEA算法生成解密密碼犮。
[0019] S14、生成用戶表,用于添加和刪除用戶,并將用戶表和偽隨機(jī)函數(shù)F-起發(fā)送到 云端服務(wù)器。
[0020] 步驟二中的添加用戶具體過程為:
[0021] S21、數(shù)據(jù)擁有者將新用戶Ui的唯一標(biāo)識id(Ui)發(fā)送給服務(wù)器,并將七添加進(jìn)用 戶表,其中i取從1開始的正整數(shù),表示新用戶個數(shù);
[0022] S22、數(shù)據(jù)擁有者將密鑰K'和K"、偽隨機(jī)函數(shù)f、分組密碼E和分組密碼廠發(fā)送給 用戶,其中分組密碼無用來解密文件,其余密鑰和偽隨機(jī)函數(shù)用來生成關(guān)鍵字陷門。
[0023] 步驟三中文件加密的過程具體為:
[0024] S31、數(shù)據(jù)擁有者使用分組密碼E和密鑰f逐個加密關(guān)鍵字Wx,生成密文 E (K',Wx),其中X取從1開始的正整數(shù)且不大于n,表示關(guān)鍵字的個數(shù)
[0025] S32、將 E (K',Wx)等分成 L,R ,兩部分;
[0026] S33、基于Lx生成二進(jìn)制字符串Sx| |F(KX,SX),此處Kx= f(K",WX),I I為符號串 連接;
[0027] S34、將E(K',WX)和Sx| |F(KX,Sx)進(jìn)行異或操作形成關(guān)鍵字Wx的密文Cx;
[0028] S35、生成關(guān)鍵字Wi和文件fj的索引結(jié)構(gòu),其中j為正整數(shù),表示要上傳至云端服 務(wù)器的文件個數(shù);
[0029] S36、使用分組密碼K,利用IDEA算法加密文件fj,生成密文EJfj);
[0030] S37、根據(jù)用戶+對文件L的訪問權(quán)限,生成文件的權(quán)限鏈表,其中id(Ui)表示用 戶七的標(biāo)識,id(f P表示文件fj的標(biāo)識;
[0031] S38、最后將關(guān)鍵字和文件的索引結(jié)構(gòu)、文件的權(quán)限鏈表和密文一同上傳云端服務(wù) 器。
[0032] 步驟四中生成陷門的具體過程為:
[0033] S41、用戶使用密鑰C和分組密碼E計(jì)算E (f,Wx),Wx為要檢索的關(guān)鍵字;
[0034] S42、使用密鑰K"和偽隨機(jī)函數(shù)f計(jì)算Q = f(K",LX),LXSS41中E(f,Wx)等 分成LjP R χ兩部分的左半部分;
[0035] S43、計(jì)算 Wx的陷門 Tw= (E(K,,WX),Q = f(K",LX))。
[0036] 步驟五中文件檢索的具體過程為:
[0037] S51、用戶Ui向云端服務(wù)器提交檢索請求,并將S43中生成的關(guān)鍵字陷門T w傳給服 務(wù)器,服務(wù)器收到請求后,先檢索用戶表,查看是否有id(Ui),如果有則繼續(xù)檢索關(guān)鍵字索 弓丨;否則拒絕檢索;
[0038] S52、服務(wù)器遍歷關(guān)鍵字索引表的所有關(guān)鍵字密文Cx,并計(jì)算Cx XOR E (f,Wx)= Sx| |T,同時判斷F(Q,Sx)是否等于T,如果相等則說明Cx就是關(guān)鍵字^的密文;否則,繼續(xù) 匹配下一個關(guān)鍵字密文,如果最后沒有匹配到相應(yīng)關(guān)鍵字,則說明沒有用戶想要檢索的關(guān) 鍵字,返回FALSE,其中,XOR表示異或操作;
[0039] S53、假設(shè)檢索關(guān)鍵字為W1,服務(wù)器根據(jù)關(guān)鍵字和文件的索引結(jié)構(gòu)首先找到鍵字W 1 的索引鏈表中第一個文件,先檢索的授權(quán)鏈表,判斷是否包含用戶u i,如果包含說明用戶 七有權(quán)限檢索文件f i,并將&加入到返回結(jié)果Result中,然后繼續(xù)查詢W ^勺索引鏈表中下 一個文件,即f3,直到所有包含W1的文件都檢索結(jié)束;
[0040] S54、最后將Result返回給用戶ui〇
[0041] 步驟六文件解密的具體過程為:用戶根據(jù)IDEA加密算法,使用密鑰皮解密密文 Ek (fj),得到明文 A (A (.//))。
[0042] 步驟七刪除用戶的具體過程為:數(shù)據(jù)擁有者向云端服務(wù)器發(fā)送命令刪除用戶Ui, 服務(wù)器檢索用戶表,并從表中將用戶Ui項(xiàng)直接刪除。
[0043] 本發(fā)明帶來的有益效果:1、實(shí)現(xiàn)了對密文的直接檢索,效率和安全性都得到了提 高。與傳統(tǒng)可搜索加密方法相比,由于用戶直接對關(guān)鍵字的密文進(jìn)行檢索,不會向服務(wù)器透 漏關(guān)鍵字信息,服務(wù)器除了 "陷門一一關(guān)鍵字密文"對之外不會知道任何有關(guān)文件的信息, 因此安全性得到了提高。并且比起傳統(tǒng)的加密方法,用戶不需要將所有的密文都下載下來, 然后全部解密再進(jìn)行檢索,因此大大節(jié)省了用戶的計(jì)算量和存儲空間。2、提高了文件檢索 效率。檢索文件關(guān)鍵字時只需要查詢關(guān)鍵字索引,如果有該關(guān)鍵字則繼續(xù)查詢關(guān)鍵字鏈表 中所包含的文件,而不需要檢索整個密文文件才能判斷是否包含所查關(guān)鍵字,因此效率有 很大提高。3、實(shí)現(xiàn)了對文件的訪問權(quán)限控制。使不同用戶對同一文件的訪問權(quán)限不同,因此 不同用戶對同一文件的檢索權(quán)限不同,這符合實(shí)際要求,如需授權(quán)用戶檢索某文件的權(quán)利, 只要將該用戶添加到對應(yīng)的文件權(quán)限鏈表中,相反將其從權(quán)限鏈表中刪除即能取消其訪問 權(quán)限,體現(xiàn)了靈活性和便利性。4、實(shí)現(xiàn)了對用戶的動態(tài)添加和刪除。不像傳統(tǒng)的多用戶可 搜索加密方法,當(dāng)有新用戶加入或者刪除用戶時,需要對所有用戶重新分配密鑰,而是直接 對用戶表做添加和刪除工作即可,被刪除的用戶將失去檢索文件的權(quán)利,效率大大提高。
【附圖說明】
[0044] 圖1為本發(fā)明流程圖;
[0045] 圖2為用戶表;
[0046] 圖3為關(guān)鍵字和文件的索引結(jié)構(gòu);
[0047] 圖4為文件的權(quán)限鏈表。
【具體實(shí)施方式】
[0048] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。
[0049] 步驟一、系統(tǒng)初始化階段
[0050] 數(shù)據(jù)擁有者初始化系統(tǒng)參數(shù),生成密鑰和偽隨機(jī)函數(shù)。
[0051] 具體過程如下:
[0052] S11、數(shù)據(jù)擁有者生成密鑰K'和K"、偽隨機(jī)函數(shù)f和F、分組密碼E,并且根據(jù)關(guān) 鍵字個數(shù)生成偽隨機(jī)流S 1, S2,…,Sn(η為待加密關(guān)鍵字個數(shù)),用于加密和解密關(guān)鍵字。
[0053] S12、生成分組密碼Κ,用于加密文件。
[0054] S13、使用S12中的分組密碼Κ,根據(jù)國際加密算法IDEA算法生成解密密碼Z。
[0055] S14、生成用戶表,如圖2所示,用于添加和刪除用戶,并將其和偽隨機(jī)函數(shù)F -起 發(fā)送到云端服務(wù)器。
[0056] 步驟二、用戶添加階段
[0057] 當(dāng)有新用戶Ui加入時,數(shù)據(jù)擁有者將其加入云端服務(wù)器的用戶表,如圖2所示,并 將密鑰和相應(yīng)的偽隨機(jī)函數(shù)發(fā)送給U i,用戶可以用來生成陷門和解密文件。
[0058] 具體過程如下:
[0059] S21、數(shù)據(jù)擁有者將新用戶Ui的唯一標(biāo)識id(u J (其中i取從1開始的正整數(shù)值, 代表新用戶的個數(shù))發(fā)送給服云端務(wù)器,并將其添加進(jìn)用戶表中。
[0060] S22、數(shù)據(jù)擁有者將密鑰K'和K"、偽隨機(jī)函數(shù)f、分組密碼E和分組密碼K發(fā)送給 Ui,其中分組密碼f用來解密文件,其余密鑰和偽隨機(jī)函數(shù)用來生成關(guān)鍵字陷門。
[0061] 步驟三、文件加密階段
[0062] 數(shù)