RSA算法过程以及正确性证明

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/L__ear/article/details/86762377

本文可以帮助想要完全理解RSA原理的同学,完全掌握理解RSA的原理。

一、生成公钥、私钥

  1. 寻找两个不相同的大质数 p q p、q
    随意寻找两个不相同的大质数 p p q q ,计算 N = p × q N=p\times q
  2. N N 的欧拉函数值 φ ( N ) \varphi(N)
    φ ( N ) = φ ( p ) φ ( q ) = ( p 1 ) ( q 1 ) \varphi(N)=\varphi(p)\varphi(q)=(p-1)\cdot(q-1)
    欧拉函数 φ ( n ) \varphi(n) 的定义:
    φ ( n ) \varphi(n) 是小于等于 n n 的正整数中与 n n 互质的数的数目。(第一次见的话肯定会觉得很奇怪,怎么还会有这么奇怪的函数(^_^))
  3. 计算私钥中最重要的 d d
    选择一个小于 φ ( N ) \varphi(N) ,并与 φ ( N ) \varphi(N) 互质的整数 e e ,通常取65537,求得 e e 关于 φ ( N ) \varphi(N) 的模反元素 d d e d 1 ( m o d    φ ( N ) ) e\cdot d\equiv 1(\mod\varphi(N))
    模反元素的定义:
    如果两个正整数 a a n n 互质,那么一定可以找到整数 b b ,使得 n ( a b 1 ) n|(a\cdot b-1) 。(前式等价于 a b k n = 1 , k N a\cdot b-k\cdot n=1,k\in N^* ,由贝祖定理易知,整数 b b 一定存在)
  4. 销毁 p p q q
    此时我们的 ( N , e ) (N,e) 是公钥, ( N , d ) (N,d) 是私钥。

RSA算法的安全性: 已知 N N e e ,是否容易得到 d d

  1. 要想知道 d d ,就要知道 e e φ ( N ) \varphi(N)
  2. 要想知道 φ ( N ) \varphi(N) ,就要根据 N N 算出 p p q q ,而大数的质数分解是目前公认的数学难题,只能暴力求解。

二、加密、解密

  1. 使用公钥 ( N , e ) (N,e) 加密, 假设明文为 m ( m < N ) m(m<N) ,则密文 c = m e % N c=m^e\%N
  2. 使用私钥 ( N , d ) (N,d) 解密,则明文 m = c d % N m=c^d\%N

三、正确性证明(证明过程使用到欧拉定理

证明 m m 经加解密后还是 m m ,即证明等式 m = ( m e % N ) d % N , m < N m=(m^e\%N)^d\%N,m<N

  1. 明文 m m N N 互质
    ( m e % N ) d % N (m^e\%N)^d\%N
    = m e d % N =m^{ed}\%N
    = m k φ ( N ) + 1 % N , k N =m^{k\varphi(N)+1}\%N,k\in N^*
    = [ m ( m φ ( N ) % N ) k ] % N =[m(m^{\varphi(N)}\%N)^k]\%N
    = m % N =m\%N
    = m =m
  2. 明文 m m 不与 N N 互质
    m m 不与 N N 互质, N = p q N=pq p q p、q 都为质数。则一定有 m = c p m=cp m = c q , c N m=cq,c\in N^*
    我们假设 m = c p m=cp
    ( c p ) e d % q (cp)^{ed}\%q
    = ( c p ) k φ ( N ) + 1 % q , k N =(cp)^{k\varphi(N)+1}\%q,k\in N^*
    = ( c p ) 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
    = ( c p ) % q =(cp)\%q
    ( c p ) e d = c p + t q , t N (cp)^{ed}=cp+tq,t\in N^*
    易知 ( c p ) e d % p = 0 (cp)^{ed}\%p=0 ,即 ( c p + t q ) % p = 0 (cp+tq)\%p=0 ,即 t q % p = 0 tq\%p=0
    显然 p q p、q 互质, t = r p , r N \therefore t=rp,r\in 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 % N = ( c p + r N ) % N = ( c p ) % N \therefore (cp)^{ed}\%N=(cp+rN)\%N=(cp)\%N
    m e d % N = m % N m^{ed}\%N=m\%N
    m = ( m e % N ) d % N m=(m^e\%N)^d\%N ,得证!
    证明部分参考的博客

猜你喜欢

转载自blog.csdn.net/L__ear/article/details/86762377