首页> 中国专利> 基于Reed-Solomon码的P2P存储系统编码方法

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

摘要

一种基于点对点存储系统编码方法,包括下列加密步骤:1)根据用户输入的密钥key和用户要求的冗余度r,产生加密矩阵G;2)通过矩阵G把原始数据编码成r×m个加密数据碎片;3)对碎片命名,使不同的碎片具有独立的名字,分发到点对点存储系统中;和下列解密步骤:4)当用户要想读取自己的数据,重新生成数据碎片的名字,根据碎片名从点对点存储系统收集m个碎片;5)根据密钥key构造出与加密矩阵G相对应的解密矩阵D-1,就可以解密得到原数据。本发明结合了P2P存储系统的特征和底层协议,能够同时保证数据的安全性和可靠性,解决了现有技术方案在P2P存储系统应用中的不足。

著录项

  • 公开/公告号CN101192924A

    专利类型发明专利

  • 公开/公告日2008-06-04

    原文格式PDF

  • 申请/专利权人 北京大学;

    申请/专利号CN200610145311.2

  • 发明设计人 田敬;杨智;代亚非;

    申请日2006-11-24

  • 分类号H04L9/30(20060101);G06F17/30(20060101);

  • 代理机构北京君尚知识产权代理事务所;

  • 代理人陈美章

  • 地址 100871 北京市海淀区颐和园路5号

  • 入库时间 2023-12-17 20:15:19

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-01-06

    未缴年费专利权终止 IPC(主分类):H04L9/30 授权公告日:20110126 终止日期:20141124 申请日:20061124

    专利权的终止

  • 2011-01-26

    授权

    授权

  • 2008-07-30

    实质审查的生效

    实质审查的生效

  • 2008-06-04

    公开

    公开

说明书

技术领域

本发明属于点对点网络技术领域,具体涉及一种适用于点对点存储系统中的数据编码方法,能够保证高的数据安全性和可靠性,同时又有较小的计算开销。

背景技术

点对点(P2P)存储系统是一种基于点对点网络的分布式文件存储系统,用户通过网络把数据存储到其他的用户节点上,而非本地硬盘上。每个节点的地位是对等的,一个节点既是使用系统存取文件的客户,同时也是系统中提供存储空间资源的服务器。从而通过收集利用用户闲散资源,构建大规模的存储系统。最近几年,国际上不断出现许多点对点存储系统,如[OCEANSTORE][CFS][PAST][FAESITE]等。

在P2P存储系统中,用户的数据是存储在其他不可信的用户磁盘上,并且系统中的用户可能随时离开系统。这对于在P2P存储系统中,如何保证用户的数据安全性和可靠性带来了极大的挑战。

为了解决上面的问题,现有的系统[OCEANSTORE][CFS][PAST][FAESITE]主要采用以下方法:先采用传统的加密算法(DES、AES)来对用户的数据加密,从而保证用户数据的私密性;然后,再对加密后的数据采用副本或者纠删码(Erasure Code)的方式做冗余。然而,这种方法在P2P存储系统中是有很大缺陷的。P2P存储系统与传统的客户/服务器存储系统不同的是:用户的数据存储在其他用户的机器上,而不是存储在有集中管理的服务器上。因此,现有的P2P存储系统单靠数据加密来保证用户数据的安全性会带来下面两个问题:

(1)由于数据是长期存储在他人的机器上,如果密钥丢失或者传统的加密算法被发现存在弱点,攻击者就能够通过存储在他们机器上的数据发现其他用户的私密数据。(2)即使一个用户发现自己的数据受到安全威胁(如泄露了密钥或加密算法强度被发现不足),他也无法完全删除存储在攻击者机器上的数据来最小化自己的损失。那么,一旦加密的数据存储在系统中,用户在各种安全威胁下处于被动的地位。这些问题成为阻碍P2P存储应用的巨大障碍。

Reed-Solomon码是一种冗余编码,它先把一个文件切分成m个数据碎片,然后经过算法得到r×m个碎片,其中r是冗余度(r>1)。在得到的r×m个碎片中,任意m个碎片都可以用来恢复原来的文件。它的原理如下:

m个原始碎片可以被看作是一个向量,用D=(D1,D2,...,Dm)表示,Di表示第i个数据碎片。编码函数Enc把这m个碎片编码成n(n=r×m)个碎片,

Enc(D)=E,E=(E1,E2,...,En).

Reed-Solomon码的实现是通过构造一个m×n的矩阵G,称为生成矩阵,编码函数可以表示成矩阵乘法

Enc(D)=EG

