基于擴展存儲過程的數(shù)據(jù)庫加密技術(shù)

利用加密技術(shù)對數(shù)據(jù)庫文件進行加密能夠有效地保證數(shù)據(jù)的安全,即使黑客竊取了關(guān)鍵數(shù)據(jù),得到的也只是密文,他仍然難以得到所需要的信息。實現(xiàn)數(shù)據(jù)庫加密以后,各用戶(或用戶組)的數(shù)據(jù)由用戶用各自的密鑰加密,從而保證了用戶信息的安全。另外,經(jīng)過加密的敏感數(shù)據(jù)在數(shù)據(jù)庫的備份中以密文形式存在,從而減少因備份介質(zhì)失竊或丟失而造成的損失。因此,數(shù)據(jù)庫文件加密對于保障數(shù)據(jù)安全十分重要。

文章介紹了擴展存儲過程技術(shù),并在此基礎(chǔ)上提出了一個數(shù)據(jù)庫加密系統(tǒng)邏輯模型,分析了各主要模塊,實現(xiàn)了基于擴展存儲過程的數(shù)據(jù)庫加密系統(tǒng)。

一、擴展存儲過程

擴展存儲過程是一種特殊的存儲過程。它通過Microsott的開放式數(shù)據(jù)服務(wù)(open data services,ODS)技術(shù),提供了一個基于服務(wù)器的編程接口來擴展SQL Server的功能。從而用戶可以使用高級語言創(chuàng)建自己的外部例程,以滿足特定的功能需求。擴展存儲過程實質(zhì)上是SQL Server可以動態(tài)裝載并執(zhí)行的動態(tài)鏈接庫,可直接在SQL Server的地址空間運行,并使用SQL Server ODS APl(application programming interface)編程。

擴展存儲過程的工作原理如圖1所示。

基于擴展存儲過程的數(shù)據(jù)庫加密技術(shù)

擴展存儲過程是關(guān)系數(shù)據(jù)庫引擎的開放式數(shù)據(jù)服務(wù)層的一部分,而開放式數(shù)據(jù)服務(wù)層是該引擎和服務(wù)器Net-Iibrary之間的接口。服務(wù)器Net-Library接收客戶端TDS (tabular datastream)數(shù)據(jù)包并將它們傳遞給開放式數(shù)據(jù)服務(wù)。開放式數(shù)據(jù)服務(wù)將TDS數(shù)據(jù)包轉(zhuǎn)換成事件并傳遞到關(guān)系數(shù)據(jù)庫引擎的其它部分。而后數(shù)據(jù)庫引擎使用開放式數(shù)據(jù)服務(wù),通過服務(wù)器
Net-Library將回復(fù)發(fā)送回SQL Server客戶端。

二、系統(tǒng)的設(shè)計

1、系統(tǒng)設(shè)計目標

一個有效的數(shù)據(jù)庫加密系統(tǒng),必須達到以下目標:

①利用加密技術(shù),對數(shù)據(jù)庫中存儲的“敏感”數(shù)據(jù)實現(xiàn)字段級加密:

②恰當?shù)靥幚頂?shù)據(jù)類型轉(zhuǎn)換等問題,保證加密和解密處理過程中數(shù)據(jù)的完整性;

⑨使用戶不需考慮數(shù)據(jù)的加、解密過程,實現(xiàn)數(shù)據(jù)庫合法用戶對于數(shù)據(jù)的錄入、修改和檢索操作的透明性;

④實現(xiàn)對各級加密密鑰的存儲和管理。

2、系統(tǒng)的模塊劃分

系統(tǒng)實現(xiàn)的邏輯模型如圖2所示。

基于擴展存儲過程的數(shù)據(jù)庫加密技術(shù)

系統(tǒng)可以劃分為3大模塊:加/解密引擎模塊、數(shù)據(jù)庫對象模塊和加密系統(tǒng)管理模塊。

加/解密引擎模塊是數(shù)據(jù)庫加密系統(tǒng)的核心部分,它由加/解密動態(tài)庫和SQL語句解析兩部分組成,實現(xiàn)對應(yīng)用程序提交的SQL語句的解析、對加密密鑰的加載以及對數(shù)據(jù)信息的加/解密處理;

數(shù)據(jù)庫對象模塊是數(shù)據(jù)庫加密系統(tǒng)與DBMS的接口,數(shù)據(jù)庫加密系統(tǒng)通過該模塊實現(xiàn)對數(shù)據(jù)庫的訪問和操作,而DBMS則通過該模塊調(diào)用加/解密動態(tài)庫來實現(xiàn)相應(yīng)的加、解密操作;

加密系統(tǒng)管理模塊用于系統(tǒng)管理員對密文數(shù)據(jù)庫中的信息及加密密鑰進行管理,如修改加密字段信息、加載密鑰和變更加密密鑰等。

下面以應(yīng)用程序訪問密文數(shù)據(jù)庫為例,簡要說明系統(tǒng)的工作原理:

