1.密钥生成
(1). 选两个保密的大素数
p
,
q
p,q
p,q.
(2). 计算
n
=
p
×
q
,
ϕ
(
n
)
=
(
p
−
1
)
(
q
−
1
)
,
ϕ
(
n
)
n=p\times q,\phi(n)=(p-1)(q-1),\phi(n)
n=p×q,ϕ(n)=(p−1)(q−1),ϕ(n)为
n
n
n欧拉函数值
注:与
n
n
n互素的剩余类个数称为欧拉函数值
ϕ
(
n
)
\phi(n)
ϕ(n),素数
p
p
p的欧拉函数值为
ϕ
(
p
)
=
p
−
1
\phi(p)=p-1
ϕ(p)=p−1
(3). 选取整数
e
,
1
<
e
<
ϕ
(
n
)
e,1<e<\phi(n)
e,1<e<ϕ(n),
g
c
d
(
ϕ
(
n
)
,
e
)
=
1
gcd(\phi(n),e)=1
gcd(ϕ(n),e)=1(互素)
(4). 计算
d
d
d,满足
d
⋅
e
=
1
m
o
d
(
ϕ
(
n
)
)
d\cdot e=1mod(\phi(n))
d⋅e=1mod(ϕ(n)),即
d
d
d是
e
e
e模
ϕ
(
n
)
\phi(n)
ϕ(n)的逆元,
e
e
e与
ϕ
(
n
)
\phi(n)
ϕ(n)互素,故一定有逆元
d
d
d。
注:对任意两个整数
a
,
b
a,b
a,b,存在整数
x
,
y
x,y
x,y,使得
g
c
d
(
a
,
b
)
=
x
a
+
y
b
gcd(a,b)=xa+yb
gcd(a,b)=xa+yb。所以因
e
e
e与
ϕ
(
n
)
\phi(n)
ϕ(n),所以存在
x
e
+
y
ϕ
(
n
)
=
1
xe+y\phi(n)=1
xe+yϕ(n)=1,模去
ϕ
(
n
)
\phi(n)
ϕ(n)得
x
e
=
1
(
m
o
d
ϕ
(
n
)
)
xe=1(mod ~\phi(n))
xe=1(mod ϕ(n))
(5).
{
e
,
n
}
\{e,n\}
{e,n}为公钥,
{
d
}
\{d\}
{d}为私钥
2.加密
对明文分组,使每一个分组十进制值小于 n n n,每个分组 m m m做以下计算 c = m e ( m o d n ) c=m^e(mod ~n) c=me(mod n)
3.解密
m = c d ( m o d n ) m=c^d(mod~n) m=cd(mod n)
正确性验证:
c
d
(
m
o
d
n
)
=
m
e
d
(
m
o
d
n
)
=
m
k
ϕ
(
n
)
+
1
(
m
o
d
n
)
c^d(mod~n)=m^{ed}(mod~n)=m^{k\phi(n)+1}(mod~n)
cd(mod n)=med(mod n)=mkϕ(n)+1(mod n)
1.若
m
,
n
m,n
m,n互素,欧拉定理(若
r
,
m
r,m
r,m互素,则
r
ϕ
(
m
)
=
1
(
m
o
d
m
)
r^{\phi(m)}=1(mod~m)
rϕ(m)=1(mod m))得:
m
k
ϕ
(
n
)
m
(
m
o
d
n
)
=
m
(
m
o
d
n
)
m^{k\phi(n)}m(mod~n)=m(mod~n)
mkϕ(n)m(mod n)=m(mod n),
m
<
n
m<n
m<n,得
m
m
m.
2.
m
,
n
m,n
m,n不互素,则
g
c
d
(
m
,
n
)
≠
1
gcd(m,n)\neq 1
gcd(m,n)=1,因为
n
=
p
q
n=pq
n=pq,
p
,
q
p,q
p,q都为大素数,所以可以知道
m
m
m是
p
p
p的倍数或
q
q
q的倍数。
不妨设
m
=
t
p
m=tp
m=tp,则有
g
c
d
(
m
,
q
)
=
1
gcd(m,q)=1
gcd(m,q)=1否则
m
m
m是
p
q
pq
pq的倍数,与
m
<
n
=
p
q
m<n=pq
m<n=pq矛盾。所以有
m
ϕ
(
q
)
=
1
(
m
o
d
q
)
m^{\phi(q)}=1(mod~q)
mϕ(q)=1(mod q),
m
k
ϕ
(
q
)
=
1
(
m
o
d
q
)
m^{k\phi(q)}=1(mod~q)
mkϕ(q)=1(mod q),
[
m
k
ϕ
(
q
)
]
ϕ
(
p
)
=
1
(
m
o
d
q
)
[m^{k\phi(q)}]^{\phi(p)}=1(mod~q)
[mkϕ(q)]ϕ(p)=1(mod q),
m
k
ϕ
(
n
)
=
1
(
m
o
d
q
)
m^{k\phi(n)}=1(mod~q)
mkϕ(n)=1(mod q)
所以存在整数
r
r
r,
m
k
ϕ
(
n
)
=
1
+
r
q
m^{k\phi(n)}=1+rq
mkϕ(n)=1+rq两边乘以
m
=
t
p
m=tp
m=tp,得
m
k
ϕ
(
n
)
+
1
=
m
+
r
t
p
q
=
m
+
r
t
n
m^{k\phi(n)+1}=m+rtpq=m+rtn
mkϕ(n)+1=m+rtpq=m+rtn,即
m
k
ϕ
(
n
)
+
1
=
m
(
m
o
d
n
)
m^{k\phi(n)+1}=m(mod~n)
mkϕ(n)+1=m(mod n)
所以得
c
d
(
m
o
d
n
)
=
m
c^{d}(mod~n)=m
cd(mod n)=m.
举例:
1.密钥生成
(1). 选两个保密的大素数
p
=
3
,
q
=
7
p=3,q=7
p=3,q=7.
(2). 计算
n
=
p
×
q
=
21
,
ϕ
(
n
)
=
(
p
−
1
)
(
q
−
1
)
=
2
∗
6
=
12
,
ϕ
(
n
)
n=p\times q=21,\phi(n)=(p-1)(q-1)=2*6=12,\phi(n)
n=p×q=21,ϕ(n)=(p−1)(q−1)=2∗6=12,ϕ(n)为
n
n
n欧拉函数值
(3). 选取整数
e
=
5
,
1
<
e
<
12
e=5,1<e<12
e=5,1<e<12,
g
c
d
(
12
,
5
)
=
1
gcd(12,5)=1
gcd(12,5)=1
(4). 计算
d
d
d,满足
d
⋅
e
=
1
m
o
d
(
ϕ
(
n
)
)
d\cdot e=1mod(\phi(n))
d⋅e=1mod(ϕ(n))用辗转相除可得
5
∗
5
=
1
(
m
o
d
21
)
5*5=1(mod~21)
5∗5=1(mod 21),所以
d
=
5
d=5
d=5
(5).
{
e
=
5
,
n
=
21
}
\{e=5,n=21\}
{e=5,n=21}为公钥,
{
d
=
5
}
\{d=5\}
{d=5}为私钥
2.加密
对明文
10011010
10011010
10011010分组,
n
n
n=21,每个分组1:
m
=
1001
=
9
m=1001=9
m=1001=9,分组2:
m
=
1010
=
10
m=1010=10
m=1010=10做以下计算
分组1:
c
=
m
e
(
m
o
d
n
)
=
9
5
(
m
o
d
21
)
=
18
c=m^e(mod ~n)=9^5(mod21)=18
c=me(mod n)=95(mod21)=18
分组2:
c
=
m
e
(
m
o
d
n
)
=
1
0
5
(
m
o
d
21
)
=
19
c=m^e(mod ~n)=10^5(mod21)=19
c=me(mod n)=105(mod21)=19
3.解密
分组1:
m
1
=
c
d
(
m
o
d
n
)
=
1
8
5
(
m
o
d
21
)
=
9
m1=c^d(mod~n)=18^{5}(mod21)=9
m1=cd(mod n)=185(mod21)=9
分组2:
m
2
=
1
9
5
(
m
o
d
21
)
=
10
m2=19^{5}(mod 21)=10
m2=195(mod21)=10