本文可以帮助想要完全理解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(modφ(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=me%N。
- 使用私钥 ( N , d ) (N,d) (N,d)解密,则明文 m = c d % N m=c^d\%N m=cd%N。
三、正确性证明(证明过程使用到欧拉定理)
证明 m m m 经加解密后还是 m m m,即证明等式 m = ( m e % N ) d % N , m < N m=(m^e\%N)^d\%N,m<N m=(me%N)d%N,m<N
- 明文
m
m
m 与
N
N
N 互质
( m e % N ) d % N (m^e\%N)^d\%N (me%N)d%N
= m e d % N =m^{ed}\%N =med%N
= m k φ ( N ) + 1 % N , k ∈ N ∗ =m^{k\varphi(N)+1}\%N,k\in N^* =mkφ(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=pq, p 、 q p、q p、q都为质数。则一定有 m = c p m=cp m=cp或 m = c q , c ∈ N ∗ m=cq,c\in N^* m=cq,c∈N∗
我们假设 m = c p m=cp m=cp
( c p ) e d % q (cp)^{ed}\%q (cp)ed%q
= ( c p ) k φ ( N ) + 1 % q , k ∈ N ∗ =(cp)^{k\varphi(N)+1}\%q,k\in N^* =(cp)kφ(N)+1%q,k∈N∗
= ( c p ) k ( p − 1 ) ( q − 1 ) + 1 % q =(cp)^{k(p-1)(q-1)+1}\%q =(cp)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 =[cp((cp)q−1%q)k(p−1)]%q
= ( c p ) % q =(cp)\%q =(cp)%q
即 ( c p ) e d = c p + t q , t ∈ N ∗ (cp)^{ed}=cp+tq,t\in N^* (cp)ed=cp+tq,t∈N∗
易知 ( c p ) e d % p = 0 (cp)^{ed}\%p=0 (cp)ed%p=0,即 ( c p + t q ) % p = 0 (cp+tq)\%p=0 (cp+tq)%p=0,即 t q % p = 0 tq\%p=0 tq%p=0
显然 p 、 q p、q p、q互质, ∴ t = r p , r ∈ N ∗ \therefore t=rp,r\in N^* ∴t=rp,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 ∴(cp)ed=cp+tq=cp+rpq=cp+rN
∴ ( c p ) e d % N = ( c p + r N ) % N = ( c p ) % N \therefore (cp)^{ed}\%N=(cp+rN)\%N=(cp)\%N ∴(cp)ed%N=(cp+rN)%N=(cp)%N
即 m e d % N = m % N m^{ed}\%N=m\%N med%N=m%N
故 m = ( m e % N ) d % N m=(m^e\%N)^d\%N m=(me%N)d%N,得证!
证明部分参考的博客