一文详解 RSA 非对称加密算法

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 非对称加密算法指的是 加、解密使用不同的密钥,一把为公开的公钥,另一把为私钥。公钥加密的内容只能由私钥进行解密,反之由私钥加密的内容只能由公钥进行解密。也就是说,这一对公钥、私钥都可以用来加密和解密,并且一方加密的内容只能由对方进行解密。

什么是非对称加密算法?
非对称加密算法指的是 加、解密使用不同的密钥,一把为公开的公钥,另一把为私钥。
公钥加密的内容只能由私钥进行解密,反之由私钥加密的内容只能由公钥进行解密。也就是说,这一对公钥、私钥都可以用来加密和解密,并且一方加密的内容只能由对方进行解密。

  • 加密:公钥加密,私钥解密的过程,称为「加密」

因为公钥是公开的,任何公钥持有者都可以将想要发送给私钥持有者的信息进行加密后发送,而这个信息只有私钥持有者才能解密。

  • 签名:私钥加密,公钥解密的过程,称为「签名」

它和加密有什么区别呢?因为公钥是公开的,所以任何持有公钥的人都能解密私钥加密过的密文,所以这个过程并不能保证消息的安全性,但是它却能保证消息来源的准确性和不可否认性,也就是说,如果使用公钥能正常解密某一个密文,那么就能证明这段密文一定是由私钥持有者发布的,而不是其他第三方发布的,并且私钥持有者不能否认他曾经发布过该消息。故此将该过程称为「签名」。

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相同的算法,但他的发现被列入机密,一直到1997年才被发表。

对极大整数做因数分解的难度决定了RSA算法的可靠性。 换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。 但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。

一、举一个通俗易懂的例子

看一个数学小魔术:

让A写下一个任意3位数,并将这个数和91相乘;然后将积的最后三位数告诉B,这样B就可以计算出A写下的是什么数字了。

  • 比如A写下的是123 (需加密内容),并且A计算出123 * 91 (B的公钥加密)等于11193,并把结果的末三位193(加密结果)告诉B ;
  • B只需要把193再乘以11 (B的私钥),193 * 11 = 2123 末三位123(解密结果)就是A写下的数字了;

道理很简单,91乘以11等于1001,而任何一个三位数乘以1001后,末三位显然都不变(例如123乘以1001就等于123123)。

知道原理后,可以构造一个定义域和值域更大的加密解密系统。
例如:

  • 任意一个数乘以400000001后,末8位都不变,而400000001 = 19801 * 20201。于是A来乘以19801,B来乘以20201,又一个加密解密不对称的系统就构造好了;
  • 甚至可以构造得更大一些 4000000000000000000000000000001 = 1199481995446957 * 3334772856269093,这样我们就成功构造了一个30位的加密系统;

如果仅仅按照上面的思路,如果对方知道原理,非常容易穷举出400000001这个目标值;RSA算法使用的是指数和取模运算,本质上就是上面这套思想。

此段落转载自:
如何用通俗易懂的话来解释非对称加密?

二、一句话:

对极大整数做因数分解的难度决定了RSA算法的可靠性。

三、RSA加密算法

3.1、维基百科——RSA加密算法

先看一下维基百科的算法描述:

公钥与私钥的产生

  • 1、随意选择两个大的质数 p和 q,p不等于 q,计算 N=pq
  • 2、根据欧拉函数,求得 r
r = φ(N) = φ(p)φ(q) = (p-1)(q-1)
  • 3、选择一个小于r并与r互质的整数e,求得e关于r的模反元素,命名为d ( ed ≡ 1(mod r) 模反元素存在,当且仅当e与r互质 );
  • 4、销毁p和q,此时 (N , e)是公钥,(N, d)为私钥;

加密消息

假设Bob想给Alice发送一个消息 n,他知道Alice产生的 Ne ;用下面这个公式他可以将 n加密为 c

c ≡ n^e (mod N)

计算 c并不复杂。Bob算出 c后就可以将它传递给Alice。

解密消息

Alice得到Bob的消息 c后就可以利用她的密钥d来解码。可以用以下这个公式来将 c转换为 n

n ≡ c^d (mod N)

此段落转载自:
维基百科——RSA加密算法

3.2、依照算法公式举个例子

依照算法公式来举个例子

1、随意选择两个大的质数 p和 q,p不等于 q,计算 N=pq

质数 定义:

除了1和该数自身外,无法被其他自然数整除的数。

举例:

p = 3;
q = 5;
N = 3*5 = 15;

2、根据欧拉函数,求得 r

r = φ(N) = φ(p)φ(q) = (p-1)(q-1)。

欧拉函数 定义:

欧拉函数 φ(n)是小于或等于n的正整数中与n互质的数的数目。

例如:φ(8) = 4,因为1,3,5,7均和8互质。

举例:

r = φ(N) = φ(p)φ(q) = (p-1)(q-1) ;

r = φ(15) = φ(3)φ(5) = (3-1)(5-1) ;
r = 8

3、选择一个小于r并与r互质的整数e,求得e关于r的模反元素,命名为d ( ed ≡ 1(mod r) 模反元素存在,当且仅当e与r互质 );

互质 定义:

