前言
RSA算法是最著名的且被广泛应用的公钥加密体制
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
9.1 证明:变种RSA算法加密解密互逆
解:由费尔马小定理知,
m
p
−
1
m^{p-1}
mp−1
≡
\equiv
≡ 1 mod p (m不为p的倍数)
所以,对任意整数
k
k
k 有
m
k
(
p
−
1
)
m^{k(p-1)}
mk(p−1)
≡
\equiv
≡ 1 mod p
同理,对任意整数
k
k
k 有
m
k
(
q
−
1
)
m^{k(q-1)}
mk(q−1)
≡
\equiv
≡ 1 mod q
∵
\because
∵
λ
(
n
)
\lambda(n)
λ(n) = LCM (p-1,q-1)
∴
\therefore
∴
m
λ
(
n
)
m^{\lambda(n)}
mλ(n)
≡
\equiv
≡ 1 mod p
m
λ
(
n
)
m^{\lambda(n)}
mλ(n)
≡
\equiv
≡ 1 mod q
由中国剩余定理知,
m
λ
(
n
)
m^{\lambda(n)}
mλ(n)
≡
\equiv
≡ 1 mod pq
≡
\equiv
≡ 1 mod n
∵
\because
∵ ed
≡
\equiv
≡ 1 mod
λ
(
n
)
\lambda(n)
λ(n)
∴
\therefore
∴ ed =
k
λ
(
n
)
k\lambda(n)
kλ(n) + 1 ,
k
∈
Z
k \in \mathcal{Z}
k∈Z
∴
\therefore
∴
m
=
(
m
e
)
d
m =(m^e)^d
m=(me)d mod n
=
m
e
d
=m^{ed}
=med mod n
=
m
k
λ
(
n
)
+
1
=m^{k\lambda(n)+1}
=mkλ(n)+1 mod n
=
(
m
k
λ
(
n
)
=(m^{k\lambda(n)}
=(mkλ(n) • m ) mod n
=
m
=m
=m mod n
由此可知,该算法的加解密互逆
9.2 使用RSA 算法进行加密和解密
(a)解:
n = pq = 3x7 = 21
ϕ
\phi
ϕ(n) = (p-1)(q-1) = 2x6 = 12
确定d,使得 de
≡
\equiv
≡ 1 mod
ϕ
\phi
ϕ(n),且 0
≤
\leq
≤ d
≤
\leq
≤ n
通过拓展欧几里得算法可算得, d = 5
则 公钥 KU = {e,n} = {5,21} 私钥 KR = {d,n} = {5,21}
加密: C =
M
e
M^e
Me mod n =
1
0
5
10^5
105 mod 21 = 19
解密: M =
C
d
C^d
Cd mod n =
1
9
5
19^5
195 mod 21 = 10
【数值过大时可用 “中国剩余定理” 进行计算】
同理,即可求得其他几项的加密和解密结果,如下:
(b)C = 8, M = 8
(c)C = 114, M = 11
(d)C = 46, M = 2
(e)C = 61, M = 7
9.3 已知公钥和密文,求解明文
解: n = 77 = 7x11
假设 p = 7, q = 11
则
ϕ
\phi
ϕ(n) = (p-1)(q-1) = 6 x10 = 60
确定d,使得 de
≡
\equiv
≡ 1 mod
ϕ
\phi
ϕ(n),且 0
≤
\leq
≤ d
≤
\leq
≤ n
通过拓展欧几里得算法可算得, d = 37
M =
C
d
C^d
Cd mod n =
2
0
37
20^{37}
2037 mod 77 = 48
9.4 已知公钥,求解私钥
解:
∵
\because
∵ n = 2881;
∴
\therefore
∴ 构成 n 的两个乘数 p 和 q,要么是个位数为 3 和 7 的素数,要么是两个个位数都为 9 的素数
通过反复实验和试错后可知,n = 2881 = 43 x 67
令 p = 43, q = 67
则
ϕ
\phi
ϕ(n) = (p-1)(q-1) = 42 x 66 = 2772
通过拓展欧几里得算法可算得, d = 725
则其私钥 KR = {d,n} = {725,2881}
总结
加密: C = M e M^e Me mod n
解密: M = C d C^d Cd mod n
RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥
只要掌握了RSA密钥的产生过程,就可以很好的实现运用其进行加密和解密