首先,SQL解析模塊對應(yīng)用程序提交的SQL語句進行分析,根據(jù)DBMS中的加密字典對SQL語句進行解析和擴展;

然后,加密系統(tǒng)將重組后的SQL語句提交給DBMS。DBMS通過數(shù)據(jù)庫對象模塊調(diào)用加/解密動態(tài)庫,對數(shù)據(jù)庫中的密文數(shù)據(jù)進行解密,并將解密后的結(jié)果反饋給數(shù)據(jù)庫對象模塊;

最后,應(yīng)用程序通過數(shù)據(jù)庫對象模塊獲取解密后的明文數(shù)據(jù)。

3、加/解密引擎模塊

(1) 加/解密動態(tài)庫

加/解密動態(tài)庫是加/解密引擎模塊的核心部分,也是整個加密系統(tǒng)的核心。動態(tài)鏈接庫(dynamic link library,DLL)是一個可以被其它應(yīng)用程序共享的程序模塊,其中封裝了一些可以被共享的例程和資源,由Windows應(yīng)用程序直接或間接調(diào)用來執(zhí)行。系統(tǒng)中的加/解密動態(tài)庫主要實現(xiàn)了3DES加密算法、不同數(shù)據(jù)類型與二迸制流之間的相互轉(zhuǎn)換和加密密鑰的加載等。加/解密動態(tài)庫由數(shù)據(jù)庫對象模塊的加/解密存儲過程根據(jù)需要調(diào)用并執(zhí)行,從而實現(xiàn)相應(yīng)的功能。

①3DES加密算法:3DES(即Triple DES)是DES向AES過渡的加密算法,是DES的一個更安全的變形,三重DES增加了密鑰長度。因此,系統(tǒng)中采用3DES算法實現(xiàn)對數(shù)據(jù)信息的加/解密,具有較高的安全性。

②不同數(shù)據(jù)類型與二進制流之間的相互轉(zhuǎn)換:由于數(shù)據(jù)庫中字段的數(shù)據(jù)類型是多樣的,就需要考慮不同數(shù)據(jù)類型與二進制流之間的相互轉(zhuǎn)換。當用戶讀數(shù)據(jù)時,首先將密文二進制流數(shù)據(jù)解密為明文二進制流,而后根據(jù)加密字典中的信息,通過UDF(user-defined func-tions)將明文二進制流轉(zhuǎn)換為與之匹配的數(shù)據(jù)類型之后返回給前臺用戶:當用戶對密文字段寫入數(shù)據(jù)時,首先將寫入的數(shù)據(jù)類型轉(zhuǎn)換為二進制流類型,對轉(zhuǎn)換后的二進制流數(shù)據(jù)進行加密并保存。

③加密密鑰的加載:由于系統(tǒng)中對數(shù)據(jù)的存儲加密采用的是對稱加密算法,所以整個加,解密的過程中密鑰的保護尤為重要。系統(tǒng)中的加密密鑰保存在硬介質(zhì)智能卡中,通過密鑰加載程序?qū)⒚荑€從智能卡中讀出,而后將讀出的密鑰加載到數(shù)據(jù)庫服務(wù)器端的共享內(nèi)存區(qū)。加,解密動態(tài)庫通過密鑰在共享內(nèi)存區(qū)的用戶自定義索引獲取加/解密密鑰。

加密密鑰的加載過程如圖3所示。

基于擴展存儲過程的數(shù)據(jù)庫加密技術(shù)

(2) SQL語句解析

SQL語句的解析需要用到數(shù)據(jù)庫對象模塊的加密字典和UDF。加密字典表保存了數(shù)據(jù)庫中密文字段的字段名、數(shù)據(jù)類型、加/解密UDF等相關(guān)信息。而UDF則用來調(diào)用相應(yīng)的擴展存儲過程最終實現(xiàn)對數(shù)據(jù)的加密和解密。

在對SQL語句進行解析時,主要是進行詞法和語法分析,獲取相應(yīng)的語法樹,并與加載到內(nèi)存中的加密字典相比對,在各個需要加密的字段上應(yīng)用相應(yīng)的UDF,實現(xiàn)對SQL語句的擴展。

4、數(shù)據(jù)庫對象模塊

該模塊主要包括了擴展存儲過程、用戶自定義函數(shù)和加密字典等內(nèi)容。

(1)擴展存儲過程和用戶自定義函數(shù)_

在系統(tǒng)的設(shè)計中,擴展存儲過程和UDF對加/解密動態(tài)庫進行了封裝。從而通過擴展存儲過程和UDF實現(xiàn)了對密鑰的加載和數(shù)據(jù)的加、解密過程。

(2)加密字典

加密字典實際上是數(shù)據(jù)庫中的一張表,如同設(shè)計數(shù)據(jù)庫系統(tǒng)中所用到的“數(shù)據(jù)字典”一樣。加密字典中保存的是所有密文字段的相關(guān)信息。加密字典經(jīng)由加/解密引擎模塊加載到數(shù)據(jù)庫服務(wù)器內(nèi)存,它分為兩個線性鏈表:表名鏈表和字段名鏈表。字段名鏈表通過Tablelndex與表名鏈表建立起映射。

