学习《图解密码技术》 记录学习 第五章中RSA算法的加密与解密

   

目录

   

RSA加密公式:    

RSA解密公式:    

生成密钥对

(1)求 N

(2)求L

(3)求E

(4)求D

   RSA算法实践:        

        密钥对生成

(1)下面我们求 N

(2) 求L

(3) 求E

(4) 求 D

加密

解密


RSA加密公式:    

        在RSA中,明文、密钥和密文都是数字。RSA的加密过程可以用下列公式来表达,这个公式很重要,因此我们把它框起来。

                密文= 明文^E mod N                         (RSA加密公式)

        RSA 的密文是对代表明文的数字的E次方求 mod N的结果,这个余数就是密文。

        加密公式中出现的两个数——E 和 N,到底都是什么数呢?RSA 的加密是求明文的E 次方 mod N,因此只要知道 E 和 N 这两个数,任何人都可以完成加密的运算。所以说,E 和N 是 RSA 加密的密钥,也就是说,E 和 N 的组合就是公钥。

        有一个很容易引起误解的地方需要大家注意——E和N这两个数并不是密钥对(公钥和私钥的密钥对)。E 和 N 两个数才组成了一个公钥,因此我们一般会写成“公钥是(E,N)”或者“公钥是{E,N}”这样的形式,将E和N用括号括起来。

RSA解密公式:    

        明文=密文^D mod N                             (RSA解密公式)

        对表示密文的数字的 D 次方求 mod N 就可以得到明文。

        这里所使用的数字 N 和加密时使用的数字 N 是相同的。

        数 D 和数 N 组合起来就是 RSA 的解密密钥,因此D 和 N 的组合就是私钥。只有知道 D 和 N两个数的人才能够完成解密的运算。

        大家应该已经注意到,在 RSA 中,加密和解密的形式是相同的。加密是求“E 次方的 modN”,而解密则是求“D 次方的 mod N”,这真是太美妙了。

        当然,D也并不是随便什么数都可以的,作为解密密钥的 D,和数字 E 有着相当紧密的联系。否则,用E加密的结果可以用D来解密这样的机制是无法实现的。        

        加密与解密公式如下图:

生成密钥对

        刚刚已经讲过,RSA 的加密是求“E 次方的 mod N”,解密是求“D 次方的 modN”,那么这里需要用到的三个数——E、D 和 N 到底应该如何生成呢?

        由于E 和 N 是公钥,D 和 N 是私钥,因此求E、D 和 N这三个数就是生成密钥对。RSA 密钥对的生成步骤如下。

        (1)求 N

        (2)求L(L是仅在生成密钥对的过程中使用的数)

        (3)求 E

        (4)求D

        下面我们逐一来进行讲解。

(1)求 N

        1.首先准备两个很大的质数        (关键字:很大质数 ,太小容易被破解       质数: 质数是指只能被1和自身整除的正整数,即除了1和它本身以外没有其他正整数能整除它,类如:2、3、5、7、11等都是质数,因为它们只能被1和自身整除。相反,像4、6、8、9等数都不是质数,因为它们可以被除了1和自身以外的其他数整除。)

        2.我们将这两个很大的质数称为p和q

        3.准备好两个很大的质数之后,我们将这两个数相乘,其结果就是数 N。也就是说,数 N可以用下列公式来表达。

        N=px q                (p、q为质数)   

举例(举例数字我就弄小一点)

        𝑝=7 和 q=11 

          N=px q       

             =77

