非对称加密算法--RSA加密原理详解

article/2025/3/18 17:30:32

密码学是在编码与破译的斗争实践中逐步发展起来的,并随着先进科学技术的应用,已成为一门综合性的尖端技术科学。

密码学发展史

在说RSA加密算法之前, 先说下密码学的发展史。其实密码学的诞生,就是为了运用在战场,在公元前,战争之中出现了秘密书信。在中国历史上最早的加密算法的记载出自于周朝兵书《六韬.龙韬》中的《阴符》和《阴书》。在遥远的西方,在希罗多德(Herodotus)的《历史》中记载了公元前五世纪,希腊城邦和波斯帝国的战争中,广泛使用了移位法进行加密处理战争通讯信息。

相传凯撒大帝为了防止敌人窃取信息,就使用加密的方式传递信息。那么当时的加密方式非常的简单,就是对二十几个罗马字母建立一张对照表,将明文对应成为密文。那么这种方式其实持续了很久。甚至在二战时期,日本的电报加密就是采用的这种原始加密方式。
凯撒密码对照表

早期的密码学一直没有什么改进,几乎都是根据经验慢慢发展的。直到20世纪中叶,由香农发表的《秘密体制的通信理论》一文,标志着加密算法的重心转移往应用数学上的转移。于是,逐渐衍生出了当今重要的三类加密算法:非对称加密、对称加密以及哈希算法(HASH严格说不是加密算法,但由于其不可逆性,已成为加密算法中的一个重要构成部分)。

1976年以前,所有的加密方法都是同一种模式:加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算法",使用相同的密钥,两次连续的对等加密运算后会回复原始文字,也有很大的安全隐患。

1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman密钥交换算法"。也正是因为这个算法的产生,人类终于可以实现非对称加密了:A给B发送信息

  1. B要先生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
  2. A获取B的公钥,然后用它对信息加密。
  3. B得到加密后的信息,用私钥解密。
    理论上如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是232个十进制位,也就是768个二进制位,因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全,当然量子计算机除外。

RSA算法的原理

下面进入正题,解释RSA算法的原理,其实RSA算法并不难,只需要一点数论知识就可以理解。

  1. 素数:又称质数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。
  2. 互质,又称互素。若N个整数的最大公因子是1,则称这N个整数互质。
  3. 模运算求余运算。“模”是“Mod”的音译。和模运算紧密相关的一个概念是“同余”。数学上,当两个整数除以同一个整数,若得相同余数,则二整数同余
欧拉函数

任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成互质关系?)计算这个值的方法就叫做欧拉函数,以φ(n)表示。

  • 计算8的欧拉函数,和8互质的 1、2、3、4、5、6、7、8
    φ(8) = 4
    如果n是质数的某一个次方,即 n = p^k (p为质数,k为大于等于1的整数),则φ(n) = φ(p^k) = p^k - p^(k-1)。也就是φ(8) = φ(2^3) =2^3 - 2^2 = 8 -4 = 4
  • 计算7的欧拉函数,和7互质的 123456、7
    φ(7) = 6
    如果n是质数,则 φ(n)=n-1 。因为质数与小于它的每一个数,都构成互质关系。比如5与1、2、3、4都构成互质关系。
  • 计算56的欧拉函数
    φ(56) = φ(8) * φ(7) = 4 * 6 = 24
    如果n可以分解成两个互质的整数之积,即 n = p * k ,则φ(n) = φ(p * k) = φ(p1)*φ(p2)

欧拉定理:如果两个正整数m和n互质,那么m的φ(n)次方减去1,可以被n整除。
欧拉定理.png

费马小定理:欧拉定理的特殊情况,如果两个正整数m和n互质,而且n为质数!那么φ(n)结果就是n-1。
费马小定理.png

模反元素

还剩下最后一个概念,模反元素:如果两个正整数e和x互质,那么一定可以找到整数d,使得 ed-1 被x整除,或者说ed被x除的余数是1。
那么d就是e相对于x的模反元素。
d是模反元素

等式转换
  1. 根据欧拉定理
    等式转换1

  2. 由于1^k ≡ 1,等号左右两边都来个k次方
    等式转换

  3. 由于1* m ≡ m,等号左右两边都乘上m
    等式转换3.png

根据模反元素,因为e*d 一定是x的倍数加1。所以如下:
等式转换

通过多次的等式转换。终于可以将这两个等式进行合并了!如下:
最终等式转换

这个等式成立有一个前提!就是关于模反元素的,就是当整数e和φ(n)互质!一定有一个整数d是e相对于φ(n)的模反元素。
我们可以测试一下。
m取值为4
n取值为15
φ(n)取值为8
e 如果取值为3
d 可以为 11、19…(模反元素很明显不止一个,其实就是解二元一次方程)
如果你测试了,那么你可以改变m的值试一下,其实这个等式不需要m和n 互质。只要m小于n 等式依然成立。
这里需要注意的是,我们可以看做 m 通过一系列运算得到结果仍然是 m。这一系列运算中,分别出现了多个参数n、φ(n)、e还有d。

