本发明涉及信息安全的技术领域,特别涉及一种基于对称密码的可认证的代理重加密系统及方法。
背景技术:
密码技术,是信息安全的核心和基础,广泛用于网络通信、电子商务、银行、国防军事等领域。密码技术包括对称密码和非对称密码,非对称密码也称为公钥密码。
在目前的云服务模型中,用户将加密后的数据存放在不可靠的云服务器当中。由于安全策略或信息分享等原因,数据的加密密钥有可能需要经常改变。传统的方案是将数据从云服务器当中取回后用原来的密钥解密,之后再用新的密钥进行加密并传回云服务器。但这种方案显然效率低下,不具有可扩展性。在这种背景之下,代理重加密方案应运而生。
代理重加密是一种能够将密文在不同的密钥之间相互转换的密码学技术。在代理重加密系统中,用户首先根据自己的新旧密钥生成重加密密钥,并将其发送给代理服务器。代理服务器在获得重加密密钥后,能够在不解密的情况下,将原密钥下的密文转换成为新密钥下的密文。用户使用新密钥即可对其进行解密。
传统的代理重加密方案采用的是公钥密码体制,其显著弊端在于计算量大,加密速度相当慢,无法适应如今大数据时代的需求,实用性大打折扣。而且目前的代理重加密方案无法验证消息的可靠性,无法保证消息不被恶意篡改,对安全性同样造成了很大威胁。
因此,在保证实现代理重加密的情况下,目前亟待提出一种基于对称密码技术的、可验证消息正确性、完整性的代理重加密系统。
技术实现要素:
本发明的目的在于克服现有技术的缺点与不足,提供一种基于对称密码的可认证的代理重加密系统及方法,该系统大大提高了代理重加密的速度,而且能够确认消息是否被恶意篡改。
本发明的第一个目的通过下述技术方案实现:
一种基于对称密码的可认证的代理重加密系统,所述系统包括:
用户端,用于向代理端发起重加密请求,包括随机数生成器、密钥生成模块、加密模块、解密模块和密钥更新模块,当需要对数据进行重加密时,所述随机数生成器首先生成一个随机数,用所述密钥生成模块生成新的加密密钥和新的认证密钥,然后通过所述密钥更新模块生成重加密密钥和认证变换密钥,然后将该随机数、重加密密钥与认证变换密钥一起发送给所述代理端的重加密模块,同时,所述加密模块和所述解密模块还能够对数据进行加解密操作;
代理端,用于保存用户的密文,同时对用户端发送过来的重加密请求进行处理,并对数据进行重加密并生成新的消息认证码。
进一步地,所述随机数生成器,用于生成随机数;
所述密钥生成模块,用于生成加密密钥与认证密钥;
所述密钥更新模块,用于根据新的加密密钥和认证密钥,生成重加密密钥和认证变换密钥,其包含一个逆元生成器,用于生成某个元素的逆元。
进一步地,所述加密模块,用于对消息明文进行加密,该模块包括多项式运算部件和消息认证码生成部件,其中,所述多项式运算部件首先将输入的两个字符串参数分别转换成两个多项式的系数,即转换成为两个多项式,接着对该两个多项式进行多项式环上的乘法运算;所述消息认证码生成部件用于生成与消息对应的认证码,以备后续检测之用。
进一步地,所述解密模块,用于对密文进行解密,该模块包括多项式运算部件与校验部件,其中,所述多项式运算部件首先将输入的两个字符串参数分别转换成两个多项式的系数,即转换成为两个多项式,接着对该两个多项式进行多项式环上的乘法运算;所述校验部件用于检测消息认证码是否正确,若正确则返回解密之后的消息,否则返回解密失败;
其中,所述校验部件包含一个DDH群映射器,用于将一个哈希值映射到DDH群上。
进一步地,所述代理端包括重加密模块,用于响应用户请求,根据用户端传递过来的重加密密钥和认证变换密钥对数据进行重加密,并更新消息认证码;该重加密模块包括多项式运算部件与消息认证码更新部件,其中,所述多项式运算部件首先将输入的两个字符串参数分别转换成两个多项式的系数,即转换成为两个多项式,接着对该两个多项式进行多项式环上的乘法运算;所述消息认证码更新部件根据用户端传递过来的认证变换密钥,对原来的消息认证码进行处理,生成新认证密钥下的消息认证码;
其中,所述消息认证码生成部件包括一个DDH群映射器,用于将一个哈希值映射到DDH群上。
本发明的第二个目的通过下述技术方案实现:
一种基于对称密码的可认证的代理重加密方法,所述方法包括下列步骤:
用户端生成参数步骤,该步骤具体为:
S101、选择并生成公共参数;
S102、根据公共参数,通过密钥生成模块生成新的加密密钥、新的认证密钥以及DDH群;
S103、若需要发起重加密请求,则将新的加密密钥和新的认证密钥传递给密钥更新模块,生成重加密密钥和认证变换密钥,然后将这两个密钥发送给代理端的重加密模块;
S104、若需要对数据进行加密,则将消息明文、加密密钥和认证密钥传递给加密模块;
重加密过程步骤,该步骤具体为:
S201、重加密模块接收用户端传递过来的重加密密钥和认证变换密钥;
S202、调用多项式运算部件,对重加密密钥与一个随机数进行处理,输出处理结果;
S203、将上一步的处理结果与原来的密文进行运算;
S204、调用消息认证码更新部件,根据认证变换密钥对原密钥下的消息认证码进行运算,将步骤S202中的随机数、步骤S203中的运算结果及新密钥下的消息认证码一起作为新密钥下的密文输出;
加密过程步骤,该步骤具体为:
S301、加密模块接收消息明文、加密密钥与一个随机数作为输入;
S302、调用多项式运算部件,对加密密钥与该随机数进行处理,输出处理结果;
S303、将上一步的处理结果与消息明文进行运算;
S304、调用消息认证码生成部件,生成该消息的消息认证码,将步骤S301中的随机数、步骤S303的运算结果及消息认证码一起作为密文输出;
解密过程步骤,该步骤具体为:
S401、解密模块接收消息密文。
S402、调用多项式运算部件,对加密密钥与一随机数进行处理,输出处理结果;
S403、将上一步的处理结果与消息密文进行运算,得到消息明文。
S404、计算解密出的消息明文的消息认证码,若它与收到的消息认证码相同,则返回该明文,否则返回解密失败。
进一步地,所述用户端生成参数步骤具体如下:
选择合适的公共参数p,q,n,r,p′,q′。其中,p,q是与多项式环相关的参数,r为随机数,p′,q′是与DDH群相关的参数;
根据上述公共参数,生成新的加密密钥(ske_2)ske_1、新的认证密钥(skm_1)skm_2和群GDDH;
若需要发起重加密请求,则将ske_2与skm_2传递给密钥更新模块,生成重加密密钥rke=ske_2-ske_1,并计算skm_1模q′的逆元然后计算认证变换密钥然后将rke与rkm发送给代理端的重加密模块;
若需要对数据进行加密,则将消息明文m、加密密钥ske_1和认证密钥skm_1传递给加密模块。
进一步地,所述重加密过程步骤具体如下:
接收用户端传递过来的重加密密钥rke和认证变换密钥rkm;
调用多项式运算部件PRFe,该部件以ske(ske可以是ske_1或ske_2)和r作为输入,计算其中,运算表示计算不大于x的最大整数,运算表示将x与p/q相乘的结果近似到不大于它的最大整数,<x,y>运算表示将x和y转换成多项式形式之后,进行多项式环上的多项式乘法;
计算
调用认证码更新部件,该部件以认证变换密钥rkm与原密钥下的消息认证码t1作为输入,计算即为新密钥下的消息认证码,将随机数r,c2与t2一起作为新的密文输出。
进一步地,所述加密过程步骤具体如下:
接收需要加密的消息m、加密密钥ske_1与随机数r;
调用多项式运算部件PRFe,该部件以ske_1和r作为输入,计算其中,运算表示将x与p/q相乘的结果近似到不大于它的最大整数,<x,y>运算表示将x和y转换成多项式形式之后,进行多项式环上的多项式乘法;
计算c1=(m+PRFe(ske_1,r))mod q;
调用认证码生成部件,该部件以消息m、认证密钥skm_1与随机数r作为输入,首先计算哈希值Hm(r||m),然后使用DDH群映射器将其映射到群GDDH上,映射方法如下所示:
Hm_DDH=((Hm(r||m)mod p′)2)mod p′,
然后计算消息认证码:
将随机数r,c1与t1一起作为密文输出。
进一步地,所述解密过程步骤具体如下:
S401、解密模块接收数据密文c和消息认证码t;
S402、调用多项式运算部件PRFe,该部件以ske(ske可以是ske_1或ske_2)和r作为输入,计算其中,运算表示将x与p/q相乘的结果近似到不大于它的最大整数,<x,y>运算表示将x和y转换成多项式形式之后,进行多项式环上的多项式乘法;
计算
调用校验部件,该部件以消息m、认证密钥skm(skm可以是skm_1或skm_2)与随机数r作为输入,首先计算哈希值Hm(r||m),然后使用DDH群映射器将其映射到群GDDH上,映射方法如下所示:
Hm_DDH=((Hm(r||m)mod p′)2)mod p′,
然后计算消息认证码
如果t′=t,则返回m,否则认证失败,认为消息被篡改,返回解密失败。
本发明相对于现有技术具有如下的优点及效果:
1、本发明使用了对称密码技术,目前的代理重加密方案采用的是公钥密码体制,即其加密体系中采用了一对公私钥。公钥代理重加密的显著弊端在于计算量大,加密速度相当慢,完全无法适应如今大数据时代的需求。而本系统采用对称密码技术,大大提高了重加密的效率。
2、本发明在实现代理重加密的同时,还实现了消息的认证机制,能够认证消息是否在重加密的过程中被恶意篡改,从而保护消息的完整性、正确性。而目前的代理重加密方案,只能做到在重加密的过程中保证数据不会泄露,但无法保证恶意代理不会篡改消息内容,本系统方案很好地解决了恶意篡改消息的问题。
附图说明
图1为本发明公开的一种基于对称密码的可认证的代理重加密系统的结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
实施例
本实施例公开了一种基于对称密码的可认证的代理重加密系统,如附图1所示,该系统包括:
1)用户端
用户端用于向代理端发起重加密请求。它包括随机数生成器、密钥生成模块、加密模块、解密模块和密钥更新模块。当需要对数据进行重加密时,随机数生成器首先生成一个随机数,用密钥生成模块生成新的加密密钥和新的认证密钥,然后通过密钥更新模块生成重加密密钥和认证变换密钥,然后将该随机数、重加密密钥与认证变换密钥一起发送给代理端的重加密模块。除了能够向代理端发起重加密请求,用户端还能够对数据进行加解密操作。
随机数生成器,用于生成系统当中用到的随机数。同时,在使用前,随机数生成器还需初始化一些系统参数。
密钥生成模块,用于生成加密密钥与认证密钥。
加密模块,用于对消息明文进行加密。它包含多项式运算部件(一个同态的PRF(pseudorandom function,伪随机函数))和消息认证码生成部件。其中,多项式运算部件首先将输入的两个字符串参数分别转换成两个多项式的系数,即将它们转换成为两个多项式,接着对这两个多项式进行多项式环上的乘法运算;消息认证码生成部件用于生成与消息对应的认证码,以备后续检测之用。
解密模块,用于对密文进行解密。它包含多项式运算部件(一个同态的PRF(pseudorandom function,伪随机函数))与校验部件。其中,多项式运算部件首先将输入的两个字符串参数分别转换成两个多项式的系数,即将它们转换成为两个多项式,接着对这两个多项式进行多项式环上的乘法运算;校验部件用于检测消息认证码是否正确,若正确则返回解密之后的消息,否则返回解密失败。
其中,校验部件包含一个DDH群映射器,用于将一个哈希值映射到DDH群上。
密钥更新模块,用于根据新的加密密钥和认证密钥,生成重加密密钥和认证变换密钥。其包含一个逆元生成器,用于生成某个元素的逆元。
2)代理端
代理端保存了用户的密文,同时对用户端发送过来的重加密请求进行处理,并对数据进行重加密并生成新的消息认证码。
代理端包括重加密模块,用于响应用户请求,根据用户端传递过来的重加密密钥和认证变换密钥对数据进行重加密,并更新消息认证码。该模块由多项式运算部件(一个同态的PRF(pseudorandom function,伪随机函数))与消息认证码更新部件组成。其中,多项式运算部件首先将输入的两个字符串参数分别转换成两个多项式的系数,即将它们转换成为两个多项式,接着对这两个多项式进行多项式环上的乘法运算;认证码更新部件根据用户端传递过来的认证变换密钥,对原来的消息认证码进行处理,生成新认证密钥下的消息认证码。
消息认证码生成部件包括一个DDH群映射器,用于将一个哈希值映射到DDH群上。
本实施例还公开了一种基于对称密码的可认证的代理重加密方法,该方法运行在上述公开的基于对称密码的可认证的代理重加密系统上,包含以下步骤:
S1、用户端生成参数:
S101、选择并生成公共参数;
S102、根据公共参数,通过密钥生成模块生成新的加密密钥、新的认证密钥以及DDH群;
S103、若需要发起重加密请求,则将新的加密密钥和新的认证密钥传递给密钥更新模块,生成重加密密钥和认证变换密钥。然后将这两个密钥发送给代理端的重加密模块。
S104、若需要对数据进行加密,则将消息明文、加密密钥和认证密钥传递给加密模块。
S2、重加密过程:
S201、重加密模块接收用户端传递过来的重加密密钥和认证变换密钥。
S202、调用多项式运算部件,对重加密密钥与一个随机数(系统的一个公共参数)进行处理,输出处理结果;
S203、将上一步的处理结果与原来的密文进行运算;
S204、调用消息认证码更新部件,根据认证变换密钥对原密钥下的消息认证码进行运算,将步骤S202中的随机数、步骤S203中的运算结果及新密钥下的消息认证码一起作为新密钥下的密文输出。
S3、加密过程:
S301、加密模块接收消息明文、加密密钥与一个随机数(同上,为系统公共参数)作为输入;
S302、调用多项式运算部件,对加密密钥与该随机数进行处理,输出处理结果;
S303、将上一步的处理结果与消息明文进行运算;
S304、调用消息认证码生成部件,生成该消息的消息认证码,将步骤S301中的随机数、步骤S303的运算结果及消息认证码一起作为密文输出。
S4、解密过程:
S401、解密模块接收消息密文。
S402、调用多项式运算部件,对加密密钥与一随机数(同上,为系统公共参数)进行处理,输出处理结果。
S403、将上一步的处理结果与消息密文进行运算,得到消息明文。
S404、计算解密出的消息明文的消息认证码,若它与收到的消息认证码相同,则返回该明文,否则返回解密失败。
具体应用中,所述步骤S1、用户端生成参数具体步骤如下:
S101、选择合适的公共参数p,q,n,r,p′,q′。其中,p,q是与多项式环相关的参数,r为随机数,p′,q′是与DDH群相关的参数;
S102、根据这些公共参数,生成新的加密密钥(ske_2)ske_1、新的认证密钥(skm_1)skm_2和群GDDH;
S103、若需要发起重加密请求,则将ske_2与skm_2传递给密钥更新模块,生成重加密密钥rke=ske_2-ske_1,并计算skm_1模q′的逆元然后计算认证变换密钥然后将rke与rkm发送给代理端的重加密模块;
S104、若需要对数据进行加密,则将消息明文m、加密密钥ske_1和认证密钥skm_1传递给加密模块。
所述步骤S2、重加密过程具体步骤如下:
S201、接收用户端传递过来的重加密密钥rke和认证变换密钥rkm;
S202、调用多项式运算部件PRFe,该部件以ske(ske可以是ske_1或ske_2)和r作为输入,计算其中,运算表示计算不大于x的最大整数。运算表示将x与p/q相乘的结果近似到不大于它的最大整数。<x,y>运算表示将x和y转换成多项式形式之后,进行多项式环上的多项式乘法(即将多项式相乘之后的结果模xn+1);
S203、计算
S204、调用认证码更新部件,该部件以认证变换密钥rkm与原密钥下的消息认证码t1作为输入,计算即为新密钥下的消息认证码。将随机数r,c2与t2一起作为新的密文输出。
所述步骤S3、加密过程具体步骤如下:
S301、接收需要加密的消息m、加密密钥ske_1与随机数r;
S302、调用多项式运算部件PRFe,该部件以ske_1和r作为输入,计算其中,运算表示将x与p/q相乘的结果近似到不大于它的最大整数。<x,y>运算表示将x和y转换成多项式形式之后,进行多项式环上的多项式乘法(即将多项式相乘之后的结果模xn+1);
S303、计算c1=(m+PRFe(ske_1,r))mod q;
S304、调用认证码生成部件,该部件以消息m、认证密钥skm_1与随机数r作为输入,首先计算哈希值Hm(r||m),然后使用DDH群映射器将其映射到群GDDH上,映射方法如下所示:
Hm_DDH=((Hm(r||m)mod p′)2)mod p′,
然后计算消息认证码:
将随机数r,c1与t1一起作为密文输出。
所述步骤S4、解密过程具体步骤如下:
S401、解密模块接收数据密文c和消息认证码t;
S402、调用多项式运算部件PRFe。该部件以ske(ske可以是ske_1或ske_2)和r作为输入,计算其中,运算表示将x与p/q相乘的结果近似到不大于它的最大整数。<x,y>运算表示将x和y转换成多项式形式之后,进行多项式环上的多项式乘法(即将多项式相乘之后的结果模xn+1);
S403、计算
S404、调用校验部件,该部件以消息m、认证密钥skm(skm可以是skm_1或skm_2)与随机数r作为输入,首先计算哈希值Hm(r||m),然后使用DDH群映射器将其映射到群GDDH上,映射方法如下所示:
Hm_DDH=((Hm(r||m)mod p′)2)mod p′,
然后计算消息认证码
如果t′=t,则返回m,否则认证失败,认为消息被篡改,返回解密失败。
下面以一个具体的例子来详细介绍系统运行过程:
一、系统参数设置与哈希函数选择:
(1)在本例中,系统运行的参数为
p=10,q=213+1=12289,n=10,r=1,q′=11,p′=2q′+1=23。
(2)选取He(x)=SHA1(x),Hm(x)=SHA256(x);
二、加密过程:
(1)因为n=10,所以消息的长度为10,假设待加密消息为m=[6,3,9,6,6,9,3,6,3,9](因为采用多项式环上的多项式乘法的方式进行重加密后,解密时会引入{-1,0,1}的误差,为了使本系统具有容错性,、将消息选择为3的倍数)。
(2)计算r的SHA1值:
He(r)=He(1)=SHA(1)=356a192b7913b04c54574d18c28d46e6395428ab
将这十六进制的字符串按每16位的长度拆分开:
356a|192b|7913|b04c|5457|4d18|c28d|46e6|3954|28ab,
转换为十进制为:
13674|6438|30995|45132|21591|19736|49805|18150|14676|10471
对每一项进行模q运算,得到多项式系数:
[1358,6438,6417,8265,9302,7447,649,5861,2387,10471]
(3)生成加密密钥ske:
这里选取加密密钥ske为
[10471,2387,5861,649,7447,9302,8265,6417,6438,1358],
同样将其看成是一个多项式的系数。
(4)计算即首先计算两个多项式He(r)和ske的乘积:
He(r)=1358+6438*x1+6417*x2+8265*x3+9302*x4
+7447*x5+649*x6+5861*x7+2387*x8+10471*x9
ske=10471+2387*x1+5861*x2+649*x3+7447*x4
+9302*x5+8265*x6+6417*x7+6438*x8+1358*x9,
<He(r),ske>mod(x10+1)=263+7731*x1+4529*x2
+9891*x3+2398*x5+7760*x6+4558*x7
+12026*x8+3178*x9
将每个系数乘以p/q,并将结果近似到不大于它的最大整数(如8.6近似为8、6.1近似为6),可得PRFe(ske,r)的最终结果为
[0,6,3,8,0,1,6,3,9,2]。
(5)加密:
将m与步骤(4)中的最终结果相加之后模p:
(m+PRFe(ske,r))mod p=
([6,3,9,6,6,9,3,6,3,9]+[0,6,3,8,0,1,6,3,9,2])mod p=
[6,9,2,4,6,0,9,9,2,1],
即c1=[6,9,2,4,6,0,9,9,2,1]。
三、生成消息认证码:
(1)计算r||m=16396693639,选择认证密钥skm。
(2)计算这里将Hm选定为SHA256,为了描述方便,将skm选定为3。
计算Hm_DDH=((Hm(r||m)mod q′)2)mod q′=4,
所以,此即为消息认证码。
即密文为
(r,c1,t1)=(1,[6,9,2,4,6,0,9,9,2,1],18)。
四、解密过程:
(1)和加密过程类似,由于用户自己是知道加密密钥ske的,所以可以计算PRFe(ske,r)=[0,6,3,8,0,1,6,3,9,2]。
(2)计算
m=(c-PRFe(ske,r))modp=
([6,9,2,4,6,0,9,9,2,1]-[0,6,3,8,0,1,6,3,9,2])mod10=
[6,3,9,6,6,9,3,6,3,9]。
可以看到,正确解密出了原始的消息。
五、重加密过程:
(1)设原始的加密密钥为ske_1,新的加密密钥为ske_2,
ske_1=[10471,2387,5861,649,7447,9302,8265,6417,6438,1358],
ske_2=[10476,2382,5864,679,8447,9342,8295,6517,7438,558]。
计算重加密密钥:
rke=ske_1-ske_2=[5,12284,3,30,1000,40,30,100,1000,11489]。
rke写成多项式的形式为:
rke=5+12284*x1+3*x2+30*x3+1000*x4
+40*x5+30*x6+100*x7+1000*x8+11489*x9
计算
计算c2
c2=c1+PRFe(rke,r)=([6,9,2,4,6,0,9,9,2,1]+[8,9,3,7,5,5,2,1,9,4])p
=[4,8,5,1,1,5,1,0,1,5]。
六、更新认证码:
(1)选择一个新的认证密钥skm_2,为描述方便起见,将skm_2设为9。
(2)计算认证码更新密钥
rkm=(skm_2·skm_1-1)mod q′=9·4mod 11=3。
(3)计算新认证密钥下的消息认证码:
此即为新的消息认证码。重加密后的密文为
(r,c2,t2)=(1,[4,8,5,1,1,5,1,0,1,5],13)。
七、重加密后的解密以及验证消息认证码:
为了验证经过重加密后的消息是否被更改,必须要对消息认证码进行验证。
(1)首先,要对重加密后的密文进行解密:
和解密过程类似,但是这里用来解密的密钥是
ske_2=[10476,2382,5864,679,8447,9342,8295,6517,7438,558]。
由于会有{-1,0,1}的误差,因此需要采用容错机制,在这个实例中,将消息都设置为3的倍数,因此在产生误差之时能够进行纠错:
a.解密结果中已经是3的倍数的不需要改变;
b.将不是3的倍数的解密结果近似到距它最近的3的倍数,即进行如下变换:8→9;5→6;2→3;
经过纠错之后,得到的解密结果为:
m=[6,3,9,6,6,9,3,6,3,9]。
(2)解密之后,用新的认证密钥skm_2计算消息认证码:
新的消息认证码
对比t′和t2,它们相等,说明消息没有被恶意篡改。
(3)若t′和t2相等,返回解密后的m,否则说明消息被恶意篡改,返回解密失败。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。