定义
对任意明文m,取一个整数
N
N
N,使得
N
=
p
q
N=pq
N=pq,其中
p
、
q
p、q
p、q为两大素数,常超过200位;取正整数
e
e
e,满足
(
e
,
φ
(
N
)
)
=
1
(e,\varphi(N))=1
(e,φ(N))=1;
d
d
d满足
e
d
≡
1
(
m
o
d
φ
(
N
)
)
ed\equiv 1\ (mod\ \varphi(N))
ed≡1 (mod φ(N))。则对于任意
1
≤
m
<
N
1\leq m <N
1≤m<N,若加密算法为
c
≡
m
e
(
m
o
d
N
)
c\equiv m^e \ (mod\ N)
c≡me (mod N),那么由密文c可通过
c
d
(
m
o
d
N
)
c^d\ (mod\ N)
cd (mod N)计算得明文m。
其中公钥
P
K
:
e
、
N
PK:e、N
PK:e、N;私钥
S
K
:
d
、
p
、
q
SK:d、p、q
SK:d、p、q。
由于大整数分解存在难题,十分耗时,因此只提供 N N N而不提供其分解方式则要通过密文求明文将会很麻烦,几乎不可能实现,因此该加密方法是经典的加密算法。为何在不知 p 、 q p、q p、q的情况下很难反解出明文,下面将具体描述加密和解密的过程。
加密
显然,用户可使用公钥
P
K
:
e
、
N
PK:e、N
PK:e、N对明文m进行加密使其变为密文c,加密公式:
c
≡
m
e
(
m
o
d
N
)
c\equiv m^e \ (mod\ N)
c≡me (mod N)
解密
因为有:
e
d
≡
1
(
m
o
d
φ
(
N
)
)
ed\equiv 1\ (mod\ \varphi(N)) \\
ed≡1 (mod φ(N)) 且由欧拉定理,对
(
a
,
p
)
=
1
(a,p)=1
(a,p)=1有:
a
φ
(
p
)
≡
1
(
m
o
d
p
)
a^{\varphi(p)}\equiv 1\ (mod\ p)
aφ(p)≡1 (mod p) 所以将
p
、
q
p、q
p、q分开考虑,对
c
≡
m
e
(
m
o
d
p
)
c\equiv m^e \ (mod\ p)
c≡me (mod p)有:
c
d
≡
(
m
e
)
d
≡
m
e
d
≡
m
e
d
(
m
o
d
φ
(
p
)
)
≡
m
(
m
o
d
p
)
c^d \equiv (m^e)^d \equiv m^{ed}\equiv m^{ed\ (mod\ \varphi(p))}\equiv m\ (mod\ p)
cd≡(me)d≡med≡med (mod φ(p))≡m (mod p) 同理对
q
q
q也有:
c
d
≡
m
(
m
o
d
q
)
c^d\equiv m\ (mod\ q)
cd≡m (mod q) 又因为
(
p
,
q
)
=
1
,
N
=
p
q
(p,q)=1,N=pq
(p,q)=1,N=pq,因此有解密公式:
m
≡
c
d
(
m
o
d
N
)
m\equiv c^d\ (mod\ N)
m≡cd (mod N)
因为求解
d
d
d的过程需要用到
φ
(
N
)
\varphi(N)
φ(N),又因
N
=
p
q
且
(
p
,
q
)
=
1
N=pq且(p,q)=1
N=pq且(p,q)=1,故有
φ
(
N
)
=
φ
(
p
)
φ
(
q
)
\varphi(N)=\varphi(p)\varphi(q)
φ(N)=φ(p)φ(q)。当不知密钥
p
、
q
p、q
p、q时,先要对
N
N
N进行分解才能求得
φ
(
N
)
\varphi(N)
φ(N),由于该过程耗时,所以安全有保障。而当知道
p
、
q
、
d
p、q、d
p、q、d时,则很容易求解,因此解密会很轻松。
由于
d
、
N
d、N
d、N可能很大,因此,也可先求得:
d
p
=
d
(
m
o
d
p
)
d
q
=
d
(
m
o
d
q
)
d_p=d\ (mod\ p)\\ d_q=d\ (mod\ q)
dp=d (mod p)dq=d (mod q) 再令:
m
1
≡
c
d
p
(
m
o
d
p
)
m
2
≡
c
d
q
(
m
o
d
q
)
m_1\equiv c^{d_p}\ (mod\ p) \\ m_2\equiv c^{d_q}\ (mod\ q)
m1≡cdp (mod p)m2≡cdq (mod q) 又因
m
≡
c
d
(
m
o
d
N
)
m\equiv c^d\ (mod\ N)
m≡cd (mod N) 所以有:
m
≡
c
d
≡
c
d
(
m
o
d
φ
(
p
)
)
≡
c
d
p
≡
m
1
(
m
o
d
p
)
m
≡
c
d
≡
c
d
(
m
o
d
φ
(
q
)
)
≡
c
d
q
≡
m
2
(
m
o
d
q
)
m\equiv c^d\equiv c^{d\ (mod\ \varphi(p))}\equiv c^{d_p}\equiv m_1\ (mod p) \\ m\equiv c^d\equiv c^{d\ (mod\ \varphi(q))}\equiv c^{d_q}\equiv m_2\ (mod q)
m≡cd≡cd (mod φ(p))≡cdp≡m1 (modp)m≡cd≡cd (mod φ(q))≡cdq≡m2 (modq) 由中国剩余定理可计算得:
m
≡
k
1
m
1
+
k
2
m
2
(
m
o
d
N
)
m\equiv k_1 m_1 + k_2 m_2\ (mod\ N)
m≡k1m1+k2m2 (mod N)
举例
我们取较小数模拟RSA算法过程,但实际中是很大的数。
令
N
=
p
q
=
7
∗
13
=
91
N=pq=7*13=91
N=pq=7∗13=91,则
φ
(
N
)
=
φ
(
p
)
φ
(
q
)
=
6
∗
12
=
72
\varphi(N)=\varphi(p)\varphi(q)=6*12=72
φ(N)=φ(p)φ(q)=6∗12=72,令
e
=
11
e=11
e=11,显然
(
e
,
φ
(
N
)
)
=
(
11
,
72
)
=
1
(e,\varphi(N))=(11, 72)=1
(e,φ(N))=(11,72)=1成立。
加密:
取明文
m
=
5
m=5
m=5,则通过加密公式加密后有密文:
c
≡
m
e
≡
5
11
≡
73
(
m
o
d
91
)
c\equiv m^e\equiv 5^{11}\equiv 73\ (mod\ 91)
c≡me≡511≡73 (mod 91)解密:
因为:
e
d
≡
11
d
≡
1
(
m
o
d
φ
(
N
)
)
≡
1
(
m
o
d
72
)
ed\equiv 11d\equiv 1\ (mod\ \varphi(N))\equiv 1\ (mod\ 72)
ed≡11d≡1 (mod φ(N))≡1 (mod 72) 所以:
d
≡
59
(
m
o
d
72
)
d\equiv 59\ (mod\ 72)
d≡59 (mod 72) 所以明文:
m
≡
c
d
≡
7
3
59
≡
5
(
m
o
d
N
)
m\equiv c^d\equiv 73^{59}\equiv 5\ (mod\ N)
m≡cd≡7359≡5 (mod N) 解密成功!
参考资料
[1]. RSA加密原理解析
[2]. CTF中RSA攻击方法总结