m 的 e乘上d 次方为加密运算,得到结果 c
c 模以 n 为解密运算,得到结果 m
这似乎可以用于加密和解密。但这样,加密的结果会非常大。明文数据将非常小(虽然RSA用于加密的数据也很小,但是没这么大悬殊),真正的RSA要更加强大,那么RSA是怎么演变来的呢??
早期很多数学家也停留在了这一步!直到1967年迪菲赫尔曼密钥交换打破了僵局!

迪菲赫尔曼密钥交换

这个密钥交换当时轰动了整个数学界!而且对人类密码学的发展非常重要,因为这个伟大的算法能够拆分刚才的等式。当非对称加密算法没有出现以前,人类都是用的对称加密。所以密钥的传递,就必须要非常小心。
迪菲赫尔曼密钥交换 就是解决了密钥传递的保密性,我们来看一下
迪菲赫尔曼密钥交换
假设一个传递密钥的场景。算法就是用3 的次方去模以17。 三个角色

  • 服务器 随机数 15
    这个15只有服务器才知道。通过算法得到结果 6 因为 3的15次方 mod 17 = 6 。然后将结果 6 公开发送出去,拿到客户端的 12 ,然后用12^15 mod 17 得到结果10(10就是交换得到的密钥)
  • 客户端 随机数13
    客户端用3 的 13次方 mod 17 = 12 然后将得到的结果12公布出去。
    拿到服务器的 6 ,然后用6^13 mod 17 得到结果10(10就是交换得到的密钥)
  • 第三者
    第三者只能拿到6 和 12 ,因为没有私密数据13、15,所以它没法得到结果10。

为什么 6的13次方会和12的15次方得到一样的结果呢?因为这就是规律,我们可以用小一点的数字测试一下3^3 mod 17 = 10和10 ^ 2 mod 17 ; 3 ^ 2 mod 17 = 9和9^3 mod 17结果都是15。迪菲赫尔曼密钥交换最核心的地方就在于这个规律
迪菲赫尔曼密钥交换转换

RSA的诞生

RSA原理

现在我们知道了m^e % n = c是加密,c^d % n = m是解密,m就是原始数据,c是密文,公钥是n和e,私钥是n和d,所以只有n和e是公开的。加密时我们也要知道φ(n)的值,最简单的方式是用两个质数之积得到,别人想破解RSA也要知道φ(n)的值,只能对n进行因数分解,那么我们不想m被破解,n的值就要非常大,就是我们之前说的,长度一般为1024个二进制位,这样就很安全了。但是据说量子计算机(用于科研,尚未普及)可以破解,理论上量子计算机的运行速度无穷快,大家可以了解一下。

以上就是RSA的数学原理

检验RSA加密算法

我们用终端命令演示下这个加密、解密过程。
假设m = 12(随便取值,只要比n小就OK),n = 15(还是随机取一个值),φ(n) = 8,e = 3(只要和φ(n)互质就可以),d = 19(3d - 1 = 8,d也可以为3,11等等,也就是d = (8k + 1)/3 )
终端分别以m=12,7输入结果
终端演示

OpenSSL进行RSA的命令运行

Mac可以直接使用OpenSSL,首先进入相应文件夹

  • 生成公私钥
// 生成RSA私钥,文件名为private.pem,长度为1024bit
openssl genrsa -out private.pem 1024
// 从私钥中提取公钥
openssl rsa -in private.pem -pubout -out publick.pem

生成私钥

// 查看刚刚生成好的私钥
cat private.pem
// 查看刚刚生成好的公钥
cat publick.pem

查看公私钥

我们可以看到base64编码,明显私钥二进制很大,公钥就小了很多。
这时候我们的文件夹内已经多了刚刚生成好的公私钥文件了

公私钥文件

// 将私钥转换为明文
openssl rsa -in private.pem -text -out private.txt

96111F25-0954-4854-9B36-75413A439AFD.png

里面就是P1、P2还有KEY等信息。

  • 对文件进行加密、解密
