劉紅超, ,,,
(1.北京許繼電氣有限公司,北京 100085; 2.國家電網公司,北京 100085; 3.武漢大學 計算機學院,武漢 430074)
近年來,隨著互聯網大數據的爆發,數字化信息快速滲入到各行各業,由此產生的海量數據存儲方式由傳統的基于文件轉換為電子信息數據庫,例如PostgreSQL[1-2],一個自由的對象-關系數據庫管理系統,為用戶提供隨時隨地利用互聯網訪問數據的便捷服務,帶來方便的同時也引起了很大的安全問題。首先由于大量的數據集中存儲在同一個存儲系統中,如何保證不同用戶的數據隔離是一個重要問題。其次數據存儲的集中性很可能受到黑客針對數據的集中攻擊。另外還存在數據庫管理員(Database Administrator,DBA)與攻擊者合謀惡意竊取內容。一旦用戶的隱私數據得不到保護將會帶來嚴重的后果,面對嚴峻的數據泄密的形勢,傳統的信息安全措施難以應對,加強數據自身安全迫在眉睫。
目前針對數據庫中隱私數據的保護得到了諸多學者的重視,在密文數據下的訪問控制研究取得了很多重要的成就。這些成果均是圍繞如何高效地管理數據和密鑰安全分發進行展開,說明密文數據訪問授權的本質為密鑰的管理和分發。有學者專門針對組密鑰的管理進行大量的研究[3-5],其中邏輯密鑰層次(Logical Key Hierarchy,LKH)以其的高效性被廣泛使用,是基于密鑰樹的方法進行密鑰關系的構造,采用對稱密鑰來對新的密鑰加密。在其基礎提出了基于高效的大規模用戶組密鑰(Efficient Large-group Key,ELK)[6]的新協議,但是當有用戶頻繁加入或離開時該方法不能有效地對密鑰進行管理。針對這一情況,學者們提出了基于子用戶組的層次框架[7],選擇將大的用戶組分為小的子用戶組并安排管理人員掌握該小組的密鑰,但是該方法數據訪問效率很低。在訪問控制研究領域,基于屬性加密(Attribute-based Encryption,ABE)[8]的訪問控制模型被提出,不同于傳統的公鑰加密系統,該方法是對錯誤有容忍度的訪問控制模型。其主要缺點是其閾值語義表達力不足導致其無法設計出通用的密文訪問控制系統。在此基礎上出現了新的加密系統,采用基于密鑰策略屬性的加密(Key-Policy Attribute-based Encryption,KP-ABE)[9]方法,該系統中密文數據加密基于屬性的集合,但是數據加密者并沒有運用任何訪問控制策略在密文數據上。
盡管很多學者針對數據加密和密文數據下的訪問控制做了大量工作,但仍存在一些問題,目前還沒有較好的方法對密文數據進行輕量級、細粒度的訪問控制方法[10],為此,本文提出一種基于密文的訪問控制框架,以實現細粒度輕量級的密文訪問控制。
本文針對PostgreSQL數據庫系統可能出現的隱私數據泄密問題,提出新的訪問控制模型,并將該方法應用到圖1所示的訪問控制場景中。

