云存储中一种数据篡改验证方法与流程

文档序号:11063658阅读:583来源:国知局

本发明涉及云计算、云存储领域,具体的涉及信息安全领域。



背景技术:

随着云计算技术的发展,大量的应用存储在云端,用户也趋于将信息上传到云中以便节省本地存储资源。但是,云存储带来便利的同时,也带来了新的安全问题,信息泄露是每个用户都担心的问题,高度集中的数据及复杂的计算环境使得用户数据遭受多方面的威胁。随着系统复杂度上升,脆弱性也随之增加。其次,多租户共享云计算资源,使数据遭受损坏的风险更大。在云计算环境下,租户与租户之间定制的资源通常是通过逻辑的方法隔离。恶意的攻击者可能伪装成租户从内部发起攻击,侵犯其他用户的数据。

信息存储中,被不可信任的云服务商泄密,或者被恶意用户偷窥、复制泄露、数据被攻击造成丢失等等,成为了当今的挑战,那么如何验证数据是否被恶意复制泄密、篡改呢?为了解决这一问题,研究者们提出了一些方法,但这些方法所采用的安全模型大多是基于大数分解和离散对数等计算难问题。有方法提出一种基于岗哨的数据可恢复证明机制,该机制不仅能识别远程节点上侵犯数据完整性的行为,而且还能恢复一部分受损数据。但该机制不支持公开验证,且只能进行有限次验证,另外一种用于验证不可信节点上数据完整性验证模型,称之为数据持有性证明,该模型支持公开验证,且不受验证次数的限制;但计算代价和通信开销较大,且安全模型是基于大数分解计算难问题。

由此,本发明提出一种能在无数据副本的情况下对云存储中的数据进行异动(包括非法访问及复制、篡改)验证,并能支持数据属主对数据更新。



技术实现要素:

针对现有技术的上述不足,本发明提出云存储中一种数据篡改验证方法。

为解决上诉问题,本发明是通过以下技术方案实现的:

本发明方法应用格理论,数据分块后哈希,生成索引标签和包含数据动态信息的表头,表头数据转化为MHT散列树的叶节点并存储,然后将数据块值和数据块索引分别映射到两个格上,然后生成两个格交集的陪集,用短基计算陪集中的短向量生成数据块的签名;验证时,将块索引和挑战权重结合组成挑战请求,设计计算函数计算数据完整证据,由证据计算数据是否被非法访问篡改。

云存储中一种数据篡改验证方法,具体包括如下步骤:

步骤1:动态操作函数及文件索引信息的生成。

步骤2:动态信息植入及数据公钥密钥生成。

步骤3:格论计算数据的数字签名。

步骤4:验证参数生成。

步骤5:数据动态及完整性的验证。

本发明的有益效果是:

1、安全性高,无数据副本进行操作,降低通讯开销和计算代价。

2、能同时对多个任务发起验证,提高效率。

具体实施方式

针对云存储中一种数据篡改验证方法,其具体步骤如下:

步骤1:动态操作函数及文件索引信息的生成

向量是一组线性无关的向量,则有B生成的格Λ为:

其中c∈Zn表示c是定义在Z上的n元函数,B称为格Λ的基。对于给定的Zn中,2个n维格Λ1与Λ2互素,即Λ12=Zn,有:

如果一组满秩的格向量则存在一个多项式算法生成另一组满足商都长度约束的短基T,即:

对于即将存储到云的文件F,将其分为n个文件块,文件块用m表示,即:

F={m1,m2,...,mn}

生成一个表头,包含5列,分别为数据修改(M)、数据插入(T)、数据删除(D)、数据访问次数(N),修改时间(time),前4项初始值都为0,时间项纪录为上次修改时间。

采用哈希算法,对数据块mi(1≤i≤n)进行哈希,生成数据块摘要h(mi),其中h(mi)||i为数据块索引。

步骤2:动态信息植入及数据公钥密钥生成

p,q表示两个不同的素数,定义三个格为Λ、Λ1、Λ2,其中Λ=Λ1∩Λ2,Λ1=pZn,T=Tq,是Λ种的一组短基。

定义散列函数H:定义s,所以将公钥PK定义为:Pk=(Λ,Λ1,Λ2,s,H),私钥SK=T。

定义函数f(t)=(N,M,T,D),y→f(t),将f(t)作为MHT散列树的叶节点,迭代计算出根散列值RMHT并将其作为验证元数据存储,加密过程中散列根节点y,每次数据收到访问请求时,根据访问请求操作记录f(t)值,体现在N,M,T,D四个值的变化上面。也就是说当数据出现操作时候,R‘MHT≠RMHT,返回R‘MHT的值,解析可得到N,M,T,D的值,并确定数据进行过哪些操作。

用公钥将数据F进行加密,得到密文数据CF

步骤3:格论计算数据的数字签名

有两个格,Λ12=Zn,将数据块mi和h(mi)分别映射到两个格上:

其中p,q表示两个不同的素数,由于环同态表示为:并且有一组满秩的格向量则:且T表示一组短格基,令δi=min(Ti),则有:

δi=modΛ1modΛ2·H(h(mi)||i)

δi表示数块mi的数字签名,Φ={δi},Φ表示生成的签名集合。然后将密文数据和数字签名集合Φ上传到云端,本地存储sk。

步骤4:验证参数生成

验证时,服务器首先解析Λ1,Λ2,s,i信息,然后从分块索引{h(mi)||i}中抽取j个索引块作为挑战索引,将抽取的挑战索引对应到挑战索引集J中,J=(j1,j2,...,jj),对于每个挑战索引块ji(1≤i≤j)随机选取挑战权重ui,将二者组合起来作为挑战请求chal=(ji,ui)j∈J,然后发送到服务器。

服务器收到挑战请求chal后,利用以存储的{CF,Φ}计算完整性证据Γ=(μ,σ),μ,σ的计算方法如下:

同时,将chal数据块的散列值f(t)及其验证信息{H(mi),Γi}连同μ,σ的值一起发送到验证端口。

步骤5:数据动态及完整性的验证

5.1动态验证

收到的数据将f(t)和{H(mi),Γi}后,将f(t)作为MHT散列树的叶节点,迭代计算出根散列值R‘MHT;当R‘MHT≠RMHT,返回R‘MHT的值,解析可得到N,M,T,D,time的值,并确定数据进行过哪些操作。

5.2完整性验证

收到附返回的验证数据后,用户解析Γ=(μ,σ)进行如下判断:

σmodp=μ;

对于j∈J,计算:

αi=H{h(mi)||i},

判断:

是否成立,成立的话,则说明数据时完整的,不成立,则数据被损坏;输出被破坏的数据块。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1