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. RabbitMQ系列教程之三:发布/订阅(Publish/Subscribe)

    (本教程是使用Net客户端,也就是针对微软技术平台的)   在前一个教程中,我们创建了一个工作队列.工作队列背后的假设是每个任务会被交付给一个[工人].在这一部分我们将做一些完全不同的事情--我们将向 ...

  2. win7开启telnet客户端

  3. centos yum 没有可用软件包 nginx。

    新装的centos7中没有nginx的镜像源 因为nginx位于第三方的yum源里面,而不在centos官方yum源里面 解决方案: 安装epel: 去epel官网: http://fedorapro ...

  4. 详解 RAC 中各种IP和监听的意义

    一.SCAN 概念 SCAN(Single Client Access Name)是 Oracle从11g R2开始推出的,客户端可以通过 SCAN 特性负载均衡地连接到 RAC数据库 SCAN 最明 ...

  5. Linux 开机引导流程

    Linux 开机启动流程 BIOS(Basic Input Output System)是 PC 机启动时加载的第一个软件.其实,它是一组固化到计算机主板上一个芯片上的程序,它保存着计算机最重要的输入 ...

  6. Lamp单独安装(windows下)

    安装的软件清单:apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msimysql-5.1.28-rc-win32.zipphp-5.2.6-Win32.zipphpM ...

  7. Ext 创建workspace package

    Ext 创建workspace package Package ExtJs Project 1. 创建工作区间文件目录 md wpt 2. 进入目录 cd wpt 3. 创建 创建工作区间 sench ...

  8. GridView七十二绝技-大全(收藏版)(转至别人博客)

    快速预览:GridView无代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单DropDownList结合GridView和CheckBox结合鼠 ...

  9. Egret的项目结构

    这是我新建的一个Egret EUI项目 .wing文件夹是项目的配置文件 bin-debug 文件夹,项目编译和运行的debug目录 libs 文件夹,存放库文件,包括 Egret 核心库,其他扩展库 ...

  10. OpenCV 之 图像分割 (一)

    1  基于阈值 1.1  基本原理 灰度阈值化,是最简单也是速度最快的一种图像分割方法,广泛应用在硬件图像处理领域 (例如,基于 FPGA 的实时图像处理). 假设输入图像为 f,输出图像为 g,则经 ...