1.引言
我的博客:小吴の博客
原文链接:RSA数学原理解析
RSA算法(RSA algorithm)是一种非对称加密算法, 广泛应用在互联网和电子商务中. 它使用一对密钥进行加密和解密, 分别称为公钥(public key)和私钥(private key). 使用公钥加密的内容只能用私钥解密, 使用私钥加密的内容只能用公钥解密, 并且不能通过公钥在可行的时间内计算出私钥. 这使得加密通信不需要交换私钥, 保证了通信的安全. 那么它是怎么做到这一点的呢? 背后有哪些数学原理? 这篇文章我们来讨论这个问题.
本文会先介绍RSA算法中用到的数论概念和定理: 模算术, 最大公约数与贝祖定理, 线性同余方程, 中国余数定理, 费马小定理; 然后再介绍RSA算法的原理, 并证明其是有效的. 本文会假设你了解数论的基本概念, 如素数, 最大公约数, 互素等
2.模算术
2.1整数除法
用一个正整数去除一个整数,可以得到一个商和一个余数,数学符号定义为:
定理1:令 a 为整数, d 为正整数, 则存在唯一的整数 q 和 r, 满足 0 ≤ r < d 0\leq r<d 0≤r<d, 使得 a = d q + r a=dq+r a=dq+r
当r=0时,我们称 d 整除 a, 记作 d ∣ a d|a d∣a; 否则称 d 不整除 a, 记作 d ∤ a d\nmid a d∤a,整除有以下基本性质:
定理2:令a,b,c,为整数,其中 a ≠ 0 a\neq0 a=0,则:如果 a ∣ b a|b a∣b且 a ∣ c a|c a∣c则 a ∣ ( a + b ) a|(a+b) a∣(a+b)
2.2模算术
在数论中我们特别关心一个整数被一个正整数除时的余数. 我们用 a m o d m = b a\bmod m=b amodm=b 表示整数 a 除以正整数 m 的余数是 b. 为了表示两个整数被一个正整数除时的余数相同, 人们又提出了同余式(congruence).
定义1:如果 a 和 b 是整数而 m 是正整数, 则当 m 整除 a - b 时称 a 模 m 同余 b. 记作 a ≡ b ( m o d m ) a\equiv b(\bmod m) a≡b(modm)
a ≡ b ( m o d m ) a\equiv b(\bmod m) a≡b(modm) 和 a m o d m = b a\bmod m=b amodm=b很相似. 事实上, 如果 a m o d m = b a\bmod m=b amodm=b, 则 a ≡ b ( m o d m ) a\equiv b(\bmod m) a≡b(modm). 但他们本质上是两个不同的概念. a m o d m = b a\bmod m=b amodm=b 表达的是一个函数, 而 a ≡ b ( m o d m ) a\equiv b(\bmod m) a≡b(modm) 表达的是两个整数之间的关系.
另外,同余式 a ≡ b ( m o d m ) a\equiv b(\bmod m) a≡b(modm)还可以表示为 m ∣ ( b − a ) m|(b-a) m∣(b−a),同时符合上式的式子可以转化为同余式
模算术的性质:
定理3:如果m是正整数,a,b是整数,则有
(
a
+
b
)
m
o
d
m
=
(
(
a
m
o
d
m
)
+
(
b
m
o
d
m
)
)
m
o
d
m
a
b
m
o
d
m
=
(
a
m
o
d
m
)
(
b
m
o
d
m
)
m
o
d
m
\begin{aligned} (a+b)\bmod m &=((a\bmod m)+(b\bmod m))\bmod m\\ ab\bmod m &=(a\bmod m)(b\bmod m)\bmod m \end{aligned}
(a+b)modmabmodm=((amodm)+(bmodm))modm=(amodm)(bmodm)modm
根据定理3,可得一下推论
推论1:设m是正整数,a,b,c是整数;如果 a ≡ b ( m o d m ) a\equiv b(\bmod m) a≡b(modm)则 a c ≡ b c ( m o d m ) ac\equiv bc(\bmod m) ac≡bc(modm)
证明:
∵ a ≡ b ( m o d m ) \because a\equiv b(\bmod m) ∵a≡b(modm)
∴ m ∣ ( b − a ) \therefore m|(b-a) ∴m∣(b−a) 所以右端再乘以任何整数m都可以整除
即 m ∣ ( b − a ) c m|(b-a)c m∣(b−a)c 同理,既然 m ∣ ( b − a ) m|(b-a) m∣(b−a)且 c ∣ c c|c c∣c
也可以推出 m c ∣ ( b − a ) c mc|(b-a)c mc∣(b−a)c
结论:若 a ≡ b ( m o d m ) a\equiv b(\bmod m) a≡b(modm),则 a c ≡ b c ( m o d m ) ac\equiv bc(\bmod m) ac≡bc(modm)且 a c ≡ b c ( m o d m c ) ac\equiv bc(\bmod mc) ac≡bc(modmc)同时成立
推论2设 m 是正整数, a, b 是整数, c 是不能被 m 整除的整数; 如果 a c ≡ b c ( m o d m ) ac\equiv bc(\bmod m) ac≡bc(modm), 则 a ≡ b ( m o d m ) a\equiv b(\bmod m) a≡b(modm),依据推论1的证明,也是显而易见的。
3.最大公约数
如果一个整数 d 能够整除另一个整数 a, 则称 d 是 a 的一个约数(divisor); 如果 d 既能整除 a 又能整除 b, 则称 d 是 a 和 b 的一个公约数(common divisor). 能整除两个整数的最大整数称为这两个整数的最大公约数(greatest common divisor).
定义2:令a和b是不全为0的两个整数,能使 d ∣ a d|a d∣a和 d ∣ b d|b d∣b的最大整数d成为a和b的最大公约数,记作 g c d ( a , b ) gcd(a,b) gcd(a,b)
3.1 求最大公约数
如何求两个已知整数的最大公约数呢? 这里我们讨论一个高效的求最大公约数的算法, 称为辗转相除法. 因为这个算法是欧几里得发明的, 所以也称为欧几里得算法. 辗转相除法基于以下定理:
引理 1 令 a = b q + r a=bq+r a=bq+r, 其中 a, b, q 和 r 均为整数. 则有 g c d ( a , b ) = g c d ( b , r ) gcd(a,b)=gcd(b,r) gcd(a,b)=gcd(b,r)
证明:我们假设 d 是 a 和 b 的公约数, 即 d ∣ a d|a d∣a且 d ∣ b d|b d∣b, 那么根据定理2, d 也能整除 a − b q = r a-bq=r a−bq=r. 所以 a 和 b 的任何公约数也是 b 和 r 的公约数;
类似地, 假设 d 是 b 和 r 的公约数, 即 d ∣ b d|b d∣b且 d ∣ r d|r d∣r, 那么根据定理2, d 也能整除 a = b q + r a=bq+r a=bq+r… 所以 b 和 r 的任何公约数也是 a 和 b 的公约数;
因此, a 与 b 和 b 与 r 拥有相同的公约数. 所以 g c d ( a , b ) = g c d ( b , r ) gcd(a,b)=gcd(b,r) gcd(a,b)=gcd(b,r)
辗转相除法就是利用引理1, 把大数转换成小数. 例如, 求
g
c
d
(
287
,
91
)
gcd(287,91)
gcd(287,91), 我们就把用较大的数除以较小的数. 首先用 287 除以 91, 得
287
=
91
⋅
3
+
14
287=91\cdot3+14
287=91⋅3+14
我们有
g
c
d
(
287
,
91
)
=
g
c
d
(
91
,
14
)
gcd(287,91)=gcd(91,14)
gcd(287,91)=gcd(91,14),问题转化成求
g
c
d
(
91
,
14
)
gcd(91,14)
gcd(91,14),同样的,用91除以14得
91
=
14
⋅
6
+
7
91=14\cdot6+7
91=14⋅6+7
有
g
c
d
(
91
,
14
)
=
g
c
d
(
14
,
7
)
gcd(91,14)=gcd(14,7)
gcd(91,14)=gcd(14,7),用14除以7得
14
=
7
⋅
2
+
0
14=7\cdot2+0
14=7⋅2+0
所以
g
c
d
(
297
,
91
)
=
g
c
d
(
91
,
14
)
=
g
c
d
(
14
,
7
)
=
7
gcd(297,91)=gcd(91,14)=gcd(14,7)=7
gcd(297,91)=gcd(91,14)=gcd(14,7)=7
代码是这样的(两个都可以)
def gcd(a,b):
while b!=0 :
r = a%b
a = b
b = r
return a
def gcd_new(a,b):
if b==0: return a
return gcd_new(b,a%b)
3.2 贝祖定理
现在我们讨论最大公约数的一个重要性质:
定理 4 贝祖定理 如果整数 a, b 不全为零, 则 g c d ( a , b ) gcd(a,b) gcd(a,b)是 a 和 b 的线性组合集 a x + b y ∣ x , y ∈ Z ax+by|x,y\in Z ax+by∣x,y∈Z 中最小的元素. 这里的 x 和 y 被称为贝祖系数
证明 令
A
=
a
x
+
b
y
∣
x
,
y
∈
Z
A=ax+by|x,y\in Z
A=ax+by∣x,y∈Z 设存在
x
0
x_0
x0 ,
y
0
y_0
y0 使
d
0
d_0
d0 是 A 中的最小正元素,
d
0
=
a
x
0
+
b
y
0
d_0=ax_0+by_0
d0=ax0+by0; 现在用
d
0
d_0
d0去除 a, 这就得到唯一的整数 q(商) 和 r(余数) 满足
d
0
q
+
r
=
a
0
≤
r
<
d
0
(
a
x
0
+
b
y
0
)
q
+
r
=
a
r
=
a
−
a
q
x
0
−
b
q
y
0
r
=
a
(
1
−
q
x
0
)
+
b
(
−
q
y
0
)
∈
A
\begin{aligned} d_0q+r &= a \qquad 0\leq r<d_0\\ (ax_0+by_0)q+r&=a\\ r&=a-aqx_0-bqy_0\\ r&=a(1-qx_0)+b(-qy_0)\in A \end{aligned}
d0q+r(ax0+by0)q+rrr=a0≤r<d0=a=a−aqx0−bqy0=a(1−qx0)+b(−qy0)∈A
又
0
≤
r
<
d
0
0\leq r <d_0
0≤r<d0,
d
0
d_0
d0是A中最小的正元素
∴ r = 0 , d ∣ a \therefore r=0,d|a ∴r=0,d∣a
同理, 用 d 0 d_0 d0去除 b, 可得 d 0 ∣ b d_0|b d0∣b. 所以说 d 0 d_0 d0 是 a 和 b 的公约数.
设 a 和 b 的最大公约数是 d, 那么 d ∣ ( a x 0 + b y 0 ) d|(ax_0+by_0) d∣(ax0+by0)即 d ∣ d 0 d|d_0 d∣d0
∴ d 0 \therefore d_0 ∴d0是a和b的最大公约数
我们可以对辗转相除法稍作修改, 让它在计算出最大公约数的同时计算出贝祖系数.
def gcd_new_2(a,b):
if b==0: return a,1,0
d,x,y = gcd_new_2(b,a%b)
return d,y,x-(int(a/b))*y
大家是否还记得辗转相除法:我们换一个步骤多一点的例子 g c d ( 963 , 657 ) gcd(963,657) gcd(963,657)
963 = 1 ⋅ 657 + 306 9 = 7 ⋅ 657 − 15 ⋅ ( 963 − 657 ) = 22 ⋅ 657 − 15 ⋅ 963 657 = 2 ⋅ 306 + 45 9 = 7 ⋅ ( 657 − 2 ⋅ 306 ) − 306 = 7 ⋅ 657 − 15 ⋅ 963 306 = 6 ⋅ 45 + 36 9 = 45 − ( 306 − 6 ⋅ 45 ) = 7 ⋅ 45 − 306 45 = 1 ⋅ 36 + 9 9 = 45 − 36 36 = 4 ⋅ 9 \begin{aligned} 963&=1\cdot657+306 \qquad\qquad&9&=7\cdot657-15\cdot(963-657)=22\cdot657-15\cdot963 \\ 657&=2\cdot306+45 &9&=7\cdot(657-2\cdot306)-306=7\cdot657-15\cdot963 \\ 306&=6\cdot45+36 &9&=45-(306-6\cdot45)=7\cdot45-306\\ 45 &=1\cdot36+9 &9&=45-36\\ 36 &=4\cdot9 \end{aligned} 9636573064536=1⋅657+306=2⋅306+45=6⋅45+36=1⋅36+9=4⋅99999=7⋅657−15⋅(963−657)=22⋅657−15⋅963=7⋅(657−2⋅306)−306=7⋅657−15⋅963=45−(306−6⋅45)=7⋅45−306=45−36
g c d ( 963 , 657 ) = 9 = 22 ⋅ 657 − 15 ⋅ 963 , x 0 = − 15 , y 0 = 22 gcd(963,657)=9=22\cdot657-15\cdot963,x_0=-15,y_0=22 gcd(963,657)=9=22⋅657−15⋅963,x0=−15,y0=22就是二元一次方程 963 x + 657 y = 9 963x+657y=9 963x+657y=9的一组解且是 963 x + 657 y 963x+657y 963x+657y方程的正整数中的最小解。
4.线性同余方程
现在我们来讨论求解形如 a x ≡ b ( m o d m ) ax\equiv b(\bmod m) ax≡b(modm) 的线性同余方程. 求解这样的线性同余方程是数论研究及其应用中的一项基本任务. 如何求解这样的方程呢? 我们要介绍的一个方法是通过求使得方程 a ‾ a ≡ 1 ( m o d m ) \overline{a}a\equiv 1(\bmod m) aa≡1(modm) 成立的整数 a ‾ \overline{a} a. 我们称 a ‾ \overline{a} a为 a 模 m 的逆. 下面的定理指出, 当 a 和 m 互素时, a 模 m 的逆必然存在.
定理5:如果 a 和 m 为互素的整数且 m > 1 m>1 m>1, 则 a 模 m 的逆存在, 并且是唯一的.
证明 由贝祖定理可知,
∵
g
c
d
(
a
,
m
)
=
1
\because gcd(a,m)=1
∵gcd(a,m)=1 , ∴ 存在整数 x 和 y 使得
a
x
+
m
y
=
1
ax+my=1
ax+my=1
这蕴含着
a
x
+
m
y
≡
1
(
m
o
d
m
)
∵
m
y
≡
0
(
m
o
d
m
)
,所以有
a
x
≡
1
(
m
o
d
m
)
∴
x
为
a
模的逆
ax+my\equiv 1(\bmod m)\\ \because my\equiv0(\bmod m),所以有\\ ax\equiv 1(\bmod m)\\ \therefore x为a模的逆
ax+my≡1(modm)∵my≡0(modm),所以有ax≡1(modm)∴x为a模的逆
这样我们就可以调用辗转相除法 gcd(a, m)
求得 a 模 m 的逆.
求得了 a 模 m 的逆 �¯, 现在我们可以来解线性同余方程了. 具体的做法是这样的: 对于方程
a
x
≡
b
(
m
o
d
m
)
ax\equiv b( \bmod m)
ax≡b(modm)同时乘以
a
‾
\overline{a}
a得,
a
‾
a
x
≡
a
‾
b
(
m
o
d
m
)
\overline{a}ax\equiv \overline{a}b(\bmod m)
aax≡ab(modm)
$把\overline{a}a\equiv 1(\bmod m )代入上式,得\$
x
≡
a
‾
b
(
m
o
d
m
)
x\equiv \overline{a}b(\bmod m)
x≡ab(modm)
x ≡ a ‾ b ( m o d m ) x\equiv \overline{a}b(\bmod m) x≡ab(modm)就是方程的解,注意同余方程会有无数个W整数解, 所以我们用同余式来表示同余方程的解.
例1:求 34 x ≡ 77 ( m o d 89 ) 34x\equiv 77(\bmod 89) 34x≡77(mod89)
解调用
g
c
d
(
34
,
89
)
gcd(34,89)
gcd(34,89),得
g
c
d
(
34
,
89
)
=
1
=
13
∗
89
−
34
∗
34
gcd(34,89)=1=13*89-34*34
gcd(34,89)=1=13∗89−34∗34,所以34模89的逆为-34,方程两边同时乘 -34 得
−
34
⋅
34
x
≡
−
34
⋅
77
(
m
o
d
89
)
x
≡
−
34
⋅
77
(
m
o
d
89
)
x
≡
−
2618
≡
52
(
m
o
d
89
)
\begin{aligned} -34\cdot34x&\equiv-34\cdot77(\bmod89)\\ x&\equiv-34\cdot77(\bmod89)\\ x&\equiv-2618\equiv52(\bmod89) \end{aligned}
−34⋅34xxx≡−34⋅77(mod89)≡−34⋅77(mod89)≡−2618≡52(mod89)
5.中国剩余定理
中国南北朝时期数学著作 孙子算经 中提出了这样一个问题:
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
用现代的数学语言表述就是: 下列同余方程组的解释多少?
{
x
≡
2
(
m
o
d
3
)
x
≡
3
(
m
o
d
5
)
x
≡
2
(
m
o
d
7
)
\begin{cases} x\equiv2(\bmod3)\\ x\equiv3(\bmod5)\\ x\equiv2(\bmod7)\\ \end{cases}
⎩
⎨
⎧x≡2(mod3)x≡3(mod5)x≡2(mod7)
孙子算经 中首次提到了同余方程组问题及其具体解法. 因此中国剩余定理称为孙子定理.
定理 6 中国余数定理 令
m
1
,
m
2
,
.
.
.
.
.
,
m
n
m_1,m_2,.....,m_n
m1,m2,.....,mn为大于 1 且两两互素的正整数,
a
1
,
a
2
,
.
.
.
.
a
n
a_1,a_2,....a_n
a1,a2,....an 是任意整数. 则同余方程组
{
x
≡
a
1
(
m
o
d
m
1
)
x
≡
a
2
(
m
o
d
m
2
)
.
.
.
.
.
x
≡
a
n
(
m
o
d
m
n
)
\begin{cases} x\equiv a_1(\bmod m_1)\\ x\equiv a_2(\bmod m_2)\\ .....\\ x\equiv a_n(\bmod m_n)\\ \end{cases}
⎩
⎨
⎧x≡a1(modm1)x≡a2(modm2).....x≡an(modmn)
有唯一的模
m
=
m
1
m
2
.
.
.
.
m
n
m=m_1m_2....m_n
m=m1m2....mn的解
证明:我们使用构造证明法, 构造出这个方程组的解. 首先对于
i
=
1
,
2
,
.
.
.
.
,
n
i=1,2,....,n
i=1,2,....,n, 令
M
i
=
m
m
i
M_i=\frac{m}{m_i}
Mi=mim
即,
M
i
M_i
Mi 是除了
m
i
m_i
mi 之外所有模数的积.
∵
m
1
,
m
2
.
.
.
.
m
n
\because m_1,m_2....m_n
∵m1,m2....mn两两互素,
∴
g
c
d
(
m
i
,
M
i
)
=
1
\therefore gcd(m_i,M_i)=1
∴gcd(mi,Mi)=1 由定理5 可知, 存在整数
y
i
y_i
yi 是
M
i
M_i
Mi模
m
i
m_i
mi的逆. 即
M
i
y
i
≡
1
(
m
o
d
m
i
)
M_iy_i\equiv1(\bmod m_i)
Miyi≡1(modmi)
同时乘以
a
i
a_i
ai得
a
i
M
i
y
i
≡
a
i
(
m
o
d
m
i
)
a_iM_iy_i\equiv a_i(\bmod m_i)
aiMiyi≡ai(modmi)
就是第 i 个方程的一个解; 那么怎么构造出方程组的解呢? 我们注意到, 根据
M
i
M_i
Mi 的定义可得, 对所有的
j
≠
i
j\neq i
j=i, 都有
a
i
M
i
y
i
≡
0
(
m
o
d
m
j
)
a_iM_iy_i\equiv0(\bmod m_j)
aiMiyi≡0(modmj). 因此我们令
x
=
a
1
M
1
y
1
+
a
2
M
2
y
2
+
.
.
.
.
+
a
n
M
n
y
n
=
∑
i
=
1
n
a
i
M
i
y
i
x=a_1M_1y_1+a_2M_2y_2+....+a_nM_ny_n=\sum_{i=1}^{n}{a_iM_iy_i}
x=a1M1y1+a2M2y2+....+anMnyn=i=1∑naiMiyi
有了这个结论, 我们可以解答 孙子算经 中的问题了: 对方程组的每个方程, 求出
M
i
M_i
Mi , 然后调用 gcd(M_i, m_i)
求出
y
i
y_i
yi:
{
x
≡
2
(
m
o
d
3
)
M
1
=
35
y
1
=
−
1
x
≡
3
(
m
o
d
5
)
M
2
=
21
y
2
=
1
x
≡
2
(
m
o
d
7
)
M
3
=
15
y
3
=
−
1
\begin{cases} \begin{aligned} &x\equiv2(\bmod3)\quad &M_1&=35\quad y_1=-1\\ &x\equiv3(\bmod5)\quad &M_2&=21\quad y_2=1\\ &x\equiv2(\bmod7)\quad &M_3&=15\quad y_3=-1\\ \end{aligned} \end{cases}
⎩
⎨
⎧x≡2(mod3)x≡3(mod5)x≡2(mod7)M1M2M3=35y1=−1=21y2=1=15y3=−1
最后求出
x
=
−
2
∗
35
+
3
∗
21
+
2
∗
15
=
23
≡
23
(
m
o
d
105
)
x=-2*35+3*21+2*15=23\equiv23(\bmod 105)
x=−2∗35+3∗21+2∗15=23≡23(mod105)
6.费马小定理
现在我们来看数论中另外一个重要的定理, 费马小定理(Fermat’s little theorem)
定理7费马小定理:如果a是一个整数,p是一个素数,那么
a
p
≡
a
(
m
o
d
p
)
a^p\equiv a(\bmod p)
ap≡a(modp)
特别的当a不是p的倍数时(即
g
c
d
(
a
,
p
)
=
1
gcd(a,p)=1
gcd(a,p)=1),有
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p-1}\equiv1(\bmod p)\\
ap−1≡1(modp)
7欧拉函数
再来看一看欧拉函数的知识。对于正整数n,欧拉函数 φ ( n ) \varphi(n) φ(n)是小于或等于n的正整数中与n互质的数的数目
如 φ ( 8 ) = 4 \varphi(8)=4 φ(8)=4,1,3,5,7均与8互质
定理8:n,m为整数, ( n , m ) = 1 (n,m)=1 (n,m)=1,如果 a 1 , a 2 , . . . . a n a_1,a_2,....a_n a1,a2,....an和 b 1 , b 2 , . . . . b n b_1,b_2,....b_n b1,b2,....bn分别是模n,m的一个完整系,则有形如 n b i + m a j ( 1 ≤ i ≤ s , 1 ≤ j ≤ t ) nb_i+ma_j(1\leq i\leq s,1\leq j\leq t) nbi+maj(1≤i≤s,1≤j≤t)的数构成模mn的一个完整缩系,特别地有 φ ( n m ) = φ ( n ) φ ( m ) \varphi(nm)=\varphi(n)\varphi(m) φ(nm)=φ(n)φ(m)
定理9:当n
≥
2
\geq2
≥2时,设
n
=
p
1
e
1
.
.
.
.
p
s
e
s
n=p_1^{e_1}....p_s^{e_s}
n=p1e1....pses是n的标准分解式,则
φ
(
n
)
=
∏
l
=
1
s
(
p
l
e
l
−
p
l
e
l
−
1
)
=
n
∏
l
=
1
s
(
1
−
1
p
)
\varphi(n)=\prod_{l=1}^{s}(p_l^{e_l}-p_l^{e_l-1})=n\prod_{l=1}^{s}(1-\frac{1}{p})
φ(n)=l=1∏s(plel−plel−1)=nl=1∏s(1−p1)
证明:当
(
n
.
m
)
=
1
(n.m)=1
(n.m)=1时
φ
(
n
,
m
)
=
φ
(
n
)
φ
(
m
)
\varphi(n,m)=\varphi(n)\varphi(m)
φ(n,m)=φ(n)φ(m)
当
n
1
,
n
2
.
.
.
.
.
.
n
s
n_1,n_2......n_s
n1,n2......ns两两互素时
φ
(
∏
l
=
1
s
n
l
)
=
∏
l
=
1
s
n
l
\varphi(\prod_{l=1}^{s}n_l)=\prod_{l=1}^{s}n_l
φ(l=1∏snl)=l=1∏snl
因此
φ
(
n
)
=
∏
l
=
1
s
φ
(
p
l
e
l
)
\varphi(n)=\prod_{l=1}^{s}\varphi(p_l^{e_l})
φ(n)=l=1∏sφ(plel)
问题转化成如何求
φ
(
p
l
e
l
)
\varphi(p_l^{e_l})
φ(plel),其中
p
l
p_l
pl要么
p
l
∣
a
p_l|a
pl∣a,要么
(
p
l
,
a
)
=
1
(p_l,a)=1
(pl,a)=1。在1,2…
p
l
p_l
pl当中可以被
p
l
p_l
pl整除的整数共有
p
l
e
l
p
l
=
p
l
e
l
−
1
\frac{p_l^{e_l}}{p_l}=p_l^{e_l-1}
plplel=plel−1个,故其中与
p
l
e
l
p_l^{e_l}
plel互素的个数共有
p
l
e
l
−
p
l
e
l
−
1
p_l^{e_l}-p_l^{e_l-1}
plel−plel−1个,于是
φ
(
p
l
e
l
)
=
p
l
e
l
−
p
l
e
l
−
1
\varphi(p_l^{e_l})=p_l^{e_l}-p_l^{e_l-1}
φ(plel)=plel−plel−1
这样一来
φ
(
n
)
=
∏
l
=
1
s
(
p
l
e
l
−
p
l
e
l
−
1
)
=
∏
l
=
1
s
p
l
e
l
(
1
−
1
p
l
)
=
n
∏
l
=
1
s
(
1
−
1
p
)
\varphi(n)=\prod_{l=1}^{s}(p_l^{e_l}-p_l^{e_l-1})=\prod_{l=1}^{s}p_l^{e_l}(1-\frac{1}{p_l})=n\prod_{l=1}^{s}(1-\frac{1}{p})
φ(n)=l=1∏s(plel−plel−1)=l=1∏splel(1−pl1)=nl=1∏s(1−p1)
其中若p为素数,则
φ
(
p
)
=
p
−
1
=
p
(
1
−
1
p
)
\varphi(p)=p-1=p(1-\frac{1}{p})
φ(p)=p−1=p(1−p1)
8.RSA算法
我们终于可以来看 RSA 算法了. 先来看 RSA 算法是怎么运作的:
RSA 算法按照以下过程创建公钥和私钥:
- 1.随机算取两个大素数p和q, p ≠ q p\neq q p=q
- 2.计算 n = p q n=pq n=pq
- 3.选取一个与 ( p − 1 ) ( q − 1 ) (p-1)(q-1) (p−1)(q−1)互素的小整数e
- 4.求e模 ( p − 1 ) ( q − 1 ) (p-1)(q-1) (p−1)(q−1)的逆,记作d,即 d e ≡ 1 m o d ( p − 1 ) ( q − 1 ) de\equiv 1\bmod(p-1)(q-1) de≡1mod(p−1)(q−1)
- 5.将 P = ( e , n ) P=(e,n) P=(e,n)公开,是公钥。
- 6.将 S = ( d , n ) S=(d,n) S=(d,n)保密,作为私钥 想
要把明文$M
加密成密文
加密成密文
加密成密文C$,计算
C
=
M
e
m
o
d
n
C=M^e\bmod n
C=Memodn
要把密文解密成明文
C
C
C$M $,计算
M
=
C
d
m
o
d
n
M=C^d \bmod n
M=Cdmodn
下面证明RSA算法是有效的:
证明:要证明其有效性,只需要证明
C
≡
M
e
m
o
d
n
C\equiv M^e\bmod n
C≡Memodn也就是
M
e
d
≡
M
(
m
o
d
n
)
M^{ed}\equiv M(\bmod n)
Med≡M(modn),注意到d为e模
(
p
−
1
)
(
1
−
1
)
(p-1)(1-1)
(p−1)(1−1)的逆,所以有
e
d
≡
1
(
m
o
d
(
p
−
1
)
(
q
−
1
)
)
ed\equiv 1(\bmod(p-1)(q-1))
ed≡1(mod(p−1)(q−1))
。