解码函数也可以描述成矩阵乘法,其中E’是编码后的n个碎片组成的向量E中任意的m个碎片组成的向量,矩阵D是生成矩阵G的一个m×m子矩阵,其包含G中E′所含信息块编号对应的m个列。矩阵D的逆矩阵D-1称为解密矩阵。解密过程可以表示为:

Dec(E′)=E′D-1

在Reed-Solomon码中矩阵G是固定的,G=(Im|R(n-m)×n),Im是一个m×m单位矩阵,R(n-m)×n是(n-m)×m的范德蒙或柯西矩阵。因此,任意用户获得m个碎片都可以解码出源文件。但在这种编码方法中,由于没有对原始碎片编码,用户可以看到存到本地机器上其他用户的原始碎片,因此这种编码不保护用户数据的私密性。

发明内容

为了解决P2P存储系统中的上述的问题,本发明提供了一种新颖的安全冗余编码方案SEC(Secure Erasure Code)。SEC具有的复合的多层加密强度,比传统加密算法更好地保障了数据的安全性,同时能够对数据作冗余,保障数据可靠性。

本发明是一种基于Reed-Solomon码的编码方案,改进之处是通过用户给定的密码来构造矩阵G,使得在不知道用户密码的情况下,猜测矩阵G的复杂度近似于猜测用户密码的复杂度,并利用点对点网络的特点,通过碎片不相关命名分发,使数据有高的安全性。

本发明是这样实现的,包括以下步骤:

加密过程,如图1所示:

为了把源数据从m个碎片编码到n(n=r×m)个碎片,我们需要产生一个m行n列的一个产生矩阵G。这个矩阵G必须满足的性质是:它的不包含任意(m-1)×(m-1)的线性相关子矩阵。柯西矩阵是满足这种矩阵的一种。构造柯西矩阵只需要产生两个向量X(m个元素),Y(n个元素).并且向量中的元素两两不等。

1)根据用户输入的密钥key和用户要求的冗余度r,产生加密矩阵G。

2)通过矩阵G把原始数据编码成r×m个加密数据碎片。

3)对碎片命名,使不同的碎片具有独立的名字,分发到点对点存储系统中,这样做的目的是减少碎片的联系性,使恶意的用户得到其他用户的一个碎片后,很难在点对点网络中找到该用户其他的相关碎片。

解密过程,如图2所示:

1)当用户要想读取自己的数据,重新生成数据碎片的名字,根据碎片名从点对点存储系统收集m个碎片。

2)根据密钥key构造出与加密矩阵对应的解密矩阵D-1,就可以解密得到原数据。

本发明的技术效果是:

1)本发明是一套针对P2P存储系统的完整的编码方案,它结合了P2P存储系统的特征和底层协议,能够同时保证数据的安全性和可靠性,解决了现有技术方案在P2P存储系统应用中的不足,而一般意义上的Reed-Solomon码只是一种冗余码。

2)为了保证数据的安全性,本发明使用用户给定的密码来随机生成构造矩阵G的方法,实现了对数据的加密。一般意义上的Reed-Solomon码中矩阵G是固定的,不具有加密的性质。

3)本发明结合了P2P存储系统底层的数据分发协议,对数据采用了不相关命名分发,隐藏了数据的关联性,使攻击者无法找出一个数据碎片的其他关联数据碎片,从而无法解密原数据。

附图说明

图1是加密数据过程的流程图;

图2是解密数据过程的流程图;

图3是构造加密矩阵过程的流程图;

图4表示本发明的分布式安全评测结果,表示需要猜测的次数随N、m变化的图,纵轴为所需猜测次数log2后的值;

图5表示在用户密钥长度为128、192、256比特时,SEC和AES的速度比较结果。

具体实施方式

以下结合附图,通过具体实施例更详细地描述本发明,但该实施例不应理解为对本发明的限制。

1.产生加密矩阵G

1)伽罗瓦域:

为了避免运算后的结果超出计算机能够表示的范围,我们所有的运算都是定义在伽罗瓦域上的,伽罗瓦域上的加、减、乘、除都是封闭的,一个有2L个元素的伽罗瓦域示为GF(2L)。

2)柯西矩阵:

为了能够使冗余后的r×m个碎片中任意m个碎片就能够解码出原数据,就必须要求矩阵G的任意m行构成的子矩阵线性无关。柯西矩阵满足这个性质,下面给出柯西矩阵定义:

{x1,K,xm}和{y1,K,yn}是伽罗瓦域GF(2L).上两个元素集合,它们满足下面几条约束:

(1),xixji,j{1,K,m},ij

(2),yiyji,j{1,K,n},ij

(3),xiyji{1,K,m},j{1,K,n}

则矩阵

