許成鵬,朱志祥
(西安郵電大學 陜西 西安 710061)
以云計算為代表的新趨勢正促使信息產業從提供獨立的軟硬件產品走向提供社會化、集約化和專業化的信息服務[1]。然而云計算發展面臨許多關鍵性問題,而安全問題首當其沖[2]。并且隨著云計算的不斷普及,安全問題的重要性呈現逐步上升趨勢[2-3]。在云計算多租戶模式下,不同的用戶共用一套業務系統,不同的業務系統共享相同的硬件資源,由此帶來諸多信息安全的問題,例如非法用戶對業務數據破換、竊取、非法訪問和修改等等。傳統行業的信息應用系統仍然是將大量業務數據存儲在關系數據庫中,例如電信、銀行的業務數據數據庫中存儲了大量的個人數據,對這些敏感數據增加安全措施,防止數據泄露也是數據安全的重要方向[4]。因此,利用云計算能夠有效管理計算資源的優勢,實現云平臺上數據庫敏感數據的加密保護變得的急為迫切[5-8]。
云計算平臺中租戶數據的安全需要從數據傳輸過程、處理過程和數據存儲三個過程考慮,數據庫加密保護系統是用來保障租戶數據的存儲安全。該系統位于應用系統和數據庫服務器之間,它首先將應用系統的業務數據按照用戶需求進行加密后存儲到數據庫系統中,當應用需要從數據庫系統讀取數據時,再根據之前的數據加密規則進行解密返回明文數據。因此,該系統對于用戶和應用系統是透明的。數據庫加密保護系統加密的顆粒度是字段,由于數據表中各字段信息之間價值有區別和利于用戶在安全和效率之間作出權衡,并不對全部字段進行加密,而是選擇敏感信息字段進行加密。
為了防止未授權用戶非法訪問或者用戶訪問超越其權限的業務數據,對數據進行篡改或竊取,數據庫加密保護系統需要采用訪問控制機制,同時對業務數據按用戶ID單獨加密存儲;通過統一的身份認證和密鑰管理中心實現各個類型的應用的訪問控制和管理具體應用的每個密鑰,以便于與云計算中用戶接入控制、數據傳輸過程和數據處理過程的安全防護措施保持一致。在數據庫DBMS外層實現數據的加脫密服務和數據事務支持[9-11],會遇大數據量并發訪問的瓶頸問題,數據庫加密保護系統通過IaaS云平臺資源管理接口創建虛擬化的加脫密引擎池,將加脫密功能以服務的方式提供,將其虛擬化和分布化來解決以上問題。
數據庫加密保護系統由應用交互模塊、任務管理模塊、資源監控模塊、加脫密引擎池、IaaS云平臺交互接口和密鑰管理接口六部分組成,如圖1所示。應用交互模塊實現與應用服務器進行交互的接口,一方面接受應用服務器的SQL請求提交,對SQL語句進行解析,另一方面將收集的執行結果返回給應用服務器。任務管理模塊解析各種數據庫訪問請求,通過訪問控制安全審核,將允許訪問的SQL請求分解為多個執行子任務,并對這些子任務進行發布、維護、監視和更新等控制管理工作。資源監控模塊從IaaS云平臺獲取虛擬機和物理機的信息,并將這些信息作為任務管理模塊任務分發部署和運行的依據;另外一個重要的工作是響應任務管理模塊執行子任務申請虛擬機的請求,與IaaS云平臺結合提供加脫密引擎的創建、銷毀和資源回收等服務,實現虛擬加脫密引擎按需分配功能。加脫密引擎池系統最核心的部分,由基于虛擬化技術動態創建的多個加脫密引擎組成,它負責為應用服務器的業務系統提供加脫密服務和數據安全訪問服務。

圖1 數據庫加密保護系統結構圖Fig.1 Structure diagram of the database encryption protection system
數據庫加密保護系統中使用的密鑰分為三類:用戶密鑰、表密鑰和工作密鑰;用戶密鑰是。用戶密鑰為主密鑰,是由認證與密鑰管理中心產生一個非對稱密鑰對,其中的私鑰主要用以實現應用和數據的訪問控制,它被存儲在用戶的物理令牌(例如USBKEY)中,公鑰存儲在認證與密鑰管理中心;公鑰用來加密表密鑰,私鑰用來解密密文表密鑰,確保只有持有私鑰的合法用戶解密用公鑰加密的表密鑰,可以提高密鑰管理的安全性和可靠性。表密鑰,由認證與密鑰管理中心負責產生,一個表密鑰對應一個關系數據庫中的數據表,由公鑰加密并存儲在認證與密鑰管理中心當中,表密鑰經過公鑰加密才存貯。工作密鑰通過表密鑰和工作密鑰生成函數動態生成,工作密鑰用來加密數據庫中數據表的字段數據;工作密鑰使用完后進行清理,減少了大量工作密鑰存儲所帶來的系統資源消耗,并降低密鑰靜態存儲所帶來的信息泄露風險。由于主密鑰由用戶個人保管,認證與密鑰管理中心只需要存儲數量較少的密文表密鑰,用戶通過唯一的主密鑰對管理表密鑰,通過少量表密鑰來管理大量的工作密鑰,因此密鑰管理的效率和安全性得到了優化和提升[12]。
加脫密引擎是數據庫加密保護系統的重要組成部分,它介于應用服務器的業務應用系統與數據庫服務器之間,負責完成數據庫信息的加脫密處理,對應用開發人員和操作人員來說是透明的,數據加脫密引擎的虛擬機資源由通過加資源監控模塊進行分配和管理,它的執行的任務由任務管理模塊分配和監控。數據庫加脫密引擎由五大模塊組成:加脫密處理服務模塊、數據簽名與驗簽、數據庫安全訪問接口、數據加密字典、密鑰管理接口模塊;其結構如圖2所示。

