学习笔记 · 2021年8月15日 0

RSA加密算法

一、前言

RSA加密算法是一种典型的非对称加密算法,近期在备考过程中有所学习接触,在此整理归纳

二、RSA加密算法介绍

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的 

RSA是典型的非对称加密算法,该算法基于大素数分解。核心是模幂运算。 它通常是先生成一对RSA密钥,其中之一是保密密钥(私钥),由用户保存;另一个为公开密钥(公钥), 可对外公开;要加密传输内容时,比如A要给B传输信息,此时A先用B的公钥将内容加密后传输,B收到A传输过来的信息后用自己的私钥解密.

在该过程中,只要B不泄露自己的私钥,那么就算第三方截取到了该信息,没有B的私钥也无法解密获得内容信息. RSA算法的安全性依赖于大数分解,计算两个大素数的乘积很容易,但是反过来由该乘积分解成两个素数相乘,如果该乘积够大的话,分解的难度是极其大的

RSA是被研究得最广泛的公钥算法,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。1983年麻省理工学院在美国为RSA算法申请了专利

RSA允许你选择公钥的大小。512位的密钥被视为不安全的;768位的密钥不用担心受到除了国家安全管理(NSA)外的其他事物的危害;1024位的密钥几乎是安全的。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。

三、对称加密与非对称加密

1.密钥分发问题

在加密算法之外,面临一个问题,那就是:密钥的分发。就是说,解密方如何获得加密方的密钥呢?从而出现了:对称加密和非对称加密。

2.对称加密

对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。
常见的对称加密算法:DES,AES,3DES等等。

3.非对称加密

非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。常见的非对称加密算法:RSA,ECC。

私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人–银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。

四、欧拉函数

1. 什么是欧拉函数

欧拉函数是小于x的整数中与x互素的数的个数,一般用φ(x)表示。特殊的,φ(1)=1.

任意给定正整数n,计算在小于等于n的正整数之中,有多少个与n构成互质关系。计算这个值的方法叫做欧拉函数。以φ(n)表示。如φ(8)=4,应为在1到8之中,与8形成互质关系的有1,3,5,7。

2.如何计算欧拉函数

通式:φ(n)=n(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)(1-1/pn),其中p1, p2……pn为n的所有素因数,n是不为0的整数.

3.欧拉函数的一些性质

  • 对于素数p,φ(p)=p−1
  • 若p为素数,n=p^k,则φ(n)=p^k-p^(k-1)
  • 欧拉函数是积性函数,但不是完全积性函数;若m,n互素,则φ(m∗n)=φ(m)∗φ(n),特殊的,当m=2,n为奇数时,φ(2*n)=φ(n)
  • 当n>2时,φ(n)是偶数
  • 小于n的数中,与n互素的数的总和为:φ(n) * n / 2 (n>1)
  • n=∑d∣n​φ(d),即n的因数(包括1和它自己)的欧拉函数之和等于n

五、欧拉定理

欧拉定理是指:如果两个正整数a和n互素,则n的欧拉函数φ(n)可以让下面的式子成立:

即a的φ(n)次方减去1,可以被n整除. 比如,3和7互质,而7的欧拉函数φ(7)等于6,所以3的6次方(729)减去1,可以被7整除(728/7=104)。

再比如,3和4互质,φ(4)=2,(32-1)/4=2. 当a为正整数,n为素数且a不能被n整除时,则有
           a(n-1) ≡ 1 (mod n)

六、模反元素

如果两个正整数a和n互素,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1. 这时,b就叫做a对模数n的模反元素.

比如,3和11互质,那么3的模反元素就是4,因为 (3 × 4)-1 可以被11整除。显然,模反元素不止一个, 4加减11的整数倍都是3的模反元素 {…,-18,-7,4,15,26,…},即如果b是a的模反元素,则 b+kn 都是a的模反元素。

欧拉定理可以用来证明模反元素必然存在,如下图:

可以看到:a的 φ(n)-1 次方,就是a对模数n的模反元素.

七、RSA算法

举个例子:

假设爱丽丝要与鲍勃进行加密通信,她该怎么生成公钥和私钥呢?

第一步,随机选择两个不相等的质数p和q。

爱丽丝选择了61和53。(实际应用中,这两个质数越大,就越难破解。)

第二步,计算p和q的乘积n。

爱丽丝就把61和53相乘。

n = 61×53 = 3233

n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。

第三步,计算n的欧拉函数φ(n)。

根据公式:

φ(n) = (p-1)(q-1)

爱丽丝算出φ(3233)等于60×52,即3120。

第四步,随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。

