数字签名中公钥和私钥是什么?对称加密与非对称加密,以及RSA的原理
http://baijiahao.baidu.com/s?id=1581684919791448393&wfr=spider&for=pc
https://blog.csdn.net/u014079662/article/details/61169607
一 , 概述
在现代密码学诞生以前,就已经有很多的加密方法了。例如,最古老的斯巴达加密棒,广泛应用于公元前7世纪的古希腊。16世纪意大利数学家卡尔达诺发明的栅格密码,基于单表代换的凯撒密码、猪圈密码,基于多表代换的维吉尼亚密码,二战中德军广泛使用的恩格玛加密机….但最终都找到了有效的破解算法。
现代密码学的诞生标志是1977年1月由美国国家标准局公布的数据加密标准(Data Encryption Standard,DES)。
在经过20多年之后,为适应现代的安全要求,2000年美国国家和标准技术协会筛选和评测出了被称为AES(Advanced Encryption
Standard)的加密算法作为新的加密标准。目前,AES已被广泛使用,且未发现致命缺陷。到目前为止,AES是一个安全的加密算法。
然而,在加密算法之外,面临一个问题,那就是:秘钥的分发。就是说,解密方如何获得加密方的秘钥呢? 从而出现了:对称加密和非对称加密。
二,对称加密和非对称加密
1. 对称加密
对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。
常见的对称加密算法:DES,AES,3DES等等。
2. 非对称加密
非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
常见的非对称加密算法:RSA,ECC
3. 区别
对称加密算法相比非对称加密算法来说,加解密的效率要高得多。但是缺陷在于对于秘钥的管理上,以及在非安全信道中通讯时,密钥交换的安全性不能保障。所以在实际的网络环境中,会将两者混合使用.
例如针对C/S模型,
1. 服务端计算出一对秘钥pub/pri。将私钥保密,将公钥公开。
2. 客户端请求服务端时,拿到服务端的公钥pub。
3. 客户端通过AES计算出一个对称加密的秘钥X。 然后使用pub将X进行加密。
4. 客户端将加密后的密文发送给服务端。服务端通过pri解密获得X。
5. 然后两边的通讯内容就通过对称密钥X以对称加密算法来加解密。
三,RSA原理
我们先来看这样一些基础知识,并且以下我们讨论全都是整数:
整数运算
在整数运算中 我们定义一个整数x
,那么他的负数为-x,并且有x+(-x
)=0;
他的倒数为x−1
, 并且有x×x−1
=1;
同余运算
有整数a,b,正整数m。 假如a除以m余b。我们称为a模m同余b,模数为m。并且记为a≡b(modm)
,例如10除以3余1
我们称10模3同余1,记为10≡1(mod3)
。
我们分别讨论模数为合数和质数情况下,基于同余运算的负数和倒数。
1. 当模数为合数n
时
简单起见,我们讨论当n
为10的情况,10是两个质数乘积
当模数为10的时候,参与运算的都是小于10的数。因为大于10的数除模取余之后都会小于10,所以只需要考虑小于模的数。
那么在同余运算中
一个小于10的数a,他的负数x
是什么? 也就是说使得(a+x)≡0(mod10) ; 那就是n−a,即x=n−a。这里的x就像是常规运算下的-a。常规运算下a+(−a)=0,我们说−a是a的负数,这里(a+x)≡0(mod10),我们说x是a
的负数。;
有a+(n−a)=a+(−a)+n=n≡0(modn)
。 当n=10
的时候 ,有如下表
a |
---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
x |
0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
那么,a
的倒数a−1是什么呢? 它要使得a×a−1在模数为n的情况下等于1,即a×a−1≡1(modn)
当n=10
的时候我们会发现,对于有的数我们可以找到它的倒数,有的数却找不到
例如当a=3
,我们可以找到7,使得3×7=21≡1(mod10)
;
而当a=4的时候,我们有4×0=0
,4×1=4,4×2=8,4×3=12,4×4=16,4×5=20,4×6=24,4×7=28,4×8=32,4×9=36
,在模10的情况下,都不会等于1。
我们对于所有小于10的a
都找他的倒数a−1
,有下表
a |
---|
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|
a−1 |
1 | 不存在 | 7 | 不存在 | 不存在 | 不存在 | 3 | 不存在 | 9 |
有什么规律呢?
数学界已证明:当a<n
时,只有当a和n互质才能找到a−1。 同时还有以下结论,当n=p×q ,且p和q都为质数时,所有小于n的数中,能找到倒数的个数为(p−1)×(q−1)
个。如果n有更多的质因子,那么计算会更复杂点。
我们把所有小于n,并且能和n互质的数的总个数记为一个函数φ(n)
,这个函数叫做欧拉函数。例
即当n=p×q
,且p和q都为质数时,有φ(n)=(p−1)×(q−1), 那么就有φ(10)=(2−1)×(5−1)=4
同时这些数还有以下两个有趣的情况
这些数之间进行互乘的同余运算,结果还是这些数。
例如对于1:1×1≡1(mod10)
, 1×3≡3(mod10), 1×7≡7(mod10), 1×9≡9(mod10)
对于3:3×1≡3(mod10)
, 3×3≡9(mod10), 3×7≡1(mod10), 3×9≡7(mod10)
对于7:7×1≡7(mod10)
,7×3≡1(mod10),7×7≡9(mod10),7×9≡3(mod10)
对于9:9×1≡9(mod10)
,9×3≡7(mod10),9×7≡3(mod10),9×9≡1(mod10)
如果一些数在互相运算之后,得到的结果还是这些数中,我们称这些数在这个运算条件下具有封闭性。
对这些数进行求幂运算,并且再模10,结果如下表
a |
---|
1 | 3 | 7 | 9 | |
---|---|---|---|---|
a0 |
1 | 1 | 1 | 1 | |
a1 |
1 | 3 | 7 | 9 | |
a2 |
1×1=1 |
3×3=9 |
7×7=9 |
9×9=1 |
a3 |
1×1×1=1 |
3×3×3=7 |
7×7×7=3 |
9×9×9=9 |
a4 |
1×1×1×1=1 |
3×3×3×3=1 |
7×7×7×7=1 |
1×1×1×1=1 |
其中,
我们规定a0≡1(mod10)
所有aφ(10)
的结果都为1,即有aφ(n)≡1(mod10)。(根据前面的介绍可知这里的φ(10)=(2−1)×(5−1)=4
)
对于3和7来说,他们的a0
、a1、a2、a3刚好把1,3,7,9各得到了一遍。到a4
时刚好又回到了1,如果大于4之后,又会开始循环
在模n的情况下一定能找到一个数g
,使得g0、g1、g2、……gφ(n)−1
刚好把所有与n互质并且小于n的数各得到一遍。我们把满足这种条件的数称为 生成元。
2. 当模数为质数p
的时候
当模p
为质数的时候,我们假设p=7
时。
同样求小于 p
的数 a 的负数 x 使得(a+x)≡0(mod10)
有如下表
a |
---|
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
x |
6 | 5 | 4 | 3 | 2 | 1 |
而求a
的倒数时,因为p是质数,所有小于p的数都和它互质。所以,所有小于p的数a都能找到它的倒数−a。它的欧拉函数φ(n)=p−1
。
如下表
a |
---|
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
a−1 |
1 | 4 | 5 | 2 | 3 | 6 |
它同样有模数为合数n
时的性质
- 这些数在同余运算规则下进行乘法运算,同样具有封闭性
- 任意的a
求幂依然满足aφ(n)=1
- 的规则,且同样有生成元
3. 离散对数问题
前面我们得到了有这么一个结论:
在模n的情况下一定能找到一个数g
,使得g0, g1 ,g2、……gφ(n)−1
刚好把所有与n互质并且小于n的数各得到一遍。我们把满足这种条件的数称为 生成元。
那么,在模n
的条件下,给定它的生成元g,以及一个小于n的正整数a。通过一个叫做同余幂的算法能够快速的算出ga的值,我们把算得的结果记为b。 即我们在模n的条件下,能够快速的算出b=ga
的值。
由于生成元的特性,我们知道,在模n
的条件下,给定生成元g,以及b的值,一定存在一个小于n的正整数a,使得b=ga
。那么如何求a的值?
我们发现,这个问题没有任何规律。例如,当n=11,g=2时,有如下表
g |
---|
2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | |
---|---|---|---|---|---|---|---|---|---|---|---|
b=ga |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 1 | |
a |
0 | 1 | 8 | 2 | 4 | 9 | 7 | 3 | 6 | 5 | 10 |
在实数计算中,我们知道当b=ga
时,a=logbg。然而这个计算在模n的条件下非常困难。这样一个问题被称为离散对数问题。在目前的技术条件下,这是一个极为困难的计算。当这个n
值达到十进制两三百位时,即便是有大型计算机的情况下,所要花费的时间依然是个天文数字。
4.RSA原理
当n=p×q
,p与q是两个大质数。只知道n的值,想要计算p和q
,这是一个世界性的极为困难的数学难题。RSA的基础就是基于的n的两个质数分解难题。
具体过程如下:
Alice选择两个大质数p
和q,求得n=p×q。计算φ(n)=(p−1)×(q−1),接下来,Alice选择一个与φ(n)互质的数e,并计算e−1在模为φ(n)下的值,将计算出的值记为s
。
我们知道,e
与φ(n)互质,所以一定存在e−1, 这一步,service 就算出了公钥和私钥,其中,公钥为(e,n),私钥为(s,n
)
接下来,Bob可以在非安全信道请求Alice获得公钥。Evl通过中间攻击,只能获得(e,n)
,以及密文D。假定Bob需要发送的内容为m,计算D=me(modn)
,然后把D发送给Alice
Alice收到D之后,计算me(e−1)(modn)=me×e−1(modn)≡m(modn)
.
其中,在不安全信道中传输的是n
和e。然而,p和q只有Alice才知道,即便Eval获得了n,基于质数分解难题,他无法算出p和q,也就无法算出私钥s
来揭秘被加密的消息。
且,m不能是大于n的数,当m大于n时可以拆分之后分段加密。
举个例子吧
- 假设取两个质数p=11
, q=13,那么n=143.
φ(n)=(p−1)×(q−1)=120。
随意选取一个和φ(n)互质的数e,假定这个数字为7,即e=7,
那么e−1=63,使得e×e−1再模φ(n)等于1,即e×e−1≡1(modφ(n)),即7×63=143≡1(mod120)
- .
- 公钥为(e,n)
,即(7,143)。
私钥为(s,n), 即(63,143)。
要加密的原始数据为m,假设m=13
- 。(计算机中任何数据,最后传输或者保存都会转换成二进制的数据)
- 加密过程:Bob请求Alice,获得公钥,密文为D
, D=137(mod143)=117
- 。 Bob将D传输出去。
- Evl通过中间攻击,只能获得(e,n)
,以及密文D
- 解密过程:Alice获得D
,通过只有Alice才有的私钥进行解密。11763(mod143)=13
- ,获得了原始数据。
这里的11和13比较小,知道公钥为(7,143)之后,容易将143做因式分解求的11与13,从而可以算出e−1
。但是当p和q是两个非常大的的质数的时候,就很难将其分解出来。 这样,就无法算出e−1。从而不能从密文中获得原始数据。
数字签名中公钥和私钥是什么?对称加密与非对称加密,以及RSA的原理的更多相关文章
- 大话https演化过程(对称加密、非对称加密、公钥、私钥、数字签名、数字证书)
大话https演化过程(包括概念:对称加密.非对称加密.公钥.私钥.数字签名.数字证书.https访问全过程) 在网络上发送数据是非常不安全的,非常容易被劫持或是被篡改,所以每次定向发送数据你都可 ...
- 探究公钥、私钥、对称加密、非对称加密、hash加密、数字签名、数字证书、CA认证、https它们究竟是什么,它们分别解决了通信过程的哪些问题。
一.准备 1. 角色:小白.美美.小黑. 2. 剧情:小白和美美在谈恋爱:小黑对美美求而不得.心生怨念,所以从中作梗. 3. 需求:小白要与美美需通过网络进行通信,联络感情,所以必须保证通信的安全性. ...
- 几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、HTTPS加密方式
# 原创,转载请留言联系 为什么会出现这么多加密啊,公钥私钥啊,签名啊这些东西呢?说到底还是保证双方通信的安全性与完整性.例如小明发一封表白邮件给小红,他总不希望给别人看见吧.而各种各样的技术就是为了 ...
- https原理及其中所包含的对称加密、非对称加密、数字证书、数字签名
声明:本文章已授权公众号Hollis转载,如需转载请标明转载自https://www.cnblogs.com/wutianqi/p/10654245.html(安静的boy) 一.为什么要使用http ...
- Java安全之对称加密、非对称加密、数字签名
原文地址: http://blog.csdn.net/furongkang/article/details/6882039 Java中加密分为两种方式一个是对称加密,另一个是非对称加密.对称加密是因为 ...
- 【上】安全HTTPS-全面具体解释对称加密,非对称加密,数字签名,数字证书和HTTPS
一,对称加密 所谓对称加密.就是它们在编码时使用的密钥e和解码时一样d(e=d),我们就将其统称为密钥k. 对称加解密的步骤例如以下: 发送端和接收端首先要共享同样的密钥k(即通信前两方都须要知道相应 ...
- 对称加密,非对称加密,数字签名,https
对称加密和非对称加密 对称加密 概念:加密秘钥和解密秘钥使用相同的秘钥(即加密和解密都必须使用同一个秘钥) 特点:一对一的双向保密通信(每一方既可用该秘钥加密,也可用该秘钥解密,非对称加密是多对一的单 ...
- 理解SSL、HTTPS原理中的对称加密与非对称加密
1.对称性加密 双方使用的同一个密钥,既可以加密又可以解密,这种加密方法称为对称加密,也称为单密钥加密. 简单来说就是:加密与解密都是同一个秘钥. 优点:通常在消息发送方需要加密大量数据时使用,算 ...
- android 对称加密,非对称加密 android 常见的加密
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha android 常见的加密 ======== 不可逆加密:md5,sha1 可逆的加密中 ...
随机推荐
- 搜集的一些酷炫的金属色 ,RGB值 和大家分享一下
开发iOS程序过程中会使用到RGB,要注意每个RGB值都要除以 255.0 ,注意: ' .0 ' 不能省!! 一下是本人搜集的一些酷炫金属色的RGB值: 黄金 242,192,86 石墨 87, ...
- 支付宝 报错 rsa_private read error : private key is NULL解决方法
原因: 真机调试IOS支付宝功能GDB出现 rsa_private read error : private key is NULL提示 调试iOS 支付宝SDK的时候,执行demo.把 Partn ...
- C语言中FILE是结构体,文件类型的指针
c语言文件类型指针 我们在定义文件类型指针变量后,称作该指针指向该文件,但本质上,它不是指向一个存储文件信息的结构型变量么?那么我们在用各个函数对所谓的“文件指针”进行操作时,本质上是不是函数通过获取 ...
- Oracle收购Apiary来加强其API集成云
Oracle宣布计划于1月19日收购Apiary,一家专注于API设计和协作的API管理公司.Apiary最为人所知的是API flow,其API管理平台. Oracle并没有宣布计划 ...
- brew 中的时间格式转换
char * pACNowStr = NULL; JulianType jtNow; ISHELL_GetJulianDate(pIShell, , &jtNow); pACNowStr = ...
- Maven配置默认使用的JDK版本
问题: 创建maven项目的时候,jdk版本是1.7版本,而自己安装的是1.8版本,从而导致无法使用lambda等Java8新特性. 每次右键项目名-maven->update project ...
- ASP------<iframe>标签如何去掉滚动条
代码: <iframe src="../Home/Thanks" width="100%" height="500" scrollin ...
- Java精选笔记_面向对象(构造方法、this关键字、static关键字、内部类)
构造方法constructor构造器 构造方法的定义 [修饰符] 类名 (形式参数列表){ //语句 } 构造器用于构造该类的实例.作用:用来初始化对象!一般由系统在创建对象(即类的 ...
- canvas一:基本认识
最近弄数据库弄得头大,想着没事整理一下画布canvas吧,毕竟canvas用途广泛,是html游戏开发必不可少的一环,也是h5新特性中的重中之重 首先canvas是一个html标签,可以给他设置一些c ...
- Sencha Cmd创建Ext JS示例项目
Sencha提供了免费的Cmd工具,可以用来创建Ext JS项目并提供了一些便利的功能. Sencha也在官方文档中提供了一个示例来演示如何创建一个Sample Login App. 本文就介绍一下这 ...