◆王國峰 雷琦 唐云 王遠輝
(中電科第三十研究所 中國電子科學研究院 中電科網絡空間安全研究院有限公司 北京 100041)
在大數據時代,大量數據存儲在云服務器上,需要借助云計算平臺對數據進行管理,導致數據的所有權和管理權分離。這種情況下,由于用戶數據托管在云服務端,依賴云計算平臺保障用戶數據私密性,數據的安全很大程度取決于大數據平臺的可信性。然而,大數據平臺運維人員有可能濫用或誤用自己的權限泄露用戶隱私數據,損害用戶信息或信息系統的保密性、完整性及可用性[1-3]。為保護用戶數據,本文設計大數據加密方案在客戶端對數據加密,并控制數據加密過程和安全存儲加密密鑰。用戶隱私數據加密以后再傳到大數據平臺上,而大數據平臺服務商只能看到密文,數據控制權完全在用戶手中。此外,加密密鑰妥善保管和存儲,避免大數據平臺管理員利用特權得到密鑰進而竊取用戶數據[4-5]。本文在已有大數據安全保護技術的基礎上,實現了大數據環境不同場景下的大數據加密方案,具有很強的可適用性。
在大數據時代,用戶將數據遷移到云上,如何保障用戶的權益,是一個極具挑戰的問題,也是近年來學術界和工業界共同關注的熱點。如表1 所示,CryptDB[6]在數據存入數據庫前,利用數據庫代理對數據作特定加密,可有效防范惡意的數據庫管理人員;Mylar[7]在應用數據傳送到服務器前對數據作加密,以保證數據的隱私性和安全性,可有效防范惡意的應用服務管理人員;ShadowCrypt[8]通過瀏覽器插件,在數據到達客戶段應用程序之前對數據加密,從而可預防客戶端及服務器端的數據隱私泄露。Over-encryption[9]把數據保護與權限訪問控制相結合,在客戶端加密的同時又可在云服務端對用戶數據作訪問控制,用戶不必每次在權限訪問改變時下載并重新對數據加密。PasS(Privacy as a Service)[10]系統利用密碼協處理器芯片在服務端加解密數據,使數據被用戶密鑰加密后存儲到云服務端,可有效保護用戶數據隱私。近年來,工業界也提出使用云訪問安全代理(CASB,Cloud Access Security Broker)[11]技術,透明地在云應用程序和用戶之間對數據加解密。然而,目前大多數CASB 解決方案技術細節是不公開的。本文在已有大數據安全保護技術的基礎上,實現了大數據環境不同場景下的大數據加密方案。

表1 典型數據加密系統對比
大數據環境下加密方案設計架構如圖1 所示,包括分布式文件加密、分布式數據庫加密和關系數據庫加密,其中重要服務介紹如下。

圖1 數據加密方案架構
(1)安全認證服務:認證客戶端向認證服務端認證,驗證自己的身份是可信的,沒有被冒充,可利用Kerberos 或LDAP 組件實現安全認證功能。
(2)密鑰管理服務器(KMS):提供密鑰訪問服務,管理密鑰的訪問權限。
(3)密鑰存儲服務(Keystore):生成和/存儲密鑰,確保密鑰的安全。
(4)權限管控服務:在權限管控服務中,所有的權限都只能授予角色,當角色被掛載到用戶組的時候,該組內的用戶才具有相應的權限。授權對象為服務器、數據庫、表、視圖、列、URI 等,授權級別包括select、insert 和all,可利用Sentry 組件對權限作管控。
(5)分布式文件加密:對存儲在分布式文件系統中的文件進行加密,本文借助Hadoop 分布式文件系統(HDFS)分布式文件加密技術,實現大數據環境下HDFS 分布式文件系統文件加密及解密功能。
(6)分布式數據庫加密:對分布式數據庫(如Hive 或Kudu)作數據加密,本文借助UDF 技術實現數據表加解密功能,粒度可達到數據表列級別。UDF 已變成大數據生態圈查詢引擎的必備功能之一。
(7)關系數據庫加密:支持表加密和表空間加密的特性,避免數據文件被竊取后破解出關鍵數據,本文借助MariaDB 關系數據庫對表數據進行加解密處理。
分布式文件加密可實現透明、端到端的加密。透明加密意味著終端用戶無須感知加解密過程,而端到端意味數據在靜態和傳輸過程中都是加密的。這里以HDFS 分布式文件系統為例來作詳細介紹。配置分布式文件加密完成后,用戶無須做任何程序代碼的更改,就可以往HDFS 上存儲并加密數據,數據加密和解密由客戶端完成。同時加密密鑰由KMS 管理,HDFS 不會存儲或訪問未加密的數據或數據加密密鑰,其中KMS 是一個Web 服務,本身提供了一系列API 來創建、獲取和維護密鑰。
圖2 展示了分布式文件加密過程中encryption zone keys(EZ keys),data encryption keys(DEKs)和encrypted data encryption keys(EDEKs)之間的關系,其中EZ key 加密DEK 得到EDEK,EZ key解密EDEK 得到DEK;DEK 加密File 得到Encrypted File,DEK 解密Encrypted File 得到File,其中:

