加密的那些事,你真知道吗

2020-12-15 16:08:35 浏览数 (1)

引言

时常会碰到加密相关的概念,对称和非对称加密甚至AES,RSA算法等内容。

通过本次介绍希望更加易了解这些概念和原理。

对称加密是什么

讲对称加密之前先看以下场景

假如,没有任何加密情况下,进行通信

一般只有两人参与通信就没什么问题。但是。。。

为了防窃听者存在,双方定一个暗号进行通信

用暗号加密的信息窃听者看到也不用担心了。但是真的安全吗?

一旦暗号被窃听者给获取到的话,之后所有的通讯信息对窃听者来说是完全透明的。

于是,他们决定再定一个新暗号,要好好保管绝不泄露

但事与愿违,保管好暗号太难了

上面几张漫画图其实已经大致的指出了对称加密的概念以及特点

对称加密是什么?

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密

对称加密的特征:

1. 加密方和解密方使用同一个密钥

2. 密钥传输过程不安全,且容易被破解,密钥管理也比较麻烦

3. 加密解密速度比较快,效率高(相对非对称加密)

对称加密的本质

对称加密是如何实现的?他的本质是什么呢?为了易于解答还是按照图示来看

XOR异或运算符, A XOR B

如果A和B两个值不相同,结果为1 ,否则为0

图片中

  • 数字1的字符串可以认为是原文
  • 数字2和4是密钥
  • 数字3是加密后的密文
  • 数字5是解密后的原文

对称加密的分组模式

按照以上能看出运算的双方长度相同,也就是明文和密钥长度相同。

但是,实际通常要加密的明文长度很长,密钥通常是相对固定的。

这就需要明文按照密钥长度进行分组,即分成多个明文块(block),然后对每个block分别和密钥进行迭代的XOR运算,形成最终的密文。这样迭代的方式就称为分组的模式

常用的分组模式有 ECB、CBC、CFB、OFB、CTR 。

以上五种分组模式中,ECB模式很容易被破解,其余四种分组模式各有千秋,CBC模式曾经很火过,但是被CTR模式代替了(实际情况是极力推荐使用GCM,这个模式基于CTR模式,感兴趣的去搜索了解下吧),另外CFB和OFB也逐渐被CTR代替了。

那为什么ECB模式很容易破解呢?

为什么CBC模式曾经这么火过但是被CTR模式代替了呢?

带着这个疑问继续看下面给大家主要介绍ECB和CBC以及CTR模式

首先,

1) ECB模式 - Electronic Code Book,电子密码本模式

如图所示,ECB模式加密解密时,相同明文分组与密文分组是一一对应关系,因此明文中存在多少相同明文分组最终都将被转换为相同的密文分组。但是这样一来只要观察密文,就可以知道明文存在怎样的重复组合,并可以以此为线索来破译密码,所以是有一定风险的。

举一个例子说明:

假设某在线支付应用,用户提交的密文对应的明文为:

member=abc||pay=1000.00

其中前16个字节为:

member=abc||pay=

这正好是一个或两个分组的长度,因此攻击者只需要使用“1.00”的密文,替换“1000.00”的密文,即可伪造支付金额从1000元至1元。在实际攻击中,攻击者可以通过事先购买一个1元物品,来获取1.00的密文,这并非一件很困难的事情。

因此当需要加密的明文多于一个分组的长度时,应该避免使用ECB模式,而使用其他更加安全的加密模式。

2) CBC模式 -Cipher Block Chaining,密码块链模式

如图所示,所有分组的加密都链接在一起,其中各分组所用的密钥先沟通。加密时输入的是当前的明文分组和上一个密文分组的异或,这样加密算法的输入不会显示出与这次明文分组之间的固定关系,所以重复的明文分组不会再密文中暴露出这种重复关系。并且最开始会生成初始化的随机变量进行异或运算。

所以与ECB比较起来安全性提高了很多,也是TLS协议(https中使用)中即使用此模式。

但是为什么这个模式越来越不火了呢?

其中有很大的问题是因为它是串行的,就是说每一组需要等待上一组加密结束后才能开始进行加密,这与想要并行运算提高效率方面来说的话是个硬伤。(CFB和OFB也是串行,差不多类似的原因吧)

3) CTR模式 -CounTeR,计数器模式

