图解密码技术(一)密码

第一章 环游密码世界

1.3 对称密码和公钥密码

1.3.1 密码算法

加密、解密的算法合在一起称为密码算法

1.3.3 对称密码与公钥密码

  • 对称密码:加密和解密时使用同一个秘钥
  • 公钥密码:也是非对称密码,加密和解密时使用不同的秘钥

第三章 对称密码

3.3 从文字密码到比特序列密码

3.3.1 编码

将现实世界中的东西映射为比特序列的操作称为编码。

子密钥指的是本轮加密使用的密钥,在 Feistel 络中,每一轮都需要使用一个不同的子密钥。

一轮的具体步骤如下:

  1. 将输入的数据等分为左右2侧
  2. 将输入的右侧直接发送到输出的右侧
  3. 将输入的右侧发送到轮函数
  4. 轮函数根据右侧数据和子密钥计算出一串看上去是随机的比特序列
  5. 将步骤4中得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧

从这个过程中可以发现,一轮后右侧的数据没有加密,因此在每轮之间需要将左侧和右侧的数据对调。

如下展示了一个三层的 Feistel 络:

有多轮的情况也一样,解密时只要按照相反的顺序来使用子密钥就可以了。

明文经过三重DES处理才能变成最后的密文,DES秘钥的长度实际上是56比特,因此三重DES的秘钥长度就是168比特。

三重DES的过程为什么是:加密 -> 解密 -> 加密 呢是为了兼容普通的DES加密,如果三重的秘钥都相同,那么三重DES也就等同于普通DES了。

3.7 AES的选定过程

3.7.1 什么是AES

AES:Advanced Encryption Standard,是取代其前任标准(DES)而成为新标准的一种对称加密算法。

全世界提供了多个对称密码算法作为AES的候选,最终从这些候选中选出了一种名为 Rijndael 的对称加密算法。

3.8 Rijndael

Rijndael 也是分组密码。

3.8.2 Rijndael的加密解密

Rijndael 算法也是多轮的,但每一轮中,Rijndael使用了SPN结构。

加密

每一轮中的步骤大致如下:

其中的 InvMixColumns, InvShiftRows, InvSubBytes 分别为 MixColumns, ShiftRows,SubBytes 的反向运算。

第四章 分组密码的模式–分组密码是如何迭代的

在第三章介绍的DES和AES都属于分组密码,它们只能加密固定长度的明文,如果需要加密任意长度的明文,就需要对分组密码进行迭代,而分组密码的迭代方式就称为分组密码的 模式

4.2 分组密码的模式

4.2.1 分组密码与流密码

  • 分组密码:每次只能处理特定长度的一块数据的一类密码算法,一个分组的比特数就称为分组长度
  • 流密码:对数据流进行连续处理的一类密码算法,流密码中一般以1比特,8比特或32比特为单位进行加密和解密。

4.2.2 什么是模式

分组密码的主要模式有以下5种:

  • ECB模式:Electronic CodeBook Mode(电子密码本模式)
  • CBC模式:Cipher Block Chaining mode(密码分组链接模式)
  • CFB模式:Cipher FeedBack mode(密文反馈模式)
  • OFB模式:Output FeedBack mode(输出反馈模式)
  • CTR模式:CounTer mode(计数器模式)

4.2.3 明文分组与密文分组

  • 明文分组:分组加密算法中作为加密对象的明文
  • 密文分组:使用分组密码算法将明文分组加密之后所生成的密文

4.2.4 主动攻击者 Mallory

窃听者Eve只能被动地进行窃听,而主动攻击者则可以主动介入发送者和接收者之间的通信过程,进行阻碍通信或者篡改密文等活动。

4.3 ECB模式

将明文分组直接加密的方式就是ECB模式,这种模式非常简单,但是因为存在弱点因此一般不会使用。

4.3.1 什么是ECB模式

在ECB模式中,明文分组加密之后的结果将直接成为密文分组。

使用ECB模式时,相同的明文分组会被转化为相同的密文分组,也就是说,我们可以将其理解为一个巨大的 明文分组 -> 密文分组 的对应表,因此ECB模式被称为电子密码本模式。

当最后一个明文分组的长度小于分组长度时,需要用一些特定的数据进行填充。

4.3.3 对ECB模式的攻击

假设攻击者Mallory能够改变密文分组的顺序,当接收者对密文进行解密时,由于密文分组顺序被改变,相应的明文分组顺序也会被改变,即Mallory无需破译密码即可操纵明文。

