doi:10.3969/j.issn.1671-1122.2021.01.009
基于GlusterFS的分布式数据完整性验证系统
张富成,付绍静,夏竟,罗玉川
(国防科技大学计算机学院,长沙 410073)
摘  要:云存储为用户提供了弹性而可靠的数据存储方案,使得用户可以在任何时刻通过网络访问云服务器存取数据,大大降低了用户自己维护数据的成本,但也引发了
一系列安全问题。对于云存储而言,采取审计措施用于检查数据的完整性至关重要,但
已有的大多数云数据完整性审计机制只是通过模拟实验证明了方案具有高效性,并未结
合具体云存储场景进行分析实验。针对上述问题,文章结合GlusterFS分布式文件系统
与BLS短签名机制设计了一种分布式并行数据审计方案。利用GlusterFS的多个存储节
点并行计算数据块所对应的标签,通过验证数据块对应标签的完整性来验证数据块的完
整性,实现数据的单块审计、多块审计、多用户审计和异步审计,且不会泄露用户的隐
私信息。此外,还进行了安全性分析。实验结果表明,文章方案可实现多块数据的高效
并行审计,且并发量随节点的增加而线性增长。
关键词:云存储;数据审计;BLS签名;GlusterFS;完整性验证
中图分类号:TP309  文献标志码: A  文章编号:1671-1122(2021)01-0072-08
中文引用格式:张富成,付绍静,夏竟,等.基于 GlusterFS 的分布式数据完整性验证系统[J].信息网络安全,2021,21(1):72-79.
英文引用格式:ZHANG Fucheng, FU Shaojing, XIA Jing, et al. GlusterFS-based Distributed Data Integrity Verification System[J]. Netinfo Security, 2021, 21(1): 72-79.
GlusterFS-based Distributed Data Integrity Verification System
ZHANG Fucheng, FU Shaojing, XIA Jing, LUO Yuchuan
(College of Computer Science, National University of Defense Technology, Changsha 410073, China)
Abstract: Cloud Storage provides users with a flexible and reliable data storage solution, which enables users to access data stored on the cloud server through network at any
time, greatly reducing the cost of data maintenance by users themselves, but it also causes a
series of security problems. For cloud storage, it is very important to take audit measures to
check the integrity of data, but most of the existing cloud data integrity audit mechanisms
only prove the efficiency of the proposed scheme through simulation experiments, and
do not analyze and experiment combining with specific cloud storage scenarios. To solve
above problems, this paper designs a distributed parallel data audit scheme based on the
收稿日期:2020-04-02
基金项目:国家自然科学基金[61872372]
作者简介:张富成(1994—),男,陕西,硕士研究生,主要研究方向为配对密码学与云存储;付绍静(1984—),男,江西,副教授,博士,主要研究方向为密码学与区块链;夏竟(1980—),男,四川,副教授,博士,主要研究方向为软件定义网络;罗玉川(1990—),男,四川,讲师,博士,主要研究方向为网络与信息安全。
通信作者:
GlusterFS distributed file system and BLS short signature mechanism, which uses multiple storage nodes of GlusterFS to calculate the corresponding labels of data blocks in parallel, and verify the integrity of data by verifying the integrity of the corresponding labels of data. The scheme realizes single block audit, multi-block audit, multi-user audit and asynchronous audit, and the privacy information of users could not be disclosed. In addition, the security analysis is carried out. The experimental results show that the scheme can achieve efficient parallel auditing of multi-block data, and the concurrent amount can increase linearly with the increase of nodes.
Key words: cloud storage; data auditing; BLS signature; GlusterFS; integrity verification
0 引言
随着云存储的发展,越来越多的企业或个人选择将数据存储到云端,这样可以降低用户自身维护存储设备的负担。但是由于数据不再由用户进行本地维护,用户失去了对数据的直接控制,从而引发了一系列的安全问题,存储在云端的数据可能遭受破坏而导致不完整。因此对于云存储而言,通过审计措施检查数据的完整性[1]至关重要。传统的云端数据完整性验证方案要么需要用户拥有一份数据的本地副本,要么需要将数据完全下载到本地后再进行验证,这些方式需要较大的存储开销或通信开销,在分布式存储模式下,文件容量巨大,显然已经不再适用。尽管目前有一系列数据审计方案被提出,但这些方案并没有结合具体的高性能文件系统来进行分析。
文献[2,3]提出一种PDP方案,通过验证数据块对应的标签来验证数据块的完整性,但是该方案采用标签聚合计算的方式实现数据的多块验证,虽然可实现概率性检测,但是只适用于静态文件,无法支持数据的动态修改,且不适用于并行文件系统,同时不能在验证过程中有效保护用户隐私。文献[4]在PDP方案的基础上提出DPDPI,可以实现对数据的动态修改,在增加少量开销的同时保持了较好的错误检测率。文献[4]在DPDPI基础上又基于Skip List和RSA Tree构建了另外一种认证字典(DPDPII),DPDPII有着更高的错误检测率,可运用于CVS和外包文件系统。DPDPII对于小文件的检测有着较高
的效率,但文献[4]没有提出如何审计大文件,且对于多个可变数据块的更新会导致改变其他数据块。文献[5,6]提出一类基于概率的无块验证方式来验证云端数据的完整性,不需要将数据下载到本地再进行验证,极大降低了通信开销和存储开销,且该类方案可以将验证服务委托给第三方,即允许公共验证,但当文件分块数量太大时,就需要抽取大量分块基于概率推算方式进行检验,验证时间开销急速上升。ESINER[7]等人在DPDPII中通过引入FlexList来克服其不足,且在效率方面比PDP方案要好,但是该方案没有结合具体的文件系统进行分析,只是通过简单实验证明了其具有较好的性能以及较低的时间开销。文献[8,9]提出一类确定性完整性验证方法,该类方法需要下载完整的数据到本地进行验证,因此该类方法需要巨大的计算开销和存储开销。近年来众多学者提出允许第三方审计机构(TP A)检验云端数据完整性的机制,但这些方案都存在相应的缺点。文献[10,11]不能满足数据动态修改的要求,同时无法满足多用户批量验证的需求。文献[12]在对云端数据进行完整性验证时没有实现隐私保护的要求。文献[13,14]没有考虑多云协同环境下大规模文件的协调审计问题,且第三方审计机构无法代替多用户进行多块审计。文献[15]采用索引哈希表的方式来支持数据的动态修改,但是无法支持多用户的批量审计。文献[16]基于挑战—响应模型采用双线性配对的方式验证云端数据的完整性,但配对操作需要巨大的计算开销。
基于上述分析,研究者们针对云端数据完整性验证方案做了许多改进,改进思路可以概括为以下几点:1)数据上传过程
flex软件
(1)数据由一系列的块组成。
(2)对于每个块赋予一个同态标签。
(3)将标签放入一种认证字典类型的数据结构。
2)数据验证过程
(1)创建数据块对应标签的线性组合。
(2)用该数据结构创建对数据块标签的证明,以证明标签对应数据块的完整性。
(3)向数据审计发起者返回数据块以及对数据块的证明。
基于上述思路,本文设计并实现了一种针对云端数据的完整性验证方案。该方案结合GlusterFS云存储文件系统,利用BLS短签名在用户上传文件时为数据块生成标签,用户通过审计数据块对应标签的完整性来验证数据块的完整性,从而有效降低通信开销和存储开销,同时弥补了GlusterFS文件系统在数
据审计模块上的功能
缺失。此外,方案采取Merkle树的形式实现了针对TB 级数据的高效异步审计。
1 系统模型及设计目标
1.1 系统模型
如图1所示,本文方案系统模型包含4个实体:数据所有者(DO)、数据使用者(DU)、完整性审计第三方(TP A)和云服务提供商(CSP)。DO在将文件M上传到CSP之前,将数据在本地分为固定大小的n块,即M= (m1, m2,…, m n);采用摘要生成算法生成每块数据对应的摘要,即ε = (ε1, ε2,…,εn);采用BLS算法利用用户私钥对摘要签名,即σ = (σ1, σ2,…,σn);将M上传到CSP,并将签名元数据发送到TP A。DU通过下载操作使用存储在云端的数据,但数据存储在云端可能会受到破坏,因此在下载数据之前应该验证数据的完整性,避免下载损坏的数据,用户也可以随时审查上传数据的完整性,数据审计的任务可交由TP A进行。
1.2 设计目标
可进行第三方公共审计的云端数据完整性验证模型仍然会面临一系列的安全问题,如怎样保护用户数据隐私在交由TP A审计过程中不泄露等。因此,本文模型的设计目标如下:
1)可扩展性。完整性审计模块应具有良好的可扩展性,并发审计量可随着存储节点的增加而实现线性扩展。
2)正确存储性。只有当CSP拥有用户上传的完整数据块时,才可以通过TP A的完整性验证。
3)公共验证。拥有客户端签名元数据的任何第三方都可以随时审计数据块的完整性。
4)隐私保护。TP A无法利用CSP返回的计算结果获取用户数据的任何隐私信息。
5)不可伪造性。CSP无法在短时间内通过计算伪造某块数据对应的审计结果。
2 符号说明和算法定义
2.1 符号说明
本文方案设计中各阶段所使用的符号及其含义如表1所示。
2.2 算法定义
本文方案主要包括密钥生成、挑战信息生成、数据签名、证明生成、完整性验证等5个算法,每个算法的定义如下:
1)密钥生成算法KeyGen(k)→(sk, pk)。由客户端运行,输入安全参数k,生成用户私钥sk和公钥
pk。
2)挑战信息生成算法ChallengeGen(τ)→C。由客户端在数据块签名之前运行,τ为生成的挑战数量,算法
图1 系统总体架构
输出为挑战集合C 。
3)数据签名算法T agGen (sk , m i , c i )→σi 。该算法为数据块生成签名,由客户端运行。算法输入sk 、数据块m i 和挑战c i ,输出签名σi 。客户端将σi 发送给CSP 。
4)证明生成算法GenProof (  pk , P , σi , m i )→K i 。由CSP 运行。输入pk 、G 1的生成元P 、σi 和m i ,输出m i 对应的标签K i 。CSP 将K i 发送给TP A 。
5)完整性验证算法ProofCheck (P , σi , p k , K i )→{"True", "False"}。由TP A 运行。TP A 利用P 、σi
、pk 和CSP 返回的K i 验证数据块的完整性。如果验证通过,返回“True ”;否则,返回“False ”。
3 方案设计
本文方案包括单块验证、多块验证、多用户验证以及异步验证,每种类型的验证都由3个阶段构成,即密钥生成(KeyGen )、数据标签生成(T agGen )和数据审计(ProofCheck )。
3.1 单块验证
3.1.1 单块验证设计
1)密钥生成
DO 设定安全参数k ,由系统生成G 1和G T ,阶为p ,生成元分别为P 和g ,满足e
ˆ:G 1×G 1→G T 。选定H 1:{0,1}*→ {0,1}L 以及H 2:{0,1}k →G 1,并且随机选择Z P *
←x ,计算pk = 
xP ,x 作为私钥保存,pk 作为公钥公开。
2)数据标签生成
该阶段DO 首先将数据M 切分成n 块,M = (m 1, m 2,…, m n ),同时生成l 块挑战C = (c 1,c 2,…,c l ),将数据块m i (i =1,
2,…, n )与挑战c j (  j =1,2,…, l )分别相连接m i ||c j ,采用H 1计算n × j 块摘要H 1(m i ||c j ),从而生成n ×j 块标签值;然后采用BLS 算法利用用户私钥进行签名,得到签名结果集σ = xH 2(H 1(m i ||c j ))(i =1,2,…, n ,j =1,2,…, l ),σr ∈σ,r =1,2,…,  n × j 。
将M 上传到CSP ,将<pk , P >以及<H 1(m i ),c j ,σr >(i =1, 2,…,n ,j =1,2,…,l ,r =1,2,…, n × j )发送到TP A 。
3)数据审计
该阶段用户委托TP A 审查上传数据块的完整性。客户端选择挑战c s (s =1,2,…,  j )和数据块的编号i 的线性组合< i ,c s >传递给TP A ,TP A 接收到< i ,c s >后解析出待审计的数据块的编号i 以及c s ,将< i ,c s >传递给CSP 。CSP 接收到< i ,c s >后计算待审计的数据块m i 所对应的存储节点,启动相应的存储节点进行计算。CSP 若拥有完整的m i ,则利用H 1计算存储在云端的m i 的摘要H 1(m i ||c s ),利用H 2计算K i =H 2(H 1(m i ||c s ))。
将K i 返回至TP A ,TP A 采用e
ˆ计算e ˆ( pk , K i ),并对比e ˆ( pk , K i )与e ˆ(P ,σi )。若相同,则表示m i 完整;否则,数据受到损坏。
3.1.2 单块验证正确性验证
若采用对称配对,则BLS 签名后的结果为G 1中的元素。由数据标签生成阶段可知σr = xH 2(H 1(m i ||c j )),由数据审计阶段可知K i  =H 2(H 1(m i ||c s )),则可知e ˆ(P , xH 2(H 1(m i || c j ))) =e
ˆ(xP , H 2(H 1(m i ||c j )) )=e ˆ( pk , H 2(H 1(m i ||c j ))) =e ˆ( pk , K i )= e
ˆ(P ,σi )。其中,i =1,2,…, n ,j =1,2,…, l ,r =1,2,…, n  × j ,s =1,2,…, j 。因此,单块验证正确。
3.2 多块验证
多块验证的密钥生成阶段和数据标签生成阶段与单块验证一样,区别主要在数据审计阶段。多块验证允许用户一次并行审计位于不同存储节点的多块数据。该方式通过修改GlusterFS 条带卷(一种分布式存储数据的数据卷),增加数据审计模块支持数据的并行审计。假定某个条带卷存在w 个存储节点,则TP A 可一次最多下发w 个审计请求进行并行审计。因此,可通过增加存储节点的节点数量实现并行审计请求的线性增长。并行审计模型如图2所示。
表1 本文方案所使用的符号及其含义
符号含义p 大素数
P g ,加法循环G 1和乘法循环G T 的生成元H 1:0,10,1{}*
→{}
L
消息摘要生成算法,将任意长度输入映射为固定长度
输出。该算法可以为MD 5或SHA 256等H G 21
:0,1{}k
→将k  bit 的字符串映射为G 1中某个元素的x 坐标,计算出相应的y 坐标,从而确定G 1中该元素的值
a b ||将元素a 与b 相连接Z *
p
←x 从Z *p 中随机选择一个元素x
e:
ˆG G G 11×→T e
ˆ为恒等映射,用于将G G 11×中的元素映射到G T
存储节点
图2 并行审计模型
假定客户端选择一次并行审计的数据块为2个,客户端将线性组合< (1,c1),(2,c2) >传递给TP A,TP A接收到< (1,c1),(2,c2) >后,解析出待审计的数据块的编号(1,2)以及挑战(c1,c2),并将< (1,c1),(2,c2) >传递给CSP。CSP接收到< (1,c1),(2,c2) >后,计算待审计的数据块m1和m2所对应的存储节点,启动相应的存储节点进行并行计算。存储节点1计算H1(m1||c1), K1=H2(H1(m1||c1)),同时存储节点2计算H1(m2||c2), K2=H2(H1(m2||c2))。存储节点1和存储节点2分别将K1和K2返回至TP A,TP A采用eˆ计算eˆ( pk, K1)和eˆ( pk, K2)。TP A对比eˆ( pk, K1)与eˆ(P,σ1)以及eˆ( pk, K2)与eˆ(P,σ2),从而实现数据的并行审计。
多块验证的正确性验证和单块验证的原理一样,这里不再赘述。
3.3 多用户验证
3.3.1 多用户验证设计
3.1节和3.2节都是针对单用户,下面将单用户的情况扩展至多用户。在该系统中,每个用户都会生成自己的pk和sk,在数据上传到CSP之前对数据进行分块签名,并且将签名后的元数据交给TP A,公开自己的公钥,保存自己的私钥。下面对系统流程进行描述。
1)密钥生成
假定系统中存在u个用户,对于第t个用户表示为DO t(t∈[1,u])。DO t设定安全参数k,由系统生成G1和G T,阶为p,生成元分别为P和g,满足eˆ:G1×G1→G T。选定H1:{0,1}*→{0,1}L以及H2:{0,1}k→G1,并且随机选择Z p*←x t,计算pk t = x t P t,x t作为私钥保存,pk t作为公钥公开。
2)数据标签生成
该阶段DO t首先将数据M t切分成n块,M t =  (m1t, m2t,…, m nt),同时生成l块挑战C t = (c1t,c2t,…,c lt),将数据块m it (i =1, 2,…, n)与挑战c jt (  j=1,2,…, l )分别相连接m it||c jt,采用H1计算n× j块摘要H1(m it||c jt),从而生成n× j块标签值;然后采用BLS算法利用用户私钥进行签名,得到签名结果集σt  = x t H2(H1(m it||c jt))(i=1,2,…,n,j=1,2,…, l),σrt∈σt,r =1, 2,…, n× j。
将M t上传到CSP,将< pk t, P t >以及< H1(m it),c jt,σrt >(i= 1,2,…, n,j=1,2,…, l,r=1,2,…, n× j)发送到TP A。
3)数据审计
DO t委托TP A审查上传数据块的完整性。客户端选择挑战c st(s=1,2,…,  j)和数据块的编号i的线性组合< i,c st>传递给TP A,TP A接收到< i,c st>后解析出待审计的数据块的编号i以及c st,将< i,c st>传递给CSP。CSP接收到< i,c st>后计算待审计的数据块m it所对应的存储节点,启动相应的存储节点进
行计算。CSP若拥有完整的m it,则利用H1计算存储在云端的m it的摘要H1(m it||c st),利用H2计算K it =H2(H1(m it||c st))。
将K it返回至TP A,TP A采用eˆ计算eˆ(pk t, K it),并对比eˆ(pk t, K it)与eˆ(P,σit)。若相同,则表示m it完整;否则,数据受到损坏。
3.3.2 多用户验证正确性验证
若采用对称配对,BLS签名后的结果为G1中的元素。由数据标签生成阶段可知σrt = x t H2(H1(m it||c jt)),由数据审计阶段可知K it =H2(H1(m it||c st)),则可知eˆ(P t , x t H2(H1(m it||c jt)))= eˆ(x t P t, H2(H1(m it||c jt)))=eˆ( pk t, H2(H1(m it||c jt)))=eˆ( pk t, K it)= eˆ(P t, σit)。其中,i =1,2,…, n,j =1,2,…, l,r =1,2,…, n×  j,s=1,2,…, j。因此,多用户验证正确。
3.4 异步验证
用户上传文件之后,可将元数据交给TP A,由TP A 进行多次审计,以概率的方式来保证云端数据的完整性。但对于超大文件,若分块太小,则会产生大量数据块,虽然可通过抽样的方式进行验证,但仍需要进行多次挑战后客户端才能以一定的概率相信云端数据

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。