对称加密与非对称加密,以及RSA的原理

一 , 概述

在现代密码学诞生以前,就已经有很多的加密方法了。例如,最古老的斯巴达加密棒,广泛应用于公元前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” role=”presentation”>xx)=0;

他的倒数为x−1” role=”presentation”>x1x−1 =1;

同余运算

有整数a,b,正整数m。 假如a除以m余b。我们称为a模m同余b,模数为m。并且记为a≡b(modm)” role=”presentation”>ab(modm)a≡b(modm) ,例如10除以3余1

我们称10模3同余1,记为10≡1(mod3)” role=”presentation”>101(mod3)10≡1(mod3)

我们分别讨论模数为合数和质数情况下,基于同余运算的负数和倒数。

1. 当模数为合数n” role=”presentation”>nn

简单起见,我们讨论当n” role=”presentation”>nn为10的情况,10是两个质数乘积

当模数为10的时候,参与运算的都是小于10的数。因为大于10的数除模取余之后都会小于10,所以只需要考虑小于模的数。

那么在同余运算中

一个小于10的数a,他的负数x” role=”presentation”>xx的负数。;

a+(n−a)=a+(−a)+n=n≡0(modn)” role=”presentation”>a+(na)=a+(a)+n=n0(modn)a+(n−a)=a+(−a)+n=n≡0(modn)的时候 ,有如下表

a” role=”presentation”>aa 0 1 2 3 4 5 6 7 8 9
x” role=”presentation”>xx 0 9 8 7 6 5 4 3 2 1

那么,a” role=”presentation”>aa

n=10” role=”presentation”>n=10n=10的时候我们会发现,对于有的数我们可以找到它的倒数,有的数却找不到

例如当a=3” role=”presentation”>a=3a=3 ;

而当a=4的时候,我们有4×0=0” role=”presentation”>4×0=04×0=0,在模10的情况下,都不会等于1。

我们对于所有小于10的a” role=”presentation”>aa,有下表

a” role=”presentation”>aa 1 2 3 4 5 6 7 8 9
a−1” role=”presentation”>a1a−1 1 不存在 7 不存在 不存在 不存在 3 不存在 9

有什么规律呢?

数学界已证明:当a&lt;n” role=”presentation”>a<na<n个。如果n有更多的质因子,那么计算会更复杂点。

我们把所有小于n,并且能和n互质的数的总个数记为一个函数&#x03C6;(n)” role=”presentation”>φ(n)φ(n) ,这个函数叫做欧拉函数。例

即当n=p&#x00D7;q” role=”presentation”>n=p×qn=p×q

同时这些数还有以下两个有趣的情况

  1. 这些数之间进行互乘的同余运算,结果还是这些数。

    例如对于1:1&#x00D7;1&#x2261;1(mod10)” role=”presentation”>1×11(mod10)1×1≡1(mod10)

    对于3:3&#x00D7;1&#x2261;3(mod10)” role=”presentation”>3×13(mod10)3×1≡3(mod10)

    对于7:7&#x00D7;1&#x2261;7(mod10)” role=”presentation”>7×17(mod10)7×1≡7(mod10)

    对于9:9&#x00D7;1&#x2261;9(mod10)” role=”presentation”>9×19(mod10)9×1≡9(mod10)

    如果一些数在互相运算之后,得到的结果还是这些数中,我们称这些数在这个运算条件下具有封闭性

  2. 对这些数进行求幂运算,并且再模10,结果如下表

a” role=”presentation”>aa 1 3 7 9
a0” role=”presentation”>a0a0 1 1 1 1
a1” role=”presentation”>a1a1 1 3 7 9
a2” role=”presentation”>a2a2 1&#x00D7;1=1” role=”presentation”>1×1=11×1=1 3&#x00D7;3=9” role=”presentation”>3×3=93×3=9 7&#x00D7;7=9” role=”presentation”>7×7=97×7=9 9&#x00D7;9=1” role=”presentation”>9×9=19×9=1
a3” role=”presentation”>a3a3 1&#x00D7;1&#x00D7;1=1” role=”presentation”>1×1×1=11×1×1=1 3&#x00D7;3&#x00D7;3=7” role=”presentation”>3×3×3=73×3×3=7 7&#x00D7;7&#x00D7;7=3” role=”presentation”>7×7×7=37×7×7=3 9&#x00D7;9&#x00D7;9=9” role=”presentation”>9×9×9=99×9×9=9
a4” role=”presentation”>a4a4 1&#x00D7;1&#x00D7;1&#x00D7;1=1” role=”presentation”>1×1×1×1=11×1×1×1=1 3&#x00D7;3&#x00D7;3&#x00D7;3=1” role=”presentation”>3×3×3×3=13×3×3×3=1 7&#x00D7;7&#x00D7;7&#x00D7;7=1” role=”presentation”>7×7×7×7=17×7×7×7=1 1&#x00D7;1&#x00D7;1&#x00D7;1=1” role=”presentation”>1×1×1×1=11×1×1×1=1

