Paillier加密算法

wiki: https://en.wikipedia.org/wiki/Paillier_cryptosystem

密钥生成

  1. 选两个 大素数 p, q 保证 g c d ( p q , ( p − 1 ) ( q − 1 ) ) = 1 gcd(pq, (p-1)(q-1)) = 1 gcd(pq,(p1)(q1))=1
  2. 计算 n = p q , λ = l c m ( p − 1 , q − 1 ) n=pq, \lambda=lcm(p-1, q-1) n=pq,λ=lcm(p1,q1)
  3. 定义 L ( x ) = ( x − 1 ) n L(x) = \frac{(x - 1)} {n} L(x)=n(x1) 注意: 这里分式指除法
  4. 随机选一个 小于 n 2 n^2 n2 的正整数 g g g,并且存在 μ = ( L ( g λ m o d    n 2 ) ) − 1 m o d    n \mu = (L(g^\lambda \mod n^2 ))^{-1} \mod n μ=(L(gλmodn2))1modn
  5. 公钥为 ( n , g ) (n, g) (n,g)
  6. 私钥为 ( λ , μ ) (\lambda, \mu) (λ,μ)

快速生成密钥

在密钥长度相同的情况下,可以快速生成密钥
g = n + 1 , λ = ϕ ( n ) , μ = ϕ ( n ) − 1 m o d    n g=n+1, \lambda=\phi(n), \mu=\phi(n)-1 \mod n g=n+1,λ=ϕ(n),μ=ϕ(n)1modn , ϕ ( n ) \phi(n) ϕ(n) 指欧拉函数, 这里等于 ( p − 1 ) ∗ ( q − 1 ) (p-1)*(q-1) (p1)(q1)

加密

  1. 明文 m 是 大于等于0 小于n的正整数
  2. 随机选择r满足 0 &lt; r &lt; n 0&lt; r &lt; n 0<r<n r ∈ Z n 2 ∗ r\in Z^*_{n^2} rZn2 (一种充分条件是 r,n 互质)
    注: r ∈ Z n 2 ∗ r\in Z^*_{n^2} rZn2 指 r在 n 2 n^2 n2的剩余系下存在乘法逆元
  3. 计算密文 c = g m r n m o d &ThinSpace;&ThinSpace; n 2 c = g^m r^n \mod n^2 c=gmrnmodn2

解密

  1. 计算明文 m = L ( c λ m o d &ThinSpace;&ThinSpace; n 2 ) ∗ μ m o d &ThinSpace;&ThinSpace; n m = L(c^λ \mod n^2 ) * \mu \mod n m=L(cλmodn2)μmodn
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值