公钥密码体制-Paillier (二)

背景

对必要的数论知识需要补充的,需要先阅读 公钥密码体制-Paillier (一)
也可以先阅读维基上对 Paillier 的说明。

算法

密钥生成

  1. 随机选择两个大素数 p p p q q 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 n=pq n=pq λ ( n ) = l c m ( p − 1 , q − 1 ) \lambda(n)=lcm(p-1, q-1) λ(n)=lcm(p1,q1) l c m lcm lcm 是取最小公倍数;
  3. Z n 2 ∗ \mathbb{Z_{n^2}^*} Zn2随机选择一个整数 g g g,即 g ∈ Z n 2 ∗ g\in\mathbb{Z}_{n^2}^* gZn2,( Z n 2 ∗ \mathbb{Z}_{n^2}^* Zn2 表示在 n 2 n^2 n2 剩余类中,与 n 2 n^2 n2 互素的数);
  4. 对于刚才选择的 g g g,要确保 n n n 可以整除 g g g 的阶。可以利用下面的模运算检验 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, 其中 L ( x ) = x − 1 n L(x)=\frac{x-1}{n} L(x)=nx1。其实就是相当于检测 L ( g λ   m o d   n 2 ) L(g^{\lambda}\,mod\,n^2) L(gλmodn2) 在模 n n n 的情况是否有逆元。如果选择的 g g g 可以保证可以被 n n n 整除,它其实是可以保证有逆元的要求的;
    注意:公式 a b \frac{a}{b} ba,不是模运算乘法中的 a a a 乘以 b b b 的倒数,而是普通算法运算的 a a a 除以 b b b
  5. 使用 ( n , g ) (n,g) (n,g) 作为公钥,使用 ( λ , μ ) (\lambda, \mu) (λ,μ) 作为私钥。

快速生成密钥

如果使用相同长度的 p , q p,q pq,可以快速生成密钥。比如选 g = n + 1 g=n+1 g=n+1,因为很明显 n + 1 ∈ Z n 2 ∗ n+1 \in \mathbb{Z}_{n^2}^* n+1Zn2 ( 1 + n ) n ≡ 1 + n ∗ n ≡ 1   m o d   n 2 (1+n)^n\equiv1+n*n\equiv1\,mod\,n^2 (1+n)n1+nn1modn2 n n n 是 1+n 模 n 2 n^2 n2 的阶, n n n 本身也是 n n n 的一倍。此时的 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
由于 λ ( n ) = ϕ ( n ) = ( p − 1 ) ∗ ( q − 1 ) \lambda(n) = \phi(n)=(p-1)*(q-1) λ(n)=ϕ(n)=(p1)(q1) g = n + 1 g=n+1 g=n+1,所以 g λ   m o d   n 2 = ( 1 + n ) λ   m o d   n 2 ≡ ( 1 + λ ∗ n )   m o d   n 2 = 1 + λ ∗ n g^{\lambda}\,mod\,n^2=(1+n)^\lambda\,mod\,n^2\equiv(1+\lambda*n)\,mod\,n^2=1+\lambda*n gλmodn2=(1+n)λmodn2(1+λn)modn2=1

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值