其中,

  • 我们规定a0&#x2261;1(mod10)” role=”presentation”>a01(mod10)a0≡1(mod10)

  • 所有a&#x03C6;(10)” role=”presentation”>aφ(10)aφ(10))

  • 对于3和7来说,他们的a0” role=”presentation”>a0a0时刚好又回到了1,如果大于4之后,又会开始循环

    在模n的情况下一定能找到一个数g” role=”presentation”>gg刚好把所有与n互质并且小于n的数各得到一遍。我们把满足这种条件的数称为 生成元

2. 当模数为质数p” role=”presentation”>pp的时候

当模p” role=”presentation”>pp时。

同样求小于 p” role=”presentation”>pp有如下表

a” role=”presentation”>aa 1 2 3 4 5 6
x” role=”presentation”>xx 6 5 4 3 2 1

而求a” role=”presentation”>aa

如下表

a” role=”presentation”>aa 1 2 3 4 5 6
a&#x2212;1” role=”presentation”>a1a−1 1 4 5 2 3 6

它同样有模数为合数n” role=”presentation”>nn时的性质

  1. 这些数在同余运算规则下进行乘法运算,同样具有封闭性
  2. 任意的a” role=”presentation”>aa的规则,且同样有生成元

3. 离散对数问题

前面我们得到了有这么一个结论:

在模n的情况下一定能找到一个数g” role=”presentation”>gg刚好把所有与n互质并且小于n的数各得到一遍。我们把满足这种条件的数称为 生成元

那么,在模n” role=”presentation”>nn的值。

由于生成元的特性,我们知道,在模n” role=”presentation”>nn。那么如何求a的值?

我们发现,这个问题没有任何规律。例如,当n=11,g=2时,有如下表

g” role=”presentation”>gg 2 2 2 2 2 2 2 2 2 2 2
b=ga” role=”presentation”>b=gab=ga 1 2 3 4 5 6 7 8 9 10 1
a” role=”presentation”>aa 0 1 8 2 4 9 7 3 6 5 10

在实数计算中,我们知道当b=ga” role=”presentation”>b=gab=ga值达到十进制两三百位时,即便是有大型计算机的情况下,所要花费的时间依然是个天文数字。

4.RSA原理

n=p&#x00D7;q” role=”presentation”>n=p×qn=p×q,这是一个世界性的极为困难的数学难题。RSA的基础就是基于的n的两个质数分解难题。

具体过程如下:

  • Alice选择两个大质数p” role=”presentation”>pp

    我们知道,e” role=”presentation”>ee)

  • 接下来,Bob可以在非安全信道请求Alice获得公钥。Evl通过中间攻击,只能获得(e,n)” role=”presentation”>(e,n)(e,n),然后把D发送给Alice

  • Alice收到D之后,计算me(e&#x2212;1)(modn)=me&#x00D7;e&#x2212;1(modn)&#x2261;m(modn)” role=”presentation”>me(e1)(modn)=me×e1(modn)m(modn)me(e−1)(modn)=me×e−1(modn)≡m(modn).

其中,在不安全信道中传输的是n” role=”presentation”>nn来揭秘被加密的消息。
且,m不能是大于n的数,当m大于n时可以拆分之后分段加密。

举个例子吧

  • 假设取两个质数p=11” role=”presentation”>p=11p=11.
    &#x03C6;(n)=(p&#x2212;1)&#x00D7;(q&#x2212;1)=120” role=”presentation”>φ(n)=(p1)×(q1)=120φ(n)=(p−1)×(q−1)=120
    随意选取一个和&#x03C6;(n)” role=”presentation”>φ(n)φ(n)
    那么e&#x2212;1=63” role=”presentation”>e1=63e−1=63.
  • 公钥为(e&#xFF0C;n)” role=”presentation”>(en)(e,n)
    私钥为(s&#xFF0C;n)” role=”presentation”>(sn)(s,n)
    要加密的原始数据为m” role=”presentation”>mm。(计算机中任何数据,最后传输或者保存都会转换成二进制的数据)
  • 加密过程:Bob请求Alice,获得公钥,密文为D” role=”presentation”>DD。 Bob将D传输出去。
  • Evl通过中间攻击,只能获得(e,n)” role=”presentation”>(e,n)(e,n)
  • 解密过程:Alice获得D” role=”presentation”>DD,获得了原始数据。

这里的11和13比较小,知道公钥为(7,143)之后,容易将143做因式分解求的11与13,从而可以算出e&#x2212;1” role=”presentation”>e1e−1。从而不能从密文中获得原始数据。

猜你喜欢

转载自blog.csdn.net/qq_34531925/article/details/80238936