SQL Server數(shù)據(jù)庫文件加密系統(tǒng)如何設(shè)計

SQL Server是目前主流的中小型企業(yè)級數(shù)據(jù)庫,它提供了用戶注冊、識別用戶、DAC、審計等安全功能。然而,DBA(數(shù)據(jù)庫管理員)具有至高無上的權(quán)力,比如他能夠進(jìn)行用戶授權(quán)、資源分配與回收、設(shè)置系統(tǒng)安全策略等操作,它能夠利用DBA的權(quán)限對數(shù)據(jù)庫敏感信息進(jìn)行隨意查詢與修改,這是很多應(yīng)用系統(tǒng)中不被容許的行為。如果通過數(shù)據(jù)文件加密機(jī)制的設(shè)計與實(shí)現(xiàn),就能夠構(gòu)建安全的SQL Server企業(yè)應(yīng)用。

一、數(shù)據(jù)庫文件加密系統(tǒng)的關(guān)鍵技術(shù)分析

數(shù)據(jù)庫文件加密系統(tǒng)需要使用的基本技術(shù)有:字段加密、動態(tài)密鑰管理、數(shù)據(jù)的合理處理以及用戶使用透明處理。比較關(guān)鍵的技術(shù)有動態(tài)密鑰管理和加密數(shù)據(jù)庫的密文檢索機(jī)制的實(shí)現(xiàn)。

1、數(shù)據(jù)庫文件加密系統(tǒng)的動態(tài)密鑰管理

密鑰管理有許多不同的實(shí)現(xiàn)方法,其中基于轉(zhuǎn)換表的密鑰管理方案是一種比較好的方案。密鑰轉(zhuǎn)換表是通過密鑰轉(zhuǎn)換來實(shí)現(xiàn)的,其安全強(qiáng)度只依賴于加密算法的安全強(qiáng)度。

密鑰轉(zhuǎn)換是指合法用戶在訪問數(shù)據(jù)庫中的某數(shù)據(jù)時,將自己的用戶密鑰作為一個參數(shù)送入密鑰管理系統(tǒng),系統(tǒng)利用轉(zhuǎn)換函數(shù)得到數(shù)據(jù)密鑰,從而實(shí)現(xiàn)數(shù)據(jù)庫文件的加密和解密。我們可以構(gòu)造數(shù)據(jù)庫文件加密系統(tǒng)中的密鑰轉(zhuǎn)換表,實(shí)現(xiàn)數(shù)據(jù)庫文件加密系統(tǒng)的動態(tài)密鑰管理。

2、高效的數(shù)據(jù)庫密文檢索機(jī)制

對于加密后的數(shù)據(jù)庫文件,由于密文數(shù)據(jù)不再保持明文數(shù)據(jù)原有的順序關(guān)系,因此,當(dāng)需要查詢時,必須將涉及到查詢條件的密文字段進(jìn)行解密,或是將整個數(shù)據(jù)表解密得到明文數(shù)據(jù),然后再進(jìn)行查詢。這種密文查詢方式弊端很明顯,系統(tǒng)開銷很大。如何高效地對密文數(shù)據(jù)進(jìn)行查詢,成為一個全新的研究領(lǐng)域。目前已經(jīng)有人提出了同態(tài)加密算法,實(shí)現(xiàn)機(jī)理是加密后的密文數(shù)據(jù)具有保序性,這樣方便查詢,但是攻擊者可以通過這種保序的密文進(jìn)行攻擊,通過部分明文就能夠攻破系統(tǒng)。

鑒于這種方法的不足,人們提出了密文索引技術(shù),也就是將DBMS提供的索引功能進(jìn)行改造,構(gòu)造密文索引。這一般通過B+樹來實(shí)現(xiàn),通過開發(fā)的數(shù)據(jù)庫文件加密系統(tǒng)將加密字段中的字段密文信息存入系統(tǒng)構(gòu)建的密文索引樹中。在明文數(shù)據(jù)庫中,索引樹中每個節(jié)點(diǎn)主要存放數(shù)據(jù)和指針兩類信息,可將每個節(jié)點(diǎn)中的數(shù)據(jù)用其對應(yīng)的密文代替,通過這種方式可以產(chǎn)生一棵密文數(shù)據(jù)庫的密文索引樹。用戶在查詢和數(shù)據(jù)檢索時,先將密文索引樹的根節(jié)點(diǎn)解密并與查詢條件進(jìn)行比較,通過比較決定下一個檢索節(jié)點(diǎn)的所在的子樹位置,通過這種方式一直檢索下去,直到查詢到所有滿足條件的節(jié)點(diǎn)。使用這種方法,解密次數(shù)為密文索引樹的深度,其查詢數(shù)據(jù)比全表或是整個字段解密速度要快得多。