1x1+y11x1+y2L1x1+yn1x2+y11x2+y2LL1x2+ynMMOM1xm+y11xm+y2L1xm+yn

称为是伽罗瓦域GF(2L).上的柯西矩阵。

3)矩阵G的构造:

构造矩阵G,根据柯西矩阵的定义,关键是构造{x1,K,xm}和(y1,K,yn}序列。我们根据用户输入的密钥来构造。这里,我们要求密钥的长度lKG是m+n(这里n是最终得到的碎片数)的整数倍,也即L=lKG/(m×(r+1))。这时,密钥key就可以被切分成m+n个元素。如图3所示,加密矩阵G的构造过程如下:

A.将密钥key等分地切分成m+n个元素,每个元素是长为L的字符串,然后按二进制转换为十进制,把每个切分的字符转换为域里的元素。例如:L=3,一个长为12比特位的key:100101001111切分成4个元素,则切分方法为100|100|000|111。得到的4个字符串元素为[100,100,000,111],转换为域里的元素为[4,4,0,7].

B.切分后的m+n个元素可能有元素相等,为了满足柯西矩阵的要求,我们把相等的数随机映射到域里其他的元素,随机映射通过伪随机算法实现。即当切分后的序列E[1,…,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。

G[i,j]=1xi+yj

本领域的技术人员应当理解,本实施例中采用柯西矩阵是为了满足线性不相关的条件。因此,除柯西矩阵以外的其他能够满足线性不相关的矩阵,例如范德蒙矩阵也能够实现本发明的目的。

2.数据片加密

数据的加密过程与一般意义上的Reed-Solomon码加密过程相同,利用矩阵乘法把m个数据片加密成r×m个加密数据片:

1x1+y11x1+y2L1x1+ym1x2+y11x2+y2LL1x2+ymMMOM1xr*m+y11xr*m+y2L1xr*m+ymD1D2D3MDm=E1E2E3MMMEr*m

3.数据片命名

为了保证整个数据的安全和可靠性,我们把每个碎片都分别独立存储到一个用户机器上,这样假如攻击者获得不到足够的碎片,就不能看到原数据的任何信息。在点对点存储系统中,数据的存储通常是根据文件名来存储的。以下说明根据文件名存储数据的过程:

点对点存储系统中,每一个节点都用一个唯一的编号(nodeId)来标识。当一个用户存储文件时,首先通过单向散列函数(如MD5、SHA1)对文件名作哈希,得到一个文件的键值,不同的文件名会得到不同的键值。然后,把文件存储到满足节点编号nodeId等于键值的节点上,即nodeId=Hash(file name)。如果没有这样的节点,就把文件存储到节点编号与键值相差最小的节点上。

那么为了不使攻击者轻易获得数据,我们就必须为数据的不同碎片命名不同的名字,并且名字间尽量不存在相关性,也就是说,攻击者不会通过一个碎片的名字就轻易地猜出其他碎片的名字。

我们使用单向散列函数H(如MD5或者SHA1)来隐藏原数据任意两个碎片之间的联系。这里我们利用SHA1。此外,我们需要一个字符串V和一个密钥kN.字符串V可以是原数据的某些属性,如原数据的路径,kN可以是产生加密矩阵的密钥key,但为了安全性,通常不建议用相同的密钥,建议用户指定的其他的命名密钥。第i个碎片的文件名fi产生的方法如下i=1,2,…,n(||是连接符):

fi=H(fi-1||kN||V)f0=

每个碎片命名后存储在一个独立的点上。当攻击者获得一个碎片后,由于他无法知道用户命名碎片时的字符串V和密钥kN,他就无法猜到其他碎片的名字,因此无法知道该数据的其他碎片存在哪个节点上,因此也就无法收集到足够多的碎片来解密原数据。

4.数据片解密

1)收集碎片:

当用户希望从点对点存储系统读取数据时,首先根据自己命名数据时的字符串V和密钥kN,得到每个碎片的名字,并对碎片名字作哈希得到数据碎片的键值,然后根据键值找到存放数据的节点,从而收集到至少m个碎片,Ej1,Ej2,...,Ejm

2)根据碎片和密钥key生成解密矩阵:

用户根据自己的密钥key,构造矩阵G,从而得到由j1,j2,......jm行组成的子矩阵D,D是一个m行m列的方阵,并且根据柯西矩阵的性质,D也是一个柯西矩阵,因此我们可以直接用以下公式求解可以矩阵的逆:

ai=Πk<i(xk-xi)Πi<l(xi-xl)bi=Πk<i(yk-xi)Πi<l(yi-yl)

ei=Πk=1n(xi+yk)fi=Πk=1n(yi+xk)

