本發明涉及一種支持密文數據操作的關系型數據庫安全外包數據處理方法,屬云計算安全和數據庫安全領域。
背景技術:
::目前,將私有的關系型數據庫外包至云服務供應商,可以為商業團體以及個人用戶帶來巨大的便捷和收益,然而與此同時,外包數據庫的安全和隱私問題日益嚴峻。云計算用戶的敏感信息(例如金融交易記錄、個人醫療檔案等)正面臨著不同程度的濫用和泄露。公有云環境通常使用云端驅動的數據庫加密技術抵御外部攻擊者的惡意入侵,但是依然難以阻止不可信云服務供應商的內部攻擊。因此,為避免云端加密可能會帶來的隱私泄露的問題,云數據庫加密應完全由數據庫擁有者實施,從而真正地實現“加密后外包與查詢后解密”的服務模式。客戶端加密主要面臨兩項難題:其一,選用何種加密算法對關系型數據庫進行加密;其二,如何對加密后的密文關系型數據庫執行數據操作。相關的研究已經取得了一系列重要的成果,包括全同態加密技術、部分同態加密技術等。更多的工作則圍繞密文域等值查詢、范圍查詢、聚合查詢以及模糊查詢中的一種或者多種而展開,然而其所支持的數據操作種類十分有限。某些綜合的密文數據庫查詢方案能夠支持部分基于sql的查詢操作,但是存在以下四點不足:(1)不同類型的sql語句需調用不同的加密技術以完成解釋,導致數據庫服務性能降低;(2)云服務供應商無法直接執行sql語句,云服務模式難以徹底擺脫對可信代理的依賴;(3)云服務供應商執行數據操作前需獲知解密密鑰,尚未完全克服云端加密的安全風險;(4)終端用戶的數據庫訪問模式以及云數據庫的關系結構被迫發生變化。技術實現要素:針對現有技術中存在的問題,本發明的目的在于提供一種支持密文數據操作的關系型數據庫安全外包數據處理方法。這種方法保護了關系型數據庫在外包過程中的數據機密性及有效數據利用。所采用的客戶端加密技術從根本上解決了云端加密的安全問題。圖1是本發明的模塊設計與總體架構。本發明解決其技術問題所用的技術方案是:一種支持密文數據操作的關系型數據庫安全外包數據處理方法(包括查詢請求、插入請求、更新請求和刪除請求)。該方法作用于終端用戶、數據庫擁有者和云服務供應商三者之間。關系型數據庫在外包前由數據庫擁有者負責加密,然后由云服務供應商在外包密文數據庫上直接執行基于sql的全類型數據操作,返回的查詢結果則由數據庫擁有者代替終端用戶進行解密。具體地,本發明的方法流程為:1.數據庫擁有者將關系型數據庫安全外包至云服務供應商:(1)數據庫擁有者生成私有密鑰;(2)數據庫擁有者經密碼模塊對待外包數據庫進行加密后生成外包密文數據庫,并發送至云服務供應商;(3)云服務供應商接收并原地存儲該外包密文數據庫;(4)數據庫擁有者在云服務供應商處創建用戶自定義函數。2.終端用戶請求對關系型數據庫進行隱私保護的數據操作:(1)終端用戶登錄數據庫系統,并向數據庫擁有者提交明文sql語句;(2)數據庫擁有者依據訪問控制策略,判斷查詢請求是否已得到授權,如若非法訪問,則拒絕操作;(3)數據庫擁有者經轉換模塊將明文sql語句轉換為密文sql語句集合,發送至云服務供應商;(4)云服務供應商調用用戶自定義函數,在密文數據庫中執行密文sql語句,并將密文查詢結果返回至數據庫擁有者;(5)數據庫擁有者接收并解密查詢結果集,向終端用戶返回明文記錄。本發明的安全外包數據處理方法包括以下的五大模塊:(1)密碼模塊(opea算法),用于加密或解密外包數據庫。opea算法的加密函數具有保序性和可加性,能夠最大限度地保留數據的可操作性。將opea算法密文域劃分為多個按照先后順序排列的密文分區,圖2是該密碼模塊的映射結構,第i個密文分區的上下邊界被分別定義為ui和li。具體來看,圖中所采用的一對多的映射結構將單一的明文值映射為某個密文分區內的多個密文值,用于構造opea算法的加密函數,從而改善密碼模塊的安全性以抵御惟密文攻擊、統計攻擊以及弱選擇明文攻擊。(2)轉換模塊(sql-translator解釋器),用于轉換待請求的明文sql語句,同時確保經轉換后得到的密文sql語句可以在密文數據庫中正常執行。圖3是該轉換模塊的處理流程。(3)用戶自定義函數,部署在云服務供應商,主要用于云端的等值比較、聚合比較、和值計算和字符串分割等操作。(4)加密規則,整型數據直接使用opea算法進行加密;加密浮點型數據時,按明文空間的最小精度來劃分密文空間;字符型數據按終端用戶選定的最小匹配單元轉為整型后依次加密、填充并拼接。具體到外包關系型數據庫而言,明文空間就是數據庫中全部數據組成的有限集合。(5)訪問控制,選用不同的密鑰加密具有不同保密級別的數據表或數據字段;已取得合法訪問授權的終端用戶可以通過共享用戶口令登錄數據庫系統;數據庫擁有者依據目前已登錄用戶的數據訪問權限獲取相應的加解密密鑰。本發明的有益效果是:(1)本發明解決了客戶端加密的兩項主要難題,保障了外包關系型數據庫的數據機密性和有效利用。(2)本發明的總體架構適用于microsoftwindowsazuresqldatabase等未經修改的商業化云數據庫平臺。(3)本發明僅需單次加密數據庫,故存儲開銷更低,且數據訪問模式與云數據庫關系結構得以保留。(4)本發明密碼模塊的opea算法能夠抵御惟密文攻擊、統計攻擊以及弱選擇明文攻擊。其簡化邊界生成子算法、加密子算法和解密子算法的平均時間復雜度分別達到o(t),o(1)和o(logt),t是明文域的最大值,基本優于主流的對稱密碼算法。此外,opea算法的比較操作用時和網絡通信開銷忽略不計。密文域的噪聲增長問題可通過調整密鑰在常量級時間內得到有效控制。(5)本發明轉換模塊支持目前最多種類的sql數據操作,涵蓋等值查詢、范圍查詢、聚合查詢、模糊查詢、插入、更新、刪除等數據操作語句。sql-translator解釋器的轉換用時在微秒量級以內,并滿足任意類型和長度的數據轉換需求。(6)本發明直接執行密文查詢而無需解密外包數據,查詢結果準確,無誤判,無漏判。相同查詢精度下,客戶端后處理開銷較低,總體查詢效率較高。附圖說明圖1為系統總體架構圖。給出了本發明的模塊設計、數據流向和參與者的作用范圍。圖2為密碼模塊映射結構圖。給出了opea算法的分區、間隔的劃分方法以及明文域至密文域的映射關系。圖3為轉換模塊處理流程圖。給出了sql-translator解釋器的工作流程,包含核心轉換模塊和子轉換模塊。圖4為待外包數據庫示例;圖5為外包密文數據庫示例;圖6為密文查詢結果示例;圖7為解密后的明文查詢結果示例。具體實施方式下面結合附圖對本發明作進一步說明。圖1是系統總體架構圖,主要涉及密碼模塊、轉換模塊和用戶自定義函數三大核心服務模塊。具體方法包括下列步驟:1.圖2是密碼模塊映射結構圖。密碼模塊的實現方法包括:(1)設計并實現具有可加性的保序加密算法opea,離散密文域由順序密文分區構成,其加密函數e:x→y滿足下述兩個條件(x和y分別是opea的明文與密文空間;具體到外包數據庫應用,明文空間是指明文數據庫中全部數據組成的集合,密文空間是指密文數據庫中全部數據組成的集合):a)b∈x,a<b當且僅當e(a)<e(b);b)b,c∈x,若a+b<c,則有e(a)+e(b)<e(c)。該算法由三個子算法構成:a)邊界生成子算法boundarygen,輸入隨機的非負整數集合r={ri}以及隨機正整數σ>max1≤i≤t{ri}-r1作為密鑰,根據密鑰計算并輸出密文域的密文分區下邊界集l={li}={l[i]}(1≤i≤t)和上邊界集u={ui}={u[i]}(1≤i≤t)。其中,ri是隨機數集合中第i個元素,li和l[i]是第i個密文分區的下邊界,ui和u[i]則是第i個密文分區的上邊界。子算法首先設定首個密文分區[l1,u1],有l[1]=σ且u[1]=l[1]+r1,隨后迭代地劃定后續密文分區的上下邊界值,要求滿足l[t]=max1≤i<t{u[i]+u[t-i]}且u[t]=l[t]+rt(2≤t≤t)。這里t是明文域的最大值,即明文數據庫中全部數據的最大可能取值。b)加密子算法enc,輸入邊界集和正整數明文m,輸出集合{l[m],l[m]+1,…,u[m]}內的隨機整數作為密文c=e(m)。加密子算法在加密明文值m時,根據密文分區的邊界集l和u,加密函數e(·)將會從集合{l[m],l[m]+1,…,u[m]}中選擇并返回一個隨機數作為密文值c。c)解密子算法dec,輸入邊界集和密文c,借助折半查找算法輸出密文c所屬密文分區的編號作為明文值。(2)簡化opea算法的邊界生成子算法,令密鑰ri(1≤i≤t)以非降序排列,得到線性邊界函數:(3)擴展opea算法以判定密文關系e’(a)+e’(b)>e’(c),其中e’:x→y’是擴展算法的加密函數。a)擴展的邊界生成子算法boundarygen’,要求密鑰σ>3·max1≤i≤t{ri},根據密鑰計算并輸出密文分區的擴展上邊界集u’={u’[i]}(1≤i≤t)以及擴展下邊界集l’={l’[i]}(1≤i≤t)。擴展子算法劃定首個密文分區u’[1]=σ且l’[1]=u’[1]-r1,后續密文分區應滿足上邊界u’[t]=min1≤i<t{l’[i]+l’[t-i]}且下邊界l’[t]=u’[t]-rt(rt<u’[t]-u’[t-1],2≤t≤t),其線性邊界函數為:b)擴展的加密子算法和擴展的解密子算法與enc和dec類似。(4)數據庫擁有者使用opea算法對全部數據項進行加密,使用抗碰撞哈希函數或者對稱密碼技術對數據表名、列名等進行加密。2.用戶自定義函數的實現方法包括:(1)數據庫擁有者依據密鑰以及查詢請求中的待比較明文選取隨機整數x∈[max{r1,r2},σ+r1),并發送至云服務供應商,其中r1=u[value1]-l[value1]和r2=u[value2]-l[value2]分別是待比較明文值value1和value2所對應的密文分區長度。(2)設計并實現等值比較函數equalitycom(x,e(value1),e(value2)),判定步驟為:a)若e(value1)和e(value2)的距離不大于x,則明文值相等,函數輸出0,否則繼續執行步驟b);b)若e(value1)大于e(value2),則value1大于value2,函數輸出1;而若e(value1)小于e(value2),則value2大于value1,函數輸出-1。(3)設計出聚合比較函數sumequalitycoml[value],u’[value]),是某數據庫字段的數據項集合,sum是求和函數,明文value與查詢條件中的某個常量數值相對應,l[value]和u’[value]分別是value對應的密文分區下邊界和擴展上邊界。這里要求且r以非降序排列,判定步驟為:a)若不大于l[value]且不小于u’[value],則與value相等,函數輸出0,否則繼續執行步驟b);b)若大于u’[value],則大于value,函數輸出1;而若小于l[value],則value大于函數輸出-1。(4)借助用戶自定義函數sumequalitycom,在數據庫擁有者與云服務供應商之間部署安全和值計算協議。假設att是某數據庫字段的數據項集合,協議步驟為:a)云服務供應商計算sum(e(att))和sum(e’(att)),并將密文累加結果發送至數據庫擁有者;b)數據庫擁有者解密得到d=dec(sum(e(att)),l)和d’=dec(sum(e’(att)),u’);c)若d與d’相等,則數據庫擁有者獲知sum(att)=d,并將e(sum(att))=sum(e(att))返回云服務供應商。協議結束。d)否則,數據庫擁有者將會繼續嘗試尋找能夠使得sumequalitycom(sum(e(att)),sum(e’(att)),l[d+i],u’[d+i])=0成立的整數i(0≤i≤d’-d),從而獲知sum(att)=d+i,并將e(d+i)返回云服務供應商。協議結束。(5)設計并實現字符串分割函數split(str,delimiter),str是待分割的like運算符的密文搜索模式串,delimiter是分隔符,分割后的結果采用table類型存儲并返回。3.圖3是轉換模塊處理流程圖。轉換模塊的實現方法包括:(1)針對經opea算法加密的外包數據庫,設計并實現sql-translator解釋器,采用標準transact-sql數據操作語句作為輸入。這里假設tbl是明文庫某數據表名,att、att1、att2是明文庫某字段的數據項集合,val、val1、val2是常量數值,*c是密文域對應的數據庫對象。(2)轉換明文數據操作語句中的數據庫實體,轉換規則為:a)數據表名、列名使用抗碰撞哈希函數或對稱加密技術進行匿名化轉換;b)常量值使用opea算法進行轉換。(3)劃分轉換后的數據操作語句為最小轉換單元,其中包含完整謂詞表達式或子句結構。(4)依次為最小轉換單元調用相應的子轉換模塊。其中,子轉換模塊i與最小轉換單元i對應,設有該最小轉換單元i的轉換規則,將其轉換為對應的密文sql子句。針對查詢、插入、更新、刪除四類數據操作語句,表1詳述了其最小轉換單元的轉換規則。表1為最小轉換單元的轉換規則表1中各轉換規則具體描述如下:■對于查詢操作語句:形如select<att1,att2,…>from<tbl>的查詢操作語句直接轉換為select<att1c,att2c,…>from<tblc>其余子句的轉換規則如下,其中規定整數x∈[max1≤i≤t{ri},σ+r1):where子句形如att1=att2的比較運算符表達式直接轉換為equalitycom(x,att1c,att2c)=0。形如att1>att2的比較運算符表達式直接轉換為equalitycom(x,att1c,att2c)>0。形如att1<att2的比較運算符表達式直接轉換為equalitycom(x,att1c,att2c)<0。同理,比較運算符<>,!=,!>,<=,!<,>=的轉換規則可通過組合上述規則而得到。形如attbetweenatt1andatt2的between運算符表達式直接轉換為equalitycom(x,attc,att1c)>=0∧equalitycom(x,attc,att2c)<=0形如attnotbetweenatt1andatt2的notbetween運算符表達式直接轉換為equalitycom(x,attc,att1c)<0∨equalitycom(x,attc,att2c)>0形如attin(att1,att2,…)的in運算符表達式直接轉換為equalitycom(x,attc,att1c)=0∨equalitycom(x,attc,att2c)=0∨…形如attnotin(att1,att2,…)的notin運算符表達式直接轉換為equalitycom(x,attc,att1c)!=0∧equalitycom(x,attc,att2c)!=0∧…形如attisnull的is運算符表達式直接轉換為equalitycom(x,attc,nullc)=0形如attisnotnull的isnot運算符表達式直接轉換為equalitycom(x,attc,nullc)!=0對于形如att[not]likepat[escapeesch]的like運算符,逐步采用如下的轉換方式:為att增加臨時列att_match;根據轉義符esch轉義通配符并以opea算法加密普通字符;聲明外層游標匹配數據項長度;以split函數將搜索模式串pat分割為3部分,并分別生成起始、中間和結束部分的匹配條件,使用and或or拼接各個匹配條件;聲明內層游標匹配當前數據項的密文字符串;更新att_match列以及查詢條件。like運算符的轉換結果由上述轉換步驟所需的全部sql語句構成。對于形如s1whereexists(s2)的子查詢語句,其中s1和s2是select語句,逐步采用如下的轉換方式:轉換內層查詢s2,其查詢結果存入臨時表#inter_table2;將外層查詢轉換為s1whereexists(select*from#inter_table2)。子查詢語句的轉換結果由上述轉換步驟所需的全部sql語句構成。同理,notexists型子查詢與運算符型子查詢的轉換規則與此相同。對于查詢條件con1和con2而言,有以下轉換規則:形如con1andcon2的組合查詢條件直接轉換為con1c∧con2c。形如con1orcon2的組合查詢條件直接轉換為con1c∨con2c。orderby子句形如orderbyatt1,att2,…[asc|desc]的orderby子句直接轉換為orderbyatt1c,att2c,…[asc|desc]在密文sql語句執行過程中,云服務供應商首先以equalitycom函數判定出att1c中屬性值相同的記錄,然后再按照att2c進行排序。groupby子句對于形如groupbyatt的groupby子句,逐步采用如下的方式轉換:對att列進行自連接查詢,滿足查詢條件的結果存入臨時表#tem;轉換為臨時表內查詢groupbyattc。groupby子句的轉換結果由上述轉換步驟所需的全部sql語句構成。having子句形如min(att)的聚合函數直接轉換為min(attc)。形如max(att)的聚合函數直接轉換為max(attc)。形如count(att)的聚合函數直接轉換為count(attc)。對于形如sum(att)的聚合函數,則轉換為云服務供應商與數據庫擁有者之間的安全和值計算協議,借助該協議最終計算得到e(sum(att))。形如avg(att)的聚合函數直接轉換為e(sum(att))/count(attc)。■對于插入操作語句:形如insertinto<tbl>(<att1,att2,…>)values(val1,val2,…)的插入操作語句直接轉換為insertinto<tblc>(<att1c,att2c,…>)values(e(val1),e(val2),…)同理,對于插入操作語句中包含的子查詢語句,其轉換規則與查詢操作語句相同。■對于更新操作語句:形如update<tbl>set<att>=val的更新操作語句直接轉換為update<tblc>set<attc>=e(val)同理,對于更新操作語句中由from子句和where子句指定的更新條件,其轉換規則與查詢操作語句的查詢條件相同。■對于刪除操作語句:形如deletefrom<tbl>的刪除操作語句直接轉換為deletefrom<tblc>同理,對于刪除操作語句中由where子句指定的刪除條件,其轉換規則與查詢操作語句中的查詢條件相同。(5)對轉換得到的密文sql子句進行拼接和排列,得到完整的密文sql語句,并使其保留相同語義。例如對于下述明文查詢語句:selectatt1fromtblwhereatt1=att2orderbyatt1groupbyatt1havingsum(att2)>val經sql-translator轉換后拼接排列得到下述密文查詢語句:selectatt1cfromtblcwhereequalitycom(x,att1c,att2c)=0orderbyatt1cgroupbyatt1chavingsumequalitycom(sum(e(att2)),sum(e’(att2)),l[val],u’[val])>0(6)輸出可以直接在外包密文數據庫上執行的密文sql語句。下面給出本發明的一個具體實施例。1.假設數據庫擁有者的明文數據庫由一個名為example的數據表組成。表中包含兩個明文字段(或稱明文屬性列),列名分別為c_custkey和c_nationkey。表中共有5條明文記錄(即5行數據),如圖4所示。2.數據庫擁有者借助密碼模塊對該明文數據庫進行加密處理,并將加密后得到的密文數據庫發送至云服務供應商。明文數據庫中名為example的明文數據表對應密文數據庫中名為[8e3b72508e05135569ace4ed9b96d137]的密文數據表,表中共5條密文記錄,如圖5所示;其中,d0d0a493e28066e951fa7a980e81cb05和4eed023b3ef2a4fd3b3fae34f828ba5e分別是使用抗碰撞哈希函數對明文列名c_custkey和c_nationkey進行加密處理后得到的密文列名。第一行的密文數據項121和4423則分別是使用opea算法對明文數據庫第一行的明文數據項1和15逐一加密后得到的密文值。3.假設終端用戶提出下述查詢操作請求(即明文sql語句):select*fromexamplewherec_nationkey>10終端用戶請求從example表中查詢出c_nationkey值大于10的數據記錄。其中c_nationkey>10是查詢條件,查詢結果應返回兩條明文記錄(1,15)和(2,13)。4.數據庫擁有者借助轉換模塊對該明文sql語句進行轉換處理,得到密文sql語句:select*from[8e3b72508e05135569ace4ed9b96d137]whereequalitycom(100,[4eed023b3ef2a4fd3b3fae34f828ba5e],2891)>0其中equalitycom(100,[4eed023b3ef2a4fd3b3fae34f828ba5e],2891)是用戶自定義函數。examplec=[8e3b72508e05135569ace4ed9b96d137],x=100,c_nationkeyc=[4eed023b3ef2a4fd3b3fae34f828ba5e],e(10)=2891。5.數據庫擁有者將密文sql語句發送至云服務供應商。由云服務供應商負責在密文數據庫中執行查詢,執行過程中需要調用用戶自定義函數equalitycom。查詢結束后得到符合查詢條件的密文查詢結果,如圖6所示。6.云服務供應商將該密文查詢結果返回給數據庫擁有者。數據庫擁有者借助密碼模塊對其進行解密處理,最終得到明文查詢結果,如圖7所示:7.數據庫擁有者將該明文查詢結果返回給終端用戶。外包數據庫查詢過程結束。當前第1頁12當前第1頁12