Skip to content

同态加密

Paillier加密: 任意次同态加与标量乘

支持无限次的加法同态以及明文k与密文的乘法同态(kEnc(m)),这里先讲g优化为n+1后的Paillier加密。

  1. 参数设置:

    1. 选择两个大素数p,q,计算 N=pq
    2. 计算 ϕ(N)=(p1)(q1)ϕ(N2)=Nϕ(N)ϕ(Nm)=Nm(11a)(11b)=Nm1(a1)(b1)
    3. 由二项式定理易知:(1+N)aZN2modN2(1+aN),易知 ind(1+N)ZN2=N(1+N)NmodN21
    4. 对于一个映射 f(a,b)=(1+N)abNmodN2 是单射
    证明

    f(a1,b1)=f(a2,b2),则 (1+N)a1b1N(1+N)a2b2NmodN2,则 (1+N)a1a2(b2b11)NmodN2,设 a1a2=k,则 (1+N)k(b2b11)NmodN2,如果k0,则(1+N)k=1+kN,而(b2b11)N1modN,则kN0modN恒成立,但是对于模N2而言,如果k0,则kN<N2,故不成立,所以k=0,即a1=a2,从而b1=b2。证毕。

    1. f(a1,b1)f(a2,b2)f(a1+a2,b1b2) 是一个同态
    2. 公钥为 N, 私钥为 ϕ(N),既(p1)(q1)
    3. L(x)=x1N
  2. 加密

    1. 选择随机数rZN
    2. 明文mZN
    3. 密文计算:c=Enc(m,r)=(1+N)mrN=(1+mN)rNmodN2
  3. 解密

    1. 计算 cϕ(N)modN2,则 cϕ(N)((1+N)mrN)ϕ(N)modN2(1+N)mϕ(N)modN2gcd(r,N2)=1andϕ(N2)=Nϕ(N)rNϕ(N)1modN2
    2. 计算 (1+N)mϕ(N)1N1+mϕ(N)N1Nmϕ(N)modN (参数设置中的3)
    3. 解得 mmϕ(N)ϕ(N)1modN

原始版本:把 n+1 换成生成元 g,则加密为 c=gmrNmodN2,跟优化后的比多了一次幂运算。

  1. 同态加

    1. 设有两个密文 c1=Enc(m1,r1)c2=Enc(m2,r2)
    2. c1c2modN2=(1+N)m1r1N(1+N)m2r2NmodN2 =(1+N)m1+m2(r1r2)NmodN2=Enc(m1+m2,r1r2)
  2. 标量乘

    1. 设有密文 c=Enc(m,r),标量kZ
    2. ckmodN2=((1+N)mrN)kmodN2 =(1+N)km(rk)NmodN2=Enc(km,rk)

BGN加密: 任意次同态加与一次同态乘

配对的一些性质: 乘法同态: e(u1·u2,v)=e(u1,v)·e(u2,v)e(u,v1·v2)=e(u,v1)·e(u,v2) 指数可提到映射外: e(ua,v)=e(u,v)ae(u,vb)=e(u,v)b 合起来:e(ua,vb)=e(u,v)ab

  1. 密钥生成

    1. 选择两个大素数p,q,计算 N=pq
    2. 准备双线性映射 e:G×GGT,生成元 gG,生成元 hGTind(G)=ind(GT)=N
    3. 公钥为 (n,g,h,e,G,GT),私钥为 (p,q)
  2. 加密 计算 c=gmhr,其中mZN为明文,rZN为随机数

  3. 解密

    1. 计算 cp=(gmhr)p=(gp)m
    2. 然后对其进行离散对数求解,得到m
  4. 同态加 Enc(m1)Enc(m2)=g1mh1rg2mh2mhr =gm1+m2hr1+r2+r =Enc(m1+m2)

  5. 同态乘

    1. c1=Enc(m1)=g1mh1rc2=Enc(m2)=g2mh2r
    2. denote g1=e(g,g)h1=e(g,h)
    3. Enc(m1)Enc(m2)=e(gm1hr1,gm2hr2) =e(g,g)m1m2e(g,h)m1r2e(h,g)r1m2e(h,h)r1r2 =g1m1m2h1m1r2+r1m2e(h,h)r1r2 =Enc(m1m2)