借鉴P2P的思想实现了一个基于集群的安全存储系统,并介绍了构建在该存储体系结构之上的一种数据安全存取方案。引入基于共享鉴别密钥的鉴别机制,以确保用户数据的授权访问,防止未授权用户的阅读和修改。系统采用广泛用于加/解密技术中的SHA-1算法作为密码校验函数,与采用数字签名鉴别机制相比,该算法具有较高的性能。初步分析和实验表明,该系统在现实条件下,在消耗较低的维护带宽的同时维持了较高的可靠性,并提供了较好的读写性能。
近几年来,基于P2P技术的分布式存储系统[1,2]已经成为一个研究热点。广域网中的分布式文件存储系统能够更好地为用户提供文件存储服务,使用户可以随时随地访问存放在网上的数据,并且能够为文件共享、多用户之间的协作提供支持。基于P2P构建的分布式文件存储系统,一般都是面向广域网提供大规模网络存储服务,利用其分布在广域网上的大量服务器为用户提供安全的、可靠的和高效的存储访问服务。P2P强调的是对等服务,不区分服务器和客户端,每个节点在索取其他节点服务的同时,也与其他节点相配合提供相同的服务,每个参与节点的位置均相等。借鉴P2P技术的思想,采用高速网络将普通PC机相连成一个可扩展集群存储系统方案[3~B6]相对于价格昂贵的大型磁盘阵列,具有极高的性能价格比。
基于以上现状,本文提出了一个基于集群的安全存储系统设计[3]。在以前的研究工作中[7]解决了集群存储系统的数据容错问题。本文致力于解决集群存储系统的信息安全性问题,保证存储系统中的数据只被合法用户读写。
1系统架构
集群存储系统将局域网内单个PC上的存储资源整合成具有统一逻辑视图的高性能存储系统。如图1所示,系统中的存储节点是一台PC机,每个节点运行Linux操作系统,通过局域网将各个节点连接起来,构成一个存储实体,对外提供存储服务。图中LAN1的主要功能是实现节点之间的数据备份和恢复,以及节点的全局管理等;LAN2则起到用户之间进行数据交换的作用。LAN通过高速以太网连接,采用通用的TCP/IP协议通信形成一个集群存储系统。
在图1的体系结构中,本地主机上装有存储虚拟化的客户端存储代理软件SA(storage agent)。用户的请求由驻留在客户端的这些SA截获,并将请求发送给适当的存储节点。应用程序访问数据对象的步骤如下:a)将用户可理解的数据对象的名字通过一个目录服务器解析为数据对象的惟一标志DOID(data object identification);b)将DOID作为伪随机函数的种子提交给本地客户端存储代理SA,返回数据对象的位置;c)用户直接与选中的存储节点连接,完成数据的读写请求。
2安全存取机制
系统数据安全性的增强主要取决于存储在各个节点的数据对象的安全性,只有授权的合法用户有权存取数据。假设用户从密钥对象中得到了对称加密密钥(RC5密钥),安全数据对象包含了足够的信息来保护其所包含数据的保密性和完整性。这就意味着即使恶意用户能够得到存储节点中的所有数据,或是嗅探到所有在网络上传输的数据,仍能够维持数据的保密性和完整性。
2.1主要数据结构
系统中主要有三个基本的数据结构,即安全数据对象包括加密的用户数据和元数据;密钥对象与一个或一组文件相关,保存各个用户用于解密文件数据的密钥;认证对象存储在每个存储节点上,用于决定一个特定的用户能否从一个数据对象中写或删除数据。
1)安全数据对象每个数据对象由两部分组成,即用户数据和元数据,如图2所示。用户数据是加密存储的。元数据包括文件id、用户id、文件相对应密钥文件id。HMAC(hashed message authentication code)字段用于证明数据的完整性和鉴别用户的合法性;IV(初始向量)用于防止相同数据在相同密钥加密时密文相同;timestamp字段用于防止hacker用一个已经存储过的文件来覆盖新的文件。
2)密钥对象每个密钥对象如图3所示,包括两种类型的信息。密钥对象的头部:key file id是系统中惟一的文件标志;用户标志域(uid)是指出最后一个修改密钥对象的用户。当用户修改了密钥对象后,对整个密钥对象用自己的私钥签名,将结果存放在signature中,这种机制能够防止非授权用户非法修改密钥文件。密钥对象主体信息是一组三元组,包括uid、encrypted key和权限位。Uid不仅可以是一个用户,还可以是几个用户或是一个用户组;encrypted key是一个对称密钥用于加解密文件,由用户的公钥加密;权限位类似于UNIX系统的权限位。一个密钥对象可以不仅仅对应一个文件,也可以是一组文件,这样这组文件都用同样的密钥加/解密。
3)认证对象每个存储节点包含一个认证对象,如图4所示。存储节点利用认证对象来鉴别用户,作出是否授权该用户的'写操作的判断。KeyMAC是一个共享密钥,以密文形式存储,用于HMAC生成及用户与存储节点之间的验证。当存储节点启动时,将认证对象调入内存,keyMAC被解密缓存在内存中。KeyPUB是用户的公钥,存储用户的公钥主要是为方便查找用户的公钥,而不用去求助于一个集中的密钥服务器。时戳字段在一个文件块被写入时更新,用于防止重演攻击。
uidkeyPUBkeyMACtimestamp
uidkeyPUBkeyMACtimestamp
…
gidkeyPUBkeyMACtimestamp
2.2鉴别机制
系统的主要目标是提供鉴别和加密的存储服务。加密和解密由客户端来完成,尽管不容易减少加/解密的时间开销,但是采用对称加密算法时间相对要快一些。目前的主要鉴别方法在安全性和速度上均有差别,最常用的是采用数字签名机制。但是数字签名是一个相对比较慢的操作,对用户和存储节点的CPU有较高的要求。本文提出一种基于密钥的哈希散列方法来保证整个系统的数据完整性。与数字签名方案相比,该方法具有相对较快的鉴别速度。
如图5所示,在读或写操作时,存储节点需要完成用户身份的鉴别。在本系统中,每个存储节点存有一个认证对象,其中存有各个用户的用户标志、公钥以及由存储节点加密的共享鉴别密钥所得的密文keyMAC和时戳信息。每个用户均与存储节点有一个共享鉴别密钥,这个鉴别密钥仅由用户和存储节点两方知道,用来完成用户身份的鉴别。每当一个新用户加入系统时,可以通过RSA加密机制将用户的鉴别密钥发送到每个存储节点,存储节点在收到加密的密文keyMAC之后,在认证对象中,为该用户添加一行信息。