发明内容
本发明所要解决的技术问题是针对背景技术的缺陷,提供一种云计算环境中对隐私数据进行加密保护的支持浮点运算的并行全同态加密方案。通过使用本发明提出的并行加密方法,可以提高数据的加解密速度。
本发明为解决上述技术问题采用以下技术方案:
一种云计算环境中支持浮点运算的并行全同态加密方法,包括以下步骤:
步骤一:对待加密数据文件分片:
记需要加密文件中包含的明文长度为L,将明文分成b块,每一块的大小为li,1≤i≤b,且要求li为8字节的整倍数,记为li=8N,N为正整数;这样前b-1块为等长的数据块,第b块为剩余部分数据,即:
步骤二:采用随机方式和算法约束条件,生成用于加密的密钥向量:
在加密文件中的浮点数数据之前,根据全同态浮点数加密方案的密钥约束条件,生成加密密钥向量;密钥向量分为两部分,记为k和s,每个向量包含n个元素,n为正整数,密钥由随机函数生成的随机浮点数组成,具体密钥约束条件如下:
密钥第一部分为向量k,其中每一个元素满足:
ki≠0for 1≤i≤n (2)
密钥第二部分为向量s,其中每一个元素满足:
密钥生成操作执行完成之后,需要按照约束条件进行检查。如果生成的密钥不满足约束条件,则需要重新生成密钥,直至满足上述条件;
步骤三:使用用户密钥对文件分片内的浮点数数据进行加密:
依次在分片的明文中取出一个浮点数明文数据,记为m,经过加密密钥的加密操作,添加一定的随机噪声,记为r和p,得到加密结果的顺序密文向量C′=[c1,…,ci,…,cn],计算过程为:
其中i代表子密文的序号,c1,c2,…,cn分别为明文m加密后的第1、2、…、n个子密文,在上述加密操作中,所有的噪声部分r和p,组成了两个数量均为n-1的噪声集合;
步骤四:子密文乱序存储:
定义映射函数f:
将顺序密文C′的第i个子密文ci按照函数f的映射结果,映射为乱序密文的第j个子密文,记为将乱序密文定义为C″,因此,dj=i,下标j表示在乱序密文C″中的第j个位置,对于i∈[1,2,…,n],将所有的映射结果j的集合定义为J;
因此,子密文ci和满足:
由公式(6)可知,函数f维系着顺序密文C′和乱序密文C″子密文之间的关系;
最后,使用AES加密算法,将集合J加密,作为子密文cn+1,乱序密文C″和子密文cn+1即为明文m最终的加密结果,记为
进一步的,本发明的并行全同态加密方法,步骤二中,n的大小由用户指定,且n越大算法安全性越高,相应的也会占用更多的存储空间。
进一步的,本发明的并行全同态加密方法,步骤三中,随机噪声r和p的取值范围是:-1000<r<1000,-1000<p<1000。
本发明提出一种基于并行全同态加密方法的解密方法,步骤如下:
解密子密文cn+1,得到集合J,建立子密文与密钥的对应关系,通过公式(6)确定子密文从而建立子密文ci与密钥元素ki、si的对应关系;
计算密钥第二部分的向量s的前n-1个元素的和值,记为S:
之后求解明文值m:
进一步的,本发明还提出一种基于并行全同态加密方法实现加法同态加密的方法,将密文的同态加法操作定义为向量加,假设两个明文数据为m1和m2,加密后的密文数据分别记为C1和C2:
首先解密子密文c1(n+1)、c2(n+1)得到函数f的映射结果集合J1和J2,通过公式(6)确定密文C1对应的顺序密文C′1中的第i个子密文为同理确定C2对应的顺序密文C2′中的第i个子密文为c2i,两者均由同一密钥对ki和si加密得到;
重复公式(6)的步骤,逐渐将密文C1和C2分别还原为顺序密文C1′和C2′;
此时,得到顺序密文C1′和C2′对应位置相加后的结果密文[c11+c21,…,c1n+c2n],将c1i+c2i记为c3i,并将顺序密文和值记为C3′=[c11+c21,…,c1n+c2n]=[c31,…,c3n];由映射函数f生成一种新的映射方式J3,并将顺序密文的和值C3′的子密文按照J3打乱顺序,同时通过AES算法加密J3后作为子密文c3(n+1),最终得到加法结果为:
进一步的,本发明还提出一种基于并行全同态加密方法实现乘法同态加密的方法,步骤如下:
假设两个明文数据为m1和m2,加密后的密文数据分别记为C1和C2:
密文C1和C2的乘积为对应的乱序密文C″1和C″2的外积,具体表达式如下:
求外积的过程中,c1(n+1)、c2(n+1)不参与计算,得到n*n的密文矩阵;
对密文矩阵以行或者列为单位,进行解密操作,此处按行解密,即:
最终得到同态乘法的结果密文:
密文C*即为密文乘法的结果,其子密文顺序与密文C1一样,同理可知,如果按列解密,密文C*的子密文顺序与密文C2保持一致。
本发明采用上述技术手段,与现有技术相比,具有以下技术效果:
本发明设计出一种支持浮点运算的并行全同态加密方案。下面安全性及效率这两个角度说明本发明的有益效果。
一、安全性分析
本发明通过使用一种简化的代数方程式实现全同态加密方案,通过增加一定量的随机噪声保障底层明文信息的安全性。本发明中的全同态加密方案可以实现任意深度同态加法和同态乘法,且同态操作后的密文不会发生膨胀,依然维持原密文大小n,因此本方案具有紧凑特性。
最后,对得到的密文序列进行随机重排操作,使攻击者无法定位子密文和密钥的对应关系,无法在线性时间复杂度内破解密钥,进一步加强全同态加密方案的安全性,保障密文信息的安全。
二、效率分析
本发明中的全同态方案基于简化后的代数关系式实现全同态操作,安全性依赖于近似最大公约数问题(AGCD)。以往工作中的全同态加密方案通常基于理想格、环等方案,操作复杂,难以实现,效率较低。本发明的同态方案中的相关同态操作以多项式操作和向量操作实现,比基于理想格、环等问题的方案简单明了,效率优于常见的同态加密。除此之外,本发明将此算法扩展成可以在并行计算框架上运行的并行版本算法,进一步提升了算法的执行效率,更好地适应云计算系统。
具体实施方式
下面对技术方案的实施作进一步的详细描述:
本发明针对云计算环境中需要对隐私数据进行隐私保护和计算的安全问题,提出了一种适用于云计算环境的并行全同态浮点数加密方法,其思路是:数据文件的所有者将待加密文件先进行分片操作,以供并行计算框架,如Spark集群并行加密。然后并行地对明文分片进行加密操作,以保护云计算环境中用户数据的隐私性,同时提供密文计算功能。
本发明通过一种简化的代数关系式对数据进行同态加密操作,同时为了增强其安全性,通过一种随机映射关系,使破解难度超过了线性时间复杂度。为了进一步说明技术方案,本发明首先给出相关符号定义与假设,然后再给出技术方案详细过程。
一、相关符号定义与假设
云计算环境中,用户敏感数据需要进行加密以保障用户的隐私信息安全。同态方案是一种既可以保护数据安全,同时又提供安全计算服务的加密算法,因此可以和云计算环境结合,为用户提供安全的服务。
假设待加密文件的长度为L,分片过程中,将明文分成b片,每一块的大小为li,1≤i≤b。算法初始化过程中,为用户生成包含n个元素的密文向量k和s,均满足算法约束条件。在加密过程中,对于前n-1个子密文ci,每一个子密文计算过程中,需要生成相应的随机噪声pi和ri,而对于最后一个子密文分片,只涉及密钥和前n-1个子密文的噪声,不需要另外生成自己的噪声。所有n个子密文分片组成的向量即为结果密文C′。最终,所有的子密文通过随机映射函数f将结果密文C′重排为C″,并将映射关系通过确定性加密算法,如AES算法,加密后作为子密文cn+1与乱序密文C″一同作为结果密文C存储到云端进行存储。
二、方法流程
本发明提出一种云计算环境中支持浮点运算的全同态加密方案,参考图1所示,该方法包括以下步骤:
步骤一:对待加密数据文件分片
记需要加密文件中包含的明文长度为L,将明文分成b块,每一块的大小为li,1≤i≤b,且要求li为8字节的整倍数,记为li=8N,N为正整数;这样前b-1块为等长的数据块,第b块为剩余部分数据,即:
步骤二:采用随机方式和算法约束条件,生成用于加密的密钥向量
在加密文件中的浮点数数据之前,根据全同态浮点数加密方案的密钥约束条件,生成加密密钥向量。密钥向量分为两部分,记为k和s,每个向量包含n个元素,n为正整数。n的大小由用户指定,且n越大算法安全性越高,相应的也会占用更多的存储空间。密钥由随机函数生成的随机浮点数组成。具体密钥约束条件如下:
密钥第一部分为向量k,其中每一个元素满足:
ki≠0for 1≤i≤n (2)
密钥第二部分为向量s,其中每一个元素满足:
密钥生成操作执行完成之后,需要按照约束条件进行检查。如果生成的密钥不满足约束条件,则需要重新生成密钥,直至满足上述条件。
步骤三:使用用户密钥对文件分片内的浮点数数据进行加密
在为用户生成了满足约束条件的加密密钥向量后,接着进行明文数据的加密。加密操作是依次在分片的明文中取出一个浮点数明文数据,记为m,经过加密密钥的加密操作,添加一定的随机噪声,记为r和p,其中-1000<r<1000,-1000<p<1000。得到加密结果的顺序密文向量,记为C′,计算过程为:
其中i代表子密文的序号,c1,c2,…,cn分别为明文m加密后的第1、2、…、n个子密文。在上述加密方法中,所有的噪声部分r和p,组成了两个数量均为n-1的噪声集合。
步骤四:子密文乱序存储
当明文m经过步骤三的加密操作后,得到顺序密文向量C′=[c1,…,ci,…,cn]。定义映射函数f:
将顺序密文C′的第i个子密文ci按照函数f的映射结果,映射为乱序密文的第j个子密文,记为将乱序密文定义为C″。因此,dj=i,下标j表示在乱序密文C″中的第j个位置。对于i∈[1,2,…,n],将所有的映射结果j的集合定义为J。
因此,子密文ci和满足:
由公式(6)可知,函数f维系着顺序密文C′和乱序密文C″子密文之间的关系。
最后,使用AES加密算法,将集合J加密,作为子密文cn+1。乱序密文C″和子密文cn+1即为明文m最终的加密结果,记为
步骤五:加密方案的解密算法
解密子密文cn+1,得到集合J,建立子密文与密钥的对应关系。通过公式(6)确定子密文从而建立子密文ci与密钥元素ki、si的对应关系。
计算密钥第二部分的向量s的前n-1个元素的和值,记为S:
之后求解明文值m:
步骤六:同态加法特性
密文的同态加法操作在本方案中被定义为向量加。
假设两个明文数据为m1和m2,加密后的密文数据分别记为C1和C2:
首先解密子密文c1(n+1)、c2(n+1)得到函数f的映射结果集合J1和J2,通过公式(6)确定密文C1对应的顺序密文C1′中的第i个子密文为同理可以确定C2对应的顺序密文C2′中的第i个子密文为c2i,两者均由同一密钥对ki和si加密得到。
重复公式(6)的步骤,逐渐将密文C1和C2分别还原为顺序密文C1′和C2′。
此时,可以得到顺序密文C1′和C2′对应位置相加后的结果密文[c11+c21,…,c1n+c2n],将c1i+c2i记为c3i,并将顺序密文和值记为C3′=[c11+c21,…,c1n+c2n]=[c31,…,c3n]。由映射函数f生成一种新的映射方式J3,并将顺序密文的和值C3′的子密文按照J3打乱顺序。同时通过AES算法加密J3后作为子密文c3(n+1)。最终得到加法结果为:
步骤七:同态乘法特性
由公式(9)可知明文数据m1和m2的加密结果密文分别为C1和C2。密文的乘积为对应的乱序密文C″1和C″2的外积,具体表达式如下:
求外积的过程中,c1(n+1)、c2(n+1)不参与计算,得到n*n的密文矩阵。
对密文矩阵以行或者列为单位,进行解密算法。此处按行解密,即:
最终得到同态乘法的结果密文:
密文C*即为密文乘法的结果,其子密文顺序与密文C1一样。同理可知,如果按列解密,密文C*的子密文顺序与密文C2保持一致。
以下举具体实例来说明本发明的实施步骤。
步骤一:对待加密数据文件分片
设明文长度为56个字节的文件,即L=56。分成4块,每一块的最大长度为16个字节,则有N=2。前3块为等长的16个字节数据块,第4块为剩余部分数据8个字节,即:
步骤二:采用随机方式和算法约束条件,生成用于加密的密钥向量
在加密文件中的浮点数数据之前,根据全同态浮点数加密方案的密钥约束条件,生成加密密钥向量。密钥向量分为两部分,记为k和s,每个向量包含n个元素,n为正整数。n的大小由用户指定,且n越大算法安全性越高,相应的也会占用更多的存储空间。密钥由随机函数生成的随机浮点数组成。具体密钥约束条件如下:
密钥第一部分为向量k,其中每一个元素满足:
ki≠0for 1≤i≤n (2)
密钥第二部分为向量s,其中每一个元素满足:
密钥生成操作执行完成之后,需要按照约束条件进行检查。如果生成的密钥不满足约束条件,则需要重新生成密钥,直至满足上述条件。
n为系统需要用户指定的参数,表示密钥中元素的数量,也表示加密后密钥向量中子密文的数量。假设此处用户选定参数n=5,则系统随机生成的一组密钥为:k=[70.1,20.4,83.7,14.3,-92.2],s=[17.8,41.7,-32.7,77.6,-56.8]。
根据约束条件(2)和(3)的检查,发现密钥k和s均满足条件。不需要重新生成密钥,可以进行下一步计算步骤。
步骤三:使用用户密钥对文件分片内的浮点数数据进行加密
在为用户生成了满足约束条件的加密密钥向量后,接着进行明文数据的加密。加密操作是依次在分片的明文中取出一个浮点数明文数据,记为m=20.3,经过加密密钥的加密操作,添加一定的随机噪声,记为r和p,其中-1000<r<1000,-1000<p<1000。假设本次运行的过程中,生成的噪声为r=[-79.0,87.2,25.0,-23.5],p=[69.7,45.0,60.0,76.0]。得到加密的结果密文向量C,计算过程为:
其中i代表子密文的序号,c1,c2,…,c5分别为明文m加密后的第1、2、…、5个子密文。由公式(4)可知,计算出的结果密文为C=[30136.904,18274.004,-50513.897,23589.804,1322347.4691404435]。
步骤四:子密文乱序存储
当对明文m=20.3进行加密操作后,得到密文向量C′=[c1,…,ci,…,c5]。定义映射函数f:
将顺序密文C′的第i个子密文ci按照函数f的映射结果,映射为乱序密文的第j个子密文,记为将乱序密文定义为C″。因此,dj=i,下标j表示在乱序密文C″中的第j个位置。对于i∈[1,2,…,n],将所有的映射结果j的集合定义为J,假设本次运行中J=[2,1,4,5,3]。
因此,子密文ci和满足:
由公式(6)可知,函数f维系着顺序密文C′和顺序密文C″子密文之间的关系。
最后,使用AES加密算法,将集合J加密,作为子密文c6,加密结果"U2FsdGVkX19Fs33QlbaI4DNiYmNEKcNYlhqdP+XYqLo="。乱序密文C″和子密文c6即为明文m最终的加密结果,记为C=[c2,c1,c4,c5,c3,c6]。
步骤五:加密方案的解密算法
解密子密文c6,得到集合J,建立子密文与密钥的对应关系。通过公式(6)确定子密文从而建立子密文ci与密钥元素ki、si的对应关系。例如,C″[J[1]]=C″[2]=c1,以此类推,即可找出所有的子密文。
计算密钥第二部分的向量s的前n-1个元素的和值,记为S:
此处求解S=104.4。
之后求解明文值m:
即可求解出明文值m=20.3。
步骤六:同态加法特性
密文的同态加法操作在本方案中被定义为向量加。
假设两个明文数据为m1=20.3和m2=3.2,加密后的密文数据分别为C1和C2:
首先解密子密文c16、c26得到函数f的映射结果数组J1和J2,通过公式(6)确定密文C1的顺序密文C1′中的第i个子密文为同理可以确定C2对应的顺序密文C2′中的第i个子密文为c2i,两者均由同一密钥对ki和si加密得出。
重复公式(6)的步骤,逐渐将密文C1和C2分别还原为顺序密文C1′=[c11,c12,c13,c14,c15]和C2′=[c21,c22,c23,c24,c25]。
此时,可以得到顺序密文C1′和C2′对应位置相加后的结果密文[c11+c21,…,c15+c25],将c1i+c2i记为c3i,并将顺序密文和值记为C3′=[c11+c21,…,c1n+c2n]=[c31,…,c3n]。由映射函数f生成一种新的映射方式J3=[3,1,2,5,4],并将顺序密文的和值结果C3′的子密文按照J3打乱顺序,重新排列为[c33,c31,c32,c35,c34]。同时通过AES算法加密J3后作为子密文c36。最终得到加法结果为:
C1+C2=[c33,c31,c32,c35,c34,c36] (10)
步骤七:同态乘法特性
假设两个明文数据为m1=20.3和m2=3.2,由公式(9)可知其加密的结果密文为C1和C2。则密文的乘积为对应的乱序密文C″1和C″2的外积,具体表达式如下:
求外积的过程中,cn+1不参与计算,得到n*n的密文矩阵。
对密文矩阵以行或者列为单位,进行解密算法。此处按行解密,即:
最终得到同态乘法的结果密文:
密文C*即为密文乘法的结果,其子密文顺序与密文C1一样。同理可知,如果按列解密,密文C*的子密文顺序与密文C2保持一致。此处求解的同态乘法结果密文C*=[58476.8128,96438.0928,4231511.90124942,75487.3728,-161644.4704,c16],其中,c16为步骤四中的"U2FsdGVkX19Fs33QlbaI4DNiYmNEKcNYlhqdP+XYqLo="。继续对密文C*解密,即可求出明文m1=20.3和m2=3.2的乘积64.96。
综上所述,本发明结合云计算环境,提出了一种支持浮点运算的全同态加密算法,以及基于Spark环境的并行算法,其目的是将加密算法从整数扩展到浮点数,并结合Spark框架,设计了并行浮点数全同态加密算法,利用集群优势提高算法执行效率,实现快速加解密操作,减少同态操作时间。理论分析和实验结果显示,并行同态加密算法支持浮点运算,对浮点数据能够进行快速的加解密操作,兼顾安全性和实用性,适用于云计算场景。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。