圖2 加脫密引擎結構圖Fig.2 Structure diagram of the encryption and decryption engine
當加脫密引擎資源消耗非常大時候,使用已建立的資源池是一種非常好的方式。將加脫密引擎在虛擬機中加載,多個虛擬加脫密引擎組成一個池,在初始化時首先建立由一定數量待用或休眠虛擬主機組成的虛擬加脫密引擎池,當有加脫密請求時并且現有資源無法滿足時,任務管理模塊根據當前隊列調度情況,按照資源調度策略從待用主機池中指定一個主機,并通過虛擬加脫密引擎模板在其上面創建一個虛擬加脫密引擎,按加脫密請求的能力要求配置虛擬加脫密引擎的能力,然后,將其掛在在用加脫密引擎池中。不同應用之間加脫密引擎原則上不能共用,當一個加脫密引擎負荷為零,可將該引擎從池中移出,銷毀虛擬機,回收資源,流程如圖3所示。

圖3 加脫密引擎池工作流程圖Fig.3 Flow diagram of engine pool running
在實際應用中,應用系統創建數據庫的表之后,用戶通過數據庫加密保護系統的配置管理圖形化界面的加密字典管理功能,定義需要保護的數據表和該數據表中需要加密字段數據。加密字典管理功能將把這些用戶定義信息存入加密字典中[12]。
加密字典管理做為加脫密引擎的一個功能模塊,主要功能包括字典配置、加密定義、表信息檢索、密文表配置、數據轉化等模塊組成。具體功能模塊要求如下:
1)字典配置,用于完成應用系統訪問數據庫加密保護系統之前進行加密字典的初始化工作。當加脫密引擎工作時,直接調用加密字典數據,從而加快加脫密速度,提高系統運行效率。
2)加密定義,用于處理數據庫采用加密手段后,對原數據庫的完整性和一致性會產生某些影響,例如,加密前后的數據類型不同而拒絕數據插入,這個問題可以通過建立密文表存放密文數據,并將需要加密的字段數據類型定義二進制數據類型來解決。當用戶需要時,引擎再將密文數據脫密并轉化成用戶所需要類型數據。這些加密時所需的信息必須通過用戶界面進行定義設置并保存到數據庫中。通常主鍵、外鍵、索引等字段信息不被加密。
3)表信息檢索,用于從數據字典中檢索出某個表的各類信息,包括表名、表標識、字段、主鍵、外鍵、索引等等。以表名為輸入,輸出表的各種信息數據,包括被保護表的加密定義。
4)密文表配置,用于為“加密定義”提供維護加密字典信息、構造密文表、刪除密文表等功能。
5)數據轉化,是將已有大量業務數據的明文數據庫進行加密保護時進行的初始化工作。
云計算平臺上數據庫加密保護系統中用戶通過客戶端訪問應用服務器時,用戶通過私密獲得應用系統持續訪問的權限令牌,由應用服務器向數據庫加密保護系統發起SQL請求,數據庫加密保護系統將請求進行任務分解,創建虛擬引擎訪問后臺數據庫。數據庫加密保護系統實現用戶數據保護的流程如圖4所示。

