Appearance
代理重加密
Proxy Re-encryption(PRE)
假设Sender原本有一个信息是加密给 Alice 的,但是这时 A 不在,A 可以告诉一个代理 Proxy,让其把这个信息重新加密给 Bob,而 Proxy 并不知道这个信息的内容。对于 P 来说,他只知道 RKEY (Re-encryption Key),而不知道 A 和 B 的私钥。
基于Elgamal的双向代理重加密 - 1
双向代理,既可以从 A 重加密给 B,也可以从 B 重加密给 A。
这个方案是多跳的,既可以经过多次的代理重加密。
Set-up
- 生成安全素数
, 在子群 中选取生成元
Keygen
- 选取随机数
作为 A 和 B 的私钥 - 计算公钥
和
Re-keygen
- 入参有两个,既A和B的私钥
- 对于从 A 到 B 的重加密,计算
- 同样的,对于从 B 到 A 的重加密,计算
Enc
和ElGamal一致
- 选取随机数
- 对于明文
- 假设现在要加密给 A
- 计算密文
- 既
对于A, Dec和ElGamal一致,故而不在此赘述
Re-Enc
Proxy 拿到密文
和重加密密钥 计算新的密文
既:
此时显然,B 可以使用自己的私钥
来解密新的密文
基于Elgamal的双向代理重加密 - 2
但是显然,在pratical上,上面这种rkeygen的方式显然是有问题的,故而有下面这种变换
Re-keygen
- 对于 A, 要生成
, 既 - 发送
给Proxy
Re-Enc
- 计算
- 既:
Dec
- 对于 B 来说,显然只需知道A的公钥和自己的私钥,即可计算出
- 然后计算:
即可得到消息
基于配对的单向代理重加密
对于一个传统的Elgamal密文:
这样,A仍然可以使用自己的私钥
再结合一下配对,就有了如下方案
Set-up
- 选取群
,以及双线性映射 - 选取生成元
,生成元
Keygen
- 对于A,选取随机数
作为私钥,计算公钥 - 对于B,选取随机数
作为私钥,计算公钥
Enc
依旧是先加密给 A
- 选取随机数
- 计算
- 计算
, - 发送密文
Dec
对于A来说,显然:
- 计算
- 再计算
即可
Re-keygen
- 计算
In pratical: 先计算
, 再计算
Re-Enc
保持不变 - 计算
- 发送新的密文
Dec2
对于B来说,显然:
- 计算
- 再计算
即可