// 编辑文件message内容为hello Vincent!!!
// 刚刚的public.pem写成了publick.pem(哎。。。)$ vi message.txt$ cat message.txthello Vincent!!!
// 通过公钥加密数据时,使用encrypt对文件进行加密$ openssl rsautl -encrypt -in message.txt -inkey publick.pem -pubin -out enc.txt
// 此时查看该文件内容为乱码$ cat enc.txt
j��E]֌a��d�kUE�&<��I*��V/��pL[���ˋ�O�+�-�M��K�ܱ�&⪅ծO��2���o34�:�$���6��C�L��,b�'M�S�k�0���A��3%�[I���1�����ps"%
// 通过私钥解密数据$ openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
// 已成功解密,正确显示文件内容$ cat dec.txthello Vincent!!!
// 通过私钥加密数据时,要使用sign对文件进行重签名
$ openssl rsautl -sign -in message.txt -inkey private.pem -out enc.bin
// 此时查看该文件内容同样为乱码
$ cat enc.bin
{���Ew�3�1E��,8-OA2�Is�:���:�ԅ@MU����؜�i1B���#��6���ׂm�D(�t#/���	�ہ�������ݬ>(�>�^@�C��3�ӸMQт�O%
// 通过公钥解密数据
$ openssl rsautl -verify -in enc.bin -inkey publick.pem -pubin -out dec.bin
// 已成功解密,正确显示文件内容
$ cat dec.binhello Vincent!!!
RSA用途及特点

到这里,大家都知道RSA通过数学算法来加密和解密,效率比较低,所以一般RSA的主战场是加密比较小的数据,比如对大数据进行对称加密,再用RSA给对称加密的KEY进行加密,或者加密Hash值,也就是数字签名。

关于RSA数字签名后面再慢慢阐述。该文章为记录本人的学习路程,希望能够帮助大家,也欢迎大家点赞留言交流!!!https://mp.csdn.net/mdeditor/85228078#


http://chatgpt.dhexx.cn/article/6DIfV7j9.shtml

相关文章

密码学——RSA加密算法原理

前言&#xff1a;之前在做密码学题的时候了解了一下RSA&#xff0c;但总感觉那时总结的过少&#xff0c;而且也理解的不到位&#xff0c;这次就再来详细的了解一下&#xff0c;并通过做题来巩固一下。 一、对称加密与非对称加密 对称加密&#xff1a; 加密和解密用的是同一密…

如何利用好大数据挖掘潜在用户?

就目前而言&#xff0c;现在的大数据技术为绝大部分的业务提供了许多功能&#xff0c;同时还提高了效率和收入。当然除了这些以外&#xff0c;大数据分析还为公司的潜在客户和现有客户提供了许多好处。这些优点让很多公司对于大数据技术十分向往&#xff0c;那么怎么能够利用好…

激发客户潜在需求

企业不光要看到客户的显现需求&#xff0c;更要挖掘客户的潜在需求&#xff0c;因为客户的潜在需求是可以转化为显现需求的&#xff0c;满足客户的潜在需求可以为企业带来更多经济效益。 前言 潜在需求是指消费者虽然有明确意识的欲望&#xff0c;但由于种种原因还没有明确的显…

HubSpot入站营销:吸引潜在客户的7大技巧!

入站营销是当今数字化时代的重要策略之一。它不仅可以帮助企业吸引潜在客户、建立品牌知名度&#xff0c;还能促进客户参与并提高客户满意度。今天运营坛将带领大家深入探讨HubSpot入站营销的理论和实践&#xff0c;包括如何开始入站营销、入站营销的框架以及关键技巧。 一、什…

Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户

最近我们被客户要求撰写关于银行拉新活动的研究报告&#xff0c;包括一些图形和统计输出。 项目背景&#xff1a;银行的主要盈利业务靠的是贷款&#xff0c;这些客户中的大多数是存款大小不等的责任客户&#xff08;存款人&#xff09;。银行拥有不断增长的客户。该银行希望增…

潜在客户需要单独管理吗?

通常销售型企业会将客户类型区分为&#xff1a;潜在客户、意向客户和购买客户等状态。那么&#xff0c;潜在客户需要单独拿出来进行管理吗&#xff1f;。 企业从展会、网站、广告及其它市场活动收集来的潜在客户是客户挖掘、获得、细分的主要目标受众&#xff0c;这些线索客户的…

python数据分析与挖掘实战---航空公司客户价值分析

航空公司客户价值分析 一、 背景与挖掘目标 **** 客户关系管理是企业的核心问题&#xff0c;关键在于客户的分类&#xff1a;区别无价值客户&#xff0c;高价值客户&#xff0c;针对不同客户群体有的放矢投放具体服务方案&#xff0c;实现企业利润最大化的目标。 各大航空公…

银行电话精准营销的探索性分析并基于XGboost进行潜在客户预测建模

问题背景&#xff1a; 随着利率市场化改革推进&#xff0c;银行业整体面临息差收窄的压力&#xff0c;不少银行将中间业务收入作为新的利润增长点。其中&#xff0c;以招商银行为代表的一批大型股份制银行&#xff0c;更是将大财富管理模式做到了极致&#xff0c;中间收入占比的…

如何和产品潜在的客户沟通

老于笔记01.10 一个人幸运的前提其实是他有能力改变自己。 正文 和产品潜在的客户沟通很有必要&#xff0c;有时候还需要对他们提供必要指导&#xff0c;这样有助于挖掘他们需求&#xff0c;将他们变成真正的消费者。 1 C端产品的第一批用户很可能来自推消以外的其他渠道&#…

salesforce-使用Web-to-Lead引入网站的潜在客户

salesforce的web-to-lead功能可以将网站的流量转化为潜在客户&#xff0c;只需要用户填写我们在salesforce后台设定好的表单&#xff0c;即可实现将用户填写的信息导流到salesforce后台&#xff0c;从而统一管理网站的潜在客户。 我个人比较习惯在英文环境下操作&#xff0c;我…

链脉刘松华:如何用AI名片发掘更多潜在客户

本文来自链脉联合创始人:刘松华 乐尚七色光美术教育创始人 懂孩子家庭教育讲师 润阳父母大学家庭教育讲师 润阳演讲大学演说训练讲师 链脉名片联合创始人 新营销能量讲师 链脉创富讲师 销售行业需要不断的签单成交就需要不断有潜在客户的加入,所以潜在客户的获取关乎到…

Python爬虫爬取知乎用户信息+寻找潜在客户

【Python应用】寻找社交网络中的目标用户 日后的更新&#xff1a;由于是很久以前的课程设计项目&#xff0c;完整的源码已经不见了&#xff0c;关键的网页数据获取和解析的部分代码我在文章中已经贴出来了&#xff0c;但写的也不够好&#xff0c;如果想参考爬取知乎的同学&…

用户画像实战:基于Kmeas的电商潜在客户识别

电商潜在客户识别 前言 1、任务描述 此数据集仅用于学习客户细分概念&#xff0c;也称为市场篮子分析。我将以最简单的形式使用无监督的ML技术&#xff08;KMeans聚类算法&#xff09;来演示这一点。 通过超市商场会员卡信息&#xff0c;我们可以得到一些关于客户的基本数据…

数据分析,把握商机 关键词采集工具助你挖掘潜在客户

数据分析&#xff0c;是指对大量的数据进行收集、处理、分析和解析的过程&#xff0c;从而发现其中隐含的规律、趋势和价值信息。而在商业领域&#xff0c;数据分析则是一种能力&#xff0c;可以帮助企业更好地了解市场、客户和竞争对手&#xff0c;把握商机&#xff0c;提高效…

营销自动化如何帮助你挖掘潜在客户?

点击上方“AI公园”&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶” 作者&#xff1a;Xen Chia 编译&#xff1a;ronghuaiyang 导读 看看如何使用营销自动化工具来得到潜在客户。 你如何争取潜在客户&#xff1f; 如果你的答案将是“购买潜在客户”&#xff0c;那…

Python实现预测信用卡潜在客户

一、数据集 有一家名为Happy Customer Bank (快乐客户银行) 的银行&#xff0c;是一家中型私人银行&#xff0c;经营各类银行产品&#xff0c;如储蓄账户、往来账户、投资产品、信贷产品等。 该银行还向现有客户交叉销售产品&#xff0c;为此他们使用不同类型的通信方式&…

数据挖掘(二)预测潜在贷款发放客户

注&#xff1a;参考多篇csdn及b站文章所得 一、实验背景 某机构想要预测哪些客户可能会产生贷款违约行为&#xff61;他们搜集了历史客户行为的部分数据以及目标客户的信息,希望通过历史数据对目标客户进行预测哪些客户会是潜在的违约客户,从而缩小目标范围,实现低风险贷款发…

淘宝客服话术《挖掘每一个潜在客户》

在这个电商行业的时代&#xff0c;作为一名淘宝客服人员&#xff0c;与店铺之间的关系是密不可言的&#xff0c;客服相当于店铺的门面&#xff0c;也是和客户第一接触者&#xff0c;重要性可想而知。 随着客服岗位的泛滥&#xff0c;客服之间的能力也是参差不齐的&#xff0c;想…

依据数据简单分析,发掘潜在客户

大数据概论作业(一) 信息技术的不断发展让人们离不开科技,我们每天使用各类电子产品所产生的信息数据不计其数,而这些数据的合理利用将会使我们的生活更加的便捷,所以,大数据俨然已成为现在前沿科技。的研究热点,大数据来源于我们生活的方方面面,也必将影响着我们…

生成微信小程序码、URL Scheme和URL Link

通用第一步,获取access_token,需要服务端去获取并缓存 (APPID和APPSECRET在微信小程序后台查看获取) https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidAPPID&secretAPPSECRET 1.获取小程序码(通过该接口生成的小程序码&#xff0c;永久有…