如图所示,计数器模式不再对密文进行加密,而是对一个逐次累加的计数器进行加密,用加密后的序列与明文进行异或运算得到密文。因此,计数器模式解决了ECB模式中,相同的明文会得到相同的密文的问题并且不同于CBC、CFB、OFB串行,可支持加解密并行计算,可事先进行加解密准备。

非对称加密是什么

同样,讲非对称加密之前先看以下场景

假如窃听者一直存在,可威胁到窃取暗号的风险

生成的两个暗号,一个公开,另一个不公开。

公开的暗号进行加密只能用不公开的暗号才能解密。

这样即使窃取了公开的暗号也无法进行解密。但是这样就真没问题了吗?

窃取者假扮为发送者给接收者发送暗号,之后接收者由拿到的公开暗号进行加密后发送消息。

窃取者就用自己的私人暗号进行解密窃取到对应消息。

在这里,接收者最担心的就是无法确定对方就是发送者。

接下来窃取者想尽办法再去欺骗接收者

窃取者看到接收者验证身份信息,于是...

就这样窃取者和接收者的博弈就开始了。

整个链路如图所示,

步骤1:

发送者生成个人的公开密钥和私有密钥,然后把自己的个人信息和公开密钥发送到CA证书授权中心,它是数字证书发行的唯一机构。

步骤2:

CA证书授权中心也生成自己的公开密钥和私有密钥,利用私有密钥把发送者发来的个人信息和发送者的公开密钥进行加密签名后作为证书发给发送者。

步骤3:

发送者把证书和自己的公开密钥发送给接收者。

步骤4:

接收者用CA证书授权中心获取的CA的公开密钥把证书进行解密,解密后得到的发送者公开密钥与发送者发来的公开密钥进行对比,对比一致确认发送者信息。

步骤5:

接收者用发送者的公开密钥把原文进行加密后,密文发送给发送者。

步骤6:

发送者用自己的私有密钥把密文进行解密。

上面几张漫画图其实也已经大致的指出了非对称加密的概念和特点,甚至也有签名和证书的概念(证书相关内容可以自行先搜索了解,不在本文章再详细讲解了)

非对称加密是什么?

加密和解密使用的是两个不同的密钥来进行的加密方法

非对称加密的特征:

1. 需要两个密钥:公开密钥和私有密钥,并且是一对的

2. 加密的双向性:公钥和私钥任一个均可用作加密,此时另一个则用解密

3. 公钥无法推导出私钥

4. 安全性依赖于算法和密钥,安全性高,因此加密解密速度比对称加密慢

非对称加密的本质:

假设D表示允许的信息集合。例如,D可能是所有有限长度的位序列的集合。

在最简单、最原始的公钥加密设想中,要求公钥与私钥指定一种从D到其自身的一一对应的函数。

公钥PA的函数用PA( )表示,对应的私钥SA的函数表示成SA( ),因此PA( )与SA( )函数都是都是D的排列。

假定已知密钥PA或SA ,可以有效地计算出函数PA( )和SA( )。

系统中任何参与者的公钥和私钥都是一个“匹配对”,它们指定的函数互为反函数。也就是说,对任何消息M∈D ,有

M = SA( PA( M ) )

M = PA( SA( M ) )

无论用哪种次序,运用两把密钥PA和SA 对M相继进行变换后,最后仍然得到消息M。

在这里除了拿到SA私钥的人以外,没人能在较实用的时间内计算出函数SA( )。

因此必须必须对SA保密,不然失去密钥的唯一性,并且加密系统也不能赋予唯一性。

如图所示,发送加密的消息M,公钥pa计算出C=PA( M ),并把C发送,对方收到密文C后,运用私钥SA恢复原始消息:SA(C)=SA(PA(M))= M

类似地,在非对称加密中很容易实现数字签名。

如图所示,运用私钥SA和等式Q=SA(M)计算出信息M的数字签名Q,然后把消息和签名对(M,Q)发送给对方,对方收到后利用公钥PA,通过验证M=PA(Q)来证实消息的确来自目标方。如果等式成立,则消息来源是正确无误,如果不成立,那么信息M或者Q传输错误或损坏,要么信息对(M,Q)是一个故意的伪造。

