基于三層次的數(shù)據(jù)庫加密應(yīng)用系統(tǒng)
傳統(tǒng)的數(shù)據(jù)庫保護(hù)方式存在許多安全漏洞和缺點(diǎn),為保證系統(tǒng)安全,本文設(shè)計(jì)了一種在現(xiàn)有的信息系統(tǒng)的基礎(chǔ)上建立專用數(shù)據(jù)庫加密應(yīng)用系統(tǒng),并設(shè)計(jì)了系統(tǒng)的各個(gè)模塊,其特點(diǎn)如下:
a、所重要數(shù)據(jù)都是經(jīng)過加密處理的,即使黑客竊取了關(guān)鍵數(shù)據(jù),仍然難以得到所需的信息,另外,大大提高了數(shù)據(jù)的安全性。
b、客戶端實(shí)現(xiàn)數(shù)據(jù)加密,網(wǎng)絡(luò)上傳送的是密文,增加了網(wǎng)絡(luò)傳輸?shù)陌踩?,系統(tǒng)完全獨(dú)立于數(shù)據(jù)庫應(yīng)用系統(tǒng),不需要改變數(shù)據(jù)庫應(yīng)用系統(tǒng)原有功能結(jié)構(gòu)就能實(shí)現(xiàn)加密功能,而且加密、解密運(yùn)算在客戶端進(jìn)行,不會(huì)影響數(shù)據(jù)庫服務(wù)器的系統(tǒng)效率。
c、加密系統(tǒng)與應(yīng)用程序無關(guān),在加密要求(加密字典)改變后,系統(tǒng)管理員只需重新執(zhí)行加密修改的相應(yīng)模塊即可完成新的加密要求。
一、系統(tǒng)設(shè)計(jì)原理與系統(tǒng)
大多數(shù)數(shù)據(jù)庫應(yīng)用(基于客戶/服務(wù)器模型)通過調(diào)用數(shù)據(jù)庫編程接口實(shí)現(xiàn)對(duì)遠(yuǎn)端數(shù)據(jù)庫系統(tǒng)的訪問,一般接口允許應(yīng)用程序使用結(jié)構(gòu)化查詢語言(SQL)查詢數(shù)據(jù)。本文的設(shè)計(jì)方案是改造連接數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫應(yīng)用程序之間的接口程序,完成加密、解密功能,密鑰管理等,改造后的接口程序位于應(yīng)用程序和數(shù)據(jù)庫管理系統(tǒng)之間,形成一種三層次的結(jié)構(gòu)。
本設(shè)計(jì)方案實(shí)質(zhì)上就是對(duì)正常的數(shù)據(jù)庫訪問流程進(jìn)行改造,截獲提交的SQL語句,在傳送之前完成數(shù)據(jù)的加密處理,即將SQL語句中的明文換成密文重新組合SQL語句后提交,檢索時(shí),分解SQL語句,將加密字段解密后傳送到客戶端。實(shí)現(xiàn)時(shí)通過在數(shù)據(jù)庫管理系統(tǒng)與數(shù)據(jù)庫應(yīng)用系統(tǒng)之間加入安全管理模塊,完成以上的SQL語法分析、加解密、密鑰管理等功能,也即在接口驅(qū)動(dòng)程序(dll)中增加一定的加密/解密功能,稱改造后的這一模塊為數(shù)據(jù)庫加密解密密引擎。
基于以上的設(shè)計(jì)思想,本系統(tǒng)主要分成兩個(gè)功能獨(dú)立的主要部件:
a、上文提到的數(shù)據(jù)庫加密解密引擎,這是本系統(tǒng)的核心部件。
b、加密字典管理程序,用于定義應(yīng)用系統(tǒng)的加密定義和定義修改,使該加密系統(tǒng)更具靈活性,不同的應(yīng)用系統(tǒng)采用對(duì)應(yīng)的加密定義。系統(tǒng)的體系結(jié)構(gòu)如圖1所示。
系統(tǒng)將用戶對(duì)數(shù)據(jù)庫信息的具體加密要求記載在加密字典上,即應(yīng)用系統(tǒng)數(shù)據(jù)庫中哪些字段需要加密以及采用的加密算法等等,這些是數(shù)據(jù)庫加密系統(tǒng)的基礎(chǔ)信息,核心部件數(shù)據(jù)庫加密、解密引擎負(fù)責(zé)完成數(shù)據(jù)庫信息的加密解密處理以及前端數(shù)據(jù)庫客戶訪問驅(qū)動(dòng)和后臺(tái)數(shù)據(jù)庫服務(wù)器的連接驅(qū)動(dòng)。
二、數(shù)據(jù)庫加密解密引擎
該引擎設(shè)計(jì)采用三大模塊組成:加密解密處理、SQL語法分析和數(shù)據(jù)庫接口。
1、加密、解密處理
該模塊是數(shù)據(jù)庫加密解密引擎的核心模塊,其主要功能為加密解密引擎的初始化、SQL命令的加密轉(zhuǎn)換、查詢結(jié)果的脫密處理以及加脫密算法實(shí)現(xiàn)等等,其關(guān)鍵點(diǎn)在于截獲提交的SQL語句,若換原SQL語句,重新提交給數(shù)據(jù)庫管理系統(tǒng);在查詢時(shí),若存在加密字段,將加密表脫密后提交給客戶端,具體的加密算法可采用新發(fā)布的高級(jí)加密算法標(biāo)準(zhǔn)(AES),這種對(duì)稱密鑰算法較之以前采用的DES算法具有更高的安全保密性,具體處理過程如圖2所示。
該模塊與數(shù)據(jù)庫接口的聯(lián)系:客戶端應(yīng)用程序提交SQL命令,調(diào)用用戶接口模塊時(shí)被調(diào)用;加密解密處理中在需要訪問后臺(tái)數(shù)據(jù)庫時(shí),調(diào)用后臺(tái)數(shù)據(jù)庫接口模塊提供的數(shù)據(jù)庫服務(wù)。
該模塊還用到了SQL語法分析模塊提供的功能,其過程為將用戶提交的SQL命令傳遞給“SQL語法分析模塊”返回一棵樹,用于加密解密語意分析,得到SQL'語句中的表名、字段名以及需要加密處理的輸入數(shù)據(jù)。
為提高引擎的處理速度,設(shè)置加密字典緩沖區(qū),將存放最近訪問的數(shù)據(jù)庫表的字典信息,不加密的表雖然不存在與之對(duì)應(yīng)的加密字典數(shù)據(jù),但也登記在加密字典緩沖區(qū)中,從而便于系統(tǒng)快速
判斷一個(gè)表是否已加密。
2、SQL語法分析
本模塊功能類似于該編譯器的功能,將SQL命令轉(zhuǎn)換成易處理的樹形式,從樹中提取出數(shù)據(jù)庫加密解密處理模塊所需的參數(shù)(表名、字段名、插入數(shù)據(jù)等等)。除此主要功能外,還包括由語法樹轉(zhuǎn)換成SQL命令的功能,主要子模塊包括:
a、詞法分析器,用于對(duì)SQL命令進(jìn)行詞法分析,分割成各個(gè)詞法單位;
b、語法樹生成器,用于將分析得到的詞法單位生成一棵語法樹;
c、語法樹反向生成SQL命令,用于將經(jīng)過加密變換后的語法樹轉(zhuǎn)換成新的soL命令;
d、語法錯(cuò)誤處理,用于處理語法樹生成中產(chǎn)生的錯(cuò)誤。
3、數(shù)據(jù)庫接口
模塊主要包括兩部分:前端數(shù)據(jù)庫客戶應(yīng)用程序訪問數(shù)據(jù)庫加脫密引擎的接口函數(shù)和數(shù)據(jù)庫加密解密引擎訪問后臺(tái)數(shù)據(jù)庫服務(wù)器的接口函數(shù)。
客戶端訪問數(shù)據(jù)庫加脫密引擎的入口點(diǎn)是前端數(shù)據(jù)庫接口模塊,用戶通過建立的連接和SQL命令調(diào)用數(shù)據(jù)庫接口模塊提供的用戶接口函數(shù),對(duì)于不同的數(shù)據(jù)庫應(yīng)用編程接口,用戶接口函數(shù)的定義是不同的。
當(dāng)進(jìn)行“加密解密處理模塊”在需要數(shù)據(jù)庫服務(wù)時(shí),調(diào)用“后臺(tái)數(shù)據(jù)庫接口”提供的通用數(shù)據(jù)庫驅(qū)動(dòng)函數(shù)連接到數(shù)據(jù)源,取出用戶所需的信息返回客戶端,所以,數(shù)據(jù)庫接口模塊的工作實(shí)際上就是完成未加密前ODBC驅(qū)動(dòng)程序的工作,只是在中間插入了加脫密處理模塊,增加與加密解密模塊的連接函數(shù)。處理過程為接受客戶端的操作請(qǐng)求,傳遞給“加密解密處理模塊”,代替“加密解密模塊”去訪問數(shù)據(jù)庫服務(wù)器。
圖3綜合描述了加密解密引擎的工作流程。
三、加密字典管理程序
加密字典管理程序是數(shù)據(jù)庫管理員定義加密數(shù)據(jù)項(xiàng)的工具,該部分包括創(chuàng)建數(shù)據(jù)加密字典、表加密、表解密、加密字典權(quán)限管理等功能,對(duì)于已有數(shù)據(jù)的數(shù)據(jù)庫應(yīng)用系統(tǒng),在使用該加密系統(tǒng)時(shí),需進(jìn)行初始化操作,即添加加密定義,將原有需加密的數(shù)據(jù)從明文轉(zhuǎn)化到密文,這個(gè)轉(zhuǎn)化的加密解密功能在加密解密引擎中已有,它調(diào)用數(shù)據(jù)庫加脫密引擎中的加脫密處理模塊來完成。
加密字典管理程序是在數(shù)據(jù)庫應(yīng)用系統(tǒng)使用前由系統(tǒng)管理員來使用,普通用戶不用關(guān)心。
該程序由用戶注冊(cè)、加密字典配置、加密定義修改、表信息檢索、密文表配置、數(shù)據(jù)轉(zhuǎn)化等模塊組成,各模塊之間的關(guān)系如圖4所示。
以下說明各模塊的設(shè)計(jì)。
用戶注冊(cè)模塊。是數(shù)據(jù)庫管理員啟動(dòng)加密字典管理程序后必須通過的身份驗(yàn)證模塊,該模塊防止未授權(quán)人使用加密字典管理程序,確保加密字典的安全,身份驗(yàn)證的方式采用DBMS通常使用的用戶名和口令機(jī)制.為進(jìn)一步增強(qiáng)安全性,也可以利用IC卡讀寫器或指紋識(shí)別器進(jìn)行用戶身份認(rèn)證。
加密字典配置模塊,用于完成數(shù)據(jù)庫應(yīng)用系統(tǒng)使用前加密字典的初始化工作,當(dāng)加密解密引擎工作時(shí),直接從緩沖區(qū)中調(diào)用加密字典數(shù)據(jù),從而加快加密解密速度,提高系統(tǒng)運(yùn)行效率。
加密定義與修改模塊,用于處理數(shù)據(jù)庫采用加密手段后,對(duì)原有的DBMS存在著某些影響,例如,數(shù)據(jù)庫管理系統(tǒng)將會(huì)因?yàn)榧用芎蟮臄?shù)據(jù)不符合定義的數(shù)據(jù)類型而拒絕插入,解決方法是另外建立密文表存放密文.凡是需要加密的數(shù)據(jù)都定義為計(jì)算機(jī)二進(jìn)制數(shù)據(jù)類型,加密以后插入數(shù)據(jù)庫的數(shù)據(jù)全部為二進(jìn)制數(shù)據(jù)類型的數(shù)據(jù),當(dāng)用戶檢索時(shí),加密系統(tǒng)自動(dòng)脫密并轉(zhuǎn)化成用戶所需要的數(shù)據(jù)類型。這些加密時(shí)所需的信息必須通過 界面進(jìn)行設(shè)置并保存在數(shù)據(jù)庫中,而一般主鍵、外鍵、索引等字段信息則可以不用加密。
在解決以上問題時(shí),該模塊運(yùn)行中還要使用“表信息檢索模塊”以及“密文表配置模塊”提供的功能,該模塊的處理過程如圖5所示。
表信息檢索模塊,以函數(shù)的形式提供,功能為從數(shù)據(jù)字典中檢索出某個(gè)表的各種信息,這些信息包括表名、表標(biāo)識(shí)、字段定義、主鍵定義、外鍵定義、索引定義等等,函數(shù)輸入為表名,輸出為表的各種信息數(shù)據(jù),若該表已有加密定義,則包括該表的加密定義。
密文表配置模塊,用于為“加密定義修改模塊”提供構(gòu)造密文表、刪除密文表、維護(hù)加密字典信息等功能。
數(shù)據(jù)轉(zhuǎn)換模塊,是專門為“加密定義與修改模塊”服務(wù)的,對(duì)于一個(gè)已運(yùn)行的應(yīng)用系統(tǒng)來說,數(shù)據(jù)庫中已存在大量業(yè)務(wù)數(shù)據(jù),將應(yīng)用系統(tǒng)實(shí)行加密系統(tǒng)處理時(shí),首先要將原有的明文數(shù)據(jù)進(jìn)行密文初始化,該模塊就是來完成這個(gè)功能的,它主要包括表的加密、解密以及加密列變更三種需求下的數(shù)據(jù)轉(zhuǎn)換工作。
小知識(shí)之SQL
SQL是高級(jí)的非過程化編程語言,它允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解其具體的數(shù)據(jù)存放方式。而它的界面,能使具有底層結(jié)構(gòu)完全不同的數(shù)據(jù)庫系統(tǒng)和不同數(shù)據(jù)庫之間,使用相同的SQL作為數(shù)據(jù)的輸入與管理。














