RSA算法概述
RSA算法的概述(个人理解,欢迎纠正)
RSA是一种基于公钥密码体制的优秀加密算法,1978年由美国(MIT)的李维斯特(Rivest)、沙米尔(Shamir)、艾德曼(Adleman)提的。
RSA算法是一种分组密码体制算法,它的保密强度是建立在具有大素数因子的合数其因子分解是困难的(基于大数分解的难度)。
公钥和私钥是一对大素数的函数,从一个公钥和密文中恢复出明文的难度等价于分解两个大素数之积。
RSA得到了世界上的最广泛的应用,ISO在1992年颁布的国际标准X.509中,将RSA算法正式纳入国际标准。
在给大家介绍RSA算法前,先要给大家介绍一下非对称加密和对称加密的概念。
非对称加密:加密和解密需要不同的密钥。for example:小明有两个密钥,一把公钥是公开的,一把私钥是私密的,只有小明一个人知道。小红呢,她可以通过小明公开的公钥去加密这串明文,而小明则可以通过自己的私钥解开这串密文。
对称加密:加密和解密都是用同一个密钥的算法,称作对称加密。举个例子:小明用一种密钥加密一串明文,小红可以通过相同的密钥解密这串明文。
而我们今天要说的RSA算法正是一种非对称算法。那么掌握RSA算法需要有哪些数学基础呢?
这里给大家介绍一下
- 欧拉函数
- 欧拉定理
- 模反元素
- 欧几里得扩展算法。
欧拉函数:
定义:任意给定正整数n,计算在小于等于n的正整数之中,有多少个与n构成互质关系。计算这个值的方法叫做欧拉函数。以φ(n)表示。如φ(8)=4,应为在1到8之中,与8形成互质关系的有1,3,5,7。
φ(n)的计算方法并不复杂,我们就分情况分析。
标准分解式:将质因数分解的结果,按照质因数大小,由小到大排列,并将相同质因数的连乘积,以指数形式表示,此种表示法称为标准分解式。如2020的标准分解式是2^2*101。
计算方法:首先我们明白任何大于1的整数都可以写成几个质数的乘积
所以第一步:先将整数n写成以下形式

第二步:我们知道如果n是质数的某一个次方,即n=p^k(p为质数,k>=1),则φ(n)=p^k-p^(k-1),所以我们可以将φ(n)类推成以下形式