话说在上述非对称加密特征3 中提到的“公钥无法推导出私钥”,为什么无法推导出呢?

带着这个疑问接下来看看我们非对称加密最常用的算法“RSA算法”

RSA对称对加密算法

接着上面的介绍,其实公钥和私钥它们只是一个想法而已,那我们用什么样的工具把这个想法落实下来呢?数学家已经想出了方法,就是利用数论里的质数的性质。

假设,有两个不相等的质数 P和Q (质数是指一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数)

等式

M是很容易计算出来的,但是从M倒退计算P和Q是极其困难的,因为在数学上面截止到目前为止,人类还没有找到很有效的方法可以从M计算出P和Q的方法。

所以如果 P和Q的位数变得足够大,就硬算的方法把这个M分解成P和Q的成本超过破解密码的成本。

我们接下来介绍的RSA算法是在1977年由三位MIT的数学家所发明的,RSA就是由三位数学家的姓氏的第一个字母命名的。

我们来看下RSA的演算法

第1步:

上面提到的, 建造两个非常非常大的质数 P 和 Q

第2步:

用两个质数相乘P*Q 得到 M , 即

第3步:

两个质数各减1再相乘 得到 R , 即

第4步:

选择 e ,但是这个 1< e < R , 并且e 与R是个互质 (互质是指公约数只有1的两个整数,比如7和11的最大公因数是1,因此这是整数互质)

第5步:

因为 e和R是互质,所以一定会存在这样的方程

这里 x和y是整数

第6步:

到这里就可以做一件事情,在上面出来的数当中,P、Q、R、y都不需要了

只留M、e、x 这三个数就可以了。

这里(M,e)就当做公钥,x就是自己一定要保管好的,私钥(M,x)

以上就RSA公钥系统就完成了

那我们看下他是怎么实物上是怎么运作的

首先,这位小刘把公钥(M,e)分享出去,自己保存好私钥(M,x)

然后这位安其拉小朋友将自己要发出的信息经过编码处理得到一串数值 A

,然后经过 A的e次方与M求余数C 作为密文传送

小刘接收到密文C,经过C的x次方与M求余数得到原文 A,然后反编码处理得到信息。

那有人会提出这样的疑问,为什么经过这样的算法一定会算会原来的A呢,这事实上就是经过数学的定理推导出来的。

接下来我给大家尽可能简单的方式来说明一下这个推导过程。(冒出各种函数和数学定理可能有点烧脑且枯燥无味,兴趣不大可直接跳过~)

推导过程

首先来介绍 欧拉函数,有正整数M,欧拉函数是小于或等于M的正整数中与M互质的数的个数,

但是这里M越来越大的时候怎么算呢,比如1260

这里有欧拉函数计算公式,如下

但是这里M越来越大的时候怎么算呢,比如1260

这里有欧拉函数计算公式,如下

好了,接下来回到RSA演算法的步骤1里提过的 两个不相等的质数 P 和 Q 还记得吧

P和Q相乘很容易得出 M ,

那这个M的欧拉常数按照上面公式很容易算出来

这个等式是不是很眼熟?没错!就是上面RSA演算法步骤3里的

R 其实就是 M的欧拉函数结果,其实上面就是为了方便看所以随便写了字母R而已、

然后再回到最初的问题,如何A的e次方与M求余数得到结果C,再经过x次方与M求余数得到A呢

接下来终于等到了数学世界中最美妙的定理之一欧拉定理上场了。

在数论中,欧拉定理,(也称费马-欧拉定理)是一个关于同余的性质。欧拉定理表明,若n,a为正整数,且n,a互质(来自于搜狗百科,证明方法可自行搜索)

因此上面的等式中

那我们看一下,M是由很大很大很大的两个质数P和Q相乘的结果。A的y次方也不会跟质数P或Q的值相等,因此可以认为A的y次方与M就是互质的,所以这个推导过程是正确的。

好了,本章的内容讲完了

AES给小编给点时间整理整理下次有机会再讲讲吧~

结语

总有人会问到底哪种加密方法更安全,其实破解加密的难度除了跟加密方法有关,还跟密钥长度以及加密模式也有很大关系。

对称加密和非对称加密所适用的业务场景不同,好比锤子和斧头哪个更好一样,利用好各自的特点,组合使用,效果更佳。

0 人点赞