随着云计算技术的日益发展,公共云存储服务已经得到普遍的应用,DropBox、Google Drive、金山快盘等公共云存储产品的用户数量飞速增长[1]。然而,云存储服务面临许多损坏数据的风险,数据丢失事故层出不穷,如2011年3月,谷歌Gmail邮箱出现故障,造成大约15万用户的数据丢失[2];2012年8月,国内盛大云因物理服务器磁盘损坏造成用户的数据部分丢失。数据存储厂商EMC指出,64%的受调查企业在过去12个月中经历过数据丢失或宕机事故。及时发现数据损坏不仅可以打消用户疑虑,还能为数据恢复赢得宝贵的时间。因此,验证数据完整性是一个亟需解决的基本问题。
数据持有性验证(provable data possession,PDP)[2, 3]是检验云存储数据完整性的重要方法。该方法采用抽样策略,对云中的文件发起完整性验证,在不下载整个文件的情况下,能够及时识别出云中损坏数据的行为。基本的PDP模型[2]仅仅允许文件所属用户执行完整性检测,但是用户资源有限,执行审计任务给用户造成计算负担,且基于数据拥有者的审计方式不利于云存储审计服务的推广。为了有效减少用户的审计负担,研究人员[4, 5, 6, 7]提出基于第三方审计的公开验证模型,利用公开密码体制将审计任务委托给第三方审计者代为执行。
然而,在传统的PDP模型中,单审计代理易成为系统的性能瓶颈,限制了系统的横向扩展;并且单代理节点易造成单点故障,审计代理崩溃将导致整个审计系统崩溃。
针对以上问题,本文提出了一种支持多代理的数据完整性审计方法。该方法基于主从结构设计,主节点采用循环链表管理多代理节点,使用审计队列存储文件的审计任务,实现了审计任务分发、节点监控、失效节点切换和动态增加代理等功能。从节点执行审计任务,并且利用备份节点消除系统的单点故障。实验结果表明,MP-PDP能有效减少文件的审计执行时间,并且能够快速增删审计代理。
1 系统结构 1.1 系统模型基于审计代理的数据完整性验证模型,如图 1所示,由用户、云存储服务提供商、第三方审计者组成。用户是云存储服务的使用者;云服务提供商为用户提供计算或者存储服务,具备强大的计算能力和存储能力;第三方审计者又称为审计代理,代替用户执行具体的审计任务,以减轻用户的审计负担。
1.2 基础知识文件M由n个数据块组成,每个数据块由s个数据扇组成,表示为M={mij| i∈[1,n],j∈[1,s]}。其中,数据块(data block)是验证文件完整性的基本单位,数据扇(data sector)是文件读写的基本单位。
双线性对映射是执行数据块认证的基础函数,定义如下[6, 7]:存在2个阶数为p(p为大素数)的乘法循环群G1和G2,G1的生成元为g。若映射e: G1×G1 → G2满足以下条件,则称e为双线性对映射:
1) 可计算性,存在一个高效的算法可以计算出映射;
2) 双线性,对于所有u,v∈G1和a,b∈Zp,e(ua,ub)=e(u,v)ab均成立;
3) 非退化性,e(g,g)≠1。
散列函数h:{0,1}skh* →G1可以将字符串(以skh加密)转换为群G1上的元素,表示为h(skh,*)。
1.3 数据完整性的审计过程数据完整性的审计模型[7]由5个算法(KeyGen,TagGen,Chall,ProofGen,Verify)构成,分述如下:
1) 密钥生成算法KeyGen其输入为系统安全参数λ,输出为密钥对(skt,pkt)和加密密钥skh。其中:密钥对(skt,pkt)用于生成数据块认证标签;skh用于加密文件摘要信息Minfo,如文件名、数据块总数等。
2) 认证标签生成算法TagGen其输入为文件M和私钥(skt,skh),输出为文件数据块的认证标签集合T={ti|i∈[1,n]}和文件信息集合Minfo。其中:ti的计算方法如(1)式所示,Wi=FID‖i是数据块位置信息,h(skh,*)是文件信息加密函数,uj是G1类型的随机值。
3) 挑战信息生成算法Chall其输入为文件的摘要信息Minfo,输出挑战信息C=({i,vi|i∈Q},R)。其中:i是被挑战数据块mi的索引,Q是i的集合,vi∈Zp是伴随mi的随机值,R=gr是辅助值,r∈Zp* 是随机值,Zp* 是小于p且与其互素的正整数。
4) 数据持有性的证据生成算法ProofGen其输入为文件M、数据块的认证标签集合T和文件的挑战信息C;输出为数据持有性证据P=(TP,DP)。TP是被挑战数据块的标签证据信息,其计算方法如(2)式所示;DP是被挑战数据块的证据信息,其计算方法如(3)式所示,而MPj是数据扇的线性组合,其计算方法如(4)式所示。
5) Verify算法用来验证服务器返回的数据持有性证据,输入为挑战信息C、数据持有性证据P、公钥pkt和文件摘要信息Minfo。若等(5)式成立,则输出0,表示文件完好;反之,输出1,表示文件损坏。其中,Hchal是被挑战数据块摘要信息的哈希值的连乘积,按(6)式计算。
数据完整性的审计过程分3个阶段执行:
阶段1:初始化阶段
用户使用KeyGen生成密钥对(skt,pkt)和加密密钥skh,使用TagGen生成数据块的认证标签集合T和文件摘要信息Minfo。用户发送(Minfo,skh,pkt)给审计者,发送(M,T)到云服务器。
阶段2:确认审计阶段
审计者使用Chall生成挑战信息C并将其发送给云服务器。云服务器使用ProofGen生成数据持有性证据P,并返回给审计者。审计者使用Verify验证接收到的证据信息P,若通过审计,表明文件已经完好存储到云服务器,可删除本地副本。
阶段3:抽样审计阶段
定期执行阶段2,抽样检测云端数据的完整性。
1.4 支持多代理的数据完整性审计模型支持多代理的数据完整性审计模型,是在原始模型[7]的基础上经扩展实现的,如图 2所示。
多代理结构是由主代理节点、备份节点和审计代理等三部分通过网络连接构成。主代理节点是审计系统的管理者,主要完成审计任务分配、审计代理的监控、失效代理的切换和审计代理的动态扩展等功能。备份节点是主代理节点的备份,用于接管出现故障的主代理节点,消除审计系统的单点故障。审计代理是审计任务的实际执行者,接收主代理节点分配的审计任务并向其返回审计结果。
2 多审计代理的功能实现本节首先介绍多审计代理结构所需的数据结构,然后介绍各个功能的实现过程。
定义1 审计任务(audit task,AT)是执行文件完整性审计的基本单位,可用一个二元组结构
定义2 审计队列(audit queue,AQ)是审计任务的存储结构,如图 3所示。每个执行代理对应一个审计队列,审计任务依次进入队列,审计任务执行完毕后,便从审计队列移除。审计队列结构包含队列头指针head和队列尾指针tail,队列长度length可以选择设置。
2.1 审计任务分配审计任务分配模块负责接收文件的审计任务,并执行分配算法(assignment algorithm,AA)将其插入到相应的审计队列。依据分配算法不同,分为任务平均分配算法(average AA,AAA)和最短队列优先任务分配算法(shortest queue first AA,SAA)。为方便描述,定义符号如表 1所示。
任务平均分配算法将审计任务平均分配给每个审计队列,如算法1所示。首先,使用循环链表串联审计队列,并将指针Y指向待分配的审计队列,如图 4所示;然后,将审计任务分配给指针Y指向的审计队列,并后移指针Y;循环执行第二步,分配后续的审计任务。
算法1 任务平均分配算法
输入:LAT,CQ,N
输出:LAQ
〈1〉初始化循环链表CQ;
〈2〉for(i=0;i<N;i++)
〈3〉{初始化审计队列AQi;
〈4〉将AQi插入到循环链表CQ;}
〈5〉Y=CQ;//使P指向其中一个审计队列
〈6〉for(i=0;i
〈7〉{ATi->next=Y->head;
〈8〉Y->head=ATi;
〈9〉Y=CQ->next;}
任务平均分配算法要求审计代理具备相同的审计性能,否则将造成审计代理负载失衡,即部分审计代理积压审计任务,部分审计代理因提前完成审计任务而闲置。
最短队列优先任务分配算法将审计任务总是分配给长度最短的审计队列,如算法2所示。首先,比较审计队列长度,移动指针P指向长度最短的审计队列;其次,将审计任务分配给指针P指向的审计队列,同时增加该队列长度;从审计队列移除已完成审计任务并减少该队列的长度;重新将指针P指向长度最短的队列;最后,重复执行第二步,分配后续的审计任务。
算法2 最短队列优先任务分配算法
输入:LAT,CQ,N
输出:LAQ
〈1〉初始化循环链表CQ;
〈2〉for(i=0;i<N;i++)
〈3〉{初始化审计队列AQi;
〈4〉将AQi插入到循环链表CQ;}
〈5〉Y=CQ;//使P指向其中一个审计队列
〈6〉for(i=0;i
〈7〉{ATi->next=Y->head;
〈8〉Y->head=ATi;
〈9〉Y->length++;
〈10〉if(审计任务ATj执行完毕)//ATj代表任一审计任务
〈11〉{从ATj所在审计队列将ATj删除;
〈12〉Y->length++;}
〈13〉选取长度最短审计队列;
〈14〉Y指向队列最短的审计队列;}
2.2 审计节点的状态监控采用定期发送心跳信息方法,监控审计节点的状态。倘若被监控节点不能按时返回心跳信息,表明节点出现故障。如果主代理节点故障,则启动备份节点予以修复。如果审计代理故障,则执行失效审计节点的动态切换予以修复。
2.3 失效审计节点的动态切换切换失效的审计节点将重新分配该审计节点的审计任务,并由其他审计代理代为执行,如算法3所示。发现失效审计节点后,首先,找到对应于该失效节点的审计队列(假设为AQj);其次,从循环链表中删除审计队列AQj;最后,按照审计任务分配算法重新分配审计队列AQj的审计任务。
算法3 失效审计节点的切换算法
输入:LAQ,CQ,N
输出:L′[AQ
〈1〉找到失效节点所对应的审计队列AQj;
〈2〉while(CQ->next !=AQj)
〈3〉CQ=CQ->next;
〈4〉CQ->next=CQ->next->next;
〈5〉N=N-1;
〈6〉while(AQj->head !=AQj->tail)
〈7〉{AA(AQj->head);//使用任务分配算法重新分配任务
〈8〉AQj->head=AQj->head->next;}
〈9〉free(AQj->head);
2.4 代理节点的动态增加代理节点的动态增加过程如算法4所示。首先,生成新代理的审计队列,并将其插入到循环链表;然后,执行任务分配算法AA为其动态添加审计任务,使该队列的审计任务数与其他队列保持平衡。
算法4 代理节点的动态增加算法
输入:LAQ,CQ,N
输出:LAQ’
〈1〉创建新审计代理节点的审计队列AQj;
〈2〉将AQj插入到循环链表CQ;
〈3〉N=N+1;
〈4〉执行审计任务分配算法AA;
3 实验结果分析为了评估MP-PDP的性能,对MP-PDP进行了仿真实验,比较了MP-PDP模型与PDP模型的审计执行时间,并且测试了替换失效代理和增加审计代理的性能开销。
3.1 实验环境采用C语言实现了原型系统MP-PDP,将该系统运行于浪潮AS300N服务器,运行环境:Ubuntu 12.04.3 LTS,Linux 3.8.0-29 (x86-64),4x Intel(R) Xeon(R) CPU E5502 @ 1.87 GHz,内存16 GB,硬盘ATA Hitachi HTS54501 150 GB。
3.2 实验结果与分析1) 审计文件执行时间
设置不同代理数,对不同数量的文件(100~500)执行数据完整性审计,审计周期为4 h,循环审计72 h,并统计审计执行的时间。从图 5可以看出,与单代理模型(代理数为1)比较,采用多代理审计模型明显减少了审计执行时间,并且审计文件数量越大,执行时间减少得越明显。相较于任务平均分配算法AAA,最短队列优先分配算法SAA进一步减少了系统的审计执行时间。
审计执行时间减少的原因,是多个审计代理分担了审计任务,使得同一时刻可以并行审计多个文件。由于存在通信和计算开销,审计执行时间不能随审计代理的数量增加而成倍减少。但是,在不同情况下,通信成本占总开销比重基本固定。因此,随着审计代理数量增加,审计执行时间的减少越显著。采用5个代理时,减少的审计执行时间约为80%。
2) 切换失效代理的执行时间
对不同代理数的设定,比较不同任务分配算法(AAA和SAA)切换失效代理节点的执行时间。从图 6可以看出,最短队列优先任务分配算法SAA所需时间,明显低于任务平均分配算法AAA,并且随着文件数量增加,SAA的执行时间减少得越显著。其原因是,SAA算法将失效代理节点未完成的审计任务,集中分配给审计任务数最少的节点,避免了与多个代理间建立连接和传输的性能开销,而AAA算法需要将审计任务平均分配给存活的多个审计代理,网络连接和传输会导致较大的性能开销。
3) 动态增加代理节点的执行时间
设定不同代理数,比较了不同任务分配算法动态增加审计代理节点的执行时间。
从图 7可以看出,随着文件数量的增加,任务平均分配算法AAA的执行时间呈线性增长,而最短队列优先任务分配算法SAA的执行时间增长较为平缓。其原因是,AAA算法将调动所有代理向新审计代理转移审计任务,而SAA算法只需将新来的审计任务转移给新审计代理,保持其他审计代理不变,因此节省了大量的网络开销。
4 结 论针对现有的数据完整性模型中单代理节点易造成单点故障并易形成性能瓶颈等问题,本文提出了一种支持多代理的数据完整性审计方法MP-PDP。该方法采用主从结构,实现了审计任务分发、节点监控、失效代理的替换和审计代理的动态增加等功能,并且利用备份节点消除了系统的单点故障。实验结果表明,该方法可有效提高系统的审计效率,并且能够快速增删审计代理。
[1] |
李晖,孙文海,李凤华,等. 公共云存储服务数据安全及隐私保护技术综述[J]. 计算机研究与发展, 2014, 51(7):1397-1409 Li Hui, Sun Wenhai, Li Fenghua, et al. Secure and Privacy-Preserving Data Storage Service in Public Cloud[J]. Journal of Computer Research and Development, 2014, 51(7):1397-1409(in Chinese) |
Cited By in Cnki (17) | |
[2] |
谭霜,贾焰,韩伟红. 云存储中的数据完整性证明研究及进展[J]. 计算机学报, 2015, 38(1):164-177 Tan Shuang, Jia Yan, Han Weihong. Research and Development of Provable Data Integrity in Cloud Storage[J]. Chinese Journal of Computers, 2015, 38(1):164-177(in Chinese) |
Cited By in Cnki (6) | |
[3] | Ateniese G, Burns R, Curtmola R, et al. Remote Data Checking Using Provable Data Possession[J]. ACM Trans on Information and System Security, 2011, 14(1):12 |
Click to display the text | |
[4] | Wang Cong, Chow S S M, Wang Q, et al. Privacy-Preserving Public Auditing for Secure Cloud Storage[J]. IEEE Trans on Computers, 2013, 62(2):362-375 |
Click to display the text | |
[5] | Zhu Y, Hu H, Ahn G J, et al. Cooperative Provable Data Possession for Integrity Verification in Multicloud Storage[J]. IEEE Trans on Parallel and Distributed Systems, 2012, 23(12):2231-2244 |
Click to display the text | |
[6] | Wang Boyang, Li Baochun, Li Hui. Oruta:Privacy-Preserving Public Auditing for Shared Data in the Cloud[C]//IEEE Trans on Cloud Computing, 2014, 1:43-56 |
Click to display the text | |
[7] | Yang K, Jia X. An Efficient and Secure Dynamic Auditing Protocol for Data Storage in Cloud Computing[J]. IEEE Trans on Parallel and Distributed Systems, 2013, 24(9):1717-1726 |
Click to display the text |