(2)求L

        下面我们来求数L。

        L这个数在RSA的加密和解密过程中都不出现,它只出现在生成密钥对的过程中。

        L是p-1和q-1的最小公倍数(最小公倍数,lcm)如果用lcm(X,Y)来表示“X和Y的最小公倍数”,则L可以写成下列形式。

        L= Icm(p -1, q-1)                                (L是p-1和q-1的最小公倍数)

        求最小公倍数公式:LCM(a,b)×GCD(a,b)=a×b

                     先将lcm(p-1,q-1)中的p-1套入上述公式即等于:a

                                                               q-1套入上述公式即等于:b

                      GCD(是求最大公约数,根据欧几里德算法来计算两个整数的最大公约数):

                        欧几里德算法:GCD(a,b)=GCD(b,amodb)

                        GCD(a,b) 表示两个正整数 𝑎a 和 𝑏b 的最大公约数,mod 是求模运算,表示取 𝑎a 除以 𝑏b 的余数。欧几里德算法的递归特性:每次迭代都将原来的两个数转化为较小的数和余数。最终,当余数为0时,较小的数即为两个整数的最大公约数。

        假设我们要计算整数48和18的最大公约数。

  1. 48➗18商=2,余数12。
  2. 18➗12商=1,余数6。
  3. 12➗6商=2,余数0。

        因为最后的余数是0,所以最大公约数为前一个除数,即6。

        所以,48和18的最大公约数是6。

例如,对于数56和42,用辗转相除法进行计算:

  • 56 ÷ 42 商= 1,余数14
  • 42 ÷ 14 商= 3,余数0

因为最后的余数为0,所以42和56的最大公约数为14。

        好的,让我们用小一点的数来举例说明。

         𝑝=7 和 q=11。

        首先,我们计算 𝐿=LCM(𝑝−1,𝑞−1)

                                       =LCM(7-1,11-1)

                                        =LCM(6,10)

将LCM(6,10)套入求最小公倍数公式:LCM(a,b)×GCD(a,b)=a×b

                                                            LCM(6,10)×GCD(6,10)=6×10

                                                              LCM(6,10)×GCD(6,10)=60

                                                                 LCM(6,10)=60➗GCD(6,10)

 欧几里德算法:GCD(a,b)=GCD(b,amodb)

                                                                即: LCM(6,10)=60➗GCD(10,6mod b)

                                                                                    GCD(10,6mod b)=10➗6商=1  余数4 

                                                                                                                         6➗4商=1  余数   2

                                                                                                                          4➗2商=2  余数0 

                                                                                                                          =2

                                                                          LCM(6,10)=60➗2        

                                                                                            =30

                                        即:L=30

(3)求E

        下面我们来求数 E。

        E 是一个比 1 大、比L 小的数。此外,E 和L 的最大公约数必须为1。如果用ged(X, Y)来表示X和Y的最大公约数,则E和L之间存在下列关系。

        1<E<L

        GCD(E, L) = 1                                E和L的最大公约数为1(E和L互质)

        要找出满足 GCD(E,L) = 1 的数,还是要使用伪随机数生成器。通过伪随机数生成器在 1 < E<L 的范围内生成E的候选数,然后再判断其是否满足 GCD(E, L) = 1 这个条件。求最大公约数可以使用欧几里得的辗转相除法。

        L=30,那么满足条件的有:4、7、8、9、11、12、13、14、16、17、18、19、20、21、22、23、24、25、26、27、28、29

        简单来说,之所以要加上E和L的最大公约数为1这个条件,是为了保证一定存在解密时需要使用的数 D。

        现在我们已经求出了E和N,也就是说我们已经生成了密钥对中的公钥。

(4)求D

        下面我们来求数 D。

        数D是由数E计算得到的。D、E和L之间必须具备下列关系。

        1<D<L

        E x D mod L = 1

        E=4、7、8、9、11、12、13、14、16、17、18、19、20、21、22、23、24、25、26、27、28、29   假设我们取得的是其中的质数7           

                =7

L=30  

则 7×Dmod 30 = 1 

