本文可以帮助想要完全理解RSA原理的同学,完全掌握理解RSA的原理。
一、生成公钥、私钥
寻找两个不相同的大质数
p
、
q
p、q
p 、 q 随意寻找两个不相同的大质数
p
p
p 和
q
q
q ,计算
N
=
p
×
q
N=p\times q
N = p × q
求
N
N
N 的欧拉函数值
φ
(
N
)
\varphi(N)
φ ( N )
φ
(
N
)
=
φ
(
p
)
φ
(
q
)
=
(
p
−
1
)
⋅
(
q
−
1
)
\varphi(N)=\varphi(p)\varphi(q)=(p-1)\cdot(q-1)
φ ( N ) = φ ( p ) φ ( q ) = ( p − 1 ) ⋅ ( q − 1 ) 欧拉函数
φ
(
n
)
\varphi(n)
φ ( n ) 的定义:
φ
(
n
)
\varphi(n)
φ ( n ) 是小于等于
n
n
n 的正整数中与
n
n
n 互质的数的数目。(第一次见的话肯定会觉得很奇怪,怎么还会有这么奇怪的函数(^_^))
计算私钥中最重要的
d
d
d 选择一个小于
φ
(
N
)
\varphi(N)
φ ( N ) ,并与
φ
(
N
)
\varphi(N)
φ ( N ) 互质的整数
e
e
e ,通常取65537,求得
e
e
e 关于
φ
(
N
)
\varphi(N)
φ ( N ) 的模反元素
d
d
d ,
e
⋅
d
≡
1
(
m
o
d
  
φ
(
N
)
)
e\cdot d\equiv 1(\mod\varphi(N))
e ⋅ d ≡ 1 ( m o d φ ( N ) ) 模反元素的定义: 如果两个正整数
a
a
a 和
n
n
n 互质,那么一定可以找到整数
b
b
b ,使得
n
∣
(
a
⋅
b
−
1
)
n|(a\cdot b-1)
n ∣ ( a ⋅ b − 1 ) 。(前式等价于
a
⋅
b
−
k
⋅
n
=
1
,
k
∈
N
∗
a\cdot b-k\cdot n=1,k\in N^*
a ⋅ b − k ⋅ n = 1 , k ∈ N ∗ ,由贝祖定理 易知,整数
b
b
b 一定存在)
销毁
p
p
p 和
q
q
q 此时我们的
(
N
,
e
)
(N,e)
( N , e ) 是公钥,
(
N
,
d
)
(N,d)
( N , d ) 是私钥。
RSA算法的安全性: 已知
N
N
N 和
e
e
e ,是否容易得到
d
d
d
要想知道
d
d
d ,就要知道
e
e
e 和
φ
(
N
)
\varphi(N)
φ ( N )
要想知道
φ
(
N
)
\varphi(N)
φ ( N ) ,就要根据
N
N
N 算出
p
p
p 和
q
q
q ,而大数的质数分解是目前公认的数学难题,只能暴力求解。
二、加密、解密
使用公钥
(
N
,
e
)
(N,e)
( N , e ) 加密, 假设明文为
m
(
m
<
N
)
m(m<N)
m ( m < N ) ,则密文
c
=
m
e
%
N
c=m^e\%N
c = m e % N 。
使用私钥
(
N
,
d
)
(N,d)
( N , d ) 解密,则明文
m
=
c
d
%
N
m=c^d\%N
m = c d % N 。
三、正确性证明(证明过程使用到欧拉定理 )
证明
m
m
m 经加解密后还是
m
m
m ,即证明等式
m
=
(
m
e
%
N
)
d
%
N
,
m
<
N
m=(m^e\%N)^d\%N,m<N
m = ( m e % N ) d % N , m < N
明文
m
m
m 与
N
N
N 互质
(
m
e
%
N
)
d
%
N
(m^e\%N)^d\%N
( m e % N ) d % N
=
m
e
d
%
N
=m^{ed}\%N
= m e d % N
=
m
k
φ
(
N
)
+
1
%
N
,
k
∈
N
∗
=m^{k\varphi(N)+1}\%N,k\in N^*
= m k φ ( N ) + 1 % N , k ∈ N ∗
=
[
m
(
m
φ
(
N
)
%
N
)
k
]
%
N
=[m(m^{\varphi(N)}\%N)^k]\%N
= [ m ( m φ ( N ) % N ) k ] % N
=
m
%
N
=m\%N
= m % N
=
m
=m
= m
明文
m
m
m 不与
N
N
N 互质
m
m
m 不与
N
N
N 互质,
N
=
p
q
N=pq
N = p q ,
p
、
q
p、q
p 、 q 都为质数。则一定有
m
=
c
p
m=cp
m = c p 或
m
=
c
q
,
c
∈
N
∗
m=cq,c\in N^*
m = c q , c ∈ N ∗ 我们假设
m
=
c
p
m=cp
m = c p
(
c
p
)
e
d
%
q
(cp)^{ed}\%q
( c p ) e d % q
=
(
c
p
)
k
φ
(
N
)
+
1
%
q
,
k
∈
N
∗
=(cp)^{k\varphi(N)+1}\%q,k\in N^*
= ( c p ) k φ ( N ) + 1 % q , k ∈ N ∗
=
(
c
p
)
k
(
p
−
1
)
(
q
−
1
)
+
1
%
q
=(cp)^{k(p-1)(q-1)+1}\%q
= ( c p ) k ( p − 1 ) ( q − 1 ) + 1 % q
=
[
c
p
(
(
c
p
)
q
−
1
%
q
)
k
(
p
−
1
)
]
%
q
=[cp((cp)^{q-1}\%q)^{k(p-1)}]\%q
= [ c p ( ( c p ) q − 1 % q ) k ( p − 1 ) ] % q
=
(
c
p
)
%
q
=(cp)\%q
= ( c p ) % q 即
(
c
p
)
e
d
=
c
p
+
t
q
,
t
∈
N
∗
(cp)^{ed}=cp+tq,t\in N^*
( c p ) e d = c p + t q , t ∈ N ∗ 易知
(
c
p
)
e
d
%
p
=
0
(cp)^{ed}\%p=0
( c p ) e d % p = 0 ,即
(
c
p
+
t
q
)
%
p
=
0
(cp+tq)\%p=0
( c p + t q ) % p = 0 ,即
t
q
%
p
=
0
tq\%p=0
t q % p = 0 显然
p
、
q
p、q
p 、 q 互质,
∴
t
=
r
p
,
r
∈
N
∗
\therefore t=rp,r\in N^*
∴ t = r p , r ∈ N ∗
∴
(
c
p
)
e
d
=
c
p
+
t
q
=
c
p
+
r
p
q
=
c
p
+
r
N
\therefore (cp)^{ed}=cp+tq=cp+rpq=cp+rN
∴ ( c p ) e d = c p + t q = c p + r p q = c p + r N
∴
(
c
p
)
e
d
%
N
=
(
c
p
+
r
N
)
%
N
=
(
c
p
)
%
N
\therefore (cp)^{ed}\%N=(cp+rN)\%N=(cp)\%N
∴ ( c p ) e d % N = ( c p + r N ) % N = ( c p ) % N 即
m
e
d
%
N
=
m
%
N
m^{ed}\%N=m\%N
m e d % N = m % N 故
m
=
(
m
e
%
N
)
d
%
N
m=(m^e\%N)^d\%N
m = ( m e % N ) d % N ,得证! 证明部分参考的博客