專利名稱::數(shù)據(jù)庫(kù)信息加密方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)庫(kù)信息安全,具體地說(shuō),涉及一種數(shù)據(jù)庫(kù)信息加密方法和使用該方法的數(shù)據(jù)庫(kù)信息加密系統(tǒng)。屬于信息安全
技術(shù)領(lǐng)域:
。
背景技術(shù):
:隨著信息化進(jìn)程的不斷推進(jìn),信息資產(chǎn)成為了企業(yè)的核心資產(chǎn)之一,如何采用技術(shù)手段維護(hù)企業(yè)業(yè)務(wù)數(shù)據(jù)的安全性已成為企業(yè)普遍關(guān)注的問(wèn)題。而作為數(shù)據(jù)存儲(chǔ)和管理的核心部件,數(shù)據(jù)庫(kù)系統(tǒng)的安全性更是引起的廣泛的重視。在配置了信息系統(tǒng)的企業(yè)中,通常會(huì)雇傭數(shù)據(jù)庫(kù)管理員來(lái)進(jìn)行數(shù)據(jù)庫(kù)系統(tǒng)的維護(hù)和管理,這些超級(jí)用戶擁有數(shù)據(jù)庫(kù)中所有數(shù)據(jù)的控制權(quán)。然而,在現(xiàn)代企業(yè)業(yè)務(wù)流程中,數(shù)據(jù)庫(kù)管理員僅是技術(shù)人員,而并非這些數(shù)據(jù)的所有者。一旦數(shù)據(jù)庫(kù)管理員被收買,將企業(yè)的機(jī)密數(shù)據(jù)泄露出去,將對(duì)企業(yè)造成非常嚴(yán)重的損害。如何限制數(shù)據(jù)庫(kù)管理員濫用權(quán)限成為信息系統(tǒng)應(yīng)用中亟待解決的問(wèn)題之一。此外,存儲(chǔ)介質(zhì)的丟失也是企業(yè)信息系統(tǒng)的重要威脅之一。競(jìng)爭(zhēng)對(duì)手可以通過(guò)竊取服務(wù)器磁盤等手段,獲得存儲(chǔ)介質(zhì),并進(jìn)一步解析出敏感數(shù)據(jù)。解決信息系統(tǒng)中敏感數(shù)據(jù)的機(jī)密性問(wèn)題,其最有效手段就是進(jìn)行加密。數(shù)據(jù)庫(kù)管理系統(tǒng)廠商紛紛在產(chǎn)品中提供了相應(yīng)的安全功能,現(xiàn)有DBMS產(chǎn)品中支持加密的包括0racle、DB2和MS-SQLServer。下表1對(duì)各DBMS產(chǎn)品中的加密機(jī)制進(jìn)行了列表對(duì)比。表l:DBMS內(nèi)部加密機(jī)制對(duì)比名稱密鑰管理特點(diǎn)針對(duì)威脅加密粒度實(shí)現(xiàn)方法Oracle完全由服務(wù)器管理,安全管理員操作存儲(chǔ)介質(zhì)丟失字段級(jí)在磁盤操作過(guò)程加解密DB2由用戶口令生成,存儲(chǔ)口令提示保護(hù)私人數(shù)據(jù),非擁有者拒絕訪問(wèn)字段級(jí)擴(kuò)展SQL語(yǔ)句和函數(shù)實(shí)現(xiàn)SQLServer根密鑰受操作系統(tǒng)保保護(hù)私人數(shù)據(jù),字段級(jí)擴(kuò)展SQL語(yǔ)句和函數(shù)實(shí)5<table>tableseeoriginaldocumentpage6</column></row><table>通過(guò)對(duì)0racle、DB2和SQLServer的分析不難發(fā)現(xiàn),使用數(shù)據(jù)庫(kù)管理系統(tǒng)所提供的加密機(jī)制實(shí)現(xiàn)敏感數(shù)據(jù)的機(jī)密性保護(hù),存在著難以克服的缺點(diǎn),主要體現(xiàn)在以下三個(gè)方面:(1)對(duì)上層應(yīng)用不透明,更新成本高。企業(yè)信息系統(tǒng)一旦投入使用,其生命周期往往很長(zhǎng),這主要是因?yàn)樾畔⑾到y(tǒng)的造價(jià)較高,且業(yè)務(wù)數(shù)據(jù)模型基本穩(wěn)定。若要在應(yīng)用中增加對(duì)敏感數(shù)據(jù)的加密保護(hù)策略,除了需要采購(gòu)支持加密功能的DBMS,還需對(duì)原有的應(yīng)用層軟件進(jìn)行改造。由于數(shù)據(jù)庫(kù)管理系統(tǒng)所提供的加密機(jī)制往往使用特殊的SQL語(yǔ)句,對(duì)上層應(yīng)用的更改就不可避免,部署成本極高。(2)密鑰由數(shù)據(jù)庫(kù)管理員管理,難以防范數(shù)據(jù)庫(kù)管理員濫用權(quán)限。在oracle和sqlserver提供的加密機(jī)制之中,加解密密鑰依賴于數(shù)據(jù)庫(kù)管理員進(jìn)行管理;DB2中雖然密鑰是由用戶口令經(jīng)變化生成的,但用戶口令也存儲(chǔ)于數(shù)據(jù)庫(kù)系統(tǒng)之內(nèi),數(shù)據(jù)庫(kù)管理員依然可以通過(guò)獲取用戶口令再進(jìn)一步的獲取數(shù)據(jù)加解密密鑰。使用數(shù)據(jù)庫(kù)管理系統(tǒng)提供的加密機(jī)制,就無(wú)法避免密鑰受到數(shù)據(jù)庫(kù)管理員的控制。數(shù)據(jù)庫(kù)管理員掌握著密鑰,也就間接的掌握了敏感數(shù)據(jù),如何限制數(shù)據(jù)庫(kù)管理員對(duì)權(quán)限的濫用,成為難以解決的問(wèn)題(3)密鑰和密文數(shù)據(jù)保存在同一服務(wù)器中,存儲(chǔ)介質(zhì)丟失風(fēng)險(xiǎn)大。由于庫(kù)內(nèi)加密模式的局限,用戶用于加解密的密鑰也依賴數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行管理。一旦攻擊者獲取了存儲(chǔ)介質(zhì),就可以首先找出庫(kù)內(nèi)存儲(chǔ)的密鑰,然后對(duì)密文信息進(jìn)行解密,存儲(chǔ)介質(zhì)丟失所引起的風(fēng)險(xiǎn)巨大。
發(fā)明內(nèi)容本發(fā)明的目的在于克服現(xiàn)有技術(shù)中存在的問(wèn)題,提供一種數(shù)據(jù)庫(kù)信息加密方法和使用該方法的數(shù)據(jù)庫(kù)信息加密系統(tǒng)。本發(fā)明所述數(shù)據(jù)庫(kù)信息加密方法包括a)對(duì)于一個(gè)或多個(gè)數(shù)據(jù)庫(kù)中的一個(gè)或多個(gè)數(shù)據(jù)表,使用相同或不同的密碼設(shè)備單元,以相同或不同的密鑰加密其中一個(gè)或多個(gè)敏感字段,并為其創(chuàng)建同名視圖,所述視圖指向加密后的數(shù)據(jù)表;b)維護(hù)數(shù)據(jù)庫(kù)用戶對(duì)加密密鑰的使用權(quán)限,以及各個(gè)經(jīng)加密的敏感字段在加密時(shí)所使用的密碼設(shè)備單元、加密方式和密鑰;C)用戶請(qǐng)求讀取經(jīng)加密的數(shù)據(jù)表時(shí),檢查用戶是否具有相應(yīng)的敏感字段的密鑰使用權(quán)限,若是,則取得并使用密鑰以和所述加密方式相應(yīng)的解密方式解密,用戶獲得正確的敏感字段信息;若否,則使用隨機(jī)密鑰以和所述加密方式相應(yīng)的解密方式解密,用戶獲得經(jīng)錯(cuò)誤解密的敏感字段信息;所述隨機(jī)密鑰優(yōu)選為和所述正確的密鑰長(zhǎng)度相同的由隨機(jī)數(shù)生成的密鑰。所述方法還可包括d)用戶請(qǐng)求修改所述經(jīng)加密的敏感字段信息時(shí),檢査用戶是否具有相應(yīng)敏感字段的密鑰使用權(quán)限,若是,則加密修改后的內(nèi)容;若否,則返回獲取密鑰失敗信息,不進(jìn)行數(shù)據(jù)修改操作。優(yōu)選地,步驟a)所述加密通過(guò)由抽象密碼設(shè)備組件提供的統(tǒng)一的接口實(shí)現(xiàn),所述抽象密碼設(shè)備組件進(jìn)一步調(diào)用一個(gè)或多個(gè)不同的所述密碼設(shè)備單元實(shí)施加解密操作,所述密碼設(shè)備單元由所述抽象密碼設(shè)備組件管理,并可以動(dòng)態(tài)的加載或移除。優(yōu)選地,對(duì)于步驟a)所述一個(gè)或多個(gè)數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)均可使用單獨(dú)的所述抽象密碼設(shè)備組件,或各個(gè)數(shù)據(jù)庫(kù)共享同一個(gè)所述抽象密碼設(shè)備組件。優(yōu)選地,所述密碼設(shè)備單元可以是硬件加密設(shè)備或軟件加密設(shè)備。優(yōu)選地,步驟a)通過(guò)下述方法實(shí)現(xiàn)對(duì)數(shù)據(jù)表A中的敏感字段col實(shí)施加密i.生成一個(gè)長(zhǎng)度為k-length的隨機(jī)數(shù)key,作為加密密鑰;ii.在待加密的數(shù)據(jù)表A中創(chuàng)建一個(gè)新的字段col—encrypt;iii.對(duì)敏感字段col以key為密鑰,選定加密設(shè)備和加密方式進(jìn)行加密,并將密文存儲(chǔ)于col—encrypt中;iv.將col字段中的所有信息置為空;v.將數(shù)據(jù)表A改名為A—bak;vi.創(chuàng)建基于A—bak的視圖A,所述視圖對(duì)應(yīng)的字段包括AjDak中除AjDak.col和A—bak.col—encrypt之外的所有字段和A.col字段,所述A.col字段的定義為col的值等于對(duì)A—bak.col—encrypt字段解密所得到的內(nèi)容。優(yōu)選地,步驟c)所述密鑰可以更新,所述更新使用事務(wù)進(jìn)行封裝以保證操作的完整性,所述更新按照下述步驟進(jìn)行事務(wù)開(kāi)始;使用當(dāng)前密鑰解密關(guān)系;使用新密鑰加密關(guān)系;銷毀當(dāng)前密鑰;事務(wù)結(jié)束。此外,本發(fā)明還提供了使用上述方法的數(shù)據(jù)庫(kù)信息加密系統(tǒng),如圖1所示,本發(fā)明所述系統(tǒng)包括一個(gè)安全管理主機(jī)和一個(gè)或多個(gè)數(shù)據(jù)庫(kù)服務(wù)器主機(jī);所述安全管理主機(jī)包括安全管理組件和與之?dāng)?shù)據(jù)連接的密碼元數(shù)據(jù)管理單元;所述安全管理組件為安全管理員提供用戶接口,以設(shè)定密文安全策略;所述密碼元數(shù)據(jù)管理單元維護(hù)數(shù)據(jù)庫(kù)用戶對(duì)加密密鑰的使用權(quán)限,以及各個(gè)經(jīng)加密的敏感字段在加密時(shí)所使用的密碼設(shè)備單元、加密方式和密鑰;所述數(shù)據(jù)庫(kù)服務(wù)器主機(jī)包括數(shù)據(jù)庫(kù)管理系統(tǒng),加密代理單元,抽象密碼設(shè)備組件和一個(gè)或多個(gè)密碼設(shè)備單元;所述加密代理單元和所述安全管理組件,所述數(shù)據(jù)庫(kù)管理系統(tǒng)和抽象密碼設(shè)備組件數(shù)據(jù)連接;各個(gè)密碼設(shè)備單元均和所述抽象密碼設(shè)備組件數(shù)據(jù)連接;所述數(shù)據(jù)庫(kù)管理系統(tǒng)提供標(biāo)準(zhǔn)SQL查詢接口,接受用戶操作請(qǐng)求并返回操作結(jié)果,所述操作請(qǐng)求包括數(shù)據(jù)的查詢和修改等;所述加密代理單元接受加解密請(qǐng)求并在所述抽象密碼設(shè)備組件的協(xié)調(diào)下指導(dǎo)所述密碼設(shè)備單元進(jìn)行加解密操作,并返回加解密結(jié)果。具體地,所述安全管理組件包括一個(gè)在線監(jiān)聽(tīng)裝置;所述在線監(jiān)聽(tīng)裝置用于接收發(fā)自加密代理單元的密鑰査詢請(qǐng)求包,所述請(qǐng)求包至少包括以下信息數(shù)據(jù)庫(kù)服務(wù)器主機(jī)名、關(guān)系名、用戶名;所述安全管理組件為安全管理員提供以下功能模塊(1)列舉數(shù)據(jù)庫(kù)服務(wù)器主機(jī)模塊,用于列出所有受到安全管理組件管理的數(shù)據(jù)庫(kù)服務(wù)器主機(jī);(2)新增數(shù)據(jù)庫(kù)服務(wù)器主機(jī)模塊,用于將某一個(gè)數(shù)據(jù)庫(kù)服務(wù)器納入到安全管理主機(jī)的管理域內(nèi);(3)取消數(shù)據(jù)庫(kù)服務(wù)器主機(jī)模塊,用于將某一數(shù)據(jù)庫(kù)服務(wù)器從安全管理主機(jī)的管理域內(nèi)刪除;(4)選定目標(biāo)數(shù)據(jù)庫(kù)服務(wù)器主機(jī)模塊,用于將安全管理員的操作空間定義為選定的數(shù)據(jù)庫(kù)服務(wù)器;(5)列舉所有數(shù)據(jù)庫(kù)中的關(guān)系模塊,用于列出當(dāng)前操作空間中所有的關(guān)系;(6)查詢某個(gè)關(guān)系的加密保護(hù)狀態(tài)模塊,用于列舉該關(guān)系所有的加密字段、列舉能解密該關(guān)系的所有用戶、列出該關(guān)系所使用的加密參數(shù),所述加密參數(shù)包括加密算法、密鑰長(zhǎng)度和算法工作模式(7)設(shè)定對(duì)關(guān)系的加密保護(hù)模塊,該模塊可以對(duì)未曾加密的關(guān)系實(shí)施加密保護(hù),也可以修改已經(jīng)實(shí)施了加密保護(hù)的關(guān)系的加密策略;(8)列舉數(shù)據(jù)庫(kù)中的用戶模塊,用于列出當(dāng)前操作空間中的所用用戶標(biāo)識(shí);(9)密鑰更新模塊,用于對(duì)某個(gè)已加密關(guān)系的加密密鑰進(jìn)行更新,該操作使用事務(wù)進(jìn)行封裝以保證操作的完整性,按照如下步驟進(jìn)行事務(wù)開(kāi)始,使用舊的密鑰解密該關(guān)系,使用新密鑰對(duì)關(guān)系進(jìn)行加密,銷毀舊的密鑰,事務(wù)結(jié)束;(10)修改加密設(shè)備配置模塊,用于修改加密設(shè)置項(xiàng)所采用的加密算法、密鑰長(zhǎng)度、加密工作模式。所述密碼元數(shù)據(jù)管理單元用于存儲(chǔ)和管理密鑰、加密工作模式配置信息、關(guān)系與密鑰的對(duì)應(yīng)關(guān)系和用戶對(duì)密鑰的支配關(guān)系。所述數(shù)據(jù)庫(kù)管理系統(tǒng)用于處理和應(yīng)答用戶的査詢請(qǐng)求,并根據(jù)用戶査詢是否涉及加密過(guò)的數(shù)據(jù),執(zhí)行不同的操作流程若用戶査詢不涉及密文數(shù)據(jù),則直接進(jìn)行數(shù)據(jù)查詢,并返回給用戶;若用戶査詢涉及密文數(shù)據(jù),則向加密代理單元發(fā)送解密請(qǐng)求,如果該用戶具有密文查詢權(quán)限則向其返回解密后的明文,若該用戶不具有解密權(quán)限則向其返回?zé)o意義的密文。所述加密代理單元用于根據(jù)由安全管理組件發(fā)來(lái)的指令執(zhí)行相應(yīng)操作,由數(shù)據(jù)庫(kù)管理系統(tǒng)發(fā)來(lái)的請(qǐng)求,并調(diào)用抽象密碼設(shè)備單元進(jìn)行數(shù)據(jù)的加解密;所述加密管理單元執(zhí)行的相應(yīng)操作包括(1)對(duì)關(guān)系中的某一字段實(shí)施加密操作,此時(shí)由所述安全管理組件發(fā)來(lái)的指令包括以下內(nèi)容待加密的關(guān)系的標(biāo)識(shí)、待加密的字段標(biāo)識(shí)、使用的密碼設(shè)備單元標(biāo)識(shí)、工作模式和密鑰長(zhǎng)度;(2)對(duì)關(guān)系中的某一字段實(shí)施解密操作,此時(shí)由所述安全管理組件發(fā)來(lái)的指令包括以下內(nèi)容待加密的關(guān)系的標(biāo)識(shí)、待加密的字段標(biāo)識(shí)、使用的密碼設(shè)備單元標(biāo)識(shí)、工作模式和密鑰長(zhǎng)度;所述由數(shù)據(jù)庫(kù)管理系統(tǒng)發(fā)來(lái)的請(qǐng)求包括(1)數(shù)據(jù)讀取請(qǐng)求;讀取請(qǐng)求包括以下內(nèi)容發(fā)起讀取的用戶標(biāo)識(shí);讀取的關(guān)系的標(biāo)識(shí);(2)數(shù)據(jù)寫入請(qǐng)求。所述加密代理單元在根據(jù)安全管理組件發(fā)來(lái)的指令執(zhí)行對(duì)關(guān)系A(chǔ)的所述某一字段col實(shí)施加密操作時(shí),按照如下步驟進(jìn)行(1)接收并解析安全管理組件發(fā)來(lái)的指令;待加密關(guān)系的標(biāo)識(shí)A;待加密字段標(biāo)識(shí):C0l;密碼設(shè)備單元標(biāo)識(shí)n;工作模式m;密鑰長(zhǎng)度k-length;(2)生成一個(gè)長(zhǎng)度為k-length的隨機(jī)數(shù)key,作為加密密鑰;(3)修改關(guān)系A(chǔ)為其創(chuàng)建一個(gè)新的字段col_encrypt;(4)對(duì)于A中的每一條記錄,對(duì)其col字段以key為密鑰,使用密碼設(shè)備單元n以工作模式m進(jìn)行加密操作,將得出的密文存儲(chǔ)于col一encrypt字段中;(5)將A中的col字段的所有信息置為空;(6)將A改名為A_bak;(7)創(chuàng)建基于A—bak的視圖A,定義A的字段包括A_bak中除col和col_encrypt之外的所有其它字段和一個(gè)新的col字段,所述新的col字段的定義為col的值等于對(duì)A_bak中col—encrypt字段以key為密鑰,使用密碼設(shè)備單元n以工作模式m進(jìn)行解密操作所得到的值;(8)創(chuàng)建對(duì)于A的寫入觸發(fā)器update—trigger,當(dāng)用戶對(duì)A進(jìn)行寫入操作時(shí),使用密碼設(shè)備單元n以工作模式m對(duì)用戶提交的col字段的數(shù)據(jù)進(jìn)行加密操作,并將得出的密文存儲(chǔ)于A的C0l_encrypt字段中,A的col字段置為空;(9)發(fā)送加密關(guān)系成功數(shù)據(jù)包,將所使用的密鑰key發(fā)送給安全管理組件進(jìn)行注冊(cè)。所述加密代理單元在根據(jù)安全管理組件發(fā)來(lái)的指令執(zhí)行對(duì)關(guān)系的所述某一字段實(shí)施解密操作時(shí),按照如下步驟進(jìn)行(1)接收并解析安全管理組件發(fā)來(lái)的指令;待解密關(guān)系的標(biāo)識(shí)A;待解密字段標(biāo)識(shí)C0l;密碼設(shè)備單元標(biāo)識(shí)n;工作模式ffl;密鑰長(zhǎng)度k-length;密鑰key(2)刪除A;(3)刪除A的寫入觸發(fā)器update_trigger;(4)對(duì)于A—bak中的每一條記錄,對(duì)其col—encrypt字段以key為密鑰,使用密碼設(shè)備單元n以工作模式m進(jìn)行解密操作,將得出的明文存儲(chǔ)于col字段中;(5)刪除A_bak中的col_encrypt字段;(6)將A—bak更名為A;(7)發(fā)送解密成功數(shù)據(jù)包,安全管理組件清除對(duì)A進(jìn)行加密的注冊(cè)信息。所述加密代理單元在根據(jù)數(shù)據(jù)庫(kù)管理系統(tǒng)發(fā)來(lái)的指令執(zhí)行數(shù)據(jù)讀取請(qǐng)求時(shí),按照如下步驟進(jìn)行(l)解析數(shù)據(jù)讀取請(qǐng)求數(shù)據(jù)包;發(fā)起讀取的用戶標(biāo)識(shí)Uid;讀取的關(guān)系的標(biāo)識(shí)Tid;.(2)獲取解密密鑰,將Uid和Tid發(fā)送到安全管理組件,請(qǐng)求解密密鑰并根據(jù)Uid是否具有對(duì)Tid的解密權(quán)限執(zhí)行不同的流程(a)若Uid具有對(duì)Tid的解密權(quán)限,則安全管理組件將返回以下信息密鑰key、密碼設(shè)備單元標(biāo)識(shí)符n、工作模式m和密鑰長(zhǎng)度k—length;(b)若Uid沒(méi)有對(duì)Tid解密的權(quán)限,安全管理組件將返回以下信息密碼設(shè)備單元標(biāo)識(shí)符n、工作模式m和密鑰長(zhǎng)度k_length;加密代理單元隨機(jī)生成一個(gè)密鑰長(zhǎng)度為k_length的密鑰key;(3)構(gòu)建加密代理消息包,依次取得關(guān)系Tid中某一記錄中的密文字段msg,并將其與密鑰key、密碼設(shè)備單元標(biāo)識(shí)符n、工作模式m和密鑰長(zhǎng)度k—length—起生成一個(gè)加密代理消息包,并將該加密代理消息包發(fā)送給抽象密碼設(shè)備組件進(jìn)行解密操作;(4)將抽象密碼設(shè)備組件返回的明文字段返回給數(shù)據(jù)庫(kù)管理系統(tǒng)。所述加密代理單元在根據(jù)數(shù)據(jù)庫(kù)管理系統(tǒng)發(fā)來(lái)的指令執(zhí)行數(shù)據(jù)寫入請(qǐng)求時(shí),按照如下步驟進(jìn)行(1)解析數(shù)據(jù)讀取請(qǐng)求數(shù)據(jù)包;發(fā)起讀取的用戶標(biāo)識(shí)Uid;讀取的關(guān)系的標(biāo)識(shí)Tid;(2)獲取加密密鑰,將Uid和Tid發(fā)送到安全管理組件,請(qǐng)求解密密鑰并根據(jù)Uid是否具有對(duì)Tid的解密權(quán)限執(zhí)行不同的流程(a)若Uid具有對(duì)Tid的加密權(quán)限,則安全管理組件將返回以下信息密鑰key、密碼設(shè)備單元標(biāo)識(shí)符n、工作模式m和密鑰長(zhǎng)度k—length;加密代理單元取得要插入的明文字段msg,并將其與密鑰key、密碼設(shè)備單元標(biāo)識(shí)符n、工作模式m和密鑰長(zhǎng)度k—length—起組成加密代理消息包,將該包發(fā)送給抽象密碼設(shè)備組件進(jìn)行加密操作;并將加密后的密文字段返回給數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行存儲(chǔ);(b)若Uid沒(méi)有對(duì)Tid解密的權(quán)限,安全管理組件將返回以下信息密碼設(shè)備單元標(biāo)識(shí)符n、工作模式m和密鑰長(zhǎng)度k—length;加密代理向數(shù)據(jù)庫(kù)管理系統(tǒng)返回獲取密鑰錯(cuò)誤信息。所述抽象密碼設(shè)備組件用于管理多個(gè)密碼設(shè)備單元;為加密代理單元提供統(tǒng)一的加密和解密調(diào)用接口;根據(jù)加密代理消息包構(gòu)建密文服務(wù)請(qǐng)求包,并按照加密代理消息包中的密碼設(shè)備單元標(biāo)識(shí),將所述密文服務(wù)請(qǐng)求包發(fā)至相應(yīng)的密碼設(shè)備單元執(zhí)行數(shù)據(jù)加解密操作;解密操作完成后,抽象密碼設(shè)備組件將從密文服務(wù)應(yīng)答包中返回的數(shù)據(jù),傳遞給加密代理單元;所述加密代理消息包至少包括以下信息密碼設(shè)備單元標(biāo)識(shí)符n、密鑰key、工作模式m和數(shù)據(jù)msg。所述密碼設(shè)備單元用于對(duì)抽象密碼設(shè)備組件提交的密文服務(wù)請(qǐng)求包進(jìn)行加密或解密操作,并將操作結(jié)果以密文服務(wù)應(yīng)答包的形式返回給抽象密碼設(shè)備組件,其中,密文服務(wù)請(qǐng)求包的內(nèi)容包括密鑰key、工作模式m和數(shù)據(jù)msg;密文服務(wù)應(yīng)答包的內(nèi)容包括密文服務(wù)處理后的數(shù)據(jù)R一msg;所述密碼設(shè)備單元可以是加密卡、加密機(jī)等硬件形式的加密設(shè)備,或者是軟件形式的加密設(shè)備,但無(wú)論采用何種形式,均應(yīng)能夠提供數(shù)據(jù)加解密服務(wù)。和現(xiàn)有技術(shù)相比,本發(fā)明具有如下優(yōu)勢(shì)1.基于本發(fā)明的數(shù)據(jù)庫(kù)系統(tǒng)具有對(duì)上層應(yīng)用軟件和底層數(shù)據(jù)庫(kù)管理系統(tǒng)的透明性。數(shù)據(jù)庫(kù)加密系統(tǒng)與數(shù)據(jù)庫(kù)管理系統(tǒng)的交互,全部通過(guò)加密代理單元,采用標(biāo)準(zhǔn)SQL接口實(shí)現(xiàn)。同時(shí),對(duì)于上層應(yīng)用來(lái)說(shuō),加密后的關(guān)系與加密前的關(guān)系沒(méi)有名稱或調(diào)用方式上的差異,因此,無(wú)需對(duì)已部署的上層應(yīng)用進(jìn)行修改。2.基于本發(fā)明的數(shù)據(jù)庫(kù)系統(tǒng)可通過(guò)單獨(dú)的安全管理主機(jī)進(jìn)行密鑰的統(tǒng)一管理,通過(guò)將密鑰管理與數(shù)據(jù)庫(kù)服務(wù)器管理分離實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)管理員權(quán)限的限制,同時(shí)避免了存儲(chǔ)介質(zhì)丟失所引起的信息泄漏風(fēng)險(xiǎn)。經(jīng)本發(fā)明數(shù)據(jù)庫(kù)信息保護(hù)方法保護(hù)后的數(shù)據(jù)只有合法用戶才能夠訪問(wèn),包括數(shù)據(jù)庫(kù)管理員在內(nèi)的任何其他用戶,只要不持有相關(guān)密鑰,就無(wú)法訪問(wèn)明文格式的數(shù)據(jù)內(nèi)容,大大增強(qiáng)了數(shù)據(jù)庫(kù)系統(tǒng)的安全性。3.除此之外,基于本發(fā)明的數(shù)據(jù)庫(kù)系統(tǒng)還提供了良好的算法兼容性和可擴(kuò)展性。考慮到部分用戶可能會(huì)采用非公開(kāi)的加密算法,基于本發(fā)明的數(shù)據(jù)庫(kù)系統(tǒng)使用統(tǒng)一的協(xié)調(diào)組件(抽象密碼設(shè)備組件)以過(guò)濾加密設(shè)備或算法在接口上的差異,為用戶使用特殊的密碼算法提供了便利。圖1是本發(fā)明數(shù)據(jù)庫(kù)信息加密系統(tǒng)的結(jié)構(gòu)圖2是本發(fā)明實(shí)施例數(shù)據(jù)庫(kù)信息加密系統(tǒng)的結(jié)構(gòu)圖。具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)的說(shuō)明,但不以任何方式限制本發(fā)明的范圍。本實(shí)施例采用如圖2所示的數(shù)據(jù)庫(kù)系統(tǒng)結(jié)構(gòu),其中,設(shè)定數(shù)據(jù)庫(kù)系統(tǒng)中有三個(gè)用戶,分別是admin、tom和jerry,其中admin是數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)庫(kù)管理員,torn和jerry是一般用戶。假定數(shù)據(jù)庫(kù)中保存著一個(gè)由admin創(chuàng)建的涉及機(jī)密信息的數(shù)據(jù)表emp,該數(shù)據(jù)表的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)內(nèi)容分別如下表2,3所示,其中,Salary字段屬于機(jī)密信息,需要加密存儲(chǔ)。表2:數(shù)據(jù)表emp的數(shù)據(jù)結(jié)構(gòu)<table>tableseeoriginaldocumentpage13</column></row><table>表3:數(shù)據(jù)表emp的數(shù)據(jù)內(nèi)容<table>tableseeoriginaldocumentpage13</column></row><table>本實(shí)施例展示如何使用本發(fā)明對(duì)emp中的Salary字段實(shí)施加密保護(hù),并為torn賦予解密密鑰使用權(quán)限。如附圖2所示,tom在使用前端應(yīng)用2(VisualSQL)訪問(wèn)e卿時(shí),可以正常的讀取Salary字段的值,而其他用戶(包括數(shù)據(jù)庫(kù)系統(tǒng)的管理員admin和一般用戶jerry)在訪問(wèn)emp時(shí),僅能正確讀取除Salary字段之外的其他字段,而Salary字段的取值為無(wú)意義的密文。在本實(shí)施例中,采用了Ingres作為數(shù)據(jù)庫(kù)管理系統(tǒng),采用了Ingres系統(tǒng)自帶的VisaulSQL作為前端應(yīng)用,采用了軟件實(shí)現(xiàn)的AES算法作為密碼設(shè)備單元,但在實(shí)際應(yīng)用中,這些組件都可以進(jìn)行替換。安全管理員8對(duì)表emp中需要加密的Salary字段實(shí)施加密策略,具體的,該策略按照以下歩驟進(jìn)行(1)安全管理組件9向加密代理單元5發(fā)送對(duì)表emp的Salary字段實(shí)施加密的指令。指令參數(shù)為A=emp;col=Salary;n=AES;m=encrypt;k-length=192;(2)加密代理單元5生成一個(gè)長(zhǎng)度為192的隨機(jī)數(shù)key,作為加密密鑰;(3)修改數(shù)據(jù)表emp為其創(chuàng)建一個(gè)新的字段Salary—encrypt;(4)對(duì)于表emp中的每一條記錄,對(duì)其Salary字段以key為密鑰,使用密碼設(shè)備單元AES進(jìn)行加密操作,將得出的密文存儲(chǔ)于Salary—encrypt字段中;(5)將表emp中的Salary字段的所有信息置為空;(6)將表emp改名為emp_bak;(7)創(chuàng)建基于表emp—bak的視圖emp,定義emp的字段包括表emp—bak中除Salary和Salary—encrypt之外的所有其它字段和一個(gè)新的Salary字段,所述新的Salary字段的定義為Salary的值等于對(duì)表emp_bak中Salary—encrypt字段以key為密鑰,使用密碼設(shè)備單元AES進(jìn)行解密操作所得到的值;(8)創(chuàng)建對(duì)于視圖emp的寫入觸發(fā)器update_trigger,當(dāng)用戶對(duì)視圖emp進(jìn)行寫入操作時(shí),使用密碼設(shè)備單元AES對(duì)用戶提交的Salary字段的數(shù)據(jù)進(jìn)行加密操作,并將得出的密文存儲(chǔ)于表emp—bak的Salary_encrypt字段中,表emp—bak的Salary字段置為空;(9)加密代理單元5向安全管理組件9發(fā)送加密數(shù)據(jù)表成功數(shù)據(jù)包,安全管理組件9對(duì)本次加密所使用的密鑰key進(jìn)行注冊(cè),并將其保存在密碼元數(shù)據(jù)管理單元10中。應(yīng)用了上述加密策略之后,安全管理員將表emp訪問(wèn)密鑰的使用權(quán)賦予給用戶tom。此操作將在密碼元數(shù)據(jù)管理單元10中保存tom對(duì)于表emp的訪問(wèn)權(quán)限。經(jīng)過(guò)上述配置之后,分別用不同的用戶身份登錄VisaulSQL,在其中對(duì)表emp進(jìn)行査詢,輸入相同的査詢語(yǔ)句select*fromemp,可以看到不同的查詢結(jié)果。用tom進(jìn)行訪問(wèn)可以看到有意義的明文,如表4所示,其中salary字段的信息是經(jīng)過(guò)解密后的明文,其數(shù)值與應(yīng)用加密策略之前的數(shù)值是一致的。表4:Tom査詢emp得到的結(jié)果<table>tableseeoriginaldocumentpage15</column></row><table>而使用管理員用戶admin和其他一般用戶jerry執(zhí)行相同的査詢語(yǔ)句則返回如表5所示的數(shù)據(jù)表5:—般用戶査詢emp得到的結(jié)果<table>tableseeoriginaldocumentpage15</column></row><table>表中五個(gè)未實(shí)施加密策略的字段Id、Name、Age、Enrollment和Address,其取值都正常的返回至前端應(yīng)用,而實(shí)施了加密策略的字段Salary則返回?zé)o意義的密文值。這是因?yàn)閮蓚€(gè)用戶admin和jerry沒(méi)有使用密鑰key的權(quán)限,使用錯(cuò)誤的密鑰進(jìn)行了解密操作。從本實(shí)施例可以看出,即便是數(shù)據(jù)庫(kù)系統(tǒng)的管理員,只要沒(méi)有正確的解密密鑰,就無(wú)法獲得正確的敏感信息。從存儲(chǔ)介質(zhì)的角度上來(lái)看,保密字段也是被加密后進(jìn)行存儲(chǔ)的,所有明文信息在加密策略實(shí)施完成之后即被清除,即使攻擊者獲得了敏感信息的存儲(chǔ)介質(zhì),只要不掌握密鑰,也無(wú)法解密敏感信息。權(quán)利要求1.一種數(shù)據(jù)庫(kù)信息加密方法,其特征在于,所述方法包括a)對(duì)于一個(gè)或多個(gè)數(shù)據(jù)庫(kù)中的一個(gè)或多個(gè)數(shù)據(jù)表,使用相同或不同的密碼設(shè)備單元,以相同或不同的密鑰加密其中一個(gè)或多個(gè)敏感字段,并為其創(chuàng)建同名視圖,所述視圖指向加密后的數(shù)據(jù)表;b)維護(hù)數(shù)據(jù)庫(kù)用戶對(duì)加密密鑰的使用權(quán)限,以及各個(gè)經(jīng)加密的敏感字段在加密時(shí)所使用的密碼設(shè)備單元、加密方式和密鑰;c)用戶請(qǐng)求讀取經(jīng)加密的數(shù)據(jù)表時(shí),檢查用戶是否具有相應(yīng)的敏感字段的密鑰使用權(quán)限,若是,則取得并使用密鑰以和所述加密方式相應(yīng)的解密方式解密,用戶獲得正確的敏感字段信息;若否,則使用隨機(jī)密鑰以和所述加密方式相應(yīng)的解密方式解密,用戶獲得經(jīng)錯(cuò)誤解密的敏感字段信息。2.如權(quán)利要求1所述的數(shù)據(jù)庫(kù)信息加密方法,其特征在于,所述方法包括d)用戶請(qǐng)求修改所述經(jīng)加密的敏感字段信息時(shí),檢査用戶是否具有相應(yīng)敏感字段的密鑰使用權(quán)限,若是,則加密修改后的內(nèi)容;若否,則返回獲取密鑰失敗信息,不進(jìn)行數(shù)據(jù)修改操作。3.如權(quán)利要求1或2所述的數(shù)據(jù)庫(kù)信息加密方法,其特征在于,步驟a)所述加密通過(guò)由抽象密碼設(shè)備組件提供的統(tǒng)一的接口實(shí)現(xiàn),所述抽象密碼設(shè)備組件進(jìn)一步調(diào)用一個(gè)或多個(gè)不同的所述密碼設(shè)備單元實(shí)施加解密操作,所述密碼設(shè)備單元由所述抽象密碼設(shè)備組件管理,并可以動(dòng)態(tài)的加載或移除。4.如權(quán)利要求3所述的數(shù)據(jù)庫(kù)信息加密方法,其特征在于,對(duì)于所述一個(gè)或多個(gè)數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)均使用單獨(dú)的所述抽象密碼設(shè)備組件,或各個(gè)數(shù)據(jù)庫(kù)共享同一個(gè)所述抽象密碼設(shè)備組件。5.如權(quán)利要求3所述的數(shù)據(jù)庫(kù)信息保護(hù)方法,其特征在于,所述密碼設(shè)備單元是硬件加密設(shè)備或軟件加密設(shè)備。6.如權(quán)利要求1或2所述的數(shù)據(jù)庫(kù)信息加密方法,其特征在于,步驟a)通過(guò)下述方法實(shí)現(xiàn)對(duì)數(shù)據(jù)表A中的敏感字段col實(shí)施加密i.生成一個(gè)長(zhǎng)度為k-length的隨機(jī)數(shù)key,作為加密密鑰;ii.在待加密的數(shù)據(jù)表A中創(chuàng)建一個(gè)新的字段col_encrypt;iii.對(duì)敏感字段col以key為密鑰,選定加密設(shè)備和加密方式進(jìn)行加密,并將密文存儲(chǔ)于col—encrypt中;iv.將col字段中的所有信息置為空;v.將數(shù)據(jù)表A改名為A一bak;vi.創(chuàng)建基于A—bak的視圖A,所述視圖對(duì)應(yīng)的字段包括A—bak中除AJ)ak.col和A—bak.C0l_enCrypt之外的所有字段和A.col字段,所述A.col字段的定義為col的值等于對(duì)A_bak.col—encrypt字段解密所得到的內(nèi)容。7.如權(quán)利要求1或2所述的數(shù)據(jù)庫(kù)信息加密方法,其特征在于,步驟c)所述隨機(jī)密鑰是和所述正確的密鑰長(zhǎng)度相同的由隨機(jī)數(shù)生成的密鑰。8.如權(quán)利要求1或2所述的數(shù)據(jù)庫(kù)信息加密方法,其特征在于,步驟c)所述密鑰可以更新,所述更新使用事務(wù)進(jìn)行封裝以保證操作的完整性,所述更新按照下述步驟進(jìn)行事務(wù)開(kāi)始;使用當(dāng)前密鑰解密關(guān)系;使用新密鑰加密關(guān)系;銷毀當(dāng)前密鑰;事務(wù)結(jié)束。9.一種數(shù)據(jù)庫(kù)信息加密系統(tǒng),其特征在于,包括一個(gè)安全管理主機(jī)和一個(gè)或多個(gè)數(shù)據(jù)庫(kù)服務(wù)器主機(jī);所述安全管理主機(jī)包括安全管理組件(9)和與之?dāng)?shù)據(jù)連接的密碼元數(shù)據(jù)管理單元(10);所述安全管理組件(9)為安全管理員提供用戶接口,以設(shè)定密文安全策略;所述密碼元數(shù)據(jù)管理單元(10)維護(hù)數(shù)據(jù)庫(kù)用戶對(duì)加密密鑰的使用權(quán)限,以及各個(gè)經(jīng)加密的敏感字段在加密時(shí)所使用的密碼設(shè)備單元、加密方式和密鑰;所述數(shù)據(jù)庫(kù)服務(wù)器主機(jī)包括數(shù)據(jù)庫(kù)管理系統(tǒng)(3),加密代理單元(5),抽象密碼設(shè)備組件(6)和一個(gè)或多個(gè)密碼設(shè)備單元(7);所述加密代理單元(5)和所述安全管理組件(9)、所述數(shù)據(jù)庫(kù)管理系統(tǒng)(3)和抽象密碼設(shè)備組件(6)數(shù)據(jù)連接;各個(gè)密碼設(shè)備單元(7)均和所述抽象密碼設(shè)備組件(6)數(shù)據(jù)連接;所述數(shù)據(jù)庫(kù)管理系統(tǒng)(3)提供標(biāo)準(zhǔn)SQL查詢接口,接受用戶操作請(qǐng)求并返回操作結(jié)果;所述加密代理單元(5)接受加解密請(qǐng)求并在所述抽象密碼設(shè)備組件(6)的協(xié)調(diào)下指導(dǎo)所述密碼設(shè)備單元(7)進(jìn)行加解密操作,并返回加解密結(jié)果。全文摘要本發(fā)明公開(kāi)了一種數(shù)據(jù)庫(kù)信息加密方法和使用該方法的數(shù)據(jù)庫(kù)信息加密系統(tǒng),屬于信息安全
技術(shù)領(lǐng)域:
。本發(fā)明方法包括通過(guò)密碼設(shè)備單元加密數(shù)據(jù)表中的敏感字段,并為其創(chuàng)建指向加密后的數(shù)據(jù)表的同名視圖;維護(hù)用戶對(duì)密鑰的使用權(quán)限,和加密所使用的密碼設(shè)備單元、加密方式和密鑰;對(duì)于有權(quán)限的用戶,允許其順利讀取并修改加密信息;對(duì)于無(wú)權(quán)限的用戶,讀取加密信息時(shí)使用隨機(jī)密鑰錯(cuò)誤解密,修改加密信息時(shí)則返回獲取密鑰失敗信息。本發(fā)明系統(tǒng)包括一個(gè)安全管理主機(jī)和一個(gè)或多個(gè)數(shù)據(jù)庫(kù)服務(wù)器主機(jī),并設(shè)置抽象密碼設(shè)備組件提供統(tǒng)一的加解密接口并調(diào)用一個(gè)或多個(gè)不同的密碼設(shè)備單元實(shí)現(xiàn)加解密。本發(fā)明可用于數(shù)據(jù)庫(kù)信息的加密。文檔編號(hào)G06F21/00GK101504706SQ20091007878公開(kāi)日2009年8月12日申請(qǐng)日期2009年3月3日優(yōu)先權(quán)日2009年3月3日發(fā)明者咸鶴群,然安,敏張,馳陳申請(qǐng)人:中國(guó)科學(xué)院軟件研究所