因为数小  我们就逐步尝试:

  1. 当 (D = 1 ) 时, (7  × 1 mod 30 = 7 mod 30 = 7 ),不满足条件。
    2. 当 (D = 2 ) 时, (7  × 2 mod 30 = 14 mod 30 = 14 ),不满足条件。
    3. 当 (D = 3 ) 时, (7  × 3 mod 30 = 21 mod 30 = 21 ),不满足条件。
    4. 当 (D = 4 ) 时, (7  × 4 mod 30 = 28 mod 30 = 28 ),不满足条件。
    5. 当 (D = 5 ) 时, (7  × 5 mod 30 = 35 mod 30 = 5 ),不满足条件。
    6. 当 (D = 6 ) 时, (7  × 6 mod 30 = 42 mod 30 = 12 ),不满足条件。
    7. 当 (D = 7 ) 时, (7  × 7 mod 30 = 49 mod 30 = 19 ),不满足条件。
    8. 当 (D = 8 ) 时, (7  × 8 mod 30 = 56 mod 30 = 26 ),不满足条件。
    9. 当 (D = 9 ) 时, (7  × 9 mod 30 = 63 mod 30 = 3 ),不满足条件。
    10. 当 (D = 10 ) 时, (7  × 10 mod 30 = 70 mod 30 = 10 ),不满足条件。
    11. 当 (D = 11 ) 时, (7  × 11 mod 30 = 77 mod 30 = 17 ),不满足条件。
    12. 当 (D = 12 ) 时, (7  × 12 mod 30 = 84 mod 30 = 24 ),不满足条件。
    13. 当 (D = 13 ) 时, (7  × 13 mod 30 = 91 mod 30 = 1 ),满足条件。
  2. D=13

        只要数 D 满足上述条件,则通过E和N进行加密的密文,就可以通过D 和 N 进行解密。

        E × D mod L=1 这样的公式在上一节的时钟运算中也出现过(5.5.4 节)。要保证存在满足条件的D,就需要保证E和L的最大公约数为1,这也正是(3)中对E所要求的条件。

        简单来说,E x D mod L=1 保证了对密文进行解密时能够得到原来的明文。现在我们已经求出了 D 和 N,也就是说我们也生成了密钥对中的私钥。上面的内容中出现了很多符号和公式,我们先来整理一下(表5-3、图 5-5)。

        

   RSA算法实践:        

        密钥对生成

        (1)求N

        首先我们准备两个质数p、q,这里我们选择 17 和 19,它们都是质数。(练习还是选小数,实际情况是要随机大质数)

        p=17                (17 是质数)

        q=19                (19是质数)

(1)下面我们求 N

        N=p x q

        因此可以进行如下计算。

        N=p x q

          =17 x 19                (p等于17, q等于19)

          = 323

(2) 求L

        下面我们求L。

        L是p-1和q-1的最小公倍数。

        L = lcm (p-1, q-1)

           =lcm (16, 18)                        (p-1等于16, q-1等于18)

           = 144                                        (16 和 18的最小公倍数)

(3) 求E

        下面我们求E。

        E和L的最大公约数必须是1。

        ged(E, L) = 1

        满足条件的E有很多,例如下面这些数都可以。5, 7, 11, 13, 17, 19, 23, 25, 29, 31, …

        乍一看这些数好像都是质数,但其实并不是这样的,比如25就不是质数。这些数称为和L“互质的数”,也就是相对于L是质数的意思。这里我们选择5来作为E。到这里我们已经知道 E=5,N=323,这就是公钥。

(4) 求 D

        下面我们求 D。

        D 必须满足下列条件:E × D mod L= 1

        我们来找一找,E 乘以几 modL 等于 1 呢? D=29 可以满足上面的条件,因为:

        E × D mod L=5 × 29 mod 144

                            = 145 mod 144

                            =1

        到这里我们已经成功生成了密钥对,即:公钥:E=5        N=323

                                                                        私钥:D=29        N=323

        公钥(E,N) =(5,323)是可以任意公开的,但是私钥(D,N) =(29,323)必须妥善保管,不能告诉任何人。

加密

要加密的明文必须是小于 N 的数,也就是小于 323 的数,这是因为在加密运算中需要求mod N。这里我们假设要加密的明文是 123,加密时使用的是公钥 E=5、N=323。

        明文^E mod N= 123^5 mod 323

        (明文为123)= 225

        因此密文就是 225。

解密

下面我们对密文225进行解密。

        解密时使用的是私钥D=29、N=323。

        密文^D mod N= 225^29  mod 323                (可以用科学计算器算一下)

                               =123

-----------------------------------------------------------------

        至此在《图解密码技术》中学习到的关于RSA算法经个人总结的这篇文章就分享完毕,感谢大家耐心阅读我的分享!如果你有任何关于RSA算法的问题,或者对我所分享的内容有任何想法或建议,都欢迎私信我或在评论区留言。

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值