Web信息管理系統(tǒng)數(shù)據(jù)庫加密技術(shù)
隨著計算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展和Internet技術(shù)的普及,Web系統(tǒng)結(jié)構(gòu)得到廣泛應(yīng)用,特別是在一些企業(yè)信息管理與政府政務(wù)管理中,已成為主要的管理方式。Web系統(tǒng)數(shù)據(jù)存放在后臺數(shù)據(jù)庫中,其中部分信息數(shù)據(jù)是絕對機(jī)密的,它關(guān)系到了企業(yè)的發(fā)展與存亡,一旦這些機(jī)密數(shù)據(jù)被竊取或惡意篡改,這勢必將給企業(yè)帶來巨大的經(jīng)濟(jì)損失。而給Web系統(tǒng)數(shù)據(jù)庫加密是保護(hù)系統(tǒng)關(guān)鍵數(shù)據(jù)的有效手段之一。
一、Web信息管理系統(tǒng)數(shù)據(jù)庫加密技術(shù)的相關(guān)概念
1、口令加鹽技術(shù)
在系統(tǒng)登錄時,口令密鑰作為用戶登錄時的主要信息存放,其安全性直接關(guān)系到了整個系統(tǒng)的安全性,對于口令的加密,是極為重要的。而傳統(tǒng)的Hash函數(shù)加密法很容易遭受字典式攻擊,對于一般性的字典式攻擊方式,最常用的解決方式是對于原始數(shù)據(jù)進(jìn)行加鹽處理。所謂“加鹽技術(shù)”是指在計算消息摘要時,加上一些字符,可以是固定的,也可以是隨機(jī)的,然后帶入公式,計算摘要,并保存起來。
2、中間件技術(shù)
中間件(middleware)是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,管理網(wǎng)絡(luò)通信。中間件處于操作系統(tǒng)軟件與用戶的應(yīng)用軟件的中間。它在操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)據(jù)庫之上,應(yīng)用軟件的下層,可為處于自己上層的應(yīng)用軟件提供運(yùn)行與開發(fā)的環(huán)境,幫助用戶靈活、高效地開發(fā)和集成復(fù)雜的應(yīng)用軟件。
3、jCryption加密插件工作原理
jCryption是一個開源的jQuery加密插件。其工作原理是首先jCryption將表單數(shù)據(jù)序列化,并將表單數(shù)據(jù)轉(zhuǎn)化為16進(jìn)制值。當(dāng)服務(wù)器端生成密鑰對后,jCryption的加密腳本接收密鑰對,并使用公鑰將生成的16進(jìn)制表單文件加密并發(fā)送至服務(wù)器端,服務(wù)器端收到后將其解密。
二、Web信息管理系統(tǒng)數(shù)據(jù)庫加密系統(tǒng)的結(jié)構(gòu)
1、加密系統(tǒng)的結(jié)構(gòu)
原有的Web信息管理系統(tǒng)中,瀏覽器與Web服務(wù)器之間及Web服務(wù)器與數(shù)據(jù)庫之間沒有專門的體系和機(jī)制保證系統(tǒng)安全。該加密模型將加密系統(tǒng)放在中間層,通過加/減密模塊和安全認(rèn)證模塊來保障數(shù)據(jù)庫系統(tǒng)的安全,如圖所示。
Web瀏覽器向Web服務(wù)器發(fā)送請求,Web服務(wù)器將請求的數(shù)據(jù)發(fā)送至加密中間件進(jìn)行處理。如果數(shù)據(jù)需要加密存儲時,加密中間件將數(shù)據(jù)加密并存放在數(shù)據(jù)庫。如用戶需要訪問加密后的數(shù)據(jù)時,加密中間件將數(shù)據(jù)解密,并將解密后的數(shù)據(jù)發(fā)送給Web服務(wù)器。
2、加密算法的選取
加密系統(tǒng)選取加密算法的原則主要有兩點。一是加密的安全性,二是加密速度?;谶@兩點考慮,本系統(tǒng)使用AES算法加密數(shù)據(jù),使用RSA算法加密密鑰。
3、加密粒度的選擇
加密粒度是指數(shù)據(jù)庫加密的最小單位。按照數(shù)據(jù)庫的結(jié)構(gòu)層次,對數(shù)據(jù)庫信息可分為數(shù)據(jù)文件(表)、記錄、字段(屬性列)和數(shù)據(jù)項,對數(shù)據(jù)庫信息的加密分別以文件、記錄、字段和數(shù)據(jù)項作為加密基本單位。
基于表的加密即將數(shù)據(jù)庫文件作為整體,用加密算法對整個數(shù)據(jù)庫文件加密保證信息的真實性和完整性。但其加密方式過于粗糙,影響數(shù)據(jù)庫執(zhí)行的效率。
基于記錄的加密是最常用的數(shù)據(jù)庫信息加密手段,其基本思路是,在各自密鑰的作用下,將數(shù)據(jù)庫的每一個記錄加密成密文并存放于數(shù)據(jù)庫文件中。
基于記錄的數(shù)據(jù)庫加密的缺點是,在解密一個記錄的數(shù)據(jù)時,無法實現(xiàn)對該記錄中需要的字段進(jìn)行單獨(dú)解密。
基于字段(屬性)的數(shù)據(jù)庫加密,就是針對于所加密對象中的某個字段進(jìn)行加密。
本方案,由于Web信息管理系統(tǒng)中并不是所有字段都需要加密,所以采用基于字段級密度加密。
三、Web信息管理系統(tǒng)數(shù)據(jù)庫加密系統(tǒng)的實現(xiàn)
1、用戶登錄驗證模塊加密方案
用戶登錄模塊主要是對系統(tǒng)中所登錄的用戶進(jìn)行合法性驗證。用戶登錄驗證頁面是用戶進(jìn)入系統(tǒng)的第一道防線,保證用戶安全登錄系統(tǒng)是整個加密系統(tǒng)中重要模塊之一。用戶登錄模塊使用了口令加鹽技術(shù)。已加鹽的口令摘要以MD5方式加密保存在數(shù)據(jù)庫中。用戶登錄時,系統(tǒng)根據(jù)用戶的用戶名取得口令摘要,并根據(jù)口令摘要分離得到鹽值。系統(tǒng)根據(jù)輸入的口令和鹽值計算出口令摘要,然后與存放在數(shù)據(jù)庫中的摘要比對,如果比對一致則登錄成功,否則失敗。
2、信息管理系統(tǒng)表單加密方案設(shè)計
Web信息管理系統(tǒng)中,必然涉及到大量表單。使用HTML協(xié)議一般是不加密的,所有數(shù)據(jù)都是以明文的方式傳輸,因此表單數(shù)據(jù)加密就很重要。傳統(tǒng)的表單數(shù)據(jù)加密方法為SSL加密,但這種方法需要在Web服務(wù)器端進(jìn)行相關(guān)設(shè)置,操作麻煩。該系統(tǒng)采用開源jQuery插件jCryption加密form表單。調(diào)用jCryption的格式非常簡單,假如表單id為a,那么使用jCryption加密表單的格式為:$("#a").jCryption();
3、加/解密引擎的設(shè)計與實現(xiàn)
加/解密引擎是整個數(shù)據(jù)庫系統(tǒng)中最重要的模塊,主要負(fù)責(zé)后臺數(shù)據(jù)庫的加密、解密。加/解密引擎主要由初始化模塊、加/解密模塊、語法分析模塊及數(shù)據(jù)庫連接模塊組成。
(1)初始化模塊初始化模塊是加密系統(tǒng)啟動時首先調(diào)用的模塊,主要負(fù)責(zé)加密系統(tǒng)的初始化。
(2)加/解密模塊加/解密模塊主要負(fù)責(zé)數(shù)據(jù)庫數(shù)據(jù)的加/解密處理。加密模塊的實現(xiàn)原理是加密模塊根據(jù)提供的SQL命令語法分析樹搜索加密字典,加密字典將所加密數(shù)據(jù)的密鑰信息返回,然后加密模塊將密鑰信息傳給密鑰管理模塊取得密鑰,從而加密模塊根據(jù)密鑰對相關(guān)信息進(jìn)行加密。解密模塊的實現(xiàn)原理是解密模塊根據(jù)需要解密的信息從密鑰管理模塊中取得密鑰,然后根據(jù)密鑰對信息解密。
(3)語法分析模塊語法分析模塊的主要功能是將SQL命令進(jìn)行語義分析,生成二叉樹形式。
(4)數(shù)據(jù)庫連接模塊該模塊負(fù)責(zé)加密引擎與數(shù)據(jù)庫的連接工作。
3.1、加/解密引擎的實現(xiàn)原理:
首先對應(yīng)用程序所傳入的SQL語句進(jìn)行語法分析,并通過分析解析出來SQL命令所要操作的表、相應(yīng)的列以及對應(yīng)的數(shù)據(jù)信息,然后再利用加密字典管理程序?qū)用茏值溥M(jìn)行查詢,得出相應(yīng)表的加密信息。如果該SQL命令中沒有加密信息,直接對數(shù)據(jù)庫進(jìn)行操作;如果SQL命令中含有加密信息,需要從密鑰生成與管理模塊中取得密鑰,通過加密引擎中的加密處理模塊對數(shù)據(jù)信息進(jìn)行加密,再在語法分析模塊的作用下,生成相對應(yīng)的密文SQL命令,最后,將密文SQL命令傳入數(shù)據(jù)庫連接模塊,執(zhí)行數(shù)據(jù)庫操作。其實現(xiàn)步驟如下:
(1)對SQL命令進(jìn)行語法分析,如果語法正確,轉(zhuǎn)到步驟(2),進(jìn)行步驟(2)處理;如果語法不正確,清除SQL命令緩沖區(qū),返回錯誤,打印日志。
(2)判斷是否為數(shù)據(jù)庫加/解密引擎的內(nèi)部控制命令?如果是,處理內(nèi)部控制命令,然后轉(zhuǎn)到步驟(7);如果不是,則轉(zhuǎn)到步驟(3)。
(3)檢查加/解密引擎是否處于關(guān)閉狀態(tài)?如果是,則通知數(shù)據(jù)庫連接模塊,并等待;否則轉(zhuǎn)到步驟(4)。
(4)連接密鑰生成與管理模塊,解析需要加/解密的字段,然后轉(zhuǎn)入步驟(5)。
(5)SQL命令是否需要加密處理?如果是,則將SQL命令進(jìn)行加密變換,替換原SQL命令,然后轉(zhuǎn)入步驟(6);否則直接轉(zhuǎn)入步驟(6)。
(6)將SQL命令轉(zhuǎn)送數(shù)據(jù)庫服務(wù)器處理。
(7)SQL命令執(zhí)行完畢,清除SQL命令緩沖區(qū)。
4、密鑰生成與管理模塊
密鑰生成與管理模塊在加密系統(tǒng)中所起的作用非常重要,由于不同的人存取不同的文件或同一文件的不同部分,因此加密產(chǎn)生的密鑰有可能很大,密鑰間關(guān)系復(fù)雜,這樣就給密鑰管理帶來很大困難?;赪eb信息管理的結(jié)構(gòu),在密鑰管理中,本文采用多級密鑰管理方案。對某一數(shù)據(jù)進(jìn)行加密后,系統(tǒng)會自動產(chǎn)生一個數(shù)據(jù)密鑰,該字段用此密鑰加密后以密文形式存放在數(shù)據(jù)庫里。另外,為了保證非法用戶竊取加密字段進(jìn)行解密,根據(jù)多級加密的思想,再產(chǎn)生一個用戶密鑰對數(shù)據(jù)密鑰進(jìn)行加密,以此增強(qiáng)數(shù)據(jù)密鑰的安全性。如果Web數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)安全級別比較高的話,可以將用戶密鑰保存在其他媒介中。
密鑰及密鑰相關(guān)配置信息都以表的形式存放在數(shù)據(jù)庫里,各表描述如下:
(1)表login_user用于登錄用戶信息。字段有用戶id和用戶名。
(2)表encrypt_table用于存儲加密表的信息。存儲信息由加密表id,用戶id表所有者,表數(shù)據(jù)庫名等信息。
(3)表encrypt_field保存被加密表所設(shè)計的字段。存儲的字段有字段名、字段數(shù)據(jù)類型及數(shù)據(jù)長度等。
(4)表iKeys用于存放密鑰實體。存儲的字段有密鑰id,密文等。5)table_field用于表示表、列對應(yīng)關(guān)系表。存儲字段有加密表id、用戶id、加密列id及密鑰創(chuàng)建時間等。各數(shù)據(jù)表關(guān)系如圖所示:
四、Web信息管理系統(tǒng)數(shù)據(jù)庫加密方案的應(yīng)用案例
某學(xué)院工資查詢系統(tǒng)是其校內(nèi)項目。該系統(tǒng)數(shù)據(jù)庫主要有2個表,分別是工資表及職工信息表。儲存有姓名、工資卡號、基本工資等信息。職工信息表主要存放的是職工的基本信息。在這兩個表里面,工資表里面的字段如姓名、工資卡號、工資等信息是屬于敏感信息,需要加密中間件加密。而職工的一些信息像出生年月、職稱等屬于普通信息,不需要加密中間件加密。敏感信息經(jīng)加密中間件加密后,只有工資卡擁有者才能瀏覽工資信息。即使數(shù)據(jù)庫管理員也不能瀏覽其他人的工資信息,這樣就保證了校內(nèi)工資信息的安全。系統(tǒng)登錄模塊使用了口令加鹽技術(shù)。普通表單像如教師基本信息更新表單使用了jQuery插件jCryption進(jìn)行加密。
目前Web信息管理系統(tǒng)數(shù)據(jù)庫加密技術(shù)已在某學(xué)院校內(nèi)項目“工資查詢系統(tǒng)”中應(yīng)用,取得了預(yù)期的效果,隨著互聯(lián)網(wǎng)的發(fā)展,我相信在不久的將來,Web信息管理系統(tǒng)數(shù)據(jù)庫加密技術(shù)的應(yīng)用前景會更加的廣闊。
小知識之SQL
結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱SQL,結(jié)構(gòu)化查詢語言是一種數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng);同時也是數(shù)據(jù)庫腳本文件的擴(kuò)展名。結(jié)構(gòu)化查詢語言是高級的非過程化編程語言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫系統(tǒng)可以使用相同的結(jié)構(gòu)化查詢語言語言作為數(shù)據(jù)輸入與管理的接口。結(jié)構(gòu)化查詢語言語句可以嵌套,這使他具有極大的靈活性和強(qiáng)大的功能。









