劉漢燁
(榆林學(xué)院 信息工程學(xué)院,陜西 榆林 719000)
隨著計算機網(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ù)是絕對機密的,它關(guān)系到了企業(yè)的發(fā)展與存亡,一旦這些機密數(shù)據(jù)被竊取或惡意篡改,這勢必將給企業(yè)帶來巨大的經(jīng)濟損失。而給Web系統(tǒng)數(shù)據(jù)庫加密是保護系統(tǒng)關(guān)鍵數(shù)據(jù)的有效手段之一。
在系統(tǒng)登錄時,口令密鑰作為用戶登錄時的主要信息存放,其安全性直接關(guān)系到了整個系統(tǒng)的安全性,對于口令的加密,是極為重要的。而傳統(tǒng)的Hash函數(shù)加密法很容易遭受字典式攻擊,對于一般性的字典式攻擊方式,最常用的解決方式是對于原始數(shù)據(jù)進行加鹽處理。所謂“加鹽技術(shù)”[1]是指在計算消息摘要時,加上一些字符,可以是固定的,也可以是隨機的,然后帶入公式,計算摘要,并保存起來。
中間件[2](middleware)是一種獨立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,管理網(wǎng)絡(luò)通信。中間件處于操作系統(tǒng)軟件與用戶的應(yīng)用軟件的中間。它在操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)據(jù)庫之上,應(yīng)用軟件的下層,可為處于自己上層的應(yīng)用軟件提供運行與開發(fā)的環(huán)境,幫助用戶靈活、高效地開發(fā)和集成復(fù)雜的應(yīng)用軟件。
jCryption是一個開源的jQuery加密插件。其工作原理是首先jCryption將表單數(shù)據(jù)序列化,并將表單數(shù)據(jù)轉(zhuǎn)化為16進制值。當服務(wù)器端生成密鑰對后,jCryption的加密腳本接收密鑰對,并使用公鑰將生成的16進制表單數(shù)據(jù)加密并發(fā)送至服務(wù)器端,服務(wù)器端收到后將其解密。
原有的Web信息管理系統(tǒng)中,瀏覽器與Web服務(wù)器之間及Web服務(wù)器與數(shù)據(jù)庫之間沒有專門的體系和機制保證系統(tǒng)安全。該加密模型將加密系統(tǒng)放在中間層,通過加/減密模塊和安全認證模塊來保障數(shù)據(jù)庫系統(tǒng)的安全[3-4],如圖1所示。
圖1 加密系統(tǒng)結(jié)構(gòu)圖Fig.1 Structure diagram of encryption system
Web瀏覽器向Web服務(wù)器發(fā)送請求,Web服務(wù)器將請求的數(shù)據(jù)發(fā)送至加密中間件進行處理。 如果數(shù)據(jù)需要加密存儲時,加密中間件將數(shù)據(jù)加密并存放在數(shù)據(jù)庫。如用戶需要訪問加密后的數(shù)據(jù)時,加密中間件將數(shù)據(jù)解密,并將解密后的數(shù)據(jù)發(fā)送給Web服務(wù)器。
加密系統(tǒng)選取加密算法的原則[5]主要有兩點。一是加密的安全性,二是加密速度?;谶@兩點考慮,本系統(tǒng)使用AES算法加密數(shù)據(jù),使用RSA算法加密密鑰。
加密粒度[6]是指數(shù)據(jù)庫加密的最小單位。按照數(shù)據(jù)庫的結(jié)構(gòu)層次,對數(shù)據(jù)庫信息可分為數(shù)據(jù)文件(表)、記錄、字段(屬性列)和數(shù)據(jù)項,對數(shù)據(jù)庫信息的加密分別以文件、記錄、字段和數(shù)據(jù)項作為加密基本單位。基于表的加密即將數(shù)據(jù)庫文件作為整體,用加密算法對整個數(shù)據(jù)庫文件加密保證信息的真實性和完整性。但其加密方式過于粗糙,影響數(shù)據(jù)庫執(zhí)行的效率?;谟涗浀募用苁亲畛S玫臄?shù)據(jù)庫信息加密手段,其基本思路是,在各自密鑰的作用下,將數(shù)據(jù)庫的每一個記錄加密成密文并存放于數(shù)據(jù)庫文件中?;谟涗浀臄?shù)據(jù)庫加密的缺點是,在解密一個記錄的數(shù)據(jù)時,無法實現(xiàn)對該記錄中需要的字段進行單獨解密?;谧侄危▽傩裕┑臄?shù)據(jù)庫加密,就是針對于所加密對象中的某個字段進行加密。本方案,由于Web信息管理系統(tǒng)中并不是所有字段都需要加密,所以采用基于字段級密度加密。
用戶登錄模塊主要是對系統(tǒng)中所登錄的用戶進行合法性驗證。用戶登錄驗證頁面是用戶進入系統(tǒng)的第一道防線,保證用戶安全登錄系統(tǒng)是整個加密系統(tǒng)中重要模塊之一。用戶登錄模塊使用了口令加鹽技術(shù)。已加鹽的口令摘要以MD5方式加密保存在數(shù)據(jù)庫中。用戶登錄時,系統(tǒng)根據(jù)用戶的用戶名取得口令摘要,并根據(jù)口令摘要分離得到鹽值。系統(tǒng)根據(jù)輸入的口令和鹽值計算出口令摘要,然后與存放在數(shù)據(jù)庫中的摘要比對,如果比對一致則登錄成功,否則失敗。
Web信息管理系統(tǒng)中,必然涉及到大量表單。使用HTML協(xié)議一般是不加密的,所有數(shù)據(jù)都是以明文的方式傳輸,因此表單數(shù)據(jù)加密就很重要。傳統(tǒng)的表單數(shù)據(jù)加密方法為SSL加密,但這種方法需要在Web服務(wù)器端進行相關(guān)設(shè)置,操作麻煩。該系統(tǒng)采用開源jQuery插件jCryption加密form表單。
調(diào)用jCryption的格式非常簡單,假如表單id為a,那么使用 jCryption 加密表單的格式為:$("#a").jCryption();
加/解密引擎是整個數(shù)據(jù)庫系統(tǒng)中最重要的模塊,主要負責(zé)后臺數(shù)據(jù)庫的加密、解密。加/解密引擎主要由初始化模塊、加/解密模塊、語法分析模塊及數(shù)據(jù)庫連接模塊組成。
1)初始化模塊 初始化模塊是加密系統(tǒng)啟動時首先調(diào)用的模塊,主要負責(zé)加密系統(tǒng)的初始化。
2)加/解密模塊 加/解密模塊主要負責(zé)數(shù)據(jù)庫數(shù)據(jù)的加/解密處理。加密模塊的實現(xiàn)原理是加密模塊根據(jù)提供的SQL命令語法分析樹搜索加密字典,加密字典將所加密數(shù)據(jù)的密鑰信息返回,然后加密模塊將密鑰信息傳給密鑰管理模塊取得密鑰,從而加密模塊根據(jù)密鑰對相關(guān)信息進行加密。解密模塊的實現(xiàn)原理是解密模塊根據(jù)需要解密的信息從密鑰管理模塊中取得密鑰,然后根據(jù)密鑰對信息解密。
3)語法分析模塊 語法分析模塊的主要功能是將SQL命令進行語義分析,生成二叉樹形式。
4)數(shù)據(jù)庫連接模塊 該模塊負責(zé)加密引擎與數(shù)據(jù)庫的連接工作。
加/解密引擎的實現(xiàn)原理[7]是:首先對應(yīng)用程序所傳入的SQL語句進行語法分析,并通過分析解析出來SQL命令所要操作的表、相應(yīng)的列以及對應(yīng)的數(shù)據(jù)信息,然后再利用加密字典管理程序?qū)用茏值溥M行查詢,得出相應(yīng)表的加密信息。如果該SQL命令中沒有加密信息,直接對數(shù)據(jù)庫進行操作;如果SQL命令中含有加密信息,需要從密鑰生成與管理模塊中取得密鑰,通過加密引擎中的加密處理模塊對數(shù)據(jù)信息進行加密,再在語法分析模塊的作用下,生成相對應(yīng)的密文SQL命令,最后,將密文SQL命令傳入數(shù)據(jù)庫連接模塊,執(zhí)行數(shù)據(jù)庫操作。其實現(xiàn)步驟如下:
1)對SQL命令進行語法分析,如果語法正確,轉(zhuǎn)到步驟2),進行步驟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命令進行加密變換,替換原SQL命令,然后轉(zhuǎn)入步驟6);否則直接轉(zhuǎn)入步驟6)。
6)將SQL命令轉(zhuǎn)送數(shù)據(jù)庫服務(wù)器處理。
7)SQL命令執(zhí)行完畢,清除SQL命令緩沖區(qū)。
密鑰生成與管理模塊[4-8]在加密系統(tǒng)中所起的作用非常重要,由于不同的人存取不同的文件或同一文件的不同部分,因此加密產(chǎn)生的密鑰有可能很大,密鑰間關(guān)系復(fù)雜,這樣就給密鑰管理帶來很大困難?;赪eb信息管理的結(jié)構(gòu),在密鑰管理中,本系統(tǒng)采用多級密鑰管理方案。對某一數(shù)據(jù)進行加密后,系統(tǒng)會自動產(chǎn)生一個數(shù)據(jù)密鑰,該字段用此密鑰加密后以密文形式存放在數(shù)據(jù)庫里。另外,為了保證非法用戶竊取加密字段進行解密,根據(jù)多級加密的思想,再產(chǎn)生一個用戶密鑰對數(shù)據(jù)密鑰進行加密,以此增強數(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)系圖見圖2。
圖2 數(shù)據(jù)表關(guān)系圖Fig.2 Relationship diagram of data tables
某學(xué)院工資查詢系統(tǒng)是其校內(nèi)項目。該系統(tǒng)數(shù)據(jù)庫主要有2個表,分別是工資表及職工信息表。儲存有姓名、工資卡號、基本工資等信息。職工信息表主要存放的是職工的基本信息。在這兩個表里面,工資表里面的字段如姓名、工資卡號、工資等信息是屬于敏感信息,需要加密中間件加密。而職工的一些信息像出生年月、職稱等屬于普通信息,不需要加密中間件加密。敏感信息經(jīng)加密中間件加密后,只有工資卡擁有者才能瀏覽工資信息。即使數(shù)據(jù)庫管理員也不能瀏覽其他人的工資信息,這樣就保證了校內(nèi)工資信息的安全。系統(tǒng)登錄模塊使用了口令加鹽技術(shù)。普通表單像如教師基本信息更新表單使用了jQuery插件jCryption進行加密。
本文針對Web信息系統(tǒng)結(jié)構(gòu)的安全需求,提出了一個數(shù)據(jù)庫加密模型。該加密結(jié)構(gòu)已在某學(xué)院校內(nèi)項目“工資查詢系統(tǒng)”中應(yīng)用,取得了預(yù)期的效果,使用jCryption完成表單信息傳輸加密。但本系統(tǒng)還有許多不足,比如系統(tǒng)里所密鑰過多,定會影響Web信息系統(tǒng)的查詢效率;使用jCryption完成表單信息傳輸加密不能有效防止MITM攻擊。這些問題都需要在以后的研究中加以解決。
[1]李勻.網(wǎng)絡(luò)滲透測試-保護網(wǎng)絡(luò)安全的技術(shù)、工具和過程[M].北京:電子工業(yè)出版社,2007.
[2]張云勇,張智江,劉錦德,等.中間件技術(shù)原理與應(yīng)用[M].北京:清華大學(xué)出版社,2004.
[3]張杰,徐元熙.基于B/S結(jié)構(gòu)的數(shù)據(jù)庫加密設(shè)計[J].微計算機信息,2008,24(11-3):185-187.ZHANG Jie,XU Yuan-xi.The design of database encryption system based on B/S architecture[J].Microcomputer Information,2008,24(11-3):185-187.
[4]安然,陳馳,徐震.數(shù)據(jù)庫加密中間件的設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計,2009,30(14):3261-3264.AN Ran,CHEN Chi,XU Zhen.Design and implementation of database encryption middleware[J].Computer Engineering and Design ,2009,30(14):3261-3264.
[5]趙卓,劉博,厲京運.基于DBMS外層的數(shù)據(jù)庫加密系統(tǒng)研究與設(shè)計[J].計算機工程與設(shè)計,2008,29(12):3030-3033.ZHAO Zhuo,LIU Bo,Li Jing-yun.Research and design of database encryption system based on external DBMS[J].Computer Engineering and Design,2008,29(12):3030-3033.
[6]吳春明,鄭志強.基于Web數(shù)據(jù)庫加密研究[J].西南農(nóng)業(yè)大學(xué)學(xué)報,2004,26(2):220-222.WU Chun-ming,ZHENG Zhi-qiang.Study on encryption of web-based database[J].Journal of Southwest Agricultural U-niversity,2004,26(2):220-222.
[7]吳興惠,張廣路.基于Web數(shù)據(jù)庫加密系統(tǒng)的研究[J].海南師范大學(xué)學(xué)報,2009,22(3):263-266.WU Xing-hui,ZHANG Guang-lu.Research on database encryption system based on Web[J].Journal of Hainan Normal University,2009,22(3):263-266.
[8]徐江峰,馬瑤.一種基于動態(tài)密鑰的數(shù)據(jù)庫加密方案[J].微計算機信息,2009,25(12-3):27-29.XU Jiang-feng,MA Yao.A scheme of database encryption based on dynamical secret[J].Mirocomputer Informetion,2009,25(12-3):27-29.