数学不好也能听懂的算法 - RSA加密和解密原理和过程

17 阅读5分钟

非对称加密

过程很简单,我们需要用公钥来加密数据发送出去,接收方收到数据后,用私钥解密数据。公钥是所有人都知道的,私钥只有接收方才知道,这就是非对称加密了。

image.png

假设我们已经拿到了公钥,公钥里面有两个数字7和33,私钥里面也有两个数字,?和33。这个?数字等会再告诉你们。

这里要和大家说的是,私钥里面的33和公钥里的33,属于同一个数字,都是公开的。只有这个问号数字是不能公开的。 假设现在我要发个拼音草CAO给对方,但是我不想让任何人知道我发了个CAO字,就需要加密了。首先我把这个CAO转换为十进制,为了方便演示,假设A为1,B为2,以此类推。因此C对应的是3,A对应的是1,O对应的是15。

现在就可以使用公钥的第一个数了,也就是7,首先把这三个数字都进行七次方运算,也就是求幂。我们分别可以得到2187 1和170859375,接下来使用公钥里的第二个数,也就是33,三个数字除以33来求余数。我们分别可以得到91和27。现在加密就完成了,没有很复杂的过程,现在就可以把这三组代表草字的加密数据,发送给对方。

对方收到后一开始还不知道是什么内容 所以会很兴奋 于是就拿出自己的私钥3和33,这个数字3就是刚刚我说过一定不公开的数字。解密过程和加密过程很类似,先求幂再求余,那我们先拿出私钥,第一个数字3,三个数字进行三次方运算 分别得到729,1和19683,然后使用私钥的第二个数字33求余数,分别得到3,1和15。我们来看看这三个数字,就是原先CAO对应的三个十进制数了,这就是加密和解密的基本流程了。

image.png

不过有同学可能会疑惑,如果我们把公钥里的7和私钥里的3对调一下,还能够加密解密吗,实际上是可以的,不信你自己试一下。也就是说如果用私钥加密了,用对应的公钥是可以解密的,过程是固定的。因此可以转为公式:

image.png

这里的E表示公钥也就是7,N就是公钥的另一个数字,也就是33。密文的D次方,再除以N来求余得到的余数,就是明文了。这里的D表示私钥那个不能公开的数字,也就是3, N就是私钥另一个数字33了。

不难看出E和N都是公开的,那黑客拿到密文以后倒推不就行了吗?难就难在这里了,生成一个数字并不难,倒推就很难了,这个难度就像你把蛋打碎以后,再想办法复原。要是公钥里的N变成这样呢?

image.png

公钥和私钥的制作过程

要知道破译有多难,我们需要知道公钥和私钥的制作过程,这个过程可以分为五步 :

  1. 首先我们需要选出两个质数,这里我选3和11,并且用P和Q来代表这两个数字,方便套公式。

  2. 接着我们把这两个质数相乘 3×11=33 。我们用N来表示33,没错,这个就是前面公式里求需要用到的数,这个N也是公钥和私钥里会出现的 那个相同的数字。

  3. 第三步需要用到欧拉函数,我们不需要知道欧拉函数的推导过程,只需要知道这个公式是用第一步的,两个质数分别减去1,再把结果相乘。也就是2×10=20。这里我用T来表示这个20。

  4. 第四步就是重点了,因为第四步我们需要选择公钥,注意是选出来并不是单纯计算出来。既然是选出来,就需要设定条件了,这里有三个条件:

    • 首先这个公钥必须是质数
    • 其次这个公钥必须要大于1 ,并且小于T。在这里也就是大于1,小于20
    • 第三个条件,这个公钥不能是T的因子。

    在这三个条件筛选过后,可能会得到一些数字,我们就在这些数字里面进行挑选,我选了一个最小的数字3作为公钥。 公钥的两个数字就出来了3和33。

  5. 选择公钥后就来到最后一步,也就是计算出私钥。私钥仅仅只需要满足一个条件,也就是这个公式D和E相乘后,除以T得到的余数必须是1。如果我们上一步公钥选择3这里的私钥我们就可以得到7,私钥的两个数就是7和33了。

image.png

现在公钥和私钥已经制作完成了,可以看出他俩是一对的,这个算法重要的是不能被人知道,或者算出私钥D的数字。

要算出私钥D我们需要E和T,因为E是被公开的,毕竟是公钥,因此数字T是算出公钥D的重要数字。

要算出T我们需要P和Q两个质数,关键就在这两个质数了,如果这两个质数设置非常非常大,不管是T还是N都会变得非常巨大。所以即使公开这个N,你也非常难找到对应的两个质数。而这就是RSA算法的奥义了。

全文终。

原文来自B站UP技术蛋老师的视频 BV1XP4y1A7Ui

仅作为复习的笔记记录