RSA非对称加密算法详解_u013073067的博客-CSDN博客_rsa算法

标签: | 发表时间:2021-07-19 17:02 | 作者:
出处:https://blog.csdn.net

RSA加密算法是最常用的非对称加密算法,由 罗纳德·李维斯特(Ron Rivest)、 阿迪·萨莫尔(Adi Shamir)和 伦纳德·阿德曼(Leonard Adleman)于1977年一起提出,RSA就是他们三人姓氏开头字母拼在一起组成的。非对称加密算法的特点就是加密秘钥和解密秘钥不同,秘钥分为公钥和私钥,用私钥加密的明文,只能用公钥解密;用公钥加密的明文,只能用私钥解密。

RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。

首先复习一下数学上的几个基本概念,它们在后面的介绍中要用到:
一、 什么是“素数”?
  素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。

二、什么是“互质数”(或“互素数”)?
  小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。
  判别方法主要有以下几种(不限于此):
(1)两个质数一定是互质数。例如,2与7、13与19。
(2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与 26。
(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
(4)相邻的两个自然数是互质数。如 15与 16。
(5)相邻的两个奇数是互质数。如 49与 51。
(6)大数是质数的两个数是互质数。如97与88。
(7)小数是质数,大数不是小数的倍数的两个数是互质数。如 7和 16。
(8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。

三、什么是模指数运算? 
  指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。 
  模指数运算就是先做指数运算,取其结果再做模运算。如(5^3) mod 7 = (125 mod 7) = 6。
  接下来正式讲解RSA加密算法。

四、RSA算法描述

RSA的公钥、私钥的组成,以及加密过程、解密过程的公式可见于下表:

公钥KU

n:两素数p和q的乘积(p和q必须保密)(n为模值)

e:与(p-1)*(q-1)互质(e称为公钥指数)

私钥KR

n:两素数p和q的乘积(p和q必须保密)(n为模值)

d:满足(d*e) mod ((p-1)*(q-1)) = 1(d称为私钥指数)

加密过程 C=M^e mod n  (C为密文)
解密过程 M=C^d mod n  (M为明文)

其中,符号^表示数学上的指数运算;mod表示模运算,即相除取余数。具体算法步骤如下:
(1)选择一对不同的、足够大的素数p,q。
(2)计算n=p*q。
(3)计算f(n)=(p-1)*(q-1),同时对p, q严加保密,不让任何人知道。
(4)找一个与f(n)互质的数e作为公钥指数,且1<e<f(n)。
(5)计算私钥指数d,使得d满足(d*e) mod f(n) = 1
(6)公钥KU=(e,n),私钥KR=(d,n)。
(7)加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:C=M^e mod n。
(8)解密过程为:M=C^d mod n。 

五、实例描述
  本文不对RSA算法的正确性作严格的数学证明,我们通过一个简单的例子来理解RSA的工作原理。为了便于计算。在以下实例中只选取小数值的素数p,q,以及e,假设用户A需要将明文“key”通过RSA加密后传递给用户B,过程如下:
(1)设计公私密钥(e,n)和(d,n)。
令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3与20互质)则e×d mod f(n) = 1,即3×d mod 20 =1。
d怎样取值呢?可以用试算的办法来寻找。试算结果见下表:

  通过试算我们找到,当d=7时,e×d mod f(n) = 1等式成立。因此,可令d=7。从而我们可以设计出一对公私密钥,加密密钥(公钥)为:KU =(e,n)=(3,33),解密密钥(私钥)为:KR =(d,n)=(7,33)。
(2 )英文数字化。
  将明文信息数字化,并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列数值,即:

  则得到分组后的key的明文信息为:11,05,25。
(3 )明文加密 
  用户加密密钥(3,33) 将数字化明文分组信息加密成密文。由C=M^e mod n得:

        M1 = C1^e mod n = 11^3 mod 33 = 11

        M2 = C2^e mod n = 5^3 mod 33 = 26

        M3 = C3^e mod n = 25^3 mod 33 = 16
  因此,得到相应的密文信息为:11,26,16。
4)密文解密
  用户B收到密文,若将其解密,只需要计算M=C^d mod n,即:

        C1 = M1^d mod n = 11^7 mod 33 = 11

        C2 = M2^d mod n = 26^7 mod 33 = 5

        C3 = M3^d mod n = 16^7 mod 33 = 25

用户B得到明文信息为:11,05,25。根据上面的编码表将其转换为英文,我们又得到了恢复后的原文“key”。 

当然,实际运用要比这复杂得多,由于RSA算法的公钥私钥的长度(模长度)要到1024位甚至2048位才能保证安全,因此,p、q、e的选取、公钥私钥的生成,加密解密模指数运算都有一定的计算程序,需要仰仗计算机高速完成。

六、RSA的安全性

         首先,我们来探讨为什么RSA密码难于破解? 
   在RSA密码应用中,公钥KU是被公开的,即e和n的数值可以被第三方窃听者得到。破解RSA密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就可以得到私钥来破解密文。从上文中的公式:(d*e) mod ((p-1)*(q-1)) = 1,我们可以看出,密码破解的实质问题是:从p*q的数值,去求出(p-1)和(q-1)。换句话说,只要求出p和q的值,我们就能求出d的值而得到私钥。
   当p和q是一个大素数的时候,从它们的积p*q去分解因子p和q,这是一个公认的数学难题。比如当p*q大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。因此,RSA从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
  缺点1:虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何。

下表列出了对同一安全级别所对应的密钥长度。

保密级别

对称密钥长度(bit)

RSA密钥长度(bit)

ECC密钥长度(bit)

保密年限

80

80

1024

160

2010

112

112

2048

224

2030

128

128

3072

256

2040

192

192

7680

384

2080

256

256

15360

512

2120

    缺点2:从上边可以看出,同样安全级别的加密算法,RSA需要更长的密钥。这就使运算速度较慢,较对称密码算法慢几个数量级。且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。

       缺点3:RSA产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

因此,使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法。实际应用中一般用来加密对称算法的密钥,而密文多用对称加密算法加密传输。

七、RSA1024/2048

RSA算法密钥长度的选择是安全性和程序性能平衡的结果,密钥长度越长,安全性越好,加密解密所需时间越长。实际中常使用1024bit秘钥和2048bit秘钥,分别称为RSA1024和RSA2048。秘钥包含公钥和私钥,即公钥私钥长度一样,都是1024bit或2048bit。RSA几个特性如下:

1.密钥长度增长一倍,公钥操作所需时间增加约4倍,私钥操作所需时间增加约8倍,公私钥生成时间约增长16倍。

2. 一次能加密的密文长度与密钥长度成正比, len_in_byte(raw_data) = len_in_bit(key)/8 -11,如1024bit的密钥,一次能加密的内容长度为 1024/8 -11 = 117 byte。所以非对称加密一般都用于加密对称加密算法的密钥,而不是直接加密内容。

3. 加密后密文的长度为密钥的长度,如密钥长度为1024bit(128Byte),最后生成的密文固定为 1024bit(128Byte)。

关于RSA密钥长度、明文长度和密文长度请参考: RSA密钥长度、明文长度和密文长度

参考文献:

[1] https://www.cnblogs.com/jiftle/p/7903762.html

[2] https://blog.csdn.net/liwei16611/article/details/83751851

[3] http://blog.sina.com.cn/s/blog_4fcd1ea301012o4q.html

相关 [rsa 对称 加密算法] 推荐:

RSA非对称加密算法详解_u013073067的博客-CSDN博客_rsa算法

- -
RSA加密算法是最常用的非对称加密算法,由 罗纳德·李维斯特(Ron Rivest)、 阿迪·萨莫尔(Adi Shamir)和 伦纳德·阿德曼(Leonard Adleman)于1977年一起提出,RSA就是他们三人姓氏开头字母拼在一起组成的. 非对称加密算法的特点就是加密秘钥和解密秘钥不同,秘钥分为公钥和私钥,用私钥加密的明文,只能用公钥解密;用公钥加密的明文,只能用私钥解密.

使用RSA非对称加密JWT | 燃情岁月

- -
JWT几乎是当前分布式开发中无状态token的最佳选择,被越来越多的开发者接受和使用, JWT是基于加密算法的认证方式,省去了到认证服务器的校验过程,认证效率大大提高. 更详细的关于JWT的介绍可以点击 这里查看. 通常大家在使用JWT的时候都是使用 HmacSHA256加密钥的加密方式,这种方式严格依赖密钥,在分布式开发的过程中,通常是由认证服务器生成 JWT,然后再由资源校验 JWT的有效性,那么这时候资源服务器就也需要密钥了,认证服务和资源服务很可能是不同的团队开发和维护,密钥在这个过程中传递,很有可能泄漏.

Java加解密艺术之DES对称加密算法

- - CSDN博客推荐文章
加密的时候使用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密 * @see DES是美国国家标准研究所提出的算法. 由于加解密的数据安全性和密钥长度成正比,故DES的56位密钥已经形成安全隐患 * @see 后来针对DES算法进行了改进,有了三重DES算法(也称DESede或Triple-DES).

RSA算法原理(二)

- - 阮一峰的网络日志
上一次,我介绍了一些 数论知识. 有了这些知识,我们就可以看懂 RSA算法. 这是目前地球上最重要的加密算法. 我们通过一个例子,来理解RSA算法. 假设 爱丽丝要与鲍勃进行加密通信,她该怎么生成公钥和私钥呢. 第一步,随机选择两个不相等的质数p和q. (实际应用中,这两个质数越大,就越难破解.

RSA算法原理(一)

- - 阮一峰的网络日志
如果你问我,哪一种 算法最重要. 我可能会回答 "公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解. 你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先简单介绍一下,什么是"公钥加密算法". 1976年以前,所有的加密方法都是同一种模式:.   (1)甲方选择某一种加密规则,对信息进行加密;.

银联加密算法

- - CSDN博客推荐文章
很多人对银联卡的加密算法感兴趣,毕竟分分钟涉及的都是你的钱的安全,但网上很少人却讲银联标准加密算法. 遂写一遍当做是自己的学习笔记,偶尔忘了可以翻翻,同时希望能够帮助到其他人. 首先要认识一下cbc算法和ecb算法. cbc算法是链式的,慢,不可并行处理,但更安全,因为每一次加密都是依赖于上一次的结果,同时这也会导致一次错将导致后面的全部错误.

RSA的SecureID token数据被偷了?

- ripwu - 张志强的网络日志
博客 » 记事本 » 密码学 ». WSJ报道:RSA承认其数据被偷,4000万SecureID token需要被更新. 中国银行银行密钥用的就是RSA生产,就是下图这玩意儿,手里有这玩意儿的同学们要小心了(当然,如果你的账户里的钱没有6位数以上,也不用太担心,毕竟网银的安全性不全依赖于这个设备):.

RSA Security 被攻破的途徑

- MorrisC - Gea-Suan Lin&#39;s BLOG
今年三月的時候,RSA Security 被攻破,攻擊者順利取得 SecurID 的資料,這些資料很有可能降低 SecurID 的安全性. 也因此有了 Lockheed Martin 被攻擊的事情. 在官方的說明「Anatomy of an Attack」中,有提到「2011 Recruitment plan.xls」是使用 Excel 檔案,加上 Adobe Flash vulnerability (CVE-2011-0609) 攻入,而這是個 0-day attack (在當時).

RSA详细披露网络攻击

- dunqiu - Solidot
在伦敦举行的RSA安全会议上,RSA执行总裁Art Coviello谴责某个国家对它发动网络攻击,RSA总裁Tom Heiser和首席技术官Eddie Schwartz则披露了攻击的更多细节. 协调合作的攻击者伪装成熟人对RSA雇员实施了一系列鱼叉式钓鱼攻击,目的是渗透进公司网络. 他们发送了内嵌有恶意Flash文件的Excel电子表格,利用0day漏洞建立一个入侵的据点,随后再进行组合攻击,获得SecurID数据的访问权限.

JAVA实现RSA加密解密

- - CSDN博客推荐文章
提供加密,解密,生成密钥对等方法. RSA加密原理概述   :. RSA的安全性依赖于大数的分解,公钥和私钥都是两个大素数(大于100的十进制位)的函数. 据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积   .  1.选择两个大素数 p,q ,计算 n=p*q;   .  2.随机选择加密密钥 e ,要求 e 和 (p-1)*(q-1)互质   .