Paillier密码
原文章:密码学学习笔记 之 paillier cryptosystem - 安全客,安全资讯平台 (anquanke.com)
本文只摘取了主要公式及选值要求,原文中还有加密解密公式的证明过程
两种类型
正常类型
- 随机选取两个大素数 p , q p,q p,q满足 g c d ( p ∗ q , ( p − 1 ) ∗ ( q − 1 ) ) gcd(p*q,(p-1)*(q-1)) gcd(p∗q,(p−1)∗(q−1))
- n = p ∗ q n = p*q n=p∗q
- λ = l c m [ p − 1 , q − 1 ] = ( p − 1 ) ∗ ( q − 1 ) / g c d ( p − 1 , q − 1 ) \lambda =lcm[p-1,q-1]=(p-1)*(q-1)/gcd(p-1,q-1) λ=lcm[p−1,q−1]=(p−1)∗(q−1)/gcd(p−1,q−1)
- 选取随机整数 g , 0 < g < n 2 g,0<g<n^2 g,0<g<n2
- 定义 L ( x ) = ( x − 1 ) / n L(x)= (x-1)/n L(x)=(x−1)/n
- μ = ( L ( g λ m o d n 2 ) ) − 1 ( m o d n ) \mu =(L(g^{\lambda}~mod~n^2))^{-1}(mod~n) μ=(L(gλ mod n2))−1(mod n)
- 公钥 ( n , g ) (n,g) (n,g)
- 私钥 ( λ , μ ) (\lambda,\mu) (λ,μ)
与变种相比较,其特征是 g g g取 0 0 0到 n 2 n^2 n2得随机数
加密过程
m m m为明文,需要 0 ≤ m < n 0\leq m < n 0≤m<n
随机 r r r,保证 g c d ( r , n ) = 1 gcd(r,n)=1 gcd(r,n)=1
密文 c ≡ g m ∗ r n ( m o d n 2 ) c\equiv g^m*r^n(mod~n^2) c≡gm∗rn(mod n2)
解密过程
m ≡ L ( c λ % n 2 ) ∗ μ ( m o d n ) m \equiv L(c^\lambda~\%~n^2)*\mu(mod~n) m≡L(cλ % n2)∗μ(mod n)
或者可以这样写(百度百科是这样的,但实际上是一致的)
m = L ( c λ ( m o d n 2 ) ) L ( g λ ( m o d n 2 ) ) ( m o d n ) m = \frac{L(c^\lambda~(mod~n^2))}{L(g^\lambda~(mod~n^2))}(mod~n) m=L(gλ (mod n2))L(cλ (mod n2))(mod n)
变种
- g = n + 1 g=n+1 g=n+1
- λ = ϕ ( n ) = ( p − 1 ) ∗ ( q − 1 ) \lambda=\phi(n)=(p-1)*(q-1) λ=ϕ(n)=(p−1)∗(q−1)
- μ = ϕ ( n ) − 1 ( m o d n ) \mu=\phi(n)^{-1}(mod~n) μ=ϕ(n)−1(mod n)
- 其余参数与正常类型一致
特征: g g g不是取随机数,而是 g = n + 1 g = n+1 g=n+1
其加密解密过程与正常类型一致