秘钥生成主要由如下步骤:
k
p
u
b
=
(
n
,
g
)
,
k
p
r
=
(
λ
,
μ
)
k_{pub} = (n, g), k_{pr} = (\lambda, \mu)
kpub=(n,g),kpr=(λ,μ)
随机选择两个大素数
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,(p−1)(q−1))=1,且满足p
和
和
和q$的长度相等。
计算
n
=
p
∗
q
n = p*q
n=p∗q,
λ
=
l
c
m
(
p
−
1
,
q
−
1
)
\lambda = lcm(p-1, q-1)
λ=lcm(p−1,q−1),
l
c
m
lcm
lcm为两个数的最小公倍数。
随机选取
g
g
g,
g
∈
Z
n
2
∗
g \in Z^*_ {n^2}
g∈Zn2∗, 并且满足
g
c
d
(
L
(
g
λ
m
o
d
n
2
)
,
n
)
=
1
gcd(L(g^{\lambda} modn^2), n) = 1
gcd(L(gλmodn2),n)=1。 其中
L
(
x
)
=
x
−
1
n
L(x) = \frac{x-1}{n}
L(x)=nx−1,
μ
=
(
L
(
g
λ
m
o
d
n
2
)
)
−
1
m
o
d
n
\mu = (L(g^{\lambda} modn^2))^{-1} mod n
μ=(L(gλmodn2))−1modn
公钥为
k
p
u
b
=
(
n
,
g
)
k_{pub} = (n, g)
kpub=(n,g)
私钥为
k
p
r
=
(
λ
,
μ
)
k_{pr} = (\lambda, \mu)
kpr=(λ,μ)
明文加密
输入明文信息m, 满足
m
∈
Z
n
m \in Z_n
m∈Zn
选择随机数
0
≤
r
<
n
0 \leq r < n
0≤r<n且
r
∈
Z
n
∗
r \in Z^*_n
r∈Zn∗
计算密文:
c
=
g
m
r
n
(
m
o
d
n
2
)
c = g^mr^n(modn^2)
c=gmrn(modn2)
密文解密
输入密文c, 满足
c
∈
Z
n
2
∗
c \in Z^*_ {n^2}
c∈Zn2∗
计算明文消息:
m
=
L
(
c
λ
m
o
d
n
2
)
∗
μ
m
o
d
n
=
L
(
c
λ
m
o
d
n
2
)
L
(
g
λ
m
o
d
n
2
)
m
o
d
n
m = L(c^{\lambda}modn^2) * \mu mod n = \frac{L(c^{\lambda} modn^2)}{L(g^{\lambda} modn^2)}modn
m=L(cλmodn2)∗μmodn=L(gλmodn2)L(cλmodn2)modn