基于Reed-Solomon码的P2P存储系统编码方法

文档序号:7970917阅读:261来源:国知局
专利名称:基于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日
发明者代亚非, 智 杨, 敬 田 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1