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