传统的加密方法:A发送给B数据,需要A使用B的公钥加密明文得到密文,将密文发送给B,B利用自己的私钥对密文进行解密,得到明文。
代理重加密方法提出背景:
我们想要在网络中安全的共享数据,然而现实世界中绝大多数提供云计算服务的公司并不能做到百分之百诚信,我们并不知道它会对我们的数据进行什么操作,为了安全起见,唯一的解决办法是将数据加密后放到云上,让其获得密文形式,而我们又想让我们愿意共享秘密的对方获得密文的明文内容,怎么办呢?由此提出代理重加密方法。
代理重加密:实质上就是原本A使用自己的公钥加密后的密文,只有A的私钥才能解开,转化为B的私钥也能够解开。这个过程主要解放了A,A只需生成代理密钥,具体的过程(文件的传输,文件的转化,文件的存放)由可信第三方或是半诚实代理商实现,这就是代理重加密。
具体实现过程如下:
Step1. A将明文M用自己的公钥加密得到密文
C
P
K
a
=
E
n
c
(
P
K
A
,
M
)
C_{PKa}=Enc(PK_{A},M)
CPKa=Enc(PKA,M),其中的M就是A想要给B的内容。
Step2. A将
C
P
K
a
C_{PKa}
CPKa发给半诚实代理商,并为其生成转化密钥,这个密钥是由A为代理商计算好生成的密钥
R
K
A
−
>
B
RK_{A->B}
RKA−>B。
Step3. Proxy用A生成的密钥
R
K
A
−
>
B
RK_{A->B}
RKA−>B将密文
C
P
K
a
C_{PKa}
CPKa转化为B的私钥能够解密的密文
C
P
K
b
C_{PKb}
CPKb,其中Proxy只是提供计算转化服务,无法获得明文。
Step4. Proxy将生成好的
C
P
K
b
C_{PKb}
CPKb发给B。
Step5. B解密获得A想要秘密共享的明文M。