基于SQL Server的數(shù)據(jù)庫內(nèi)部加密技術(shù)的探討
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
1 引言
企業(yè)信息系統(tǒng)的發(fā)展將數(shù)據(jù)的安全問題提到前所未有的高度。一方面,企業(yè)本身需要對自己的關鍵數(shù)據(jù)進行有效的保護另一方面,越來越多的企業(yè)開始從應用服務提供商一,處獲得應用支待和服務,在這種情況下,企業(yè)的業(yè)務數(shù)據(jù)存放在處,其安全性無法得到有效的保障。因為傳統(tǒng)的數(shù)據(jù)庫保護方式是通過設定口令字和訪問權(quán)限等方法實現(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)采用,但在安全方面還是存在一些技術(shù)或者是管理上的問題。 1)空口令或弱口令:初學者在安裝SQL Server時為了省事,SQL Server管理員sa 用的是空口令或弱口令,這樣危險性十分巨大,而這些危險往往是初學者意識不到的,小王就覺得,自己的庫是試驗數(shù)據(jù),沒什么用,即使別人連上庫也無所謂。殊不知SQL Server的默認用戶sa的權(quán)限非常巨大,有種觀點是sa的權(quán)限要大于administrator的權(quán)限,也就是說沒有限制的sa用戶可以做Windows系統(tǒng)管理員所做的任何事。 2)注入和跨庫攻擊:注入和跨庫攻擊可能是這幾年黑客攻擊中最流行的詞了,它的原理和上面講的都是獲得了SQL Server管理員sa的權(quán)限,從而控制數(shù)據(jù)庫,還可以利用xp_cmdshell這樣的SQL Server的擴展存儲過程控制Windows系統(tǒng)。注入和空口令獲取sa權(quán)限的方法不同,注入是ASP程序在連接SQL Server時有漏洞,黑客利用漏洞獲取了sa權(quán)限。 3)SQL Server不打補丁的漏洞:沒打補丁的SQL Server存在著眾多的漏洞,無論你的權(quán)限設置的多么嚴格都能被輕易攻破。 3 數(shù)據(jù)庫加密技術(shù)介紹 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)部的訪問控制機制、授權(quán)機制等各種功能結(jié)合起來。更重要的是,數(shù)據(jù)庫一個重要特點是被多個應用共享,這種方法的加解密都是在DBMS內(nèi)部完成,對應用程序是透明的,不需要在多個應用中進行修改,容易保持數(shù)據(jù)的一致性。缺點是需要修改DBMS的內(nèi)核,DBMS是一個非常復雜的軟件,對它進行修改是一件非常艱巨任務。 3.2 加密粒度 按照數(shù)據(jù)庫的結(jié)構(gòu)層次,數(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ù),對數(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ù)進行解密,并將解密后結(jié)果反饋給“數(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 關鍵技術(shù)及實現(xiàn) 本文實現(xiàn)的加密系統(tǒng)是通過SQL解析模塊與應用程序相接,從而實現(xiàn)了應用程序?qū)BMS中密文數(shù)據(jù)的“透明訪問”,所以SQL解析模塊也是整個加密系統(tǒng)設計中的關鍵所在。由于T-SQL語句的語法結(jié)構(gòu)比較復雜,所以SQL語句解析模塊的設計也是整個加密系統(tǒng)中的一個難點問題。通過對語法結(jié)構(gòu)進行裁減語法描述參見后,設計實現(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 總結(jié) 分析了目前信息安全領域中,數(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)性能方面也得到了很好的保證。 該文章在 2010/9/30 1:42:45 編輯過 |
關鍵字查詢
相關文章
正在查詢... |