符号约定:
定理1: 整数a,b对模m同余的充要条件是 a-b能被m整除(即m|a-b)。
推论: a≡b(mod m)的充要条件是a=mt+b(t为整数)。
定理2: 同余关系具有反身性、对称性与传递性,即
1)a≡a (mod m);
2)若a≡b (mod m), 则b≡a (mod m);
3)若a≡b (mod m), b≡c (mod m),则a≡c (mod m).
定理3: 若a≡b(mod m), c≡d (mod m),则
1)a+c≡b+d (mod m);
2)a-c≡b-d (mod m);
3)ac≡bd (mod m).
推论: 若a≡b(mod m),n为自然数,则an≡bn (mod m)。
定理4: 若ca≡cb(mod m), (c,m)=d, 且a,b为整数,则a≡b(mod m/d).
推论: 若ca=cb(mod m), (c,m)=1,且a,b为整数,则a≡b(mod m).
定理5: 若a≡b (mod m),a≡b (mod n),则a≡b(mod [m,n]).
推论: 若a≡b(mod mi), i=1,2,…,n,则a≡b (mod [m1,m2,…,mn]).
定义: 若对任意的自然数m,用记号ф(m)表示0,1,2,…,m-1中与m互素的数的个数,则称ф(m)为欧拉函数。
欧拉定理: 若(a,n)=1,则 a ϕ ( n ) ≡ 1 ( m o d n ) a^{\phi(n)} ≡1 (mod\ n) aϕ(n)≡1(mod n)
证明:
将1~n中与n互质的φ(n)个数按顺序排布:
x
1
,
x
2
,
…
,
x
ϕ
(
n
)
x_1,x_2, …,x_{\phi(n)}
x1,x2,…,xϕ(n)
我们考虑这么一些数:
m
1
=
a
∗
x
1
,
m
2
=
a
∗
x
2
,
…
,
m
φ
(
n
)
=
a
∗
x
ϕ
(
n
)
m_1=a*x_1, m_2=a*x_2, …, m_{φ(n)}=a*x_{\phi(n)}
m1=a∗x1,m2=a∗x2,…,mφ(n)=a∗xϕ(n)
1)这些数中的任意两个都不模n同余
反证法:假设如果有
m
i
≡
m
j
(
m
o
d
n
)
m_i≡m_j (mod\ n)
mi≡mj(mod n)(这里假定mi更大一些),就有:
m
i
−
m
j
=
a
(
x
i
−
x
j
)
=
q
n
m_i-m_j=a(x_i-x_j)=qn
mi−mj=a(xi−xj)=qn,即n能整除
a
(
x
i
−
x
j
)
a(x_i-x_j)
a(xi−xj)。
但是a与n互质,a与n的最大公因子是1,而
x
i
−
x
j
<
n
x_i-x_j<n
xi−xj<n,因而
a
(
x
i
−
x
j
)
a(x_i-x_j)
a(xi−xj)不可能被n整除,矛盾。
也就是说这些数中的任意两个都不模n同余,φ(n)个数有φ(n)种余数。
2)这些数除n的余数都与n互质
反证法:假设某个余数与n有公因子r,不妨设
a
∗
x
i
=
p
n
+
q
r
=
r
(
…
…
)
a*x_i=pn+qr=r(……)
a∗xi=pn+qr=r(……),故
a
∗
x
i
a*x_i
a∗xi与n有公因子r,不互质,显然这是不可能的。那么这些数除n的余数,都在
x
1
,
x
2
,
x
3
,
…
…
,
x
ϕ
(
n
)
x_1,x_2,x_3,……,x_{\phi(n)}
x1,x2,x3,……,xϕ(n)中,因为这是1~n中与n互质的所有数,而余数又小于n.
由1)和2)可知,数
m
1
,
m
2
,
m
3
…
…
m
φ
(
n
)
m_1,m_2,m_3……m_{φ(n)}
m1,m2,m3……mφ(n)(如果将其次序重新排列)必须相应地同余于
x
1
,
x
2
,
x
3
…
…
x
φ
(
n
)
x_1,x_2,x_3……x_{φ(n)}
x1,x2,x3……xφ(n).
故得出:
m
1
∗
m
2
∗
⋯
∗
m
φ
(
n
)
≡
x
1
∗
x
2
∗
⋯
∗
x
φ
(
n
)
(
m
o
d
n
)
m_1*m_2*\cdots*m_{φ(n)}≡x_1*x_2*\cdots*x_{φ(n)} (mod \ n)
m1∗m2∗⋯∗mφ(n)≡x1∗x2∗⋯∗xφ(n)(mod n)
即 a φ ( n ) ∗ ( x 1 ∗ x 2 ∗ ⋯ ∗ x φ ( n ) ) ≡ x 1 ∗ x 2 ∗ ⋯ ∗ x φ ( n ) ( m o d n ) a^{φ(n)}*(x_1*x_2*\cdots*x_{φ(n)})≡x_1*x_2*\cdots*x_{φ(n)} (mod\ n) aφ(n)∗(x1∗x2∗⋯∗xφ(n))≡x1∗x2∗⋯∗xφ(n)(mod n)
或者为了方便: K ( a φ ( n ) − 1 ) ≡ 0 ( m o d n ) K(a^{φ(n)}-1)≡0(mod\ n) K(aφ(n)−1)≡0(mod n),这里 K = x 1 ∗ x 2 ∗ ⋯ ∗ x φ ( n ) K=x_1*x_2*\cdots*x_{φ(n)} K=x1∗x2∗⋯∗xφ(n)。
可知 K ( a φ ( n ) − 1 ) K(a^{φ(n)}-1) K(aφ(n)−1)被n整除。但K中的因子 x 1 , x 2 , … , x n x_1,x_2,\ldots,x_n x1,x2,…,xn都与n互质,所以K与n互质。那么 a φ ( n ) − 1 a^{φ(n)}-1 aφ(n)−1必须能被n整除,即 a φ ( n ) − 1 ≡ 0 ( m o d n ) a^{φ(n)}-1≡0 (mod\ n) aφ(n)−1≡0(mod n),即 a φ ( n ) ≡ 1 ( m o d n ) a^{φ(n)}≡1(mod\ n) aφ(n)≡1(mod n),得证。
推论(费马小定理): 若p是素数,a与p互质,则
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p-1}≡1\pmod{p}
ap−1≡1(modp)
推论: 若p是素数,则
a
p
≡
a
(
m
o
d
p
)
a^{p}≡a\pmod{p}
ap≡a(modp)
定理1: 若p是素数,则
ϕ
(
p
a
)
=
p
a
−
p
a
−
1
\phi(p^a)=p^a-p^{a-1}
ϕ(pa)=pa−pa−1
定理2: 若(m,n)=1,则φ(mn)=φ(m)φ(n)。
推论: 若正整数 m 1 , m 2 , … m k m_1,m_2,…m_k m1,m2,…mk两两互素,则 φ ( m 1 m 2 … m k ) = φ ( m 1 ) φ ( m 2 ) … φ ( m k ) φ(m_1m_2…m_k)=φ(m_1)φ(m_2)…φ(m_k) φ(m1m2…mk)=φ(m1)φ(m2)…φ(mk).
定理3: 若m的标准分解式为
m
=
p
1
a
1
p
2
a
2
.
.
.
p
k
a
k
m=p_1^{a_1}p_2^{a_2}...p_k^{a_k}
m=p1a1p2a2...pkak
则
ϕ
(
m
)
=
p
1
a
1
−
1
p
2
a
2
−
1
…
p
k
a
k
−
1
(
p
1
−
1
)
(
p
2
−
1
)
…
(
p
k
−
1
)
\phi(m)=p_1^{a_1-1}p_2^{a_2-1}…p_k^{a_k-1}(p_1-1)(p_2-1)…(p_k-1)
ϕ(m)=p1a1−1p2a2−1…pkak−1(p1−1)(p2−1)…(pk−1)
(N,e)是公钥,(N,d)是私钥。
假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n加密为c:
n
e
≡
c
(
m
o
d
N
)
n^e \equiv c\pmod{N}
ne≡c(modN)
计算c并不复杂。Bob算出c后就可以将它传递给Alice。
Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n:
c
d
≡
n
(
m
o
d
N
)
c^d ≡ n \pmod{N}
cd≡n(modN)
得到n后,她可以将原来的信息m重新复原。
我们需要证明
c
d
≡
n
(
m
o
d
N
)
c^d ≡ n \pmod{N}
cd≡n(modN)
根据加密规则得
c
=
n
e
−
k
N
c = n^e - kN
c=ne−kN
代入最终要证明的规则
等同于求证
(
n
e
−
k
N
)
d
≡
n
(
m
o
d
N
)
<
=
>
n
e
d
≡
n
(
m
o
d
N
)
(n^e - kN)^d ≡ n \pmod{N} <=> n^{ed} ≡ n \pmod{N}
(ne−kN)d≡n(modN)<=>ned≡n(modN)
由于ed ≡ 1 (mod φ(N)),所以ed=hφ(N)+1,代入求证式得
n
h
ϕ
(
N
)
+
1
≡
n
(
m
o
d
N
)
n^{h\phi(N)+1} ≡ n \pmod{N}
nhϕ(N)+1≡n(modN)
接下来分两种情况证明上式:
(1) n与N互质
根据欧拉定理有
n
ϕ
(
N
)
≡
1
(
m
o
d
N
)
n^{\phi(N)} \equiv 1 \pmod{N}
nϕ(N)≡1(modN)
于是
(
n
ϕ
(
N
)
)
h
∗
n
≡
n
(
m
o
d
N
)
(n^{\phi(N)})^h*n \equiv n \pmod{N}
(nϕ(N))h∗n≡n(modN)
原式得证
(2) n与N不互质
则n=kp或n=kq。
以n=kp为例,又N=pq,且n<N,则k<q且k与q互质,n=kp与q互质。
于是根据欧拉定理有
(
k
p
)
q
−
1
≡
1
(
m
o
d
q
)
(kp)^{q-1} ≡ 1 \pmod{q}
(kp)q−1≡1(modq)
进一步得到
[
(
k
p
)
q
−
1
]
h
(
p
−
1
)
×
k
p
≡
k
p
(
m
o
d
q
)
[(kp)^{q-1}]^{h(p-1)} × kp ≡ kp \pmod{q}
[(kp)q−1]h(p−1)×kp≡kp(modq)
即
(
k
p
)
e
d
≡
k
p
(
m
o
d
q
)
(kp)^{ed} ≡ kp \pmod{q}
(kp)ed≡kp(modq)
可以改写成
(
k
p
)
e
d
=
t
q
+
k
p
(kp)^{ed} = tq + kp
(kp)ed=tq+kp
由于等式左边必然能被p整除,所以等式右边的t必然也能被p整除,假设t=sp。则
(
k
p
)
e
d
=
s
p
q
+
k
p
(kp)^{ed} = spq + kp
(kp)ed=spq+kp
即
n
e
⋅
d
=
s
N
+
n
n^{e·d} = sN + n
ne⋅d=sN+n
原式得证。
密钥生成过程中一共产生了6个数,p,q,N,φ(N),e,d.
其中公钥用到了(N, e), 密钥用到了(N, d), 只有公钥是对外部已知的,有无可能在已知N和e的情况下推导出d?
ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。
φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
n=pq。只有将n因数分解,才能算出p和q。
结论:如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。
可是,大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法。
虽然RSA加密算法作为目前最优秀的公钥方案之一,在发表三十多年的时间里,经历了各种攻击的考验,逐渐为人们接受。但是,也不是说RSA没有任何缺点。由于没有从理论上证明破译RSA的难度与大数分解难度的等价性。所以,RSA的重大缺陷是无法从理论上把握它的保密性能如何。在实践上,RSA也有一些缺点:
因篇幅问题不能全部显示,请点此查看更多更全内容