举个例子:φ(1323)=φ(3^2*7^2)=1323(1-1/3)(1-1/7)=756
欧拉定理:
定义:若n, a为正整数,且n,a互质,则:a^φ(n)≡1(mod n)
模反元素:
定义:如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除。举个例子:3和11互质,那么3的模反元素是4,应为3*4-1 可以被11整除。4加减11的整数倍数都是3的模反元素。
欧几里得扩展算法:
欧几里得算法又称辗转相除法,用来求两个正整数的最大公约数。以1997和615为例,用欧几里得算法求解如下:
1997=615∗3+152
615=152∗4+7
152=7∗21+5
7=5∗1+2
5=2∗2+1
2=1∗2+0
得到两个数的最大公因数是1,也就意味着两数互质。
两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。用数学表示为: gcd(a,b)=gcd(b,amodb)
掌握了这些知识后就可以开始尝试通过RSA算法进行加密和解密。
ok,让我们来进入正题吧
(1)设计密钥
A、在离线方式下,先产生两个足够大的强质数p、q;
B、令n=p*q。计算欧拉函数φ(n)=(p-1)×(q-1);
C、选取一个与φ(n)互素的奇数e,称e为公开指数;
D、根据e×d=1 mod(φ(n)),找出d;
E、舍弃p和q (但绝不能泄露) ,公开(n,e),公钥;
F、保密(n,d) 私钥。
(2)加密
对于明文M,用公钥 (n,e) 加密可得到密文C。
C = Me mod (n)
(3)解密
对于密文C,用私钥(n,d)解密可得到明文M。
M = Cd mod (n)
举个例子:
选取p=3, q=5,则n=p*q =15,(n)=(p-1)(q-1)=8
选取e=11(大于p和q的质数);
由d×11=1 mod 8,计算出d =3,
得到公开密钥:(n,e)=(15,11)
私有密钥:(n,d)=(15,3)
假定明文M为整数13。则密文
C=Me mod n=1311 mod 15 = (132)5*13 mod 15 =
(132 mod 15 ) 5 *13 mod 15=4 5 *13 mod 15=7
复原明文M为:
M = Cd mod n= 73 mod 15= 343 mod 15 = 13
大家可以看到对于可以分解成两个小素数的n,RSA加密就很容易被破解,所以RSA算法的安全性极大依赖我们所设置的私钥。
再给大家用字符串举个例子:
1、加密字串举例:若有明文public key encryptions
2、先将明文分块为两个一组(此处为简化计算考虑):
pu bl ic ke ye nc ry pt io ns
3、将明文数字化令a,b…,z 分别为00,01,…,25 得
1520 0111 0802 1004 2404
1302 1724 1519 0814 1318
4、利用加密可得密文
0095 1648 1410 1299 1365
1379 2333 2132 1751 1324
5、解密后又得到明文
加密过程:
C=Me mod n=152013 mod 2537
= (15202)6*1520 mod 2537
∵15202 =1730 mod 2537
∴C= (1730)6*1520 mod 2537
= (17302)3*1520 mod 2537
∵17302 =1777 mod 2537
∴C= (1777)3*1520 mod 2537
= (1777)2*1777*1520 mod 2537
∵17772 =1701 mod 2537
∴C=1701*(1777*1520) mod 2537
=1701*1672 mod 2537 =95(密文)
解密过程:
M = Cd mod n= 95937 mod 2537
= (952)468*95 mod 2537
= (1414)468*95 mod 2537
= (14142)234*95 mod 2537
= (240)234*95 mod 2537
………
= (625*25)*(341*788)*95 mod 2537
=230*2323 mod 2537
= 1520 mod 2537 =1520(明文)
优点:
是第一个能同时用于加密和数字签名的算法,也易于理解和操作,也是被研究得最广泛的公钥算法,二十年来经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
该算法的加密密钥和加密算法分开,使得密钥分配更为方便。特别符合计算机网络环境。
对于网上的大量用户,可以将加密密钥用电话簿的方式印出。如果某用户想与另一用户进行保密通信,只需从公钥簿上查出对方的加密密钥,用它对所传送的信息加密发出即可。
对方收到信息后,用仅为自己所知的解密密钥将信息解密,了解报文的内容。
缺点:
缺点:
(1)产生密钥很麻烦,难以做到一次一密。
(2)RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。目前人们已能分解140多位十进制位的大素数,这就要求使用更长的密钥,速度更慢。而且目前人们正在积极寻找攻击RSA的方法。
(3)速度太慢, RSA的分组长度太大。为了速度问题,目前人们广泛使用单、公钥密码结合使用的方法,优缺点互补:单钥密码加密速度快, 用它来加密较长的文件,然后用RSA来给文件密钥加密,极好的解决了单钥密码的密钥分发问题。
就介绍到这里了,作为一个新人,肯定有很多说不到位的地方欢迎大家来纠正我的错误,提供指导,谢谢各位的阅读。
RSA算法概述的更多相关文章
- 【转】基于RSA算法实现软件注册码原理初讨
1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式 ...
- 浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥
概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的.RSA就是取自他们三个人的名字. 算法基于一个数论:将两个大素数相乘很ea ...
- 安全体系(二)——RSA算法详解
本文主要讲述RSA算法使用的基本数学知识.秘钥的计算过程以及加密和解密的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 1.概述 ...
- 更多细节的理解RSA算法
一.概述 RSA算法是1977年由Ron Rivest.Adi Shamir 和 Leonard Adleman三人组在论文A Method for Obtaining Digital Signatu ...
- 非对称加密算法-RSA算法
一.概述 1.RSA是基于大数因子分解难题.目前各种主流计算机语言都支持RSA算法的实现 2.java6支持RSA算法 3.RSA算法可以用于数据加密和数字签名 4.RSA算法相对于DES/AES等对 ...
- [转]应用RSACryptoServiceProvider类轻松实现RSA算法
在我们现实当中经常会存在需要对某些数据进行加密保护 然后进行解密的操作,比方,我们需要对某些XML配置信息里面的某些数据进行加密,以防止任何人打开该XML配置信息都能正常的看到该配置信息里面的内容,从 ...
- RSA算法原理与加密解密 求私钥等价求求模反元素 等价于分解出2个质数 (r*X+1)%[(p-1)(q-1)]=0
Rsapaper.pdf http://people.csail.mit.edu/rivest/Rsapaper.pdf [概述Abstract 1.将字符串按照双方约定的规则转化为小于n的正整数m, ...
- adworld easy_RSA | RSA算法
题目描述: 解答出来了上一个题目的你现在可是春风得意,你们走向了下一个题目所处的地方 你一看这个题目傻眼了,这明明是一个数学题啊!!!可是你的数学并不好.扭头看向小鱼,小鱼哈哈一笑 ,让你在学校里面不 ...
- Java中使用RSA算法加密
Java中使用RSA算法加密 概述 RSA加密算法是一种非对称加密算法 RSA加密的方式 使用公钥加密的数据,利用私钥进行解密 使用私钥加密的数据,利用公钥进行解密 RSA是一对密钥.分别是公钥和私钥 ...
随机推荐
- 『现学现忘』Git基础 — 26、给Git命令设置别名
目录 1.什么是Git命令的别名 2.别名的全局配置 3.别名的局部配置 4.删除所有别名 5.小练习 1.什么是Git命令的别名 Git中命令很多,有些命令比较长,有些命令也不好记,也容易写错. 例 ...
- 使用Husky提升你的项目规范
使用 ESLint, Prettier, Husky, Lint-staged 提升你的项目规范 本文写于 2020 年 11 月 7 日 大家应该都知道 ESLint 与 prettier,他们的用 ...
- 有了 Promise 和 then,为什么还要使用 async?
有了 Promise 和 then,为什么还要使用 async? 本文写于 2020 年 5 月 13 日 最近代码写着写着,我突然意识到一个问题--我们既然已经有了 Promise 和 then,为 ...
- 【freertos】008-内存管理
前言 本章主要讲解内部存储空间(RAM)的管理. 详细分析heap5方案. 参考: 李柱明博客 https://freertos.blog.csdn.net/article/details/51606 ...
- python函数学习的总结
python函数 part1 函数的作用: 函数以功能(完成一件事)为导向 随调随用减少代码重复性 增强代码可读性 函数的结构: def 函数名(): 函数体 函数的返回值 return:在函数中遇到 ...
- Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景
在上周三下午时,客户.业务和测试人员同时反溃生产环境登录进入不了系统,我亲自测试时,第一次登录进去了,待退出后再登录时,复现了客户的问题,场景像是请求连接被拒绝了,分析后判断是spring boot的 ...
- Halodoc使用 Apache Hudi 构建 Lakehouse的关键经验
Halodoc 数据工程已经从传统的数据平台 1.0 发展到使用 LakeHouse 架构的现代数据平台 2.0 的改造.在我们之前的博客中,我们提到了我们如何在 Halodoc 实施 Lakehou ...
- GDKOI 2021 Day2 PJ 去世记
比赛时和昨天一样困,后面的大奆打代码的速度简直了 T1 用 2.4.6.8 来与 5 抵消掉末尾的 0 ,然后用周期问题的方法直接乘起来并取个位 #include<bits/stdc++.h&g ...
- 想知道Vue3与Vue2的区别?五千字教程助你快速上手Vue3!
从Vue3发布以来,我就一直对其非常感兴趣,就一直想着将其投入公司的生产中,但是开始考虑到很多不确定性就暂时对一些很小的功能进行一些尝试:慢慢的发现组合式Api的形式非常适合开发(个人感觉),尤其是V ...
- Linux安装MySQL,数据库工具连接Linux的MySQL
1.centOS中默认安装了MariaDB,需要先进行卸载 rpm -qa | grep -i mariadb rpm -e --nodeps 上面查出来的mariadb 2.下载MySQL仓库并安装 ...