杨 杰,谭道军,邵金侠
(湖南科技学院 电子与信息工程学院,湖南 永州 425199)
随着云计算的发展,云存储作为云计算的一项重要服务得到越来越多的关注[1-3],它允许个人和行业以较低的成本将数据保存在云中,为了方便管理数据并降低管理成本,许多数据所有者将数据外包给云服务器[4-5],这使得云存储服务的用户数量迅速增长。但是,将个人及企业数据存储在云中需要信任的存储服务,以确保数据的保护和隐私。数据安全和隐私保护是云计算面临的挑战,这些安全挑战的出现主要是由于“缺乏信任”和“缺乏控制”的原因。用户正在将数据提供给不受信任的云存储,因此,数据可能会被损坏,修改,被盗或甚至被删除[6-7]。
由于所有的安全策略都是由云服务提供商处理的,用户无法控制自己的数据。因此,为了使云存储安全高效,云服务必须确保数据的可用性和完整性这2个基本安全要求[8-10]。
文献[11]提出了隐私欺骗阻止和安全计算审计协议,同时解决了云计算数据存储安全性与计算安全性,通过指定的验证者签名,批量验证和概率抽样技术来实现隐私欺骗阻碍。为了解决对大量加密的云数据进行高效全文检索这个挑战,文献[12]提出了一个基于Bloom过滤器的树索引,通过提出索引词的隶属熵来优化查询和加密文档之间的相似性,实现了加密云数据的全文检索。
文献[13]给出了云计算环境的实际数据完整性需求,并研究了区块链在实现数据完整性面临的问题,设计了云计算环境中基于区块链的有效数据库。文献[14]提出了一种高效的相互验证的可证明数据拥有方案,该方案利用Diffie-Hellman共享密钥构造同态验证器,该方案中的验证者是无状态的,独立于云存储服务,因为不需要双线性操作,所以所提出的方案非常有效。
为了提高云存储数据的安全性与完整性,本文在研究以上方法的基础上,提出了一种基于显式精确最小存储再生代码(explicit exact minimal storage regenerating code, EEMSR)的云计算安全性研究方法,该方法使用加密哈希函数的精确再生代码的显式构造,以确保云中存储数据的可用性和完整性。在本文协议中,用户首先使用EEMSR代码对数据进行编码,然后将此编码数据上传到云中。该编码有助于重新生成丢失的数据,以此确保数据的可用性。另外还使用加密哈希函数通过Challenge-Response协议来验证数据的完整性,如果完整性得到验证则可以重构数据,否则,可以使用EEMSR代码修复数据。
用户将数据存储在不可信的云系统中, 一旦数据存储后,用户就会失去对数据的控制权,数据可能会丢失或者数据可能被调节,这种缺乏控制主要产生了2个安全挑战:完整性和可用性。
云系统体系结构(见图1)中有用户和云服务器2个实体。用户首先对原始文件进行编码,上传到云端,产生挑战并检查来自服务器的响应是否有效;云服务器存储和维护用户上传的数据。
已经上传至云服务器上的数据会受到不同种类的安全威胁。本文云存储模型主要关注2种威胁:①由于硬件故障而引起的数据丢失;②由于任何恶意活动而引起的数据损坏。
EEMSR码是(n,k,d,B,α,β)再生码,最初,大小为B的文件被分成e个块,每个块的大小为β=B/e,其中,e=n×(n-1)/2,在编码矩阵的帮助下,这e个信息块被进一步编码为n个编码块,每个编码块的大小α使得属于n个块中的k个块足以重建原始文件。这些编码的块存储在云服务器中。如果任一服务器发生故障,则可以通过从d服务器下载β数据来重新生成丢失的数据。表1是对EEMSR码中各符号的描述。
表1 符号描述
为了确保云存储数据的完整性和可用性,本文提出EEMSR和Hash函数的存储数据安全性新方法,该方法有4个阶段:设置阶段、完整性验证阶段、重建和再生阶段,其流程图如图2。
图2 本文方法过程图Fig.2 Method process diagram in this paper
设置阶段是在上传数据之前的准备工作,完整性验证阶段是上传数据以后进行的阶段,本文方法主要集中在设置阶段和完整性验证阶段。
用户在云中存储数据之前准备的文件,包括3个算法;密钥生成、文件编码和元数据生成。
1)密钥生成。用户选择一些随机正整数S用作私钥及选择一些大的素数P和正整数r(P的原始根)作为公钥。公钥将用于Deffie-Hellman算法生成共享密钥S′, 因此,S和{r,P}将分别作为私钥和公钥使用。
2)文件编码。为了确保云存储中的数据可用性,用户在把数据存储到云中之前,通过使用显式精确再生代码来对文件进行编码。 文件编码分为文件分区、编码矩阵构建和文件编码3个部分。
文件分区:文件F被分成e-1个区块,其中,e=n×(n-1)/2,即
F={m1,m2,…,me-1}
(1)
(1)式中,mi,(i=1,…,e-1)表示分块后的块文件。在文件分区之后,用户通过计算每e-1个块的异或运算来生成一个新块,然后将新块添加到以前的e-1块。因此,最后F包含全部e块为
F′={m1,m2,…,me-1,me}
(2)
分区算法:FileDivision (F,e)
procedure:F′→ FileDivision (F,e)
e=n×(n-1)/2,将文件F分为(e-1)个块
计算me=m1+m2
fori=3 toe-1
me=me+mi
end for
end procedure
编码矩阵E构造:该矩阵大小为n×e,其元素是0或1,且每一行都有d个1,每列只有2个1。
文件编码:在生成编码矩阵后,用户可以将编码矩阵E乘以文件F′来对文件进行编码。
C=E×F′
(3)
文件编码算法:FileEncode (E,mj,n,e)
procedure:C→ FileEncode (E,mj,n,e)
fori=1 ton
sum=0
forj=1 toe
sum=sum+(Eij×mj)
end for
Ci1=sum
end for
end procedure
文件编码过程如图3。
图3 文件编码过程Fig.3 File encoding process
元数据生成:在对文件进行编码之后,用户通过使用密钥S计算文件F′的每个块的hash值来生成文件的元数据,并在预处理文件已经发送到云存储中以后在本地删除文件F′。
元数据生成算法:MetadataGen (mi,S)
procedure:M→ MetadataGen (mi,S)
forj=1 ton
end for
end procedure
元数据生成算法中,P表示一个素数。
将数据存储在云中后,用户需要通过challenge-response协议来检查数据的完整性。为此,用户创建challenge并发送到云服务器,接收到客户端云服务器的challenge后,生成与挑战相对应的响应并将response发送回客户端,然后客户端验证数据的完整性。该阶段由challenge生成、response生成和验证3种算法组成。
Challenge生成:最初,用户使用SOBOL随机序列选择随机密钥KSRP,并计算集合[1,n]的随机索引1≤j≤n(j=1,…,c),其中,c=πKSRP(c),它阻止服务器猜测下一个challenge中将查询哪个块。用户选择一个随机整数XA并计算YA,用于生成共享密钥S′。
算法:ChallengeGen (KSRP,XA)
procedure: Chall→ ChallengeGen (KSRP,XA)
生成随机密钥KSRP, 选择一些随机整数XA
计算YA=rXAmodP,计算c=πKSRP(c)
生成Chall={c,YA}
end procedure
Response生成:基于收到的challenge,服务器生成response并发送给用户进行进一步验证。最初服务器选择一个秘密整数XA并计算YA,之后计算共享密钥S′,该共享密钥用于生成response,即R。
算法:ResponseGen (c,YA,XB)
procedure: {Φ,YB}→ ResponseGen (c,YA,XB)
forj=1 toc
end for
end procedure
验证:用户通过检查response是否有效来验证数据的完整性。这个算法以Rj,Hj和Y为输入,比较询问中索引所有索引块的response和哈希值,并检查它们是否相同,如果相同,那么完整性被验证,该算法将返回1,如不同则返回0。
算法:Verification (Φ,Hj,YB)
procedure: 0/1→Verification (Φ,Hj,YB)
Φ1=H′S′modP,Φ2=ΦSmodP
fori=1 toc
If (Φ1==Φ2)
return 1
else
return 0
end procedure
重建阶段:在云存储中存储数据后,如果验证了完整性,用户可以从云服务器重建数据。原始数据可以通过重构算法恢复,算法以k和e作为输入,并返回原始文件F′作为输出。对于重构用户将从任何k个服务器下载大小为α的数据,并删除重复的块,由此,用户将从e块中获得e-1个块,通过对所有e-1个块进行异或运算,可以在这些e-1块的帮助下生成剩余的一个块。
算法:MetadataGen (mj,S)
procedure:M→MetadataGen (mj,S)
从任意k台服务器下载所有数据,删除重复块
me=m1+m2
forj=3 toe-1
计算me=me+mj
end for
end procedure
再生阶段:特定服务器网络的故障能够重新生成丢失的数据,丢失的数据可以通过从每d个服务器下载β数据来重新生成。
本文方法作为安全观点进行分析,则需要确保在所有情况下的完整性和健全性。
为了确保完整性,需要满足以下2个属性:完整性和健全性。
完整性。只要用户向服务器发送challenge,服务器就需要计算response,如果服务器计算相应challenge的response,则用户将始终接受response为有效的。
健全性。只要用户向服务器发送challenge,服务器就需要计算response,如果服务器不诚实地计算相应挑战的响应,则用户将总是以微小的概率接受响应。
所提出的方法是完整的或健全的证明。
1)完整性证明。
只须证明Φ1=Φ2就可。
Φ1=H′S′modP
(4)
从(5)式和(6)式可以得出Φ1=Φ2。
2)健全性证明。
在这个证明中,表明一个不诚实的服务器不能通过使用预先计算的元数据来欺骗用户。主要有2种可能性,即服务提供商可以在不存储用户数据的情况下计算响应。
如果服务器猜测或使用预先计算的元数据,首先猜测正确的response以可忽略的概率发生,并且如果服务器尝试使用预先计算的response,那么这是不可能的,因为每次用户使用Sobol随机序列向服务器发送一个新的随机challenge,这是很难猜测到的。
另一种方法是通过基于先前的challenge发送response来欺骗用户,在这种情况下,服务器必须从challenge Chall中找到j来计算正确的证明。
在本节中,通过测量3种操作(文件编码,验证和再生)的运行时间,分析本文提出的云存储方案的性能,另外,还将此方法的运行时间开销与现有的方法进行比较。
实验环境:Intel Core i3 CPU和3 GB RAM的笔记本电脑,在MATLAB R2014b中使用各种参数进行实验。在图4显示了文件编码操作和再生操作的运行时间,编码矩阵的生成很容易,因为不涉及任何算术运算。
图4 文件编码和再生操作的运行时间Fig.4 Runtime for file encoding and regeneration operations
从图4可以看到,随着文件大小增加,编码矩阵的生成时间逐渐增加,将文件大小为50 MByte的doc文件分成多个块时,执行文件编码操作所需的平均时间为3.64 s。对于再生操作运行时间,这是精确的修复,编码和解码规则不需要更新,因此计算复杂度较低。在实验中,将文件大小为50 MByte的doc文件分成多个块时,再生操作的平均时间为0.189 s。
将本文方法与纠删码(reed-solomon code, R-S code)和功能最小存储再生码functional minimum storage regenerating code, FMSR code)进行比较。
图5 验证操作的运行时间Fig.5 Runtime of verification operations
在图5中显示了验证操作的运行时间,改变challenge中块的数量与验证操作运行时间的关系,阶段性成线性关系,并且与其他2种方法比较,本文方法运行时间更短。
在图6中,比较了本文方法与其他方法对云存储数据安全性验证的总体运行时间。
由图6可以看出来,本文方法在云存储数据安全性用时更少,并且随着文件的增大,运行时间减少的更明显。
图7比较了本文方法与其他方法在challenge中块的数量与编码速率的关系,由图7可以得到本文方法编码速率高于其他2种方法,随着challenge中块的数量的增加,编码速率呈下降趋势,但本文方法还是优于其他2种方法。
图6 不同方法对云数据安全性验证的运行时间Fig.6 Running time of cloud data security verification under different methods
图7 不同方法下编码速率Fig.7 Code rate under different methods
在本文中,通过加密哈希函数提出了一种基于EEMSR的新方法,以确保存储在云中的数据的完整性和可用性。从安全分析中发现本文方法足够安全,适用于多种类型的攻击。实验表明,本文方法是可行的与有效的,并且与现有其他方法比较,本文方法花费较少的运行时间。本文方法使得云存储服务更安全,通过确保完整性以及存储在云中数据的可用性,具有较少的运行时间开销。