描述RSA的实现步骤介绍文章非常多,但说明并证明其原理,并进而讨论为什么这样设计的文章不多。本人才疏学浅,不敢说理解了R.S.A.三位泰斗的设计初衷,简单就自己的理解写一写,博大家一笑。

以下原创内容欢迎网友转载,但请注明出处: https://www.cnblogs.com/helesheng

一、用到的数论基础定理

R.S.A.三位一定是数学大神欧拉的粉丝,因为所有用到的基本原理和定理都是以欧拉命名的。

1、欧拉函数

小于m的书中,所有与m互质的数的个数定义为“欧拉函数”,写为:Φ(m)。若m的质因数分解为: (其中Pi为素数,ei为正整数),Φ(m) 的计算公式为:

2、欧拉定理

若gcd(a,m)=1(a和m互质),则有:

启示:

1)欧拉定理是“环”到“域”的重要过渡,只要把左边的乘方运算拆为两个乘方运算的乘积,拆成的两个部分就可以理解为“域”中的“元”及其乘法“逆元”,这样环上的模逆元就存在了,“环”就可以变成“域”了。但需要注意的是欧拉定理存在的条件是gcd(a,m)=1这个条件。为满足这个条件,密码学(cryptology)如果工作在有限域上,经常会进行选择m为素数,或者非常接近素数的情况;而a则之需要是小于m的任意数,作为明文或密文。但严格说,RSA不是工作在伽罗瓦域上的,因为RSA的模数n是两个素数p、q的乘积。n很接近一个素数,在证明RSA时,需要专门证明gcd(a,n)不为1的情况。

2)费马小定理是欧拉定理的“特例中的特例”,其描述为:当p是一个素数时, 或 。证明:若p为素数gcd(a,p)=1;而欧拉函数Φ(m)=p-1。代入欧拉定理,即可得到费马小定理。

二、RSA过程

Step 1.选择两个大素数p和q,当n为7680位(960字节)的数时,p和q约为3072位,在这样长度的奇数中寻找一个素数的可能性约为:

即约1065个奇数中有一个素数。

计算n=p*q。

Step 2.计算n的欧拉函数Φ(n)。

因为n的两个质因数已知为p和q,代入公式(1)有Φ(n)=(p-1)(q-1)。

Step 3.选择一个与Φ(n)互质的数e。

a)要求e与Φ(n)互质的原因是要保证e的模n乘法逆的存在。而这个乘法逆就是私钥d。

b)e将作为公钥,e取值不大,一般有3、17、65537几种选择。因为公钥e远小于私钥d,持有公钥的一方,在不论是进行加密(用RSA做密钥交换)还是进行解密(用RSA作数字签名)的速度都远远快于持有私钥d的一方

e之所以选择这几个数,除了是素数之外,还因为这几个数3(b101)、17(b1_0001)、65537(b1_0000_0001)的二进制表达中1的个数特别少,这样在计算xe时将会特别简便。

c)在整个RSA运算中,计算d是唯一一次使用Φ(n)作为模的地方,其他地方都是使用n作为模。

Step 4.使用公钥e和私钥d进行加解密

a)上面的公式中并没有指定x和y谁是明文谁是密文,也就是说两者都可以作为明文和密文。

b)RSA找到了一种“一一对应”的映射关系f:因为e较小,且公开,所以x映射到y很容易;y映射到x很困难,d较大,且不知道p、q时很难得到。这样的映射f被称为单向映射

三、RSA的证明

证明RSA过程,等价于证明:其中

n=p×q,n只有p、q两个质因数。

根据n和x的情况分两种情况讨论:

情况一:当x不含有p和q两个质因数时,n和x互质,gcd(n,x)=1。根据欧拉定理有:

根据d的定义,d和e对模Φ(n)互逆,有:

将上式写成另一种形式:

将其代入欲证明的(2),有:

情况二:当n和x不互质时,由于n=p×q,x可以写成:x=r×p或s×q(但不能写成x=r×p×q,因为这会使得x > n)。不失一般性,假设x=r×p。由于,根据欧拉定理和欧拉函数有:

根据d的定义,同样有(5)式,而(6)式则变为:

其中使用了欧拉函数计算公式

将(7)代入上式有:

至此,证明了不论在那种情况下都有 ,证毕!

四、RSA的设计思路

不自量力的揣测一下R.S.A.三位的设计思路,是利用欧拉定理构造了以n作为模的环上互逆的一对数x和y作为明文和密文,x和y各自是对方的e次方和d次方。如果知道n的质因数分解(p×q)的,可以通过欧拉函数方便的计算出e和d,否则只能靠对方告知其中之一,从而形成了单向映射,构成了所谓“非对称加密”。

另外,在e和d的复杂度的分割上,并不是相等的。设计者让知道质因数分解的一方的密钥d远远复杂于e,原因有二:其一,知道质因数分解的一方可以通过中国余数定理CRT加速计算;其二,不知道质因数分解的诸多“非对称”通信者,可以使用较低的算力执行加、解密。

较简单密钥e称为公钥,较复杂密钥d称为私钥。

