基于数据分割的云存储中数据的安全共享
2021-11-02苏艳霞王庆生陈永乐
苏艳霞,王庆生,陈永乐
(太原理工大学 信息与计算机学院,山西 晋中 030600)
0 引 言
近几年来,云存储[1]技术的发展越加成熟,凭借成本低、方便管理、高效等优势吸引了众多用户。云存储的出现为用户带来了便利,但是同时也带来了新的安全问题和挑战[1]。那就是用户将数据存储在云中失去了对数据的绝对控制权,可能会造成数据的泄漏等安全问题。虽然云服务提供商有一定程度的安全性保证措施,但用户并不完全满意服务商所提供的安全性,所以用户会将文件加密上传到云中。密文策略属性基加密[2,3](ciphertext policy attribute based encryption,CP-ABE)是一种有效的加密方式,实现了对加密数据的细粒度访问控制,但是随着数据量与属性值的增加,密文或密钥长度会随之增加,带来巨大的开销。
为了提高云存储效率,Kale等[4]提出了密钥聚合加密KAC(key aggregation encryption)方法,将多个文件的密钥聚合为单一密钥,此密钥可以实现多个文件的解密,此方法减少了密钥传输和管理的开销,但这种方法对密钥传输的通信信道要求较高,可能会出现密钥被窃取的问题。在此基础上,很多学者做了大量工作,文献[6-10]将密钥聚合方案应用到多个场景中来提高数据的安全性与可共享性。但是对于大数据量的文件而言,采用公钥加密产生的开销较大,而且不能防止第三方服务商泄露信息。因此本文提出了先将文件分割成多个部分,然后用不同的加密方法分别加密文件块,将文件密文存储在云端,由数据所有者控制对数据的访问权限,提高数据安全性。
1 基础知识
1.1 双线性映射
密钥聚合加密方案是以循环群的双线性映射为基础的,一个质数阶双线性群由五元组(p,G1,G2,GT,e)来描述。
假设G1,G2,GT是阶数为p的3个乘法循环群,定义在这3个循环群上的一个映射关系e:G1×G2→GT,满足下列3个性质:
(1)双线性:对任意a,b∈Zp和R,S∈G1,有e(Ra,Rb)=e(R,S)ab。
(2)非退化性:存在R,S∈G1,使得e(R,S)≠1G2(1G2表示群G2的单位元)。
(3)可计算性:存在有效的算法对任意的R,S∈G1,可以计算e(R,S)的值。
则称此映射关系e为双线性映射。若循环群G1与G2相等,则称此双线性群为对称双线性映射;否则称之为非对称双线性群。
1.2 Diffie-Hellman密钥交换协议
Diffie-Hellman密钥交换协议(Diffie-Hellman key exchange/agreement algorithm)可以使需要安全通信的双方在不安全的信道中交换密钥,采用此算法双方可以确定一个对称密钥,但是只能适用于密钥交换,而不能用于加密和解密消息。Diffie-Hellman密钥交换协议具体实现过程如图1所示。
图1 Diffie-Hellman密钥交换协议流程
由通信双方共同商议选取一个大素数p及其原根a,这两个参数值可以向公众公开;首先由通信方A选取一个随机数XA,使用自己所拥有的参数计算YA=aXAmodp,通过信道发送给通信方B;然后B选取随机数XB,并计算YB=aXBmodp,并将结果YB发送给A;A和B根据接收到的信息与自己生成的随机数,分别计算KA=YBXAmodp与KB=YAXBmodp。由式(1)可知,通过这种计算方式通信双方所得到的KA与KB是相等的,即为通信双方共同商定的对称密钥
(1)
1.3 云存储中的安全问题
当使用第三方服务商提供的云存储时,一般从以下3个方面对数据的安全问题进行分析。
(1)保密性。数据的保密性是指信息不被泄露给非授权的实体或用户,信息只能以所有者允许的方式供授权用户使用的特性。在云环境中,由于是多用户共同使用云存储器等同一资源,这就增添了一些隐私和机密泄露的威胁。一般是由数据所有者对数据文件进行加密,目的是为了控制对数据的访问权限,保证正确的人可以访问真实数据,防止敏感信息接触到错误的人或被他人非法窃取。
(2)完整性。完整性包括在数据的整个生命周期内保持数据的一致性、准确性和可靠性,同时避免未授权用户的非法删除。在传输过程中不得更改数据,并且必须采取措施确保未授权用户不得更改数据,这些措施包括文件权限和用户访问控制,版本控制可用于防止授权用户的错误更改或意外删除。随着云环境中用户数量的增加,授权对于增强数据完整性非常重要。
(3)可用性。数据的存储是为了后期的数据使用,若数据的可用性失去了,那么数据也就失去了存储的意义。可用性是指被数据所有者授权的用户或机构可根据需要访问和使用这些数据。通过严格维护所有硬件、在需要时立即执行硬件修复以及维护一个没有软件冲突的正常运行的操作系统环境,可以最好地确保可用性。
2 方案框架
2.1 基本流程
在云存储环境中,如何高效地共享加密数据是一个具有挑战性的问题。当然,数据所有者可以从云存储中下载加密后的数据,对其进行解密,然后发送给其他用户进行共享,但是这就失去了云存储存在的价值。云存储的出现改变了数据共享的方式,数据所有者与数据使用者无需进行多次的文件内容的传输,只需所有者将文件上传到云存储器中,为了保护数据的安全性,一般会对数据进行加密,然后将共享数据的访问权限授予其他人,即向数据使用者发送相应的解密密钥,以便他们可以直接从云服务器中访问这些数据。
为了实现云存储中文件的安全高效共享,提出了一个基于数据分割的密钥聚合加密方案,所提方案框架流程如图2所示。使用数据分割的思想将大文件分割成一个大数据块文件和多个小数据块文件,根据对称加密与非对称加密的优缺点,对大数据块采用加解密速度较快的AES对称加密方式,将所使用的对称密钥作为一个小数据块存储;对小数据块采用密钥聚合加密方法。分别对文件进行加密后,将文件的密文上传到第三方服务器中进行存储。
图2 方案框架
当需要与他人共享某个文件时,数据所有者只要提取多个小数据块文件的密钥为一个聚合密钥,此密钥可实现对多个文件的解密,将所得到的聚合密钥发送给数据使用者,使用者在云端下载文件后使用密钥分别对文件进行解密,得到对称加密的密钥后,对大数据块解密,使用聚合密钥依次对其余小数据块进行解密,便可得到文件的明文信息,并按分割策略组装文件,恢复成原文件,即完成大数据文件的安全共享。
2.2 数据分割
由于文件的数据量较大,采用传统的加密算法实现文件的安全共享往往达不到理想的效果。若采用对称加密的方式加密文件,可以实现快速高效的对文件加密,但是在密钥泄露时存在很大的安全问题,由于加解密使用相同的密钥,使用非法手段获得密钥的恶意用户可能会篡改一些数据信息,导致数据使用者得到错误的信息,从而造成重大的损失。若采用非对称加密,数据的安全性会得到提高,但是加解密所消耗的时间和空间的代价较大,而且文件较多时会产生大量的密钥对,很难对密钥对进行管理和存储。因此,提出了数据分割的想法,先对文件进行分割,再对文件使用不同的方法进行加密。
对文件进行数据分割具有两大优势,第一个优势是对加解密而言,将文件分块,可以对切分后的文件采用不同的加密方式,结合对称加密与非对称加密的优点,一方面提高加解密文件时的效率,另一方面增强了加密文件的安全性,防止对称密钥泄露带来的信息篡改等问题。第二个优势是从文件安全性的方面来讲,将分割后的文件加密后上传到云服务器,将数据元存储在本地,可以有效解决第三方服务器不可信的问题,云服务器管理员无法获得所存储数据的元数据,避免了内部人员泄露数据所有者的隐私信息。
如图3所示为对文件进行数据分割的具体过程,采用固定大小的小数据块对文件进行分割,首先根据文件的大小确定小数据块的大小和每两个小数据块之间的间距,然后按顺序从文件中抽取固定大小的内容作为小数据块进行存储,最后将文件的剩余内容存储为大数据块,分割后的文件使用“数字+文件名”来命名。将相关信息存储在本地,以便日后查找文件。
图3 数据分割流程
2.3 密钥聚合机制
密钥聚合加密机制的提出是为了实现云存储中多个加密文件的安全共享,它可以将文件集中的多个文件的密钥聚合为一个解密密钥,然后使用单个聚合密钥依次实现对多个文件的解密,减少了密钥管理的代价,而且在密钥的传输阶段也更为方便,只需传输单个固定大小的聚合密钥即可。
采用数据分割后,将一个文件分割为一个大数据块和多个小数据块,分别进行加密,在加密阶段性能得到提高,但是也带来了新的问题,那就是密钥传输与管理的问题,若每一个小数据块使用不同的密钥进行加密,则每一个小数据块都有相对应的密钥,在数据分享时传输所有的密钥就非常不方便,尤其是需要共享多个文件时,所带来的密钥传输和管理问题就更加混乱了,所以需要采用密钥聚合加密方法。针对文献[4]中所提方法中聚合密钥需要在安全通道传输的局限性,做了以下改进来提高密钥传输过程中的安全性。改进的密钥聚合加密方法的具体算法如下:
密钥生成阶段Keygen():此算法用于生成密钥对,由数据所有者运行,输入系统参数params,随机选取r∈Zp,计算并生成公钥pk和主密钥msk对,输出结果为pk=v=gr,msk=r,公钥用于加密文件,可以向其他人公开;而主密钥由数据所有者保管起来,用于数据共享时提取聚合密钥。
文件加密阶段Encrypt(pk,i,m):此算法用于对文件进行加密,将明文消息m转化为密文C。选取随机数t∈Zp,由公钥、所需加密的文件索引值根据式(2)计算密文C
C=
(2)
密钥交换阶段Exchange():为保证密钥传输的安全,数据所有者与数据使用者需先商定一个素数p与其原根a,利用Diffie-Hellman密钥交换协议,共享数据的双方各自生成一个密钥K,用于对聚合密钥进行加密。
密钥提取阶段Extract(msk,S):将文件索引集中的多个文件的解密密钥提取为一个聚合密钥。由数据所有者运行,输入主密钥msk、共享的文件索引集S,根据式(3)计算聚合密钥KS。因为共享的文件集不为空(S≠0),所以gn+1-j=gan+1-j。然后由数据所有者计算Z=K⊕KS,将Z传输给数据使用者
(3)
文件解密阶段Decrypt(KS,S,i,C):数据使用者接收到Z后,根据KS=K⊕Z计算出聚合密钥KS。然后使用聚合密钥对所下载的加密文件进行解密,输入聚合密钥KS、文件索引集S、需要解密的文件索引i、密文C,首先判断索引i是否属于文件索引集S,如果i∉S,则不能进行解密,输出⊥;否则,根据式(4)计算明文
(4)
该解密算法解密成功,即明文正确性验证如式(5)所示
(5)
2.4 文件共享
云环境中文件共享过程如图4所示,将文件上传至云存储服务器CS(cloud server)之前,根据分割策略对文件进行拆分,然后由数据所有者DO(data owner)使用Setup()、Keygen()生成公共系统参数与加解密所需的密钥对,使用公钥pk运行Encrypt()算法对分割后的文件进行加密,将密文上传到服务器。当需要共享某个或多个文件时,DO与数据使用者DU(data user)通过Exchange()算法生成对称密钥K,然后根据文件的元数据信息,将共享文件的索引值组成索引集S,由DO运行密钥聚合加密方法中的Extract()算法,将索引集中多个数据块的解密密钥聚合为一个固定大小的密钥,这个密钥即为聚合密钥。然后根据用户的需求,DO将所提取得到的聚合密钥的密文Z以及文件的相关信息经过通道发送给DU。
图4 云存储数据共享
DU接收到聚合密钥和其它相关信息后,在云端找到所需要的文件,将文件下载到本地,使用接收到的聚合密钥运行Decrypt()算法依次对各个小数据块进行解密,得到小数据块的明文消息和对称加密所使用的密钥,再用对称密钥解密大数据块最终得到大数据块的明文,至此,文件的解密工作全部完成。将解密后的文件根据分割策略进行组装,使分割后的文件恢复成原来的一个文件,完成了云存储中大数据量文件的安全共享。当需要共享多个文件时,仍然只需要传输一个聚合密钥即可,极大地减少了密钥传输与管理的开销。
3 性能与实验分析
3.1 性能分析
在数据分割[3]阶段,可以采用的方法有两种,即小数据块大小固定与小数据块大小不固定,若使用固定大小分割方案,时间复杂度为O(1);而使用非固定大小分割方案的时间复杂度为O(n)。因此本文选择固定大小的数据分割,降低了时间开销,同时固定大小的小数据块也便于管理。
在云存储中,由于文件是先分割后加密,然后将密文上传到云存储环境中的,一方面数据所有者对于服务提供商的可靠性与可信性的要求有所降低,因为在文件加密过程中无需第三方服务商参与密钥的产生与文件的加密等过程,完全由数据所有者授权可以访问数据的用户,授权用户时只需将聚合密钥通过安全通道发送给数据使用者即可;另一方面,数据在云环境中是分块存储的,即使是云服务器管理员也无法获得完整的元数据信息,有效地防止了服务商内部人员对信息的窃取和泄露。
本文的密钥聚合算法与文献[4]所提方法对比见表1。文献[4]所提出方法中需要通过安全通道传输聚合密钥,是将聚合密钥以明文的形式传输的,对于通信渠道的要求较高。
表1 方案性能对比
为了降低对信道的要求,利用Diffie-Hellman密钥交换协议改进了密钥聚合算法。双方在共享文件时提前商定一个对称密钥,在传输聚合密钥时,是以密文的形式进行传输的,可以有效防止窃听带来的威胁,即使恶意用户截取到传输的信息,也无法解密获得密钥的明文信息;而且可以抵抗重放攻击,数据所有者与数据使用者每次商定的密钥是不相同的,即使是同一个数据使用者提出两次数据共享的申请,也无法获得同样的密钥,即实现了一次一密,所以重放攻击被阻止了。在一定程度上提高了密钥传输的安全性,进一步提高了数据共享的安全。
3.2 实验分析
方案的实验环境是Windows 10专业版(Intel(R) Core(TM) i5-4210U CPU @ 1.70 GHz 2.40 GHz),在Eclipse平台采用java语言编写代码,密钥聚合加密方法的实现是通过调用JPBC(java pairing-based cryptography library)实现的,数据所有者将加密后的数据上传到云平台中,数据使用者根据需求在云平台中搜索并下载相应的文件。
分别选取了30 M,50 M,80 M大小的3个txt文件,按照所提方案对这些文件进行实验。对文件进行数据分割时,规定小数据块的大小为1 M,以小数据块的个数为因变量对分割文件所需时间做了记录,所需时间如图5所示。
图5 文件分割所需时间
从图5中信息我们可以看出,当小数据块个数一定时,随着文件尺寸的增大,文件分割所需的时间也相应增加;文件的大小一定时,随着小数据块个数的增加,文件分割所消耗的时间也随之增大。所以对于大小不同的文件要确定分割的小数据块的个数,既要保证文件分割的时间开销尽可能小一些,又要保证能够将文件分割的均匀些,以此来防止大数据块过大所导致的信息泄露。
由于在密钥聚合加密算法中使用了大量的运算操作,如大数的乘法运算、指数运算、双线性配对运算等操作,所以将这些基本运算所需的时间开销进行了测试,消耗时间具体情况见表2。其中,产生随机数的时间用Tr表示,指数运算所需时间为Te,乘法运算所需时间为Tm,双线性配对运算时间为Tp,时间单位为毫秒(ms)。
表2 基本运算所需时间(10-3s)
从表2中可知,指数运算Te与双线性配对运算Tp较大,而且在加密过程中多次使用了配对运算,因此提前计算出e(g1,gn)的值并将其结果存储起来,在进行加密时可直接使用,大大提高了加密过程的效率。当n为128时各阶段所用时间如下,SetUp()算法为95 ms,KeyGen()算法为0.5 ms,Encrypt()算法需要2.2 ms,文件索引集大小为15时,Extract()算法仅需要0.18 ms,而Decrypt()每次所消耗时间为3.5 ms。由公式可知,提取密钥和解密的运行时间复杂性随所需共享的文件个数呈线性增加,实验结果表明所需共享的文件块个数越多,Extract()算法与Decrypt()算法所消耗的时间越长。
对于一个文件而言,文件的分割阶段所带来的开销相对较小,在加密阶段采取的措施极大的减少了加密算法的时间开销,提高了加密的效率,一般只需要进行一次分割与加密,将密文上传到云中即可。将1 M大小的文本文件分割后,分别采用密钥聚合加密与CP-ABE加密,两种方案的结果相比较见表3,从表中我们可知两种方案的加密时间相差不大,但是本文方案所生成的密文大小与密钥大小都是固定的,而采用CP-ABE加密方法会因为用户的数量或属性个数的增加而导致生成的密文与密钥大小不恒定,从而增大开销;而且本文方案中共享多个文件时只需一个聚合密钥即可实现多个文件的解密,减轻了密钥的传输与管理的代价,适用于云存储中多个文件的安全共享。
表3 本文方案与采用CP-ABE加密方案对比
4 结束语
在信息化时代,云存储中加密数据的安全共享是至关重要的,既要保证数据的安全又要方便与他人共享,同时需要减少各方面的开销和代价。所提方案通过数据分割解决了第三方服务器不可信的问题,避免了内部人员对数据的泄露,减少了加密时间的消耗;数据共享时,传送单个聚合密钥的密文给用户,减少了密钥的传输与管理的负担,而且可以抵抗窃听等安全问题。但是当数据所有者修改文件时需要重新进行加密,消耗较大,所以一种可以实现动态更新的密钥聚合加密方法将是以后的研究工作。