專利名稱:基于一種完整性校驗(yàn)的安全元數(shù)據(jù)管理方法
技術(shù)領(lǐng)域:
基于一種完整性校驗(yàn)的安全元數(shù)據(jù)管理方法屬于存儲(chǔ)安全領(lǐng)域,尤其涉及其中的 完整性校驗(yàn)和安全元數(shù)據(jù)管理領(lǐng)域。
背景技術(shù):
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,當(dāng)今社會(huì)對(duì)數(shù)據(jù)存儲(chǔ)和共享的需求在逐漸加大,分布式和 網(wǎng)絡(luò)化的技術(shù)也得到越來(lái)越廣泛的應(yīng)用。但是隨著數(shù)據(jù)在物理級(jí)別上脫離了用戶,導(dǎo)致 了數(shù)據(jù)可能在網(wǎng)絡(luò)存儲(chǔ)中遭受泄露以及篡改的機(jī)會(huì)增加,因此如何讓用戶放心地將數(shù)據(jù)共 享,同時(shí)也能保證數(shù)據(jù)的機(jī)密性和完整性顯得愈加重要。數(shù)據(jù)的機(jī)密性值的是數(shù)據(jù)對(duì)于沒(méi)有訪問(wèn)權(quán)限的用戶(也可以稱為非法用戶)將是 未知的,沒(méi)有訪問(wèn)權(quán)限的用戶無(wú)法從數(shù)據(jù)中獲取關(guān)于其想得到的信息。一般保護(hù)數(shù)據(jù)的機(jī) 密性的方法主要是利用廣泛應(yīng)用的加密算法對(duì)數(shù)據(jù)進(jìn)行加密,具有訪問(wèn)權(quán)限的用戶擁有密 鑰,并能對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)。數(shù)據(jù)的完整性校驗(yàn)指的是,數(shù)據(jù)在傳輸和存儲(chǔ)過(guò)程中,確保信息不被非法篡改或 者是數(shù)據(jù)的非法篡改能被合法用戶迅速發(fā)現(xiàn),為用戶提供的一種完整性保護(hù)的方法。現(xiàn)今 的數(shù)據(jù)完整性校驗(yàn)的方法是在存儲(chǔ)或者是傳輸數(shù)據(jù)前,利用哈希算法對(duì)數(shù)據(jù)計(jì)算哈希值, 并進(jìn)行保存,當(dāng)用戶需要對(duì)數(shù)據(jù)進(jìn)行訪問(wèn),利用相同的哈希算法重新計(jì)算該數(shù)據(jù)的哈希值, 并與之前保存的哈希值進(jìn)行對(duì)比,若相等,則說(shuō)明數(shù)據(jù)是完整的,若不相等,則說(shuō)明數(shù)據(jù)被 非法篡改或者在存儲(chǔ)的過(guò)程中丟失了部分?jǐn)?shù)據(jù)。但是由于數(shù)據(jù)的哈希值也有可能成為攻擊 的目標(biāo),因此本發(fā)明采取了更完善的完整性校驗(yàn),不僅包括了數(shù)據(jù)的完整性校驗(yàn),同時(shí)也包 括了數(shù)據(jù)哈希值的完整性校驗(yàn)?;谝环N完整性校驗(yàn)的安全元數(shù)據(jù)管理方法是指在網(wǎng)絡(luò)共享系統(tǒng)中,為保證安 全元數(shù)據(jù)的機(jī)密性和完整性,以及用戶能夠?qū)ξ募M(jìn)行高效訪問(wèn)所提出的管理方法。傳統(tǒng) 的安全元數(shù)據(jù)管理方法主要有以下三種第一種是管理文件級(jí)的哈希值,即使用哈希算法 對(duì)整個(gè)文件計(jì)算哈希值并進(jìn)行保存,當(dāng)用戶訪問(wèn)該文件時(shí),則對(duì)該文件重新計(jì)算哈希值,并 與之前保存的哈希值進(jìn)行對(duì)比,以此判斷文件的完整性,這種方法的缺點(diǎn)是由于哈希值是 文件級(jí)的,當(dāng)用戶對(duì)該文件某個(gè)部分進(jìn)行修改或者讀取該文件的某個(gè)部分時(shí),為了保證用 戶讀取到的數(shù)據(jù)是完整的,因此需要進(jìn)行完整性校驗(yàn),用戶則需要重新計(jì)算整個(gè)文件的哈 希值,并與之前保存的哈希值進(jìn)行比較,判斷該文件是否完整,這樣做計(jì)算開(kāi)銷(xiāo)太大;第二 種是管理文件塊級(jí)的哈希值,具體的操作過(guò)程為將一個(gè)文件劃分為許多大小固定的文件 塊,并使用哈希算法計(jì)算每個(gè)文件塊的哈希值來(lái)保證文件塊的完整性,同時(shí)為了保證每個(gè) 文件塊哈希值的完整性,需要將每個(gè)文件塊的哈希值進(jìn)行拼接合并,并對(duì)拼接合并后的結(jié) 果再求哈希值進(jìn)行保存,這種方法的缺點(diǎn)是當(dāng)用戶需要對(duì)某個(gè)文件塊進(jìn)行改動(dòng)或者讀取 某個(gè)文件塊時(shí),為了保證用戶讀取到的該文件塊是完整的,用戶需要重新計(jì)算所有文件塊 的哈希值,然后將計(jì)算而得的哈希值進(jìn)行拼接合并后再計(jì)算哈希,判斷求出的哈希值是否 與之前保存的一致,這樣做開(kāi)銷(xiāo)較大,并且哈希值沒(méi)有得到有效管理;第三種做法是使用文
5件塊級(jí)的哈希值和簡(jiǎn)單的Merkle哈希樹(shù),具體的做法是首先計(jì)算每個(gè)文件塊的哈希值, 然后構(gòu)建Merkle哈希樹(shù);具體的構(gòu)建方法如下,首先保證Merkle哈希樹(shù)的葉子節(jié)點(diǎn)同文件 塊數(shù)目相等,并形成葉子節(jié)點(diǎn)到文件塊的一一映射,在每個(gè)葉子節(jié)點(diǎn)存放相應(yīng)文件塊的哈 希值,然后根據(jù)該樹(shù)的叉數(shù),從葉子節(jié)點(diǎn)開(kāi)始逐層向上分別計(jì)算內(nèi)部節(jié)點(diǎn)(即除根節(jié)點(diǎn)之 外的非葉子節(jié)點(diǎn))的所有兒子節(jié)點(diǎn)內(nèi)容拼接后的哈希值,并存放在該節(jié)點(diǎn)中,最后直至根 節(jié)點(diǎn),對(duì)存放在根節(jié)點(diǎn)中的哈希值進(jìn)行簽名,這樣最終保證了每個(gè)文件塊哈希值的完整性, 這種做法雖然可以有效管理文件塊的哈希值,但是可能造成Merkle哈希樹(shù)高度過(guò)大,使得 每次完整性校驗(yàn)都需要對(duì)葉子節(jié)點(diǎn)進(jìn)行訪問(wèn),這樣將不僅需要很多次的1/0,而且開(kāi)銷(xiāo)較 大,除此之外,Merkle哈希樹(shù)的完整性也沒(méi)有得到很好的保護(hù)。本發(fā)明提出了基于一種完整性校驗(yàn)的安全元數(shù)據(jù)管理方法,該方法通過(guò)文件塊自 加密技術(shù)計(jì)算,通過(guò)哈希值生成密鑰對(duì)文件塊進(jìn)行加密,從而提高了存儲(chǔ)的效率;采用了 4層的64叉堆哈希樹(shù)結(jié)構(gòu),保證了哈希值的完整性,提高了文件塊哈希值的更新和驗(yàn)證效 率,并且降低了用戶訪問(wèn)哈希樹(shù)所需要的I/O量;最后通過(guò)構(gòu)建根哈希虛擬鏈表,保證了根 哈希的完整性,同時(shí)在一定程度上支持了用戶的并發(fā)訪問(wèn)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種對(duì)安全元數(shù)據(jù)進(jìn)行有效便捷管理的方法,能夠保證安 全元數(shù)據(jù)的完整性,同時(shí)用戶能夠?qū)Π踩獢?shù)據(jù)信息進(jìn)行方便和高效的訪問(wèn)和更新,并且 支持多用戶對(duì)一個(gè)文件進(jìn)行并發(fā)訪問(wèn)。本發(fā)明的重點(diǎn)是文件塊級(jí)別的自加密技術(shù),64叉堆 哈希樹(shù)的設(shè)計(jì)及根哈希虛擬鏈表的設(shè)計(jì)。本發(fā)明的特征在于是在客戶端和一個(gè)安全元數(shù)據(jù)管理服務(wù)器組成的系統(tǒng)中,依 次按以下步驟實(shí)現(xiàn)的步驟(1)客戶端用自加密方法生成文件塊級(jí)的安全元數(shù)據(jù)信息,步驟為步驟(1.1)按需要地把文件F分為固定大小為S的文件塊集合F= (f1;f2,..., fn,. . .,fN),N表示文件塊數(shù),當(dāng)文件F不是固定大小S的整數(shù)倍,則將最后一個(gè)文件塊填充 到大小為S的值,步驟(1. 2)用安全散列算法SHAl對(duì)所述文件塊fi計(jì)算其哈希值hashphashi = SHAl (f》,其中 i = 1,2,. . .,n,. . .,N,得到文件塊的哈希值集合 Qiash1, hash2,. . .,hashN),步驟(1. 3)利用步驟(1. 2)得到的哈希值Iiashi生成加密密鑰,用keyi表示,keyi =hash」I Offseti,其中=Offseti表示文件塊&在所述文件中的偏移量,占用12B的存儲(chǔ) 空間,文件塊&的哈希值hashi占用20B的存儲(chǔ)空間,“Μ"為拼接合并符號(hào),則加密密 鑰keyi占用的存儲(chǔ)空間為32B,步驟(1. 4)對(duì)所述文件塊&按下式加密Ci = E(fi; key》,其中E表示AES加密 算法,文件塊A和密鑰keyi是輸入?yún)?shù),Ci表示對(duì)文件塊&進(jìn)行加密所得到的密文;步驟(2)在所述安全元數(shù)據(jù)管理服務(wù)器構(gòu)造所述文件F內(nèi)所有文件塊哈希值集 合Qiash1, hash2, ... , hashN)的64叉堆哈希樹(shù),步驟如下步驟(2. 1)定義64叉堆哈希樹(shù)的數(shù)據(jù)結(jié)構(gòu)內(nèi)部節(jié)點(diǎn)和根節(jié)點(diǎn)的兒子數(shù)目都是 64,每個(gè)節(jié)點(diǎn)所存放的內(nèi)容是bHash| IcHash,所述的每個(gè)節(jié)點(diǎn)是指根節(jié)點(diǎn)或者內(nèi)部節(jié)點(diǎn)或 者葉子節(jié)點(diǎn),其中,bHash是該節(jié)點(diǎn)所對(duì)應(yīng)文件塊的哈希值,節(jié)點(diǎn)i的序號(hào)對(duì)應(yīng)于文件塊i的序號(hào),以保證該節(jié)點(diǎn)i所對(duì)應(yīng)文件塊&的數(shù)據(jù)完整性,其中i = (1,2,. . .,n,. . . ,N),cHash 是該節(jié)點(diǎn)i的所有兒子節(jié)點(diǎn)的內(nèi)容,包括每個(gè)兒子節(jié)點(diǎn)中存儲(chǔ)的bHash和cHash在拼接后 計(jì)算得到的哈希值,以保證該節(jié)點(diǎn)i的所有兒子節(jié)點(diǎn)內(nèi)容的完整性,即保證每個(gè)兒子節(jié)點(diǎn) 中的bHash和cHash的完整性,“| | “為拼接合并符號(hào),步驟(2. 2)構(gòu)造所述64叉堆哈希樹(shù),初始化各節(jié)點(diǎn)i的內(nèi)容,步驟(2.2.1):64叉堆哈希樹(shù)節(jié)點(diǎn)集合如下 (node°,node] ’…,nodelM,nodef,…,node; ,..·),其中node 』為根節(jié)點(diǎn),表示根節(jié)點(diǎn)只有——個(gè), notfe丨1是《oofei1的第1個(gè)兒子,《0論丨4是《0論丨°的第64個(gè)兒子,Wflfe12表示為《ο論丨1的第1個(gè)兒 子,以此類(lèi)推,"ocfe/表示所述64叉堆哈希樹(shù)中第j層的第i個(gè)節(jié)點(diǎn),則對(duì)于該64叉堆 哈希樹(shù),第0層的節(jié)點(diǎn)為根節(jié)點(diǎn),數(shù)目為1,第1層的節(jié)點(diǎn)為根節(jié)點(diǎn)的兒子,其數(shù)目為64, 第2層節(jié)點(diǎn)為第1層相關(guān)節(jié)點(diǎn)的兒子,其數(shù)目為642,第3層的節(jié)點(diǎn)為第2層相關(guān)節(jié)點(diǎn)的 兒子,其數(shù)目為643,以此類(lèi)推,則對(duì)于所述非葉子節(jié)點(diǎn)《 Α/ ,其所有兒子節(jié)點(diǎn)集合為 (node('XM+],nodeJ^\)xM+2 ,··.,node二),步驟(2. 2. 2)初始化各節(jié)點(diǎn)的哈希值bHash 將步驟(1. 2)得到的 文件塊哈希值集合Oiash1, hash2, ... , hashN)和64叉堆哈希樹(shù)的節(jié)點(diǎn)集合
(^0辦丨力(^4,...,”(^心,”0£^,...,”0辦丨,...)形成--對(duì)應(yīng),具體方法如下對(duì)于根節(jié)占
node0,所對(duì)應(yīng)的文件塊的哈希值為Iiash1,記為noi/ef — bHash = hash,,node]所對(duì)應(yīng) 的文件塊f2的哈希值為hash2,記為node! bHash = hash2,對(duì)于第j層的第i個(gè)節(jié)點(diǎn)
W一所對(duì)應(yīng)文件塊fn的哈希值為hashn,其中η需要滿足的條件為《 = g(64廣,記為 nodeI —> bHash = hashn,步驟(2. 2. 3)初始化各節(jié)點(diǎn)的哈希值cHash 從葉子節(jié)點(diǎn)開(kāi)始逐層向上直至根節(jié) 點(diǎn),對(duì)于葉子節(jié)點(diǎn)而言,利用線性同余法生成隨機(jī)數(shù),將該隨機(jī)數(shù)賦值于— CifoA,對(duì) 于非葉子節(jié)點(diǎn)而言,對(duì)其所有的兒子節(jié)點(diǎn)內(nèi)容的哈希值,包括bHash和cHash,進(jìn)行拼 接后計(jì)算哈希值,表示為bHash) ||…|| ( otfe,= — cHash)),并將結(jié)果賦 值于 cHash, ^nodel1 — cHash轟示,,步驟(2. 3)按照以下步驟隨機(jī)訪問(wèn)數(shù)據(jù)塊,步驟(2. 3. 1)判斷所述隨機(jī)訪問(wèn)是否越界,步驟(2. 3. 1. 1)文件F的大小為filesize,當(dāng)用戶訪問(wèn)偏移量為offset,大小為 size的數(shù)據(jù)塊,若offset+size > filesize,則訪問(wèn)越界,用戶只能訪問(wèn)偏移量為offset, 大小為(filesize-offset)的數(shù)據(jù)塊,如果offset+size彡filesize,則用戶正常訪問(wèn)目標(biāo) 數(shù)據(jù)塊,步驟(2.3. 1.2)找出包含步驟(2.3. 1. 1)中的目標(biāo)數(shù)據(jù)塊f在步驟(1. 1)中生
成的文件塊集合中的文件塊子集合(fsta,t,fstart+1,· · ·,U,其中,fsta,t為起始文件塊,fend
為終止文件塊,通過(guò)計(jì)算可以得到,^^ = [,j ,end= °ffset^size,步驟(2. 3. 2)進(jìn)行文件塊子集合的哈希值的完整性校驗(yàn),步驟如下步驟(2. 3. 2. 1)找出步驟(2. 3. 1. 2)中包含所述的目標(biāo)數(shù)據(jù)塊f的文件塊子集合(fStot,fstart+l' ...,feffld)所對(duì)應(yīng)的64叉堆哈希樹(shù)的各節(jié)點(diǎn),步驟(2. 3. 2. 2)找出步驟(2. 3. 2. 1)中所述64叉堆哈希樹(shù)各節(jié)點(diǎn)各自父親節(jié)點(diǎn) 直至根節(jié)點(diǎn)的路徑,對(duì)該路徑經(jīng)過(guò)的每個(gè)節(jié)點(diǎn),無(wú)論內(nèi)部節(jié)點(diǎn)和根節(jié)點(diǎn),用SHAl算法計(jì)算 所述路徑內(nèi)的每個(gè)節(jié)點(diǎn)的所有兒子節(jié)點(diǎn)的內(nèi)容拼接后而成的哈希值,看與該節(jié)點(diǎn)中保存的 cHash是否相等,若相等,說(shuō)明文件塊子集合的哈希值是完整的,若不相等,則說(shuō)明文件塊子 集合的哈希值被非法篡改,步驟(2. 3. 2. 3)對(duì)文件塊進(jìn)行完整性校驗(yàn),步驟如下用戶重新計(jì)算文件塊子集 合的哈希值,用SHAl算法逐個(gè)計(jì)算該文件塊子集合中的每個(gè)文件塊的哈希值,再找出于該 文件塊子集合所對(duì)應(yīng)的那些所述64叉堆哈希樹(shù)的節(jié)點(diǎn),判斷重新計(jì)算得出的哈希值是否 與這些節(jié)點(diǎn)中的bHash相等,如果相等,說(shuō)明文件塊子集合的內(nèi)容是完整的,沒(méi)有經(jīng)過(guò)非法 篡改,如果不相等,則說(shuō)明文件塊子集合的內(nèi)容不完整;步驟(3)按以下步驟更新文件數(shù)據(jù)塊步驟(3.1)進(jìn)行完整性校驗(yàn),包括相關(guān)文件塊的哈希值的完整性校驗(yàn)以及 該文件塊內(nèi)容的完整性校驗(yàn)判斷(offset+size)和文件大小filesize的關(guān)系,如 果offset+size > filesize,則fend不存在,因此只需要驗(yàn)證文件塊fstart的完整性以 及的哈希值的完整性,后者的驗(yàn)證方法如步驟(2. 3. 2. 2)所述,如果offset+size 彡filesize,則需要驗(yàn)證起始文件塊fstot和終止文件塊fmd的完整性,以及這兩個(gè)文件塊 的哈希值的完整性,后者的驗(yàn)證方法如步驟(2. 3. 2. 2)所述,步驟(3. 2)重新計(jì)算被更新數(shù)據(jù)塊的哈希值當(dāng)數(shù)據(jù)塊更新完畢,需要利用哈希 算法SHAl算法對(duì)更新的部分進(jìn)行重新計(jì)算哈希值,并使用重新計(jì)算得到的哈希值生成加 密密鑰,并使用所述AES加密算法對(duì)更新后的文件塊進(jìn)行加密處理,步驟(3.3)把步驟(4.2)重新計(jì)算得到的哈希值賦值于bHash,并逐層向上找到 它們的父親節(jié)點(diǎn)直至根節(jié)點(diǎn)的路徑,找到該路徑上的相關(guān)節(jié)點(diǎn),重新計(jì)算該節(jié)點(diǎn)的所有兒 子節(jié)點(diǎn)的內(nèi)容所拼接合并后的哈希值,賦值于該節(jié)點(diǎn)的cHash ;步驟(4)一個(gè)文件的所有文件塊的哈希值由多棵64叉堆哈希樹(shù)來(lái)維護(hù)的情況 下,當(dāng)發(fā)生并發(fā)訪問(wèn)時(shí),要按照以下步驟構(gòu)造一個(gè)根哈希虛擬鏈表,以此來(lái)支持并發(fā)訪問(wèn), 步驟如下步驟(4. 1)構(gòu)造根哈希虛擬鏈表步驟(4. 1. 1)將同屬于一個(gè)文件的多棵64叉堆哈希樹(shù)的根節(jié)點(diǎn)鄰接,構(gòu)成根節(jié) 點(diǎn)之間的索引,每個(gè)根節(jié)點(diǎn)除包含了哈希樹(shù)的根哈希值,步驟(4. 1. 2)根哈希虛擬鏈表為(rhi; rh2,. . .,rhn),其中rh表示第i棵64叉 堆哈希樹(shù)的根節(jié)點(diǎn)所存儲(chǔ)的根哈希值,步驟(4. 1. 3)當(dāng)存在對(duì)根哈希虛擬鏈表進(jìn)行并發(fā)訪問(wèn)的時(shí),首先檢查rhi值是否 處于順序鄰接的位置,對(duì)于尾節(jié)點(diǎn)rhn,查看其索引是否指向自己,步驟(4. 1.4)當(dāng)多個(gè)進(jìn)程不同時(shí)修改屬于同一棵64叉堆哈希樹(shù)的文件塊,就允 許這些操作并發(fā)執(zhí)行。本發(fā)明的效果如下i.采用了文件塊自加密技術(shù),避免了一般情況下需要存儲(chǔ)加密密鑰和哈希值的情 況,通過(guò)使用文件塊的哈希值生成密鑰,實(shí)現(xiàn)了系統(tǒng)只需要存儲(chǔ)文件塊的哈希值就可以保
8證文件塊的機(jī)密性和完整性的要求,提高了存儲(chǔ)的效率;ii.使用了 64叉堆數(shù)據(jù)結(jié)構(gòu)管理文件塊的哈希值,在每個(gè)節(jié)點(diǎn)中存儲(chǔ)文件塊哈希 值以及該節(jié)點(diǎn)的所有兒子節(jié)點(diǎn)文件塊哈希值拼接后所計(jì)算的哈希值,這樣的設(shè)計(jì)縮短了文 件塊被修改時(shí),64叉堆哈希樹(shù)需要更新和驗(yàn)證的路徑,同時(shí)由于文件塊的加密密鑰是由相 應(yīng)的文件塊的哈希值生成,因此這些密鑰的完整性也在64叉堆哈希樹(shù)中得到了保護(hù);iii.實(shí)現(xiàn)了根哈希的虛擬鏈表技術(shù)。由于一個(gè)文件的完整性信息可能由多棵64 叉堆進(jìn)行維護(hù),使用根哈希的虛擬鏈表技術(shù)保證了根哈希的完整性,同時(shí)在支持了用戶并 發(fā)訪問(wèn)的需求。
圖1.文件分割成文件塊示意圖。圖2.文件塊自加密過(guò)程示意圖。圖3. 64叉堆哈希樹(shù)數(shù)據(jù)結(jié)構(gòu)圖其中bHash為該節(jié)點(diǎn)所對(duì)應(yīng)文件塊的哈希值, cHash為該節(jié)點(diǎn)的所有兒子節(jié)點(diǎn)內(nèi)容拼接合并后計(jì)算的哈希值。圖4.當(dāng)隨機(jī)訪問(wèn)文件塊時(shí),64叉堆的完整性校驗(yàn)其中bHash為該節(jié)點(diǎn)所對(duì)應(yīng)文 件塊的哈希值,cHash為該節(jié)點(diǎn)的所有兒子節(jié)點(diǎn)內(nèi)容拼接合并后計(jì)算的哈希值。圖5.根哈希虛擬鏈表數(shù)據(jù)結(jié)構(gòu)圖。圖6.并發(fā)訪問(wèn)的流程示意圖。圖7.具體方法流程圖。
具體實(shí)施例方式本發(fā)明的核心是在安全元數(shù)據(jù)管理服務(wù)器上實(shí)現(xiàn)了對(duì)文件安全元數(shù)據(jù)的管理,其 實(shí)現(xiàn)主要是由以下幾個(gè)部分,管理操作主要由每個(gè)部分的相應(yīng)模塊構(gòu)成 客戶端申請(qǐng)對(duì)文件的訪問(wèn),并在文件加密的過(guò)程中主要負(fù)責(zé)計(jì)算文件塊的哈 希值,以及對(duì)文件塊進(jìn)行加密操作;A.文件分塊模塊負(fù)責(zé)對(duì)文件進(jìn)行分塊操作,具體操作如圖1所示。針對(duì)一個(gè)文件,將其劃分為多個(gè)固定大小的文件塊;B.自加密模塊負(fù)責(zé)對(duì)文件塊進(jìn)行自加密操作,具體操作如圖2所示。在模塊中所使用的加密算法為對(duì)稱塊加密算法AES,其中AES算法是美國(guó)國(guó)家技 術(shù)標(biāo)準(zhǔn)委員會(huì)在2000年所確定的高級(jí)加密標(biāo)準(zhǔn),由于AES算法是塊加密算法,如果需要加 密的塊超過(guò)AES算法加密的基本單元,則需要使用分組加密模式。AES算法包含了多種不同 的分組加密模式,這些分組加密模式可以讓使用者根據(jù)其對(duì)性能和安全性的綜合考慮而選 擇使用。在模塊中,首先采用SHAl算法對(duì)每個(gè)文件塊計(jì)算哈希值,并將文件塊的哈希值和 其所在的偏移值進(jìn)行拼接合并,構(gòu)成密鑰;然后利用該密鑰,使用AES算法以及用戶所選擇 的分組模式,對(duì)文件塊進(jìn)行加密,加密后,將每個(gè)文件塊的哈希值發(fā)給安全元數(shù)據(jù)管理服務(wù) 器;C.完整性校驗(yàn)?zāi)K驗(yàn)證所請(qǐng)求訪問(wèn)的數(shù)據(jù)塊的完整性;當(dāng)客戶端向安全元數(shù)據(jù) 管理服務(wù)器申請(qǐng)?jiān)L問(wèn)某個(gè)文件中偏移為offset、大小為size的數(shù)據(jù)塊,安全元數(shù)據(jù)管理服 務(wù)器通過(guò)步驟2. 3. 2驗(yàn)證包含該數(shù)據(jù)塊的最小文件塊子集合的哈希值的完整后,將會(huì)返回給用戶端包含該數(shù)據(jù)塊的最小文件塊子集合中的每個(gè)文件塊的哈希值,客戶端運(yùn)行此模塊 重新計(jì)算這些文件塊的哈希值,判斷是否與得到的哈希值相同,若相同,則說(shuō)明所請(qǐng)求訪問(wèn) 的數(shù)據(jù)塊是完整的,否則,則說(shuō)明所請(qǐng)求訪問(wèn)的數(shù)據(jù)塊的完整性受到破壞;·網(wǎng)絡(luò)以密文形式傳輸用戶的請(qǐng)求和安全元數(shù)據(jù)信息; 安全元數(shù)據(jù)管理服務(wù)器接受文件的安全元數(shù)據(jù)信息,構(gòu)建并維護(hù)64叉堆哈希 樹(shù);當(dāng)用戶申請(qǐng)對(duì)數(shù)據(jù)塊進(jìn)行訪問(wèn),安全服務(wù)器確定了包含該數(shù)據(jù)塊的最小文件塊子集合, 然后對(duì)該子集合中的文件塊的哈希值進(jìn)行完整性校驗(yàn);A.元數(shù)據(jù)初始模塊從客戶端接收文件塊集合的哈希值,并初始化64叉堆哈希樹(shù) 結(jié)構(gòu),64叉堆哈希樹(shù)的數(shù)據(jù)結(jié)構(gòu)如圖3所示;1.定義64叉堆哈希樹(shù)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)64叉堆哈希樹(shù)中,每個(gè)節(jié)點(diǎn)的內(nèi)容包括bHash和cHash ;其中,bHash指的是該節(jié) 點(diǎn)所對(duì)應(yīng)的文件塊的哈希值,該哈希值是使用SHAl算法對(duì)文件塊進(jìn)行計(jì)算而得,占用的存 儲(chǔ)空間為20B ;cHash指的是該節(jié)點(diǎn)的所有兒子節(jié)點(diǎn)的內(nèi)容拼接合并后所計(jì)算而得的哈希值,占 用的存儲(chǔ)空間為20B;2.從客戶端接收文件塊的哈希值,并根據(jù)步驟2. 2,依據(jù)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)初始化 64叉堆哈希樹(shù);B.哈希值完整性校驗(yàn)?zāi)K針對(duì)用戶申請(qǐng)?jiān)L問(wèn)的數(shù)據(jù)塊,對(duì)它所相關(guān)的文件塊的 哈希值進(jìn)行完整性校驗(yàn),如圖4所示,該模塊的主要功能有以下兩個(gè)1.哈希值的完整性校驗(yàn)得到用戶的訪問(wèn)申請(qǐng)后,通過(guò)用戶申請(qǐng)?jiān)L問(wèn)的數(shù)據(jù)塊計(jì) 算得出包含該數(shù)據(jù)塊的最小文件塊子集合,得出最小文件塊子集合中每個(gè)文件塊所對(duì)應(yīng)的 64叉堆節(jié)點(diǎn),并求出從這些節(jié)點(diǎn)的父親節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑,以及該路徑經(jīng)過(guò)的相關(guān)節(jié)點(diǎn); 對(duì)于這些相關(guān)節(jié)點(diǎn),通過(guò)計(jì)算每個(gè)節(jié)點(diǎn)的所有兒子內(nèi)容拼接而得的哈希值,判斷是否與存 儲(chǔ)在該節(jié)點(diǎn)的cHash相同,若相同,則說(shuō)明該文件塊子集合的哈希值是完整的,否則向安全 元數(shù)據(jù)管理服務(wù)器報(bào)錯(cuò);C.安全元數(shù)據(jù)更新模塊對(duì)64叉堆哈希樹(shù)進(jìn)行更新;當(dāng)用戶對(duì)數(shù)據(jù)塊進(jìn)行更新 后,對(duì)于包含該數(shù)據(jù)塊的最小文件塊子集合中的文件塊,其哈希值由于數(shù)據(jù)塊內(nèi)容的更新 而得到改變;該模塊的具體做法是對(duì)于被用戶更新的數(shù)據(jù)塊,得出包含該數(shù)據(jù)塊的最小 文件塊子集合,得出最小文件塊子集合中每個(gè)文件塊所對(duì)應(yīng)的64叉堆哈希樹(shù)節(jié)點(diǎn),并求出 從這些節(jié)點(diǎn)的父親節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑,以及該路徑經(jīng)過(guò)的相關(guān)節(jié)點(diǎn);對(duì)于這些相關(guān)節(jié)點(diǎn), 將該節(jié)點(diǎn)所對(duì)應(yīng)文件塊的哈希值賦值于bHash,并逐一計(jì)算每個(gè)節(jié)點(diǎn)的所有兒子內(nèi)容拼接 合并后的哈希值,并賦值于該節(jié)點(diǎn)的cHash ;D.根哈希完整性校驗(yàn)?zāi)K驗(yàn)證根哈希值的完整性,其中根哈希虛擬鏈表的數(shù)據(jù) 結(jié)構(gòu)如圖5所示。驗(yàn)證根哈希的完整性需要檢查相應(yīng)的根哈希的索引,具體步驟如下1.該根節(jié)點(diǎn)是根哈希鏈表的最后一個(gè)節(jié)點(diǎn)時(shí),檢查該節(jié)點(diǎn)的索引是否指向自己;2.當(dāng)該根節(jié)點(diǎn)是根哈希鏈表的中間節(jié)點(diǎn)也時(shí),檢查該節(jié)點(diǎn)的前一個(gè)根節(jié)點(diǎn)IV1 的索引是否指向rhi ;E.并發(fā)訪問(wèn)模塊支持多用戶對(duì)同屬于一個(gè)文件的不同64叉堆哈希樹(shù)所維護(hù)的 文件塊進(jìn)行訪問(wèn),如圖6所示。當(dāng)用戶Useri申請(qǐng)?jiān)L問(wèn)偏移量為offset,大小為size的數(shù)據(jù)塊,該模塊的處理過(guò)程主要如下1.根據(jù)用戶申請(qǐng)?jiān)L問(wèn)的數(shù)據(jù)塊的偏移量和大小,計(jì)算得到維護(hù)該數(shù)據(jù)塊的64叉 堆哈希樹(shù)的根節(jié)點(diǎn);2.查看以這些根節(jié)點(diǎn)為根的64叉堆哈希樹(shù)是否正在被其他用戶使用,如果正在 使用,則用戶的訪問(wèn)請(qǐng)求進(jìn)入等待隊(duì)列;如果未在使用,則調(diào)用根哈希完整性校驗(yàn)?zāi)K對(duì)根 節(jié)點(diǎn)的哈希值的進(jìn)行完整性校驗(yàn),然后再調(diào)用節(jié)點(diǎn)完整性校驗(yàn)?zāi)K;3.訪問(wèn)完畢,將這些64叉堆哈希樹(shù)交由等待隊(duì)列中的下一個(gè)用戶,并處理其訪問(wèn) 請(qǐng)求;F.錯(cuò)誤處理模塊定義了一些錯(cuò)誤的信息編號(hào),表1列舉了一些常見(jiàn)的錯(cuò)誤表1常見(jiàn)錯(cuò)誤的錯(cuò)誤代碼以及解釋錯(cuò)誤代碼錯(cuò)誤解釋ERR_MALL0C開(kāi)辟空間錯(cuò)誤ERR_HASH_NOT_MATCH 完整性校驗(yàn)錯(cuò)誤錯(cuò)誤處理模塊收集上述模塊所反饋的錯(cuò)誤信息,并傳達(dá)給客戶端和服務(wù)器以作進(jìn) 一步的處理。其具體方法的流程圖如圖7所示,操作步驟如下>步驟1 自加密技術(shù)生成文件塊級(jí)安全元數(shù)據(jù)信息,具體的步驟有今步驟1. 1 根據(jù)需求將文件分為固定粒度的文件塊。將文件F分為固定大小為S 的文件塊集合,倘若文件F不是S的整數(shù)倍,則將分割后剩下的最后一個(gè)文件塊進(jìn)行填充使 其大小為S,最后可得到文件塊集合(f1; f2, . . . fn);今步驟1. 2 使用SHAl算法對(duì)文件塊集合中的每個(gè)文件塊計(jì)算其哈希值,其中 SHAl算法是由美國(guó)國(guó)家安全局設(shè)計(jì),并由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院發(fā)布的一種安全散 列算法,是一種被廣泛應(yīng)用的哈希算法,它的用處是將冗長(zhǎng)的文件壓縮成為一段獨(dú)特的數(shù) 字信息(一般稱為哈希值),保證原來(lái)文件的合法性和安全性。使用SHAl算法,對(duì)以上文 件塊集合中每個(gè)固定大小為S的文件塊計(jì)算哈希值。令hash表示文件塊&經(jīng)過(guò)SHAl算 法計(jì)算而得的哈希值,則可以表示為hashi = SHAl (f\),最后可以得到哈希值集合(hash” hash2, ... , hashn),其中每個(gè)哈希值占用的存儲(chǔ)空間為20B ;今步驟1. 3 利用哈希值生成加密密鑰;令Offseti表示文件塊&在文件中的偏 移量,其中Offseti占用的存儲(chǔ)空間為12B,令keyi表示對(duì)文件塊&進(jìn)行加密的密鑰;通過(guò) Offseti和has、生成keYi的方法如下:keYi = Kashi | | Offseti,其中“| | “為拼接合并符 號(hào),表示keyi是由hashi和Offseti的內(nèi)容拼接合并而成,則Iceyi所占用的存儲(chǔ)空間大小= 20B(hashi所占用的存儲(chǔ)空間)+12B (Offseti所占用的存儲(chǔ)空間)=32B ;今步驟1. 4 利用生成的密鑰,并使用AES加密算法對(duì)文件塊加密,其中AES算法是 美國(guó)國(guó)家技術(shù)標(biāo)準(zhǔn)委員會(huì)在2000年所確定的高級(jí)加密標(biāo)準(zhǔn),是一種廣泛應(yīng)用的保護(hù)數(shù)據(jù) 安全的加密算法。令Ci表示前面得到的keyi對(duì)文件塊&進(jìn)行加密所得到的密文,則有Ci =E (fi; key》,其中文件塊&和密鑰keyi為輸入?yún)?shù),Ci為輸出結(jié)果,所使用的加密算法E 為AES加密算法,;>步驟2 對(duì)于給定的一個(gè)文件,維護(hù)該文件所有文件塊哈希值的64叉堆哈希樹(shù)的 構(gòu)建,以及當(dāng)用戶對(duì)該文件進(jìn)行訪問(wèn)和更新的處理時(shí),64叉堆哈希樹(shù)的一些處理操作,具體的步驟如下今步驟2. 1 定義64叉堆哈希樹(shù)的主要數(shù)據(jù)結(jié)構(gòu)。一棵64叉堆樹(shù)的主要由葉子節(jié) 點(diǎn),內(nèi)部節(jié)點(diǎn)和根節(jié)點(diǎn)構(gòu)成,其中內(nèi)部節(jié)點(diǎn)和根節(jié)點(diǎn)的兒子數(shù)目都是64。在步驟1. 1中劃分 而成的文件塊都和該文件的64叉堆哈希樹(shù)的節(jié)點(diǎn)形成一一對(duì)應(yīng),在64叉堆哈希樹(shù)中,每個(gè) 節(jié)點(diǎn)存放兩部分內(nèi)容第一部分是該節(jié)點(diǎn)所對(duì)應(yīng)文件塊的哈希值,記為bHash,bHash的作 用是為了保證該節(jié)點(diǎn)所對(duì)應(yīng)文件塊的完整性;第二部分則存儲(chǔ)了該節(jié)點(diǎn)的所有兒子節(jié)點(diǎn)存 放內(nèi)容拼接后所計(jì)算的哈希值,記為cHash,cHash的作用是為了保證該節(jié)點(diǎn)的所有兒子節(jié) 點(diǎn)內(nèi)容的完整性;可以得出,在64叉堆哈希樹(shù)中,每個(gè)節(jié)點(diǎn)中存儲(chǔ)的內(nèi)容為bHash和cHash 所拼接合并后的值,即bHash I I cHash,構(gòu)建64叉堆哈希樹(shù)以及初始化其節(jié)點(diǎn)內(nèi)容的步驟如 下;今步驟2. 2 64叉堆哈希樹(shù)的構(gòu)建和節(jié)點(diǎn)內(nèi)容的初始化。V 步驟 2. 2. 1 節(jié)點(diǎn)的定義定義(node ,node\,node\,._.,nodel64,nodef ,...,node:,...、
為64叉堆哈希樹(shù)的節(jié)點(diǎn)集合,其中表示的是哈希樹(shù)中第j層的第i個(gè)節(jié)點(diǎn),則可以 得知如論1()是根節(jié)點(diǎn),(《0論11,...,^ ^4)是《0論1°的所有兒子節(jié)點(diǎn),依次類(lèi)推,則在64叉堆哈希 樹(shù)中,第0層的節(jié)點(diǎn)數(shù)為1,第1層的節(jié)點(diǎn)數(shù)為64,第2層的節(jié)點(diǎn)數(shù)為64X64 = 4096,第3 層的節(jié)點(diǎn)數(shù)為64X64X64 = 262144。對(duì)于非葉子節(jié)點(diǎn)如,它的所有兒子節(jié)點(diǎn)集合為 (node^)x6M,ηο β[;_\>Μ+2,…’nodeJ二丨);V步驟2. 2. 2 初始化節(jié)點(diǎn)的內(nèi)容bHash ;將步驟1. 2得到的哈希值集合 Qiash1, hash2, ... , hashn)與上面步驟2. 2. 1中定義的64叉堆哈希樹(shù)的節(jié)點(diǎn)集合
(node , node],node\ ,···, nodelM,nodef ,.·., node丨,.·.)中每個(gè)節(jié)點(diǎn)的 bHash 建立--對(duì)應(yīng)關(guān)系,例
如將Iiash1與根節(jié)點(diǎn)nocfei1的bHash對(duì)應(yīng),記為noc^0 — bHash = hash,,然后將hash2與節(jié)點(diǎn) "Otfe11的bHash對(duì)應(yīng),記為node! — bHash = Hash1,通過(guò)這種方法類(lèi)推,將hashn和節(jié)點(diǎn)
的bHash對(duì)應(yīng),記為%& ^ bHash = hash (當(dāng)滿足^(64Z + = w時(shí)),通過(guò)這種方法初始
化64叉堆哈希樹(shù)中每個(gè)節(jié)點(diǎn)的bHash內(nèi)容。對(duì)于noflfe/ -> bHash = Hashn,稱hashn為節(jié)點(diǎn) m&Z所對(duì)應(yīng)的文件塊哈希值,由于hashn是由文件塊fn經(jīng)過(guò)哈希算法計(jì)算而得,稱fn為 noife/所對(duì)應(yīng)的文件塊,稱為fn所對(duì)應(yīng)的64叉堆哈希樹(shù)節(jié)點(diǎn);V步驟2. 2. 3 初始化節(jié)點(diǎn)的內(nèi)容cHash 對(duì)哈希樹(shù)的節(jié)點(diǎn)進(jìn)行考慮,當(dāng)其 為葉子節(jié)點(diǎn)時(shí),則使用隨機(jī)數(shù)生成算法(例如線性同余法)生成隨機(jī)數(shù),并將生成的隨 機(jī)數(shù)賦值于皿^cHash,當(dāng)其為非葉子節(jié)點(diǎn)時(shí),則可以計(jì)算得到它的兒子節(jié)點(diǎn)集合為 {node[XbM,nodelXM+2,...,node^),將所有兒子節(jié)點(diǎn)內(nèi)容進(jìn)行拼接合并,再通過(guò)SHAl算法 求其哈希值,然后將結(jié)果賦值于皿^cHash,即 node/ — cHash = SHA\{{nodeJJ\yM+x — bHash) || …|| (node^4 -> cHash));今步驟2. 3 對(duì)文件數(shù)據(jù)塊的隨機(jī)訪問(wèn)。V步驟2. 3. 1 判斷訪問(wèn)在大小為filesize的文件F中,當(dāng)用戶訪問(wèn)偏移量為 offset,大小為size的數(shù)據(jù)塊f ;如果offset+size > filesize,則訪問(wèn)越界,用戶只能訪 問(wèn)偏移量為 offset,大小為(filesize-offset)的數(shù)據(jù)塊;如果 offset+size < filesize, 則用戶可以正常訪問(wèn)目標(biāo)數(shù)據(jù)塊。在步驟1. 1中生成的文件塊集合中,求出包含數(shù)據(jù)塊f的最小的文件塊子集合,即找出子集合(fstmt,fstart+i' . . .,U,滿足數(shù)據(jù)塊f包含于(fstot, fstart+i' ...,feffld),同時(shí)任何包含數(shù)據(jù)塊f的文件塊子集合都包含(fstart,fstart+1,…,femd),
通過(guò)計(jì)算可以得到,加0V步驟2. 3. 2 哈希值的完整性校驗(yàn)找出包含數(shù)據(jù)塊f的最小文件塊子集合 (fstart, fstart+1, . . .,femd)所對(duì)應(yīng)的64叉堆哈希樹(shù)節(jié)點(diǎn),并找出它們所在父親節(jié)點(diǎn)直至根節(jié) 點(diǎn)的路徑,對(duì)該路徑經(jīng)過(guò)的每個(gè)節(jié)點(diǎn),包括內(nèi)部節(jié)點(diǎn)和根節(jié)點(diǎn),用哈希算法計(jì)算將它的兒子 節(jié)點(diǎn)的內(nèi)容所拼接合并而成后的哈希值,看與該節(jié)點(diǎn)中保存的cHash是否相等,如果相等, 說(shuō)明文件塊子集合的哈希值是完整的,用戶可以進(jìn)行步驟2. 3.3 ;如果不相等,則說(shuō)明文件 塊子集合的哈希值被非法篡改;V步驟2. 3. 3 文件塊的完整性校驗(yàn)在驗(yàn)證了文件塊子集合哈希值的完整性后, 用戶重新計(jì)算文件塊子集合的哈希值,然后找出該文件塊子集合所對(duì)應(yīng)的64叉堆哈希樹(shù) 的節(jié)點(diǎn),并與保存在該節(jié)點(diǎn)中的bHash進(jìn)行對(duì)比,如果相等,說(shuō)明文件塊子集合的內(nèi)容是完 整的,沒(méi)有經(jīng)過(guò)非法篡改,如果不相等,則說(shuō)明文件塊子集合的內(nèi)容不完整;今步驟2. 4 對(duì)文件數(shù)據(jù)塊的更新;對(duì)數(shù)據(jù)塊的更新主要包括對(duì)數(shù)據(jù)塊原來(lái)的內(nèi) 容進(jìn)行修改,或者是在插入或者刪除數(shù)據(jù)塊的某段內(nèi)容,具體的步驟如下V步驟2. 4. 1 進(jìn)行完整性校驗(yàn)在大小為fiIesize的文件F中,當(dāng)用戶需要更新 偏移量為offset,大小為size的數(shù)據(jù)塊f。具體的操作過(guò)程如下通過(guò)步驟2. 3. 1可得, 包含數(shù)據(jù)塊f的最小的文件塊子集合為(fst t,fstot+1,…,f-),考慮到在更新的過(guò)程中, 數(shù)據(jù)塊中間部分的內(nèi)容將會(huì)被更新,其完整性信息(即哈希值)也將被更新,因此只需要 對(duì)包含數(shù)據(jù)塊最小的文件塊子集合的起始文件塊和終止文件塊進(jìn)行完整性校驗(yàn),即僅需要 判斷文件塊fstart和fend的完整性。判斷(offset+size)和文件大小filesize的關(guān)系,如 果offset+size > filesize,則fend不存在,因此只需要驗(yàn)證文件塊fstart的完整性;如果 offset+size ( filesize,則需要驗(yàn)證文件塊fstot和文件塊fend的完整性以及其哈希值的 完整性,具體的步驟同步驟2. 3所述;V步驟2. 4. 2 重新計(jì)算數(shù)據(jù)塊的哈希值當(dāng)數(shù)據(jù)塊更新完畢,需要利用哈希算法 對(duì)更新的部分進(jìn)行重新計(jì)算哈希值,并使用重新計(jì)算得到的哈希值生成加密密鑰,并使用 AES加密算法對(duì)更新后的文件塊進(jìn)行加密處理;V步驟2. 4. 3 對(duì)64叉堆的相關(guān)節(jié)點(diǎn)進(jìn)行更新根據(jù)步驟2. 2. 2找到更新后的數(shù) 據(jù)塊所對(duì)應(yīng)的64叉堆哈希樹(shù)的相關(guān)節(jié)點(diǎn),并對(duì)存放在這些節(jié)點(diǎn)中內(nèi)容,即bHash和cHash 進(jìn)行更新,具體更新操作如下將步驟2. 4. 2重新計(jì)算得到的哈希值賦值于bHash,并逐層 向上找到它們的父親節(jié)點(diǎn)直至根節(jié)點(diǎn)的路徑,找到該路徑上的相關(guān)節(jié)點(diǎn),重新計(jì)算該節(jié)點(diǎn) 的所有兒子節(jié)點(diǎn)的內(nèi)容所拼接合并后的哈希值,賦值于該節(jié)點(diǎn)的cHash ;>步驟3 根哈希虛擬鏈表,以及對(duì)并發(fā)訪問(wèn)的支持。一個(gè)文件的所有文件塊的哈 希值可能由多棵64叉堆哈希樹(shù)來(lái)維護(hù),為了提供更高層次的完整性保護(hù),因此需要保證每 棵哈希樹(shù)根節(jié)點(diǎn)的完整性,具體的步驟如下今步驟3. 1 根哈希虛擬鏈表的構(gòu)建。將同屬于一個(gè)文件的多棵64叉堆哈希樹(shù)的 根節(jié)點(diǎn)鄰接,每個(gè)根節(jié)點(diǎn)除包含所在哈希樹(shù)的根哈希值之外,還包含一個(gè)索引。定義根哈希 虛擬鏈表為(rhi; rh2, · · · , rhn),其中rh,表示第i棵64叉堆哈希樹(shù)的根節(jié)點(diǎn)所存儲(chǔ)的根
13哈希值,鏈表中除最后一個(gè)節(jié)點(diǎn)外,每個(gè)根節(jié)點(diǎn)的索引都指向與其鄰接的下一節(jié)點(diǎn)(也就 是說(shuō)rhi指向rhi+1);而最后一個(gè)節(jié)點(diǎn)的索引則指向自己(也就是說(shuō)舊指向rhn),由 于這些哈希樹(shù)的根哈希節(jié)點(diǎn)是順序存儲(chǔ),沒(méi)有任何指針,因此它并不是一個(gè)真正的鏈表;今步驟3.2 對(duì)根哈希虛擬鏈表的訪問(wèn)。當(dāng)對(duì)根哈希虛擬鏈表進(jìn)行訪問(wèn)的時(shí)候,首 先檢查該節(jié)點(diǎn)是否處于合法位置,對(duì)于尾節(jié)點(diǎn),查看其索引是否指向自己,對(duì)于非尾節(jié)點(diǎn), 檢查其索引是否指向下一個(gè)節(jié)點(diǎn)。今步驟3. 3:對(duì)并發(fā)訪問(wèn)的支持。由于一個(gè)文件可以劃分為不同的部分,每一部分 的數(shù)據(jù)完整性信息(即相關(guān)文件塊的哈希值)都劃歸一棵單獨(dú)的64叉堆哈希樹(shù)進(jìn)行維護(hù)。 這樣一來(lái),只要多個(gè)進(jìn)程不同時(shí)修改屬于同一棵64叉堆哈希樹(shù)的文件塊,就可以允許這些 操作并發(fā)執(zhí)行。
權(quán)利要求
基于一種完整性校驗(yàn)的安全元數(shù)據(jù)管理方法,其特征在于是在客戶端和一個(gè)安全元數(shù)據(jù)管理服務(wù)器組成的系統(tǒng)中,依次按以下步驟實(shí)現(xiàn)的步驟(1)客戶端用自加密方法生成文件塊級(jí)的安全元數(shù)據(jù)信息,步驟為步驟(1.1)按需要地把文件F分為固定大小為S的文件塊集合F=(f1,f2,...,fn,...,fN),N表示文件塊數(shù),當(dāng)文件F不是固定大小S的整數(shù)倍,則將最后一個(gè)文件塊填充到大小為S的值,步驟(1.2)用安全散列算法SHA1對(duì)所述文件塊fi計(jì)算其哈希值hashi,hashi=SHA1(fi),其中i=1,2,...,n,...,N,得到文件塊的哈希值集合(hash1,hash2,...,hashN),步驟(1.3)利用步驟(1.2)得到的哈希值hashi生成加密密鑰,用keyi表示,keyi=hashi||offseti,其中offseti表示文件塊fi在所述文件中的偏移量,占用12B的存儲(chǔ)空間,文件塊fi的哈希值hashi占用20B的存儲(chǔ)空間,″||″為拼接合并符號(hào),則加密密鑰keyi占用的存儲(chǔ)空間為32B,步驟(1.4)對(duì)所述文件塊fi按下式加密ci=E(fi,keyi),其中E表示AES加密算法,文件塊fi和密鑰keyi是輸入?yún)?shù),ci表示對(duì)文件塊fi進(jìn)行加密所得到的密文;步驟(2)在所述安全元數(shù)據(jù)管理服務(wù)器構(gòu)造所述文件F內(nèi)所有文件塊哈希值集合(hash1,hash2,...,hashN)的64叉堆哈希樹(shù),步驟如下步驟(2.1)定義64叉堆哈希樹(shù)的數(shù)據(jù)結(jié)構(gòu)內(nèi)部節(jié)點(diǎn)和根節(jié)點(diǎn)的兒子數(shù)目都是64,每個(gè)節(jié)點(diǎn)所存放的內(nèi)容是bHash||cHash,所述的每個(gè)節(jié)點(diǎn)是指根節(jié)點(diǎn)或者內(nèi)部節(jié)點(diǎn)或者葉子節(jié)點(diǎn),其中,bHash是該節(jié)點(diǎn)所對(duì)應(yīng)文件塊的哈希值,節(jié)點(diǎn)i的序號(hào)對(duì)應(yīng)于文件塊i的序號(hào),以保證該節(jié)點(diǎn)i所對(duì)應(yīng)文件塊fi的數(shù)據(jù)完整性,其中i=(1,2,...,n,...,N),cHash是該節(jié)點(diǎn)i的所有兒子節(jié)點(diǎn)的內(nèi)容,包括每個(gè)兒子節(jié)點(diǎn)中存儲(chǔ)的bHash和cHash在拼接后計(jì)算得到的哈希值,以保證該節(jié)點(diǎn)i的所有兒子節(jié)點(diǎn)內(nèi)容的完整性,即保證每個(gè)兒子節(jié)點(diǎn)中的bHash和cHash的完整性,″||″為拼接合并符號(hào),步驟(2.2)構(gòu)造所述64叉堆哈希樹(shù),初始化各節(jié)點(diǎn)i的內(nèi)容,步驟(2.2.1)64叉堆哈希樹(shù)的節(jié)點(diǎn)集合如下其中為根節(jié)點(diǎn),表示根節(jié)點(diǎn)只有一個(gè),是的第1個(gè)兒子,是的第64個(gè)兒子,表示為的第1個(gè)兒子,以此類(lèi)推,表示所述64叉堆哈希樹(shù)中第j層的第i個(gè)節(jié)點(diǎn),則對(duì)于該64叉堆哈希樹(shù),第0層的節(jié)點(diǎn)為根節(jié)點(diǎn),數(shù)目為1,第1層的節(jié)點(diǎn)為根節(jié)點(diǎn)的兒子,其數(shù)目為64,第2層節(jié)點(diǎn)為第1層相關(guān)節(jié)點(diǎn)的兒子,其數(shù)目為642,第3層的節(jié)點(diǎn)為第2層相關(guān)節(jié)點(diǎn)的兒子,其數(shù)目為643,以此類(lèi)推,則對(duì)于所述非葉子節(jié)點(diǎn)其所有兒子節(jié)點(diǎn)集合為步驟(2.2.2)初始化各節(jié)點(diǎn)的哈希值bHash將步驟(1.2)得到的文件塊哈希值集合(hash1,hash2,...,hashN)和64叉堆哈希樹(shù)的節(jié)點(diǎn)集合形成一一對(duì)應(yīng),具體方法如下對(duì)于根節(jié)點(diǎn)所對(duì)應(yīng)的文件塊f1的哈希值為hash1,記為所對(duì)應(yīng)的文件塊f2的哈希值為hash2,記為對(duì)于第j層的第i個(gè)節(jié)點(diǎn)所對(duì)應(yīng)文件塊fn的哈希值為hashn,其中n需要滿足的條件為記為步驟(2.2.3)初始化各節(jié)點(diǎn)的哈希值cHash從葉子節(jié)點(diǎn)開(kāi)始逐層向上直至根節(jié)點(diǎn),對(duì)于葉子節(jié)點(diǎn)而言,利用線性同余法生成隨機(jī)數(shù),將該隨機(jī)數(shù)賦值于對(duì)于非葉子節(jié)點(diǎn)而言,對(duì)其所有的兒子節(jié)點(diǎn)內(nèi)容的哈希值,包括bHash和cHash,進(jìn)行拼接后計(jì)算哈希值,表示為并將結(jié)果賦值于cHash,用表示,,步驟(2.3)按照以下步驟隨機(jī)訪問(wèn)數(shù)據(jù)塊,步驟(2.3.1)判斷所述隨機(jī)訪問(wèn)是否越界,步驟(2.3.1.1)文件F的大小為filesize,當(dāng)用戶訪問(wèn)偏移量為offset,大小為size的數(shù)據(jù)塊,若offset+size>filesize,則訪問(wèn)越界,用戶只能訪問(wèn)偏移量為offset,大小為(filesize offset)的數(shù)據(jù)塊,如果offset+size≤filesize,則用戶正常訪問(wèn)目標(biāo)數(shù)據(jù)塊,步驟(2.3.1.2)找出包含步驟(2.3.1.1)中的目標(biāo)數(shù)據(jù)塊f在步驟(1.1)中生成的文件塊集合中的文件塊子集合(fstart,fstart+1,...,femd),其中,fstart為起始文件塊,fend為終止文件塊,通過(guò)計(jì)算可以得到,步驟(2.3.2)進(jìn)行文件塊子集合的哈希值的完整性校驗(yàn),步驟如下步驟(2.3.2.1)找出步驟(2.3.1.2)中包含所述的目標(biāo)數(shù)據(jù)塊f的文件塊子集合(fstart,fstart+1,...,femd)所對(duì)應(yīng)的64叉堆哈希樹(shù)的各節(jié)點(diǎn),步驟(2.3.2.2)找出步驟(2.3.2.1)中所述64叉堆哈希樹(shù)各節(jié)點(diǎn)各自父親直至根節(jié)點(diǎn)的路徑,對(duì)該路徑經(jīng)過(guò)的每個(gè)節(jié)點(diǎn),無(wú)論內(nèi)部節(jié)點(diǎn)和根節(jié)點(diǎn),用SHA1算法計(jì)算所述路徑內(nèi)的每個(gè)節(jié)點(diǎn)的所有兒子節(jié)點(diǎn)的內(nèi)容拼接后而成的哈希值,看與該節(jié)點(diǎn)中保存的cHash是否相等,若相等,說(shuō)明文件塊子集合的哈希值是完整的,若不相等,則說(shuō)明文件塊子集合的哈希值被非法篡改,步驟(2.3.2.3)對(duì)文件塊進(jìn)行完整性校驗(yàn),步驟如下用戶重新計(jì)算文件塊子集合的哈希值,用SHA1算法逐個(gè)計(jì)算該文件塊子集合中的每個(gè)文件塊的哈希值,再找出于該文件塊子集合所對(duì)應(yīng)的那些所述64叉堆哈希樹(shù)的節(jié)點(diǎn),判斷重新計(jì)算得出的哈希值是否與這些節(jié)點(diǎn)中的bHash相等,如果相等,說(shuō)明文件塊子集合的內(nèi)容是完整的,沒(méi)有經(jīng)過(guò)非法篡改,如果不相等,則說(shuō)明文件塊子集合的內(nèi)容不完整;步驟(3)按以下步驟更新文件數(shù)據(jù)塊步驟(3.1)進(jìn)行完整性校驗(yàn),包括相關(guān)文件塊的哈希值的完整性校驗(yàn)以及該文件塊內(nèi)容的完整性校驗(yàn)判斷(offset+size)和文件大小filesize的關(guān)系,如果offset+size>filesize,則fend不存在,因此只需要驗(yàn)證文件塊fstart的完整性以及fstart的哈希值的完整性,后者的驗(yàn)證方法如步驟(2.3.2.2)所述,如果offset+size≤filesize,則需要驗(yàn)證起始文件塊fstart和終止文件塊fend的完整性,以及這兩個(gè)文件塊的哈希值的完整性,后者的驗(yàn)證方法如步驟(2.3.2.2)所述,步驟(3.2)重新計(jì)算被更新數(shù)據(jù)塊的哈希值當(dāng)數(shù)據(jù)塊更新完畢,需要利用哈希算法SHA1算法對(duì)更新的部分進(jìn)行重新計(jì)算哈希值,并使用重新計(jì)算得到的哈希值生成加密密鑰,并使用所述AES加密算法對(duì)更新后的文件塊進(jìn)行加密處理,步驟(3.3)把步驟(4.2)重新計(jì)算得到的哈希值賦值于bHash,并逐層向上找到它們的父親直至根的路徑,找到該路徑上的相關(guān)節(jié)點(diǎn),重新計(jì)算該節(jié)點(diǎn)的所有兒子節(jié)點(diǎn)的內(nèi)容所拼接合并后的哈希值,賦值于該節(jié)點(diǎn)的cHash;步驟(4)一個(gè)文件的所有文件塊的哈希值由多棵64叉堆哈希樹(shù)來(lái)維護(hù)的情況下,當(dāng)發(fā)生并發(fā)訪問(wèn)時(shí),要按照以下步驟構(gòu)造一個(gè)根哈希虛擬鏈表,以此來(lái)支持并發(fā)訪問(wèn),步驟如下步驟(4.1)構(gòu)造根哈希虛擬鏈表步驟(4.1.1)將同屬于一個(gè)文件的多棵64叉堆哈希樹(shù)的根節(jié)點(diǎn)鄰接,構(gòu)成根節(jié)點(diǎn)之間的索引,每個(gè)根節(jié)點(diǎn)除包含了哈希樹(shù)的根哈希值,步驟(4.1.2)根哈希虛擬鏈表為(rh1,rh2,...,rhn),其中rhi表示第i棵64叉堆哈希樹(shù)的根節(jié)點(diǎn)所存儲(chǔ)的根哈希值,步驟(4.1.3)當(dāng)存在對(duì)根哈希虛擬鏈表進(jìn)行并發(fā)訪問(wèn)的時(shí),首先檢查rhi值是否處于順序鄰接的位置,對(duì)于尾節(jié)點(diǎn)rhn,查看其索引是否指向自己,步驟(4.1.4)當(dāng)多個(gè)進(jìn)程不同時(shí)修改屬于同一棵64叉堆哈希樹(shù)的文件塊,就允許這些操作并發(fā)執(zhí)行。FSA00000344944400021.tif,FSA00000344944400022.tif,FSA00000344944400023.tif,FSA00000344944400024.tif,FSA00000344944400025.tif,FSA00000344944400026.tif,FSA00000344944400027.tif,FSA00000344944400028.tif,FSA00000344944400029.tif,FSA000003449444000210.tif,FSA000003449444000211.tif,FSA000003449444000212.tif,FSA000003449444000213.tif,FSA000003449444000214.tif,FSA000003449444000215.tif,FSA000003449444000216.tif,FSA000003449444000217.tif,FSA000003449444000218.tif,FSA000003449444000219.tif,FSA000003449444000220.tif,FSA000003449444000221.tif,FSA000003449444000222.tif,FSA00000344944400031.tif,FSA00000344944400032.tif
全文摘要
基于一種完整性校驗(yàn)的元數(shù)據(jù)元數(shù)據(jù)管理方法屬于存儲(chǔ)安全領(lǐng)域,其特征在于在客戶端,采用了文件數(shù)據(jù)的自加密技術(shù),對(duì)文件數(shù)據(jù)進(jìn)行加密,提高了存儲(chǔ)的效率;在安全元數(shù)據(jù)管理服務(wù)器端,采用64叉堆哈希樹(shù)來(lái)維護(hù)文件塊的哈希值,提供了文件數(shù)據(jù)塊哈希值的完整性保護(hù),并實(shí)現(xiàn)了用戶對(duì)文件的訪問(wèn)驗(yàn)證和數(shù)據(jù)更新的高效性,同時(shí)采用了根哈希虛擬鏈表技術(shù),保證了同屬于一個(gè)文件的多棵64叉堆哈希樹(shù)的根哈希的完整性,在一定程度上支持用戶對(duì)該文件的并發(fā)訪問(wèn)。
文檔編號(hào)G06F17/30GK101976322SQ20101054326
公開(kāi)日2011年2月16日 申請(qǐng)日期2010年11月11日 優(yōu)先權(quán)日2010年11月11日
發(fā)明者沈志榮, 舒繼武, 薛巍, 薛矛 申請(qǐng)人:清華大學(xué)