爱丽丝就在1到3120之间,随机选择了17。(实际应用中,常常选择65537。)

第五步,计算e对于φ(n)的模反元素d。

所谓”模反元素”就是指有一个整数d,可以使得ed被φ(n)除的余数为1。

ed ≡ 1 (mod φ(n))   ===》》    ed - 1 = kφ(n)

于是,找到模反元素d,实质上就是对下面这个二元一次方程求解。

ex + φ(n)y = 1

例子中,已知 e=17, φ(n)=3120

 17x + 3120y = 1

这个方程可以用”扩展欧几里得算法”求解,此处省略具体过程。总之,爱丽丝算出一组整数解为 (x,y)=(2753,-15),即 d=2753。

第六步,将n和e封装成公钥,n和d封装成私钥。

在爱丽丝的例子中,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。

八、RSA算法加解密

加密:

假设鲍勃要向爱丽丝发送加密信息m,他就要用爱丽丝的公钥 (n,e) 对M进行加密。这里需要注意,M必须是整数(字符串可以取ascii值或unicode值),且M必须小于n。

C = Me mod n

爱丽丝的公钥是 (3233, 17),鲍勃的m假设是65,那么可以算出下面的等式:

2790 ≡ 6517 (mod 3233)

于是,c等于2790,鲍勃就把2790发给了爱丽丝。

解密:

爱丽丝拿到鲍勃发来的2790以后,就用自己的私钥(3233, 2753) 进行解密。

M = Cd mod n

也就是说,c的d次方除以n的余数为m。现在,c等于2790,私钥是(3233, 2753),那么,爱丽丝算出

65 = 27902753(mod 3233)

因此,爱丽丝知道了鲍勃加密前的原文就是65。

至此,”加密–解密”的整个过程全部完成。

我们可以看到,如果不知道d,就没有办法从C求出M。而前面已经说过,要知道d就必须分解n,这是极难做到的,所以RSA算法保证了通信安全。

九、RSA算法的安全可靠性

在上文生成密钥时,一共产生了6个参数

  p  q  n  φ(n)  e  d

这六个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。

那么,有无可能在已知n和e的情况下,推导出d?



      (1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。

      (2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。

      (3)n=pq。只有将n因数分解,才能算出p和q。

结论:如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。

可是,大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法。维基百科这样写道:


      "对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。

      假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA密钥才可能被暴力破解。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。

      只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。"

举例来说,你可以对3233进行因数分解(61×53),但是你没法对下面这个整数进行因数分解。

  12301866845301177551304949
  58384962720772853569595334
  79219732245215172640050726
  36575187452021997864693899
  56474942774063845925192557
  32630345373154826850791702
  61221429134616704292143116
  02221240479274737794080665
  351419597459856902143413

它等于这样两个质数的乘积:

  33478071698956898786044169
  84821269081770479498371376
  85689124313889828837938780
  02287614711652531743087737
  814467999489
    ×
  36746043666799590428244633
  79962795263227915816434308
  76426760322838157396665112
  79233373417143396810270092
  798736308917

事实上,这大概是人类已经分解的最大整数(232个十进制位,768个二进制位)。比它更大的因数分解,还没有被报道过,因此目前被破解的最长RSA密钥就是768位。

十、总结

公开密码算法与其他密码学完全不同,它是基于数学函数而不是基于替换或置换。与使用一个密钥的对称算法不同,公开密钥算法是非对称的,并且它使用的是两个密钥,包括用于加密的公钥和用于解密的私钥。公开密钥算法有RSA、 Elgamal等。

RSA是是第一个安全、实用的公钥密码算法,已经成为公钥密码的国际标准,是目前应用广泛的公钥密码体制。RSA的基础是数论的欧拉定理,其安全性基于大整数因子分解问题的困难性,公私钥是一对大素数的函数。并且该算法已经经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有其一定的可信度。

随着现代信息快速发展和网络的普及,人们可以不用出门而了解世界大事和一些重要的信息。人们在这快速发展的今天再也没有属于自己的秘密,因此我们要保护好自己的个人信息或者公司信息等等,使隐私不被泄漏。所以信息的加密对我们来说非常的重要,文件的加密可以用到各个领域,它将要影响我们未来的生活。


参考资料

https://baike.baidu.com/

https://www.wikipedia.de/

https://www.jiamisoft.com/blog/23390-jdljrsa.html

https://www.cnblogs.com/idreamo/p/9411265.html

https://blog.csdn.net/gao131360144/article/details/79966094

https://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

如有遗漏,欢迎作者联系我进行补充

文章若有出错或不理解的,欢迎评论或联系我进行指正交流,转载请标明出处,谢谢