專利名稱:基于Reed-Solomon碼的P2P存儲系統編碼方法
技術領域:
本發明屬于點對點網絡技術領域,具體涉及一種適用于點對點存儲系統中的數據編碼 方法,能夠保證高的數據安全性和可靠性,同時又有較小的計算開銷。
背景技術:
點對點(P2P)存儲系統是一種基于點對點網絡的分布式文件存儲系統,用戶通過網絡 把數據存儲到其他的用戶節點上,而非本地硬盤上。每個節點的地位是對等的, 一個節點 既是使用系統存取文件的客戶,同時也是系統中提供存儲空間資源的服務器。從而通過收 集利用用戶閑散資源,構建大規模的存儲系統。最近幾年,國際上不斷出現許多點對點存 儲系統,如
[CFS] [PAST] [FAESITE]等。
在P2P存儲系統中,用戶的數據是存儲在其他不可信的用戶磁盤上,并且系統中的用 戶可能隨時離開系統。這對于在P2P存儲系統中,如何保證用戶的數據安全性和可靠性帶 來了極大的挑戰。
為了解決上面的問題,現有的系統
[CFS] [PAST] [FAESITE]主要采用以 下方法先采用傳統的加密算法(DES、 AES)來對用戶的數據加密,從而保證用戶數據的私 密性;然后,再對加密后的數據采用副本或者糾刪碼(Erasure Code)的方式做冗余。然而, 這種方法在P2P存儲系統中是有很大缺陷的。P2P存儲系統與傳統的客戶/服務器存儲系 統不同的是用戶的數據存儲在其他用戶的機器上,而不是存儲在有集中管理的服務器上。 因此,現有的P2P存儲系統單靠數據加密來保證用戶數據的安全性會帶來下面兩個問題
(1)由于數據是長期存儲在他人的機器上,如果密鑰丟失或者傳統的加密算法被發現存 在弱點,攻擊者就能夠通過存儲在他們機器上的數據發現其他用戶的私密數據。(2)即使 一個用戶發現自己的數據受到安全威脅(如泄露了密鑰或加密算法強度被發現不足),他也 無法完全刪除存儲在攻擊者機器上的數據來最小化自己的損失。那么, 一旦加密的數據存 儲在系統中,用戶在各種安全威脅下處于被動的地位。這些問題成為阻礙P2P存儲應用的 巨大障礙。
Reed-Soloraon碼是一種冗余編碼,它先把一個文件切分成m個數據碎片,然后經過算 法得到rXm個碎片,其中r是冗余度(r〉1)。在得到的rXm個碎片中,任意m個碎片都 可以用來恢復原來的文件。它的原理如下m個原始碎片可以被看作是一個向量,用D-W,Z)2,…,Q,)表示,Di表示第i個數據碎片。
編碼函數Enc把這m個碎片編碼成n(n=r Xm)個碎片,
£"c(Z)) = £, £ = (£p£2, ...,£,,).
Reed-Solomon碼的實現是通過構造一個mXn的矩陣G,稱為生成矩陣,編碼函數可以 表示成矩陣乘法
解碼函數也可以描述成矩陣乘法,其中£'是編碼后的n個碎片組成的向量E中任意的m個 碎片組成的向量,矩陣D是生成矩陣G的一個mXm子矩陣,其包含G中f'所含信息塊編 號對應的m個列。矩陣D的逆矩陣D—'稱為解密矩陣。解密過程可以表示為
= £'£)-'
在Reed-Solomon碼中矩陣G是固定的,G=(I」R(ni)x ) , 1 是一個mXm單位矩陣,R( —m) ^是(n-m)Xm的范德蒙或柯西矩陣。因此,任意用戶獲得m個碎片都可以解碼出源文件。 但在這種編碼方法中,由于沒有對原始碎片編碼,用戶可以看到存到本地機器上其他用戶 的原始碎片,因此這種編碼不保護用戶數據的私密性。
發明內容
為了解決P2P存儲系統中的上述的問題,本發明提供了一種新穎的安全冗余編碼方案 SEC(Secure Erasure Code) 。 SEC具有的復合的多層加密強度,比傳統加密算法更好地保 障了數據的安全性,同時能夠對數據作冗余,保障數據可靠性。
本發明是一種基于Reed-Solomon碼的編碼方案,改進之處是通過用戶給定的密碼來 構造矩陣G,使得在不知道用戶密碼的情況下,猜測矩陣G的復雜度近似于猜測用戶密碼的 復雜度,并利用點對點網絡的特點,通過碎片不相關命名分發,使數據有高的安全性。
本發明是這樣實現的,包括以下步驟
加密過程,如圖1所示
為了把源數據從m個碎片編碼到n (n=rXm)個碎片,我們需要產生一個m行n列的一 個產生矩陣G。這個矩陣G必須滿足的性質是它的不包含任意(m-1) X (m-1)的線性 相關子矩陣。柯西矩陣是滿足這種矩陣的一種。構造柯西矩陣只需要產生兩個向量X (m 個元素),Y (n個元素).并且向量中的元素兩兩不等。
1) 根據用戶輸入的密鑰key和用戶要求的冗余度r,產生加密矩陣G。
2) 通過矩陣G把原始數據編碼成rXm個加密數據碎片。
3)對碎片命名,使不同的碎片具有獨立的名字,分發到點對點存儲系統中,這樣做的 目的是減少碎片的聯系性,使惡意的用戶得到其他用戶的一個碎片后,很難在點對 點網絡中找到該用戶其他的相關碎片。
解密過程,如圖2所示
1) 當用戶要想讀取自己的數據,重新生成數據碎片的名字,根據碎片名從點對點存 儲系統收集m個碎片。
2) 根據密鑰key構造出與加密矩陣對應的解密矩陣D-',就可以解密得到原數據。 本發明的技術效果是
1) 本發明是一套針對P2P存儲系統的完整的編碼方案,它結合了P2P存儲系統的特征 和底層協議,能夠同時保證數據的安全性和可靠性,解決了現有技術方案在P2P存 儲系統應用屮的不足,而一般意義上的Reed-Solomon碼只是一種冗余碼。
2) 為了保證數據的安全性,本發明使用用戶給定的密碼來隨機生成構造矩陣G的方法, 實現了對數據的加密。 一般意義上的Reed-Solomon碼中矩陣G是固定的,不具有 加密的性質。
3) 本發明結合了 P2P存儲系統底層的數據分發協議,對數據采用了不相關命名分發, 隱藏了數據的關聯性,使攻擊者無法找出一個數據碎片的其他關聯數據碎片,從而 無法解密原數據。
圖1是加密數據過程的流程圖; 圖2是解密數據過程的流程圖; 圖3是構造加密矩陣過程的流程圖4表示本發明的分布式安全評測結果,表示需要猜測的次數隨N、 m變化的圖,縱軸
為所需猜測次數10g2后的值;
圖5表示在用戶密鑰長度為128、 192、 256比特時,SEC和AES的速度比較結果。
具體實施例方式
以下結合附圖,通過具體實施例更詳細地描述本發明,但該實施例不應理解為對本發 明的限制。
1.產生加密矩陣G
1)伽羅瓦域
為了避免運算后的結果超出計算機能夠表示的范圍,我們所有的運算都是定義在伽羅
瓦域上的,伽羅瓦域上的加、減、乘、除都是封閉的,一個有2'個元素的伽羅瓦域示為GF(2')。
2)柯西矩陣
為了能夠使冗余后的rXm個碎片中任意m個碎片就能夠解碼出原數據,就必須要求矩 陣G的任意m行構成的子矩陣線性無關。柯西矩陣滿足這個性質,下面給出柯西矩陣定義:
",K,xJ和"'K,;U是伽羅瓦域GfY2。.上兩個元素集合,它們滿足下面幾條約束
<formula>formula see original document page 7</formula>
則矩陣
<formula>formula see original document page 7</formula>
稱為是伽羅瓦域GF(2L).上的柯西矩陣。 3)矩陣G的構造
構造矩陣G,根據柯西矩陣的定義,關鍵是構造"乂,&}和",K,W序列。我們根據
用戶輸入的密鑰來構造。這里,我們要求密鑰的長度lw;是m+n (這里n是最終得到的碎 片數)的整數倍,也即<formula>formula see original document page 7</formula>這時,密鑰key就可以被切分成m+n個元素。 如圖3所示,加密矩陣G的構造過程如下
A. 將密鑰key等分地切分成m+n個元素,每個元素是長為L的字符串,然后按二進 制轉換為十進制,把每個切分的字符轉換為域里的元素。例如b3,—個長為12 比特位的key: 100101001111切分成4個元素,則切分方法為100U00|000| 111。 得到的4個字符串元素為[100, 100, 000, 111],轉換為域里的元素為[4,4,0,7].
B. 切分后的m+n個元素可能有元素相等,為了滿足柯西矩陣的要求,我們把相等的 數隨機映射到域里其他的元素,隨機映射通過偽隨機算法實現。即當切分后的序 列E[l,…,m+n]有元素相等時,把重復的元素作為種子,不斷隨機地產生域里的 數來替換重復的數,直到沒有重復元素為止。算法的偽代碼描述如下-vector E一m+n elements; for i一lto(m+n)
if (there exits prior element E[j]) && (E[i] = = E[j])
setSeed (E[i]);
do
E[i]—Random(2L - 1); until no prior element equals E[i]; 例如步驟A中切分后得到的序列[4,4,0,7],有兩個元素都為4,則把4設為偽隨 機函數的種子,產生一個隨機數,比如6,則域為[4, 6, 0, 7]。如果產生的隨機數 和序列中的某個元素相同,則繼續產生一個隨機數,直到不等為止。 C.根據下面的柯西矩陣的構造規則,來構造加密矩陣G。
本領域的技術人員應當理解,本實施例中采用柯西矩陣是為了滿足線性不相關的條 件。因此,除柯西矩陣以外的其他能夠滿足線性不相關的矩陣,例如范德蒙矩陣也能夠實 現本發明的目的。
2.數據片加密
數據的加密過程與一般意義上的Reed-Solomon碼加密過程相同,利用矩陣乘法把m 個數據片加密成rXm個加密數據片
<formula>formula see original document page 8</formula>
3.數據片命名
為了保證整個數據的安全和可靠性,我們把每個碎片都分別獨立存儲到一個用戶機器 上,這樣假如攻擊者獲得不到足夠的碎片,就不能看到原數據的任何信息。在點對點存儲
系統中,數據的存儲通常是根據文件名來存儲的。以下說明根據文件名存儲數據的過程
點對點存儲系統中,每一個節點都用一個唯一的編號(nodeld)來標識。當一個用戶存 儲文件時,首先通過單向散列函數(如MD5、 SHA1)對文件名作哈希,得到一個文件的鍵值, 不同的文件名會得到不同的鍵值。然后,把文件存儲到滿足節點編號nodeld等于鍵值的 節點上,即nodeld = Hash(file name)。如果沒有這樣的節點,就把文件存儲到節點編 號與鍵值相差最小的節點上。
那么為了不使攻擊者輕易獲得數據,我們就必須為數據的不同碎片命名不同的名字, 并且名字間盡量不存在相關性,也就是說,攻擊者不會通過一個碎片的名字就輕易地猜出 其他碎片的名字。
我們使用單向散列函數H(如MD5或者SHA1)來隱藏原數據任意兩個碎片之間的聯 系。這里我們利用SHA1。此外,我們需要一個字符串V和一個密鑰k、.字符串V可以是 原數據的某些屬性,如原數據的路徑,"可以是產生加密矩陣的密鑰key,但為了安全性, 通常不建議用相同的密鑰,建議用戶指定的其他的命名密鑰。第i個碎片的文件名f,產生 的方法如下i=l, 2,…'n (ll是連接符):
每個碎片命名后存儲在一個獨立的點上。當攻擊者獲得一個碎片后,由于他無法知道 用戶命名碎片時的字符串V和密鑰k、,他就無法猜到其他碎片的名字,因此無法知道該數 據的其他碎片存在哪個節點上,因此也就無法收集到足夠多的碎片來解密原數據。
4.數據片解密
1) 收集碎片
當用戶希望從點對點存儲系統讀取數據時,首先根據自己命名數據時的字符串V和密 鑰fe,得到每個碎片的名字,并對碎片名字作哈希得到數據碎片的鍵值,然后根據鍵值找 到存放數據的節點,從而收集到至少m個碎片,E,,,^^..,^^
2) 根據碎片和密鑰key生成解密矩陣
用戶根據自己的密鑰key,構造矩陣G,從而得到由......厶行組成的子矩陣D, D是
一個m行m列的方陣,并且根據柯西矩陣的性質,D也是一個柯西矩陣,因此我們可以直 接用以下公式求解可以矩陣的逆
<formula>formula see original document page 9</formula>
<formula>formula see original document page 10</formula>"-^',刀表示矩陣D的逆矩陣D—1的第i行、第j列的元素,那么
<formula>formula see original document page 10</formula>
D—'就是我們所要構造的解密矩陣。 3)解密獲得原數據
獲得解密矩陣D—1后,原數據就可以通過解密矩陣與加密數據片組成的向量E相乘得到, 解密方法如下<formula>formula see original document page 10</formula>
與其他加密方法不同,SEC算法提供三層的安全性。在點對點存儲系統中,攻擊者可 能會査看存儲到本地的碎片,期望看到數據的部分信息,或者在P2P存儲系統中,收集該 數據的足夠多的碎片,來解密出原數據。下面我們從三層的安全上來分析用戶數據的安全 性,并說明SEC方案為什么能夠解決現有技術方案不能解決的問題。
安全性分析
第l層.碎片級的安全
原數據片通過加密矩陣加密后,每個碎片都是加密的,攻擊者看不到用戶原數據的任
何信息,并且從加密矩陣的性質和解密的過程可以看出,攻擊者如果不能收集到至少m個 碎片,他就無法解密出任何一個碎片的信息。因此,在攻擊者沒有獲得m個碎片以前,碎 片是理論上安全的,也就是說在理論上是不可破解,即使有無限的計算能力。
第2層.碎片的分散安全性
攻擊者為了能夠收集到m個碎片去解密用戶的加密碎片, 一種方法是猜測用戶命名時 所用的字符串V和密鑰Key,如果V和Key共^v.比特長,那么這種方法需要猜測2AA/次。
另一種方法是攻擊者在點對點存儲系統中遍歷所有碎片來猜測所需的數據片,這種方法需
要的猜測次數為e(iV'W),其中,N為存儲系統中碎片的個數,r為用戶要求的冗余度, C(/-*w,m)
這種方法的猜測次數隨著N和m的增大而增大。圖4給出了需要猜測的次數隨N、 m變化 的圖,縱軸為所需猜測次數1og2后的值。第2層的安全強度是兩種攻擊方法所需猜測次 數的最小值,即
min{——^-^",2'、}
從圖4中可以看到,當N很大時,碎片分散的安全性已經非常高。 第3層.加密矩陣的安全
即使攻擊者能夠收集到m個碎片,他要想解密數據,根據解密方法,還必須知道解密 矩陣D。這就要猜測生成解密矩陣D—'的2m個數以及他們的所有可能排列,r是冗余度。猜 測的復雜度為
<formula>formula see original document page 11</formula> 當L》m時,P(2、 2m)就近似于2W'"。如果冗余度為一,即Fl,那么LX2m就是用戶 key的長度。也就是,加密矩陣的安全度近似于標準加密算法(如AES、 DES)的安全度。
經過上面的分析,我們看到SEC具有三層的安全保證,對于蠻力攻擊, 一個攻擊者需 要試的次數為
<formula>formula see original document page 11</formula>
經過上面的分析我們可以看出,這個次數是非常巨大的。其強度也是傳統加密算法所無 法比擬的。
對傳統方法中存在的問題解決
(1) 如果攻擊者想窺探存儲他機器上的數據碎片,由于SEC方案的第1層安全保證了 碎片個數低于閾值(m)時,任意碎片都是理論上安全的,即無法通過計算來解出。因此, 當攻擊者只有本地的數據時,即使獲得密鑰也是無法窺探到原數據的任何一點信息。為了 能夠窺探數據,攻擊者必須到系統中收集到至少m個碎片,然而,SEC的第2層安全使攻 擊者在P2P存儲系統中收集到關聯的m個碎片是不可行的。
(2) 在SEC方案下,如果用戶發現自己的數據受到威脅,可以采取主動措施。他可以
刪除非攻擊者的機器上關聯的數據碎片,使一個文件在系統中數據碎片數目低于閾值。這
樣,即使攻擊者永久保留了部分數據,也是無法窺探到原數據的任何信息,因為此時,由 SEC的第1層安全性可知,這個數據是理論上安全的。
性能分析
我們分別用SEC和現在標準的加密算法AES(JAVA中標準實現)來加密一個100M的數據 文件,然后分別在用戶密鑰長度為128、 192、 256比特時,比較SEC和AES的速度,結果 如圖5所示,從圖可以看出,SEC的加密速度都要在三種情況下都具有較高的效率。
以上是本發明方法步驟以及方法安全性和性能分析,可以看到,通過結合點對點存儲 系統的特點,我們提出的安全冗余編碼方案極大提高了數據的安全性,可靠性,并比現在 使用的標準加密算法具有更高的性能。
權利要求
1.一種點對點存儲系統編碼方法,包括下列加密步驟(1)根據用戶輸入的密鑰key和用戶要求的冗余度r,產生加密矩陣G;(2)通過矩陣G把原始數據編碼成r×m個加密數據碎片;(3)對碎片命名,使不同的碎片具有獨立的名字,分發到點對點存儲系統中。
2. 如權利要求1所述的點對點存儲系統編碼方法,其特征在于,所述產生加密 矩陣的具體方法是-(11) 將密鑰key等分地切分成m+n個元素,每個元素是長為L的字符串,然 后按二進制轉換為十進制,把每個切分的字符轉換為伽羅瓦域里的元素,其中n是 最終得到的碎片數(12) 如果切分后的m+n個元素中有相等的元素,則把相等的數隨機映射到伽 羅瓦域里其他的元素,直到沒有重復元素為止,隨機映射通過偽隨機算法實現;(13) 根據下面構造規則,來構造加密矩陣G:<formula>complex formula see original document page 2</formula>其中,向量x對應m, y對應n。
3. 如權利要求1所述的點對點存儲系統編碼方法,其特征在于,所述步驟(2) 是采用Reed-Solomon碼編碼方法,利用矩陣乘法把m個數據片加密成r Xm個加密 數據片。
4. 如權利要求1所述的點對點存儲系統編碼方法,其特征在于,所述歩驟(3) 中對文件命名的步驟包括首先通過單向散列函數對文件名作哈希,得到一個文件 的鍵值,然后把文件存儲到滿足節點編號nodeld等于鍵值的節點上,如果沒有這 樣的節點,就把文件存儲到節點編號與鍵值相差最小的節點上。
5. 如權利要求4所述的點對點存儲系統編碼方法,其特征在于,所述的文件名 的產生方式為-<formula>complex formula see original document page 2</formula>其中,fi是文件名,v是代表原數據的某些屬性的字符串,k、是命名密鑰,由用戶指定。
6. —種與權利要求1一5對應的數據解密方法,包括下列解密步驟- (4) 當用戶要想讀取自己的數據,重新生成數據碎片的名字,根據碎片名從點 對點存儲系統收集m個碎片;(5) 根據密鑰key構造出解密矩陣D—',就可以解密得到原數據,其中,D是產 生矩陣G的一個子矩陣。
7. 如權利要求6的解密方法,其特征在于,所述的步驟(4)包括用戶根據 自己命名數據時的代表原數據屬性的字符串V和命名密鑰k ,得到每個碎片的名 字,并對碎片名字作哈希得到數據碎片的鍵值,然后根據鍵值找到存放數據的節點, 從而收集到至少m個碎片。
8. 如權利要求6的解密方法,其特征在于,所述的解密矩陣D對應于用戶收集到 的碎片集合,如果ffl戶收集到的m個碎片編號為(i,,b,...U,那么由矩P車G的第i,,i2,.,.im列組成 的m行m列的亍矩陣就是D。
全文摘要
一種基于點對點存儲系統編碼方法,包括下列加密步驟1)根據用戶輸入的密鑰key和用戶要求的冗余度r,產生加密矩陣G;2)通過矩陣G把原始數據編碼成r×m個加密數據碎片;3)對碎片命名,使不同的碎片具有獨立的名字,分發到點對點存儲系統中;和下列解密步驟4)當用戶要想讀取自己的數據,重新生成數據碎片的名字,根據碎片名從點對點存儲系統收集m個碎片;5)根據密鑰key構造出與加密矩陣G相對應的解密矩陣D<sup>-1</sup>,就可以解密得到原數據。本發明結合了P2P存儲系統的特征和底層協議,能夠同時保證數據的安全性和可靠性,解決了現有技術方案在P2P存儲系統應用中的不足。
文檔編號H04L9/30GK101192924SQ20061014531
公開日2008年6月4日 申請日期2006年11月24日 優先權日2006年11月24日
發明者代亞非, 智 楊, 敬 田 申請人:北京大學