圖1 數據訪問控制場景
數據擁有者先將數據本地加密后上傳至PostgreSQL,然后針對其所屬的密文數據進行訪問授權,授權過程本質就是密鑰分發的過程,數據擁有者期望有細粒度的訪問授權,但不增加密鑰的管理負擔,在數據撤銷時要能高效地完成授權撤銷。
基于實際需求,本文要解決的問題是提出一套機制保證數據安全而且擁有者能靈活對數據庫中數據進行授權,共享者也能便捷高效地訪問數據。
文獻[11]提出了一種新的加密方式AONT,經過該模式加密的數據要想獲取某些明文必須要對整個數據進行完整解密,否則無法獲知。
該方法主要包括:
1)針對原始數據m1,m2,…,ms,首先利用轉換函數f獲得偽數據信息m1’,m2’,…,ms’,s’≥s,其中轉換函數f滿足:可逆性;可計算性;不可部分分解,無法通過部分偽裝數據推導出明文。
2)利用傳統對稱加密算法對上述結果進行數據加密得到密文c1,c2,…,ct。
下面給出轉換函數過程:
輸入m1,m2,…,ms,K0
輸出m1’,m2’,…,ms’,s’=s+1
1)生成隨機密鑰K’。
2)計算:
mi’=mi?E(K’,i),i=1,2,…,s
(1)
3)計算:
ms’’=K’?h1?h2?…?hs
(2)
hi=E(K0,mi’?i),i=1,2,…,s
(3)
其中,K0是公開密鑰,K’是每次加密隨機生成的,通過式(4)計算:
K’=ms’?h1?h2?…?hs
(4)
轉換后的數據還原為原始密文通過式(5)實現:
mi=mi’?E(K’,i),i=1,2,…,s
(5)
上述方法是針對數據塊進行的,所以,要先對數據分塊,過程的本質只是對數據進行預處理。
在代理重加密[12-14]的基礎上,根據需求不斷改進,文獻[15]提出基于對稱密鑰重加密方法,先采用AONT對數據預處理后,使用傳統對稱加密算法進行加密。數據擁有者隨機生成初始b字節密鑰K1、K2、K3、Kx對數據m加密。再利用AONT技術處理原始密文。利用PGen(K1,b)置換密鑰生成函數生成置換密鑰P1、P2、P3。對預處理后數據利用P3和Perm函數進行置換。重加密過程將原始密鑰轉化為K1’、K2’、K3’、Kx’重加密密鑰后對密文數據重新加密。
本文提出了一種輕量級細粒度的訪問控制方法,并在此基礎上給出優化方法。
本文在介紹基于密文的訪問控制方法時采用統一的符號,表1為使用的符號及其意義。

