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