D-1[i,j]表示矩阵D的逆矩阵D-1的第i行、第j列的元素,那么

D-1[i,j]=(-1)i+jejfiajbi(xj+yi)

D-1就是我们所要构造的解密矩阵。

3)解密获得原数据:

获得解密矩阵D-1后,原数据就可以通过解密矩阵与加密数据片组成的向量E相乘得到,解密方法如下:

D1D2D3MDm=1x1+y11x1+y2L1x1+ym1x2+y11x2+y2LL1x2+ymMMOM1xm+y11xr*m+y2L1xr*m+ymEj1Ej2Ej3MEjm

与其他加密方法不同,SEC算法提供三层的安全性。在点对点存储系统中,攻击者可能会查看存储到本地的碎片,期望看到数据的部分信息,或者在P2P存储系统中,收集该数据的足够多的碎片,来解密出原数据。下面我们从三层的安全上来分析用户数据的安全性,并说明SEC方案为什么能够解决现有技术方案不能解决的问题。

安全性分析

第1层.碎片级的安全:

原数据片通过加密矩阵加密后,每个碎片都是加密的,攻击者看不到用户原数据的任何信息,并且从加密矩阵的性质和解密的过程可以看出,攻击者如果不能收集到至少m个碎片,他就无法解密出任何一个碎片的信息。因此,在攻击者没有获得m个碎片以前,碎片是理论上安全的,也就是说在理论上是不可破解,即使有无限的计算能力。

第2层.碎片的分散安全性:

攻击者为了能够收集到m个碎片去解密用户的加密碎片,一种方法是猜测用户命名时所用的字符串V和密钥Key,如果V和Key共kN.比特长,那么这种方法需要猜测2kN.次。另一种方法是攻击者在点对点存储系统中遍历所有碎片来猜测所需的数据片,这种方法需要的猜测次数为其中,N为存储系统中碎片的个数,r为用户要求的冗余度,这种方法的猜测次数随着N和m的增大而增大。图4给出了需要猜测的次数随N、m变化的图,纵轴为所需猜测次数log2后的值。第2层的安全强度是两种攻击方法所需猜测次数的最小值,即

min{C(N,m)C(r*m,m),2lkN}

从图4中可以看到,当N很大时,碎片分散的安全性已经非常高。

第3层.加密矩阵的安全:

即使攻击者能够收集到m个碎片,他要想解密数据,根据解密方法,还必须知道解密矩阵D。这就要猜测生成解密矩阵D-1的2m个数以及他们的所有可能排列,r是冗余度。猜测的复杂度为

P(2L,2m)=P(2lk(1+r)×m,2m)

当L>>m时,P(2L,2m)就近似于2L*2m。如果冗余度为一,即r=1,那么L×2m就是用户key的长度。也就是,加密矩阵的安全度近似于标准加密算法(如AES、DES)的安全度。

经过上面的分析,我们看到SEC具有三层的安全保证,对于蛮力攻击,一个攻击者需要试的次数为

min{C(N,m)C(n,m),2lkN}*P(2lk(1+r)×m,2m)

经过上面的分析我们可以看出,这个次数是非常巨大的。其强度也是传统加密算法所无法比拟的。

对传统方法中存在的问题解决:

(1)如果攻击者想窥探存储他机器上的数据碎片,由于SEC方案的第1层安全保证了碎片个数低于阈值(m)时,任意碎片都是理论上安全的,即无法通过计算来解出。因此,当攻击者只有本地的数据时,即使获得密钥也是无法窥探到原数据的任何一点信息。为了能够窥探数据,攻击者必须到系统中收集到至少m个碎片,然而,SEC的第2层安全使攻击者在P2P存储系统中收集到关联的m个碎片是不可行的。

(2)在SEC方案下,如果用户发现自己的数据受到威胁,可以采取主动措施。他可以删除非攻击者的机器上关联的数据碎片,使一个文件在系统中数据碎片数目低于阈值。这样,即使攻击者永久保留了部分数据,也是无法窥探到原数据的任何信息,因为此时,由SEC的第1层安全性可知,这个数据是理论上安全的。

性能分析

我们分别用SEC和现在标准的加密算法AES(JAVA中标准实现)来加密一个100M的数据文件,然后分别在用户密钥长度为128、192、256比特时,比较SEC和AES的速度,结果如图5所示,从图可以看出,SEC的加密速度都要在三种情况下都具有较高的效率。

以上是本发明方法步骤以及方法安全性和性能分析,可以看到,通过结合点对点存储系统的特点,我们提出的安全冗余编码方案极大提高了数据的安全性,可靠性,并比现在使用的标准加密算法具有更高的性能。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号