表1 全文符號及意義
輕量級細粒度的訪問控制方法的設計思想如下:
1)數據上傳存儲,數據擁有者在本地將數據進行加密,將加密后的密文上傳至PostgreSQL。
2)數據授權,當數據擁有據者對數據進行授權時,先對將要授權的數據生成鏡像,pkdmi并為之生成相應的公私鑰對(pkdmi,skdmi),計算該數據與鏡像之間的代理重加密密鑰rski,并將重加密密鑰rski存儲在數據庫中。針對被授權的用戶或用戶組進行權限的劃分,并構建權限控制節點,在權限控制層利用數據授權者和被授權者之間的會話密鑰pubUj將私鑰skdmi加密得到skdmi′,將其存儲于權限控制節點。
3)數據訪問,當用戶提出訪問數據的請求后,PostgreSQL先判斷用戶對于該數據是否有權限訪問,若有,則用重加密密鑰對密文進行二次加密得到新的密文,連同數據授權過程中的私鑰skdmi′返回給請求者,被授權者利用會話密鑰先對私鑰skdmi′進行解密得到skdmi,再用解密后的密鑰對密文解密。
4)數據撤銷,當數據擁有者想撤銷某些用戶對數據的訪問權限時,直接通過調整鏡像以及權限控制節點值來只想權限的收回。
在整個過程中,通過構建數據鏡像層和權限控制層,能有效實現無副本數據訪問共享,并確保數據加密密鑰的安全性,能在多個方面防止了隱私數據防泄密。具體的密文訪問控制層次結構如圖2所示。
基于公鑰系統的訪問控制方法采用的加密技術是RSA加密算法,RSA算法是目前最具影響力的公鑰加密算法,可以抵抗密碼攻擊。本文采用RSA算法對隱私數據進行初次加密和會話密鑰加密。
3.3.1 數據上傳發布
每一個用戶都擁有一個公私鑰對,在用戶前端安全存儲,數據加密后將密文存上傳至PosrgreSQL。已知待上傳至PosrgreSQL的數據集合以及公鑰pub,完成用戶前端加密,具體過程如下:
1)從大小為|M|的待上傳的明文數據集M中依次選取元素i=1,2,…,|M|。
2)采用公鑰加密算法對數據mi進行加密ci=E(pub,mi)。
3)將加密后的密文集合C上傳至數據庫。
4)數據庫管理層根據權限控制集,即針對當前數據用戶訪問權限表,構建初始權限控制層。如果權限訪問表非空則創建權限控制表中對應的權限控制節點。
3.3.2 數據授權
當密文成功上傳至PostgreSQL后,數據擁有者可能需要將數據授權給不同的用戶,最主要的問題就是如何針對不同用戶分發不同的密鑰,同時也要考慮PostgreSQL和不被授權用戶的合謀攻擊。因此,在數據授權時通過數據鏡像層將數據的存儲與訪問分開,從而保證數據庫中數據的安全性,為了不引入副本,該方法中采用代理重加密的機制,對首次加密后的密文進行二次加密,其中,通過會話密鑰將重加密過程中用到的私鑰進行加密保護原始密鑰的不可訪問性,用鏡像點的私鑰分發來完成數據訪問權限的控制。
為了完成數據二次加密,系統為每一個數據的鏡像點分配相應的公私鑰對(pkdmi,skdmi),密文ci與鏡像點之間的代理重加密的密鑰通過式(6)計算:
rski=(pub/pkdmi) mod Ф(n)
(6)
其中,n為RSA加密系統中的公共參數。
通過式(6)的計算實現了解密密鑰由pri向密鑰skdmi的轉換,對原始密鑰完成了安全的隔離。要將解密密鑰安全可靠地分發給被授權的用戶,需要將skdmi封裝,在此采用會話密鑰的方式對其進行加密,就是用Uj的公鑰對其加密,并將密鑰密文存儲在控制訪問層的節點中,通過數據擁有者的權限控制可以完成授權訪問和權限的收回。引用權限控制層就是為了能夠方便靈活地進行權限管理。
上述機制中授權者只是需要在本地完成重加密密鑰rski的計算再將rski上傳給PostgreSQL,讓其完成重加密的過程,大大減少用戶前端的計算成本。對于鏡像點的公私鑰對只是在數據授權時被調用,一旦完成了重加密密鑰的計算用戶就不需要占用存儲空間繼續保存該鏡像的公私鑰對,釋放占用的存儲空間,若有新的授權需要完成時,只要再次生成新的密鑰對即可,重新計算重加密密鑰。針對整個數據授權的過程算法實現,已知需要授權的數據DM、被授權的用戶集合U、訪問控制表,構建密文訪問控制結構具體步驟如下:
1)依次選取i=1,2,…,|DC|。
2)待授權的數據dmi生成相應的鏡像點Mirrdmi。
3)為鏡像點生成相應的公私鑰對(pkdmi,skdmi)。
4)根據鏡像點公私鑰對、授權用戶的(pri,pub)和式(6)在本地算出重加密密鑰rski。
5)將rski上傳至數據庫。
6)針對用戶集合里的所有元素對每一個待授權用戶做如下操作。
7)如果用戶Uj對數據dmi由訪問權限。利用會話密鑰pubUj對鏡像私鑰skdmi進行加密得到skdmi′。
8)將skdmi′存儲在與Uj對應的權限控制節點中。
過程中凡是涉及到密鑰之間的計算都是在用戶前端完成,以保證半可信的第三方PostgreSQL難以獲得任何關于數據加密的密鑰內容。
3.3.3 數據訪問
當構建出一個基于鏡像的數據訪問控制結構后存儲在PostgreSQL中,當用戶Uj期望對某個數據進行訪問時,不需要和數據擁有者進行任何操作,只需要利用在注冊時分配的公私鑰即可訪問期望的數據。該方法中對于數據擁有者是完全透明的,這一特點保證了授權用戶對數據擁有者的透明性,由于被授權用戶只是掌握一個密鑰,因此在解密時不必刻意針對不同數據進行密鑰選擇,真正意義上實現了一個用戶一個密鑰的機制。給出用戶信息和用戶Uj對應的私鑰prij用戶訪問控制權限結構,待訪問的密文數據集合DC要找出用戶要訪問的明文數據集的具體步驟如下:
1)依次選取i=1,2,…,|DC|。
2)對于ci判斷在用戶訪問控制權限結構中是否有對應的鏡像點。
3)如果ci有對應的鏡像點,那么判斷該鏡像點下的權限控制節點是否存在用戶Uj的相關信息。
4)如果存在用戶Uj的相關信息,那么獲取密文ci與鏡像點之間的代理重加密的密鑰rski。
5)使用上述重加密密鑰對密文ci進行重加密得到ci。′
6)獲得相應權限控制節點中用戶Uj對應的密鑰密文skdmi′。
7)將數據ci′和skdmi′返回給用戶Uj。
8)若不存在用戶Uj的相關信息,則用戶Uj屬于該權限控制節點但是沒有訪問權限。
9)若ci沒有對應的鏡像點,則數據ci沒有授權進行,拒絕一切用戶對該數據信息的訪問請求。
10)當用戶Uj收到返回的重加密后的密文后。用自己的私鑰prij解密返回的密鑰skdmi′得到skdmi。
11)利用skdmi對密文ci′進行解密得到mi。
雖然從密文ci′到明文需要經過兩次解密過程,但是在被授權用戶前端只需要進行一次解密過程,是由于代理重加密的特點,使得Uj只需要用自己的私鑰就可以直接解密出明文。
本文提供了一套基本的隱私數據防泄密的方法,但是在整個過程中還存在一些問題。首先系統需要對每次請求訪問的數據完成一次重加密的過程,而公鑰體系對數據加密是低效的,因此,是一個低效的數據操作過程。其次在該機制中針對同一數據文件的多用戶授權,系統要計算多次的密鑰密文并存在控制節點中,這樣針對被授權用戶組的一次授權需要多次加密過程,這樣消耗大量的資源成本。所以,在會采用基于對稱密鑰對數據進行加密,其效率相較于前文的RSA提高很多。
目前有很多較為成熟的對稱加密技術,但是應用到重加密的算法中難以進行,本文采用基于AONT預處理的對稱密鑰重加密算法對加密算法進行優化。
3.4.1 前端加密算法的優化
由于優化方法是采用對稱密鑰,因此授權者初始分配的密鑰不再是公私鑰對(pub,pri)而是對稱密鑰key,對于明文數據的初次加密相對于3.3節中的加密算法對參數做了更改,基于ATON的對稱密鑰加密算法大大提高了加密的效率。
3.4.2 重加密過程優化
在前文的基于鏡像點的重加密過程中,在每次數據訪問過程中都要做一次代理重加密過程,不論是基于公鑰還是對稱密鑰都是十分耗時的,因此,為了提高每次數據訪問的效率,通過增加一個數據副本,此處的副本不是傳統的數據副本,它只是存在于數據鏡像層,即面向權限控制層的一個數據鏡像。這樣當被授權用戶請求訪問時,只需要將當前的數據副本及相應的密鑰發送給訪問用戶。盡管每次數據授權時會增加額外的空間時間消耗,但是對于整個系統,訪問次數遠遠大于數據授權的次數,因此,該優化能大大提升整個系統的效率。具體加密和重加密過程如下:已知數據擁有者要上傳給PostgreSQL的數據信息集合M,對稱密鑰key=(K1,K2,K3,Kx),對稱加密密鑰key′=(K1′,K2′,K3′,Kx′),通過具體的加密和重加密算法得到密文數據集C,以及數據ci重加密后的數據副本Dupci。加密和重加密算法的步驟如下:
1)若進行數據加密,則依次選取要上傳的數據集合中|M|個元素i=1,2,…,|M|。
2)對mi進行數據等分,分為s段。
3)利用AONT轉換算法計算mi中每一段數據mij。
5)利用K1、K2、K3生成相應的P1、P2、P3。
6)利用Tdi′ =Perm(P3,Tdi)對數據進行置換。