圖2 分布式文件加密
(1)Encryption Zones(EZ)是HDFS 上面的一個需要加密的目錄,拷貝到這個目錄的文件和子目錄都會被加密。
(2)每一個EZ 對應有一個 EZ key,這個key 是由密鑰管理員在創建zone 的時候指定的,EZ key 存儲在后端的keystore 中,獨立于HDFS 存儲。
(3)EZ 里面的每一個文件都擁有自己對應的encryption key,稱之為Data Encryption Key(DEK)。
(4)DEK 使用對應的EK key 加密,生成Encrypted Data Encryption Key(EDEK)。
EDEK 持久化存儲在HDFS 分布式文件系統中,EZ keys 在KMS 和Keystore 中存儲管理,由于HDFS 用戶沒有權限獲取EDEK’s encryption keys(EZ keys),即使HDFS 失陷(比如攻擊者獲取到HDFS 超級用戶),攻擊者也只能獲取到加密文件和EDEKS,無法解密文件。客戶端經過權限驗證向KMS 服務請求密鑰,沒有權限的客戶端將不會得到解密文件對應的DEK 密鑰。
綜上所述,分布式文件加密過程如下:
1) 用戶首先經過權限認證,確認自己的身份;
2) 用戶向HDFS Client 發送寫入數據請求;
3) HDFS Client 和HDFS 集群交互,得到EDEK;
4) HDFS Client 和 KMS 交互,得到加密數據所使用的DEK;
5) HDFS Client 使用DEK 加密數據,將密文存到HDFS 集群中。
分布式文件解密過程如下:
1) 用戶首先經過權限認證,確認自己的身份;
2) 用戶向HDFS Client 發送讀取數據請求;
3) HDFS Client 和HDFS 集群交互,得到EDEK;
4) HDFS Client 和 KMS 交互,得到解密數據所使用的DEK;
5) HDFS Client 使用DEK 解密數據,將明文返回給用戶。
分布式文件加密粒度太粗,有時并非要對分布式文件數據加密,而是對要存儲在分布式數據庫中的數據作加密處理。本文設計分布式數據庫加密方案,使用KMS 做密鑰管理。
分布式數據庫加密過程如下:
1) 用戶首先經過權限認證,確認自己的身份;
2) 用戶向KMS 發送請求,獲取要插入的表對應的密鑰參數;
3) 得到密鑰參數后,用戶調用SQL UDF,傳入獲得的密鑰參數;
4) 數據庫引擎接收到請求,調用權限管控服務判斷用戶的請求是否符合權限規則;
5) 若符合權限規則,UDF 使用自身的固定參數結合傳進來的密鑰參數形成數據密鑰,加密數據,將密文存儲到分布式數據庫中。
分布式數據庫解密過程如下:
1) 用戶首先經過權限認證,確認自己的身份;
2) 用戶向KMS 發送請求,獲取要查詢的表對應的密鑰參數;
3) 得到密鑰參數后,用戶調用SQL UDF,傳入獲得的密鑰參數;
4) 數據庫引擎接收到請求,調用權限管控服務判斷用戶的請求是否符合權限規則;
5) 若符合權限規則,UDF 使用自身的固定參數結合傳進來的密鑰參數形成數據密鑰,解密分布式數據庫中的密文數據,將明文返回給用戶。
為了支持多用戶多會話,往往需要一個獨立的關系數據庫存儲元數據,這里以MariaDB 作為元數據庫。另外,一些密鑰的元數據信息也存儲在關系數據庫中。
為了保證關系數據庫中的數據安全,需使數據在靜態和傳輸過程中都是加密的。MariaDB 對表數據加密,可保證元數據是密文存儲的,并配置TLS 確保傳輸過程安全性。
關系數據庫加密過程如下:
1) 數據經TLS 傳到MariaDB 數據庫;
2) MariaDB 數據庫從KMS 中獲得對應的密鑰,加密數據,存到數據庫中。
關系數據庫解密過程如下:
1) 程序向MariaDB 數據庫發送讀取數據請求;
2) MariaDB 數據庫從KMS 中獲得對應的密鑰,解密數據,將解密后的數據以TLS 方式返回給相關程序。

圖3 關系數據庫加密
針對大數據平臺下數據安全問題,本文分別設計分布式文件加密、分布式數據庫加密和關系數據庫加密方案,在客戶端對數據加密,并控制數據加密過程和安全存儲加密密鑰,大數據平臺服務商只能看到密文,從而數據控制權完全在用戶手中。