Appearance
多密钥的公钥加密方案 BCP
BCP 是一种基于 Paillier 结构的双陷门公钥加密系统。它允许系统拥有一个主密钥(Master Key)和一个用户私钥(User Private Key)。
1. Setup
由可信第三方或分布式协议生成公共参数和主密钥:
- 选择两个大素数
,计算 - 计算
,可以用 来计算 - 选择生成元
,使得 的阶是 的倍数(通常需满足 ) - 计算
。 - 其中函数
- 其中函数
- 公共参数 (Params):
- 主密钥 (MK):
2. KeyGen
用户生成自己的公私钥对:
- 用户随机选择私钥
- 计算公钥
- 用户公钥 (PK):
- 用户私钥 (SK):
3. Encrypt
给定明文
- 随机选择随机数
- 计算
- 计算
- 密文 (Ciphertext):
解密
BCP 方案支持两种解密方式。
方式一:使用用户私钥解密 (Exponent Decryption)
持有私钥
证明: 展开
应用
证毕。
方式二:使用主密钥解密 (Factor Decryption)
持有主密钥
核心性质: 对于任意
证明
记
因为
由费马小定理:
又因为
由中国剩余定理(CRT)得到:
于是存在
把上式视为模
因此(这里的
证毕。
算法步骤:
- 恢复随机数
: - 恢复私钥
: - 计算中间项:
- 消除随机性:
- 恢复明文:
详细证明:
Step 1: 展开
所以:
乘以
Step 2: 展开
Step 3: 展开
所以:
乘以 term:
Step 4: 计算
Step 5: 恢复
证毕。
加法同态
给定两条消息
加法:
标量乘
使用加法同态实现双方的乘法同态
假设有两个参与方:
- 计算方 (Alice):拥有密文
和 ,以及公钥 。她想计算 ,但没有私钥。 - 协助方 (Bob):拥有公钥
和私钥 。
由于加法同态加密本身不支持直接的密文乘法(即
协议流程
1. 盲化 (Blinding/Masking) - Alice
计算方生成两个大的随机数
计算方将这两个掩盖后的密文发送给协助方。
2. 解密与计算 - Bob
协助方收到密文后,使用私钥
协助方在明文空间计算这两个值的乘积,并将结果重新加密后发回给计算方:
3. 去盲 (Unblinding) - Alice
计算方收到
展开乘积公式:
为了得到
计算方利用标量乘同态性质(
- 计算
的密文: - 计算
的密文: - 计算
的密文:直接加密常数
4. 最终聚合
计算方将所有部分通过同态加法聚合:
至此,计算方在未泄露
多密钥的安全多方计算
各用户
1. 初始化与上传
- 云服务器 S 执行 Setup,生成
, - 广播 PP 给所有用户和云服务器 C
- 每个用户
生成 ,加密 得到 ,上传至 C
此时,C 持有密文集合
2. 密文转换
步骤 A:C 对每个密文进行盲化
对每个
但由于 C 无法解密,它利用 加法同态性 构造
- 生成
- 计算:
然后将
步骤 B:S 使用 MK 解密得到
S 利用主密钥 MK 和公钥
步骤 C:S 用统一公钥重新加密
S 生成一个 临时统一公钥
发回给 C。
步骤 D:C 去除盲化因子
C 已知
现在,C 拥有所有
3. 函数计算
加法(直接利用同态性):
乘法(需交互):
要计算
- C 随机选择
- 计算:
- 发送给 S,S 解密得
- S 计算
- S 加密该值并返回:
- C 本地计算:
其中
4. 密文转换
最终结果为
C 盲化密文
: - 选择
- 计算
- 计算并发送给 S:
- 选择
S 解密, 得到
S 使用用户公钥
加密 ,得到 C 去盲:
- 计算
- 计算最终结果:
- 发送给用户