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. position与float

    position:fixed/absolute和float的关系:元素设置position:absolute / fixed后,float属性是没有效果的.对于position: absolute元素 ...

  2. docker使用详解

    一.docker简介 docker 是一个开源的应用容器引擎,docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...

  3. 我用13行摆烂了你的oj4

    13行代码AC oj4是怎么回事呢?13行代码AC oj4相信大家都很熟悉,但是13行代码AC oj4是怎么回事呢,下面就让小编带大家一起了解吧.13行代码AC oj4,其实就是13行代码AC oj4 ...

  4. 2.0 vue2+tinymce实现图片上传与回显

    1.效果 2.配置 2.1 在init中添加图片上传函数 // 图片上传 images_upload_handler: (blobInfo, success, failure) => { // ...

  5. [2018-03-04] 利用 Settings Sync 插件同步 VS Code 设置

    VS Code 已原生支持设置同步,本文仅备份记录 [2018-03-04] 早就听说这个插件了,今天用了一下,确实挺方便的.通过把配置文件创建为 Gist 上来实现了 VS Code 设置的同步,下 ...

  6. 给IDEA道个歉,这不是它的BUG,而是反编译插件的BUG。

    你好呀,我是歪歪. 上周我不是发了<我怀疑这是IDEA的BUG,但是我翻遍全网没找到证据!>这篇文章吗. 主要描述了在 IDEA 里面反编译后的 class 文件中有这样的代码片段: 很明 ...

  7. vsftp 详解

    1.默认配置: 1>允许匿名用户和本地用户登陆.     anonymous_enable=YES     local_enable=YES2>匿名用户使用的登陆名为ftp或anonymo ...

  8. Android 实现开机自启APP

    原文地址:Android 实现开机自启APP - Stars-One的杂货小窝 公司有个项目,需要实现自启动的功能,本来想着是设置桌面启动器的方式去实现,但是设备是华为平板(EMUI系统),不允许设置 ...

  9. 儿童节,和 AI 一起通关 “超级马里奥兄弟”

    摘要:六一儿童节,快来训练一款自己的游戏 AI,用代码让马里奥从大反派酷霸王的魔掌里救回桃花公主. 本文分享自华为云社区<儿童节,和 AI 一起通关 "超级马里奥兄弟"> ...

  10. 分布式机器学习:PageRank算法的并行化实现(PySpark)

    1. PageRank的两种串行迭代求解算法 我们在博客<数值分析:幂迭代和PageRank算法(Numpy实现)>算法中提到过用幂法求解PageRank. 给定有向图 我们可以写出其马尔 ...