代理重加密(Proxy Re-Encryption)技术原理和Java代码实现
1. 代理重加秘的应用介绍
由于大部分的云服务供应商并不能完全值得信任,云服务供应商可能会在未经用户允许的情况下,擅自泄露用户的隐私数据或重要文件。
解决这个问题最直接的方法是数据加密,对于涉及用户隐私或含有敏感信息的数据文件,将数据加密后上传是一种普遍的保证数据机密性的方法 ,这样数据上传者只需保管好解***即可。但是云计算服务中存在大量的需要共享数据的应用需求,对于这种简单的数据加密上传方式,由于加密文件只能被用户自行解密,这样的数据加密文件并不能通过云服务器来分享给他人,为此这便需要一种密码方案,使得能对存储在云服务器上的密文进行安全有效的转换。
显然,传统的加密或数字签名方案并不具有密文转换功能,而代理重加密技术是一种可以对密文进行安全转换的加密方法,PRE 技术可以将用户 A 用自己公钥加密上传的密文转换成另一种形式的密文,使得用户 B 可以用自己私钥对转换后的密文进行解密,并且在整个转换过程中不会泄露任何对应的明文信息,因此 PRE 对于云计算是天然的应用,可以保证云端数据的安全访问与共享。
由于 PRE 能对密文进行安全转换这一特性,PRE 技术被深入地研究以及在云环境中充分发挥着其实用价值。目前 PRE 技术已广泛应用于云计算环境下的众多领域之中,如访问控制 、分布式文件系统 、加密邮件转发系统 、垃圾邮件过滤系统等 。
2. 业务需求分析
基于数据分享场景,用户B想获取用户A在云上的加密数据,A不能与B直接通信,只能通过中间商云平台;A不能将加密数据的秘钥发给云平台,由云平台再转发给B,这样云平台就知道A的保密数据;要求不能像CP-ABE那样,而是要求通过“请求+确认”方式获取A的数据,即B在每次想获取A的数据时,要想A申请,只有A同意了以后B才能获取并查看数据。
3. PRE概念
PRE 是一种对密文进行安全转换的加密技术,在 年欧密会上,Blaze 等首次提出了代理重加密的概念 。在代理重加密中,基于授权人(delegator)公钥加密的密文可以被转换为另一种密文,且保持对应明文不变,被转换后的密文可以由被授权人(delegate)的私钥进行解密。该密文转换过程由一个半可信的代理者(proxy)执行,在执行该过程前,代理者需要持有一个由授权人到被授权人的转换**,该转换**一般由授权人事先生成并交给代理者。同时在密文转换的整个过程中,代理者无法获取关于该密文对应明文的任何信息。
4.传统公钥PRE算法流程
在介绍之前,先解释一个概念多跳性:多跳性是指一个密文可以被不同的转换**连续进行多次转换,并且对应的明文保持不变。与其相对的是单跳性,即原始密文只能被转换一次。
一个传统 PKI 环境下的单向多跳代理重加密方案包含下列算法:
-
(1) 钥生成算法 :输入系统公开参数 par,该算法输出作为一个用户的公私钥对。
-
(2) 加密算法 :输入系统公开参数 par,消息空间中的明文 M ,某一用户的公钥 pk ,该算法输出由公钥 pk 加密的密文 ,其中0 表示密文 C 未被重加密过, 又被称作原始密文。
-
(3) 转换**生成算法 :输入系统公开参数par,授权用户的私钥 ,被授权用户的公钥 ,该算法输出转换** 用于从授权用户到被授权用户之间的单向重加密。
-
(4) 重加密算法 :输入系统公开参数 par,用户 到用户 的转换** ,及用户 下的密文 ,其中 表示密文 被重加密的次数。该算法输出用户 下的密文 ,该密文 已进行过 次重加密,或 表示密文 不合法。
-
(5) 解密算法 :输入输入系统公开参数 par,用户私钥 ,及用户 下的密文 。该算法输出对应的明文 M ,或 表示密文 不合法。
该方案的算法还需满足一致性,即对于任意一组公共参数 par,任意明文空间中的消息 M ,任意用户公私钥对 , ,下列等式成立:
PRE流程动图,如下所示:
5.基于随机预言机模型的PRE算法实现
6. GitHub上关于PRE有参考价值的实现
- Java:PRE java-sdk,参考地址[3]。
- Go:goRecrypt,参考地址[2]。
这两种实现方案均采用的是随机预言机模型,在GitHub上有关于用RSA+AES方案,在生成步骤有漏洞,谨慎参考。
参考文献
[1] 王燚 . 基于身份的代理重加密及其应用研究[D]。
[2] https://github.com/SherLzp/goRecrypt
[3] https://github.com/geghamjivanyan/java-sdk
[4] https://blog.****.net/qq_26816591/article/details/83656988