RSA加密过程分析

RSA加密过程分析

1.RSA简单介绍

1.1 RSA用法

简单说就是服务端创建公钥给到客户端,客户端通过公钥进行加密处理,把密文发送给服务端,然后服务端通过私钥进行解密。

那么公钥和私钥是怎么来的,又是怎么利用公钥加密,私钥解密的,且看下文分析。

2.RSA加密算法推导分析

2.1 欧拉φ函数和费马小定理以及欧拉费马定理介绍

算法推导参考这个视频(素数(六)基于欧拉函数的RSA算法加密原理是什么?RSA算法详解),讲的非常不错,以至于我照抄了一遍,建议直接看视频。

了解RSA算法,首先要了解一个函数,欧拉φ函数。又叫欧拉总计函数

表达形式:φ(n)其中n是正整数

image

φ是小写

具体含义为:

φ(n)表示在小于或等于n的正整数中,与n互素的数的个数。

什么是互素呢?
也叫作互质。如果两个整数的最大公约数是1,那么就成两个数互素。
比如6和8,最大公约数是2,所以6和8不互素。
7和8最大公约数是1,7和8就互素。

现在思考一个问题:
在小于等于8的数中,有多少数和8是互素的。

那我们就找和8的最大公约数是1的数有多少就可以了。
首先1,1和任意自然数都互素,1算一个
2呢?2和8的最大公约数是2,不算。
以此类推,最终结果就是1,3,5,7

这个问题可以表示成

\[φ(8) = 4 \]

再思考一个问题,如果n是一个素数那么φ(n)等于多少?

就等于n-1
比如φ(7)=6,因为小于等于7的自然数中,除了7本身都和7互素。
所有素数都成立,这只是欧拉φ函数的一个基本性质。

那么欧拉为什么要研究这么一个函数,先看一个定理:费马小定理

费马小定理:

\[a^p - a = p 的倍数 {\quad} (a∈Z,P∈素数) \]

如果a是一个整数,p是一个素数,那么a的p次方减a一定是p的倍数

这说明什么呢:

\[(a^p-a) 这个数除以p等于一个整数,没有余数 \]

这又说明什么呢:

\[转换一下变成 \frac{a^p}{p} - \frac{a}{p}, 这说明 \frac{a^p}{p} 和 \frac{a}{p} 两个数的余数应该相同,然后这两个数做减法,余数就没了。 \]

这就叫做同余。

数论当中一般这么写:

\[a^p ≡ a(mod{\quad}p) \]

什么意思呢:

a的p次方与a同余,相对于p来说,≡表示同余

再提取一下

\[a(a^{p-1} -1)这个一定是p的倍数。 \]

因此当a不是p的倍数时,费马小定理也可以写成

\[a^{p-1} -1 = p的倍数 \]

那么就能得到

\[a^{p - 1}≡1 {\quad}(mod {\quad}p) \]

a的p-1次方和1同余,相对于p来说。

费马小定理给出的时候并没有给出证明过程,到了1736年,欧拉就开始证明这个费马小定理

欧拉认为费马小定理是对的,但是不够一般化,因为这里p一定得是素数。

欧拉就思考,如果p不是素数呢,或者满足其他条件能不能成立。

最终欧拉给出了一个更一般化的定理

即:

\[a ^{φ(n)} - 1 = n的倍数 {\quad}(a∈Z, n ∈Z, a⊥n) \]

a是一个整数,n是一个整数,且a和n互质,则a的(n)次方减1是n的倍数。⊥表示a和n互质

就可以写成如下形式:

\[a^{φ(n)} ≡ 1 {\quad}(mod {\quad}n) \]

当n是一个素数的时候,φ(n) = n - 1

所以上面的式子可以写成:

\[a^{n - 1} - 1 = n的倍数 \]

这个其实就是费马小定理

这个升级过后的定理被称为费马欧拉定理即:

\[a ^{φ(n)} - 1 = n的倍数 {\quad} (a∈Z, n ∈Z, a⊥n) \]

再来看欧拉定理的另一个性质

欧拉φ函数是一个积性函数,什么意思呢
如果有两个数m、n互素,则φ(mn) = φ(m)·φ(n),这种函数就叫积性函数