二、SQL Server數(shù)據(jù)庫文件加密系統(tǒng)的實(shí)現(xiàn)方案

SQL Server數(shù)據(jù)庫文件加密系統(tǒng)可以通過兩種方法實(shí)現(xiàn),這些方法都是在SQL Server數(shù)據(jù)庫的基礎(chǔ)上開發(fā)類似“外掛”系統(tǒng)的數(shù)據(jù)庫文件加密系統(tǒng)來實(shí)現(xiàn)。

1、基于系統(tǒng)擴(kuò)展存儲過程實(shí)現(xiàn)的數(shù)據(jù)庫文件加密方案

微軟SQL Server 2000通過擴(kuò)展存儲過程訪問數(shù)據(jù)庫外部對象,例如SQL Server數(shù)據(jù)庫應(yīng)用程序能通過擴(kuò)展存儲過程讀寫操作系統(tǒng)文件,也能夠通過擴(kuò)展存儲過程調(diào)用其它Win32應(yīng)用程序,或是和他們交換數(shù)據(jù)。如采用擴(kuò)展存儲過程實(shí)現(xiàn)了一個簡單的數(shù)據(jù)庫文件加密系統(tǒng),主要方法是通過VC開發(fā)的擴(kuò)展存儲過程調(diào)用系統(tǒng)加密和解密模塊、密文索引模塊、動態(tài)密鑰管理模塊等實(shí)現(xiàn)數(shù)據(jù)庫文件加密系統(tǒng),這種加密方式是通過SQL Server提供的功能來實(shí)現(xiàn)的,實(shí)現(xiàn)起來比較簡單,開發(fā)周期短,適合于加密要求不高的企業(yè)用戶使用。

但是這種加密方式有其天生的缺點(diǎn)——對數(shù)據(jù)庫管理員留有攻擊的缺口,因?yàn)橄到y(tǒng)擴(kuò)展存儲過程對系統(tǒng)管理員來說是可見的,系統(tǒng)管理員可以刪除擴(kuò)展存儲過程讓數(shù)據(jù)庫文件加密系統(tǒng)無法工作,也可以進(jìn)行強(qiáng)力攻擊進(jìn)行破解。

2、SQL Server數(shù)據(jù)庫文件加密系統(tǒng)實(shí)現(xiàn)方案

(1)SQL Server數(shù)據(jù)庫文件加密系統(tǒng)的系統(tǒng)結(jié)構(gòu),如圖1所示。

SQL Server數(shù)據(jù)庫文件加密系統(tǒng)如何設(shè)計

通訊和數(shù)據(jù)庫文件加密系統(tǒng)的接口系統(tǒng)主要負(fù)責(zé)客戶端和服務(wù)器的通信,以及為客戶端應(yīng)用程序提供系統(tǒng)接口。在這個模塊中,要設(shè)計一種客戶端和服務(wù)器端能夠正確進(jìn)行通訊的數(shù)據(jù)集,這種數(shù)據(jù)集要保證和SQL Server數(shù)據(jù)集兼容。

加密字典管理系統(tǒng)是數(shù)據(jù)庫管理員定義數(shù)據(jù)庫加密項(xiàng)的工具,它提供創(chuàng)建加密字典、刪除加密字典、加密字典權(quán)限管理等功能,它利用數(shù)據(jù)庫加密和解密引擎來完成數(shù)據(jù)的加加密和解密處理。

密鑰轉(zhuǎn)換表和密文索引配置管理系統(tǒng)主要功能是配置管理密鑰轉(zhuǎn)換表和密文索引機(jī)制。系統(tǒng)管理員可以通過該系統(tǒng)創(chuàng)建和刪除密鑰轉(zhuǎn)換表,同時也可以對其進(jìn)行配置。

密文索引系統(tǒng)能夠根據(jù)構(gòu)造密文索引樹,是系統(tǒng)核心模塊之一。

數(shù)據(jù)庫加密和解密引擎位于用戶應(yīng)用程序和SQLServer之間,是數(shù)據(jù)庫文件加密系統(tǒng)的核心部件,負(fù)責(zé)數(shù)據(jù)庫文件的加密和解密處理,對應(yīng)用戶和開發(fā)人員是透明的。它由加密和解密處理模塊、SQL解析模塊、系統(tǒng)接口模塊、密鑰管理接口模塊、密文檢索接口模塊和數(shù)據(jù)庫接口模塊組成。

