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
)=0;
他的倒数为1
, 并且有1
=1;
同余运算
有整数a,b,正整数m。 假如a除以m余b。我们称为a模m同余b,模数为m。并且记为)
,例如10除以3余1
我们称10模3同余1,记为)
。
我们分别讨论模数为合数和质数情况下,基于同余运算的负数和倒数。
1. 当模数为合数n
时
简单起见,我们讨论当n
为10的情况,10是两个质数乘积
当模数为10的时候,参与运算的都是小于10的数。因为大于10的数除模取余之后都会小于10,所以只需要考虑小于模的数。
那么在同余运算中
一个小于10的数a,他的负数x
是什么? 也就是说使得a
的负数。;
有)
。 当10
的时候 ,有如下表
| a |
|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
|---|---|---|---|---|---|---|---|---|---|---|
| x |
| 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
那么,a
的倒数)
当10
的时候我们会发现,对于有的数我们可以找到它的倒数,有的数却找不到
例如当3
,我们可以找到7,使得)
;
而当a=4的时候,我们有0
,36
,在模10的情况下,都不会等于1。
我们对于所有小于10的a
都找他的倒数1
,有下表
| a |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
|---|---|---|---|---|---|---|---|---|---|
| 1 |
| 1 | 不存在 | 7 | 不存在 | 不存在 | 不存在 | 3 | 不存在 | 9 |
有什么规律呢?
数学界已证明:当n
时,只有当)
个。如果n有更多的质因子,那么计算会更复杂点。
我们把所有小于n,并且能和n互质的数的总个数记为一个函数)
,这个函数叫做欧拉函数。例
即当q
,且4
同时这些数还有以下两个有趣的情况
-
这些数之间进行互乘的同余运算,结果还是这些数。
例如对于1:)
, )
对于3:)
, )
对于7:)
,)
对于9:)
,)
-
如果一些数在互相运算之后,得到的结果还是这些数中,我们称这些数在这个运算条件下具有封闭性。
-
对这些数进行求幂运算,并且再模10,结果如下表
| a |
|---|
| 1 | 3 | 7 | 9 | |
|---|---|---|---|---|
| 0 |
| 1 | 1 | 1 | 1 | |
| 1 |
| 1 | 3 | 7 | 9 | |
| 2 |
| 1 |
| 9 |
| 9 |
| 1 |
| 3 |
| 1 |
| 7 |
| 3 |
| 9 |
| 4 |
| 1 |
| 1 |
| 1 |
| 1 |
其中,
-
我们规定)
-
所有)
的结果都为1,即有4
-
)
-
对于3和7来说,他们的0
、4
时刚好又回到了1,如果大于4之后,又会开始循环
在模n的情况下一定能找到一个数g
,使得1
-
刚好把所有与n互质并且小于n的数各得到一遍。我们把满足这种条件的数称为 生成元。
2. 当模数为质数p
的时候
当模p
为质数的时候,我们假设7
时。
同样求小于 p
的数 )
有如下表
| a |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
|---|---|---|---|---|---|---|
| x |
| 6 | 5 | 4 | 3 | 2 | 1 |
而求a
的倒数时,因为p是质数,所有小于1
。
如下表
| a |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
|---|---|---|---|---|---|---|
| 1 |
| 1 | 4 | 5 | 2 | 3 | 6 |
它同样有模数为合数n
时的性质
- 这些数在同余运算规则下进行乘法运算,同样具有封闭性
- 任意的a
求幂依然满足1
- 的规则,且同样有生成元
3. 离散对数问题
前面我们得到了有这么一个结论:
在模n的情况下一定能找到一个数g
,使得1
刚好把所有与n互质并且小于n的数各得到一遍。我们把满足这种条件的数称为 生成元。
那么,在模n
的条件下,给定它的生成元a
的值。
由于生成元的特性,我们知道,在模n
的条件下,给定生成元a
。那么如何求a的值?
我们发现,这个问题没有任何规律。例如,当n=11,g=2时,有如下表
| g |
|---|
| 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| a |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 1 | |
| a |
| 0 | 1 | 8 | 2 | 4 | 9 | 7 | 3 | 6 | 5 | 10 |
在实数计算中,我们知道当a
时,n
值达到十进制两三百位时,即便是有大型计算机的情况下,所要花费的时间依然是个天文数字。
4.RSA原理
当q
,q
,这是一个世界性的极为困难的数学难题。RSA的基础就是基于的n的两个质数分解难题。
具体过程如下:
-
Alice选择两个大质数p
和s
。
我们知道,e
与n
-
)
-
接下来,Bob可以在非安全信道请求Alice获得公钥。Evl通过中间攻击,只能获得)
,以及密文)
-
,然后把D发送给Alice
-
Alice收到D之后,计算)
-
.
其中,在不安全信道中传输的是n
和s
来揭秘被加密的消息。
且,m不能是大于n的数,当m大于n时可以拆分之后分段加密。
举个例子吧
- 假设取两个质数11
, 120。
随意选取一个和7,
那么)
- .
- 公钥为)
,即)。
私钥为)。
要加密的原始数据为13
- 。(计算机中任何数据,最后传输或者保存都会转换成二进制的数据)
- 加密过程:Bob请求Alice,获得公钥,密文为D
, 117
- 。 Bob将D传输出去。
- Evl通过中间攻击,只能获得)
,以及密文D
- 解密过程:Alice获得D
,通过只有Alice才有的私钥进行解密。13
- ,获得了原始数据。
这里的11和13比较小,知道公钥为(7,143)之后,容易将143做因式分解求的11与13,从而可以算出1
。但是当1。从而不能从密文中获得原始数据。