本發(fā)明屬信息安全領(lǐng)域,涉及一種對(duì)大文件進(jìn)行加密的方法。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,許多服務(wù)也趨向于信息化,數(shù)字化,人們?cè)絹?lái)越依賴數(shù)據(jù),數(shù)據(jù)量也越來(lái)越大。相應(yīng)地,一些文件也越來(lái)越大。目前非常熱門的大數(shù)據(jù)(big data,mega data)的一些文件也非常大,有些以流式文件的形式存儲(chǔ)。顯然這些文件中往往有安全需求,需要進(jìn)行加密保護(hù),但是對(duì)大量的數(shù)據(jù)進(jìn)行加密明顯又是不現(xiàn)實(shí)的。因?yàn)榇髷?shù)據(jù)中有些數(shù)據(jù)的價(jià)值比較低,無(wú)需進(jìn)行保密。但是由于其復(fù)雜多樣性,有些數(shù)據(jù)的價(jià)值可能非常高,需要進(jìn)行不同程度的保護(hù),針對(duì)云計(jì)算和大數(shù)據(jù)的加密方面,目前有代理重加密和同態(tài)加密,其中代理重加密是密文間的一種密鑰轉(zhuǎn)換機(jī)制,在這個(gè)過(guò)程中,代理人得不到數(shù)據(jù)的明文信息,從而降低了數(shù)據(jù)泄露風(fēng)險(xiǎn)。而這兩個(gè)密文所對(duì)應(yīng)的明文是一樣的,實(shí)現(xiàn)了數(shù)據(jù)共享。同態(tài)加密的目的是為了讓存儲(chǔ)在服務(wù)器上的密文數(shù)據(jù)依然能夠進(jìn)行計(jì)算。同態(tài)加密效率低,冗余度大,現(xiàn)實(shí)中應(yīng)用有較大的局限性,上述的加密方法直接用于加密大規(guī)模的數(shù)據(jù)是不現(xiàn)實(shí)的,因?yàn)橛?jì)算量龐大,而且諸如同態(tài)加密往往會(huì)帶來(lái)數(shù)據(jù)的擴(kuò)展,代價(jià)大,重代理加密只適合于特定用戶之間的密鑰轉(zhuǎn)換,現(xiàn)實(shí)中也沒(méi)有必要將所有的數(shù)據(jù)進(jìn)行上述的加密。同態(tài)加密比較適用于需要計(jì)算的數(shù)據(jù)的加密,但是代價(jià)比較高。用傳統(tǒng)的加密方法加密這些數(shù)據(jù)也存在計(jì)算量大等等問(wèn)題。而且現(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)要素:
考慮到不同數(shù)據(jù)的不同需求,本發(fā)明設(shè)計(jì)了一種針對(duì)于大文件的選擇性加密方法。
方案1:對(duì)文件進(jìn)行讀取,對(duì)其數(shù)據(jù)或者內(nèi)容進(jìn)行分段加密,如果無(wú)需保密的不加密,如果需要加密的根據(jù)其需要采用不同的加密方法,最后保存為密文。加密的總體步驟如下:
1、讀取文件,獲得內(nèi)容,對(duì)于文本文件,可以是直接對(duì)數(shù)據(jù)進(jìn)行加密,對(duì)于word之類的文件,可以對(duì)其包含的文本進(jìn)行加密,根據(jù)需要對(duì)數(shù)據(jù)或者內(nèi)容進(jìn)行分塊(分段),比如分塊可以是Hadoop中的SequenceFile等文件(流式文件)中包含的一個(gè)文件,或者是xml文件中的一個(gè)特性的值,或者是word文件的一個(gè)段落、句子等單元,表格中的一個(gè)數(shù)據(jù)項(xiàng)、一行、一列等。
2、根據(jù)需要選擇是否加密,以及何種加密方式,這個(gè)可以是機(jī)器的,也可以是人工的,比如根據(jù)設(shè)定的規(guī)則進(jìn)行機(jī)器判斷或者用戶的人工選擇,判定大文件的每一個(gè)數(shù)據(jù)塊(段)是否需要進(jìn)行加密,以及采用什么樣的方式進(jìn)行加密。
3、選擇已有密鑰或者產(chǎn)生密鑰,根據(jù)選擇的方法對(duì)各個(gè)數(shù)據(jù)塊進(jìn)行加密,加密可以針對(duì)于每一塊的值,比如某些文件格式中有分隔符,有長(zhǎng)度的記錄,如果需要明文形式,可以不進(jìn)行加密。
4、將每一個(gè)數(shù)據(jù)塊加密得到的密文,如果需要,進(jìn)行必要的適應(yīng)性的編碼轉(zhuǎn)換,比如通過(guò)一般加密得到的是字節(jié)數(shù)組,一般情況下需要轉(zhuǎn)換為字符數(shù)組再寫入文件(解密的時(shí)候需要進(jìn)行相反的轉(zhuǎn)換),并且根據(jù)相應(yīng)的文件格式要求連接為一個(gè)密文文件,采用相應(yīng)的格式保存最后的密文,比如,如果是word文檔,針對(duì)其文本內(nèi)容加密,則將加密的密文轉(zhuǎn)換為字符形式的編碼連接起來(lái)作為文本,放入word文檔,然后保存word文檔,如果是流式文件,根據(jù)流式文件的格式進(jìn)行存儲(chǔ),加密中如果引起長(zhǎng)度的變化,則需要在最終存儲(chǔ)的文件中進(jìn)行修改長(zhǎng)度值,對(duì)文件結(jié)構(gòu)中的長(zhǎng)度信息進(jìn)行相應(yīng)的調(diào)整。即進(jìn)行必要的處理讓數(shù)據(jù)符合保存的格式,將這些密文數(shù)據(jù)保存在密文文件中,并且將數(shù)據(jù)是否加密,如果加密,則相應(yīng)的解密所需要的信息和參數(shù)都要存儲(chǔ)起來(lái),比如數(shù)據(jù)塊的位置信息(比如起始和結(jié)束位置或者起始位置和長(zhǎng)度)采用什么方式進(jìn)行加密,加密的密鑰(或獲得密鑰需要的信息)和各種參數(shù),這一塊密文乃至于明文的長(zhǎng)度存放起來(lái)。為了方便,可以將這些信息存放在表中,這些信息包含有能唯一確定這個(gè)分段的信息A(比如xml文件中的一個(gè)特性,塊在一個(gè)文件中的起始位置和結(jié)束位置,存儲(chǔ)器中的位置等),獲得對(duì)應(yīng)的塊密鑰需要的信息,比如密鑰K(這個(gè)密鑰可能是加密的)或者密鑰的存放信息B(比如,地址或者是在某個(gè)表格中的位置),加密的算法和其他解密所需信息(比如分組長(zhǎng)度,初始向量,加密模式等),也可以包括其他需要備注的消息。加密算法也可能是公鑰加密算法等,則需要存放相應(yīng)的公鑰信息。
解密是一個(gè)相反的過(guò)程,對(duì)于每一塊數(shù)據(jù),首先判斷其是否加密,如果已經(jīng)加密,則需要解密,獲取其密鑰等信息。對(duì)數(shù)據(jù)塊進(jìn)行解密。
本方案的的有益技術(shù)效果有:解決了現(xiàn)有技術(shù)不適用于大文件加密的缺陷,避免了完全加密不現(xiàn)實(shí)的問(wèn)題。對(duì)于不同的塊根據(jù)不同的需要采用不同的加密方法。
方案2:在前面方案1的基礎(chǔ)上,考慮到同態(tài)加密一般只對(duì)數(shù)值有意義,在表中,可能某一列都是需要進(jìn)行同態(tài)加密的數(shù)據(jù),很容易進(jìn)行區(qū)分,xml文件中的數(shù)據(jù)一般也容易區(qū)分,但是在文本文件和word中,需要進(jìn)行同態(tài)加密的數(shù)值可能夾雜在文本(文字)或者其他的數(shù)據(jù)中,在前面分段的基礎(chǔ)上可以進(jìn)一步將數(shù)值與文本等數(shù)據(jù)進(jìn)行分開(kāi)加密,數(shù)值加密的時(shí)候在采用同態(tài)加密,這樣需要將同態(tài)加密后的數(shù)值進(jìn)行委托計(jì)算的時(shí)候可以很容易找到數(shù)據(jù),而且大量的數(shù)據(jù)可以不進(jìn)行復(fù)雜,而且冗余度高的同態(tài)加密計(jì)算。分段后依然要保證對(duì)原來(lái)文件格式的適應(yīng)性,保證解密的可逆性,比如如果對(duì)于word文件,分段的時(shí)候進(jìn)一步將這些數(shù)值和其他數(shù)據(jù)進(jìn)行分塊即可,如果是SequenceFile文件,可以采用兩種方法:A)類似于上面的,如果一個(gè)記錄中包含有數(shù)值和其他數(shù)據(jù),則進(jìn)一步將每一段數(shù)值和其他數(shù)據(jù)進(jìn)行分割,成為不同的塊進(jìn)行加密,同時(shí),根據(jù)SequenceFile文件的格式,將這些塊也設(shè)置為對(duì)應(yīng)的一個(gè)記錄,原來(lái)的一個(gè)記錄被分割為多個(gè)記錄;B)每一個(gè)記錄中的每一段數(shù)值和其他數(shù)據(jù)進(jìn)行分割,成為不同的塊進(jìn)行加密,同時(shí),加密后的密文依然連接起來(lái),成為一個(gè)記錄,并且依然根據(jù)流式文件的格式進(jìn)行存儲(chǔ),在存儲(chǔ)加密信息的時(shí)候,為了實(shí)現(xiàn)這類需要進(jìn)行代理計(jì)算的數(shù)據(jù)密文和一般文本的密文的區(qū)分,每一個(gè)塊的位置信息(比如起始位置和長(zhǎng)度或起始位置和結(jié)束位置)和加密方式被記錄下來(lái),便于解密。也可以采用設(shè)置起始標(biāo)記和結(jié)束標(biāo)記的方法來(lái)分割這些塊,這些起始和結(jié)束標(biāo)記是密文中不會(huì)出現(xiàn)的符號(hào),在密文前后增加起始標(biāo)記和結(jié)束標(biāo)記。
方案3:在方案1或者2的基礎(chǔ)上,考慮諸如同態(tài)加密,包括全同態(tài)加密,并不能滿足所有云計(jì)算背景下的委托計(jì)算的需要,有些計(jì)算依然不能被全同態(tài)加密后處理,所以,它不能解決所有問(wèn)題,也沒(mé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ù)來(lái)判斷涉及到的數(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)加密。
方案4:在前面方案1、2或者3的基礎(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ì)算,但是反過(guò)來(lái)求逆則困難。比如hash函數(shù)就是這樣的函數(shù),我們用大文件的數(shù)據(jù)塊的位置信息(可以唯一確定這個(gè)分段的信息A),初始密鑰或者是口令(統(tǒng)稱為密碼,初始密碼)K產(chǎn)生,現(xiàn)實(shí)中,人們往往很容易記住口令,這樣無(wú)需保存口令,但是密鑰則需要另外加密存儲(chǔ)。單個(gè)分段的加密密鑰由唯一確定這個(gè)分段(數(shù)據(jù)塊)的位置信息A和K的不可逆的單向函數(shù)M(F(K,A))產(chǎn)生,比如哈希函數(shù),即HASH(F(K,A))值,F(xiàn)為一個(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ù)就可以避免通過(guò)塊的密鑰去逆向推導(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è)流密碼的密鑰,通過(guò)這個(gè)密鑰以流密碼算法產(chǎn)生密鑰流,在密鑰流中截取需要的誤導(dǎo)加密的各層密鑰。產(chǎn)生密鑰后,根據(jù)方案1,2,3的方法進(jìn)行加密。
理論上說(shuō),我們只需要存儲(chǔ)好初始密碼,并且記錄每一塊對(duì)應(yīng)的初始密碼就行了,不過(guò)有時(shí)候?yàn)榱朔奖憧蛇x地也可以加密各個(gè)分段的加密密鑰??梢圆捎枚嘀丶用埽瑑?yōu)選地可以用公鑰加密分段加密密鑰,并且將公鑰加密后的分段加密密鑰、分段信息、分段是否加密、分段的加密密鑰對(duì)應(yīng)的數(shù)據(jù)塊的信息、解密分段所需的信息、明文數(shù)據(jù)的編碼類型等等,存放在一起,比如用表格存儲(chǔ)起來(lái),我們稱為加密信息表。
方案5:在前面方案4的基礎(chǔ)上,進(jìn)一步地,可以是各個(gè)用戶有自己的初始密鑰或者口令,這里也可以統(tǒng)一稱為密碼Ki,這樣他可以加密和解密自己負(fù)責(zé)的數(shù)據(jù)塊,加密信息也存放在加密信息表中,如果采用多個(gè)初始密碼,加密信息表中應(yīng)該包含初始的密碼Ki(可能是加密的Ki)或者Ki的信息(比如編號(hào),存放位置等)。如果是單個(gè)塊密鑰泄漏,采用新的初始密碼產(chǎn)生密鑰去加密泄漏密鑰的塊,并且更新加密信息表。
方案6:在前面方案4或者5的基礎(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ǔ)起來(lái)。
數(shù)據(jù)解密時(shí)候先判定數(shù)據(jù)是否加密,根據(jù)加密信息表的信息解密。也可以根據(jù)密碼生成分段的塊加密密鑰用于解密。
方案7:在前面方案4或者5的基礎(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é)的一部分文件可以解密,他們管理的文件范圍如同一棵樹(shù),最高級(jí)別用戶可以看成是樹(shù)根,負(fù)責(zé)所有文件,級(jí)別越低,負(fù)責(zé)的文件越少。舉一個(gè)例子,一個(gè)科的人每一個(gè)人都管理自己的文件,一個(gè)科長(zhǎng)可以查閱該科所有人的文件,處長(zhǎng)可以查閱所有下轄科的文件,以此類推,這種情況現(xiàn)實(shí)中經(jīng)常存在。
目前大數(shù)據(jù)越來(lái)越大,而許多大數(shù)據(jù)是存放在一個(gè)大的流式文件中。這種大文件的記錄可能屬于不同的用戶,有不同的權(quán)限,需要用不同的密鑰加密。在數(shù)據(jù)量大的時(shí)候,密鑰量是比較大的,而且管理起來(lái)非常復(fù)雜。目前有許多密鑰管理方案,如果只是對(duì)密鑰進(jìn)行加密存儲(chǔ),則密鑰量比較大,管理起來(lái)復(fù)雜,而且對(duì)于這類提到的如同一棵樹(shù)一樣的加密密鑰的管理權(quán)限不能很好控制。為了能夠存儲(chǔ)較少的密鑰,而且對(duì)不同級(jí)別的用戶賦予不同的權(quán)限,我們依然可以利用單向函數(shù)來(lái)產(chǎn)生密鑰。
大數(shù)據(jù)中的不同記錄往往屬于不同的用戶,需要用不同的密鑰加密,有不同的安全級(jí)別,有不同的訪問(wèn)控制權(quán)限。本發(fā)明利用單向函數(shù)的單向性質(zhì)設(shè)計(jì)了一種可以滿足需要的密鑰生成管理方法,并且應(yīng)用于大文件的加密保護(hù)。
當(dāng)有多級(jí)用戶的時(shí)候,由最高級(jí)用戶的初始密碼Kr結(jié)合次高級(jí)用戶的某一唯一信息Bi(可以是公開(kāi)的,也可以是只有最高級(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)生最低級(jí)用戶的初始的密碼,然后由最低級(jí)用戶的初始的密碼產(chǎn)生數(shù)據(jù)塊的加密密鑰。
因此在文件很大,其中的數(shù)據(jù)塊(比如記錄)的權(quán)限也往往復(fù)雜,可能是屬于上面提到的多級(jí)用戶的樹(shù)形的權(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(xiàn)為一個(gè)函數(shù)(簡(jiǎn)單地可以是將K、A兩個(gè)數(shù)據(jù)合并),截取加密數(shù)據(jù)塊所采用對(duì)稱加密算法的密鑰長(zhǎng)度相應(yīng)的位數(shù)。采用單向性的函數(shù)就可以避免通過(guò)塊的密鑰去逆向推導(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ǔ)起來(lái),比如采用什么方式進(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)的格式保存,比如,如果是word文檔,針對(duì)其文本內(nèi)容加密,則將加密的文本也連接起來(lái)作為文本,放入word文檔,然后保存文檔,如果是流式文件,根據(jù)流式文件的格式進(jìn)行存儲(chǔ),對(duì)文件結(jié)構(gòu)中的長(zhǎng)度信息進(jìn)行相應(yīng)的調(diào)整。
本方案的優(yōu)勢(shì)在于減少需要存儲(chǔ)的密碼或密鑰,而且可以控制多級(jí)的權(quán)限。
方案8:在前面方案7基礎(chǔ)上增加密鑰(密碼)更新功能,有時(shí)候密鑰(密碼)可能存在泄漏,丟失的情形,如果是各級(jí)的初始的密碼丟失,由于密鑰(密碼)的產(chǎn)生規(guī)則,需要更換所有的初始的密碼和由它們產(chǎn)生的塊密鑰,重新解密,再根據(jù)規(guī)則重新產(chǎn)生密鑰(用戶密碼)用新的塊密鑰加密,如果是單個(gè)塊密鑰泄漏,一般情況下,也需要更換初始的密碼,由于采用多個(gè)初始密碼,加密信息表中應(yīng)該包含初始密碼(可能是加密的)或者初始密碼的信息。這會(huì)帶來(lái)較大的代價(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為用戶的編號(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ǔ)起來(lái)。表面上看,函數(shù)形式和前面的不一樣,增加了N相關(guān)的內(nèi)容,可以當(dāng)做是原單向函數(shù)的進(jìn)一步限定。
如果某一級(jí)用戶A的初始密碼泄漏,從用戶A的上一級(jí)用戶的初始密碼產(chǎn)生用戶A的新密碼(密鑰),注意其中N在原來(lái)的基礎(chǔ)上加1,即M(F(Kr,B,f(N+1))),這樣可以保證密鑰是新的,而且由于單向性,互相之間不能相互推導(dǎo),不會(huì)泄密。
這樣密鑰丟失的時(shí)候可以直接更換新的密鑰,重新加密數(shù)據(jù)塊。一旦泄密,無(wú)需大面積更換密鑰(密碼)。
具體實(shí)施方式
下面給出本發(fā)明的部分實(shí)施例,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
實(shí)施例1為本加密方法的實(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、選擇已有密鑰或者產(chǎn)生密鑰,根據(jù)選擇的方法對(duì)各個(gè)數(shù)據(jù)塊進(jìn)行加密,加密可以針對(duì)于每一塊的值,如某些文件格式中有分隔符,有長(zhǎng)度的記錄,如果需要明文形式,可以不進(jìn)行加密。如果是對(duì)稱加密,需要產(chǎn)生塊密鑰,選擇加密塊的各種參數(shù),如果是非對(duì)稱加密,需要產(chǎn)生或者選擇密鑰對(duì)文件進(jìn)行加密,并且將文件是否加密,如果加密,對(duì)密鑰用公鑰加密,存放在加密信息表中,表中包含有唯一確定這個(gè)分段的起始和結(jié)束位置信息,公鑰加密的密鑰,加密的算法和分組長(zhǎng)度,初始向量,加密模式,相關(guān)編碼信息等。
4、將每一個(gè)數(shù)據(jù)塊加密的密文,還需要進(jìn)行適應(yīng)性的編碼轉(zhuǎn)換,比如通過(guò)一般加密得到的是字節(jié)數(shù)組,一般應(yīng)該轉(zhuǎn)換為字符數(shù)組再寫入文件(解密的時(shí)候需要進(jìn)行相反的轉(zhuǎn)換),并且根據(jù)相應(yīng)的文件格式要求連接為一個(gè)密文文件,采用相應(yīng)的格式保存最后的密文,根據(jù)流式文件的格式進(jìn)行存儲(chǔ),加密中如果引起長(zhǎng)度的變化,則需要在最終存儲(chǔ)的文件中進(jìn)行修改長(zhǎng)度值,對(duì)文件結(jié)構(gòu)中的長(zhǎng)度信息進(jìn)行相應(yīng)的調(diào)整。將這些密文數(shù)據(jù)保存在密文文件中,并且將數(shù)據(jù)是否加密,如果加密,則相應(yīng)的解密所需要的信息和參數(shù)都要存儲(chǔ)起來(lái),比如數(shù)據(jù)塊的位置信息(比如起始和結(jié)束位置或者起始位置和長(zhǎng)度)采用什么方式進(jìn)行加密,加密的密鑰和各種參數(shù),這一塊密文乃至于明文的長(zhǎng)度存放起來(lái)。為了方便,可以將這些信息存放在表中,這些信息包含有能唯一確定這個(gè)分段在一個(gè)文件中的起始位置和結(jié)束位置,是否加密,加密的密鑰K,加密的算法和其他解密所需信息(比如分組長(zhǎng)度,初始向量,加密模式,填充模式等),也可以包括其他需要備注的消息。加密算法也可能是公鑰加密算法等,則需要存放相應(yīng)的公鑰信息。
解密是一個(gè)相反的過(guò)程,對(duì)于每一塊數(shù)據(jù),首先判斷其是否加密,如果已經(jīng)加密,則需要解密,獲取其密鑰等信息。對(duì)數(shù)據(jù)塊進(jìn)行解密。
實(shí)施例2為本加密方法的實(shí)施例1的進(jìn)一步改進(jìn),在實(shí)施例1的基礎(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è)分段的密文放在一起,但是記錄最開(kāi)始一段的起始位置和每一段的長(zhǎng)度,將這些密文放在一起,按照流式文件的格式存儲(chǔ)起來(lái),另外在加密信息表中記錄同態(tài)加密后數(shù)值對(duì)應(yīng)的指標(biāo),符號(hào)、代號(hào)或者參數(shù)。這樣便于委托計(jì)算的時(shí)候調(diào)取。
實(shí)施例3為本加密方法的實(shí)施例1的進(jìn)一步改進(jìn),在實(shí)施例1的基礎(chǔ)上,將需要同態(tài)加密的數(shù)值可能涉及到的計(jì)算函數(shù)進(jìn)行分析,來(lái)判斷涉及到的數(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í)施例4:實(shí)施例4為本加密方法的實(shí)施例1的進(jìn)一步改進(jìn),在實(shí)施例1的基礎(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í)施例1,2,3的方法進(jìn)行加密。為了方便加密各個(gè)分段的加密密鑰。用公鑰加密分段加密密鑰,并且將公鑰加密后的分段加密密鑰、分段信息、分段是否加密、分段的加密密鑰對(duì)應(yīng)的數(shù)據(jù)塊的信息、解密分段所需的信息、明文數(shù)據(jù)的編碼類型等等,存放在一起,比如用表格存儲(chǔ)起來(lái)。
實(shí)施例5:在實(shí)施例4的基礎(chǔ)上,大文件的不同的塊屬于不同的用戶,各個(gè)用戶有自己密碼Ki,這樣他可以加密和解密自己負(fù)責(zé)的數(shù)據(jù)塊,加密信息也存放在加密信息表中,如果采用多個(gè)初始密碼,加密信息表中除了包含實(shí)施例4中的信息,還應(yīng)該包含初始的加密的Ki。
實(shí)施例6:在實(shí)施例4、5的基礎(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í)施例7:在實(shí)施例5的基礎(chǔ)上,考慮大數(shù)據(jù)中的不同記錄往往屬于不同的用戶,需要用不同的密鑰加密,有不同的安全級(jí)別,有不同的訪問(wèn)控制權(quán)限。
當(dāng)有前面提到的樹(shù)型的多級(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í)用戶的初始密碼。
2、根據(jù)需要對(duì)需要加密的大文件進(jìn)行分塊(分段),以Hadoop中的SequenceFile等大文件的一個(gè)記錄。
3、根據(jù)關(guān)鍵詞出現(xiàn)的頻率和用戶按需要選擇,判定數(shù)據(jù)塊(段)是否需要進(jìn)行加密,以及采用什么樣的方式進(jìn)行加密。如果數(shù)據(jù)塊需要采用公鑰加密方法,則不需要用到產(chǎn)生的密鑰,只需要利用公鑰和私鑰加密解密即可,如果是對(duì)稱加密,則需要在下一步產(chǎn)生塊加密密鑰。
4、根據(jù)數(shù)據(jù)塊的位置信息和最低級(jí)用戶的初始密碼Kl產(chǎn)生數(shù)據(jù)塊的加密密鑰。單個(gè)分段(塊)的加密密鑰由HASH(F(Kl‖A))值產(chǎn)生,截取加密數(shù)據(jù)塊所采用對(duì)稱加密算法的密鑰長(zhǎng)度相應(yīng)的位數(shù)。
5、對(duì)需要加密的塊,根據(jù)選擇的方法對(duì)數(shù)據(jù)塊進(jìn)行加密,得到的數(shù)據(jù),加密可以只針對(duì)于每一塊的值,并且將數(shù)據(jù)是否加密,如果加密,則相應(yīng)的解密所需要的信息和參數(shù)都要存儲(chǔ)在加密信息表中,包括采用什么方式進(jìn)行加密,加密的塊密鑰、數(shù)據(jù)塊的起始位置和結(jié)束位置和其他信息(分組長(zhǎng)度,初始向量,加密模式,填充模式等)。
6、將每一個(gè)數(shù)據(jù)塊加密的密文根據(jù)相應(yīng)的方法連接為一個(gè)密文文件,采用相應(yīng)的格式保存,本實(shí)施例針對(duì)的是流式文件,根據(jù)流式文件的格式進(jìn)行存儲(chǔ),對(duì)文件結(jié)構(gòu)中的長(zhǎng)度信息進(jìn)行相應(yīng)的調(diào)整。
實(shí)施例8:在前面實(shí)施例7基礎(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在原來(lái)的基礎(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)。