本申請是申請?zhí)枮?01280067738.9、申請日為2012年11月23日、名稱為“安全的數(shù)據(jù)庫搜索”的pct發(fā)明專利申請的分案申請。
本發(fā)明涉及保護(hù)數(shù)據(jù)庫和在這種被保護(hù)的數(shù)據(jù)庫中的搜索。
背景技術(shù):
數(shù)據(jù)庫和其他數(shù)字記錄存儲可以由密碼、防火墻和其他安全機(jī)制來保護(hù)。然而,一旦這樣的安全措施被突破,那么數(shù)據(jù)可以被自由地訪問。因此,加密可以用于保護(hù)數(shù)據(jù)庫記錄中的特定屬性、字段或列。
例如,在sql插入程序以將記錄添加到數(shù)據(jù)庫期間,某些列可以被定義為加密的。在數(shù)據(jù)被添加之前,加密算法可以應(yīng)用于去往這樣的列的值。當(dāng)這樣的數(shù)據(jù)被檢索時,在數(shù)據(jù)呈現(xiàn)給調(diào)用函數(shù)之前,相應(yīng)的解密函數(shù)可以應(yīng)用于加密屬性或值。
在這樣的示例中,用戶可以用諸如以下sql語句將記錄放入數(shù)據(jù)集:
insertintodataset(creditcardnumber,cardtype,expirydate,emailaddress,postaladdress)values(‘1234432112344321’,‘visa’,’00-00-00’,‘someone@somewhere.com’,‘1thestreet,postaltown,somewhere’)(插入into數(shù)據(jù)集(信用卡編號,卡類型,有效期,郵箱地址,郵寄地址)值(‘1234432112344321’,‘visa’,’00-00-00’,‘someone@somewhere.com’,‘1街道,通郵市鎮(zhèn),某地’))
數(shù)據(jù)庫可以被配置成對字段creditcardnumber和expirydate進(jìn)行加密。當(dāng)上面的語句由數(shù)據(jù)庫管理系統(tǒng)處理時,值1234432112344321和00-00-00在被存儲之前將自動地被加密。
由于不能使搜索結(jié)果(即select查詢中的where子句)匹配加密的字段、列或?qū)傩裕涗浿械闹辽僖恍┳侄伪仨毷羌兾谋镜囊苑奖銠z索。因此,經(jīng)常是某一商業(yè)數(shù)據(jù)形式的至少一些數(shù)據(jù)(即非主要關(guān)鍵數(shù)據(jù))必須以純文本存儲。
這種妥協(xié)允許搜索和檢索,但是會降低數(shù)據(jù)庫的整體安全性。對數(shù)據(jù)庫的未授權(quán)訪問會導(dǎo)致訪問一些純文本信息。入侵者可以使用該未加密的信息來確定最有價值的加密記錄,并且將任何實質(zhì)性攻擊集中在這種更高價值的記錄上。換句話說,當(dāng)對整個數(shù)據(jù)庫進(jìn)行解密可能是不切實際或不可能的時候,識別能在合理時限內(nèi)解密的高價值記錄的小子集相對來說沒那么重要。
如果數(shù)據(jù)庫中所有的列被加密,則這樣的集中攻擊將更難以進(jìn)行,但是這將阻礙數(shù)據(jù)的合法搜索和檢索。
因此,需要有克服這些問題的系統(tǒng)和方法。
技術(shù)實現(xiàn)要素:
在此背景下,根據(jù)第一方面,提供一種在數(shù)據(jù)庫中安全地存儲數(shù)據(jù)的方法,包括以下步驟:
接收待存儲的數(shù)據(jù);
將數(shù)據(jù)分成多個元素;
用加密函數(shù)對多個元素的每個元素進(jìn)行加密;以及
結(jié)合加密的元素以形成數(shù)據(jù)屬性;以及
在數(shù)據(jù)庫中存儲數(shù)據(jù)屬性。這提供了一種安全地存儲數(shù)據(jù)的方法,同時保留了搜索加密的列、數(shù)據(jù)屬性或字段的能力。元素可以是數(shù)組元素或其他數(shù)據(jù)類型??梢栽趫?zhí)行其他步驟之后進(jìn)行存儲步驟。每個元素可以包含一個或更多個字符或單元。
可選擇地,該方法還可以包括在數(shù)據(jù)庫中存儲數(shù)據(jù)屬性之前從數(shù)據(jù)屬性除去以下項的步驟:
所有數(shù)字字符;
所有非數(shù)字字符;或者
所有非字母數(shù)字字符。這提供了改進(jìn)可搜索性和性能的標(biāo)準(zhǔn)化水平。標(biāo)準(zhǔn)化步驟諸如替換字符類型可以在數(shù)據(jù)被存儲之前進(jìn)行。
可選擇地,該方法還可以包括用以下替換除去的字符的步驟:
字母字符;和/或
字母數(shù)字字符。這改進(jìn)了字段中數(shù)據(jù)類型的分布且有助于性能。值或字符的除去和/或替換可以在數(shù)據(jù)被分開時或在數(shù)據(jù)被結(jié)合之后進(jìn)行。例如,可以根據(jù)方案選擇替換字符。
可選擇地,該方法還可以包括在數(shù)據(jù)庫中存儲記錄之前將第二加密函數(shù)應(yīng)用到記錄的步驟。這通過降低發(fā)動基于頻率或統(tǒng)計的加密攻擊以及隱藏可能出現(xiàn)的任何模式諸如由替換步驟或程序引起的模式的能力來改進(jìn)了安全性。加密函數(shù)或算法可以與應(yīng)用于數(shù)組元素的加密函數(shù)或算法相同或不同。密鑰也可以是不同的??梢栽跀?shù)據(jù)元素被結(jié)合之前但在字符的任何替換或其他標(biāo)準(zhǔn)化步驟之前或之后應(yīng)用第二加密函數(shù)或算法。該第二加密函數(shù)因此可以以與第一加密函數(shù)類似的方式應(yīng)用于單獨的字符或元素。
根據(jù)另一方面,提供了一種根據(jù)任一所述方法填充的數(shù)據(jù)庫。
根據(jù)第二方面,提供了一種搜索具有加密數(shù)據(jù)屬性的數(shù)據(jù)庫的方法,該方法包括以下步驟:
接收搜索項;
用加密函數(shù)對搜索項進(jìn)行加密;以及
搜索數(shù)據(jù)庫尋找具有匹配于加密搜索項的數(shù)據(jù)屬性的記錄。該方法允許數(shù)據(jù)庫在加密字段、列或?qū)傩陨媳凰阉?。因此,?shù)據(jù)庫可以被搜索以尋找匹配或部分匹配(例如,使用sqllike函數(shù))而不降低安全性。例如,第一方面可以與第二方面結(jié)合作為可以合并入系統(tǒng)或分布式網(wǎng)絡(luò)的另一結(jié)合的方法。
可選擇地,對搜索項進(jìn)行加密還可以包括以下步驟:
將搜索項分成多個元素;
對多個元素的每個元素進(jìn)行加密;以及
結(jié)合所有加密的元素以形成加密的搜索項。換句話說,相同或類似的步驟可應(yīng)用于搜索項或值,如同在存儲于數(shù)據(jù)庫中之前應(yīng)用于數(shù)據(jù)一樣。
可選擇地,該方法還可以包括在搜索數(shù)據(jù)庫之前從加密的搜索項除去以下項的步驟:
所有數(shù)字字符;
所有非數(shù)字字符;或者
所有非字母數(shù)字字符。這是用于改進(jìn)數(shù)據(jù)檢索或存儲性能的標(biāo)準(zhǔn)化程序。
可選擇地,該方法還可以包括用以下替換除去的字符的步驟:
字母字符;和/或
字母數(shù)字字符。
可選擇地,該方法還可以包括在搜索數(shù)據(jù)庫之前將第二加密函數(shù)應(yīng)用到搜索項的步驟。該函數(shù)可以與初始函數(shù)相同或不同,并且具有不同的密鑰。
優(yōu)選地,可以通過sql查詢來執(zhí)行搜索。這可以是select語句??梢允褂闷渌麛?shù)據(jù)庫訪問語言或接口。
優(yōu)選地,該方法還可以包括檢索具有匹配于加密搜索項的數(shù)據(jù)屬性的記錄的步驟。
優(yōu)選地,該方法還可以包括對檢索的記錄進(jìn)行解密的步驟。
根據(jù)第三方面,提供一種被配置成執(zhí)行上述一種方法或多種方法的系統(tǒng)。該系統(tǒng)可以例如是服務(wù)器、數(shù)據(jù)庫服務(wù)器或其他計算機(jī)系統(tǒng)。
該系統(tǒng)還可以包括被配置成安全地存儲且搜索存儲的數(shù)據(jù)的邏輯組合(例如,處理器或服務(wù)器)。
該方法可以作為包括程序指令的應(yīng)用或計算機(jī)程序被執(zhí)行,當(dāng)在計算機(jī)上執(zhí)行程序指令時,其使計算機(jī)進(jìn)行上述方法步驟。計算機(jī)可以包括臺式機(jī)、筆記本電腦、服務(wù)器、嵌入式計算機(jī)、集成電路、嵌入在其他裝置或設(shè)備中的芯片或其他處理器。
計算機(jī)程序可以作為計算機(jī)可讀介質(zhì)或信號被存儲。
應(yīng)當(dāng)注意的是,上述任何特征可以與本發(fā)明的任何特定方面或?qū)嵤┓绞揭黄鹗褂谩?/p>
附圖說明
本發(fā)明可以以多種方式付諸于實踐,現(xiàn)在將參照附圖僅作為示例來描述實施方式,其中:
圖1示出了僅作為示例給出的用于在數(shù)據(jù)庫中存儲數(shù)據(jù)的方法的流程圖;
圖2示出了用于搜索圖1的數(shù)據(jù)庫的方法的流程圖;以及
圖3示出了僅作為示例給出的用于實現(xiàn)圖1和圖2的方法的系統(tǒng)的示意圖。
應(yīng)當(dāng)注意的是,為簡單起見,所示出的圖不一定按比例繪制。
具體實施方式
從上面背景部分中描述的相同插入語句開始,即:
insertintodataset(creditcardnumber,cardtype,expirydate,emailaddress,postaladdress)values(‘1234432112344321’,‘visa’,’00-00-00’,‘someone@somewhere.com’,‘1thestreet,postaltown,somewhere’)
可以對任何值或所有值進(jìn)行加密。例如,可以以這種方式保護(hù)creditcardnumber和expirydate。
這可以通過將每個值或數(shù)據(jù)屬性分成單獨的字符(或其他元素)并且隨后將這些字符的每個字符放入數(shù)組的字段中來實現(xiàn)。然后可以使用行業(yè)標(biāo)準(zhǔn)加密算法,例如des、aes、twofish和serpent來分別對該數(shù)組中的每個元素進(jìn)行加密。
一旦數(shù)組中的每個元素被加密,則所有的數(shù)組元素可以被重新結(jié)合以在insert語句中形成更新后的或新的值,從而在數(shù)據(jù)庫中存儲加密的數(shù)據(jù)。然而,在完成這一步之前,可以采取另一步驟以改進(jìn)安全性和/或可搜索性。例如,可以通過除去任何數(shù)字字符來使加密數(shù)據(jù)標(biāo)準(zhǔn)化,且其可以被替換為字母字符和數(shù)字字符的混合,還可以優(yōu)選地用與每個數(shù)組元素上使用的加密密鑰不同的加密密鑰來對所得到的數(shù)據(jù)屬性或值進(jìn)行進(jìn)一步加密。這可以進(jìn)一步掩藏任何潛在的模式且改進(jìn)安全性??梢允褂闷渌愋偷臉?biāo)準(zhǔn)化或加密。
可以更新或替換和執(zhí)行sql語句以在數(shù)據(jù)庫中存儲數(shù)據(jù)。在該程序之后,不需要在dbms層指明特定列被加密,因為這在生成insert(或update)語句時已經(jīng)被執(zhí)行了。
在數(shù)據(jù)庫中的搜索可以采取sql語句的形式諸如select語句。例如,這樣的語句可以是:
select*frominformationwherecreditcardnumberlike‘%234%’andemailaddress=‘someone@somewhere.com’(選擇*從信息:其中,信用卡編號如‘%234%’且郵箱地址=‘someone@somewhere.com’)
這個特定示例的選擇語句試圖在creditcardnumber字段中找到針對值的匹配。根據(jù)先前描述的程序,因為該字段或?qū)傩砸呀?jīng)被加密,所以使用該select語句將找不到有效數(shù)據(jù)??梢詫x擇語句作以下改變以使得能夠進(jìn)行檢索:
針對加密字段或?qū)傩运阉鞯闹凳古c用于加密數(shù)據(jù)庫中的原始數(shù)據(jù)的程序相似的程序應(yīng)用于其自身。這可以是簡單的加密函數(shù)或如上所述,將值分成單獨的字符,并且將這些字符的每個字符放入數(shù)組元素中。然后,每個數(shù)組元素可以以在原始數(shù)據(jù)上使用的相同的加密函數(shù)加密。在原始數(shù)據(jù)被標(biāo)準(zhǔn)化的情況下,這可以再次通過除去任何數(shù)字字符或其他字符子集、然后例如通過用字母字符和數(shù)字字符的混合替換除去的任何數(shù)字字符或其他字符子集來被重復(fù)執(zhí)行。數(shù)組元素可以被合并或結(jié)合以形成單個值或字符串。另一或第二加密函數(shù)可以優(yōu)選地以不同的加密密鑰應(yīng)用于值。所得到的值或字符串隨后可以被重新引入到數(shù)據(jù)庫中執(zhí)行的選擇語句中。換句話說,相似程序被應(yīng)用于首先用來加密數(shù)據(jù)的搜索項。因此,現(xiàn)在可以進(jìn)行匹配。將值分成單獨的數(shù)組元素(在應(yīng)用函數(shù)諸如加密函數(shù)之前)便于基于單獨字符的搜索或部分字符串搜索。
圖1示出了用于在數(shù)據(jù)庫中存儲數(shù)據(jù)的方法1000的流程圖。分析數(shù)據(jù)1020以確定哪個特定數(shù)據(jù)成分將被添加到數(shù)據(jù)庫1060中的加密的列。一些列或所有列可以被加密。針對需要加密的特定數(shù)據(jù)屬性,步驟1025將數(shù)據(jù)分成元素的數(shù)組,其中,每個元素是單獨的字符。在步驟1030中,根據(jù)第一加密算法或函數(shù)來加密每個數(shù)組元素。在步驟1035中,除去由該加密函數(shù)產(chǎn)生的任何數(shù)字字符。在步驟1040中,這些除去的字符被替換為可以是字母字符、數(shù)字字符或兩者混合的替換字符。
在步驟1045中,另一加密函數(shù)應(yīng)用于數(shù)組元素,數(shù)組元素隨后在步驟1050中結(jié)合在一起以形成單個字符串或值(或由數(shù)據(jù)庫期望的特定數(shù)據(jù)類型)。在步驟1055中,特定sql程序被制定成將數(shù)據(jù)添加到數(shù)據(jù)庫1060或更新現(xiàn)有數(shù)據(jù)。該update或insert語句可以包括所有加密字段或一些加密字段和一些純文本字段的任何混合。insert或updatesql語句的執(zhí)行導(dǎo)致在具有包含從方法1000得到的值的加密列的數(shù)據(jù)庫1060中添加或更改數(shù)據(jù)。未加密的列可以使數(shù)據(jù)以純文本添加。
圖2示出了用于搜索或查詢填充有根據(jù)方法1000的數(shù)據(jù)的數(shù)據(jù)庫1060的方法2000的流程圖。例如,可以從各種源,諸如外部系統(tǒng)、內(nèi)部系統(tǒng)、網(wǎng)絡(luò)電話或網(wǎng)上查詢來接收搜索項。在步驟2010中,通過該方法接收這些搜索項。針對與加密的列或數(shù)據(jù)屬性相對應(yīng)的搜索項,則可以進(jìn)行后面的步驟。在步驟2030中,這樣的搜索項被轉(zhuǎn)換成數(shù)組。換句話說,搜索項中的每個值被分成獨立的字符或單個位的整數(shù),并且每個被放入數(shù)組元素。在步驟2040中,使用第一加密算法或函數(shù)來加密每個數(shù)組元素。在步驟2050中,除去從加密產(chǎn)生的任何數(shù)字字符。可替選地,可以除去其他字符集。在步驟2060中,任何除去的字符被替換為替換字符,諸如數(shù)字、字母或兩者的混合。在步驟2065中,另一、第二加密算法或函數(shù)應(yīng)用于數(shù)組元素,在步驟2070中,數(shù)組元素結(jié)合在一起以形成合成的字符串或值(或其他數(shù)據(jù)類型)。該字符串或值被制定在where子句中作為select語句的部分,select語句可以包括目標(biāo)在于數(shù)據(jù)庫中特定數(shù)據(jù)屬性或列的其他加密搜索項和/或純文本搜索項。在步驟2080中,在數(shù)據(jù)庫中執(zhí)行制定的查詢以搜尋匹配。在步驟2090中,任何結(jié)果以原始格式被返回到原始調(diào)用程序。因此,通過使用原先應(yīng)用的函數(shù)或加密函數(shù)的反轉(zhuǎn),可以將返回的數(shù)據(jù)解密成純文本。
以這種方式,可以處理和執(zhí)行搜索項,以從完全或部分加密的數(shù)據(jù)庫返回結(jié)果,并且也可以在不首先對大量數(shù)據(jù)或整個列進(jìn)行解密的情況下搜索加密的或受保護(hù)的列。針對數(shù)據(jù)庫中任何或所有加密的字段或列,可以運行標(biāo)準(zhǔn)類型的sql查詢。因此,這樣的查詢不受限于例如未加密字段或主要關(guān)鍵詞諸如客戶id。任何商業(yè)數(shù)據(jù)可以通過加密被充分保護(hù)而不損害搜索的便利性??梢宰鳛樗阉鹘涌诤图用軘?shù)據(jù)庫之間的附加的層或函數(shù)來并入方法2000。
圖3示出了用于實現(xiàn)參照圖1和圖2所描述的方法的系統(tǒng)300的示意圖。具有合適操作系統(tǒng)諸如(oracle)sunsolaris、unix、windows或linux的服務(wù)器310運行數(shù)據(jù)庫管理系統(tǒng)諸如oraclerdbms、mssql服務(wù)器或ingres??梢灾苯拥靥砑訑?shù)據(jù)或從終端或客戶端320通過網(wǎng)絡(luò)330添加數(shù)據(jù)。這些客戶端、終端或其他數(shù)據(jù)饋送端320還可以執(zhí)行查詢以返回存儲在數(shù)據(jù)庫1060中的數(shù)據(jù)。數(shù)據(jù)源和查詢發(fā)起者還可以是獨立的裝置。外部系統(tǒng)也可以通過網(wǎng)絡(luò)330或通過其它通信裝置訪問數(shù)據(jù)庫1060和在數(shù)據(jù)庫1060上運行查詢。網(wǎng)絡(luò)330可以例如是內(nèi)部網(wǎng)絡(luò)、以太網(wǎng)系統(tǒng)或英特網(wǎng)。
正如技術(shù)人員將理解的,在不脫離由所附權(quán)利要求限定的本發(fā)明范圍的情況下,可對上面實施方式的細(xì)節(jié)進(jìn)行變化。
例如,所描述的實施方式包括具體數(shù)據(jù)庫功能諸如sql語句和命令。然而,方法和系統(tǒng)可以除sql或rdbms服務(wù)器或計算機(jī)之外使用不同的數(shù)據(jù)存儲設(shè)備、諸如基于云和文件的存儲系統(tǒng)。
可以在針對數(shù)據(jù)庫存儲或搜索方法應(yīng)用第二(或另一)加密算法之前或之后,完成字符的標(biāo)準(zhǔn)化或替換。
數(shù)組元素可以例如包含多于一個的字符或值諸如整個詞。
對上面實施方式的特征的許多組合、修改或變化對于技術(shù)人員而言是明顯的,并且旨在于形成本發(fā)明的一部分。涉及一個實施方式或示例的具體描述的任何特征通過進(jìn)行適當(dāng)變化可以用于任何其他實施方式。