摘要:數據庫是企業信息系統運轉的核心,同時數據庫也是黑客攻擊的主要目標,因此,研究一種有效的數據庫加密技術對企業的信息安全十分重要。介紹了SQL Server數據庫的安全問題和常見的數據庫加密技術,提出了一種針對于數據庫列的內部加密技術。實驗結果表明,針對列的內部加密技術不僅能夠取得理想的保密效果,同時也得到了最優化的數據庫運行性能。
關鍵詞:SQL Server;數據庫;加密
中圖分類號:TP391 文獻標識碼:A 文章編號:1009-3044(2009)15-3847-02
SQL Server-based Database of Internal Encryption Technology
LIU Jian
(Information Engineering Department of Hunan Urban Construction College, Xiangtan 411101, China)
Abstract: Enterprise Information System database is the core operation, while the database is the main objective of hacker attacks, and therefore the study of an effective database encryption technology for enterprise information security is very important. Introduced a SQL Server database security issues and a common database encryption technology, a column in the database for internal encryption technology. The experimental results show that listed on the internal encryption technology can not only achieve the desired confidentiality, but will also be the most optimized performance of the database.
Key words: SQL Server; database; encryption
1 引言
企業信息系統的發展將數據的安全問題提到前所未有的高度。一方面,企業本身需要對自己的關鍵數據進行有效的保護另一方面,越來越多的企業開始從應用服務提供商一,處獲得應用支待和服務,在這種情況下,企業的業務數據存放在處,其安全性無法得到有效的保障。因為傳統的數據庫保護方式是通過設定口令字和訪問權限等方法實現的,這就留下了一個很大的安全漏洞一數據庫管理員可以不加限制地訪問數據庫中的所有數據。解決這一問題的關鍵是要對數據本身加密,即使數據不幸泄露或丟失,也難以被人破譯。[1]
數據庫加密系統,其實現的主要功能是對存儲在數據庫中的數據進行不同級的存儲加密。這樣就有效的保護了存儲在數據庫中的重要數據,即使某一用戶非法入侵到系統中或盜得了數據庫文件,沒有解密密鑰,他也不能得到所需數據。所以數據庫的加密處理對保護數據的安全性具有非常重要的意義。
2 SQL Server的常見安全問題
SQL Server 2005已經被眾多信息系統采用,但在安全方面還是存在一些技術或者是管理上的問題。
1)空口令或弱口令:初學者在安裝SQL Server時為了省事,SQL Server管理員sa 用的是空口令或弱口令,這樣危險性十分巨大,而這些危險往往是初學者意識不到的,小王就覺得,自己的庫是試驗數據,沒什么用,即使別人連上庫也無所謂。殊不知SQL Server的默認用戶sa的權限非常巨大,有種觀點是sa的權限要大于administrator的權限,也就是說沒有限制的sa用戶可以做Windows系統管理員所做的任何事。
2)注入和跨庫攻擊:注入和跨庫攻擊可能是這幾年黑客攻擊中最流行的詞了,它的原理和上面講的都是獲得了SQL Server管理員sa的權限,從而控制數據庫,還可以利用xp_cmdshell這樣的SQL Server的擴展存儲過程控制Windows系統。注入和空口令獲取sa權限的方法不同,注入是ASP程序在連接SQL Server時有漏洞,黑客利用漏洞獲取了sa權限。
3)SQL Server不打補丁的漏洞:沒打補丁的SQL Server存在著眾多的漏洞,無論你的權限設置的多么嚴格都能被輕易攻破。
3 數據庫加密技術介紹
3.1 加密層次
數據庫加密大致可以分為兩種方式外部加密和內部加密。數據庫的外部加密,一般選擇在應用程序和操作系統,通過調用加解密函數來完成加密數據的存儲和訪問。外部加密的優點是,不需要修改,只需要在應用程序或者操作系統中增加相應的加解密模塊即可。但是,這種方法也有一些缺點,首先它不能支持各種加密粒度。其次,它僅僅對用戶數據進行加密而不能對元數據索引數據日志等進行加密再者,數據的完整性檢查需要應用程序來完成,因為數據加密后,沒有辦法在DBMS中進行完整性檢查,而需要在應用程序中增加這項功能,實現起來非常麻煩。在操作系統中加密時,加密的粒度是基于文件,對應到數據庫中則是相應的表或者整個數據庫,這種加密粒度非常粗糙,最直接的影響是,加解密的工作相當大,極大地降低系統性能。
在數據庫內部加密一般選擇在數據物理存取之前進行加解密操作也就是說,DBMS在將內存中的數據寫到如磁盤時,進行加密操作,而從磁盤讀取數據到內存中時,進行相應的解密操作。這種方法的優點是,由于DBMS能夠區分各種粒度的數據,所以可以支持各種粒度的加密,加密的靈活性較好。另外,在DBMS內部實現加密,可以更有效地和DBMS內部的訪問控制機制、授權機制等各種功能結合起來。更重要的是,數據庫一個重要特點是被多個應用共享,這種方法的加解密都是在DBMS內部完成,對應用程序是透明的,不需要在多個應用中進行修改,容易保持數據的一致性。缺點是需要修改DBMS的內核,DBMS是一個非常復雜的軟件,對它進行修改是一件非常艱巨任務。
3.2 加密粒度
按照數據庫的結構層次,數據庫的加密粒度可以分為數據庫級、表級、記錄級、字段級和數據項級。根據不同的應用需要,選擇合適的加密粒度。[2]
字段加密的對象是關系中的某個字段,字段級加密是一個很好的選擇,因為在實際生活中,一些重要和敏感的信息往往出現在關系中的某些列,如信用卡號、身份證號、銀行賬號等,只需要對這些重要數據進行加密保護,而沒有必要對普通數據也進行加密。例如,有一個客戶表,它包含客戶、姓名、地址和信用卡號。在這個表中,沒有必要去加密客戶,我們最想加密的字段是信用卡號。在實現字段級加密時,可以采取多種方式,既可以在DBMS外部完成,也可以在DBMS內部完成。
3.3 加密算法
加密算法是數據加密的核心,加密算法本身的好壞直接影響數據庫加密的安全和性能。一個好的加密算法產生的密文應該頻率平衡,隨機無重碼規律,周期很長而又不可能產生重復現象。攻擊者很難通過對密文頻率、重碼等特征的分析獲得成功。通常來說,加密算法有對稱算法和非對稱算法。對稱算法有時又叫傳統密碼算法,就是加密密鑰能夠從解密密鑰推算出來,反過來也成立。在大多數對稱算法中,加密密鑰和解密密鑰是相同的。[3]
在對數據庫存儲數據進行加密時對稱加密算法使用最為廣泛這是因為,與非對稱加密算法相比,對稱加密算法的速度快了幾十甚至幾百倍,對系統的性能影響較小。對稱算法又可分為兩類序列密碼和分組密碼。目前數據庫加密常用的算法有:AES、DES、3DES、RC5等。
4 數據庫加密系統設計
4.1 設計目標
根據實際項目需求和前面章節的的理論研究先提出基于擴展存儲過程的數據庫加密系統”設計目標如下:
1)利用數據庫加密技術,對數據庫中存儲的“敏感”數據實現字段級加密;2)實現對數據的存儲加密和密文檢索等操作;3)保證加解密處理過程中的數據完整性;4)屏蔽密文數據對應用程序的開發影響,開發人員通過加密系統能實現對密文數據的“透明訪問”。
4.2 系統工作模型
數據庫加密系統由SQL解析模塊、數據庫對象、加解密動態鏈接庫和加密系統管理程序組成。系統的工作工程如下:
1)加密系統中的“SQL分析模塊”對提交的SQL語句進行語法分析和擴展,根據DBMS中的“加密字典”對SQL語句進行“解析擴展”;2)加密系統將重組后的SQL語句提交給DBMS,DBMS通過“數據庫對象”調用“加解密動態庫”對數據庫中的密文數據進行解密,并將解密后結果反饋給“數據庫對象”;3)應用程序通過“數據庫對象”獲取解密后的明文數據。
4.3 開發平臺
本系統運行在數據庫服務器上,其開發平臺及工具如下所示:
1)操作系統:Windows Server 2003;2)數據庫:Microsoft SQL Server 2005;3)設計工具:Microsoft Visio 2005;4)開發平臺:JDK 6.0,MyEclipse 6.5。
4.4 關鍵技術及實現
本文實現的加密系統是通過SQL解析模塊與應用程序相接,從而實現了應用程序對DBMS中密文數據的“透明訪問”,所以SQL解析模塊也是整個加密系統設計中的關鍵所在。由于T-SQL語句的語法結構比較復雜,所以SQL語句解析模塊的設計也是整個加密系統中的一個難點問題。通過對語法結構進行裁減語法描述參見后,設計實現了語句解析模塊。模塊由“數據初始化方法”和4個核心方法“SELECT子句解析方法”、“INSERT子句解析方法”、“DELETE子句解析方法”和“UPDATE子句解析方法”所組成。
由于3DES也是基于DES的分組加密算法,其加密時也是按位二進制位對明文進行分組,所以當明文的長度不是8Bytes的整數倍時,就需要對明文進行字節對齊使得明文的長度為8Bytes的整數倍這樣字節對齊后帶的問題是解密后,需要還原在加密前進行了字節對齊操作的明文。
為了解決上述分組加密算法帶來的問題,加密DES模塊在設計中,采用ASCII碼為0x00的字符,對齊不是8Bytes整數倍的明文,當解密還原為二進制的字符串后,由于其解密后的字符串也是用0x00填充,所以無需做特殊處理,直接進行類型轉換即可保證數據在加、解密前后的一致性。
5 總結
分析了目前信息安全領域中,數據庫安全所存在的問題,深入研究了數據庫加密系統的相關理論,以數據庫的內部字段級加密為基礎,設計并實現了數據庫的加密系統。該加密系統在基于B/S系統中的運行情況表明,系統不僅滿足了數據保密性要求,在系統性能方面也得到了很好的保證。
參考文獻:
[1] 王正飛.數據庫加密技術及其應用研究[D].上海:復旦大學,2005.
[2] 王元珍,馮超.數據庫加密系統的研究與實現[J].計算機工程與應用,2005(8):170-172.
[3] 鮑勇.基于擴展存儲過程的數據庫加密系統研究[D].武漢:武漢理工大學,2006.