RSA及其证明 [原创]的更多相关文章

  1. 信息安全-5:RSA算法详解(已编程实现)[原创]

    转发注明出处:http://www.cnblogs.com/0zcl/p/6120389.html 背景介绍 1976年以前,所有的加密方法都是同一种模式: (1)甲方选择某一种加密规则,对信息进行加 ...

  2. RSA,Miller-Rabin素数测试的源流及其证明

    一.RSA与公钥加密系统的起源与影响. 为了更好地突出公钥加密系统相对私钥加密系统的优势,让我们从这两个问题开始: 这个世界上如果没有公钥加密系统会怎么样呢?全用私钥加密系统会出现什么问题呢? 首先, ...

  3. 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key

    一)概述 什么是互联网支付? 当支付遇到互联网,一场革命自然不可避免.成为现实的是传统的现金支付已经“退居二线”,各种在线支付方式成为人们日常消费的主要支付方式.银行推出的网银以及第三方支付公司推出的 ...

  4. 实现 RSA 算法之基础公式证明(第一章)(老物)

    写这篇日志是拖了很久的事情,以前说要写些算法相关的文章给想学信息安全学(简称信安),密码学的同学提供些入门资料,毕竟这种知识教师上课也不会细讲太多(纯理论偏重),更不用说理解和应用了,说到RSA公钥( ...

  5. 证明RSA算法在明文和公私钥中N不互质情况下仍然成立

    关于RSA的基础过程介绍 下文中的 k 代表自然数常数,不同句子,公式中不一定代表同一个数 之前接触RSA,没有过多的思考证明过程,今天有感而发,推到了一遍 假设公钥 (e, N) , 私钥 (d, ...

  6. (原创)VS2017 C# 运行 Javasrcipt RSA 加密用户名登录 Java开发的服务器

    第一次写博客. 最近想做一个Web的自动登录,用户名和密码是RSA加密过的,后台是用的JAVA,我只会点C#,抓包什么都搞定了(使用的是Fiddler),不过由于C#和RSA的加密方式不同,我搞了N天 ...

  7. RSA加密和数字签名在Java中常见应用【原创】

    相关术语解释: RSA,参考: https://en.wikipedia.org/wiki/RSA_(cryptosystem) 非对称加密算法 ,参考:https://baike.baidu.com ...

  8. 【C#公共帮助类】给大家分享一些加密算法 (DES、HashCode、RSA、AES等)

    AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的 ...

  9. 学习RSA公开密钥算法

    图为 RSA公开密钥算法的发明人,从左到右Ron Rivest, Adi Shamir, Leonard Adleman. 照片摄于1978年 (和讯财经原创) RSA加密算法是最常用的非对称加密算法 ...

随机推荐

  1. linux50个常用命令

    1.存放用户账号的文件在哪里? /etc/passwd 2.如何删除一个非空的目录? rm -rf 目录名 3.查看当前的工作目录用什么命令? pwd 4.创建一个文件夹用什么命令? mkdir 5. ...

  2. springcloud搭建高可用注册中心的时候注册中心在unavailable-replicas中的问题

    在搭建springcloud eureka高可用注册中心时,发现另一个注册中心一直在unavailable-replicas不可用分片,原因为原来为单个注册中心的时候,禁止了注册中心自主注册为服务和检 ...

  3. 使用Cobertura做代码覆盖率测试

    经验总结:首先要把cobertura.jar包含ant的classpath路径中,其次要求它包含在测试用例的classpath中: 使用cobertura做代码覆盖率测试中出现的问题:覆盖率始终为0, ...

  4. MyBatis学习04(注解开发)

    7.使用注解开发 7.1 面向接口编程 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大家都遵守共同的标准 , 使得开发变得容易 , 规范性更好 在一个面 ...

  5. 【笔记】Jupyter notebook 高级 魔法命令

    魔法命令 %run 可以调用自己编写的代码 代码内容 使用结果 测试时间有%timeit,%time %timeit 测试时间(生成表达式的逻辑) 测试次数是可以不定义的,有系统自己决定 算法复杂度可 ...

  6. mybatis generator的generatorConfig.xml配置详解

    generatorConfig.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ge ...

  7. 一个命令搞定 Web 国际化

    背景 随着出海的业务越来越多,web 应用面临越来越多的国际化的工作.如何高效,高质量的完成 Web 前端国际化工作,已经是摆在 web 前端同学的急需解决的问题. i18n-helper-cli 是 ...

  8. SQL 练习15

    检索" 01 "课程分数小于 60,按分数降序排列的学生信息 SELECT Student.* ,SC.score from Student,SC WHERE sc.cid = ' ...

  9. C# prism 框架 MVVM框架 Prism系列之事件聚合器

    网址:https://www.cnblogs.com/ryzen/p/12610249.html 本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的使用事件聚合器实现模块间的通信 ...

  10. 基于mysql和Java Swing的简单课程设计

    摘要 现代化的酒店组织庞大.服务项目多.信息量大.要想提高效率.降低成本.提高服务质量和管理水平,进而促进经济效益,必须利用电脑网络技术处理宾馆酒店经营数据,实现酒店现代化的信息管理.本次课程设计运用 ...