密钥生成
- 选两个 大素数 p, q 保证 g c d ( p q , ( p − 1 ) ( q − 1 ) ) = 1 gcd(pq, (p-1)(q-1)) = 1 gcd(pq,(p−1)(q−1))=1
- 计算 n = p q , λ = l c m ( p − 1 , q − 1 ) n=pq, \lambda=lcm(p-1, q-1) n=pq,λ=lcm(p−1,q−1)
- 定义 L ( x ) = ( x − 1 ) n L(x) = \frac{(x - 1)} {n} L(x)=n(x−1) 注意: 这里分式指除法
- 随机选一个 小于 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
- 公钥为 ( n , g ) (n, g) (n,g)
- 私钥为 ( λ , μ ) (\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)
(p−1)∗(q−1)
加密
- 明文 m 是 大于等于0 小于n的正整数
- 随机选择r满足
0
<
r
<
n
0< r < n
0<r<n 且
r
∈
Z
n
2
∗
r\in Z^*_{n^2}
r∈Zn2∗ (一种充分条件是 r,n 互质)
注: r ∈ Z n 2 ∗ r\in Z^*_{n^2} r∈Zn2∗ 指 r在 n 2 n^2 n2的剩余系下存在乘法逆元 - 计算密文 c = g m r n m o d    n 2 c = g^m r^n \mod n^2 c=gmrnmodn2
解密
- 计算明文 m = L ( c λ m o d    n 2 ) ∗ μ m o d    n m = L(c^λ \mod n^2 ) * \mu \mod n m=L(cλmodn2)∗μmodn