假设分组长度为128比特,某银行的转账请求数据由以下3个分组构成:

  • 分组1:付款人的银行账
  • 分组2:收款人的银行账
  • 分组3:转账金额

我们可制作一个从 A-5374 账 向 B-6671 账 转账1亿元的转账请求,用16进制数据表示如下:

Mallory只需将分组1和分组2的密文调换一下顺序,即可将转账请求篡改成 从 B-6671 账 向 A-5374 账 转账1亿元。

Mallory对密文进行的篡改,可以通过第8章介绍的消息认证码检测出来,不过如果使用其他模式,这种攻击从一开始就是不可能实现的。

4.4 CBC模式

4.4.1 什么是CBC模式

CBC模式是将前一个密文分组与当前明文分组的内容混合起来(XOR运算)进行加密。

4.7 CTR模式

CTR模式是一种将逐次累加的计数器进行加密来生成密钥流的流密码。

4.7.1 计数器的生成方法

每次加密时都会生成一个不同的值(nonce)来作为计数器的初始值,当分组长度为128比特时,计数器的初始值可能是像下面的形式:

4.8 应该使用哪种模式

第五章 公钥密码

5.3 密钥配送问题

5.3.1 什么是密钥配送问题

Alice给Bob发邮件时,不发送密钥,Bob无法解密,发送密钥,Eve也可以解密。

解决密钥配送问题的方法:

  • 事先共享密钥
  • 通过密钥分配中心
  • 通过 Diffie-Hellman 密钥交换
  • 通过公钥密码

5.3.3 密钥分配中心

  1. Alice向密钥分配中心发出想要和Bob通信的请求
  2. 密钥分配中心通过伪随机数生成器生成一个会话密钥,这个密钥是供Alice和Bob本次通信中临时使用的密钥
  3. 密钥分配中心从数据库中取出Alice和Bob的密钥
  4. 密钥分配中心用Alice的密钥加密会话密钥,发送给Alice;用Bob的密钥加密会话密钥,发送给Bob
  5. Alice用自己的密钥解密,得到会话密钥
  6. Alice用会话密钥加密邮件,发送给Bob
  7. Bob对来自分配中心的消息进行解密(用自己的密钥),得到会话密钥
  8. Bob用会话密钥对Alice的邮件进行解密
  9. Alice和Bob删除会话密钥

5.3.4 通过 Diffie-Hellman 密钥交换来解决密钥配送问题

这个在第11章中详述

5.3.5 公钥密码

发送者使用公钥密码进行加密,接收者使用私钥进行解密。

5.4 公钥密码

5.4.1 什么是公钥密码

公钥密码中,加密密钥一般是公开的,但是解密密钥一定不能公开。

5.4.3 公钥通信的流程

RSA的密文是对代表明文的数字的E次方求mod N的结果。

E和N是RSA加密的密钥,也就是说,E和N的组合就是公钥,一般写成公钥是(E, N)。

5.6.3 RSA解密

RSA的解密可以用下面的公式来表达:

5.7 对RSA的攻击

5.7.4 中间人攻击

Mallory混入发送者和接收者中间,对发送者伪装成接收者,对接收者伪装成发送者。

Alice准备向Bob发送一封邮件:

  1. Alice向Bob索取公钥
  2. Mallory拦截了Bob的邮件,使其无法发送给Alice。Mallory把Bob的公钥保存起来,然后把自己伪装成Bob,把自己的公钥发给Alice
  3. Alice用收到的公钥(Mallory的公钥)加密邮件,发送给Bob
  4. Mallory拦截了邮件,用自己的私钥解密邮件。
  5. Mallory篡改邮件后,再用Bob的公钥进行加密,然后伪装成Alice,发送给Bob
  6. Bob接收到邮件解密后,就看到了Mallory篡改后的邮件,但是他以为是Alice发送的

要防御中间人攻击,还需要一种手段来确认收到的公钥是否真的来自Bob,这就是认证。

第六章 混合密码系统

混合密码系统用对称密码来加密明文,用公钥密码来加密对称密码中所使用的密钥。

混合密码系统解决了公钥密码速度慢的问题(因为相比消息的长度,密钥的长度较短),对称加密中的密钥配送问题。

络上的密码通信所使用的 SSL/TLS 都运用了混合密码系统。

  • 数字签名:由单向散列函数和公钥密码组合而成
  • 证书:由公钥和数字签名组合而来
  • 消息认证码:由单向散列函数和密钥组合而成

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年7月15日
下一篇 2020年7月15日

相关推荐