一些同态加密算法

RSA

1、产生公钥和私钥
随意选择两个大的质数p和q,p不等于q,令N=pq.
r=φ(N)=φ(p)φ(q)=(p1)(q1)r=φ(N)=φ(p)φ(q)=(p−1)(q−1)
选择一个小于 rr 的整数 eegcd(e,r)=1gcd(e, r)=1
求得 ee 关于 rr 的模反元素 dd(即e×d=1mod  re \times d=1\mod r
公钥:(N,e)
私钥:(N,d)
2、明文m加密为c
c=memod  N c = m^e \mod N
3、密文c解密为m
m=cdmod  N m = c^d \mod N

Paillier

1、产生公钥和私钥
随意选择两个大的质数p和q,p不等于q,令n=pq.
λ=lcm(p1)(q1)\lambda=lcm(p-1)(q-1)
随机选择一个整数gZN2g\in Z^*_{N^2}gcd(L(gλmod  N2),N)=1gcd(L(g^\lambda \mod N^2), N)=1
其中,函数L(u)=(u1)/nL(u)=(u-1)/n
公钥:(n,g)
私钥:(λ\lambda
2、明文m加密为c
随机选取整数rZnr \in Z^*_n
c=gmrnmod  n2 c=g^m \cdot r^n \mod n^2
3、密文c解密为m
m=L(cλmod  n2)L(gλmod  n2)mod  n m=\frac{L(c^\lambda \mod n^2)}{L(g^\lambda \mod n^2)}\mod n

fate_paillier:

1、明文m加密为c
n=pqn=pq
g=n+1g=n+1,则gm=(n+1)m(nm+1)mod  n2g^m=(n+1)^m \equiv (n*m+1)\mod n^2

apply_obfuscator():
随机选取整数rZnr \in Z^*_n
obfuscator=rnmod  n2obfuscator=r^n \mod n^2(in apply_obfuscator)

raw_encrypt():
if:(nn31)m<nif:(n-\frac{n}{3}-1) \le m <n
then:x=invert((n(nm)+1)mod  n2,n2)then:x=invert((n*(n-m)+1) \mod n^2,n^2)
else:x=(nm+1)mod  n2else:x=(n*m+1)\mod n^2

c=xobfuscatormod  n2c=x*obfuscator \mod n^2

2、密文c解密为m(using Chinese-remaindering)
h_func:h(x)=invert(l(gx1mod  x2,x),x)h\_func: h(x)=invert(l(g^{x-1} \mod x^2, x), x)
l_func:l(x,y)=x1yl\_func: l(x, y)=\frac{x-1}{y}

hp=h(p)=invert(l(gp1mod  p2,p),p)hp=h(p)=invert(l(g^{p-1} \mod p^2, p),p)
hq=h(q)=invert(l(gq1mod  q2,q),q)hq=h(q)=invert(l(g^{q-1} \mod q^2, q),q)
mp=l(cp1mod  p2,p)hpmod  pmp=l(c^{p-1}\mod p^2,p)*hp \mod p
mq=l(cq1mod  q2,q)hqmod  qmq=l(c^{q-1} \mod q^2, q)*hq \mod q
u=(mpmq)invert(q,p)mod  pu=(mp-mq)*invert(q,p) \mod p
m=(mq+uq)mod  nm=(mq+u*q) \mod n

Affine

1、keygen
生成n,再生成a、inv_a、b
gcd(a,n)=1gcd(a,n)=1
(根据欧拉公式得,ainv_amod  n=1a*inv\_a \mod n=1

2、明文m加密为(c,k)(代码中k=1)
c=(am+kb)mod  nc=(a*m+k*b)\mod n,recorded as pair (E(x), k), E(x) is ciphertext, k means the bias b’ coefficient is k.

3、密文(c,k)解密为m
m=(inv_a(cmod  nkb))mod  nm=(inv\_a*(c \mod n-k*b))\mod n
if:m/n>0.9if:m/n>0.9
then:m=mnthen:m=m-n
else:m=melse:m=m

IterativeAffine Homomorphic Encryption

1、keygen

Generate an key-tuple array, the element in the array is a tuple (a, inv_a, n), where (a, n) = 1, inv_a * a % n = 1. The array is sorted by n.

2、Encrypt
1E(x) = Enc_n o … o Enc_1(x), Enc_r(x) = a_r * x % n_r. a_r, n_r is the r-th element of key-tuple array.

3、Decrypt

Dec(E(x)) = Dec_1 o … o Dec_n(x), Dec_r(x) = (inv_a)_r * (a_r * x) % n_r = x % n_r

发布了274 篇原创文章 · 获赞 115 · 访问量 10万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 鲸 设计师: meimeiellie

分享到微信朋友圈

×

扫一扫,手机浏览