加密和解密處理模塊是對系統(tǒng)需要加密和解密數(shù)據(jù)進(jìn)行加密和解密處理的模塊,是系統(tǒng)的核心模塊之一,它主要有系統(tǒng)加密和解密算法、內(nèi)部專用命令處理模塊、密鑰轉(zhuǎn)換表接口模塊和SQL命令加載模塊等組成。

語法分析模塊的功能是將SQL語句轉(zhuǎn)換成易處理的樹形式的語法結(jié)構(gòu)。該模塊由詞法分析器、語法分析器、語法錯誤處理、語法樹轉(zhuǎn)換成SQL命令等子模塊組成。在進(jìn)行語法分析時,先對SQL命令進(jìn)行詞法分析,分割成各個詞法單位,再輸入語法分析器,得到一棵語法樹。語法分析模塊還包括語法樹反向生成SQL命令的功能函數(shù),用于將經(jīng)過加密變換后的語法樹轉(zhuǎn)換成新的SQL語句。

密鑰管理接口模塊和密文檢索接口模塊分別提供密鑰管理系統(tǒng)和密文索引系統(tǒng)的接口。

數(shù)據(jù)庫接口模塊封裝對SQL Server數(shù)據(jù)庫的訪問操作。該模塊包含兩部分接口,一是前端數(shù)據(jù)庫客戶訪問數(shù)據(jù)庫加密和解密引擎的接口函數(shù),二是數(shù)據(jù)庫加密和解密引擎訪問后臺數(shù)據(jù)庫服務(wù)器的接口函數(shù)。

(2)SQL Server數(shù)據(jù)庫文件加密系統(tǒng)插入數(shù)據(jù)和查詢數(shù)據(jù)流程

SQL Server數(shù)據(jù)庫文件加密系統(tǒng)如何設(shè)計

圖2示意系統(tǒng)插入數(shù)據(jù)和查詢數(shù)據(jù)時,系統(tǒng)是如何工作的,當(dāng)用戶要向數(shù)據(jù)庫中插入數(shù)據(jù)時,用戶應(yīng)用程序通過通信接口系統(tǒng)向服務(wù)器發(fā)送SQL命令,服務(wù)器數(shù)據(jù)庫加密系統(tǒng)首先解析用戶的SQL命令并進(jìn)行操作權(quán)限檢查,完成后,系統(tǒng)將提取的用戶數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,將其轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)類型,當(dāng)用戶數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)后,系統(tǒng)根據(jù)用戶ID信息以及用戶密鑰查找密鑰轉(zhuǎn)換表,對數(shù)據(jù)文件加密,然后將密文二進(jìn)制數(shù)據(jù)插入數(shù)據(jù)庫中,同時將新節(jié)點(diǎn)插入密文索引樹中。當(dāng)用戶發(fā)起查詢時,系統(tǒng)進(jìn)行密文檢索,將檢索的密文解密,并構(gòu)造返回數(shù)據(jù)集,通過通信和系統(tǒng)接口模塊發(fā)送給用戶程序。

3、SQL Server數(shù)據(jù)庫文件加密系統(tǒng)實(shí)現(xiàn)動態(tài)模型圖

根據(jù)以上分析與設(shè)計,我們可以得到SQL Server數(shù)據(jù)庫文件加密系統(tǒng)實(shí)現(xiàn)的動態(tài)數(shù)據(jù)模型圖如圖3所示。

SQL Server數(shù)據(jù)庫文件加密系統(tǒng)如何設(shè)計

從圖3中我們可以清楚地看到對數(shù)據(jù)庫文件訪問的整個過程,這個過程和“SQL Server數(shù)據(jù)庫文件加密系統(tǒng)插入數(shù)據(jù)和查詢數(shù)據(jù)流程”是一致的。這樣,我們就實(shí)現(xiàn)了 SQL_Server數(shù)據(jù)庫文件更高安全性的加密。

小知識之同態(tài)加密

同態(tài)加密是基于數(shù)學(xué)難題的計算復(fù)雜性理論的密碼學(xué)技術(shù)。對經(jīng)過同態(tài)加密的數(shù)據(jù)進(jìn)行處理得到一個輸出,將這一輸出進(jìn)行解密,其結(jié)果與用同一方法處理未加密的原始數(shù)據(jù)得到的輸出結(jié)果是一樣的。