8)依次選取j=2,3,…,s,計算:

9)得到密文數據集并上傳至數據庫。
10)如果進行數據重加密,那么針對得到的待加密數據集進行重加密,使得重加密后key′=(K1′,K2′,K3′,Kx′)可計算。
11)針對于每個要重加密的數據依次選取i=1,2,…,|DM|。通過函數FindCK計算從K1和K3到K1′,K3′的轉換密鑰:
CK1=FindCK(PGen(K1,b),PGen(K1′,b))
CK3=FindCK(PGen(K3,b),PGen(K3′,b))
得到重加密密鑰:
rsk=(CK1,CK3,Kx,Kx′,K2,K2′)
12)利用K2和K2′分別計算P2和P2′。
13)選取變量j=2,3,…,s,計算:



15)在Tdi′上進行Perm(CK3,Tdi′)變換。
16)當j取值為1時,變換方法為:

17)依次賦值變量j=2,3,…,s,計算公式如下:

通過上述過程可以得到,基于AONT變換加密算法的數據密文以及重加密密文數據副本Dupci。最終密文可以通過K1′、K2′、K3′實現解密。
安全性分析如下:
1)數據安全性:數據在可信前端進行數據加解密,因此,不論數據在上傳至數據庫還是在數據庫中的存儲都是以密文的形式出現,方法中選擇的加密算法的安全性保證了數據在傳輸以及存儲過程中的安全性。
2)重加密的安全性:對于每一個密文數據在利用重加密密鑰加密后得到的新的密文數據副本過程中,由于重加密密鑰是數據授權者在本地計算得出后上傳給PostgreSQL,因此在數據庫中完全得不到任何關于密鑰的信息,因密鑰生成的單向性,無法由新的密鑰推導出之前的加密密鑰,所以重加密過程中并不會涉及到數據的明文信息。因此,該過程也是安全的。
3)抗合謀:當數據接收者即被授權者Uj獲得解密密鑰后意欲聯合半可信的第三方數據庫管理者對其他數據進行合攻擊竊取時,盡管數據擁有者在本地初次加密時采用的是同一個加密密鑰,但因為采用的是存儲和控制分離的方式,對于用戶沒有權限訪問的數據,用戶即使聯合數據庫拿到了重加密后的密文,也無法獲取相對應的使用會話密鑰封裝后的重加密密鑰,所以用戶能獲得的也只是有訪問權限的數據信息。
優化后的方法對于授權控制是基于代理重加密后的數據副本進行的,這會使統一加密密鑰加密的數據經過重加密后,不同的數據需要利用不同的解密密鑰進行解密,原理和基于RSA方法中一樣用戶只能獲得有訪問權限的數據,這種方法很好地將原始加密密鑰保護,可以有效地抵御來自用戶和半可信數據庫的聯合攻擊。
數據上傳至PostgreSQL前都要在前端加密,保證前端加密效率直接影響用戶滿意度,在本次實驗中針對不同數據規模分別采用文中提到的2種加密算法比較加密效率。本次數據規模m=1 000,2 000,…,8 000個文檔,得到如下數據如圖3所示。

