• 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算法详解

  • 相关阅读:
    Java基础知识点总结(四)
    Java基础知识点总结(三)
    用easyui实现查询条件的后端传递并自动刷新表格的两种方法
    在JDBC中实现SQL语句的模糊查询
    向DataGrid数据表格增加查询搜索框
    Java基础知识点总结(二)
    easyui中formatter的用法
    腾讯云+阿里云 搭建hadoop + hbase
    -- 记录 -- 问题记录
    -- 1 -- springboot
  • 原文地址:https://www.cnblogs.com/cfdroid/p/16338550.html
Copyright © 2020-2023  润新知