本發(fā)明屬于信息處理領(lǐng)域,涉及數(shù)據(jù)的修改方法,特別是大數(shù)據(jù)的修改方法,及其在加密中的應(yīng)用。
背景技術(shù):
數(shù)據(jù)修改的時(shí)候往往長(zhǎng)度會(huì)發(fā)生改變,這種改變會(huì)帶來許多問題,比如相鄰數(shù)據(jù)會(huì)發(fā)生移動(dòng),文件的結(jié)構(gòu)會(huì)發(fā)生一些變化而導(dǎo)致存儲(chǔ)空間上的數(shù)據(jù)被大量修改、覆蓋,特別是大數(shù)據(jù)更會(huì)帶來一系列連鎖反應(yīng),有些文件格式由于定義了文件長(zhǎng)度或者記錄長(zhǎng)度,這樣就不能進(jìn)行變長(zhǎng)的修改,比如,大數(shù)據(jù)的某些文件格式,比如sequencefile就不支持?jǐn)?shù)據(jù)的修改。但是,在大數(shù)據(jù)的許多場(chǎng)合,由于實(shí)時(shí)性比較強(qiáng),往往一開始需要很快就把明文數(shù)據(jù)記錄存儲(chǔ)下來,放在sequencefile之類的文件中,但是,事后往往會(huì)發(fā)覺,需要進(jìn)行修改以實(shí)現(xiàn)匿名,隱私保護(hù)或者其他安全的需要,比如需要進(jìn)行加密,嵌入簽名。許多加密會(huì)帶來數(shù)據(jù)的擴(kuò)張,比如,分組密碼會(huì)需要進(jìn)行填充處理,往往會(huì)變長(zhǎng),具有誤導(dǎo)功能加密,同態(tài)加密,或者一些簽名的嵌入,都會(huì)增加數(shù)據(jù)長(zhǎng)度。在本發(fā)明中,將數(shù)據(jù)的變長(zhǎng)部分寫入新的位置,比如寫入原文件的新記錄或者新的文件中。此外針對(duì)云計(jì)算和大數(shù)據(jù)的加密方面,目前有代理重加密和同態(tài)加密,這些加密都有一定的應(yīng)用場(chǎng)合,而且有局限性,比如同態(tài)加密效率低,冗余度大,現(xiàn)實(shí)中應(yīng)用有較大的局限性,上述的加密方法直接用于加密大規(guī)模的數(shù)據(jù)是不現(xiàn)實(shí)的,因?yàn)橛?jì)算量龐大,而且諸如同態(tài)加密往往會(huì)帶來數(shù)據(jù)的擴(kuò)展,代價(jià)大,重代理加密只適合于特定用戶之間的密鑰轉(zhuǎn)換,現(xiàn)實(shí)中也沒有必要將所有的數(shù)據(jù)進(jìn)行上述的加密。同態(tài)加密比較適用于需要委托計(jì)算(代理計(jì)算)的數(shù)據(jù)的加密,但是代價(jià)比較高。用傳統(tǒng)的加密方法加密這些數(shù)據(jù)也存在計(jì)算量大等等問題。而且現(xiàn)實(shí)中,我們還希望對(duì)于某些數(shù)據(jù),加密后,密文可以被解密為有意義的錯(cuò)誤密文,或者明文的關(guān)鍵內(nèi)容被替換為其他誤導(dǎo)意義的字、詞、句子等等,以達(dá)到誤導(dǎo)的效果,既要避免龐大的工作量,又要保護(hù)其中重要的數(shù)據(jù),需要采取一定的靈活方法。本發(fā)明考慮對(duì)大數(shù)據(jù)進(jìn)行選擇性的加密的必要性,以及密鑰管理的困難,設(shè)計(jì)了多種方案。
技術(shù)實(shí)現(xiàn)要素:
由于變長(zhǎng)的修改會(huì)帶來許多問題,比如如果中間位置的修改不是等長(zhǎng)的,后面的數(shù)據(jù)就全部要移動(dòng),有些文件結(jié)構(gòu)中包含了長(zhǎng)度信息的文件的結(jié)構(gòu)和數(shù)據(jù)可能都需要大幅度的調(diào)整和移動(dòng),這也導(dǎo)致一些文件不支持已有記錄的修改,特別是對(duì)于大數(shù)據(jù)而言,數(shù)據(jù)移動(dòng)的代價(jià)更大。比如sequencefile文件就不支持修改,只支持追加記錄。本發(fā)明保持?jǐn)?shù)據(jù)位置盡量少移動(dòng),沒有修改的數(shù)據(jù)位置不移動(dòng)。
方案1為初始方案:為了減少數(shù)據(jù)位置的移動(dòng)和結(jié)構(gòu)的變化,本發(fā)明中,將會(huì)對(duì)不需要修改的數(shù)據(jù)將存放在原位置不變,對(duì)于修改的部分,將新寫入的數(shù)據(jù)存放在被修改原數(shù)據(jù)的位置,即覆蓋原始數(shù)據(jù),并且記錄必要的信息,比如長(zhǎng)度變化的信息、原數(shù)據(jù)(文件)位置和增加數(shù)據(jù)位置的對(duì)應(yīng)關(guān)系、關(guān)于修改方法的一些信息(比如,這里是修改的目的是為了保密而做了加密,則必要的加密解密信息需要保存下來)等,針對(duì)修改后的長(zhǎng)度與修改前的長(zhǎng)度關(guān)系的三種情形進(jìn)行分別處理:
(1)如果長(zhǎng)度相同,修改后存放在在原位置,剛好覆蓋原數(shù)據(jù),并且記錄等長(zhǎng)的信息,(2)如果長(zhǎng)度變長(zhǎng),則將原始數(shù)據(jù)覆蓋后,將超出原始長(zhǎng)度的數(shù)據(jù)存放在另外的位置,另外的位置可以是可以是在原(數(shù)據(jù))文件后追加數(shù)據(jù),比如sequencefile文件后面追加一條記錄,存放在文件的末尾,也可以存放在新的文件中,可以每次(每段)修改對(duì)應(yīng)存放一個(gè)文件,也可以集中存放一個(gè)文件中,比如,可以將信息存放在表中,(3)如果長(zhǎng)度比原數(shù)據(jù)短,則進(jìn)行覆蓋修改后記錄長(zhǎng)度變化信息,取修改以后的長(zhǎng)度或者原數(shù)據(jù)與修改后數(shù)據(jù)的長(zhǎng)度之差。對(duì)于原數(shù)據(jù)超出部分的數(shù)據(jù),如果沒有安全需要,可以不改變,如果有保密需要,可以采用隨機(jī)數(shù)據(jù)覆蓋還沒有被修改的那一段原始數(shù)據(jù)。
為了方便,增加的數(shù)據(jù)(如果沒有增加,比如減少或者長(zhǎng)度不變,可以當(dāng)作為空),以及(前面記錄的)長(zhǎng)度變化的信息、原文件和增加數(shù)據(jù)的對(duì)應(yīng)關(guān)系、關(guān)于修改方法的一些信息(比如,這里是修改的目的是為了保密而做了加密,則必要的加密解密信息需要保存下來)等必須的信息,應(yīng)該儲(chǔ)存在文件中,為了方便,可以存放在1個(gè)或者多個(gè)表中。比如,可以將上述所有的信息存放在一個(gè)表中,也可以采用兩個(gè)表,將增加的數(shù)據(jù)和原文對(duì)應(yīng)關(guān)系存放在一個(gè)表中,將長(zhǎng)度變化的信息、原數(shù)據(jù)(文件)和增加數(shù)據(jù)的對(duì)應(yīng)關(guān)系、關(guān)于修改方法的一些信息存放在另一個(gè)表中。
方案2:在方案1的基礎(chǔ)上,可以先對(duì)數(shù)據(jù)進(jìn)行壓縮再進(jìn)行修改,比如先壓縮再加密。這樣可以減少數(shù)據(jù)冗余,減少需要占用的額外的存儲(chǔ)空間??梢栽谝欢ǔ潭壬蠝p少處理后的數(shù)據(jù)長(zhǎng)度超過原來的長(zhǎng)度的情形。
方案3:由于在許多情況下,需要將部分?jǐn)?shù)據(jù)進(jìn)行加密,本方案3利用方案1或者2的方法對(duì)數(shù)據(jù)進(jìn)行加密,由于加密可以看成是對(duì)明文的修改,對(duì)于大數(shù)據(jù),不適合全部進(jìn)行加密,所以這里采用選擇性加密,大數(shù)據(jù)的不同部分的安全需求不一樣,可能會(huì)采用不同的加密方法,其中某些方法可能會(huì)帶來數(shù)據(jù)長(zhǎng)度的改變,特別是可能會(huì)增加數(shù)據(jù)量,因此可以對(duì)文件進(jìn)行讀取,對(duì)其數(shù)據(jù)或者內(nèi)容進(jìn)行分段,如果數(shù)據(jù)是包含許多文件,可以以文件為單位進(jìn)行分段,如果數(shù)據(jù)都存放在一個(gè)文件中,也可以對(duì)文件的不同部分進(jìn)行分段,如果分段無需保密的不加密,如果分段需要加密的根據(jù)其需要采用不同的加密方法,最后保存為密文。加密的總體步驟如下:
1、讀取數(shù)據(jù)(文件),針對(duì)數(shù)據(jù)格式(文件格式)需要,獲得相應(yīng)內(nèi)容,比如對(duì)于文本文件,可以是直接對(duì)數(shù)據(jù)進(jìn)行加密,對(duì)于sequencefile文件,分別獲得<key,value>,根據(jù)需要對(duì)數(shù)據(jù)或者內(nèi)容進(jìn)行分塊(分段),比如分塊可以是一個(gè)文件為一段,或者h(yuǎn)adoop中的sequencefile等文件(流式文件)中包含的一個(gè)文件(有時(shí)候稱為記錄record),或者是xml文件中的一個(gè)特性的值,表格中的一個(gè)數(shù)據(jù)項(xiàng)、一行、一列等,textfile文件格式可以根據(jù)分隔符和行結(jié)束符分段。
2、根據(jù)需要選擇是否對(duì)數(shù)據(jù)塊進(jìn)行加密,以及何種加密方式,這個(gè)判定可以是機(jī)器的,也可以是人工的,比如根據(jù)設(shè)定的規(guī)則進(jìn)行機(jī)器判斷或者用戶的人工選擇,判定大文件的每一個(gè)數(shù)據(jù)塊(段)是否需要進(jìn)行加密,以及采用什么樣的方式進(jìn)行加密。
3、選擇已有密鑰或者產(chǎn)生密鑰,根據(jù)選擇的方法對(duì)各個(gè)數(shù)據(jù)塊中需要加密的內(nèi)容進(jìn)行加密,加密可以針對(duì)于每一塊的值,比如某些文件格式中有分隔符,有長(zhǎng)度的記錄,如果需要明文形式,可以不進(jìn)行加密。
4、將每一個(gè)數(shù)據(jù)塊加密得到的密文,如果需要,進(jìn)行必要的適應(yīng)性的編碼轉(zhuǎn)換,比如通過一般加密得到的是字節(jié)數(shù)組,一般情況下需要轉(zhuǎn)換為字符數(shù)組而產(chǎn)生實(shí)際寫入的密文段(解密的時(shí)候需要進(jìn)行相反的轉(zhuǎn)換),并且用對(duì)應(yīng)的密文對(duì)原明文段(數(shù)據(jù)塊)進(jìn)行覆蓋,由于存在長(zhǎng)度變化,所以采用方案1或者2的方法進(jìn)行修改,將超出長(zhǎng)度的數(shù)據(jù)存儲(chǔ)好。將長(zhǎng)度變化的信息、原文件和增加數(shù)據(jù)的對(duì)應(yīng)關(guān)系、關(guān)于修改方法的一些信息也存放起來。在方案1中的關(guān)于修改方法的一些信息在本方案中應(yīng)該包括每個(gè)數(shù)據(jù)塊是否加密(如果可以根據(jù)確定的規(guī)則判定數(shù)據(jù)塊是否加密的,這一信息可以忽略),如果加密,則相應(yīng)的解密所需要的信息和參數(shù)都要存儲(chǔ)起來,比如原始數(shù)據(jù)塊的位置信息(比如起始和結(jié)束位置或者起始位置和長(zhǎng)度),對(duì)應(yīng)密文塊的位置信息,采用什么方式進(jìn)行加密,加密的密鑰(或獲得密鑰需要的信息)和各種參數(shù)。
解密是一個(gè)相反的過程,對(duì)于每一塊數(shù)據(jù),首先判斷其是否加密,如果已經(jīng)加密,則需要解密,獲取其密鑰等信息。對(duì)數(shù)據(jù)塊進(jìn)行解密。
本方案的的有益技術(shù)效果有:減少了對(duì)不需要加密文件讀寫,解決了現(xiàn)有技術(shù)不適用于大文件加密的缺陷,避免了完全加密不現(xiàn)實(shí)的問題。對(duì)于不同的塊根據(jù)不同的需要采用不同的加密方法。
方案4:在前面方案3的基礎(chǔ)上,考慮到同態(tài)加密一般只對(duì)數(shù)值有意義,在表中,可能某一列都是需要進(jìn)行同態(tài)加密的數(shù)據(jù),很容易進(jìn)行區(qū)分,xml文件中的數(shù)據(jù)一般也容易區(qū)分,但是在文本文件中,需要進(jìn)行同態(tài)加密的數(shù)值可能夾雜在文本(文字)或者其他的數(shù)據(jù)中,在前面分段的基礎(chǔ)上可以進(jìn)一步將數(shù)值與文本等數(shù)據(jù)進(jìn)行分開加密,數(shù)值加密的時(shí)候往往需要采用同態(tài)加密,這樣需要將同態(tài)加密后的數(shù)值進(jìn)行委托計(jì)算的時(shí)候可以很容易找到數(shù)據(jù),而且大量的數(shù)據(jù)可以不進(jìn)行復(fù)雜,而且冗余度高的同態(tài)加密計(jì)算。分段后依然要保證對(duì)原來文件格式的適應(yīng)性,保證解密的可逆性,比如如果對(duì)于sequencefile文件,可以將每一個(gè)記錄中的每一段需要委托計(jì)算的數(shù)據(jù)(一般是整數(shù)數(shù)值)和其他不需要進(jìn)行委托計(jì)算(代理計(jì)算)的數(shù)據(jù)進(jìn)行分割,成為不同的塊進(jìn)行加密,同時(shí),加密后的密文依然連接起來,成為一個(gè)記錄,并且依然根據(jù)流式文件的格式進(jìn)行存儲(chǔ),在存儲(chǔ)加密信息的時(shí)候,為了實(shí)現(xiàn)這類需要進(jìn)行代理計(jì)算的數(shù)據(jù)密文和一般文本的密文的區(qū)分,每一個(gè)塊的位置信息(比如起始位置和長(zhǎng)度或起始位置和結(jié)束位置)和加密方式被記錄下來,便于解密。也可以采用設(shè)置起始標(biāo)記和結(jié)束標(biāo)記的方法來分割這些塊,這些起始和結(jié)束標(biāo)記是密文中不會(huì)出現(xiàn)的符號(hào),在密文前后增加起始標(biāo)記和結(jié)束標(biāo)記。
本方案的有益效果是充分利用同態(tài)加密對(duì)需要加密的數(shù)據(jù)進(jìn)行加密,便于后期調(diào)用計(jì)算,同時(shí)也較少同態(tài)加密的代價(jià)。
方案5:在方案3或者4的基礎(chǔ)上,考慮諸如同態(tài)加密,包括全同態(tài)加密,并不能滿足所有云計(jì)算背景下的委托計(jì)算的需要,有些計(jì)算依然不能被全同態(tài)加密后處理,所以,它不能解決所有問題,也沒有必要花如此大的代價(jià)全部采用同態(tài)加密??紤]到同態(tài)加密有時(shí)候既有需要,但是又代價(jià)比較高,對(duì)于一般的數(shù)據(jù)如果用代價(jià)太大的同態(tài)加密就顯得大材小用,吃力不討好,除了全同態(tài)加密,比全同態(tài)加密代價(jià)小的加法同態(tài)和乘法同態(tài)也有其適用范圍,如果能夠用加法同態(tài)加密的數(shù)據(jù)采用全同態(tài)加密同樣顯得吃力不討好。優(yōu)選地,在加密的時(shí)候進(jìn)行加密方法的選擇,根據(jù)數(shù)據(jù)需要進(jìn)行計(jì)算的所有函數(shù)來判斷涉及到的數(shù)據(jù)是否需要用到同態(tài)加密(只有一個(gè)函數(shù)需要用到同態(tài)加密,而其他函數(shù)都不需要同態(tài),也視為需要用到同態(tài)加密,即滿足所有可能函數(shù)的需要,下同),需要采用什么樣的同態(tài)加密,當(dāng)其他一般的加密和非全同態(tài)加密都不可行,必須用同態(tài)加密的時(shí)候,采用全同態(tài)加密,當(dāng)全同態(tài)加密和非全同態(tài)加密的時(shí)候,采用非全同態(tài)(半同態(tài))加密方法,當(dāng)普通加密可行的時(shí)候,優(yōu)先選擇普通的加密方法,即當(dāng)多種方法都可以達(dá)到目的的時(shí)候,優(yōu)先選用次序?yàn)?,一般加密、半同態(tài)加密、全同態(tài)加密。本方案的有益效果是充分發(fā)揮加密的最大優(yōu)勢(shì),避免劣勢(shì),在保證安全需要的同時(shí)也較少代價(jià)。
方案6:在前面方案3、4或者5的基礎(chǔ)上,優(yōu)選地,在加密中,非對(duì)稱的加密,包括同態(tài)加密,還有重代理加密總是少數(shù),因?yàn)樗麄兊拇鷥r(jià)比較高,因此更多會(huì)采用對(duì)稱的加密,對(duì)稱加密中采用相同的加密參數(shù)去加密大量的數(shù)據(jù)是不安全的,所以需要較多的密鑰??紤]到大文件的大量數(shù)據(jù)的對(duì)稱加密需要用到大量的密鑰,大量密鑰的管理復(fù)雜,為了避免這些缺陷,這里采用單向的函數(shù)去產(chǎn)生密鑰。單向函數(shù)可以正向計(jì)算,但是反過來求逆則困難。比如hash函數(shù)就是這樣的函數(shù),我們用大文件的數(shù)據(jù)塊的位置信息(可以唯一確定這個(gè)分段的信息a),初始密鑰或者是口令(統(tǒng)稱為密碼,初始密碼)k產(chǎn)生,現(xiàn)實(shí)中,人們往往很容易記住口令,這樣無需保存口令,但是密鑰則需要另外加密存儲(chǔ)。單個(gè)分段的加密密鑰由唯一確定這個(gè)分段(數(shù)據(jù)塊)的位置信息a和k的不可逆的單向函數(shù)m(f(k,a))產(chǎn)生,比如哈希函數(shù),即hash(f(k,a))值,f為一個(gè)函數(shù),簡(jiǎn)單地可以是將ka兩個(gè)數(shù)據(jù)合并,截取加密數(shù)據(jù)塊所采用對(duì)稱加密算法的密鑰長(zhǎng)度相應(yīng)的位數(shù),注意,如果密鑰的長(zhǎng)度大于hash函數(shù)的輸出長(zhǎng)度,可以將以上信息分別輸入多個(gè)函數(shù),hash(f1(k,a)),hash(f2(k,a)),也可以是多個(gè)不同單向函數(shù)(如hash函數(shù))的值,作為所定位的數(shù)據(jù)塊的加密密鑰。當(dāng)然也可以把這個(gè)整體當(dāng)做一個(gè)單向函數(shù)。采用單向性的函數(shù)就可以避免通過塊的密鑰去逆向推導(dǎo)初始密碼,其他塊的密鑰,安全性好而且方便。如果數(shù)據(jù)塊需要采用公鑰加密方法,則不需要用到上述產(chǎn)生的密鑰,只需要利用公鑰和私鑰加密解密即可,如果是對(duì)稱加密,則需要用到上面產(chǎn)生的塊加密密鑰。在有些加密中,比如一些誤導(dǎo)功能的加密,有時(shí)候還需要兩層的加密,需要較長(zhǎng)的密鑰,可以用產(chǎn)生的數(shù)據(jù)去產(chǎn)生一個(gè)偽隨機(jī)序列,比如可以采用單向函數(shù)產(chǎn)生(可能需要截?。┮粋€(gè)流密碼的密鑰,通過這個(gè)密鑰以流密碼算法產(chǎn)生密鑰流,在密鑰流中截取需要的誤導(dǎo)加密的各層密鑰。產(chǎn)生密鑰后,根據(jù)方案3,4,5的方法進(jìn)行加密。
理論上說,我們只需要存儲(chǔ)好初始密碼,并且記錄每一塊對(duì)應(yīng)的初始密碼就行了,不過有時(shí)候?yàn)榱朔奖憧蛇x地也可以加密各個(gè)分段的加密密鑰。可以采用多重加密,優(yōu)選地可以用公鑰加密分段加密密鑰,并且將公鑰加密后的分段加密密鑰、分段信息、分段是否加密、分段的加密密鑰對(duì)應(yīng)的數(shù)據(jù)塊的信息、解密分段所需的信息、明文數(shù)據(jù)的編碼類型等等,存放在一起,比如用表格存儲(chǔ)起來,我們稱為加密信息表。本方案的有益效果是簡(jiǎn)化密鑰的管理的同時(shí)依然保證安全性。
方案7:在前面方案6的基礎(chǔ)上,進(jìn)一步地,可以是各個(gè)用戶有自己的初始密鑰或者口令,這里也可以統(tǒng)一稱為密碼ki,這樣他可以加密和解密自己負(fù)責(zé)的數(shù)據(jù)塊,加密信息也存放在加密信息表中,如果采用多個(gè)初始密碼,加密信息表中應(yīng)該包含初始的密碼ki(可能是加密的ki)或者ki的信息(比如編號(hào),存放位置等)。如果是單個(gè)塊密鑰泄漏,采用新的初始密碼產(chǎn)生密鑰去加密泄漏密鑰的塊,并且更新加密信息表。本方案的有益效果是針對(duì)多用戶和密鑰泄漏問題,采用多個(gè)密碼簡(jiǎn)化了密鑰的更新代價(jià)。
方案8:在前面方案6或者7的基礎(chǔ)上添加更新密鑰功能,有時(shí)候密碼可能存在泄漏,丟失的情形,如果是ki丟失,需要更換所有的由它產(chǎn)生的數(shù)據(jù)塊的塊密鑰,重新解密,再用新的密鑰加密,如果是單個(gè)塊密鑰泄漏,一般情況下,根據(jù)密鑰的產(chǎn)生規(guī)則也需要更換那個(gè)初始的密碼ki,由于采用多個(gè)初始密碼,加密信息表中應(yīng)該包含初始密碼(可能是加密的)或者初始密碼的信息。因此,優(yōu)選地,我們提出兩種方案:a)采用新的密碼產(chǎn)生密鑰去加密泄漏密鑰的塊,并且更新加密信息表;b)計(jì)算塊密鑰的時(shí)候,增加一個(gè)信息更改密鑰次數(shù)的信息,簡(jiǎn)單地可以是null(空),1,2這樣的形式,或者f(0),f(1),f(2),只要能夠唯一確定修改次數(shù)的信息就行,用單向的函數(shù)m(f(k,a,f(n)))產(chǎn)生塊密鑰,在密鑰信息表中也必須同樣對(duì)應(yīng)更改密鑰次數(shù)的信息,或者由于更改密鑰的數(shù)據(jù)塊總是少數(shù),可以對(duì)有更改密鑰的數(shù)據(jù)塊的更改次數(shù)和對(duì)應(yīng)的數(shù)據(jù)塊信息在其他地方存儲(chǔ)起來。
數(shù)據(jù)解密時(shí)候先判定數(shù)據(jù)是否加密,根據(jù)加密信息表的信息解密。也可以根據(jù)密碼生成分段的塊加密密鑰用于解密。本方案的有益效果是在密鑰泄漏的情況下可以進(jìn)行自動(dòng)的同步更新,而且安全性可以保障。
方案9:在前面方案6或者7的基礎(chǔ)上,考慮在大數(shù)據(jù)的一些流式文件中,實(shí)際上一個(gè)文件包含許多記錄,實(shí)際上相當(dāng)于一個(gè)獨(dú)立文件,這里還是稱為數(shù)據(jù)塊。在許多時(shí)候,不同的用戶對(duì)大數(shù)據(jù)文件中的某一部分包含的數(shù)據(jù)塊(比如記錄)有不同的加密解密權(quán)限,比如一個(gè)高級(jí)別用戶可以解密所有的加密數(shù)據(jù)塊,而低一級(jí)的用戶則只能解密一部分?jǐn)?shù)據(jù)塊,這些用戶都有自己獨(dú)自負(fù)責(zé)的一部分文件可以解密,他們管理的文件范圍如同一棵樹,最高級(jí)別用戶可以看成是樹根,負(fù)責(zé)所有文件,級(jí)別越低,負(fù)責(zé)的文件越少。舉一個(gè)例子,一個(gè)科的人每一個(gè)人都管理自己的文件,一個(gè)科長(zhǎng)可以查閱該科所有人的文件,處長(zhǎng)可以查閱所有下轄科的文件,以此類推,這種情況現(xiàn)實(shí)中經(jīng)常存在。
目前大數(shù)據(jù)越來越大,而許多大數(shù)據(jù)是存放在一個(gè)大的流式文件中。這種大文件的記錄可能屬于不同的用戶,有不同的權(quán)限,需要用不同的密鑰加密。在數(shù)據(jù)量大的時(shí)候,密鑰量是比較大的,而且管理起來非常復(fù)雜。目前有許多密鑰管理方案,如果只是對(duì)密鑰進(jìn)行加密存儲(chǔ),則密鑰量比較大,管理起來復(fù)雜,而且對(duì)于這類提到的如同一棵樹一樣的加密密鑰的管理權(quán)限不能很好控制。為了能夠存儲(chǔ)較少的密鑰,而且對(duì)不同級(jí)別的用戶賦予不同的權(quán)限,我們依然可以利用單向函數(shù)來產(chǎn)生密鑰。
大數(shù)據(jù)中的不同記錄往往屬于不同的用戶,需要用不同的密鑰加密,有不同的安全級(jí)別,有不同的訪問控制權(quán)限。本發(fā)明利用單向函數(shù)的單向性質(zhì)設(shè)計(jì)了一種可以滿足需要的密鑰生成管理方法,并且應(yīng)用于大文件的加密保護(hù)。
當(dāng)有多級(jí)用戶的時(shí)候,由最高級(jí)用戶的初始密碼kr結(jié)合次高級(jí)用戶的某一唯一信息bi(可以是公開的,也可以是只有最高級(jí)用戶知道的,比如用戶名稱、姓名、代號(hào)、編號(hào)等,但是這個(gè)信息應(yīng)該是唯一,不重名的)產(chǎn)生次高級(jí)用戶的初始密碼,計(jì)算方法為m(f(kr,bi)),m()為單向函數(shù),截取合適長(zhǎng)度的數(shù)據(jù)作為次高級(jí)用戶的初始的密碼;進(jìn)一步由次高級(jí)用戶初始的密碼以相同的方式產(chǎn)生再低一級(jí)用戶的初始的密碼,產(chǎn)生密碼的單向函數(shù)為m(f(kr,b),b為下一級(jí)用戶的編號(hào),kr為上一級(jí)用戶的初始密碼;直到產(chǎn)生最低級(jí)用戶的初始的密碼,然后由最低級(jí)用戶的初始的密碼產(chǎn)生數(shù)據(jù)塊的加密密鑰。
因此在文件很大,其中的數(shù)據(jù)塊(比如記錄)的權(quán)限也往往復(fù)雜,可能是屬于上面提到的多級(jí)用戶的樹形的權(quán)限,則可以采用如下的加密方法:
1、確定好各級(jí)用戶的權(quán)限,根據(jù)上述的方法,首先最高級(jí)用戶產(chǎn)生一個(gè)初始密碼k1,下一級(jí)用戶的初始密碼kr+1產(chǎn)生單向的函數(shù)為m(f(kr,b),b為用戶的編號(hào),以此類推逐級(jí)地產(chǎn)生多級(jí)用戶的初始密碼。
2、根據(jù)需要對(duì)需要加密的大文件進(jìn)行分塊(分段),以hadoop中的sequencefile等大文件的一個(gè)記錄。
3、根據(jù)設(shè)定的規(guī)則或者用戶的選擇,判定數(shù)據(jù)塊(段)是否需要進(jìn)行加密,以及采用什么樣的方式進(jìn)行加密。如果數(shù)據(jù)塊需要采用公鑰加密方法,則不需要用到產(chǎn)生的密鑰,只需要利用公鑰和私鑰加密解密即可,如果是對(duì)稱加密,則需要在下一步產(chǎn)生塊加密密鑰。
4、根據(jù)數(shù)據(jù)塊的位置信息(唯一確定這個(gè)分段的信息a)和最低級(jí)用戶的初始密碼kl產(chǎn)生他所管轄的數(shù)據(jù)塊的加密密鑰,我們用初始密碼產(chǎn)生。單個(gè)分段(塊)的加密密鑰由唯一確定這個(gè)分段(數(shù)據(jù)塊)的信息a和對(duì)于這個(gè)分段有加解密權(quán)限的最低級(jí)用戶的初始密碼kl的不可逆函數(shù)m(f(kl,a))產(chǎn)生,比如哈希函數(shù),即hash(f(kl,a))值,f為一個(gè)函數(shù)(簡(jiǎn)單地可以是將k、a兩個(gè)數(shù)據(jù)合并),截取加密數(shù)據(jù)塊所采用對(duì)稱加密算法的密鑰長(zhǎng)度相應(yīng)的位數(shù)。采用單向性的函數(shù)就可以避免通過塊的密鑰去逆向推導(dǎo)初始密碼,其他塊的密鑰,安全性好而且方便。
5、對(duì)需要加密的塊,根據(jù)選擇的方法對(duì)數(shù)據(jù)塊進(jìn)行加密,得到的數(shù)據(jù),加密可以只針對(duì)于每一塊的值,比如某些文件格式中有分隔符,有長(zhǎng)度的記錄,可以不進(jìn)行加密,加密后長(zhǎng)度有變化則做相應(yīng)的修改。并且將數(shù)據(jù)是否加密,如果加密,則相應(yīng)的解密所需要的信息和參數(shù)都要存儲(chǔ)起來,比如采用什么方式進(jìn)行加密,對(duì)應(yīng)的密鑰信息(可以獲得密鑰的信息,比如確定這個(gè)塊屬于某個(gè)最低級(jí)的用戶,根據(jù)塊密鑰的產(chǎn)生規(guī)則就獲得塊密鑰,另外也可以是塊密鑰的存放位置(比如,地址或者是在某個(gè)表格中的位置),或者加密的塊密鑰等等。)和各種參數(shù)。為了方便,本例可以將這些信息存放在表中,這些信息包含有唯一確定這個(gè)分段的信息a----數(shù)據(jù)塊的起始位置和結(jié)束位置,可以恢復(fù)塊密鑰的信息-加密的塊密鑰,加密的算法和其他信息(分組長(zhǎng)度,初始向量,加密模式,填充模式等)。
6、將每一個(gè)數(shù)據(jù)塊加密的密文根據(jù)相應(yīng)的方法連接為一個(gè)密文文件,采用相應(yīng)的格式保存,比如,如果是流式文件,根據(jù)流式文件的格式進(jìn)行存儲(chǔ),對(duì)文件結(jié)構(gòu)中的長(zhǎng)度信息進(jìn)行相應(yīng)的調(diào)整。
本方案的優(yōu)勢(shì)在于減少需要存儲(chǔ)的密碼或密鑰,而且可以控制多級(jí)的權(quán)限。
方案10:在前面方案9基礎(chǔ)上增加密鑰(密碼)更新功能,有時(shí)候密鑰(密碼)可能存在泄漏,丟失的情形,如果是各級(jí)的初始的密碼丟失,由于密鑰(密碼)的產(chǎn)生規(guī)則,需要更換所有的初始的密碼和由它們產(chǎn)生的塊密鑰,重新解密,再根據(jù)規(guī)則重新產(chǎn)生密鑰(用戶密碼)用新的塊密鑰加密,如果是單個(gè)塊密鑰泄漏,一般情況下,也需要更換初始的密碼,由于采用多個(gè)初始密碼,加密信息表中應(yīng)該包含初始密碼(可能是加密的)或者初始密碼的信息。這會(huì)帶來較大的代價(jià),因此,優(yōu)選地,我們提出在加密信息中,增加一個(gè)信息更改密鑰次數(shù)的信息,簡(jiǎn)單地可以是null(空),1,2這樣的形式,或者f(0),f(1),f(2),只有能夠唯一確定修改次數(shù)的信息就行,下一級(jí)用戶的初始密碼kr+1產(chǎn)生單向的函數(shù)為m(f(kr,b,f(n))),b為下一級(jí)用戶的編號(hào),數(shù)據(jù)塊的對(duì)稱加密密鑰采用m(f(ks,a,f(n)))產(chǎn)生,a為文件的確定信息,比如位置信息,在密鑰信息表中也必須同樣對(duì)應(yīng)更改密鑰次數(shù)的信息,或者由于更改密鑰的數(shù)據(jù)塊總是少數(shù),將n和對(duì)應(yīng)的數(shù)據(jù)塊信息在其他地方存儲(chǔ)起來,f(n)初值為空,當(dāng)初值為空的時(shí)候函數(shù)簡(jiǎn)化為m(f(kr,b)),。表面上看,函數(shù)形式和前面的不一樣,增加了n相關(guān)的內(nèi)容,當(dāng)我們限定f(n)初值為空,當(dāng)初值為空的時(shí)候函數(shù)簡(jiǎn)化為m(f(kr,b)),可以當(dāng)做是原單向函數(shù)的進(jìn)一步限定。
如果某一級(jí)用戶a的初始密碼泄漏,從用戶a的上一級(jí)用戶的初始密碼產(chǎn)生用戶a的新密碼(密鑰),注意其中n在原來的基礎(chǔ)上加1,即m(f(kr,b,f(n+1))),這樣可以保證密鑰是新的,而且由于單向性,互相之間不能相互推導(dǎo),不會(huì)泄密。
本方案的有益效果是在密鑰丟失的時(shí)候可以直接更換新的密鑰,重新加密數(shù)據(jù)塊。一旦泄密,無需大面積更換密鑰(密碼)。注意由于現(xiàn)有的一些系統(tǒng)并沒有提供關(guān)于流式文件的修改,所以需要開發(fā)相關(guān)支持軟件。
具體實(shí)施方式
下面給出本發(fā)明的部分實(shí)施例,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
實(shí)施例1:在本實(shí)施例中,將會(huì)對(duì)不需要修改的數(shù)據(jù)將存放在原位置不變,對(duì)于修改的部分,將新寫入的數(shù)據(jù)存放在被修改原數(shù)據(jù)的位置,即覆蓋原始數(shù)據(jù),并且記錄必要的信息,比如長(zhǎng)度變化的信息、原文件位置和增加數(shù)據(jù)位置的對(duì)應(yīng)關(guān)系、關(guān)于修改方法的一些信息等,存在三種情形:(1)如果長(zhǎng)度相同,修改后存放在在原位置,剛好覆蓋原數(shù)據(jù),并且記錄等長(zhǎng)的信息,(2)如果長(zhǎng)度變長(zhǎng),則將原始數(shù)據(jù)覆蓋后,將超出原始長(zhǎng)度的數(shù)據(jù)存放在另外的位置,將信息存放在表中,(3)如果長(zhǎng)度比原數(shù)據(jù)短,則寫入后記錄長(zhǎng)度,可以是修改以后的長(zhǎng)度,也可以是原數(shù)據(jù)與修改后數(shù)據(jù)的長(zhǎng)度之差。對(duì)于原數(shù)據(jù)超出部分的數(shù)據(jù),如果沒有安全需要,可以不改變,如果有保密需要,可以采用隨機(jī)數(shù)據(jù)覆蓋還沒有被修改后數(shù)據(jù)覆蓋的原始數(shù)據(jù)。
以上三種情形整體地看,增加的數(shù)據(jù)(如果沒有增加,比如減少或者長(zhǎng)度不變,可以當(dāng)作為空),以及長(zhǎng)度變化的信息、原文件和增加數(shù)據(jù)的對(duì)應(yīng)關(guān)系、關(guān)于修改方法的一些信息等必須的信息存放在1個(gè)表中。
當(dāng)然也可以按照方案中的說法將信息分開存放在兩個(gè)表中。為了方便,不一一舉例,下同。
實(shí)施例2:在實(shí)施例1的基礎(chǔ)上,可以先對(duì)數(shù)據(jù)進(jìn)行高效的壓縮再進(jìn)行修改。
實(shí)施例3為本加密方法的實(shí)施例,我們選取sequencefile文件為例,加密步驟如下:
1、讀取文件,即可分析每一個(gè)記錄及其長(zhǎng)度,以它的一個(gè)記錄為數(shù)據(jù)塊。以記錄的起始位置和結(jié)束位置作為數(shù)據(jù)塊的定位信息。
2、根據(jù)設(shè)定的關(guān)鍵詞計(jì)算規(guī)則得出記錄的敏感程度,達(dá)到一定閾值的記錄判定需要加密,同時(shí)可以根據(jù)規(guī)則確定到底是對(duì)稱加密,還是公鑰加密(包括一些同態(tài)加密和代理重加密),如果是用戶根據(jù)需要對(duì)不達(dá)閾值的記錄要選擇加密,則也加密該塊。如果文件不屬于以上兩種情形,不加密。
3、對(duì)于需要進(jìn)行公鑰加密的數(shù)據(jù),選擇已有密鑰,根據(jù)選擇的加密方法對(duì)各個(gè)數(shù)據(jù)塊中需要加密的內(nèi)容進(jìn)行加密,加密可以針對(duì)于每一塊的值,對(duì)于需要對(duì)稱加密的,產(chǎn)生密鑰,進(jìn)行對(duì)稱加密。
4、將每一個(gè)數(shù)據(jù)塊加密得到的密文,進(jìn)行編碼轉(zhuǎn)換,將加密得到的是字節(jié)數(shù)組,轉(zhuǎn)換為字符數(shù)組而產(chǎn)生實(shí)際寫入的密文段(解密的時(shí)候需要進(jìn)行相反的轉(zhuǎn)換),并且用對(duì)應(yīng)的密文對(duì)原明文段(數(shù)據(jù)塊)進(jìn)行覆蓋,由于存在長(zhǎng)度變化,所以采用實(shí)施例1或者2的方法進(jìn)行修改,將超出長(zhǎng)度的數(shù)據(jù)存儲(chǔ)好。將長(zhǎng)度變化的信息、原文件和增加數(shù)據(jù)的對(duì)應(yīng)關(guān)系、關(guān)于修改方法的一些信息也存放起來。關(guān)于修改方法的一些信息在本實(shí)施例中包含有能唯一確定這個(gè)分段位置的信息a(比如xml文件中的一個(gè)特性,數(shù)據(jù)塊在一個(gè)文件中的起始位置和結(jié)束位置,存儲(chǔ)器中的位置等),獲得對(duì)應(yīng)的塊密鑰需要的信息,比如密鑰k(這個(gè)密鑰可能是加密的)或者密鑰的存放信息b(比如,地址或者是在某個(gè)表格中的位置),加密的算法和其他解密所需信息(比如分組長(zhǎng)度,初始向量,加密模式等),也可以包括其他需要備注的消息。加密算法也可能是公鑰加密算法等,則需要存放相應(yīng)的公鑰信息。在判斷是對(duì)稱加密還是非對(duì)稱加密的時(shí)候,以最后的加密算法為準(zhǔn),比如,如果原數(shù)據(jù)采用對(duì)稱加密,后面對(duì)對(duì)稱的密鑰采用了非對(duì)稱的加密,則當(dāng)做非對(duì)稱的加密。
解密是一個(gè)相反的過程,對(duì)于每一塊數(shù)據(jù),首先判斷其是否加密,如果已經(jīng)加密,則需要解密,獲取其密鑰等信息。對(duì)數(shù)據(jù)塊進(jìn)行解密。
實(shí)施例4為本加密方法的實(shí)施例3的進(jìn)一步改進(jìn),在實(shí)施例3的基礎(chǔ)上,考慮到文件中,文本和數(shù)值往往混合在一起,當(dāng)數(shù)值和文本混合在一起的時(shí)候,將文本和數(shù)值隔離,各自采用適合的加密方法,比如對(duì)于最初的分段,考慮不同加密需要,進(jìn)行進(jìn)一步分段,對(duì)數(shù)值和文本采用不同加密方法,對(duì)數(shù)值進(jìn)行同態(tài)加密,其他數(shù)據(jù)采用一般的對(duì)稱加密,所以對(duì)它們也分段以隔離。對(duì)于流式文件,可以不用增加記錄數(shù),某個(gè)記錄中包含有需要進(jìn)行同態(tài)加密的數(shù)據(jù)的時(shí)候,在這些數(shù)據(jù)的前后進(jìn)行分段,數(shù)值采用同態(tài)加密,其他采用一般的加密,將一個(gè)記錄中的多個(gè)分段的密文放在一起,但是記錄最開始一段的起始位置和每一段的長(zhǎng)度,將這些密文放在一起,按照流式文件的格式存儲(chǔ)起來,另外在加密信息表中記錄同態(tài)加密后數(shù)值對(duì)應(yīng)的指標(biāo),符號(hào)、代號(hào)或者參數(shù)。這樣便于委托計(jì)算的時(shí)候調(diào)取。
實(shí)施例5為本加密方法的實(shí)施例3的進(jìn)一步改進(jìn),在實(shí)施例3的基礎(chǔ)上,將需要同態(tài)加密的數(shù)值可能涉及到的計(jì)算函數(shù)進(jìn)行分析,來判斷涉及到的數(shù)據(jù)是否需要用到同態(tài)加密,需要采用什么樣的同態(tài)加密,當(dāng)進(jìn)行某些委托計(jì)算時(shí)候,其他一般的加密和非全同態(tài)加密都不可直接計(jì)算,需要用到全同態(tài)加密的時(shí)候,采用全同態(tài)加密,當(dāng)全同態(tài)加密和非全同態(tài)都可行加密的時(shí)候,采用非全同態(tài)(半同態(tài))加密方法,當(dāng)普通加密可行的時(shí)候,優(yōu)先選擇普通的加密方法,即當(dāng)多種方法都可以達(dá)到目的的時(shí)候,優(yōu)先選用次序?yàn)?,一般加密、半同態(tài)加密、全同態(tài)加密。
即一般加密可行就優(yōu)先用一般加密,一般加密不可行,半同態(tài)加密可行即用半同態(tài)加密,否則用全同態(tài)加密。
實(shí)施例6:實(shí)施例6為本加密方法的實(shí)施例3的進(jìn)一步改進(jìn),在實(shí)施例3的基礎(chǔ)上,用大文件的數(shù)據(jù)塊的起始和結(jié)束位置信息和密碼k的單向函數(shù)產(chǎn)生塊密鑰。單個(gè)分段的加密密鑰由唯一確定這個(gè)分段(數(shù)據(jù)塊)的位置信息a和k的哈希函數(shù)hash(k‖a)產(chǎn)生。加密算法中還包含一種具有誤導(dǎo)功能的加密,它采用一個(gè)內(nèi)層加密和外層加密,需要較長(zhǎng)密鑰,我們用hash產(chǎn)生的值,作為流密碼的密鑰,產(chǎn)生一個(gè)密鑰流,截取最前面128bit作為外層加密的密鑰,后面的部分依次截取8bit作為內(nèi)層加密的每一個(gè)關(guān)鍵詞的加密用密鑰。產(chǎn)生密鑰后,根據(jù)可以根據(jù)實(shí)施例3,4,5的方法進(jìn)行加密。為了方便加密各個(gè)分段的加密密鑰。用公鑰加密分段加密密鑰,并且將公鑰加密后的分段加密密鑰、分段信息、分段是否加密、分段的加密密鑰對(duì)應(yīng)的數(shù)據(jù)塊的信息、解密分段所需的信息、明文數(shù)據(jù)的編碼類型等等,存放在一起,比如用表格存儲(chǔ)起來。
實(shí)施例7:在實(shí)施例6的基礎(chǔ)上,大文件的不同的塊屬于不同的用戶,各個(gè)用戶有自己密碼ki,這樣他可以加密和解密自己負(fù)責(zé)的數(shù)據(jù)塊,加密信息也存放在加密信息表中,如果采用多個(gè)初始密碼,加密信息表中除了包含實(shí)施例6中的信息,還應(yīng)該包含初始的加密的ki。
實(shí)施例8:在實(shí)施例6、7的基礎(chǔ)上,計(jì)算塊密鑰的時(shí)候,增加一個(gè)信息更改密鑰次數(shù)的信息,第一次、遺失密鑰后第二次、再次遺失密鑰后第三次的時(shí)候,分別添加一個(gè)f(n)分別是null(空),1,2這樣的信息,用單向的函數(shù)hash(k‖a‖f(n))產(chǎn)生塊密鑰,最初產(chǎn)生塊密鑰為hash(k‖a),第一次更新密鑰為hash(k‖a‖1),以此類推,在密鑰信息表中前面的基礎(chǔ)上,也添加對(duì)應(yīng)更改密鑰次數(shù)的信息。
實(shí)施例9:在實(shí)施例7的基礎(chǔ)上,考慮大數(shù)據(jù)中的不同記錄往往屬于不同的用戶,需要用不同的密鑰加密,有不同的安全級(jí)別,有不同的訪問控制權(quán)限。
當(dāng)有前面提到的樹型的多級(jí)用戶的權(quán)限時(shí)候,由最高級(jí)用戶的初始密碼kr結(jié)合次高級(jí)用戶的某一唯一編號(hào)bi產(chǎn)生次高級(jí)用戶的初始密碼,計(jì)算方法為hash(kr‖bi)),截取合適長(zhǎng)度的數(shù)據(jù)作為次高級(jí)用戶的初始的密碼;進(jìn)一步由次高級(jí)用戶初始的密碼以相同的方式產(chǎn)生再低一級(jí)用戶的初始的密碼;直到產(chǎn)生最低級(jí)用戶的初始的密碼,然后由最低級(jí)用戶的初始的密碼產(chǎn)生數(shù)據(jù)塊的加密密鑰。完整步驟如下:
1、確定好各級(jí)用戶的權(quán)限,根據(jù)上述的方法,首先最高級(jí)用戶產(chǎn)生一個(gè)初始密碼k1,然后根據(jù)利用方法hash函數(shù)sha256(k1‖b),‖表示簡(jiǎn)單的合并連接,逐級(jí)地產(chǎn)生多級(jí)用戶的初始密碼。如果數(shù)據(jù)塊是對(duì)稱加密,用最低級(jí)用戶的初始密碼去產(chǎn)生他所管理的數(shù)據(jù)塊的塊加密密鑰,產(chǎn)生塊加密密鑰的方式和實(shí)施例7相同。
實(shí)施例10:在前面實(shí)施例9基礎(chǔ)上增加密鑰(密碼)更新功能,在計(jì)算的時(shí)候增加一個(gè)信息更改密鑰次數(shù)的信息,如次高級(jí)用戶密鑰為hash(kl‖a‖f(n)),f(n)第一次產(chǎn)生密鑰為null(空),后面分別為1,2,下一級(jí)用戶的初始密碼kr+1產(chǎn)生單向的函數(shù)為hash(kr‖b‖f(n)),b為用戶的編號(hào),數(shù)據(jù)塊的對(duì)稱加密密鑰采用hash(ks‖a‖f(n))產(chǎn)生,a為文件的位置信息,在密鑰信息表中也必須同樣對(duì)應(yīng)更改密鑰次數(shù)的信息。
如果某一級(jí)用戶a的初始密碼泄漏,從用戶a的上一級(jí)用戶的初始密碼產(chǎn)生用戶a的新密碼(密鑰),注意其中n在原來的基礎(chǔ)上加1,第一次更新的密碼為hash(kr‖b‖1),以此類推。
篇幅所限,不能一一舉例,實(shí)施例也相對(duì)簡(jiǎn)化,以上實(shí)施例的限定條件和一些方法可以交叉組合,以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。