即:

\[φ(mn) = φ(m)·φ(n) {\quad} (m⊥n) \]

举个例子:
比如想知道小于等于15的数中有多少素数,可以通过如下计算

\[∵ {\quad} 3⊥5 \]

\[∴ {\quad} φ(15) = φ(3)·φ(5) \]

\[即 {\quad} φ(15) = 2 × 4 = 8 \]

2.2 RSA算法究竟怎么用

Alice想跟Bob之间互发消息,但是网络总是不安全的,这就需要把信息几米之后再去传输。

2.2.1 怎么加密呢

\[① {\quad}p,q,{\quad} 令N = pq \]

\[② {\quad} r = φ(N) = φ(p) · φ(q) = (p - 1) · (q - 1) \]

\[③ {\quad} e < r, 且 e⊥r \]

什么意思:

①首先随机选取两个不相等的大质数p和q,计算出两个的乘积记作 N = p·q
②然后通过欧拉函数就可以求出φ(N)得值,也就是在小于等于N的自然数当中,有多少个数和N互素。
φ(N) = φ(p) · φ(q) = (p - 1) · (q - 1)
令r = φ(N)
③再随机选取一个整数e,这个e要小于r,并且e要和r互素

到这里就有了公钥了,公钥是什么呢,就是(N,e)这两个数

那么私钥呢:

\[④ {\quad} 找一个d {\quad}满足 e·d - 1 = r的倍数 \]

\[即 {\quad} 找一个d {\quad} 满足 \frac{ed}{r} 余数为 1 \]

\[即 {\quad} 求d {\quad} 令 ed ≡ 1 (mod {\quad} r) \]

什么意思:

这里还要再找一个数,叫做e关于r的模逆元,记作d。说白了就是要找一个数d,满足ed - 1 = r的倍数
再换句话说就是d要满足ed除以r的余数等于1,这个d就叫做模逆元

现在私钥也有了,私钥就是(N,d)

2.2.2 怎么解密呢

现在公钥,私钥都有有了
公钥(N, e)
私钥 (N, d)

现在Alice想要Bob给他发加密消息,Alice先把公钥(N,e)发给Bob,Bob通过公钥来加密

现在假设Bob要给Alice发一个消息m,这个m需要小于整数N,如果消息过长就截成几段分开发送。

加密过程就是

\[求c {\quad} 令{\quad} m^e - c = N的倍数 \]

\[即 :{\quad} c ≡ m^e (mod {\quad} N) \]

什么意思呢:

Bob要找到一个数c,是的m的e次方减去c的值为N的倍数
即c和m的e次方同余。相对于N

其中这个c就是加密后的密文。

然后Bob把c传给Alice,Alice拿到这个c之后只需要做一件事

\[c^d - ? = N的倍数 \]

什么意思呢:

就是Alice要找到一个数,使得c的d次方减掉这个数得到的值是N的倍数

把这个数解出来之后,你就会发现,在小于N的范围内只能找到一个就是m,这样Alice就还原了原消息的值。

那么这具体怎么推导的呢:

\[m^e = c + N的倍数 \]

\[c = m^e + N的倍数,差个正负号也是对的 \]

\[c^d = m^{ed} + N的倍数,两边都加个d次方,也是成立的 \]

\[c^d = m^{(1+r的倍数)} {\quad} + N的倍数 \]

\[c^d = m(m^{(r的倍数)} {\quad}) + N的倍数 \]

\[c^d = m(m^{φ(N)的倍数}{\quad}) + N的倍数 \]

\[c^d = m(1+N的倍数) + N的倍数,根据费马欧拉定理 m^{φ(N)} = 1 + N的倍数 \]

\[c^d = m + N的倍数 \]

最后解密的式子就是Alice要解决问题的那个式子

3. 总结:

如果不知道私钥,RSA算法目前只能够通过质因数分解来暴力破解,这要花费很长时间。因此RSA算法才被认为不可破解。

参考文献

欧拉总计函数

素数(六)基于欧拉函数的RSA算法加密原理是什么?RSA算法详解

posted @ 2022-06-02 19:36  cfdroid  阅读(359)  评论(0编辑  收藏  举报