使用可變長(zhǎng)度分段和固定分組加密的部分密文更新的制作方法
【專利摘要】本發(fā)明披露了一種重新加密器,其比較更新段和原始段的散列碼摘要,以找到有改變的段,再對(duì)其進(jìn)行重新加密。對(duì)于每個(gè)有改變的段,將一個(gè)新的初始化向量輸入到分組密碼引擎。因?yàn)橹挥懈淖兌涡枰匦录用埽钥梢詼p少傳輸?shù)竭h(yuǎn)程加密存儲(chǔ)的傳輸帶寬。只有一個(gè)單一更新和改變量的密文可以減少至一個(gè)段。段有一個(gè)可變長(zhǎng)度,其通過尋找匹配段分隔符的匹配比特而分割。每個(gè)段可以有許多固定長(zhǎng)度的分組塊,分組塊由分組密碼引擎對(duì)那些段使用相同的初始化向量進(jìn)行加密。段分隔符是一個(gè)隨機(jī)生成的字,其和初始化向量一起包含在元數(shù)據(jù)中??勺冮L(zhǎng)度段限制了密文的更新混亂,而固定長(zhǎng)度分組能更有效地加密。段和分組的結(jié)合為更新提供了更好重新加密。
【專利說明】使用可變長(zhǎng)度分段和固定分組加密的部分密文更新
【【技術(shù)領(lǐng)域】】
[0001]本發(fā)明涉及加密系統(tǒng),特別涉及使用可變長(zhǎng)度段(segment)和固定大小密碼分組(cipher block,又稱密碼塊)對(duì)部分更新的消息進(jìn)行重新加密。
【【背景技術(shù)】】
[0002]加密是一種常見的保護(hù)數(shù)據(jù)的方法,無論數(shù)據(jù)是在一個(gè)非安全網(wǎng)絡(luò)(如Internet)上發(fā)送,還是遠(yuǎn)程存儲(chǔ)在一個(gè)可能有安全漏洞的地方。許多加密系統(tǒng)和標(biāo)準(zhǔn)是已知的。雖然這些現(xiàn)有加密系統(tǒng)是有效的,但是這些系統(tǒng)并非總是有效。
[0003]基于云的存儲(chǔ)已經(jīng)成為流行?,F(xiàn)在,文檔和文件都是存儲(chǔ)或備份在一個(gè)遠(yuǎn)程位置上,而不是儲(chǔ)存在本地,如個(gè)人計(jì)算機(jī)或公司的服務(wù)器上。當(dāng)用戶希望更新一個(gè)文檔時(shí),該用戶從遠(yuǎn)程存儲(chǔ)中取回該文檔,更新該文檔,然后將更新后的文檔發(fā)回給遠(yuǎn)程存儲(chǔ)位置。
[0004]通常是通過互聯(lián)網(wǎng)訪問來進(jìn)行遠(yuǎn)程存儲(chǔ)。出于安全考慮,文檔和文件可以以加密格式存儲(chǔ)在遠(yuǎn)程存儲(chǔ)位置上。遠(yuǎn)程存儲(chǔ)將加密的文檔發(fā)送給用戶,然后用戶解密該文檔,再更新該文檔,并重新加密該文檔。然后再將重新加密的文檔通過互聯(lián)網(wǎng)發(fā)送到遠(yuǎn)程存儲(chǔ)。
[0005]圖1顯示現(xiàn)有技術(shù)中明文(clear text)的微小變化通常會(huì)導(dǎo)致加密的密文(cipher text)有較大變化。有時(shí)只有一小部分?jǐn)?shù)據(jù)被改變,例如有時(shí)用戶在一個(gè)遠(yuǎn)程存儲(chǔ)的大文檔中只更改了一個(gè)句子。
[0006]圖1顯示,用戶在未加密的純文本或明文中做了一個(gè)小小的變化,如將第一個(gè)字母小寫的“a”改為大寫的“A”。文檔的其余部分保持不變。
[0007]在傳統(tǒng)的加密系統(tǒng)里,一旦用戶更新并保存,那么整個(gè)文檔就被再次加密,并生成新的加密密文。新的密文和原來的密文通常是完全不同的。例如,原來的明文被加密成字符串“UuE0KHa8yp”,而更新后的密文被加密成字符串“cMWceJs jgo6”。
[0008]雖然這個(gè)完全改變的密文是安全的,但是通常需要新密文的整個(gè)文檔被重新傳送到遠(yuǎn)程存儲(chǔ)位置上。因此,在一個(gè)文檔中的一個(gè)小小變化,就需要在有限帶寬的網(wǎng)絡(luò)上傳輸大量的加密數(shù)據(jù)。
[0009]因此需要一種加密系統(tǒng),其能更有效地更新加密密文。需要一種再加密系統(tǒng),其僅僅改變部分密文,允許部分更新的密文通過網(wǎng)絡(luò)傳輸用于遠(yuǎn)程存儲(chǔ)。需要一種再加密系統(tǒng),其能在一序列加密塊內(nèi)找到一段改變文本,然后僅僅重新加密改變的那段。需要一種加密系統(tǒng),其使用固定大小的加密塊和可變大小的段。
【【專利附圖】
【附圖說明】】
[0010]圖1顯示現(xiàn)有技術(shù)中明文的微小變化通常會(huì)導(dǎo)致加密的密文有較大變化。
[0011]圖2顯示了一個(gè)有效的重新加密系統(tǒng),其只對(duì)變化部分進(jìn)行加密。
[0012]圖3顯示了一個(gè)重新加密系統(tǒng)。
[0013]圖4顯示了重新加密的本地計(jì)算機(jī)編程。
[0014]圖5顯示了使用固定長(zhǎng)度分組密碼對(duì)可變長(zhǎng)度段的加密。[0015]圖6顯示了使用固定長(zhǎng)度分組密碼對(duì)可變長(zhǎng)度段的解密。
[0016]圖7顯示了使用固定長(zhǎng)度分組密碼對(duì)可變長(zhǎng)度段的重新加密,其中僅僅對(duì)有變化的段再次加密。
[0017]圖8是一個(gè)可變段固定分組加密器的方框圖。
[0018]圖9是重新加密器對(duì)有變化的段進(jìn)行加密的方框圖。
[0019]圖10是使用可變長(zhǎng)度段和固定分組的加密器的設(shè)置過程流程圖。
[0020]圖1lA-B顯示使用可變長(zhǎng)度分段和固定分組加密的加密過程。
[0021]圖12A-C顯示使用可變長(zhǎng)度分段和固定分組密碼的解密過程。
[0022]圖13A-E顯示使用散列碼摘要檢測(cè)更新段的重新加密過程。
【發(fā)明詳述】
[0023]本發(fā)明涉及加密的改進(jìn)。以下描述使本領(lǐng)域技術(shù)人員能夠依照特定應(yīng)用及其要求制作和使用在此提供的本發(fā)明。所屬領(lǐng)域的技術(shù)人員將明白對(duì)優(yōu)選實(shí)施例的各種修改,且本文所界定的一般原理可應(yīng)用于其它實(shí)施例。因此,本發(fā)明不限于所展示和描述的特定實(shí)施例,而是應(yīng)被賦予與本文所揭示的原理和新穎特征一致的最廣范圍。
[0024]圖2顯示了一個(gè)有效的重新加密系統(tǒng),其只對(duì)變化部分進(jìn)行加密。本發(fā)明人已經(jīng)開發(fā)出一種重新加密系統(tǒng),其能觀察到明文中的變化部分,有效地生成更新的密文。在這個(gè)例子中,原來的明文被加密成字符串“PcVRvbMtdS6”而更新的密文被加密成字符串“V/2jvbMtdS6”。在加密的字符串中`,只有前四個(gè)字符被改變了。其余7個(gè)字符保持不變。
[0025]只有4個(gè)改變的字符會(huì)被發(fā)送到遠(yuǎn)程存儲(chǔ)中,而不是重新傳輸、重新儲(chǔ)存所有11個(gè)加密字符。由于大多數(shù)的加密字符串是沒有改變的,可以使用各種各樣的方法來利用此更新效率而提高各種其他系統(tǒng)的效率。例如,遠(yuǎn)程存儲(chǔ)系統(tǒng)可以只存儲(chǔ)改變的字符,而不是沒有改變的字符。傳輸系統(tǒng)可以只發(fā)送改變的字符,從而減少所需帶寬??梢允褂帽砀?、映射、鏈表、和其他方法將更新字符鏈接到它們?cè)谠瓉砻芪闹械奈恢蒙?,使得具有更新的全部字符串可以被重建。因此可以提高加密?shù)據(jù)存儲(chǔ)的存儲(chǔ)更新效率。
[0026]圖3顯示了一個(gè)重新加密系統(tǒng)。例如,明文10是一個(gè)來自字處理程序的文檔文件中的數(shù)據(jù)。即使在如字處理程序執(zhí)行了一些特定程序的加密或加擾,明文10也被認(rèn)為是未加密的和非安全的。明文10可以是簡(jiǎn)單的如文本編輯器的ASCII字符,雖然可能會(huì)被嵌入程序特定數(shù)據(jù)。
[0027]加密例程14對(duì)明文10進(jìn)行加密,并輸出密文12,密文12是在一個(gè)加密格式下的,被認(rèn)為是安全的。密文12可在互聯(lián)網(wǎng)上傳輸并通過一個(gè)遠(yuǎn)程云存儲(chǔ)服務(wù)進(jìn)行存儲(chǔ)。
[0028]解密例程18對(duì)密文12進(jìn)行解密,并輸出明文10。重新加密例程16以密文12作為一個(gè)輸入,以更新的明文10作為第二輸入。重新加密例程16對(duì)更新的明文10進(jìn)行加密,并比較更新的加密段和原來密文12的加密段,找到差異。重新加密例程16輸出更新的加密段,作為最近更新的密文12。
[0029]加密例程14、解密例程18、和重新加密例程16可以在用戶的計(jì)算機(jī)上執(zhí)行、或在公司服務(wù)器上執(zhí)行,使密文12產(chǎn)生,然后被傳輸?shù)竭h(yuǎn)程存儲(chǔ)上。
[0030]圖4顯示了重新加密的本地計(jì)算機(jī)編程。海量存儲(chǔ)24可以是一個(gè)本地存儲(chǔ)設(shè)備,如硬盤驅(qū)動(dòng)(HDD )、閃存驅(qū)動(dòng)、光學(xué)驅(qū)動(dòng)、或服務(wù)器存儲(chǔ)。當(dāng)用戶從一個(gè)遠(yuǎn)程存儲(chǔ)服務(wù)器上接收到密文12時(shí),解密例程18’就從海量存儲(chǔ)24上被加載到本地內(nèi)存22,本地內(nèi)存22可以是一個(gè)動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM),中央處理單元(CPU) 20從中讀取數(shù)據(jù)和指令以執(zhí)行。CPU20執(zhí)行解密例程18’中的指令,將從海量存儲(chǔ)24中復(fù)制到本地存儲(chǔ)器22中的密文12進(jìn)行解密。生成明文10在本地存儲(chǔ)器22中,并復(fù)制到海量存儲(chǔ)24中。加密例程14’和重新加密例程16’也以類似的方式執(zhí)行。并不是以軟件形式來執(zhí)行所有加密步驟,例程可以啟動(dòng)硬件加密引擎26,以加速各種加密功能。
[0031]如圖1所示,標(biāo)準(zhǔn)的加密方法會(huì)在密文中產(chǎn)生較大的變化。本發(fā)明的加密方法使用了一種新的方法,該方法結(jié)合了可變長(zhǎng)度段和固定大小的塊,從而在密文中產(chǎn)生一個(gè)較小變化。數(shù)據(jù)分割經(jīng)常用于非加密數(shù)據(jù),具有可變長(zhǎng)度段的加密數(shù)據(jù)不常見。許多密碼系統(tǒng)使用固定大小的加密塊或這些塊的倍數(shù),而不是可變大小的加密段。本發(fā)明人找到更新的可變長(zhǎng)度的加密段,然后對(duì)固定大小塊的明文進(jìn)行重新加密,形成這些更新的加密段。
[0032]圖5顯示了使用固定長(zhǎng)度分組密碼(block cipher)對(duì)可變長(zhǎng)度段的加密。如通過將ASCII字符轉(zhuǎn)換二進(jìn)制格式,將一個(gè)明文字符串轉(zhuǎn)換成一個(gè)比特流。產(chǎn)生用來控制加密過程的元數(shù)據(jù)。此生成的元數(shù)據(jù)包含段分隔符(P)、和段分隔符的長(zhǎng)度(K比特)。圖中顯示了一個(gè)6比特的段分隔符(100110)的例子。因此,在此例子中P=IOOllO和K=6。
[0033]由左到右解析此明文比特流,以搜索那些匹配段分隔符的比特,如圖5中的虛線橢圓所示。一旦發(fā)現(xiàn)匹配,直至并包括段分隔符的那些比特就形成一個(gè)段。在找到段分隔符比特后,一個(gè)新段開始。因此,比特流被段分隔符分割為多個(gè)段。因?yàn)槠ヅ涠畏指舴谋忍乜赡艹霈F(xiàn)在比特流內(nèi)的任何地方,所以得到的段的大小是可變的,甚至是隨機(jī)的。
[0034]最后的段并不一定是以段分隔符來結(jié)束的,很有可能是一個(gè)最大的段尺寸,使得一些大段可能不會(huì)以段分隔符來結(jié)束的??梢蕴砑犹畛?padding)或使用密文竊取(ciphertext stealing)。
[0035]通過匹配段分隔符而將明文比特流分段后,每個(gè)段是加密的。每個(gè)段是使用一個(gè)或多個(gè)分組密碼而加密的。分組密碼具有固定長(zhǎng)度,如高級(jí)加密標(biāo)準(zhǔn)(AES) -128使用固定分組長(zhǎng)度128比特。每個(gè)分組密碼需要一個(gè)隨機(jī)數(shù)的輸入,稱之為初始化向量。段內(nèi)的所有分組都使用同一初始化向量,但初始化向量對(duì)每一個(gè)新段是改變的。
[0036]一旦所有可變長(zhǎng)度段內(nèi)的所有固定大小的分組都被加密了,那么加密的比特流就被轉(zhuǎn)換成一個(gè)字符串,添加元數(shù)據(jù)以產(chǎn)生密文。可以使用各種方法對(duì)元數(shù)據(jù)本身進(jìn)行加密。每個(gè)段的隨機(jī)初始化向量可以包括在元數(shù)據(jù)中。
[0037]圖6顯示了使用固定長(zhǎng)度分組密碼對(duì)可變長(zhǎng)度數(shù)據(jù)段的解密。如果有必要,加密數(shù)據(jù)或密文就從一個(gè)字符串轉(zhuǎn)換成一個(gè)比特流。該比特流被解析出元數(shù)據(jù)。所提取的元數(shù)據(jù)包含段分隔符P和該段分隔符的比特?cái)?shù)K以及初始化向量。初始化向量到段之間的映射也可以包含在元數(shù)據(jù)中,或者隱含該映射。
[0038]使用第一初始化向量來解密加密比特流中的第一密文分組。由分組密文解密而產(chǎn)生的明文比特與段分隔符比較。如果沒有找到匹配的,則使用同一初始化向量來解密下一個(gè)分組,并解密其他分組,直到找到一個(gè)與段分隔符的匹配。
[0039]一旦找到了匹配段分隔符的解密比特后,就標(biāo)記段邊界,開始一個(gè)新的段。從元數(shù)據(jù)中選擇一個(gè)不同的初始化向量用于下一段的分組密碼解密。一個(gè)或多個(gè)固定長(zhǎng)度分組被解密,直到找到一個(gè)與段分隔符的匹配。
[0040]通過找到與段分隔符的匹配,或一旦達(dá)到最大段長(zhǎng)度,就產(chǎn)生一個(gè)新段。最后一段以解密比特流的最后一個(gè)比特結(jié)束。如果需要的話,解密比特流轉(zhuǎn)換為字符串,并以明文輸出。
[0041]由于每個(gè)段具有不同的初始化向量,必須準(zhǔn)確找到段邊界,用于固定長(zhǎng)度分組密碼正確解密。通過尋找匹配分隔符的比特而找到段邊界,如圖6中的虛線橢圓所示。使用固定長(zhǎng)度的分組用于實(shí)際加密/解密,這提供了一個(gè)更有效的加密引擎,如果直接加密和解密可變長(zhǎng)度段的話。當(dāng)明文有更新時(shí),固定長(zhǎng)度分組和可變長(zhǎng)度數(shù)據(jù)段的結(jié)合可以有效產(chǎn)生較小的變化的密文,因?yàn)椴蛔兌尉哂邢嗤芪摹?br>
[0042]圖7顯示了使用固定長(zhǎng)度分組密碼對(duì)可變長(zhǎng)度段的重新加密,其中僅僅對(duì)有變化的段再次加密。在圖7中,用戶更新了明文,只改變了第一個(gè)字符,將一個(gè)小寫“a”改成一個(gè)大寫“A”。明文的更新及其重新加密的過程如虛線方框所示。
[0043]更新的明文被轉(zhuǎn)換成一個(gè)比特流,從該加密流中解析出元數(shù)據(jù)而得到原來明文加密時(shí)使用的元數(shù)據(jù)。元數(shù)據(jù)包含段分隔符,將其從左到右地與更新的明文比特流相比較,直到找到一個(gè)匹配,如虛線橢圓所示。段分隔符的每次匹配,標(biāo)志著一個(gè)段的結(jié)束。
[0044]無論是從原來的加密流,還是從更新后的加密流,對(duì)于每個(gè)段,可能會(huì)產(chǎn)生一個(gè)摘要(digest),如一個(gè)散列碼(hash)。當(dāng)散列碼不匹配一個(gè)段時(shí),該段被確定為一個(gè)有變化的段?;蛘撸瑢⒏露蔚乃斜忍囟己驮瓉矶蔚乃斜忍叵啾容^,用以檢測(cè)到一個(gè)有變化的段。
[0045]使用從元數(shù)據(jù)獲得的那些段的分組密碼和初始化向量,對(duì)有變化的段再次加密。那些具有匹配摘要和沒有改變的段,不需要進(jìn)行再次加密。加密了的有變化的段,和其他沒有改變的加密段合并形成加密比特流,它可以被轉(zhuǎn)換成一個(gè)字符流并以密文輸出?;蛘?,只輸出和傳輸該加密了的有變化的段,以及它們?cè)谠瓉肀忍亓髦械奈恢玫囊恍┲甘?,例如包括每個(gè)改變段的段號(hào)(segment number)或初始化向量。
[0046]由于只有有變化的段需要被加密、傳輸和存儲(chǔ),所以該方法對(duì)于CPU、網(wǎng)絡(luò)和存儲(chǔ)系統(tǒng)更為有效。而且仍然保持了安全性,因?yàn)槊總€(gè)段都有一個(gè)不同的初始化向量。為了能選擇正確的初始化向量,必須準(zhǔn)確找到段邊界,以便固定長(zhǎng)度分組密碼準(zhǔn)確解密。雖然仍然使用可變長(zhǎng)度段,但是保留了固定長(zhǎng)度分組密碼的計(jì)算效率??勺冮L(zhǎng)度段和固定長(zhǎng)度密碼的組合,計(jì)算效率高的同時(shí)也允許重新加密過程中僅僅更新有變化的段。
[0047]圖8是一個(gè)可變段固定分組加密器的方框圖。明文文件36包含文件大小為S字節(jié)的輸入明文。當(dāng)加密明文文件36時(shí),滑動(dòng)窗口 42向右滑動(dòng),從明文文件36中獲取一組比特。滑動(dòng)窗口 42中的K比特被發(fā)送到比較器40,用于和K比特的段分隔符相比較。段分隔符P是由隨機(jī)數(shù)發(fā)生器34所產(chǎn)生的一個(gè)K比特的值,其中K是L、分組密碼塊大小(以字節(jié)為單位)、20之中的最大值。因此,段分隔符P的長(zhǎng)度從來不會(huì)少于20比特。段分隔符P為每個(gè)明文文件36都生成一次。
[0048]當(dāng)段分隔符P匹配滑動(dòng)窗口 42中的最后K比特時(shí),比較器40就啟動(dòng)下一個(gè)段信號(hào),使得初始化向量發(fā)生器32生成一個(gè)新的初始化向量(IV)給予下一個(gè)分組塊。初始化向量發(fā)生器32內(nèi)的管線延遲(Pipeliningdelays) —直保留當(dāng)前分組塊的初始化向量(IV),直到分組密碼引擎30已經(jīng)完成了當(dāng)前段的所有數(shù)據(jù)的加密。前一個(gè)IV是被分組密碼引擎30用于加密滑動(dòng)窗口 42中的最后L或更少的字節(jié)。分組密碼引擎30輸出加密字節(jié)到密文文件38。[0049]當(dāng)比較器40沒有匹配到段分隔符和當(dāng)前段、但滑動(dòng)窗口 42已經(jīng)處理了 L字節(jié)時(shí),分組密碼引擎30就對(duì)當(dāng)前段中另一個(gè)L字節(jié)的分組塊進(jìn)行加密,并輸出其加密字節(jié)到密文文件38。因此,可以為每個(gè)段加密幾個(gè)固定長(zhǎng)度L字節(jié)的分組塊。當(dāng)L大于20時(shí),每個(gè)段至少為L(zhǎng)比特長(zhǎng),或L/8字節(jié)長(zhǎng),因?yàn)槎畏指舴荓比特長(zhǎng)。對(duì)于小于20的小L,段分隔符是20比特長(zhǎng),或2.5個(gè)字節(jié)。請(qǐng)注意,該段分隔符長(zhǎng)度K是以比特為單位,而密碼分組塊尺寸L是以字節(jié)為單位。當(dāng)分組密碼引擎30是一個(gè)128比特AES加密時(shí),L為128/8=16字節(jié)。
[0050]生成的每個(gè)初始化向量和段分隔符P,都由分組密碼引擎30’進(jìn)行加密,以產(chǎn)生加密的元數(shù)據(jù),其被加入到密文文件38中。
[0051]在某些情況下,在明文文件36的一個(gè)很長(zhǎng)序列比特中,可能都找不到段分隔符??梢允┘右粋€(gè)最大段尺寸M,用以限制段的大小。當(dāng)滑動(dòng)窗口 42已經(jīng)處理了 M字節(jié),而比較器40找不到一個(gè)匹配的段分隔符時(shí),那么就觸發(fā)一個(gè)M-字節(jié)計(jì)數(shù)器(未示出),使下一個(gè)段信號(hào)被啟動(dòng)。最后一個(gè)段通常也不會(huì)以段分隔符而結(jié)束,但當(dāng)達(dá)到明文文件36的文件末尾時(shí),就啟動(dòng)下一個(gè)段信號(hào),或啟動(dòng)文件末尾信號(hào),使得分組密碼引擎30’加密所有初始化向量和P,而分組密碼引擎30對(duì)滑動(dòng)窗口 42剩余的字節(jié)進(jìn)行加密。注意每個(gè)段中的最后一個(gè)分組塊通常都少于L字節(jié)。
[0052]圖9是一個(gè)對(duì)有變化的段進(jìn)行重新加密的方框圖。在重新加密過程中,如圖7所示,通過如前所述的搜索段分隔符,更新的明文被分成段。也有必要去確定當(dāng)前段何時(shí)發(fā)生變化,當(dāng)前段何時(shí)沒有改變(更新)。雖然當(dāng)前段明文的所有比特都可以和原來文件明文的相應(yīng)比特相比較,但是更快的方法是比較摘要。
[0053]散列函數(shù)50使用加密哈希函數(shù)(cryptographic hash function)從當(dāng)前段明文比特產(chǎn)生一個(gè)散列碼或摘要。相比段而言,更新的摘要具有更少比特。當(dāng)加密原來的文件時(shí),或在最近如再加密過程中,也可以為每個(gè)段都產(chǎn)生摘要,并存儲(chǔ)為存儲(chǔ)摘要52。存儲(chǔ)摘要也可以被存儲(chǔ)為一部分加密元數(shù)據(jù),或在重新加密過程中從舊的密文中重新生成存儲(chǔ)摘要。
[0054]摘要比較器54將來自哈希函數(shù)50的更新摘要和同一段的存儲(chǔ)摘要52進(jìn)行比較。當(dāng)比較器54找到一個(gè)匹配時(shí),那么當(dāng)前段沒有更新。存儲(chǔ)段58內(nèi)的存儲(chǔ)加密段可以為該段而輸出。
[0055]當(dāng)比較器54確定更新的摘要不匹配當(dāng)前段中的存儲(chǔ)摘要時(shí),那么當(dāng)前段就發(fā)生了變化。啟動(dòng)分組密碼引擎30,使用一個(gè)新的來自元數(shù)據(jù)的初始化向量,對(duì)當(dāng)前段中的一個(gè)或多個(gè)分組塊進(jìn)行加密。連接器56將新的加密段和沒有變化的存儲(chǔ)段合并,它可以將更新的加密段和原始段按正確的順序放置到輸出密文中?;蛘?,只輸出更新段以及一些映射或順序信息。
[0056]圖10是加密器使用可變長(zhǎng)度段和固定長(zhǎng)度分組塊的設(shè)置過程流程圖。在步驟140,選擇一個(gè)具有L字節(jié)固定大小的分組密碼功能,如L=16字節(jié)的AES-128。在步驟142,確定明文文件的大小是S字節(jié)。在步驟144,確定可變長(zhǎng)度段的最大段尺寸。最大段尺寸M是L和S/2之中的最大值。對(duì)于大多數(shù)文件,最大段尺寸是文件大小的一半,但對(duì)于很小的文件,最大段尺寸就是分組塊尺寸L。
[0057]在步驟146,設(shè)置段分隔符的大小。分隔符的大小是K比特,K是L和20之中的最大值。因此,當(dāng)L是16個(gè)字節(jié)時(shí),分隔符的大小是20比特。當(dāng)分組塊的大小L是24個(gè)字節(jié)時(shí),分隔符的大小是24比特。請(qǐng)注意,L是以字節(jié)為單位,K是以比特為單位。
[0058]段分隔符的大小K 一旦確定后,就產(chǎn)生段分隔符本身,例如通過一個(gè)隨機(jī)數(shù)發(fā)生器而產(chǎn)生。在步驟148,段分隔符P被生成為一個(gè)隨機(jī)產(chǎn)生的K比特串。
[0059]圖1lA-B顯示使用可變長(zhǎng)度分割和固定分組加密的加密過程。在步驟101,這個(gè)過程開始于明文文件F的第一個(gè)字節(jié)。在步驟102,指針PTR初始化為零。在步驟104,使用K字節(jié)滑動(dòng)窗口,從PTR到PTR+K-1,從左到右掃描明文文件F?;瑒?dòng)窗口的當(dāng)前位置是由指針PTR確定。
[0060]在步驟106,比較滑動(dòng)窗口的最后K比特和K-比特段分隔符P。如果步驟106沒有發(fā)現(xiàn)段分隔符匹配,在步驟108又沒有到達(dá)明文文件的末尾,也沒有到達(dá)最大段長(zhǎng)度M,那么在步驟110遞增指針PTR,返回步驟104,使明文文件F的下一個(gè)字節(jié)掃描入滑動(dòng)窗口,重復(fù)步驟106,與段分隔符比較。
[0061]在步驟106,當(dāng)滑動(dòng)窗口中的最后K比特與段分隔符相匹配時(shí),或者在步驟108當(dāng)?shù)竭_(dá)明文文件F的末尾時(shí),或者當(dāng)?shù)竭_(dá)最大段尺寸M時(shí),那么已經(jīng)到達(dá)了段末尾。過程在圖1lB中繼續(xù)。在步驟122,滑動(dòng)窗口中的最后一個(gè)字節(jié)被標(biāo)記為段邊界。這最后一個(gè)字節(jié)是當(dāng)前段中的最后一個(gè)字節(jié),在PTR+K-1,其中K是以字節(jié)為單位。需要注意的是,滑動(dòng)窗口每次遞增一個(gè)字節(jié),而不是每次遞增一個(gè)比特,雖然匹配是以K比特段分隔符來進(jìn)行匹配的。因此,段分隔符必須對(duì)齊一個(gè)字節(jié)邊界。當(dāng)在明文中出現(xiàn)比特與段分隔符的匹配,但不對(duì)齊字節(jié)邊界時(shí),那么這些匹配比特會(huì)被忽略。
[0062]在步驟124,產(chǎn)生當(dāng)前段的初始化向量(IV),如果之前沒有產(chǎn)生的化?;蛘?,可以從預(yù)先生成的IV列表中選擇一個(gè)IV。在步驟126,使用選擇的或產(chǎn)生的IV,對(duì)當(dāng)前分組塊進(jìn)行加密。所選擇的IV是和L字節(jié)明文一起輸入到分組密碼引擎的。當(dāng)前段可能會(huì)比L分組塊更長(zhǎng),在這種情況下,使用同一初始化向量對(duì)連續(xù)的L-字節(jié)分組塊進(jìn)行加密。最后部分當(dāng)前段可能比L字節(jié)更少,仍然作為當(dāng)前段中的最后一個(gè)分組塊進(jìn)行加密。
[0063]然后在步驟128,將指針PTR遞增K,滑動(dòng)窗口中的字節(jié)數(shù)。在步驟132,當(dāng)尚未到達(dá)明文文件末尾時(shí),則從步驟104重復(fù)該過程,因?yàn)榛瑒?dòng)窗口已經(jīng)重設(shè)為開始下一段。
[0064]在步驟132,當(dāng)已經(jīng)到達(dá)明文文件末尾時(shí),那么在步驟130,將段分隔符P、分隔符的比特?cái)?shù)K(其可以是隱含入P的)、所有初始化向量都加密成元數(shù)據(jù)。加密的元數(shù)據(jù)可以附加到在步驟126為所有段產(chǎn)生的加密數(shù)據(jù)分組塊中,或者加密的元數(shù)據(jù)可以被單獨(dú)發(fā)送。
[0065]圖12A-C顯示使用可變長(zhǎng)度分割和一個(gè)固定分組密碼的解密過程。加密的文件是和一些元數(shù)據(jù)一起接收到的。在步驟160,如果必要的話,解密元數(shù)據(jù),并解析出一系列初始化向量(IV)和段分隔符P。
[0066]在步驟162,該過程開始于加密文件的第一個(gè)字節(jié)。在步驟164,段指針SPTR和分組塊指針BPTR都被初始化為零。在步驟166,從來自元數(shù)據(jù)的一系列IV中選擇第一個(gè)初始化向量(IV)給第一段。在步驟168,使用該IV對(duì)一個(gè)固定長(zhǎng)度的加密分組塊進(jìn)行解密,在加密文件中從分組塊指針BPTR到BPTR+L-1。
[0067]在步驟169,一旦已經(jīng)解密了 L-字節(jié)的分組塊,分組塊指針BPTR遞增分組塊長(zhǎng)度L。在步驟172,當(dāng)分組塊指針BPTR還沒有到達(dá)滑動(dòng)窗口末尾SPTR+K-1時(shí),則需要在步驟168解密另一個(gè)分組塊,以填補(bǔ)滑動(dòng)窗口。一旦已經(jīng)解密了足夠的分組塊來填補(bǔ)滑動(dòng)窗口,在步驟172,BPTR大于或等于SPTR+K-1,那么該過程在圖12B中繼續(xù)。
[0068]在步驟174,從步驟168起就和解密分組塊一起加載的滑動(dòng)窗口從左至右就進(jìn)行掃描,K字節(jié)的滑動(dòng)窗口從段指針SPTR的SPTR+K-1?;瑒?dòng)窗口的當(dāng)前位置是由段指針SPTR確定的。
[0069]在步驟176,滑動(dòng)窗口的最后K比特與段分隔符P相比較。如果在步驟176沒有發(fā)現(xiàn)與段分隔符的匹配,在步驟178還沒有到達(dá)明文文件的末尾,也沒有到達(dá)最大段長(zhǎng)度M,那么在步驟170遞增段指針SPTR,從而使滑動(dòng)窗口在步驟174掃描到下一個(gè)解密字節(jié),重復(fù)步驟176與段分隔符的比較。
[0070]在步驟172,如果沒有足夠的解密字節(jié)在滑動(dòng)窗口,SPTR+K-1就大于BPTR,需要在步驟168解密另一個(gè)分組塊,以填補(bǔ)滑動(dòng)窗口。一旦已經(jīng)解密了足夠的分組塊以填補(bǔ)滑動(dòng)窗口,那么步驟172中BPTR大于SPTR+K-1,該過程在圖12B中繼續(xù)。
[0071]在步驟174,一旦有足夠的解密字節(jié)在滑動(dòng)窗口中,在步驟176,滑動(dòng)窗口的最后K比特與段分隔符匹配,或者在步驟178當(dāng)已經(jīng)到達(dá)加密文件的末尾時(shí),或已經(jīng)到達(dá)最大段尺寸M時(shí),那么已經(jīng)到達(dá)了段末尾。過程在圖12C中繼續(xù)。
[0072]在步驟172,滑動(dòng)窗口中的最后一個(gè)字節(jié)被標(biāo)記為段邊界。在步驟188,段指針SPTR遞增K,滑動(dòng)窗口的尺寸。在步驟190,分組塊指針BPTR匹配段指針。在步驟182,如果尚未到達(dá)加密文件的末尾,那么該過程回到圖12A的步驟166,重復(fù)步驟,從一系列IV中選擇下一個(gè)初始化向量,開始處理下一段。在步驟182,如果已經(jīng)到達(dá)加密文件的末尾,那么在步驟180通過將來自滑動(dòng)窗口的所有段的解密數(shù)據(jù)和那些段的所有分組塊連接在一起,輸出解密的明文文件。
[0073]圖13A-E顯示一個(gè)重新加密過程,其使用散列碼摘要(hash digest)檢測(cè)有變化的段。在圖13A-B中,一個(gè)加密文件進(jìn)行解密,以獲得原始明文,然后一段段地處理這個(gè)原始明文,為每段都產(chǎn)生散列碼摘要。
[0074]在圖13C中,用戶更新部分明文。一段段地處理該更新了的明文文件,為每個(gè)段取得散列碼。在圖13D中,從已更新文件的新散列碼,與原始明文文件的原來的散列碼進(jìn)行比較。如果散列碼匹配,那么使用原來存儲(chǔ)的初始化向量去匹配段。如果散列碼不匹配,那么產(chǎn)生一個(gè)新的初始化向量用于更新段(updated segment)。在圖13E中,使用新的初始化向量對(duì)更新段進(jìn)行加密,而使用原來的初始化向量對(duì)原始的沒有改變的段進(jìn)行加密。
[0075]在圖13A中,在步驟200,一個(gè)加密文件進(jìn)行解密,以重建原始文件F。例如通過解密元數(shù)據(jù),也能得到原始文件的元數(shù)據(jù)。元數(shù)據(jù)包含一系列初始化向量,它們需要用于解密各個(gè)段。
[0076]一旦為原始文件F重建了明文,就為每個(gè)段生成散列碼或摘要。如果散列碼存儲(chǔ)在元數(shù)據(jù)中,或通過其他方式可得,如在本地存儲(chǔ),那么過程就直接跳到圖13C的步驟240。
[0077]在步驟201,散列碼生成過程開始于重建的原始明文文件F的第一個(gè)字節(jié)。在步驟202,指針PTR初始化為零。在步驟204,使用K字節(jié)的滑動(dòng)窗口從左至右地掃描該重建的明文文件F,從PTR到PTR+K-1。滑動(dòng)窗口的當(dāng)前位置是由指針PTR確定的。
[0078]在步驟206,比較滑動(dòng)窗口的最后K比特和K-比特段分隔符P。如果步驟206沒有發(fā)現(xiàn)與該段分隔符的匹配,在步驟208也沒有到達(dá)該重建明文文件的末尾,沒有到達(dá)最大段長(zhǎng)度M,那么在步驟210指針PTR遞增,回到步驟204,明文文件F的下一字節(jié)將被掃描入滑動(dòng)窗口,重復(fù)步驟206,與段分隔符進(jìn)行比較。
[0079]在步驟206,當(dāng)滑動(dòng)窗口中的最后K比特匹配段分隔符時(shí),或者在步驟208,當(dāng)?shù)竭_(dá)明文文件F的末尾時(shí),或者當(dāng)?shù)竭_(dá)最大段尺寸M時(shí),那么就已經(jīng)到達(dá)段末尾。過程在圖13B中繼續(xù)。在步驟222,滑動(dòng)窗口中的最后那個(gè)字節(jié)被標(biāo)記為段邊界。最后字節(jié)是指當(dāng)前段的最后字節(jié),在PTR+K-1,其中K是以字節(jié)為單位。
[0080]在步驟224,一旦已經(jīng)到達(dá)當(dāng)前段末尾,對(duì)當(dāng)前段中的明文進(jìn)行散列碼運(yùn)算,以生成摘要。在步驟226,存儲(chǔ)原始散列碼,例如將其映射到元數(shù)據(jù)中一系列初始化向量中的下一個(gè)初始化向量。
[0081]然后在步驟228,指針PTR遞增K,滑動(dòng)窗口的字節(jié)數(shù)。在步驟232,當(dāng)尚未到達(dá)明文文件的末尾時(shí),那么過程回到步驟204,重設(shè)滑動(dòng)窗口到下一段的開始。
[0082]在步驟232,當(dāng)已經(jīng)到達(dá)明文文件的末尾,那么就已經(jīng)產(chǎn)生了原始明文文件F所有段的散列碼摘要。
[0083]在圖13C中,在步驟240,用戶編輯明文文件F,例如添加或刪除文件中一些文本或數(shù)據(jù),或者更新文件中的數(shù)據(jù)。更新后的文件是更新的明文文件F’。現(xiàn)在處理此更新的明文文件,以獲得更新的散列碼摘要,對(duì)它們進(jìn)行比較,以確定哪個(gè)段已經(jīng)改變,哪個(gè)段沒有改變。
[0084]在步驟238,更新文件F’的散列碼的產(chǎn)生過程開始于更新明文文件F’的第一個(gè)字節(jié)。在步驟242,指針PTR初始化為零。在步驟244,使用K字節(jié)的滑動(dòng)窗口從左至右地掃描該更新的明文文件F’,從PTR到PTR+K-1。
[0085]在步驟246,比較滑動(dòng)窗口的最后K比特和K-比特段分隔符P。如果步驟246沒有發(fā)現(xiàn)與段分隔符的匹配,在步驟248還沒有到達(dá)明文文件的末尾,也沒有到達(dá)最大數(shù)據(jù)段長(zhǎng)度M,那么在步驟250遞增指針PTR,以便在步驟244將明文文件F’的下一字節(jié)掃描入滑動(dòng)窗口,重復(fù)步驟246,段分隔符進(jìn)行比較。
[0086]在步驟246,當(dāng)滑動(dòng)窗口中的最后K比特與段分隔符相匹配時(shí),或者在步驟248,當(dāng)已經(jīng)到達(dá)明文文件F’的末尾時(shí),或者當(dāng)已經(jīng)到達(dá)最大段尺寸M時(shí),那么就已經(jīng)到達(dá)了段末尾。過程在圖13D中繼續(xù)。在步驟252,滑動(dòng)窗口中的最后字節(jié)被標(biāo)記為段邊界。最后字節(jié)是指當(dāng)前段的最后字節(jié),在PTR+K-1,其中K是以字節(jié)為單位。
[0087]在步驟254,一旦已經(jīng)到達(dá)當(dāng)前段末尾,對(duì)當(dāng)前段中的更新明文進(jìn)行散列碼運(yùn)算,以生成更新摘要。在步驟256,比較該更新的散列碼和原始散列碼。原始散列碼和下一段的初始向量在步驟226中存儲(chǔ)了。
[0088]在步驟262,當(dāng)更新的散列碼不匹配原始散列碼時(shí),那么當(dāng)前段并沒有改變。在步驟266,從映射中或在原始元數(shù)據(jù)的一系列初始化向量中,讀取原始初始化向量。
[0089]在步驟262,當(dāng)更新的散列碼不匹配原始散列碼時(shí),那么當(dāng)前段就已經(jīng)改變了。當(dāng)前段被標(biāo)記為更新或有變化。在步驟264,為該更新段產(chǎn)生一個(gè)新的初始化向量。
[0090]在圖13E中,已經(jīng)得到了初始化向量,無論是沒有改變的段的原始IV,還是更新段的一個(gè)新IV。在步驟268,分組密碼引擎使用該IV對(duì)當(dāng)前段中的所有分組塊進(jìn)行加密。然后在步驟258,指針PTR遞增K,滑動(dòng)窗口的字節(jié)數(shù)。在步驟270,當(dāng)尚未到達(dá)更新明文文件F’的末尾,那么過程回到步驟244,滑動(dòng)窗口重設(shè)到下一段的開始。
[0091]在步驟270,如果已經(jīng)到達(dá)明文文件的末尾時(shí),在步驟272,段分隔符P、分隔符的比特?cái)?shù)K、和所有初始化向量都順序連接為元數(shù)據(jù)。在步驟274,為了安全,初始化向量的所有映射被破壞。加密的元數(shù)據(jù)可以附加到由步驟268產(chǎn)生的所有段的重新加密數(shù)據(jù)的分組塊上,在步驟276,加密元數(shù)據(jù)可以被單獨(dú)發(fā)送。
[0092]可以使用圖13A-E中的過程來生成更新的密文字符串。作為在本地計(jì)算機(jī)上或在本地服務(wù)器上的一個(gè)后處理程序,可以將更新后的密文字符串和原來的密文字符串進(jìn)行比較,找到改變所在。然后,在更新后的密文字符串中,只有改變的字符,以及改變字符在原來的密文字符串內(nèi)的位置指示,才在互聯(lián)網(wǎng)上傳輸?shù)竭h(yuǎn)程的加密存儲(chǔ)。指示可以是一個(gè)序列號(hào),其指示改變字符的順序,或者可以是一個(gè)地址或更新字符之前的一串字符。
【其他實(shí)施例】
[0093]發(fā)明人還想到幾個(gè)其它實(shí)施例。例如,各種操作和功能可以是管線的和并行執(zhí)行的??梢蕴砑泳彺婧凸芫€寄存器或延誤。段邊界上的段標(biāo)記不必是一個(gè)實(shí)際的標(biāo)記,但可用于信號(hào)示意其他過程或功能。段標(biāo)記不一定要保存。
[0094]各種參數(shù)的值已作為例子示出或描述。參數(shù)還可以有其它值的描述。段分隔符P可以有一個(gè)不同值,如16、40、或其他值。雖然段分隔符的長(zhǎng)度K被描述為L(zhǎng)或20之中的最大值,其中L是分組塊的尺寸(以字節(jié)為單位),K是長(zhǎng)度(以比特為單位),但是也可以使用其他功能。K可以是20、L/2之中的最大值,或是16、L*3之中的最大值,等等。雖然段分隔符已被描述為為每個(gè)明文文件36都生成一次,但是也可以使用不同的段分隔符用于每個(gè)段,或用于每一組段,每個(gè)段分隔符P都作為元數(shù)據(jù)而保存。
[0095]段分隔符的大小影響平均段大小。假設(shè)一個(gè)K比特的段分隔符S,假設(shè)一個(gè)隨機(jī)字節(jié)串M,它的大小要大于K比特(I字節(jié)=8比特),S匹配M的最后K比特的概率為2K,即平均來說窗口要滑動(dòng)2K次才會(huì)有一個(gè)匹配。如果K是20,平均大小將約I兆字節(jié),因?yàn)榇翱谥鹱止?jié)滑動(dòng)?,F(xiàn)在,如果段分隔符S的長(zhǎng)度是K-字節(jié)長(zhǎng),那么匹配的概率將成為28K,并且平均大小將變得巨大,這是不現(xiàn)實(shí)的。
[0096]雖然分組密碼引擎30已被描述為使用AES-128加密,但是也可以使用其他加密方法和標(biāo)準(zhǔn),例如AES-256或DES,分組塊尺寸L值也可以有其他值。雖然大多數(shù)分組塊已經(jīng)被描述為一個(gè)固定長(zhǎng)度的分組塊,但是文件中每個(gè)段的最后一個(gè)分組塊,通常是小于固定長(zhǎng)度的。對(duì)這些部分長(zhǎng)度的末尾分組塊,可以添加填充數(shù)據(jù)如全0或全I(xiàn)作為填充以達(dá)到固定大小,如128比特。
[0097]雖然散列函數(shù)50已經(jīng)被描述為加密哈希函數(shù),但是也可以使用其他摘要產(chǎn)生函數(shù),如周期性冗余校驗(yàn)(CRC),或弗萊徹-32 (Fletcher-32)。摘要的尺寸大小應(yīng)該足夠大,能防止高混疊的概率,混疊可能導(dǎo)致太多沒有變化的段被處理為更新段,或可能導(dǎo)致更新段被錯(cuò)誤地識(shí)別為一個(gè)沒有變化的段。
[0098]更新一個(gè)原始段也有可能會(huì)導(dǎo)致一個(gè)額外的段分隔符出現(xiàn)在更新段里。那么原始段映射到兩個(gè)更新段?;蛘撸摳驴赡軙?huì)刪除或移動(dòng)段分隔符,使得兩個(gè)原始段被改變?yōu)橐粋€(gè)更新段。兩個(gè)以上的段也可以被組合或分割。摘要匹配可以正確解決這些情況。
[0099]一系列初始化向量可以包括在元數(shù)據(jù)中,有一個(gè)映射表格或指針將到每個(gè)段與其初始化向量聯(lián)系起來。段的原始序列,可以通過一個(gè)序列號(hào)來表明,或由一個(gè)映射表格來表示,該表格指示每個(gè)段條目序列內(nèi)的順序。也可以采用鏈表或指針指到下一段。元數(shù)據(jù)可以以任何使用的形式,或以某些其他形式包括這些序列信息??梢允褂酶鞣N編碼,也可以使用各種數(shù)據(jù)格式。
[0100]雖然已經(jīng)描述了每個(gè)段都使用一個(gè)初始化向量,但是一個(gè)段也可以使用一個(gè)以上的初始化向量。分組加密引擎30可以有兩個(gè)或兩個(gè)以上的初始化向量的輸入。多個(gè)初始化向量可以合并或連接在一起,形成一個(gè)較長(zhǎng)的初始化向量。
[0101]當(dāng)在明文中出現(xiàn)比特匹配段分隔符時(shí),但又不對(duì)齊字節(jié)邊界,這些匹配比特會(huì)被忽略。在一個(gè)備選實(shí)施例中,滑動(dòng)窗口每次滑動(dòng)一個(gè)比特,而不是每次滑動(dòng)一個(gè)字節(jié),那么段分隔符可以匹配任何K比特序列,而不是只是字節(jié)對(duì)齊的K比特序列。指針也可以遞增另一個(gè)量,如4個(gè)字節(jié),這需要段分隔符對(duì)齊一個(gè)32-比特的字邊界。也可以有其他替代。
[0102]雖然已經(jīng)描述了重新加密對(duì)于高效遠(yuǎn)程存儲(chǔ)的好處,但是更有效的更新密文不僅僅減少所需帶寬用于發(fā)送和接收該更新,而且也能減少存儲(chǔ)系統(tǒng)的磨損和提高壽命。例如,通過在存儲(chǔ)系統(tǒng)上更新較小的數(shù)據(jù)量,存儲(chǔ)就會(huì)更少受到磨損。某些存儲(chǔ)系統(tǒng)如基于閃存的存儲(chǔ),其只允許有有限數(shù)次的寫擦除周期,因此,這樣的存儲(chǔ)系統(tǒng)可能受益于本發(fā)明。
[0103]重要的是,改變密文的量并不是很小,以至于要折中加密系統(tǒng)的安全性。雖然在圖2中為了說明目的,顯示僅僅改變密碼文本中很少的字符,但是在現(xiàn)實(shí)中該變化有很多個(gè)字符長(zhǎng)度,雖然仍遠(yuǎn)小于整個(gè)文檔。加密系統(tǒng)的設(shè)計(jì)使得觸發(fā)雪崩效應(yīng)以抵抗熵相關(guān)的密碼分析??梢詫?shí)施重新加密方法,使得明文中只有一個(gè)比特的改變將產(chǎn)生密文中的至少64比特的改變,這是一個(gè)128比特AES密碼分組的一半。
[0104]除了 ASCII,可使用其他各種轉(zhuǎn)換或映射用于字符串和比特流之間的轉(zhuǎn)換。也可以增加加擾和解擾。元數(shù)據(jù)可以和加密數(shù)據(jù)分開傳輸,或者可以和加密的消息數(shù)據(jù)組合起來。元數(shù)據(jù)也可以不加密。明文10或密文12可以是原始比特流,而不是字符,所以字符和比特流格式之間沒有必要進(jìn)行轉(zhuǎn)換。雖然已經(jīng)使用了術(shù)語“明文”和“密文”,但是這些術(shù)語并不意在限制于ASCII文本或字符,但也可以包括原始比特或任何格式的數(shù)據(jù)。
[0105]雖然已經(jīng)描述了比較段分隔符的比特和一個(gè)比特流,但是段分隔符也可以表示為一個(gè)字符串,這就要與明文文件中的字符相比較。雖然段邊界被設(shè)置在與段分隔符匹配的比特的末尾,但是從匹配段分隔符的比特到段邊界可能會(huì)有一個(gè)偏移量,比如段會(huì)結(jié)束在匹配比特后10個(gè)字節(jié)處,或者剛好在匹配比特前。
[0106]在不安全的通道上傳輸?shù)脑獢?shù)據(jù),并不包括每個(gè)段中的比特?cái)?shù),以保持段的安全性,反而必須通過匹配段分隔符來分隔段。有更新的或有改變的段可以使用和原始段相同的初始化向量,或者可以使用一個(gè)新的初始化向量,其和更新的加密段一起作為更新的元數(shù)據(jù)而被發(fā)送。
[0107]該過程步驟可以由硬件設(shè)備實(shí)施,如控制器或邏輯門陣列,或加密引擎。處理器可能執(zhí)行固件中或半導(dǎo)體內(nèi)存中的指令,例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、或電可擦除可編程只讀存儲(chǔ)器(EEPR0M)、或閃存、或硬連線ROM。例程的指令可以從大容量存儲(chǔ)設(shè)備中復(fù)制到半導(dǎo)體內(nèi)存中由硬件執(zhí)行。
[0108]本發(fā)明【背景技術(shù)】部分可含有關(guān)于本發(fā)明的問題或環(huán)境的背景信息而非描述其它現(xiàn)有技術(shù)。因此,在【背景技術(shù)】部分中包括材料并不是 申請(qǐng)人:承認(rèn)現(xiàn)有技術(shù)。
[0109]本文中所描述的任何方法或工藝為機(jī)器實(shí)施或計(jì)算機(jī)實(shí)施的,且既定由機(jī)器、計(jì)算機(jī)或其它裝置執(zhí)行且不希望在沒有此類機(jī)器輔助的情況下單獨(dú)由人類執(zhí)行。所產(chǎn)生的有形結(jié)果可包括在例如計(jì)算機(jī)監(jiān)視器、投影裝置、音頻產(chǎn)生裝置和相關(guān)媒體裝置等顯示裝置上的報(bào)告或其它機(jī)器產(chǎn)生的顯示,且可包括也為機(jī)器產(chǎn)生的硬拷貝打印輸出。對(duì)其它機(jī)器的計(jì)算機(jī)控制為另一有形結(jié)果。
[0110] 出于說明和描述的目的已呈現(xiàn)了對(duì)本發(fā)明實(shí)施例的先前描述。其不希望為詳盡的或?qū)⒈景l(fā)明限于所揭示的精確形式。鑒于以上教示,許多修改和變型是可能的。希望本發(fā)明的范圍不受此詳細(xì)描述限制,而是由所附權(quán)利要求書限制。
【權(quán)利要求】
1.一個(gè)可變段固定分組加密裝置,包括: 輸入,其用于接收一個(gè)明文; 滑動(dòng)窗口,其滑動(dòng)地選擇所述明文的一部分; 比較器,其比較一個(gè)段分隔符和所述滑動(dòng)窗口內(nèi)的明文,以檢測(cè)到段邊界; 分組密碼引擎,其接收所述明文的一個(gè)分組的比特,所述分組密碼引擎也接收一個(gè)初始化向量,所述初始化向量調(diào)整所述分組密碼引擎使用的一個(gè)加密函數(shù),以從所述分組塊中產(chǎn)生一個(gè)分組的密文; 初始化向量產(chǎn)生器,其產(chǎn)生初始化向量,其中為所述明文的每一段都產(chǎn)生一個(gè)不同的初始化向量; 選擇器,當(dāng)所述比較器檢測(cè)到所述段邊界時(shí),其輸入一個(gè)不同的初始化向量到所述分組密碼引擎; 輸出,其從所述分組密碼引擎接收所述分組密文,作為所述明文的加密; 其中對(duì)于每個(gè)段邊界,初始化向量都有改變。
2.根據(jù)權(quán)利要求1所述的可變段固定分組加密裝置,其中所述段有一個(gè)可變長(zhǎng)度,其隨著段的不同而不同: 其中在一個(gè)段的段邊界處的末尾分組有L或更少比特的明文,其他不在邊界處的分組都正好有L比特明文; 其中L是至少64的整數(shù); 其中其他分組有固定長(zhǎng)度; 由此,通過匹配所述段分隔符而找到的可變長(zhǎng)度段,由分組和初始化向量進(jìn)行加密,初始化向量在段邊界處會(huì)改變。
3.根據(jù)權(quán)利要求1所述的可變段固定分組加密裝置,還包括: 隨機(jī)數(shù)產(chǎn)生器,其產(chǎn)生一個(gè)K比特隨機(jī)數(shù)的所述段分隔符; 其中所述滑動(dòng)窗口選擇至少K字節(jié)所述明文; 其中K是至少20的整數(shù)。
4.根據(jù)權(quán)利要求1所述的可變段固定分組加密裝置,其中所述初始化向量產(chǎn)生器包括一個(gè)隨機(jī)數(shù)產(chǎn)生器用于隨機(jī)產(chǎn)生所述初始化向量。
5.根據(jù)權(quán)利要求1所述的可變段固定分組加密裝置,其中所述分組密碼引擎包括一個(gè)高級(jí)加密標(biāo)準(zhǔn)128比特(AES-128)加密器,其使用所述初始化向量作為一個(gè)控制向量輸入,對(duì)128比特分組進(jìn)行加密。
6.根據(jù)權(quán)利要求1所述的可變段固定分組加密裝置,還包括: 元數(shù)據(jù)收集器,其收集所述段分隔符和所述初始化向量作為元數(shù)據(jù),所述元數(shù)據(jù)傳輸?shù)剿黾用苊魑牡囊粋€(gè)授權(quán)接收器; 由此,所述段分隔符包含在所述元數(shù)據(jù)中。
7.根據(jù)權(quán)利要求1所述的可變段固定分組加密裝置,還包括: 段比較器,其對(duì)一個(gè)原始明文文件的一個(gè)原始當(dāng)前段和一個(gè)更新明文文件的一個(gè)當(dāng)前更新段進(jìn)行比較,當(dāng)所述當(dāng)前更新段對(duì)比所述原始當(dāng)前段有改變時(shí),所述段比較器會(huì)標(biāo)記一個(gè)更新段; 重新加密器,當(dāng)所述段比較器標(biāo)記所述更新段時(shí),其啟動(dòng)所述分組密碼引擎,對(duì)所述更新段內(nèi)的分組進(jìn)行加密; 其中當(dāng)所述段比較器沒有標(biāo)記更新段時(shí),所述分組密碼引擎不會(huì)被啟動(dòng)。
8.根據(jù)權(quán)利要求7所述的可變段固定分組加密裝置,其中所述段比較器包括: 散列引擎,其用于為所述原始明文文件的所述原始當(dāng)前段產(chǎn)生一個(gè)原始散列碼摘要,并用于為所述更新明文文件的所述當(dāng)前更新段產(chǎn)生一個(gè)更新散列碼摘要; 摘要比較器,其比較所述原始散列碼摘要和所述更新散列碼摘要,以標(biāo)記所述更新段; 由此,對(duì)于每個(gè)段,都會(huì)產(chǎn)生和比較散列碼摘要。
9.一種對(duì)明文文件進(jìn)行加密的方法: 使用一個(gè)電子計(jì)算設(shè)備產(chǎn)生一個(gè)段分隔符; 掃描所述明文文件,找到匹配所述段分隔符的匹配比特,當(dāng)找到匹配比特時(shí),找到一個(gè)段邊界; 通過匹配所述段分隔符而找到的段邊界,將所述明文文件分成段,,其中所述段有可變長(zhǎng)度; 為每個(gè)段選擇一個(gè)初始化向量,其中每個(gè)段都使用一個(gè)不同的初始化向量; 將每個(gè)段分成多個(gè)分組,每個(gè)分組有固定數(shù)目的比特,除了每個(gè)段的末尾分組外;所述末尾分組的比特?cái)?shù)目要少于或等于所述固定數(shù)目比特;對(duì)于每個(gè)段中的每個(gè)分組,將當(dāng)前段的一個(gè)分組輸入到一個(gè)分組密碼引擎,并將所述當(dāng)前段的所述初始化向量輸入到所述分組密碼引擎,啟動(dòng)所述分組密碼引擎以產(chǎn)生一個(gè)密碼分組的密文,其是所述當(dāng)前段的所述初始化向量和所述當(dāng)前段的所述分組的一個(gè)函數(shù);將由所述分組密碼引擎產(chǎn)生的所述密碼分組輸出到一個(gè)密文文件,并輸出所述初始化向量和所述段分隔符,作為所述密文文件的元數(shù)據(jù); 由此,使用不同的初始化向量輸入到所述密碼分組引擎,所述密碼分組引擎對(duì)所述段內(nèi)的固定尺寸分組進(jìn)行加密,從而對(duì)所述可變長(zhǎng)度段進(jìn)行加密。
10.根據(jù)權(quán)利要求9所述的方法,還包括: 將所述密碼分組引擎產(chǎn)生的所述密碼分組,存儲(chǔ)入一個(gè)半導(dǎo)體存儲(chǔ)器中,其中在所述明文文件加密后,所述密文文件是存儲(chǔ)入所述半導(dǎo)體存儲(chǔ)器中的。
11.根據(jù)權(quán)利要求10所述的方法,還包括: 當(dāng)?shù)竭_(dá)最大段尺寸又沒有匹配所述段分隔符時(shí),標(biāo)示出一個(gè)段邊界以將所述段分割出一個(gè)最大段尺寸,再開始一個(gè)新的段; 當(dāng)?shù)竭_(dá)所述明文文件的末尾時(shí),標(biāo)示出一個(gè)段邊界以分割所述段; 將所述初始化向量和所述段分隔符加密成元數(shù)據(jù),輸出所述元數(shù)據(jù)用于所述密文文件。
12.根據(jù)權(quán)利要求11所述的方法,還包括: 為所述當(dāng)前段產(chǎn)生一個(gè)原始摘要,所述原始摘要是所述當(dāng)前段明文的一個(gè)散列函數(shù)或循環(huán)冗余校驗(yàn)(CRC)函數(shù); 接收一個(gè)更新明文文件,其僅僅對(duì)所述明文文件做了部分修改; 掃描所述更新明文文件用以尋找匹配所述段分隔符的匹配比特,當(dāng)找到所述匹配比特時(shí),就找到了一個(gè)更新段邊界;在通過匹配所述段分隔符而找到的所述更新段邊界處,將所述更新明文文件分成更新段,其中更新段的長(zhǎng)度是可變的; 為當(dāng)前更新段產(chǎn)生一個(gè)更新摘要,所述更新摘要是所述當(dāng)前更新段的更新明文的一個(gè)散列函數(shù)或循環(huán)冗余校驗(yàn)(CRC)函數(shù); 比較所述更新摘要和所述原始摘要,當(dāng)所述更新摘要不匹配所述原始摘要時(shí),將所述更新段標(biāo)示為一個(gè)有改變的段,當(dāng)所述更新摘要匹配所述原始摘要時(shí),將所述更新段標(biāo)示為一個(gè)沒有改變的段; 為每個(gè)有改變的段選擇一個(gè)更新的初始化向量,其中每個(gè)段都使用一個(gè)不同的初始化向量; 將每個(gè)有改變的段分成多個(gè)分組塊,每個(gè)分組都有固定比特?cái)?shù)目,除了每個(gè)改變段的末尾那個(gè)分組外,末尾分組的比特?cái)?shù)目少于或等于所述固定比特?cái)?shù)目; 對(duì)于每個(gè)改變段的每個(gè)分組,將所述改變段的一個(gè)分組輸入到所述分組密碼引擎,并將所述改變段的所述更新初始化向量輸入到所述分組密碼引擎,啟動(dòng)所述分組密碼引擎以產(chǎn)生一個(gè)改變的密碼分組密文,其是所述改變段的所述更新初始化向量和所述改變段的所述分組的一個(gè)函數(shù); 將由所述分組密碼引擎產(chǎn)生的所述改變的密碼分組輸出到一個(gè)改變的密文文件中,并將所述更新初始化向量和所述段分隔符輸出為元數(shù)據(jù)用于所述改變的密文文件; 由此,改變段的位置由比較器找出。
13.根據(jù)權(quán)利要求12所述的方法, 其中所述更新的明文文件包括至少10割段; 其中在所述更新明文文件中的單個(gè)字節(jié)的改變,將導(dǎo)致只有一個(gè)改變段,其中所有其他段都是沒有改變的段; 由此,所述更新明文文件的小改變只產(chǎn)生一個(gè)改變段需要加密,其中所述更新明文文件中沒有改變的段都不需要加密。
14.根據(jù)權(quán)利要求12所述的方法,還包括通過以下步驟從一個(gè)加密文件產(chǎn) 生所述明文文件: 初始化一個(gè)段指針; 初始化一個(gè)分組指針; 從一系列初始化向量中讀取一個(gè)當(dāng)前初始化向量; 使用所述分組密碼引擎,解密所述加密文件中的一個(gè)分組,將所述解密明文加載到一個(gè)滑動(dòng)窗口中; 將所述分組指針遞增一個(gè)分組尺寸; 解密所述加密文件中的其余分組,并將所述分組指針遞增一個(gè)分組尺寸,將解密明文加載入所述滑動(dòng)窗口,直到所述分組指針大于所述段指針加上窗口尺寸; 掃描所述滑動(dòng)窗口中的解密明文,尋找匹配所述段分隔符的匹配比特,當(dāng)找到所述匹配比特時(shí),就找到了一個(gè)段邊界; 當(dāng)掃描了所述滑動(dòng)窗口而又沒有找到段邊界時(shí),遞增所述段指針; 當(dāng)找到所述段邊界時(shí),將所述段指針遞增窗口尺寸,將所述段指針拷貝到所述分組指針; 輸出所述解密明文作為所述明文文件。
15.一個(gè)分段分組加密器,包括: 輸入,其接收輸入數(shù)據(jù)用于加密‘ 滑動(dòng)裝置,用于從所述輸入數(shù)據(jù)中選擇一窗口數(shù)據(jù),其中所述數(shù)據(jù)窗口是按順序地選擇輸入數(shù)據(jù)的; 分隔裝置,用于比較數(shù)據(jù)窗口內(nèi)的輸入數(shù)據(jù)和一個(gè)段分隔符,當(dāng)找到一個(gè)匹配所述段分隔符的匹配時(shí),標(biāo)示出一個(gè)段邊界; 分組密碼裝置,其使用一個(gè)基于初始化向量的加密函數(shù),從一個(gè)分組的輸入數(shù)據(jù)中產(chǎn)生一個(gè)加密分組; 初始化裝置,用于產(chǎn)生多個(gè)初始化向量,其中在所述分隔裝置檢測(cè)到每個(gè)段邊界后,就將一個(gè)不同的初始化向量輸入到所述分組密碼裝置; 其中每個(gè)段都有一個(gè)可變長(zhǎng)度的輸入數(shù)據(jù),而且每個(gè)段都包括多個(gè)分組,當(dāng)所述段的長(zhǎng)度大于所述分組的固定分組長(zhǎng)度時(shí); 其中所有分組都有所述固定分組長(zhǎng)度的所述輸入數(shù)據(jù),除了通過所述段邊界分隔的所述段末尾的最后那個(gè)分組,其長(zhǎng)度小于所述固定分組長(zhǎng)度; 輸出裝置,其輸出由所述分組密碼引擎所產(chǎn)生的加密數(shù)據(jù); 由此,輸入數(shù)據(jù)以分組形式進(jìn)行加密,但是初始化向量在可變長(zhǎng)度段的段邊界處被改變。
16.根據(jù)權(quán)利要求15 所述的分段分組加密器,其中所述固定分組長(zhǎng)度是L字節(jié),其中L是至少8的整數(shù);還包括: 隨機(jī)裝置,用于產(chǎn)生所述段分隔符,其是K比特隨機(jī)數(shù),其中K是至少20的整數(shù),當(dāng)L大于20時(shí),K等于L。
17.根據(jù)權(quán)利要求16所述的分段分組加密器,還包括: 最大裝置,其用于當(dāng)已經(jīng)到達(dá)一個(gè)最大段尺寸而又沒有找到所述段分隔符時(shí),產(chǎn)生一個(gè)段邊界; 其中所述最大段尺寸是至少所述固定分組長(zhǎng)度L ; 其中所述最大段尺寸不會(huì)超過所述輸入數(shù)據(jù)文件大小的一半。
18.根據(jù)權(quán)利要求16所述的分段分組加密器,還包括: 段指針裝置,用于在由所述滑動(dòng)裝置選擇而包含入所述窗口的一序列所述輸入數(shù)據(jù)中標(biāo)示出一個(gè)位置; 段指針遞增裝置,當(dāng)已經(jīng)到達(dá)所述段邊界時(shí),其用于將所述段指針遞增一個(gè)窗口尺寸,當(dāng)在所述窗口中一組當(dāng)前輸入數(shù)據(jù)中沒有找到匹配所述段分隔符的一個(gè)匹配時(shí),其用于遞增所述段指針。
19.根據(jù)權(quán)利要求18所述的分段分組加密器,還包括: 分組指針裝置,用于在輸入到所述分組密碼裝置用于加密或解密的一序列所述輸入數(shù)據(jù)中標(biāo)示出一個(gè)位置; 分組指針遞增裝置,當(dāng)所述分組密碼裝置已經(jīng)加密或解密了一個(gè)分組時(shí),其用于將所分組指針遞增一個(gè)分組尺寸; 邊界遞增裝置,當(dāng)已經(jīng)到達(dá)所述邊界時(shí),其用于拷貝所述段指針裝置的一個(gè)值以覆蓋所述分組指針裝置。
20.根據(jù)權(quán)利要求15所述的分段分組加密器,還包括: 摘要裝置,用于產(chǎn)生一個(gè)段的一個(gè)壓縮摘要,所述壓縮摘要的比特?cái)?shù)目要少于所述段的輸入數(shù)據(jù)的比特?cái)?shù)目; 摘要比較裝置,用于比較一個(gè)更新段的壓縮摘要和一個(gè)原始段的壓縮摘要,以確定更新段跟原始段內(nèi)容是 否一樣。
【文檔編號(hào)】H04L9/06GK103457718SQ201310252810
【公開日】2013年12月18日 申請(qǐng)日期:2013年6月24日 優(yōu)先權(quán)日:2013年5月28日
【發(fā)明者】梁永斌, 屈耀榮 申請(qǐng)人:香港應(yīng)用科技研究院有限公司