圖3 數據加密效率對比
從圖3可知,隨著文檔規模逐漸增大相較于AONT的對稱加密基于RSA加密算法劣勢越趨明顯,雖然兩者在數據安全性上都有很好的保障但考慮到效率問題采用對稱密鑰可有效減少本地計算開銷。
本文2層存儲架構選擇的重加密方法直接影響存儲層和鏡像層之間的數據訪問效率,針對提出的2種方法進行效率對比,結果如圖4所示。選取的文檔規模m為1 000~8 000。

圖4 重加密效率
在數據訪問的整個過程中,2種方法的訪問權限判斷和網絡傳輸時間基本相同不做考慮,主要是重加密和本地解密的時間不同,對于優化后方法中每個數據授權均有一數據副本,不存在重加密時間。
由圖5可知,基于對稱密鑰重加密機制讀取效率是基于公鑰機制的上千倍,但與此同時在數據庫中占用的額外存儲空間如表2所示。

圖5 數據讀取效率對比

mRSA/KBAONT/MB1 00012833.22 00025669.83 00038496.94 000512117.05 000640140.06 000768190.07 000896219.08 0001 024243.0
經過對比后發現,優化后方法是以存儲空間為代價提高數據的讀取效率,2種方法各有優劣勢,具體采用什么方法視實際情況和需求決定。
本文基于PostgreSQL隱私數據防泄密,提出一種細粒度輕量級的訪問控制方法。實驗結果表明,基于RSA加密的方法效率較低,但占用存儲空間小,優化后方法相較于傳統加密方法效率高,但需要占用額外空間,2種方法都具有很好的安全性。
盡管本文方法可以有效進行細粒度輕量級的訪問控制,但是隱私數據在其創建、存儲、傳遞、處理、銷毀等各個生命周期都遭受著被泄露的風險,不安全的存儲方式、頻繁的數據訪問處理傳遞都會給隱私數據帶來極大威脅,為了實現隱私數據安全,不僅從技術層面解決問題,還要從管理層面入手,兩者相結合才能發揮最大的效益,這將是今后研究的重點。