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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

圖2示意系統(tǒng)插入數(shù)據(jù)和查詢數(shù)據(jù)時(shí),系統(tǒng)是如何工作的,當(dāng)用戶要向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)時(shí),用戶應(yīng)用程序通過(guò)通信接口系統(tǒng)向服務(wù)器發(fā)送SQL命令,服務(wù)器數(shù)據(jù)庫(kù)加密系統(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)換表,對(duì)數(shù)據(jù)文件加密,然后將密文二進(jìn)制數(shù)據(jù)插入數(shù)據(jù)庫(kù)中,同時(shí)將新節(jié)點(diǎn)插入密文索引樹(shù)中。當(dāng)用戶發(fā)起查詢時(shí),系統(tǒng)進(jìn)行密文檢索,將檢索的密文解密,并構(gòu)造返回?cái)?shù)據(jù)集,通過(guò)通信和系統(tǒng)接口模塊發(fā)送給用戶程序。

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

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

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

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

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

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