Paillier Cryptosystem (Additive Homomorphic Cryptosystem)
Table of Contents
1. Paillier Cryptosystem 简介
Paillier 密码系统是 Pascal Paillier 于 1999 年发明的,它是一种公钥密码算法。除此外,Paillier 具备“加同态”性质。
Paillier 背后的数学难题是“已知合数
1.1. 生成密钥对
Paillier 密钥对的生成过程:
- 随机选择两个大素数
,需要满足条件 和 互素,不满足就重新选择随机数; - 计算
, ,其中 表示最小公倍数(Least Common Multiple); - 定义
,这里是除法后向下取整; - 随机选择一个小于
的正整数 ,并且存在 ,如果不存在这样的 ,则要重新选择 ,或者从第 1 步重新开始;
得到的 公钥是
1.1.1. 生成密钥对的简化方式
如果素数
1.2. 加密和解密过程
设
- 随机选择一个
满足 ,且还满足 和 互素; - 计算密文:
。注:前面介绍过生成密钥对时往往会设置 ,这时计算密文的公式就是
设密文为
2. Paillier 加解密实例
生成密钥对生成:
p=13, q=17 # 随机选择的素数 n=13*17=221 # n = p * q \lambda=lcm(12, 16) = 48 # \lambda=lcm(p-1, q-1) = 48 g=4886 # 从小于 221^2 的数中随机选择的 \mu=159 # (L(4886^{48} mod 48841))^{-1} mod 221 = 159
公钥为
设要对消息
m=123 r=666 # 随机选择的,且 r 和 n 互素 c=4886^{123} * 666^{221} mod 48841 = 25889 # c=g^m r^n mod n^2 \__/ \_/ 公钥 公钥
解密过程:
m=L(25889^{48} mod 48841) * 159 mod 221 = 123 # m=L(c^{\lambda} mod n^2) * \mu mod n \_/ \_/ 私钥 私钥
可见把消息
3. Paillier 的设计思路
4. Paillier 具备“加同态”性质
Paillier 具备“加同态”性质,这句话的意思是: ① 仅已知公钥和两个加密后的消息
除了上面性质外,Paillier 加密方案还可实现: ② 仅已知公钥和密文
需要说明的是,对于 Paillier 加密方案,给出公钥和两个加密后的消息
4.1. 具备“乘同态”性质的加密方案(Unpadded RSA,ElGamal)
我们知道 Paillier 加密方案,不具备“乘同态”性质。那么存在具备“乘同态”性质的加密方案吗?答案是肯定的,如 Unpadded RSA,ElGamal 加密方案都具备“乘同态”性质。
下面以 RSA 为例,介绍一下它的“乘同态”性质。我们知道对于 RSA,加密算法为
5. Paillier 加解密性能较差
Paillier 算法的加解密性能都较差。主要原因是加密和解密时,都有 non-fixed-base(即底数不是固定的)的模指数(Modular Exponentiation)运算。 我们知道,计算模指数时,如果底数是提前知道的数字,则我们可以提前通过预计算底数的指数来加快模指数运算。但如果底数不能提前知道,则无法使用这些优化措施。
Paillier 在论文 Public-Key Cryptosystems Based on Composite Degree Residuosity Classes 中提出了两种方案 Paillier Schema 1(这就是前文介绍的 Paillier 基本方案)和 Paillier Schema 3(这是一种优化方案),分别如图 1 和 2 所示。
Figure 1: Paillier Schema 1(加解密性能较差,加密时底数
Figure 2: Paillier Schema 3(加密时底数
关于其它的性能更好的 Paillier 变种,可以参考:Optimized Paillier's Cryptosystem with Fast Encryption and Decryption