在《Tongsuo 支持半同态加密算法 EC-ElGamal》中,已经阐述了同态和半同态加密算法的背景和原理,可以移步查阅,总之,同态算法在隐私计算领域有着重要的作用,目前应用比较广泛的是 Paillier 和 EC-ElGamal 半同态加密算法,这两个算法都只支持加法同态,其接口也类似,只是原理和性能不一样,Paillier 是基于复合剩余类的困难性问题(大数分解难题)的公钥加密算法,有点类似 RSA,而 EC-ElGamal 是基于椭圆曲线数学理论的公钥加密算法,其安全性理论上要比 Paillier 要更好,但其性能各有优劣,EC-ElGamal 的加密和密文加法性能要比 Paillier 好,而 Paillier 的解密和密文标量乘法性能要比 EC-ElGamal 好,而且稳定,EC-ElGamal 的解密性能与解密的数字大小有关系,数字越大可能需要解密的时间越长,这与 EC-ElGamal 解密用到的解密表有关系,而 Paillier 的解密就没有这个问题,可以根据自己的业务特点选择使用 Paillier 还是 EC-ElGamal。
Paillier 原理
密钥生成
- 随机选择两个大素数 p,q,满足 gcd(pq,(p−1)(q−1))=1,且满足 p 和 q 的长度相等;
- 计算 n=pq以及λ=lcm(p−1,q−1),lcm 表示最小公倍数;
- 随机选择整数 g←Zn2∗,一般g的计算公式如下:
- 随机选择整数 k∈Zn∗
- 计算:g=1+kn,为了简化和提高性能,k一般选1,g=1+n
- 定义 L 函数:L(x)=nx−1,计算:μ=(L(gλ mod n2))−1 mod n
- 公钥:(n, g),私钥:(λ, μ)
- 明文 m,满足 −n<m<n
- 选择随机数 r,满足 0≤r<n 且 r∈Zn∗
- 计算密文:c=gmrn mod n2
- 密文 c,满足 c∈Zn2∗
- 计算明文:m=L(cλ mod n2)×μ mod n
密文加法
- 密文:c1 and c2,计算:c=c1×c2 mod n2,c 就是密文加法的结果
密文减法
- 密文:c1 and c2,计算:c=c2c1 mod n2,c 就是密文减法的结果
密文标量乘法
- 密文:c1,明文标量:a,计算:c=c1a mod n2,c 就是密文标量乘法的结果
正确性
加解密正确性
公式推导需要用到 Carmichael 函数和确定合数剩余的公式,下面简单说明一下:
- Carmichael 函数
- 设 n=pq,其中:p,q为大素数
- 欧拉函数:ϕ(n),Carmichael函数:λ(n)
- 当 ϕ(n)=(p−1)(q−1)和 λ(n)=lcm(p−1,q−1)时,其中:Zn2∗=ϕ(n2)=nϕ(n)。对于任意 w∈Zn2∗,有如下性质:{wλ=1 mod nwnλ=1 mod n2
- 判定合数剩余
- 判定合数剩余类问题是指n=pq,其中:p,q为大素数,任意给定 y∈Zn2∗,使得 z=yn mod n2,则说 z是模n2的第n次剩余
- 第n项剩余的集合是Zn2∗的一个ϕ(n)阶乘法子集
- 每个第n项剩余z都正好拥有n个n阶的根,其中只有一个是严格小于n的(即 nz mod n )
- 第n项剩余都可以写成 (1+n)x=1+xn mod n2的形式
- 正确性验证
cλ mod n2=(gmrn)λ mod n2=gmλrnλ mod n2=gmλ mod n2=(1+n)mλ mod n2=1+nmλ mod n2
gλ mod n2=(1+n)