RSA及其证明 [原创]
描述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及其证明 [原创]的更多相关文章
- 信息安全-5:RSA算法详解(已编程实现)[原创]
转发注明出处:http://www.cnblogs.com/0zcl/p/6120389.html 背景介绍 1976年以前,所有的加密方法都是同一种模式: (1)甲方选择某一种加密规则,对信息进行加 ...
- RSA,Miller-Rabin素数测试的源流及其证明
一.RSA与公钥加密系统的起源与影响. 为了更好地突出公钥加密系统相对私钥加密系统的优势,让我们从这两个问题开始: 这个世界上如果没有公钥加密系统会怎么样呢?全用私钥加密系统会出现什么问题呢? 首先, ...
- 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key
一)概述 什么是互联网支付? 当支付遇到互联网,一场革命自然不可避免.成为现实的是传统的现金支付已经“退居二线”,各种在线支付方式成为人们日常消费的主要支付方式.银行推出的网银以及第三方支付公司推出的 ...
- 实现 RSA 算法之基础公式证明(第一章)(老物)
写这篇日志是拖了很久的事情,以前说要写些算法相关的文章给想学信息安全学(简称信安),密码学的同学提供些入门资料,毕竟这种知识教师上课也不会细讲太多(纯理论偏重),更不用说理解和应用了,说到RSA公钥( ...
- 证明RSA算法在明文和公私钥中N不互质情况下仍然成立
关于RSA的基础过程介绍 下文中的 k 代表自然数常数,不同句子,公式中不一定代表同一个数 之前接触RSA,没有过多的思考证明过程,今天有感而发,推到了一遍 假设公钥 (e, N) , 私钥 (d, ...
- (原创)VS2017 C# 运行 Javasrcipt RSA 加密用户名登录 Java开发的服务器
第一次写博客. 最近想做一个Web的自动登录,用户名和密码是RSA加密过的,后台是用的JAVA,我只会点C#,抓包什么都搞定了(使用的是Fiddler),不过由于C#和RSA的加密方式不同,我搞了N天 ...
- RSA加密和数字签名在Java中常见应用【原创】
相关术语解释: RSA,参考: https://en.wikipedia.org/wiki/RSA_(cryptosystem) 非对称加密算法 ,参考:https://baike.baidu.com ...
- 【C#公共帮助类】给大家分享一些加密算法 (DES、HashCode、RSA、AES等)
AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的 ...
- 学习RSA公开密钥算法
图为 RSA公开密钥算法的发明人,从左到右Ron Rivest, Adi Shamir, Leonard Adleman. 照片摄于1978年 (和讯财经原创) RSA加密算法是最常用的非对称加密算法 ...
随机推荐
- 阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、腾讯offer
基本情况 2021届普通本科,Android开发岗. 此文主要是2020年秋招面试经验汇总,最终拿到了百度.腾讯的offer. 主要包括阿里三面,腾讯四面,百度三面,网易三面,美团一场面完. 阿里(由 ...
- 面试了一位33岁Android程序员,只会面向百度编程,居然要25k,脸呢?
最近逛论坛看到这样一个帖子: 面试了一位工作12年的程序员, 这位老哥有3年java开发经验,2年H5,7年Android开发经验,简历上写着精通Java,Android,熟悉H5开发.没有具体的技术 ...
- goproxy.io
goproxy.io 是全球最早的 Go modules 镜像代理服务之一, 采用 CDN 加速服务为开发者提供依赖下载, 该服务由一批热爱开源, 热爱 Go 语言的年轻人开发维护.从 Go 1.11 ...
- Java 在PPT中插入OLE对象
PPT幻灯片中支持将文档作为OLE对象插入到PPT幻灯片指定位置,在幻灯片中可直接点击该对象,打开或编辑等.下面以插入Excel工作簿文档为例,介绍如何来插入到幻灯片. 程序运行环境 编译环境:I ...
- JVM学习笔记-第七章-虚拟机类加载机制
JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...
- 页面模型 PageModel
Razor页面中的程序处理方法 OnGet 和 OnGetAsync是同样的处理程序,因此不能共存,否则会报错. 视图数据 ViewData 视图数据是从页面模型向内容页面传递数据的容器.视图数据是以 ...
- OSPF的Router-Id
一.实验拓扑 二.实验编址 三.实验步骤: 1.设置PC的IP等信息 2.启动设备(全选) 3.根据实验编址配置路由器端口IP(先不设置lookback端口) R1: R2: R3: R4: 看一下r ...
- Slope Trick:解决一类凸代价函数DP优化
[前言] 在补Codeforce的DP时遇到一个比较新颖的题,然后在知乎上刚好 hycc 桑也写了这道题的相关题解,这里是作为学习并引用博客的部分内容 这道题追根溯源发现2016年这个算法已经在API ...
- noip22
T1 考试的时候打的特殊性质分,然而暴力竟然写假了. 正解: 显然是个贪心,要最大化 \(a_{\min}\times b_{\min}\),肯定是要删掉若干个 \(a\) 最小,\(b\) 最小的矩 ...
- vim宏录制
宏录制 当你要重复某一个操作时,录制的宏可以很快地帮你完成任务. 准备文本 <!DOCTYPE html> <html lang="en"> <hea ...