夜深人静写算法(三十五)- RSA 加密解密

Posted 英雄哪里出来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了夜深人静写算法(三十五)- RSA 加密解密相关的知识,希望对你有一定的参考价值。

📢博客主页:https://blog.csdn.net/WhereIsHeroFrom
📢欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,非常感谢!
📢本文由 英雄哪里出来 原创,转载请注明出处,首发于 🙉 CSDN 🙉
作者的专栏:
  👉C语言基础专栏《光天化日学C语言》
  👉算法进阶专栏《夜深人静写算法》
  👉奇奇怪怪的专栏《学姐教我写代码》

一、前言

  如果对 欧拉函数、欧拉定理、逆元都已经理解了,那么 RSA 加密和解密的原理就很简单了。这一章我们就来探讨一下 RSA 算法加密和解密的原理。
  精通 RSA 的实现原理,让面试你的面试官大吃一惊!😂

二、加密算法概述

1、加密与解密

  • 加密是以某种特定的算法,改变原有的数据信息,使得未授权的用户即使获得了加密后的数据,但因不知解密的方法(确切的说是不知道密钥),仍然无法了解其信息内容。而解密则是加密的逆过程。

2、明文和密文

  • 我们称尚未加密的数据为明文,通过固定算法加密后的数据为密文。图二-2-1为加密过程,图二-2-2为解密过程。
    图二-2-1

    在这里插入图片描述
    图二-2-2

3、加密的密钥

  • 密钥是一种参数,它是在明文转换为密文或密文转换为明文时算法的输入参数。可以理解成密码的钥匙。

4、对称与非对称

  • 常见的数字加密方式分为两类:对称加密 和 非对称加密。

对称加密

  • 对称加密算法中,数据发送方将明文和密钥一起经过特殊加密算法处理成密文后,将它发送出去。接收方收到密文后,若想解读原文,则需要使用加密用到的相同密钥及相同算法的逆算法对密文进行解密,才能使其恢复成原文。
  • 它的最大优势是加/解密速度快,适用于大数据量进行加密,缺点是密钥管理困难,最典型的问题就是如何同步这个密钥,同步过程如果在公网上,不进行加密是可以抓包拿到的,那么这里就遇到了要对密钥加密的问题。
  • 常见的对称加密算法有 AESDESBlowfish 等等。
  • 对称加密的核心是只有一把密钥。
    在这里插入图片描述
图二-4-1

非对称加密

  • 非对称加密算法中,有两个密钥:公钥和私钥。它们是一对,如果用公钥进行加密,只有用对应的私钥才能解密;如果用私钥进行加密,只有用对应的公钥才能解密。
  • 非对称加密算法实现机密信息的交换过程为:甲方生成一对密钥并将其中一个作为公钥向其他方公开;得到该公钥的乙方使用该密钥对机密信息进行加密后发送给甲方;甲方再用自己的另一个专用密钥对加密后的信息进行解密。
  • 最有名的非对称加密算法当属 RSA 了,本文将对 RSA 算法的加/解密过程进行详细剖析。
  • 非对称加密拥有两把密钥。
    图二-4-2

三、RSA算法流程

1、算法原理

  • 算法本身基于一个简单的数论知识:给出两个素数,很容易将它们相乘,然而给出它们的乘积,想得到这两个素数就显得尤为困难。如果能够解决大整数(比如几百位的整数)分解的快速方法,那么 RSA 算法将轻易被破解。

2、公钥和私钥的生成

R S A RSA RSA 算法由两个密钥,即公钥和私钥组成。
  1)准备两个非常大的素数 p p p q q q(转换成二进制后 1024 1024 1024 个二进制位或者更多,位数越多越难破解);
  2)利用字符串模拟计算大素数 p p p q q q 的乘积 n = p q n=pq n=pq
  3)同样方法计算 m = ( p − 1 ) ( q − 1 ) m=(p-1)(q-1) m=(p1)(q1),这里的 m m m n n n 的欧拉函数;
  4)找到一个数 e ( 1 < e < m ) e(1 \\lt e \\lt m) e(1<e<m),满足 g c d ( m , e ) = 1 gcd(m, e)=1 gcd(m,e)=1(即 e e e m m m 互素);
  5)计算 e e e 在模 m m m 域上的逆元 d d d(即满足 e d   m o d   m = 1 ed \\ mod \\ m = 1 ed mod m=1);
  6)至此,公钥和私钥生成完毕: ( n , e ) (n, e) (n,e) 为公钥, ( n , d ) (n, d) (n,d) 为私钥;

3、RSA 加密

  • 对于明文 x x x,用公钥 ( n , e ) (n,e) (n,e) x x x 加密的过程,就是将 x x x 转换成数字(字符串的话取其 ASCII码或者 unicode 值),然后通过幂取模计算出 y y y,其中 y y y 就是密文;
  • y = x e   m o d   n y = x^e \\ mod \\ n y=xe mod n

4、RSA 解密

  • 对于密文 y y y,用私钥 ( n , d ) (n,d) (n,d) y y y 进行解密的过程和加密类似,同样是计算幂取模;
  • x = y d   m o d   n x = y^d \\ mod \\ n x=yd mod n

四、RSA算法证明

1、私钥解密证明

我们要做的就是证明密文经过私钥的幂取模的结果等于明文,即如下等式成立: x = y d   m o d   n x = y^d \\ mod \\ n x=yd mod n

证明

  • 根据加密算法得到的密文 y y y,一定满足如下等式:
  • y = x e   m o d   n y = x^e \\ mod \\ n y=xe mod n

1)x 和 n 互素

  • 这种情况,我们主要用欧拉定理就可以证明,证明过程如下:
  • y d   m o d   n = x e d   m o d   n ( 1 ) = x k m + 1   m o d   n ( 2 ) = ( x m   m o d   n ) k x   m o d   n ( 3 ) = ( x ϕ ( n )   m o d   n ) k x   m o d   n ( 4 ) = x   m o d   n ( 5 ) \\begin{aligned} y^d \\ mod \\ n &= x^{ed} \\ mod \\ n & (1)\\\\ &= x^{km+1} \\ mod \\ n & (2)\\\\ &= (x^m \\ mod \\ n)^k x \\ mod \\ n & (3)\\\\ &= (x^{\\phi(n)} \\ mod \\ n)^k x \\ mod \\ n & (4)\\\\ &= x \\ mod \\ n & (5) \\end{aligned} yd mod n=xed mod n=xkm+1 mod n=(xm mod n)kx mod n=(xϕ(n) mod n)kx mod n=x mod n(1)(2)(3)(4)(5)
  • ( 1 ) (1) (1) 等式两边同时取 d d d 次幂,再取模;
  • ( 2 ) (2) (2) e e e d d d 在模 m m m 的域上互为逆元,所以 e d = k m + 1 ed = km+1 ed=km+1
  • ( 3 ) (3) (3) 乘法取模的结合律;
  • ( 4 ) (4) (4) m m m n n n 的欧拉函数,即 m = ϕ ( n ) = ϕ ( p ) ϕ ( q ) m = \\phi(n) = \\phi(p)\\phi(q) m=ϕ(n)=ϕ(p)ϕ(q)
  • ( 5 ) (5) (5) 由于 x x x n n n 互素,所以根据欧拉定理,有 x ϕ ( n )   m o d   n = 1 x^{\\phi(n)} \\ mod \\ n = 1 xϕ(n) mod n=1,直接代入得证;

2)x 和 n 不互素