如果两个或两个以上的整数的最大公约数是 1,则称它们为互质

例如:1,3,5,7均和8互质

模反元素 定义:

如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。( ab ≡ 1(mod n) )

例如:比如3和5互质,3关于5的模反元素就可能是2,因为 (3*2)%5=1 。

举例:

// 选择一个小于r并与r互质的整数e (1,3,5,7均和8互质):
e = 7;
// 求得e关于r的模反元素,命名为d (    ed ≡ 1(mod r)     ) 

ed ≡ 1(mod r) ;

7*d ≡ 1(mod 8) ;
7*d%8 = 1; 
// 这里取d = 15
d = 15;

4、销毁p和q,此时 (N , e)是公钥,(N, d)为私钥

// 公钥  (N , e)
( 15,7 )
// 私钥 (N, d)
( 15,15 )

5、加密

假设Bob想给Alice发送一个消息 n,他知道Alice产生的 Ne ;用下面这个公式他可以将 n加密为 c

举例:

// 假设 
n = 2;
// 计算c
c ≡ n^e (mod N) ;

(c^-1 * n^e)%N = 1 ; 
(c^-1 * 2^7)%15 = 1 ;
// 
c = 8;

6、解密

Alice得到Bob的消息 c后就可以利用她的密钥d来解码。可以用以下这个公式来将 c转换为 n

举例:

// 计算n
n ≡ c^d (mod N)

n ≡ 8^15 (mod 15) ;
(n^-1 * 8^15)%15 = 1 ;
//
n = 2;

参考

如何用通俗易懂的话来解释非对称加密?
维基百科——RSA加密算法
RSA算法详解

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。

目录
相关文章
|
3月前
|
存储 安全 数据安全/隐私保护
打造安全防线!Python AES&RSA加密工具,黑客绕道走的秘籍
【9月更文挑战第9天】随着数字化时代的到来,信息安全问题日益凸显。本文将介绍如何使用Python结合AES与RSA两种加密算法,构建强大的加密工具。AES以其高效性和强安全性著称,适用于大量数据的快速加密;RSA作为非对称加密算法,在加密小量数据及实现数字签名方面表现卓越。通过整合两者,可以构建既安全又灵活的加密系统。首先,需要安装pycryptodome库。接着,实现AES加密与解密功能,最后利用RSA加密AES密钥,确保其安全传输。这种设计不仅提高了数据传输效率,还增强了密钥交换的安全性,为敏感数据提供坚实保护。
243 43
|
3月前
|
安全 算法 网络安全
浅谈非对称加密(RSA)
浅谈非对称加密(RSA)
170 0
|
2月前
|
算法 安全 Go
RSA加密算法详解与Python和Go实现
RSA加密算法详解与Python和Go实现
176 1
|
2月前
|
算法 安全 网络安全
使用 Python 实现 RSA 加密
使用 Python 实现 RSA 加密
109 2
|
3月前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
149 5
|
3月前
|
安全 算法 数据安全/隐私保护
深度揭秘!Python加密技术的背后,AES与RSA如何守护你的数据安全
【9月更文挑战第10天】随着数字化时代的到来,数据安全成为企业和个人面临的重大挑战。Python 作为功能强大的编程语言,在数据加密领域扮演着重要角色。AES 和 RSA 是两种主流加密算法,分别以对称和非对称加密方式保障数据安全。AES(Advanced Encryption Standard)因其高效性和安全性,在数据加密中广泛应用;而 RSA 则利用公钥和私钥机制,在密钥交换和数字签名方面表现卓越。
91 3
|
3月前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
83 1
|
3月前
|
安全 数据安全/隐私保护 Python
情书也能加密?Python AES&RSA,让每一份数据都充满爱的密码
【9月更文挑战第8天】在这个数字化时代,情书不再局限于纸笔,也可能以电子形式在网络中传递。为了确保其安全,Python提供了AES和RSA等加密工具,为情书编织爱的密码。首先,通过安装pycryptodome库,我们可以利用AES对称加密算法高效保护数据;接着,使用RSA非对称加密算法加密AES密钥和IV,进一步增强安全性。即使情书被截获,没有正确密钥也无法解读内容。让我们用Python为爱情编织一张安全的网,守护每份珍贵情感。
55 2
|
3月前
|
安全 算法 数据安全/隐私保护
黑客克星!Python加密艺术大公开,AES、RSA双剑合璧,守护你的数字世界
在这个数据泛滥的时代,数字世界既充满了知识,也潜藏安全隐患。Python 作为强大的编程语言,以其独特的加密技术为我们的信息安全保驾护航。本文将介绍 AES 和 RSA 这两种加密算法,揭示它们如何协同工作,保护你的数字世界。AES(高级加密标准)以其高效、安全著称,能将敏感信息转化为难以破解的乱码。Python 的 `pycryptodome` 库让 AES 加密变得简单易行。然而,AES 面临密钥分发难题,此时 RSA(非对称加密算法)便大显身手,通过公钥加密、私钥解密的方式确保密钥传输安全。AES 与 RSA 在 Python 中交织成一道坚不可摧的防护网,共同守护我们的数字世界。
91 0
|
1天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
103 80