RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。
   RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。
  RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。
  RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:

  可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到:

一、 什么是“素数”?

素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。

二、什么是“互质数”(或“互素数”)?

小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。
判别方法主要有以下几种(不限于此):
(1)两个质数一定是互质数。例如,2与7、13与19。
(2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与 26。
(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
(4)相邻的两个自然数是互质数。如 15与 16。
(5)相邻的两个奇数是互质数。如 49与 51。
(6)大数是质数的两个数是互质数。如97与88。
(7)小数是质数,大数不是小数的倍数的两个数是互质数。如 7和 16。
(8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。

三、什么是模指数运算?

指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。
  现在开始正式讲解RSA加密算法。
算法描述:
(1)选择一对不同的、足够大的素数p,q。
(2)计算n=pq。
(3)计算f(n)=(p-1)(q-1),同时对p, q严加保密,不让任何人知道。
(4)找一个与f(n)互质的数e,且1<e<f(n)。
(5)计算d,使得d·e≡1 mod f(n)。
这里要解释一下,≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,也就是两边模运算结果相同。显而易见,不管f(n)取什么值,符号右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。这就需要计算出d的值,让这个同余等式能够成立。
(6)公钥KU=(e,n),私钥KR=(d,n)。
(7)加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:C≡M^e mod(n)。
(8)解密过程为:M≡C^dmod (n) 。

实例描述:

在这篇科普小文章里,不可能对RSA算法的正确性作严格的数学证明,但我们可以通过一个简单的例子来理解RSA的工作原理。为了便于计算。在以下实例中只选取小数值的素数p,q,以及e,假设用户A需要将明文“key”通过RSA加密后传递给用户B,过程如下:

(1)设计公私密钥(e,n)和(d,n)。

令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3与20互质)则e×d≡1 mod f(n),即3×d≡1 mod 20。
d怎样取值呢?可以用试算的办法来寻找。试算结果见下表:

通过试算我们找到,当d=7时,e×d≡1 mod f(n)同余等式成立。因此,可令d=7。从而我们可以设计出一对公私密钥,加密密钥(公钥)为:KU =(e,n)=(3,33),解密密钥(私钥)为:KR =(d,n)=(7,33)。

(2)英文数字化。

将明文信息数字化,并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列数值,即:

则得到分组后的key的明文信息为:11,05,25。

(3)明文加密

用户加密密钥(3,33) 将数字化明文分组信息加密成密文。由C≡Me(mod n)得:
C1(密文)≡M1(明文)^e (mod n) == 11≡11^3 mod 33 ;
C2(密文)≡M2(明文)^e (mod n) == 26≡05^3 mod 33;
C3(密文)≡M3(明文)^e (mod n) == 16≡25^3 mod 33;
所以密文为11.26.16

(4)密文解密

用户B收到密文,若将其解密,只需要计算,即:
M1(明文)≡C1(密文)^d (mod n) == 11≡11^7 mod 33;
M2(明文)≡C2(密文)^d (mod n) == 05≡26^7 mod 33;
M3(明文)≡C3(密文)^d (mod n) == 25≡16^7 mod 33;
转成明文11.05.25

根据上面的编码表将其转换为英文,我们又得到了恢复后的原文“key”。
   你看,它的原理就可以这么简单地解释!
   当然,实际运用要比这复杂得多,由于RSA算法的公钥私钥的长度(模长度)要到1024位甚至2048位才能保证安全,因此,p、q、e的选取、公钥私钥的生成,加密解密模指数运算都有一定的计算程序,需要仰仗计算机高速完成。

最后简单谈谈RSA的安全性

当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。比如当pq大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。因此,RSA从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
  然而,虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何。
  此外,RSA的缺点还有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。因此,使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法。

RSA算法原理简介,非对称加密,公开密钥算法(易懂篇)相关推荐

  1. java的rsa作用_java 中RSA的方式实现非对称加密的实例

    java 中rsa的方式实现非对称加密的实例 rsa通俗理解: 你只要去想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密:同理,既然是签名,那肯 ...

  2. ML之LSOLS:LSOLS算法的简介、论文、算法的改进(最佳子集选择OFSS法、前向逐步回归FSR法)、代码实现等详细攻略

    ML之LS&OLS:LS&OLS算法的简介.论文.算法的改进(最佳子集选择OFSS法.前向逐步回归FSR法).代码实现等详细攻略 目录 LS&OLS算法的简介 LS&O ...

  3. ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)(三)

    本文为:ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)第三篇 深度优先算法(DFS)和广度优先算法(BFS):DFS 和 BFS 在 ES 中的应用(一) 深度优先算法(DF ...

  4. ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)(一)

    本文为 ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)第一篇 深度优先算法(DFS)和广度优先算法(BFS):DFS 和 BFS 在 ES 中的应用(一) 深度优先算法(DF ...

  5. 人工神经网络的算法原理,最简单的神经网络算法

    神经网络算法原理 一共有四种算法及原理,如下所示:1.自适应谐振理论(ART)网络自适应谐振理论(ART)网络具有不同的方案.一个ART-1网络含有两层一个输入层和一个输出层. 这两层完全互连,该连接 ...

  6. RSA非对称加密核心算法

    1.使用工具生成私有和公有秘钥 私有秘钥: -----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAK ...

  7. RSA加密原理:非对称加密鼻祖

    加密算法 加密算法,RSA是绕不开的话题,因为RSA算法是目前最流行的公开密钥算法,既能用于加密,也能用户数字签名.不仅在加密货币领域使用,在传统互联网领域的应用也很广泛.从被提出到现在20多年,经历 ...

  8. 非对称加密 ECC算法

    ECC 算法 椭圆曲线密码学(Elliptic Curve Cryptography,缩写:ECC)是一种基于椭圆曲线数学的公开密钥加密算法. ECC的主要优势是它相比RSA加密算法使用较小的密钥长度 ...

  9. 非对称加密 DSA算法

    原理 数字签名算法(DSA - Digital Signature Algorithm)是用于数字签名的算法,基于模算数和离散对数的复杂度.DSA是Schnorr和ElGamal签名方案的变体. DS ...

最新文章

  1. oracle数据库多表嵌套,sql – 在oracle中更新多个嵌套表中的多个记录
  2. 『OpenCV3』滤波器实现及使用滤波器降噪
  3. JSP-05- JSP总结
  4. html如何实现字体逐个输入,HTML – 如何将字体真棒图标插入文本输入?
  5. i9可以装服务器系统吗,i9服务器
  6. python打开浏览器全屏_python 设置网页全屏显示
  7. 工具的使用——vs2013
  8. a small test by windows live writer 2011
  9. 秒懂!何凯明的深度残差网络PPT是这样的|ICML2016 tutorial
  10. 来自雨林木风的Linux发行版: Ylmf Linux
  11. Halcon算子threshold、dyn_threshold、binary_threshold、auto_threshold、fast_threshold、var_threshold
  12. 图像的代数运算与逻辑运算——Matlab实现
  13. 总结一下Android中主题(Theme)的正确玩法
  14. 计算机启动过程中按DEL,电脑开机按del之后如何u盘装系统教程
  15. 携程Java后台开发面经
  16. 【操作说明】4G网络摄像机国标GB28181协议视频平台EasyGBS如何配置告警白名单?
  17. try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
  18. 方舟服务器怎么请求芯片,方舟指令哔哩芯片这么获得?哔哩芯片获得方法详解分享...
  19. html,css维护优化,网站CSS代码优化的7个原则
  20. 进阶39 奇妙的数字

热门文章

  1. 中科院单细胞分析算法开发博士带你做单细胞转录组分析
  2. 生信宝典之傻瓜式(五) 文献挖掘查找指定基因调控网络
  3. TypeError: __init__() got an unexpected keyword argument ‘任意数‘的原因及解决办法
  4. 水晶报表设置二维码_随时随地数据分析?老板喜欢的移动端报表,我用这七步做出来了...
  5. 分区界限必须调整为高于最后一个分区界限_不花一分钱,为SSD硬盘腾空间
  6. C语言 | 内存对齐02 - 为什么会有内存对齐?它解决了什么问题
  7. 浏览器怎么清理缓存_Mac系统浏览器缓存清理工具
  8. 【ES8(2017)】async / await
  9. C++设计模式-状态模式
  10. QML笔记-Particle的基本使用(粒子系统的基本使用)