在對SQL語句進行解析時,首先遍歷表名鏈表,對語句中出現(xiàn)的密文表名進行標記。在解析到字段信息時,遍歷字段名鏈表,并通過Tablelndex索引表名鏈表中對應(yīng)的結(jié)點,從而對密
文字段應(yīng)用相應(yīng)的UDF。

5、加密系統(tǒng)管理模塊

密鑰管理是整個數(shù)據(jù)庫加密系統(tǒng)的關(guān)鍵,因為密鑰一旦泄露,數(shù)據(jù)庫中的密文信息就變得毫無意義。所以密鑰的生成、保存、加載和更新操作在整個系統(tǒng)中極為重要。

(1)密鑰的生成:

采用二級密鑰,用于對數(shù)據(jù)庫中數(shù)據(jù)信息進行加密的對稱密鑰和用于對對稱密鑰進行加密的非對稱密鑰對。其中,非對稱的RSA密鑰對在卡內(nèi)生成,對稱密鑰則以密文形式存放于智能卡中,對稱密鑰的加密處理由智能卡的硬件完成。

(2)密鑰的保存:

在加密系統(tǒng)中,非對稱密鑰保存在硬件介質(zhì)“智能卡”中,所以很好的確保了密鑰的安全性;對稱密鑰被非對稱密鑰加密后,通過采用位數(shù)較長的非對稱密鑰和加密強度較高的RSA算法,很好的保證了對稱密鑰的安全性。智能卡(U-KEY)的一個最大特點就是存儲在智能卡EPPROM中的數(shù)據(jù)受硬件保護,用戶如果沒有PIN碼,無法強行從智能卡中獲取EPPROM中的數(shù)據(jù),一旦智能卡硬件被破壞,數(shù)據(jù)也隨之丟失。

(3)密鑰的加載:

存儲在“智能卡”中的非對稱密鑰對,將加密存儲于數(shù)據(jù)庫中的對稱密鑰解密并將其加載于操作系統(tǒng)進程都可以訪問的共享內(nèi)存區(qū),這樣就可以通過對共享內(nèi)存區(qū)的密鑰設(shè)置惟一的標識ID,來索引每一個對稱密鑰。由于標識ID是由系統(tǒng)自定義的,因此能夠很好的確保對稱密鑰的安全性。

(4)密鑰的更新:

系統(tǒng)中通過定期變更“智能卡”中的非對稱密鑰來保證對稱密鑰的安全性。在非對稱密鑰變更時,需將數(shù)據(jù)庫中的對稱密鑰解密后重新加密保存。當對稱密鑰需更新時,加密系統(tǒng)的管理程序根據(jù)加密字典中的信息對原加密信息解密后,用新的密鑰對信息重新加密,然后更新對稱密鑰,從而確保數(shù)據(jù)庫中的密文數(shù)據(jù)在密鑰變更前后的一致性。

該數(shù)據(jù)庫加密系統(tǒng)將SQL語句解析組件嵌套于客戶端的應(yīng)用程序中,使得客戶端應(yīng)用程序?qū)?shù)據(jù)庫的訪問不受加密的影響,從而實現(xiàn)數(shù)據(jù)庫最終用戶對數(shù)據(jù)庫服務(wù)器的“透明訪問”;密鑰管理程序運行在數(shù)據(jù)庫服務(wù)器端,實現(xiàn)對加密系統(tǒng)中密鑰的管理、加載和更新;加密字典管理程序運行在數(shù)據(jù)庫服務(wù)器端,實現(xiàn)對加密字典的管理、對密文字段的變更等功能。

基于擴展存儲過程的數(shù)據(jù)庫加密系統(tǒng)模型,應(yīng)用擴展存儲過程技術(shù),實現(xiàn)了對DBMS內(nèi)核級的功能擴展。該模型已經(jīng)實現(xiàn)并在實際中得到了應(yīng)用,取得了預(yù)期的效果。

小知識之DBMS

數(shù)據(jù)庫管理系統(tǒng)(database management system)是一種操縱和管理數(shù)據(jù)庫的大型軟件,用于建立、使用和維護數(shù)據(jù)庫,簡稱dbms。它對數(shù)據(jù)庫進行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫的安全性和完整性。用戶通過dbms訪問數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)庫管理員也通過dbms進行數(shù)據(jù)庫的維護工作。它可使多個應(yīng)用程序和用戶用不同的方法在同時或不同時刻去建立,修改和詢問數(shù)據(jù)庫。DBMS提供數(shù)據(jù)定義語言DDL(Data Definition Language)與數(shù)據(jù)操作語言DML(Data Manipulation Language),供用戶定義數(shù)據(jù)庫的模式結(jié)構(gòu)與權(quán)限約束,實現(xiàn)對數(shù)據(jù)的追加、刪除等操作。