圖4 用戶數據保護流程圖Fig.4 Flow diagram of protecting user data
根據以上設計,筆者采用JAVA語言實現了數據庫加密保護系統,通過對JDBC接口進行二次封裝實現統一數據訪問,采用開源云平臺軟件OpenStack實現的IaaS云平臺。
1)IaaS云平臺資源監控接口,OpenStack是一款開源的IaaS云平臺軟件,它擁有非常活躍的大社區,開發進度非常迅速,但是,在它用于生產之前還需要許多的開發努力。通過開源集群管理工具xCAT對OpenStack云平臺中的資源進行監控和管理,包括虛擬機的CPU使用率、內存使用、網絡流量和磁盤讀寫情況,同時可以進行數據的匯總和統計。將xCAT與OpenStack集成融合為上層應用提供API形式的虛擬機資源監控管理服務。
2)統一數據訪問服務,在應用程序的設計中,數據庫的訪問是非常重要的,為了確保程序有良好的封裝性與可維護性,通常的做法是集中完成對數據庫的訪問。Windows環境中采用微軟“發明”的OLE DB數據連接技術,可以支持對多數關系數據庫的訪問。Linux/Unix也有類似的技術JDBC,它可以為多種關系數據庫提供統一訪問,是由一組用Java語言編寫的類和接口組成。另外一點相當重要的,各種數據庫都對標準SQL做了大量的擴充,要確保統一訪問,必須使用標準的SQL語句。
加脫密引擎的數據庫訪問部分對原有的JDBC訪問接口進行了再次封裝,與數據庫加密保護系統的SQL語法分析功能結合,建立與數據庫的連接,具備簡易、通用、高效的功能。
3)在實現數據庫加密的實踐過程中,發現對于等量的數據進行加密和脫密速度的比較,解密的速度要比加密快得多。得出這種結果的原因并不復雜,是由于字段數據加密時需要做包括創建密文表、動態創建密文表字段、生成表密鑰等大量的初始化工作;而脫密時直接調用存儲在加密字典中的參數,不需要重新生成;如此脫密的執行效率就能夠提高不少。因此,在創建加脫密引擎時,需要區分任務類型,負責加密任務的引擎比負責解密的引擎資源分配多。
該系統在云平臺中的應用場景如圖5所示,用戶使用具備VPN功能的客戶端,客戶端(云端)通過VPN建立與云平臺的安全通道,數據經VPN安全通道進入平臺安全域下的虛擬主機(應用系統)后,再通過VPN安全通道與數據庫加密保護系統建立VPN安全通道。不同的用戶通過VLAN進行邏輯隔離。因此數據從客戶端到平臺,再由平臺到安全域的虛擬主機(應用系統),然后再由虛擬主機(應用系統)到數據庫加密保護系統是安全的。

圖5 應用場景Fig.5 Application scenarios
本文介紹了云計算環境下數據庫加密保護系統的設計和應用。對數據庫加密保護系統進行了結構設計并對各功能模塊進行了詳細的說明,同時結合實踐討論了實現數據庫加密保護系統過程中需要解決的一些關鍵問題及其解決方案。根據本文理論建立的數據庫加密保護系統經過實驗證明工作狀況穩定,性能基本達到設計需求。數據庫加密保護系統具有一定的科研意義和工程應用價值。
[1]李德毅.云計算支持信息服務社會化、集約化和專業化[J].重慶郵電大學學報,2010,22(6):698-702.LIDe-yi.Cloud computing supportssociality,intensivenessand specialization of information service[J].Jeurnal of Chongqing University of Posts and Telecommunications,2010,22 (6):698-702.
[2]馮登國,張敏,張妍,等.云計算安全研究[J].軟件學報,2011,22(1):71-83.FENG Deng-guo,ZHANGMin, ZHANG Yan,et al.Study on cloud computing security[J].Journalof Software,2011,22(1):71-83.
[3]張培穎.2012中國云安全調查報告 [EB/OL].http://www.searchcloudcomputing.com.cn/showcontent_64418.h-tm,2012.
[4]王茜,朱志祥,史晨昱,等.應用于數據庫安全保護的加解密引擎系統[J].計算機技術與發展,2014,24(1):143-146.WANG Qian,ZHU Zhi-xiang,SHIChen-yu,et al.Encryption and decryption engine system applying to database security and detection[J].Computer Technology and Development,2014,24(1):143-146.
[5]Santos N,Gummadi K P,Rodrigues R.Towards trusted cloud computing[J].in Proceedings of the 2009 conference on Hot topics in cloud computing[R],2009.
[6]Sudipto Das,Divyakant Agrawal,Amr El Abbadi.G-Store:AScalable Data Store for Transactional Multi key Access in the Cloud[R].In ACM SoCC2010,2010.
[7]Sudipto Das,Divyakant Agrawal,Amr El Abbadi.ElasTraS:An Elastic,Scalable, and Self Managing Transactional Database for the Cloud[R].Technical Report 2010-04, CS, UCSB,2010.
[8]Carlo Curino,Evan RC,Jones,Raluca Ada Popa,Nirmesh Malviya.Relational Cloud:ADatabase-as-a-Service for the Cloud[R].CIDR2011,2011.
[9]徐江峰,馬瑤.一種基于動態密鑰的數據庫加密方案[J].微計算機信息,2009,25( 12-3):12-13.XU Jiang-feng,MA Yao.Ascheme of database encryption based on dynamical secret[J].Microcomputer Information,2009,25(12-3):12-13.
[10]懷艾芹.基于DBMS外層的網絡數據庫加密系統的研究與設計[J].電腦開發與應用,2011,24(4):29-31.HUAI Ai-qin.Research and design of network database encryption system based on external DBMS[J].Computer Development&Applications,2011,24(4):29-31.
[11]陳睿.密文數據庫系統的密鑰管理與加脫密引擎[J].計算機與現代化,2009(7):57-59.CHEN Rui.Key management and database encryption engine in encryption database system[J].Computer and Modernization,2009(7):57-59.
[12]鄒旎彬.數據庫加密系統的設計與實現[D].南京:東南大學,2005.