RSA算法的概述(个人理解,欢迎纠正)

RSA是一种基于公钥密码体制的优秀加密算法,1978年由美国(MIT)的李维斯特(Rivest)、沙米尔(Shamir)、艾德曼(Adleman)提的。
RSA算法是一种分组密码体制算法,它的保密强度是建立在具有大素数因子的合数其因子分解是困难的(基于大数分解的难度)。
公钥和私钥是一对大素数的函数,从一个公钥和密文中恢复出明文的难度等价于分解两个大素数之积。
RSA得到了世界上的最广泛的应用,ISO在1992年颁布的国际标准X.509中,将RSA算法正式纳入国际标准。

在给大家介绍RSA算法前,先要给大家介绍一下非对称加密和对称加密的概念。

非对称加密:加密和解密需要不同的密钥。for example:小明有两个密钥,一把公钥是公开的,一把私钥是私密的,只有小明一个人知道。小红呢,她可以通过小明公开的公钥去加密这串明文,而小明则可以通过自己的私钥解开这串密文。

对称加密:加密和解密都是用同一个密钥的算法,称作对称加密。举个例子:小明用一种密钥加密一串明文,小红可以通过相同的密钥解密这串明文。

而我们今天要说的RSA算法正是一种非对称算法。那么掌握RSA算法需要有哪些数学基础呢?

这里给大家介绍一下

  1. 欧拉函数
  2. 欧拉定理
  3. 模反元素
  4. 欧几里得扩展算法。

欧拉函数:

定义:任意给定正整数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算法概述的更多相关文章

  1. 【转】基于RSA算法实现软件注册码原理初讨

    1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式 ...

  2. 浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥

    概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的.RSA就是取自他们三个人的名字. 算法基于一个数论:将两个大素数相乘很ea ...

  3. 安全体系(二)——RSA算法详解

    本文主要讲述RSA算法使用的基本数学知识.秘钥的计算过程以及加密和解密的过程. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(一)—— DES算法详解 1.概述 ...

  4. 更多细节的理解RSA算法

    一.概述 RSA算法是1977年由Ron Rivest.Adi Shamir 和 Leonard Adleman三人组在论文A Method for Obtaining Digital Signatu ...

  5. 非对称加密算法-RSA算法

    一.概述 1.RSA是基于大数因子分解难题.目前各种主流计算机语言都支持RSA算法的实现 2.java6支持RSA算法 3.RSA算法可以用于数据加密和数字签名 4.RSA算法相对于DES/AES等对 ...

  6. [转]应用RSACryptoServiceProvider类轻松实现RSA算法

    在我们现实当中经常会存在需要对某些数据进行加密保护 然后进行解密的操作,比方,我们需要对某些XML配置信息里面的某些数据进行加密,以防止任何人打开该XML配置信息都能正常的看到该配置信息里面的内容,从 ...

  7. RSA算法原理与加密解密 求私钥等价求求模反元素 等价于分解出2个质数 (r*X+1)%[(p-1)(q-1)]=0

    Rsapaper.pdf http://people.csail.mit.edu/rivest/Rsapaper.pdf [概述Abstract 1.将字符串按照双方约定的规则转化为小于n的正整数m, ...

  8. adworld easy_RSA | RSA算法

    题目描述: 解答出来了上一个题目的你现在可是春风得意,你们走向了下一个题目所处的地方 你一看这个题目傻眼了,这明明是一个数学题啊!!!可是你的数学并不好.扭头看向小鱼,小鱼哈哈一笑 ,让你在学校里面不 ...

  9. Java中使用RSA算法加密

    Java中使用RSA算法加密 概述 RSA加密算法是一种非对称加密算法 RSA加密的方式 使用公钥加密的数据,利用私钥进行解密 使用私钥加密的数据,利用公钥进行解密 RSA是一对密钥.分别是公钥和私钥 ...

随机推荐

  1. 基础路径规划算法(Dijikstra、A*、D*)总结

    引言 在一张固定地图上选择一条路径,当存在多条可选的路径之时,需要选择代价最小的那条路径.我们称这类问题为最短路径的选择问题.解决这个问题最经典的算法为Dijikstra算法,其通过贪心选择的步骤从源 ...

  2. JWT 访问令牌

    JWT 访问令牌 更为详细的介绍jwt 在学习jwt之前我们首先了解一下用户身份验证 1 单一服务器认证模式 一般过程如下: 用户向服务器发送用户名和密码. 验证服务器后,相关数据(如用户名,用户角色 ...

  3. 手把手带你自定义 Gradle 插件 —— Gradle 系列(2)

    请点赞加关注,你的支持对我非常重要,满足下我的虚荣心. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友 ...

  4. [源码解析] TensorFlow 分布式之 ClusterCoordinator

    [源码解析] TensorFlow 分布式之 ClusterCoordinator 目录 [源码解析] TensorFlow 分布式之 ClusterCoordinator 1. 思路 1.1 使用 ...

  5. RabbitMQ 环境安装

    每日一句 Wisdom is knowing what to do next, skill is knowing how to do it, and virtue is doing it. 智慧是知道 ...

  6. ElasticSearch7.3学习(二十八)----聚合实战之电视案例

    一.电视案例 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 字段 PUT /tvs PUT /tvs/_mapping { "properties": { &q ...

  7. 免申请直接用上 IDEA 新 UI,只需要这三步配置

    早上给大家介绍了IDEA官方宣布正在开发一套全新的UI,但目前是预览版需要申请才能体验. 随后马上就有网友分享了,不需要申请直接就能激活体验的方法. 本期视频:https://www.bilibili ...

  8. CF1588F Jumping Through the Array

    在讲正解之前,先播一个小故事: xay 复杂度错误过题.将操作按照时间分块,块内他令所有置换环都必须有至少一个"黑点". 可以通过没有修改 \(p\) 操作,同时 \(p_i=i\ ...

  9. 《Effective C++》阅读总结(四): 设计、声明与实现

    第四章: 设计与声明 18. 让接口更容易被正确使用,不易被误用 将你的class的public接口设计的符合class所扮演的角色,必要时不仅对传参类型限制,还对传参的值域进一步限制. 19. 设计 ...

  10. quasar + uni-app混合打包APP

    写几个关键点,作为备忘录. 和所有框架一样,现在本地run build quasar的cli是 quasar build 然后记住打包好以后的静态文件 目录 uni-app新建一个5+App的默认模板 ...