RSA是最常用的非对称加密算法。

  所谓非对称加密,就是说有两个密钥,一个密钥加密只可以用另外一个密钥解密,一般一个作为公钥,公开给所有人用来加密用,而另一个用来解密其他拥有公钥的加密结果,叫做私钥。另外,拥有私钥者可以用私钥加密信息,公钥可以解密获得加密内容,从而验证私钥拥有者的身份,这是一种特殊的加密,叫签名。

  RSA涉及到5个整数,关系如下:

  p和q都是质数;

  N=p*q;

  找一个1<e1<(p-1)(q-1),使得e1与(p-1)(q-1)互质;(互质的意思是两个数的最小公约数为1)

  再找一个1<e2<(p-1)(q-1),使得e1*e2 % (p-1)(q-1) = 1;(%在这里的意思除法取余数,我不采用数学的mod符号 )

  (N,e1)数对和(N,e2)数对是我们所需要的两个密钥,至于p/q,一旦生成密钥就应该及时销毁,因为它除了可以让人窃取了之后直接破解之外,没有任何其他的作用。

  对于任何满足1<A<N的整数A,使用(N,e1)加密就是

  B=Ae1%N

  对B解密,就是

  A=Be2%N

  实际上,整数a和b互质有两个等价定义:

  (1)a和b的最大公约数为1;

  (2)存在整数c,d,使得ac+bd=1

  两个定义的等价性证明中直接包含找e2的算法,放以后再讲。

  对于所有小于N的正整数,建立一种二元运算,计作a#b,

  定义a#b = a*b%N,称为模乘。

  先看所有小于N且与N互质的正整数下的模乘,看看这些整数在N模乘下成一种什么样的代数系统。

  因为a,b与N互质,所以a*b与N互质,所以a*b%N也与N互质,所以运算满足封闭性,

  又易证,a#b#c = a#(b#c) = a*b*c%N ,也就是满足结合律,

  从而,所有小于N并与N互质的数在#二元运算下成一半群,而且是有限半群,

  所有的有限半群是群,所以所有小于N并与N互质的数在#二元运算下成一个群。

  因为N=p*q,p和q都是质数,所有小于N并与N不互质的数都是p或者q的倍数,p的倍数小于N的一共q-1个,q的倍数小于N的一共p-1个

  所以这个群的阶(元素的个数)就是p*q-1-(q-1)-(p-1) = p*q-p-q+1=(p-1)(q-1),其e元为1。

  

  再看看小于N且与N不互质的正整数上的模乘,分两类,一类是有因数p,一类有因数q。

  先看所有有因数p的模乘,也就是p,2p...(q-1)p下的模乘,

  显然,其中任何两个数的乘积都有因数p2,再除以pq的余数也依然有因数q,所以依然在p.....(q-1)p之中,

  所以模乘满足封闭性,同样,模乘也满足结合律,

  从而是有限半群,从而是群,该群的阶为q-1,其e元记作ep

  同理可得,有因数q的所有小于N的正整数在模乘下也是一个群,阶为p-1,其e元记作eq

  

  我们再定义一符号,a##n为n个a的模乘,

  上面加密,B=Ae1%N,也就是B=A##e1,

  那么Be2%N也就是(A##e1)##e2 = A##(e1*e2),

  根据抽象代数知识,有限群的任何一个元素的周期是阶的因数,

  因为e1*e2除以(p-1)(q-1)等于1,则存在一个正整数k,使得e1*e2 = k(p-1)(q-1)+1,则

  如果A与N互质,与N互质的数的模乘群的阶为(p-1)(q-1),

  A##((p-1)(q-1)) = 1

  所以A##(e1*e2) = A##(k(p-1)(q-1)+1)

          =  A # (A##((p-1)(q-1)) ## k

          = A # (1##k)

          = A#1

          = A,

  如果A与N有公约数p,则

  该群的阶为q-1,

  所以A##(q-1)=ep

  所以A##(e1*e2) = A##(k(p-1)(q-1)+1)

          =  A # (A##(q-1) ## (k(p-1))

          = A # (ep##(k(p-1))

          = A#ep

          = A,

  同理,如果A与N有公约数q,

  A##(e1*e2) = A,

  所以

  Be2%N = A##(e1*e2)

      = A,

  这就是RSA加密解密之所以可以成立的原理,e1/e2可以互换,等式上依然成立,也就是说从数学原理上公钥私钥可以互换,

  但一般公钥的指数很短,这样破解就会变的很容易,在这种意义上,公钥私钥是不可以互换的。

RSA简介(一)——数论原理的更多相关文章

  1. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理

    Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...

  2. RSA算法原理——(2)RSA简介及基础数论知识

    上期为大家介绍了目前常见加密算法,相信阅读过的同学们对目前的加密算法也算是有了一个大概的了解.如果你对这些解密算法概念及特点还不是很清晰的话,昌昌非常推荐大家可以看看HTTPS的加密通信原理,因为HT ...

  3. 加解密 3DES AES RSA 简介 示例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. Neo4j图数据库简介和底层原理

    现实中很多数据都是用图来表达的,比如社交网络中人与人的关系.地图数据.或是基因信息等等.RDBMS并不适合表达这类数据,而且由于海量数据的存在,让其显得捉襟见肘.NoSQL数据库的兴起,很好地解决了海 ...

  5. 1.JSP 简介及工作原理

    1.JSP 简介 JSP(Java Server Pages)是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动态网页技术标准.JSP技术有点类似ASP技术,它是在传统的网页H ...

  6. RSA简介(四)——求逆算法

    此处所谓求逆运算,是指在模乘群里求逆. 第一节里提到互质的两个定义: (1)p,q两整数互质指p,q的最大公约数为1. (2)p.q两整数互质指存在整数a,b,使得ap+bq=1. 只要明白了欧几里得 ...

  7. Spring Cloud Config - RSA简介以及使用RSA加密配置文件

    简介 RSA非对称加密有着非常强大的安全性,HTTPS的SSL加密就是使用这种方法进行HTTPS请求加密传输的.因为RSA算法会涉及Private Key和Public Key分别用来加密和解密,所以 ...

  8. RSA简介

    RSA概述 首先看这个加密算法的命名.很有意思,它其实是三个人的名字.早在1977年由麻省理工学院的三位数学家Rivest.Shamir 和 Adleman一起提出了这个加密算法,并且用他们三个人姓氏 ...

  9. LoadRunner系统架构简介与运行原理

    1.LoadRunner系统架构简介 LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP ...

随机推荐

  1. 基于Spring的最简单的定时任务实现与配置(一)

    朋友的项目中有点问题.他那边是Spring架构的,有一个比较简单的需要定时的任务执行.在了解了他的需求之后,于是提出了比较简单的Spring+quartz的实现方式. 注意本文只是讨论,在已搭建完毕的 ...

  2. 单机部署 kubernets 方法汇总

    #minikube : 可以方便的在本机用虚拟机创建一个开箱即用的Kubernetes集群 #kubeadm : 可以自动化的将多台Ubuntu或者CentOS主机组建成集群 #nanokube,ki ...

  3. nvarchar 和varchar区别

    有时候设计字段的时候,碰到nvarchar和varchar时候,是有点犹豫.所以今天就来探个究竟把. (一)  varchar是非Unicode可变长度类型,nvarchar是Unicode编码可变长 ...

  4. GC机制总结

    一.为什么需要GC 应用程序对资源操作,通常简单分为以下几个步骤: 1.为对应的资源分配内存 2.初始化内存 3.使用资源 4.清理资源 5.释放内存 应用程序对资源(内存使用)管理的方式,常见的一般 ...

  5. JAVA基础——变量和常量

    JAVA的变量和常量知识总结 一.认识java标识符 标识符就是用于给 Java 程序中变量.类.方法等命名的符号. 使用标识符时,需要遵守几条规则: 1.  标识符可以由字母.数字.下划线(_).美 ...

  6. 关于 静态页面布局 中的一些BUG

    作为一枚初级程序猿,难免在制作静态页面时会遇到一些BUG,在此,我从网上找了一些资料并且结合自己的项目开发经验,总结了一些在静态页面布局时可能会遇到的问题,希望能对初级程序猿有一定的帮助(资料请参考: ...

  7. H5编辑器核心算法和思想-遁地龙卷风

    代码和特性在chrome49下测试有效. 文本渲染的本质是对文本节点的渲染,通过浏览器内置的对象Range可以获得选择的起始点.与终止点   var range = getRangeObject(); ...

  8. View学习(一)-DecorView,measureSpec与LayoutParams

    这段时间在学习android中view的工作原理与自定义View的相关内容,所以未来这这几篇博客都总结一下相关的知识吧. 首先我们要了解和熟悉两个概念,DecorView 与 MeasureSpec. ...

  9. orcle 索引的使用

    2.4.3.1. 索引的概念 数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速查找所需信息, 无须阅读整本书.在数据库中,索引使数据库程序无须对整个表进行扫描, 就可以在其中找到所需数据 ...

  10. voa 2015 / 4 / 19

      potentially – adv. capable of becoming real, a possibility tackle – v. to deal with a difficult pr ...