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是一对密钥.分别是公钥和私钥 ...
随机推荐
- GO 语言入门(一)
GO 语言入门(一) 本文写于 2020 年 1 月 18 日 Go 由 Google 工程师 Robert Griesemer,Rob Pike 和 Ken Thompson 设计的一门编程语言,第 ...
- 一键解决Win10 LTSC 2021官方镜像存在的问题
一键解决Win10 LTSC 2021官方镜像存在的问题 由于适用了win10 ltsc 2021之后,发现官方镜像存在一些致命的bug.但是本人又喜欢这个官方精简的系统,所以进行了一些修复.并将搜集 ...
- 提升站点SEO的7个建议
1.使用HTTPS 谷歌曾发公告表示,使用安全加密协议(HTTPS),是搜索引擎排名的一项参考因素. 所以,在域名相同情况下,HTTPS站点比HTTP站点,能获得更好的排名. 在网络渠道分发或合作上, ...
- lnav-日志查看器
lnav是一个基于控制台的高级lnav是一个基于控制台的高级日志文件查看器(浏览器). lnav支持日志高亮显示内容以及查看压缩的日志文件,而且它可以使用较小的内存实时查看较大的日志文件.日志文件查看 ...
- java 5种IO模型
每日一句 人的痛苦会把自己折磨到多深呢? 每日一句 You cannot swim for new horizons until you have courage to lose sight of t ...
- QC快速充电
QC快充 一.高通QC快充的介绍 二.识别充电类型的芯片介绍 三.QC充电曲线 四.如何在log中看QC充电类型 五.QC3识别错误 六.波形图 一.高通QC快充的介绍 高通QC快充技术,又称Quic ...
- SpringBoot Restful 接口实现
目录 SpringBoot 核心注解 SpringBoot Restful 接口实现 封装响应数据 SpringBoot 核心注解 SpringBoot 基础入门 注解 说明 Component 声明 ...
- Linux Cgroup v1(中文翻译)(2):CPUSETS
英文原文:https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cpusets.html Copyright (C) 2004 BU ...
- Python with语句和上下文管理器
open("FishC.txt","w")#此处需注意如果被打开的文件中,已有内容,那么用w的方式打开,则会导致原文件内容被截断,也就是相当于被清空了,然后重新 ...
- 31.Squid缓存代理服务器应用
Squid缓存代理服务器应用 Squid安装介绍 web缓存的工作机制 缓存网页对象,减少重复请求 squid 主要提供缓存加速.应用层过滤控制的功能. 工作机制 代替客户机问网站请求数据,从而可以隐 ...